Merge branch 'hastysite'
jump to
@@ -1,4 +1,7 @@
output/* -*.log -.sass-cache/* -tmp/* +temp/* +_tmp/* +_bkp/* +_old/* +*.db +*.db-journal
@@ -1,13 +0,0 @@
-# ./Gemfile -source 'https://rubygems.org' - -gem "nanoc", "< 4" -gem "extlib" -gem "bb-ruby" -gem "builder" -gem "less" -gem "therubyracer" -gem "coderay" -gem "glyph" -gem "RedCloth" -gem "rdiscount"
@@ -0,0 +1,17 @@
+== H3RALD Web Site + +H3RALD.com was created in 2004 by Fabio Cevasco, a technical writer, programmer and IT enthusiast. It features over a hundred "articles":/articles/ covering a wide range of topics, from programming to writing, productivity and even traveling. + +As of version 8, H3RALD.com is a completely static web site, except for a few AJAX calls. All the files are generated automatically thanks to the "nanoc":http://nanoc.stoneship.org/ publishing system, an ingenious creation of "Denis Defreyne":http://www.stoneship.org/. Nanoc can be used to easily create static web sites using Ruby, as explained in "this article":http://www.h3rald.com/articles/take-back-your-site-with-nanoc/. + + +=== Licensing + +TBD + +=== Requirements + +=== Credits + +* "David J.Perry":http://scholarsfonts.net/, who designed the "Cardo font":http://scholarsfonts.net/cardofnt.html I used for the H3RALD logo. +* The creators of the free "Crimson Text":http://aldusleaf.org/crimson/ font, used throughout the web site.
@@ -1,40 +0,0 @@
-h2. H3RALD Web Site - -H3RALD.com was created in 2004 by Fabio Cevasco, a technical writer, programmer and IT enthusiast. It features over a hundred "articles":/articles/ covering a wide range of topics, from programming to writing, productivity and even traveling. - -As of version 8, H3RALD.com is a completely static web site, except for a few AJAX calls. All the files are generated automatically thanks to the "nanoc":http://nanoc.stoneship.org/ publishing system, an ingenious creation of "Denis Defreyne":http://www.stoneship.org/. Nanoc can be used to easily create static web sites using Ruby, as explained in "this article":http://www.h3rald.com/articles/take-back-your-site-with-nanoc/. - - -h3. Licensing - -The "articles":/archives/ and all the content published on this web site is licensed under the _Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License_. For other uses, please contact us. - -<a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img alt="Creative Commons License" src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png" /></a> - -The source code of this web site, such as its layout, SASS/CSS stylesheets, custom rake tasks and code is licensed under the terms of the <em><a href="http://creativecommons.org/licenses/MIT/">MIT License</a></em> and it is available on "GitHub":http://github.com/h3rald/h3rald. - - -h3. Requirements - -The following ruby libraries (gems) are used to compile this web site: - -* *"nanoc":http://rubygems.org/gems/nanoc*, to generate the entire web site -* *"extlib":http://rubygems.org/gems/extlib*, in some custom Rake tasks -* *"bb-ruby":http://rubygems.org/gems/bb-ruby*, for the BBCode filter -* *"builder":http://rubygems.org/gems/builder/*, to create RSS and ATOM feeds -* *"sass":http://rubygems.org/gems/sass/*, for the SASS filter -* *"coderay":http://rubygems.org/gems/coderay/*, for syntax highlighting -* *"glyph":http://rubygems.org/gems/glyph*, for the Glyph filter - -Additionally, the following gems were necessary to migrate from the previous version of this web site, powered by the Typo blogging engine: -* *"mysql":http://rubyforge.org/projects/mysql/* -* *"sequel":http://rubyforge.org/projects/sequel/* - - -h3. Credits - -Special thanks to the following people, who made this web site possible: - -* "Denis Defreyne":http://www.stoneship.org/, for creating the wonderful "nanoc":http://nanoc.stoneship.org/ site publishing system. -* "David J.Perry":http://scholarsfonts.net/, who designed the "Cardo font":http://scholarsfonts.net/cardofnt.html I used for the H3RALD logo. -* The creators of the free "Crimson Text":http://aldusleaf.org/crimson/ font, used throughout the web site.
@@ -1,6 +0,0 @@
-require 'rubygems' -require 'nanoc3/tasks' -Dir['tasks/**/*.rake'].sort.each { |rakefile| load rakefile} - -task :default => ["site:update"] do -end
@@ -1,172 +0,0 @@
-#!/usr/bin/env ruby - -ignore /^\/hastystyles\/(styles|fonts|images|README)/ - -ignore '/styles/_*' - -compile /^\/(archives|home)\// do - filter :erb - layout 'default' -end - -compile /^\/(projects|about)/ do - filter :erb - filter :redcloth - layout 'default' -end - -compile /(rss|atom)/ do - filter :erb unless rep.binary? # e.g. rss.png image -end - -compile '/styles/_*/' do -end - -compile '/hastystyles/styles/_*/' do -end - -compile '/styles/*' do - if item[:extension] == "less" && item.identifier.match(/style\/$/) then - filter :less - end -end - -compile "sitemap" do - filter :erb -end - -compile /^\/(js\/.+?)/ do - # do nothing -end - -compile '/hastyscribe/HastyScribe_UserGuide/' do - # do nothing -end - -compile '/litestore/LiteStore_UserGuide/' do - # do nothing -end - -compile '/glyph/book/images/*' do - # do nothing -end - -compile '/glyph/book/*' do - layout 'default' -end - -compile '/ruby-compendium/book/images/*' do - # do nothing -end - -compile '/ruby-compendium/book/*' do - layout 'default' -end - -compile '*' do - if item[:filters_pre] && !item[:filters_pre].empty? then - item[:filters_pre].each do |f| - filter f.to_sym - end - layout 'default' - else - unless rep.binary? then - case item[:extension] - when 'textile' then - filter :redcloth - layout 'default' - when 'md','markdown' then - filter :rdiscount - layout 'default' - when 'bbcode' then - filter :bbcode - layout 'default' - when 'glyph' then - glyph_config @item - glyph_article_for @item - if item[:pdf] then - pdf_file = Pathname.new "#{Dir.pwd}/output#{item.identifier.gsub(/\/$/, '')}.pdf" - glyph_pdf_for @item unless pdf_file.exist? - end - Glyph.reset - end - end - end -end - -route /^\/tags\/.+?-(atom|rss)/ do - item.identifier.gsub(/(.+)-(rss|atom)\/$/, '\1/\2') + '.xml' -end - -route '/(atom|rss)/' do - item.identifier.chop + '.xml' -end - -route '/css/*' do - item.identifier.chop + '.css' -end - -route '/styles/*' do - item.identifier.chop + '.css' -end - -route '/hastyscribe/HastyScribe_UserGuide' do - '/hastyscribe/HastyScribe_UserGuide.htm' -end - -route '/litestore/LiteStore_UserGuide' do - '/litestore/LiteStore_UserGuide.htm' -end - -route '/glyph/book/' do - '/glyph/book/index.html' -end - -route '/ruby-compendium/book/' do - '/ruby-compendium/book/index.html' -end - -route '/glyph/book/images/glyph/*' do - item.identifier.chop + ".#{item[:extension]}" -end - -route '/glyph/book/*' do - item.identifier.chop+'.html' -end -route '/ruby-compendium/book/*' do - item.identifier.chop+'.html' -end - -route '/home/' do - "/index.html" -end - -route '/sitemap' do - item.identifier.chop + '.xml' -end - -route "/htaccess" do - "/.htaccess" -end - -route /\/(images|img|files|favicon|robots)\// do - item.identifier.chop + ".#{item[:extension]}" -end - -route '/js/*' do - item.identifier.chop + '.js' -end - -route '/fonts/*' do - item.identifier.chop + ".#{item[:extension]}" -end - -route '/hastystyles/fonts/*' do - item.identifier.chop + ".#{item[:extension]}" -end - -route '*' do - item.identifier + 'index.html' -end - -layout '*', :erb
@@ -0,0 +1,395 @@
+<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata>Generated by IcoMoon</metadata> +<defs> +<font id="entypo" horiz-adv-x="1024"> +<font-face units-per-em="1024" ascent="960" descent="-64" /> +<missing-glyph horiz-adv-x="1024" /> +<glyph unicode=" " horiz-adv-x="512" d="" /> +<glyph unicode="" glyph-name="add-to-list" d="M993.28 512h-174.080v174.080c0 30.72-20.48 30.72-51.2 30.72s-51.2 0-51.2-30.72v-174.080h-174.080c-30.72 0-30.72-20.48-30.72-51.2s0-51.2 30.72-51.2h174.080v-174.080c0-30.72 20.48-30.72 51.2-30.72s51.2 0 51.2 30.72v174.080h174.080c30.72 0 30.72 20.48 30.72 51.2s0 51.2-30.72 51.2zM378.88 512h-348.16c-30.72 0-30.72-20.48-30.72-51.2s0-51.2 30.72-51.2h348.16c30.72 0 30.72 20.48 30.72 51.2s0 51.2-30.72 51.2zM378.88 256h-348.16c-30.72 0-30.72-20.48-30.72-51.2s0-51.2 30.72-51.2h348.16c30.72 0 30.72 20.48 30.72 51.2s0 51.2-30.72 51.2zM378.88 768h-348.16c-30.72 0-30.72-20.48-30.72-51.2s0-51.2 30.72-51.2h348.16c30.72 0 30.72 20.48 30.72 51.2s0 51.2-30.72 51.2z" /> +<glyph unicode="" glyph-name="classic-computer" d="M819.2 972.8h-614.4c-56.32 0-102.4-46.029-102.4-102.4v-768c0-28.262 22.886-51.2 51.2-51.2v-102.4h716.8v102.4c28.314 0 51.2 22.938 51.2 51.2v768c0 56.371-46.029 102.4-102.4 102.4zM716.8 204.8h-204.8v51.2h204.8v-51.2zM768 409.6h-512v409.6h512v-409.6z" /> +<glyph unicode="" glyph-name="controller-fast-backward" d="M919.501 738.765l-368.794-253.389c0 0-14.285-10.291-14.285-24.627s14.285-24.525 14.285-24.525l368.794-253.491c29.286-19.456 53.299-5.069 53.299 32.051v491.981c0 37.222-24.013 51.61-53.299 32zM454.81 738.765l-368.794-253.389c0 0-14.285-10.291-14.285-24.627s14.285-24.525 14.285-24.525l368.794-253.491c29.286-19.507 53.299-5.12 53.299 32v492.032c0 37.222-24.013 51.61-53.299 32z" /> +<glyph unicode="" glyph-name="creative-commons-attribution" d="M644.26 582.494c0 17.535-14.234 31.739-31.739 31.739h-201.050c-17.527 0-31.739-14.205-31.739-31.739v-201.058h56.077v-238.076h152.367v238.076h56.085v201.058zM580.766 709.467c0-37.983-30.791-68.774-68.774-68.774s-68.774 30.791-68.774 68.774c0 37.983 30.791 68.774 68.774 68.774s68.774-30.791 68.774-68.774zM511.376 952.312c-136.16 0-251.41-47.505-345.722-142.528-96.8-98.309-145.174-214.631-145.174-348.985 0-134.338 48.374-249.866 145.174-346.524 96.771-96.659 212.023-144.988 345.722-144.988 135.329 0 252.627 48.72 351.88 146.217 93.493 92.549 140.264 207.658 140.264 345.295s-47.58 253.961-142.723 348.985c-95.158 95.023-211.633 142.528-349.421 142.528zM512.607 863.859c111.553 0 206.277-39.315 284.215-117.974 78.734-77.819 118.094-172.842 118.094-285.085 0-113.039-38.535-206.847-115.648-281.395-81.209-80.279-176.757-120.419-286.661-120.419-109.925 0-204.656 39.72-284.215 119.189s-119.338 173.667-119.338 282.626c0 108.958 40.192 203.982 120.576 285.085 77.106 78.659 171.416 117.974 282.977 117.974z" /> +<glyph unicode="" glyph-name="creative-commons-noderivs" d="M511.366 952.316c-136.147 0-251.398-47.49-345.711-142.529-96.801-98.309-145.175-214.617-145.175-348.987 0-134.339 48.374-249.868 145.175-346.497 96.772-96.689 212.025-145.019 345.711-145.019 135.336 0 252.635 48.749 351.889 146.218 93.494 92.58 140.265 207.689 140.265 345.298 0 137.638-47.58 253.979-142.724 348.987-95.159 95.039-211.633 142.529-349.43 142.529zM512.603 863.877c111.554 0 206.279-39.331 284.218-117.988 78.735-77.821 118.094-172.829 118.094-285.089 0-113.040-38.535-206.848-115.649-281.398-81.209-80.28-176.758-120.389-286.663-120.389-109.918 0-204.65 39.719-284.21 119.19-79.559 79.469-119.339 173.668-119.339 282.597 0 108.989 40.192 203.999 120.577 285.089 77.107 78.658 171.418 117.988 282.972 117.988zM697.702 577.289h-357.282v-84.63h357.282v84.63zM697.702 419.341h-357.282v-84.63h357.282v84.63z" /> +<glyph unicode="" glyph-name="creative-commons-noncommercial-eu" d="M860.779 809.79c-95.16 95.040-211.621 142.53-349.411 142.53-136.169 0-251.399-47.49-345.72-142.53-96.809-98.31-145.169-214.621-145.169-348.99 0-134.34 48.359-249.87 145.169-346.5 96.78-96.69 212.011-145.020 345.72-145.020 135.331 0 252.631 48.75 351.87 146.22 93.51 92.579 140.282 207.69 140.282 345.3 0 137.639-47.581 253.979-142.741 348.99zM799.249 179.4c-81.21-80.281-176.76-120.39-286.65-120.39-109.919 0-204.66 39.719-284.22 119.189-79.56 79.471-119.34 173.671-119.34 282.601 0 46.080 7.274 89.639 21.659 130.709l130.245-57.645h-9.39v-58.409h46.095c0-8.25-0.825-16.471-0.825-24.69v-14.011h-45.271v-58.409h53.49c7.41-43.619 23.865-78.99 46.080-106.979 46.080-60.901 120.135-93.811 200.775-93.811 52.68 0 100.381 15.63 128.37 31.291l-19.77 91.32c-17.28-9.061-55.92-21.39-93.779-21.39-41.16 0-79.815 12.329-106.156 41.97-12.345 13.981-21.39 32.91-27.135 57.6h178.89l254.19-112.515c-17.61-31.199-39.959-60.030-67.26-86.429zM479.569 436.754l-1.080 0.826 1.86-0.826h-0.78zM632.599 475.455h7.35v58.409h-139.32l-56.595 25.051c4.875 10.95 10.635 20.745 17.355 28.41 25.516 31.319 61.71 44.46 101.221 44.46 36.21 0 69.929-10.68 91.32-19.739l23.040 93.81c-29.64 13.139-73.23 24.659-123.421 24.659-77.339 0-143.175-31.259-190.080-83.909-10.41-12.031-19.44-25.531-27.63-39.81l-161.639 71.535c15.66 23.49 34.079 46.049 55.41 67.559 77.13 78.66 171.419 117.991 282.99 117.991 111.54 0 206.28-39.331 284.22-117.991 78.72-77.82 118.080-172.829 118.080-285.089 0-36.99-4.199-71.88-12.48-104.76l-269.82 119.415z" /> +<glyph unicode="" glyph-name="creative-commons-noncommercial-us" d="M511.369 952.32c137.79 0 254.28-47.505 349.44-142.53 95.131-95.040 142.711-211.364 142.711-348.99s-46.771-252.735-140.251-345.3c-99.27-97.485-216.57-146.22-351.901-146.22-133.68 0-248.939 48.315-345.72 144.989-96.794 96.661-145.169 212.191-145.169 346.531s48.375 250.68 145.169 348.99c94.321 95.025 209.581 142.53 345.72 142.53zM131.060 592.83c-14.67-41.475-22.005-85.485-22.005-132.030 0-108.961 39.779-203.161 119.34-282.615 79.576-79.47 174.285-119.206 284.205-119.206 109.921 0 205.471 40.125 286.68 120.421 27.179 26.279 49.559 54.93 67.14 85.994l-185.28 82.515c-12.571-62.34-68.131-104.46-135.3-109.411v-75.765h-56.416v75.765c-55.17 0.631-108.465 23.175-149.204 58.861l67.71 68.264c32.594-30.689 65.189-44.475 109.709-44.475 28.831 0 60.81 11.28 60.81 48.856 0 13.319-5.159 22.575-13.289 29.534l-105.21 46.845c-28.86 12.855-53.31 23.745-77.851 34.651l-251.039 111.795zM512.599 863.865c-111.54 0-205.859-39.329-282.96-117.989-20.999-21.166-39.239-43.291-54.749-66.375l187.89-83.655c16.98 52.11 66.51 83.715 126.645 87.254v75.766h56.416v-75.766c38.879-1.874 81.509-12.525 123.51-45.089l-64.559-66.375c-23.82 16.905-53.911 28.815-84.030 28.815-24.436 0-58.921-7.529-58.921-38.205 0-4.68 1.561-8.806 4.41-12.48l105.391-46.936c27.21-12.105 53.19-23.67 78.929-35.13l251.85-112.14c8.341 33.001 12.511 68.085 12.511 105.241 0 112.245-39.36 207.269-118.111 285.075-77.94 78.66-172.649 117.989-284.22 117.989z" /> +<glyph unicode="" glyph-name="creative-commons-public-domain" d="M511.358 952.316c-136.147 0-251.398-47.505-345.711-142.529-96.801-98.309-145.175-214.633-145.175-348.987 0-134.339 48.374-249.853 145.175-346.513 96.772-96.674 212.025-145.003 345.711-145.003 135.336 0 252.635 48.734 351.889 146.218 93.494 92.565 140.265 207.673 140.265 345.298 0 137.638-47.58 253.963-142.724 348.987-95.159 95.024-211.633 142.529-349.43 142.529zM512.594 863.862c111.554 0 206.279-39.315 284.218-117.975 78.735-77.819 118.094-172.843 118.094-285.087 0-113.040-38.535-206.848-115.649-281.398-81.209-80.28-176.758-120.42-286.663-120.42-109.918 0-204.65 39.736-284.21 119.205-79.559 79.454-119.339 173.668-119.339 282.613 0 108.958 40.192 203.984 120.577 285.087 77.107 78.659 171.418 117.975 282.972 117.975zM349.164 548.94h55.326c30.909 0 43.875-14.881 43.875-41.969 0-20.986-11.062-41.206-41.969-41.206h-57.232v83.175zM281.244 327.631h68.685v87.763h53.032c93.106 0 113.325 55.71 113.325 91.95 0 53.804-27.090 91.964-100.349 91.964h-134.692v-271.678zM534.78 327.631h105.313c82.799 0 138.494 39.3 138.494 135.838 0 96.54-55.695 135.84-138.494 135.84h-105.313v-271.678zM602.685 542.069h38.549c51.135 0 69.45-34.724 69.45-78.6 0-43.874-18.315-78.6-69.060-78.6h-38.939v157.199z" /> +<glyph unicode="" glyph-name="creative-commons-remix" d="M511.354 952.305c-136.135 0-251.391-47.489-345.71-142.526-96.777-98.307-145.164-214.614-145.164-348.98 0-134.336 48.387-249.832 145.164-346.49 96.777-96.687 212.034-145.016 345.71-145.016 135.342 0 252.654 48.748 351.92 146.215 93.478 92.578 140.246 207.684 140.246 345.29 0 137.635-47.578 253.973-142.706 348.98-95.157 95.037-211.659 142.526-349.46 142.526zM512.585 863.868c111.582 0 206.305-39.33 284.242-117.987 78.747-77.818 118.106-172.824 118.106-285.081 0-113.037-38.548-206.844-115.647-281.392-81.208-80.278-176.77-120.417-286.701-120.417-109.916 0-204.623 39.749-284.181 119.218-79.558 79.436-119.338 173.664-119.338 282.591 0 108.958 40.17 203.995 120.566 285.081 77.099 78.658 171.416 117.987 282.952 117.987zM833.454 452.1l-97.857 40.678v121.887l-300.62 125.156-134.006-58.858v-139.406l1.41-0.599-118.196-49.2v-126.326l126.326-54.149 127 52.559 8.58-3.421 263.048-108.477 5.76 2.401 128.155 54.718v139.196l-9.6 3.84zM693.779 291.215l-1.2 0.479v-0.75l-225.354 93.388v88.856l225.354-92.097v-2.88l1.2-0.51v-86.487zM708.959 404.731l-71.443 30.599 76.933 32.969 73.377-30.509-78.867-33.060zM812.335 329.703l-87.837-37.827v86.036l87.837 36.96v-85.169z" /> +<glyph unicode="" glyph-name="creative-commons-share" d="M511.354 952.313c-136.135 0-251.391-47.489-345.71-142.526-96.777-98.307-145.164-214.614-145.164-348.98 0-134.351 48.387-249.848 145.164-346.505 96.777-96.687 212.034-145.016 345.71-145.016 135.342 0 252.654 48.748 351.92 146.215 93.478 92.578 140.246 207.684 140.246 345.306 0 137.635-47.578 253.972-142.706 348.98-95.157 95.037-211.659 142.526-349.46 142.526zM512.585 863.876c111.582 0 206.305-39.33 284.242-117.987 78.747-77.818 118.106-172.824 118.106-285.081 0-113.052-38.548-206.859-115.647-281.407-81.208-80.278-176.77-120.417-286.701-120.417-109.916 0-204.623 39.749-284.181 119.218-79.558 79.437-119.338 173.664-119.338 282.606 0 108.956 40.17 203.993 120.566 285.081 77.099 78.658 171.416 117.987 282.952 117.987zM713.309 601.622h-107.532v107.038c0 14.834-12.030 26.879-26.879 26.879h-268.297c-0.809 0.029-1.619 0.029-2.399 0-13.92-1.259-24.54-12.93-24.48-26.879v-361.925c0-14.85 12.030-26.879 26.879-26.879h107.517v-107.036c0-14.85 12.030-26.879 26.879-26.879h268.313c14.85 0 26.879 12.030 26.879 26.879v361.923c0 14.836-12.030 26.879-26.879 26.879zM337.479 373.63v308.151h214.554v-80.158h-107.038c-0.96 0.046-1.92 0.046-2.88 0-13.71-1.484-24.088-13.094-23.999-26.879v-201.113h-80.638zM686.43 547.864v-308.165h-214.554v308.165h214.554z" /> +<glyph unicode="" glyph-name="creative-commons-sharealike" d="M511.366 952.316c-136.147 0-251.398-47.519-345.711-142.529-96.801-98.309-145.175-214.648-145.175-348.987s48.374-249.868 145.175-346.527c96.772-96.675 212.025-144.99 345.711-144.99 135.336 0 252.635 48.735 351.889 146.218 93.494 92.565 140.265 207.673 140.265 345.298s-47.58 253.948-142.724 348.987c-95.159 95.010-211.633 142.529-349.43 142.529zM512.603 863.862c111.554 0 206.279-39.329 284.218-117.975 78.735-77.819 118.094-172.843 118.094-285.087 0-113.040-38.535-206.848-115.649-281.413-81.209-80.278-176.758-120.405-286.663-120.405-109.918 0-204.643 39.736-284.21 119.19-79.559 79.469-119.339 173.67-119.339 282.628 0 108.96 40.192 203.984 120.577 285.087 77.107 78.646 171.418 117.975 282.972 117.975zM293.508 530.174c19.611 123.659 106.656 189.779 215.757 189.779 156.923 0 252.546-113.88 252.546-265.694 0-148.154-101.759-263.248-254.997-263.248-105.427 0-199.821 64.891-216.989 192.224h123.825c3.674-66.12 46.582-89.384 107.879-89.384 69.869 0 115.244 64.903 115.244 164.083 0 104.069-39.24 159.164-112.798 159.164-53.933 0-100.515-19.59-110.324-86.925l35.991 0.195-97.462-97.454-97.462 97.454 38.79-0.195z" /> +<glyph unicode="" glyph-name="creative-commons" d="M391.75 377.447c-20.797 0-36.5 7.603-47.1 22.806-10.7 15.097-16 35.297-16 60.497 0 55.5 20.997 83.303 63.1 83.303 8.4 0 17.5-2.803 27.3-8.403s18.097-15.4 24.8-29.4l63.1 32.8c-25.2 45.4-67 68.1-125.303 68.1-39.85 0-72.797-13.2-98.794-39.5-26.103-26.4-39.206-61.997-39.206-106.9 0-46 12.956-81.9 38.703-107.7 25.8-25.8 59.803-38.6 101.8-38.6 26.4 0 50.5 6.6 72.353 19.697 21.847 13.206 38.947 31.303 51.347 54.303l-58.1 29.4c-11.2-26.9-30.553-40.403-58-40.403zM663.447 377.447c-20.797 0-36.494 7.603-47.1 22.806-10.7 15.097-16 35.297-16 60.497 0 55.5 21.003 83.303 63.1 83.303 8.903 0 18.303-2.803 28.103-8.403 9.853-5.6 18.1-15.4 24.9-29.4l62.197 32.8c-24.7 45.4-66.197 68.1-124.497 68.1-39.8 0-72.75-13.2-98.8-39.5-26.097-26.4-39.103-61.997-39.103-106.9 0-46 12.703-81.9 38.253-107.7 25.5-25.8 59.55-38.6 102.2-38.6 25.747 0 49.647 6.6 71.45 19.697 21.903 13.206 39.3 31.303 52.203 54.303l-58.903 29.4c-11.2-26.9-30.6-40.403-58.003-40.403zM860.816 809.787c-95.159 95.038-211.659 142.525-349.463 142.525-136.134 0-251.391-47.487-345.709-142.525-96.778-98.306-145.163-214.613-145.163-348.978 0-134.353 48.384-249.85 145.163-346.506 96.778-96.687 212.034-145.016 345.709-145.016 135.344 0 252.656 48.747 351.922 146.216 93.478 92.578 140.244 207.684 140.244 345.306 0 137.634-47.575 253.972-142.703 348.978zM799.284 179.403c-81.206-80.281-176.769-120.419-286.7-120.419-109.916 0-204.622 39.75-284.181 119.219-79.556 79.434-119.337 173.662-119.337 282.606 0 108.956 40.169 203.994 120.566 285.081 77.1 78.656 171.416 117.988 282.953 117.988 111.581 0 206.306-39.331 284.244-117.988 78.747-77.819 118.103-172.825 118.103-285.081 0-113.053-38.547-206.859-115.647-281.406z" /> +<glyph unicode="" glyph-name="document-landscape" d="M972.8 819.2h-921.6c-28.262 0-51.2-22.886-51.2-51.2v-614.4c0-28.314 22.938-51.2 51.2-51.2h921.6c28.262 0 51.2 22.886 51.2 51.2v614.4c0 28.314-22.886 51.2-51.2 51.2zM921.6 204.8h-819.2v512h819.2v-512z" /> +<glyph unicode="" glyph-name="remove-user" d="M818.637-6.605c0 114.995-111.974 173.517-221.030 220.518-108.698 46.797-143.411 86.221-143.411 170.701 0 50.637 33.178 34.15 47.718 127.027 6.144 38.502 35.43 0.614 41.062 88.525 0 35.021-16.026 43.725-16.026 43.725s8.141 51.866 11.315 91.802c3.277 41.83-20.378 131.072-117.811 158.464-16.998 17.459-28.518 45.158 23.91 72.909-114.688 5.325-141.363-54.682-202.445-98.816-51.968-38.707-65.997-99.994-63.488-132.608 3.328-39.936 11.418-91.802 11.418-91.802s-16.077-8.704-16.077-43.725c5.632-87.962 35.021-50.022 41.114-88.525 14.541-92.877 47.77-76.39 47.77-127.027 0-84.48-10.854-113.152-119.603-159.949-109.107-46.95-143.053-122.214-142.49-231.219 0.154-32.614-0.563-44.595-0.563-44.595h819.2c0 0-0.563 11.981-0.563 44.595zM819.2 458.803l-117.709 122.778-54.323-54.323 122.829-117.658-122.778-117.658 54.323-54.323 117.658 122.778 117.658-122.778 54.323 54.323-122.778 117.658 122.726 117.658-54.323 54.323-117.606-122.778z" /> +<glyph unicode="" glyph-name="warning" d="M998.963 52.224l-456.038 851.558c-6.349 11.008-18.125 17.818-30.925 17.818-12.851 0-24.627-6.81-30.925-17.818l-455.987-851.558c-6.195-10.803-6.093-24.115 0.256-34.816 6.4-10.803 18.022-17.408 30.618-17.408h912.077c12.544 0 24.269 6.605 30.618 17.408 6.349 10.701 6.451 24.013 0.307 34.816zM563.2 102.4h-102.4v102.4h102.4v-102.4zM563.2 281.6h-102.4v332.8h102.4v-332.8z" /> +<glyph unicode="" glyph-name="arrow-bold-down" d="M128 460.8h179.2v358.4h409.6v-358.4h179.2l-384-384-384 384z" /> +<glyph unicode="" glyph-name="arrow-bold-left" d="M512 844.8v-179.2h358.4v-409.6h-358.4v-179.2l-384 384 384 384z" /> +<glyph unicode="" glyph-name="arrow-bold-right" d="M896 460.8l-384-384v179.2h-358.4v409.6h358.4v179.2l384-384z" /> +<glyph unicode="" glyph-name="arrow-bold-up" d="M512 844.8l384-384h-179.2v-358.4h-409.6v358.4h-179.2l384 384z" /> +<glyph unicode="" glyph-name="arrow-down" d="M512 76.8l-332.8 332.8h179.2v409.6h307.2v-409.6h179.2l-332.8-332.8z" /> +<glyph unicode="" glyph-name="arrow-left" d="M128 460.8l332.8 332.8v-179.2h409.6v-307.2h-409.6v-179.2l-332.8 332.8z" /> +<glyph unicode="" glyph-name="arrow-long-down" d="M512-12.8l-281.6 268.8h179.2v665.6h204.8v-665.6h179.2l-281.6-268.8z" /> +<glyph unicode="" glyph-name="arrow-long-left" d="M38.4 460.8l268.8 281.6v-179.2h665.6v-204.8h-665.6v-179.2l-268.8 281.6z" /> +<glyph unicode="" glyph-name="arrow-long-right" d="M716.8 179.2v179.2h-665.6v204.8h665.6v179.2l268.8-281.6-268.8-281.6z" /> +<glyph unicode="" glyph-name="arrow-long-up" d="M512 934.4l281.6-268.8h-179.2v-665.6h-204.8v665.6h-179.2l281.6 268.8z" /> +<glyph unicode="" glyph-name="arrow-right" d="M563.2 128v179.2h-409.6v307.2h409.6v179.2l332.8-332.8-332.8-332.8z" /> +<glyph unicode="" glyph-name="arrow-up" d="M512 844.8l332.8-332.8h-179.2v-409.6h-307.2v409.6h-179.2l332.8 332.8z" /> +<glyph unicode="" glyph-name="arrow-with-circle-down" d="M512 952.32c-271.514 0-491.571-220.058-491.571-491.52 0-271.514 220.058-491.571 491.571-491.571 271.411 0 491.52 220.058 491.52 491.571 0 271.462-220.109 491.52-491.52 491.52zM511.949 71.68c-214.886 0-389.12 174.182-389.12 389.12s174.182 389.12 389.12 389.12 389.171-174.234 389.171-389.12-174.285-389.12-389.171-389.12zM614.4 665.6h-204.8v-204.8h-128l230.4-230.4 230.4 230.4h-128v204.8z" /> +<glyph unicode="" glyph-name="arrow-with-circle-left" d="M512 952.32c-271.514 0-491.571-220.058-491.571-491.52 0-271.514 220.058-491.571 491.571-491.571 271.411 0 491.52 220.058 491.52 491.571 0 271.462-220.109 491.52-491.52 491.52zM511.949 71.68c-214.886 0-389.12 174.182-389.12 389.12s174.182 389.12 389.12 389.12 389.171-174.234 389.171-389.12-174.285-389.12-389.171-389.12zM512 691.2l-230.4-230.4 230.4-230.4v128h204.8v204.8h-204.8v128z" /> +<glyph unicode="" glyph-name="arrow-with-circle-right" d="M512 952.32c-271.514 0-491.571-220.058-491.571-491.52 0-271.514 220.058-491.571 491.571-491.571 271.411 0 491.52 220.058 491.52 491.571 0 271.462-220.109 491.52-491.52 491.52zM511.949 71.68c-214.886 0-389.12 174.182-389.12 389.12s174.182 389.12 389.12 389.12 389.171-174.234 389.171-389.12-174.285-389.12-389.171-389.12zM512 563.2h-204.8v-204.8h204.8v-128l230.4 230.4-230.4 230.4v-128z" /> +<glyph unicode="" glyph-name="arrow-with-circle-up" d="M512 952.32c-271.514 0-491.571-220.058-491.571-491.52 0-271.514 220.058-491.571 491.571-491.571 271.411 0 491.52 220.058 491.52 491.571 0 271.462-220.109 491.52-491.52 491.52zM511.949 71.68c-214.886 0-389.12 174.182-389.12 389.12s174.182 389.12 389.12 389.12 389.171-174.234 389.171-389.12-174.285-389.12-389.171-389.12zM512 691.2l230.4-230.4h-128v-204.8h-204.8v204.8h-128l230.4 230.4z" /> +<glyph unicode="" glyph-name="bookmark" d="M716.8 870.4v-870.4l-204.8 204.8-204.8-204.8v870.4c0 28.314 29.952 52.224 51.2 51.2h307.2c35.277 1.024 51.2-22.886 51.2-51.2z" /> +<glyph unicode="" glyph-name="bookmarks" d="M768 972.8h-204.8c-28.314 0-51.2-22.886-51.2-51.2l1.178-11.366c56.422 0 102.4-45.926 102.4-102.4v-581.581l50.022 60.467 153.6-184.32v819.2c0 28.314-22.886 51.2-51.2 51.2zM461.978 819.2h-205.978c-28.314 0-51.2-22.886-51.2-51.2v-819.2l153.6 184.32 153.6-184.32v819.2c0 28.314-21.709 51.2-50.022 51.2z" /> +<glyph unicode="" glyph-name="chevron-down" d="M231.219 586.342c22.323 22.835 53.402 24.627 80.691 0l200.090-191.846 200.090 191.846c27.29 24.627 58.419 22.835 80.589 0 22.323-22.784 20.89-61.286 0-82.688-20.787-21.402-240.384-230.502-240.384-230.502-11.11-11.418-25.702-17.152-40.294-17.152s-29.184 5.734-40.397 17.152c0 0-219.494 209.101-240.384 230.502-20.941 21.402-22.323 59.904 0 82.688z" /> +<glyph unicode="" glyph-name="chevron-left" d="M637.542 741.581c22.835-22.323 24.627-53.402 0-80.691l-191.846-200.090 191.846-200.090c24.627-27.29 22.835-58.419 0-80.589-22.784-22.323-61.286-20.89-82.688 0-21.402 20.787-230.502 240.384-230.502 240.384-11.418 11.11-17.152 25.702-17.152 40.294s5.734 29.184 17.152 40.397c0 0 209.101 219.494 230.502 240.384 21.402 20.941 59.904 22.323 82.688 0z" /> +<glyph unicode="" glyph-name="chevron-right" d="M469.146 741.581c21.402-20.89 230.502-240.384 230.502-240.384 11.418-11.213 17.152-25.805 17.152-40.397s-5.734-29.184-17.152-40.294c0 0-209.101-219.597-230.502-240.384-21.402-20.89-59.904-22.323-82.688 0-22.835 22.221-24.627 53.299 0 80.589l191.846 200.090-191.846 200.090c-24.627 27.29-22.835 58.419 0 80.691 22.784 22.323 61.286 20.941 82.688 0z" /> +<glyph unicode="" glyph-name="chevron-small-down" d="M687.002 570.419c13.875 13.722 36.301 13.722 50.074 0 13.824-13.722 13.926-35.891 0-49.613l-200.090-196.096c-13.824-13.722-36.198-13.722-50.125 0l-200.090 196.096c-13.824 13.67-13.824 35.891 0 49.613 13.875 13.722 36.301 13.722 50.074 0l175.155-160.819 175.002 160.819z" /> +<glyph unicode="" glyph-name="chevron-small-left" d="M621.619 285.798c13.722-13.875 13.722-36.301 0-50.074-13.722-13.824-35.891-13.926-49.613 0l-196.096 200.090c-13.722 13.824-13.722 36.198 0 50.125l196.096 200.090c13.67 13.824 35.891 13.824 49.613 0 13.722-13.875 13.722-36.301 0-50.074l-160.819-175.155 160.819-175.002z" /> +<glyph unicode="" glyph-name="chevron-small-right" d="M563.2 460.8l-160.819 175.104c-13.722 13.824-13.722 36.198 0 50.074 13.722 13.824 35.891 13.824 49.613 0l196.096-200.090c13.722-13.875 13.722-36.301 0-50.125l-196.096-200.090c-13.67-13.926-35.891-13.824-49.613 0-13.722 13.773-13.722 36.198 0 50.074l160.819 175.053z" /> +<glyph unicode="" glyph-name="chevron-small-up" d="M336.998 351.181c-13.875-13.722-36.301-13.722-50.074 0s-13.926 35.891 0 49.613l200.090 196.096c13.824 13.722 36.198 13.722 50.125 0l200.090-196.096c13.824-13.67 13.824-35.891 0-49.613-13.875-13.722-36.301-13.722-50.125 0l-175.104 160.819-175.002-160.819z" /> +<glyph unicode="" glyph-name="chevron-thin-down" d="M891.802 660.019c13.926 13.722 36.301 13.722 50.125 0s13.875-35.891 0-49.613l-404.89-400.896c-13.824-13.722-36.198-13.722-50.125 0l-404.89 400.896c-13.824 13.722-13.824 35.891 0 49.613 13.875 13.722 36.301 13.722 50.125 0l379.853-365.619 379.802 365.619z" /> +<glyph unicode="" glyph-name="chevron-thin-left" d="M711.219 80.998c13.722-13.926 13.722-36.301 0-50.125s-35.891-13.875-49.613 0l-400.896 404.89c-13.722 13.824-13.722 36.198 0 50.125l400.896 404.89c13.722 13.824 35.891 13.824 49.613 0 13.722-13.875 13.722-36.301 0-50.125l-365.619-379.853 365.619-379.802z" /> +<glyph unicode="" glyph-name="chevron-thin-right" d="M678.4 460.8l-365.619 379.904c-13.722 13.824-13.722 36.198 0 50.125 13.722 13.824 35.891 13.824 49.613 0l400.896-404.89c13.722-13.875 13.722-36.301 0-50.125l-400.896-404.89c-13.722-13.875-35.891-13.824-49.613 0-13.722 13.773-13.722 36.198 0 50.125l365.619 379.75z" /> +<glyph unicode="" glyph-name="chevron-thin-up" d="M132.198 261.581c-13.926-13.722-36.301-13.722-50.125 0s-13.875 35.891 0 49.613l404.89 400.896c13.824 13.722 36.198 13.722 50.125 0l404.89-400.896c13.824-13.722 13.824-35.891 0-49.613-13.875-13.722-36.301-13.722-50.074 0l-379.904 365.619-379.802-365.619z" /> +<glyph unicode="" glyph-name="chevron-up" d="M792.781 335.258c-22.323-22.835-53.402-24.627-80.691 0l-200.090 191.846-200.090-191.846c-27.29-24.627-58.419-22.835-80.589 0-22.323 22.784-20.89 61.286 0 82.688 20.787 21.402 240.384 230.502 240.384 230.502 11.11 11.418 25.702 17.152 40.294 17.152s29.184-5.734 40.397-17.152c0 0 219.494-209.101 240.384-230.502 20.941-21.402 22.323-59.904 0-82.688z" /> +<glyph unicode="" glyph-name="chevron-with-circle-down" d="M640.256 527.462l-128.256-117.862-128.307 117.862c-10.138 10.035-26.522 10.035-36.762 0-10.086-10.035-10.086-26.368 0-36.352l146.637-143.718c10.189-10.035 26.624-10.035 36.71 0l146.637 143.718c10.189 9.984 10.138 26.317 0 36.352-10.086 10.035-26.47 10.035-36.659 0zM512 952.32c-271.462 0-491.52-220.058-491.52-491.52 0-271.514 220.058-491.52 491.52-491.52s491.52 220.006 491.52 491.52c0 271.462-220.058 491.52-491.52 491.52zM512 33.075c-236.288 0-427.725 191.488-427.725 427.725s191.437 427.725 427.725 427.725c236.186 0 427.725-191.488 427.725-427.725s-191.539-427.725-427.725-427.725z" /> +<glyph unicode="" glyph-name="chevron-with-circle-left" d="M578.662 625.869c-10.035 10.086-26.368 10.086-36.352 0l-143.718-146.688c-10.035-10.189-10.035-26.624 0-36.71l143.718-146.637c9.984-10.189 26.317-10.138 36.352 0 10.035 10.086 10.035 26.522 0 36.71l-117.862 128.256 117.862 128.307c10.035 10.138 10.035 26.522 0 36.762zM512 952.32c-271.462 0-491.52-220.058-491.52-491.52 0-271.514 220.058-491.52 491.52-491.52s491.52 220.006 491.52 491.52c0 271.462-220.058 491.52-491.52 491.52zM512 33.075c-236.288 0-427.725 191.488-427.725 427.725s191.437 427.725 427.725 427.725c236.186 0 427.725-191.488 427.725-427.725s-191.539-427.725-427.725-427.725z" /> +<glyph unicode="" glyph-name="chevron-with-circle-right" d="M563.2 460.8l-117.862 128.307c-10.035 10.138-10.035 26.573 0 36.762 10.035 10.086 26.368 10.086 36.352 0l143.718-146.637c10.035-10.189 10.035-26.624 0-36.71l-143.718-146.637c-9.984-10.189-26.317-10.138-36.352 0-10.035 10.086-10.035 26.522 0 36.71l117.862 128.205zM512 952.32c271.462 0 491.52-220.058 491.52-491.52 0-271.514-220.058-491.52-491.52-491.52s-491.52 220.006-491.52 491.52c0 271.462 220.058 491.52 491.52 491.52zM512 33.075c236.186 0 427.725 191.488 427.725 427.725s-191.539 427.725-427.725 427.725c-236.288 0-427.725-191.488-427.725-427.725-0.051-236.237 191.437-427.725 427.725-427.725z" /> +<glyph unicode="" glyph-name="chevron-with-circle-up" d="M530.381 574.208c-10.189 10.035-26.624 10.035-36.71 0l-146.637-143.718c-10.189-9.984-10.138-26.317 0-36.352 10.086-10.035 26.522-10.035 36.71 0l128.256 117.862 128.307-117.862c10.138-10.035 26.522-10.035 36.762 0 10.086 10.035 10.086 26.368 0 36.352l-146.688 143.718zM512 952.32c-271.462 0-491.52-220.058-491.52-491.52 0-271.514 220.058-491.52 491.52-491.52s491.52 220.006 491.52 491.52c0 271.462-220.058 491.52-491.52 491.52zM512 33.075c-236.288 0-427.725 191.488-427.725 427.725s191.437 427.725 427.725 427.725c236.186 0 427.725-191.488 427.725-427.725s-191.539-427.725-427.725-427.725z" /> +<glyph unicode="" glyph-name="cloud" d="M1024 393.216c0-132.301-109.773-239.616-245.094-239.616h-593.715c-102.298 0-185.19 81.101-185.19 181.094 0 99.891 82.893 180.992 185.19 180.992 7.475 0 14.746-0.614 21.965-1.382-1.894 12.595-2.918 25.498-2.918 38.707 0 146.995 121.907 266.189 272.384 266.189 123.238 0 227.277-79.974 260.915-189.798 13.466 2.202 27.238 3.379 41.421 3.379 135.27 0 245.043-107.162 245.043-239.565z" /> +<glyph unicode="" glyph-name="controller-fast-forward" d="M473.293 485.376l-368.794 253.389c-29.286 19.61-53.299 5.222-53.299-32v-491.981c0-37.12 24.013-51.507 53.299-32l368.794 253.491c0 0 14.285 10.189 14.285 24.474 0 14.336-14.285 24.627-14.285 24.627zM952.32 460.749c0-14.285-14.285-24.474-14.285-24.474l-368.794-253.491c-29.286-19.507-53.299-5.12-53.299 32v491.981c0 37.222 24.013 51.61 53.299 32l368.742-253.389c0 0 14.336-10.291 14.336-24.627z" /> +<glyph unicode="" glyph-name="controller-jump-to-start" d="M765.901 738.765l-368.794-253.389c0 0-14.285-10.291-14.285-24.627s14.285-24.525 14.285-24.525l368.794-253.491c29.286-19.456 53.299-5.069 53.299 32.051v491.981c0 37.222-24.013 51.61-53.299 32zM307.2 768h-51.2c-28.314 0-51.2-2.458-51.2-30.72v-552.96c0-28.262 22.886-30.72 51.2-30.72h51.2c28.314 0 51.2 2.458 51.2 30.72v552.96c0 28.262-22.886 30.72-51.2 30.72z" /> +<glyph unicode="" glyph-name="controller-next" d="M626.893 485.376l-368.794 253.389c-29.286 19.61-53.299 5.222-53.299-32v-491.981c0-37.12 24.013-51.507 53.299-32l368.794 253.491c0 0 14.285 10.189 14.285 24.474 0 14.336-14.285 24.627-14.285 24.627zM716.8 768h51.2c28.314 0 51.2-2.458 51.2-30.72v-552.96c0-28.262-22.886-30.72-51.2-30.72h-51.2c-28.314 0-51.2 2.458-51.2 30.72v552.96c0 28.262 22.886 30.72 51.2 30.72z" /> +<glyph unicode="" glyph-name="controller-paus" d="M768 819.2h-102.4c-28.314 0-51.2-2.458-51.2-30.72v-655.36c0-28.262 22.886-30.72 51.2-30.72h102.4c28.314 0 51.2 2.458 51.2 30.72v655.36c0 28.262-22.886 30.72-51.2 30.72zM358.4 819.2h-102.4c-28.314 0-51.2-2.458-51.2-30.72v-655.36c0-28.262 22.886-30.72 51.2-30.72h102.4c28.314 0 51.2 2.458 51.2 30.72v655.36c0 28.262-22.886 30.72-51.2 30.72z" /> +<glyph unicode="" glyph-name="controller-play" d="M768 460.749c0-15.309-15.616-26.317-15.616-26.317l-438.323-271.514c-31.949-20.941-58.061-5.427-58.061 34.253v527.206c0 39.782 26.112 55.194 58.112 34.304l438.323-271.616c-0.051 0 15.565-11.008 15.565-26.317z" /> +<glyph unicode="" glyph-name="controller-record" d="M512 819.2c-197.939 0-358.4-160.41-358.4-358.4 0-197.888 160.461-358.4 358.4-358.4s358.4 160.512 358.4 358.4c0 197.99-160.461 358.4-358.4 358.4z" /> +<glyph unicode="" glyph-name="controller-stop" d="M819.2 717.056v-502.17c0-33.843-27.443-61.286-61.235-61.286h-502.118c-28.211 0-51.046 22.835-51.046 51.046v502.118c0 33.792 27.443 61.235 61.235 61.235h502.17c28.16 0 50.995-22.835 50.995-50.944z" /> +<glyph unicode="" glyph-name="controller-volume" d="M972.8 265.984c0-33.638-27.546-61.184-61.184-61.184h-833.126c-45.056 0-50.278 18.995-11.725 42.086l835.738 463.616c38.656 23.194 70.298 5.325 70.298-39.782v-404.736z" /> +<glyph unicode="" glyph-name="dot-single" d="M399.36 460.8c0-62.208 50.483-112.64 112.691-112.64s112.589 50.483 112.589 112.64c0 62.208-50.381 112.589-112.589 112.589s-112.691-50.381-112.691-112.589z" /> +<glyph unicode="" glyph-name="dots-three-horizontal" d="M512.051 573.44c-62.208 0-112.691-50.432-112.691-112.64s50.483-112.64 112.691-112.64c62.208 0 112.589 50.432 112.589 112.64s-50.381 112.64-112.589 112.64zM153.651 573.44c-62.208 0-112.691-50.432-112.691-112.64s50.483-112.64 112.691-112.64c62.208 0 112.589 50.483 112.589 112.64s-50.381 112.64-112.589 112.64zM870.451 573.44c-62.208 0-112.691-50.432-112.691-112.64s50.483-112.64 112.691-112.64c62.208 0 112.589 50.432 112.589 112.64s-50.381 112.64-112.589 112.64z" /> +<glyph unicode="" glyph-name="dots-three-vertical" d="M512.051 573.44c-62.208 0-112.691-50.432-112.691-112.64s50.483-112.64 112.691-112.64c62.208 0 112.589 50.432 112.589 112.64s-50.381 112.64-112.589 112.64zM512.051 706.56c62.208 0 112.589 50.483 112.589 112.64s-50.381 112.64-112.589 112.64c-62.208 0-112.691-50.432-112.691-112.64s50.483-112.64 112.691-112.64zM512.051 215.040c-62.208 0-112.691-50.432-112.691-112.64s50.483-112.64 112.691-112.64c62.208 0 112.589 50.432 112.589 112.64s-50.381 112.64-112.589 112.64z" /> +<glyph unicode="" glyph-name="dots-two-horizontal" d="M716.851 573.44c-62.208 0-112.691-50.432-112.691-112.64s50.483-112.64 112.691-112.64c62.208 0 112.589 50.432 112.589 112.64s-50.381 112.64-112.589 112.64zM307.251 573.44c-62.208 0-112.691-50.432-112.691-112.64s50.483-112.64 112.691-112.64c62.208 0 112.589 50.483 112.589 112.64s-50.381 112.64-112.589 112.64z" /> +<glyph unicode="" glyph-name="dots-two-vertical" d="M512.051 552.96c62.208 0 112.589 50.483 112.589 112.64s-50.381 112.64-112.589 112.64c-62.208 0-112.691-50.432-112.691-112.64s50.483-112.64 112.691-112.64zM512.051 368.64c-62.208 0-112.691-50.432-112.691-112.64s50.483-112.64 112.691-112.64c62.208 0 112.589 50.432 112.589 112.64s-50.381 112.64-112.589 112.64z" /> +<glyph unicode="" glyph-name="download" d="M768 614.4h-153.6v307.2h-204.8v-307.2h-153.6l256-256 256 256zM990.106 279.962c-10.752 11.469-82.483 88.218-102.963 108.237-13.568 13.261-32.973 21.402-53.35 21.402h-89.958l156.877-153.293h-181.453c-5.222 0-9.933-2.662-12.288-6.81l-41.779-95.898h-306.381l-41.779 95.898c-2.355 4.147-7.117 6.81-12.288 6.81h-181.453l156.826 153.293h-89.907c-20.326 0-39.731-8.141-53.35-21.402-20.48-20.070-92.211-96.819-102.963-108.237-25.037-26.675-38.81-47.923-32.256-74.189l28.723-157.389c6.554-26.317 35.379-47.923 64.102-47.923h835.174c28.723 0 57.549 21.606 64.102 47.923l28.723 157.389c6.451 26.266-7.27 47.514-32.358 74.189z" /> +<glyph unicode="" glyph-name="emoji-flirt" d="M384 473.6c42.445 0 76.8 40.090 76.8 89.6s-34.355 89.6-76.8 89.6-76.8-40.141-76.8-89.6 34.406-89.6 76.8-89.6zM512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52c271.411 0 491.52 220.058 491.52 491.571 0 271.411-220.109 491.469-491.52 491.469zM512 71.731c-214.886 0-389.12 174.182-389.12 389.12 0 214.886 174.182 389.12 389.12 389.12s389.12-174.234 389.12-389.171c0-214.886-174.234-389.069-389.12-389.069zM734.259 392.397c-18.586 9.574-41.728 2.202-51.61-16.384-1.741-3.328-44.493-81.562-170.598-81.562-125.491 0-168.499 77.466-170.65 81.51-9.626 18.688-32.358 26.317-51.405 16.845-18.944-9.472-26.675-32.563-17.152-51.558 2.56-5.069 63.898-123.597 239.206-123.597 175.36 0 236.595 118.579 239.104 123.648 9.421 18.79 1.843 41.472-16.896 51.098zM576 524.8h128c21.197 0 38.4 17.203 38.4 38.4s-17.203 38.4-38.4 38.4h-128c-21.197 0-38.4-17.203-38.4-38.4 0-21.248 17.203-38.4 38.4-38.4z" /> +<glyph unicode="" glyph-name="flow-branch" d="M839.68 768c0 67.891-54.989 122.88-122.88 122.88s-122.88-54.989-122.88-122.88c0-49.203 29.082-91.341 70.861-110.95-4.198-81.101-65.024-108.646-170.752-148.275-44.544-16.742-93.645-35.277-135.629-63.181v210.995c42.24 19.456 71.68 61.901 71.68 111.411 0 67.891-54.989 122.88-122.88 122.88s-122.88-54.989-122.88-122.88c0-49.51 29.491-91.955 71.68-111.411v-391.629c-42.24-19.405-71.68-61.85-71.68-111.36 0-67.891 54.989-122.88 122.88-122.88s122.88 55.040 122.88 122.88c0 49.203-29.082 91.341-70.861 110.95 4.198 81.050 65.075 108.646 170.752 148.275 103.936 39.014 232.499 87.603 237.568 243.507 42.445 19.354 72.141 61.952 72.141 111.667zM307.2 838.912c39.117 0 70.861-31.693 70.861-70.912 0-39.117-31.744-70.912-70.861-70.912-39.168 0-70.861 31.795-70.861 70.912 0 39.219 31.693 70.912 70.861 70.912zM307.2 82.688c-39.219 0-70.912 31.795-70.912 70.912 0 39.219 31.693 70.912 70.912 70.912 39.117 0 70.861-31.693 70.861-70.912 0-39.117-31.744-70.912-70.861-70.912zM716.8 697.088c-39.219 0-70.912 31.795-70.912 70.912 0 39.219 31.693 70.912 70.912 70.912 39.117 0 70.861-31.693 70.861-70.912 0-39.117-31.744-70.912-70.861-70.912z" /> +<glyph unicode="" glyph-name="flow-cascade" d="M716.8 225.28c-49.51 0-91.955-29.491-111.411-71.68h-170.189c-42.394 0-76.8 34.406-76.8 76.8v197.12c23.347-11.162 49.203-17.92 76.8-17.92h170.189c19.456-42.189 61.85-71.68 111.411-71.68 67.891 0 122.88 55.040 122.88 122.88s-54.989 122.88-122.88 122.88c-49.51 0-91.955-29.491-111.411-71.68h-170.189c-42.394 0-76.8 34.406-76.8 76.8v118.989c42.24 19.456 71.68 61.901 71.68 111.411 0 67.891-54.989 122.88-122.88 122.88s-122.88-54.989-122.88-122.88c0-49.51 29.491-91.955 71.68-111.411v-477.389c0-98.97 80.23-179.2 179.2-179.2h170.189c19.456-42.189 61.85-71.68 111.411-71.68 67.891 0 122.88 55.040 122.88 122.88s-54.989 122.88-122.88 122.88zM716.8 531.712c39.117 0 70.861-31.693 70.861-70.912 0-39.117-31.744-70.912-70.861-70.912-39.219 0-70.912 31.795-70.912 70.912 0.051 39.219 31.744 70.912 70.912 70.912zM307.2 890.112c39.117 0 70.861-31.693 70.861-70.912 0-39.117-31.744-70.912-70.861-70.912-39.168 0-70.861 31.795-70.861 70.912 0 39.219 31.693 70.912 70.861 70.912zM716.8 31.488c-39.219 0-70.912 31.795-70.912 70.912 0 39.219 31.693 70.912 70.912 70.912 39.117 0 70.861-31.693 70.861-70.912 0-39.117-31.744-70.912-70.861-70.912z" /> +<glyph unicode="" glyph-name="flow-line" d="M563.2 265.011v391.578c42.24 19.456 71.68 61.85 71.68 111.411 0 67.891-54.989 122.88-122.88 122.88s-122.88-54.989-122.88-122.88c0-49.51 29.491-91.955 71.68-111.411v-391.629c-42.24-19.405-71.68-61.85-71.68-111.36 0-67.891 54.989-122.88 122.88-122.88s122.88 55.040 122.88 122.88c0 49.51-29.44 91.955-71.68 111.411zM512 838.912c39.117 0 70.861-31.693 70.861-70.912 0-39.117-31.744-70.912-70.861-70.912-39.168 0-70.861 31.795-70.861 70.912 0 39.219 31.693 70.912 70.861 70.912zM512 82.688c-39.219 0-70.912 31.795-70.912 70.912 0 39.219 31.693 70.912 70.912 70.912 39.117 0 70.861-31.693 70.861-70.912 0-39.117-31.744-70.912-70.861-70.912z" /> +<glyph unicode="" glyph-name="flow-parallel" d="M430.080 768c0 67.891-54.989 122.88-122.88 122.88s-122.88-54.989-122.88-122.88c0-49.51 29.491-91.955 71.68-111.411v-391.629c-42.24-19.405-71.68-61.85-71.68-111.36 0-67.891 54.989-122.88 122.88-122.88s122.88 55.040 122.88 122.88c0 49.51-29.491 91.955-71.68 111.411v391.578c42.24 19.456 71.68 61.901 71.68 111.411zM378.061 153.6c0-39.117-31.744-70.912-70.861-70.912-39.219 0-70.912 31.795-70.912 70.912 0 39.219 31.693 70.912 70.912 70.912 39.117 0 70.861-31.693 70.861-70.912zM307.2 697.088c-39.168 0-70.861 31.795-70.861 70.912 0 39.219 31.693 70.912 70.912 70.912 39.117 0 70.861-31.693 70.861-70.912-0.051-39.117-31.795-70.912-70.912-70.912zM768 265.011v391.578c42.24 19.456 71.68 61.85 71.68 111.411 0 67.891-54.989 122.88-122.88 122.88s-122.88-54.989-122.88-122.88c0-49.51 29.491-91.955 71.68-111.411v-391.629c-42.24-19.456-71.68-61.85-71.68-111.411 0-67.891 54.989-122.88 122.88-122.88s122.88 55.040 122.88 122.88c0 49.562-29.44 92.006-71.68 111.462zM645.939 768c0 39.219 31.693 70.912 70.912 70.912 39.117 0 70.861-31.693 70.861-70.912 0-39.117-31.744-70.912-70.861-70.912-39.219 0-70.912 31.795-70.912 70.912zM716.8 82.688c-39.219 0-70.912 31.795-70.912 70.912 0 39.219 31.693 70.912 70.912 70.912 39.117 0 70.861-31.693 70.861-70.912 0-39.117-31.744-70.912-70.861-70.912z" /> +<glyph unicode="" glyph-name="flow-tree" d="M921.6 213.811v118.989c0 98.97-80.23 179.2-179.2 179.2h-102.4c-42.394 0-76.8 34.406-76.8 76.8v118.989c42.24 19.456 71.68 61.85 71.68 111.411 0 67.891-54.989 122.88-122.88 122.88s-122.88-54.989-122.88-122.88c0-49.51 29.491-91.955 71.68-111.411v-118.989c0-42.394-34.406-76.8-76.8-76.8h-102.4c-98.97 0-179.2-80.23-179.2-179.2v-118.989c-42.24-19.456-71.68-61.901-71.68-111.411 0-67.891 54.989-122.88 122.88-122.88s122.88 55.040 122.88 122.88c0 49.51-29.491 91.955-71.68 111.411v118.989c0 42.394 34.406 76.8 76.8 76.8h102.4c27.597 0 53.453 6.758 76.8 17.92v-213.709c-42.24-19.456-71.68-61.901-71.68-111.411 0-67.891 54.989-122.88 122.88-122.88s122.88 55.040 122.88 122.88c0 49.51-29.491 91.955-71.68 111.411v213.709c23.347-11.162 49.203-17.92 76.8-17.92h102.4c42.394 0 76.8-34.406 76.8-76.8v-118.989c-42.24-19.456-71.68-61.85-71.68-111.411 0-67.891 54.989-122.88 122.88-122.88s122.88 55.040 122.88 122.88c0 49.51-29.44 91.955-71.68 111.411zM512 890.112c39.117 0 70.861-31.693 70.861-70.912 0-39.117-31.744-70.912-70.861-70.912-39.168 0-70.861 31.795-70.861 70.912 0 39.219 31.693 70.912 70.861 70.912zM153.6 31.488c-39.219 0-70.912 31.795-70.912 70.912 0 39.219 31.693 70.912 70.912 70.912 39.117 0 70.861-31.693 70.861-70.912 0-39.117-31.744-70.912-70.861-70.912zM512 31.488c-39.219 0-70.912 31.795-70.912 70.912 0 39.219 31.693 70.912 70.912 70.912 39.117 0 70.861-31.693 70.861-70.912 0-39.117-31.744-70.912-70.861-70.912zM870.4 31.488c-39.219 0-70.912 31.795-70.912 70.912 0 39.219 31.693 70.912 70.912 70.912 39.117 0 70.861-31.693 70.861-70.912 0-39.117-31.744-70.912-70.861-70.912z" /> +<glyph unicode="" glyph-name="install" d="M975.821 414.822l-162.355 405.862c-11.981 30.054-41.062 49.715-73.421 49.715h-124.621l19.456-208.128h138.24l-261.12-216.474-261.12 216.474h138.24l19.456 208.128h-124.621c-32.358 0-61.44-19.661-73.421-49.715l-162.355-405.862c-14.746-36.915-19.098-77.158-12.595-116.326l30.208-181.197c6.349-38.144 39.322-66.099 77.978-66.099h736.41c38.656 0 71.629 27.955 77.978 66.099l30.208 181.197c6.605 39.168 2.253 79.411-12.544 116.326zM868.301 192.256c-3.686-22.323-22.989-38.656-45.619-38.656h-621.363c-22.63 0-41.933 16.333-45.619 38.656l-18.688 112.282c-4.762 28.211 16.998 53.862 45.619 53.862h658.79c28.57 0 50.33-25.651 45.619-53.862l-18.739-112.282z" /> +<glyph unicode="" glyph-name="layers" d="M473.498 378.829c23.040-16.026 53.76-16.026 76.8 0l465.306 270.387c12.083 8.397 10.752 26.522-2.458 33.075l-471.296 181.094c-18.842 9.37-41.062 9.37-59.904 0l-471.296-181.094c-13.21-6.502-14.541-24.678-2.458-33.075l465.306-270.387zM1013.146 419.277l-127.283 63.13-293.12-170.342c-24.013-15.821-51.917-24.115-80.845-24.115s-56.832 8.346-80.845 24.115l-292.915 170.445-127.488-63.181c-13.21-6.554-14.541-24.678-2.458-33.075l465.306-323.021c23.040-16.026 53.76-16.026 76.8 0l465.306 323.021c12.083 8.346 10.752 26.47-2.458 33.024z" /> +<glyph unicode="" glyph-name="open-book" d="M542.464 706.765l22.835-70.195c18.893 16.179 42.752 30.669 73.779 40.704 30.208 9.83 56.883 15.36 80.998 18.534l-22.016 67.738c-24.371-3.533-51.251-9.216-80.896-18.842-29.594-9.626-54.016-23.040-74.701-37.939zM589.926 560.589l22.835-70.195c18.893 16.179 42.752 30.669 73.779 40.704 30.208 9.83 56.883 15.36 80.998 18.534l-22.016 67.738c-24.371-3.533-51.251-9.216-80.896-18.842-29.594-9.574-53.965-22.989-74.701-37.939zM637.44 414.464l22.835-70.195c18.893 16.179 42.752 30.669 73.779 40.704 30.208 9.83 56.883 15.36 80.998 18.534l-22.016 67.738c-24.371-3.533-51.251-9.216-80.896-18.842-29.645-9.574-54.016-23.040-74.701-37.939zM275.866 303.258l22.016-67.738c21.35 11.571 46.182 22.784 76.39 32.563 31.027 10.086 58.829 12.39 83.61 10.394l-22.835 70.195c-25.549-0.102-53.146-3.584-82.688-13.158-29.645-9.626-54.733-20.787-76.493-32.256zM180.89 595.558l22.016-67.738c21.35 11.571 46.182 22.733 76.39 32.563 31.027 10.086 58.829 12.39 83.61 10.394l-22.784 70.246c-25.549-0.154-53.146-3.584-82.739-13.21-29.645-9.626-54.733-20.787-76.493-32.256zM228.352 449.382l22.016-67.738c21.35 11.571 46.182 22.784 76.39 32.563 31.027 10.086 58.829 12.39 83.61 10.394l-22.784 70.246c-25.549-0.102-53.146-3.584-82.688-13.158-29.645-9.626-54.784-20.838-76.544-32.307zM566.477 900.608c-88.218-28.672-134.298-89.702-156.314-131.021-42.086 20.48-115.2 42.752-203.418 14.080-129.178-41.984-203.213-134.502-203.213-134.502l209.664-644.454c6.451-19.814 33.075-24.422 44.954-7.322 25.549 36.813 74.752 84.89 166.758 114.79 87.962 28.57 152.013-2.765 187.136-29.594 13.926-10.65 33.894-3.072 39.014 13.722 12.902 42.342 46.438 104.448 133.632 132.762 92.109 29.952 160.205 19.917 202.547 5.12 19.712-6.861 38.4 12.39 32 32.205l-209.306 644.813c0 0-114.278 31.334-243.456-10.598zM560.691 191.693c-41.933 12.493-97.331 18.33-160.819-2.253-64.051-20.787-108.902-48.589-138.189-71.885l-166.144 511.078c18.33 18.33 60.774 53.35 136.294 77.875 71.117 23.091 129.434 3.328 167.885-19.354l160.973-495.462zM913.664 329.37c-37.427 1.638-90.061-2.253-154.112-23.091-63.488-20.634-104.858-57.958-131.43-92.672l-160.973 495.462c17.715 40.96 53.248 91.238 124.416 114.33 75.469 24.525 130.406 21.146 156.006 17.101l166.093-511.13z" /> +<glyph unicode="" glyph-name="resize-100" d="M209.92 250.88l-158.72-148.48 102.4-102.4 148.48 158.72 107.52-107.52v307.2h-307.2l107.52-107.52zM972.8 819.2l-102.4 102.4-148.48-158.72-107.52 107.52v-307.2h307.2l-107.52 107.52 158.72 148.48z" /> +<glyph unicode="" glyph-name="resize-full-screen" d="M357.734 410.266l-150.067-155.187-105.267 124.365v-328.243h327.014l-124.416 106.547 155.136 150.118-102.4 102.4zM594.586 870.4l124.416-106.547-155.136-150.118 102.4-102.4 150.067 155.187 105.267-124.365v328.243h-327.014z" /> +<glyph unicode="" glyph-name="save" d="M776.858 870.4h-572.058c-56.371 0-102.4-46.080-102.4-102.4v-614.4c0-56.32 46.029-102.4 102.4-102.4h614.4c56.371 0 102.4 46.080 102.4 102.4v556.698l-144.742 160.102zM716.8 563.2c0-28.109-23.040-51.2-51.2-51.2h-307.2c-28.16 0-51.2 23.091-51.2 51.2v256h409.6v-256zM665.6 768h-102.4v-204.8h102.4v204.8z" /> +<glyph unicode="" glyph-name="select-arrows" d="M512 921.6l-256-358.4h512l-256 358.4zM512 0l256 358.4h-512l256-358.4z" /> +<glyph unicode="" glyph-name="sound-mute" d="M727.091 502.067c71.117-96.41 93.082-180.070 79.821-193.382-13.312-13.21-96.922 8.704-193.434 79.821l-282.931-282.982c214.323-94.106 492.902 103.322 542.976 153.395 47.36 47.206 4.966 169.421-95.027 294.605l-51.405-51.456zM443.75 566.221c-56.269 84.89-73.267 154.778-61.133 166.912 11.93 11.981 81.92-4.915 166.758-61.286l52.378 52.48c-115.917 85.709-225.024 119.501-269.158 75.213-47.514-47.411-227.738-300.902-165.427-509.798l276.582 276.48zM948.275 897.126c-19.968 20.019-52.378 20.019-72.397 0l-800.205-800.256c-20.019-20.019-20.019-52.429 0-72.397 20.019-20.019 52.378-20.019 72.397 0l800.205 800.256c20.019 20.019 20.019 52.429 0 72.397z" /> +<glyph unicode="" glyph-name="sound" d="M271.974 739.021c-57.446-57.293-308.582-415.488-91.597-632.422 216.883-216.986 574.976 34.202 632.525 91.597 57.395 57.293-17.152 225.024-166.502 374.374-149.453 149.453-316.979 224.051-374.426 166.451zM746.291 248.013c-16.998-16.794-148.224 23.398-274.637 149.914-126.31 126.413-166.707 257.69-149.709 274.586 16.794 16.998 148.173-23.398 274.432-149.811 126.515-126.31 166.81-257.69 149.914-274.688zM790.221 666.522l97.485 97.587c20.019 20.019 20.019 52.378 0 72.397-19.968 20.019-52.378 20.019-72.397 0l-97.485-97.587c-20.019-20.019-20.019-52.429 0-72.397 19.968-19.968 52.378-19.968 72.397 0zM569.549 778.24c24.73-13.722 55.859-4.864 69.632 19.866l55.654 98.611c13.722 24.73 4.864 55.859-19.866 69.632-24.678 13.773-55.859 4.864-69.632-19.866l-55.654-98.611c-13.722-24.781-4.813-55.962 19.866-69.632zM1017.446 623.821c-13.67 24.73-44.902 33.638-69.632 19.866l-99.328-54.323c-24.73-13.722-33.638-44.954-19.866-69.632 13.722-24.73 44.902-33.638 69.632-19.866l99.328 54.323c24.73 13.773 33.638 44.902 19.866 69.632z" /> +<glyph unicode="" glyph-name="trash" d="M173.517 608.614l56.371-558.49c3.123-23.603 117.094-101.222 282.112-101.325 165.12 0.102 279.091 77.722 282.163 101.325l56.422 558.49c-86.221-48.23-215.091-71.014-338.586-71.014-123.392 0-252.314 22.784-338.483 71.014zM674.202 895.488l-43.981 48.691c-16.998 24.218-35.43 28.621-71.322 28.621h-93.747c-35.84 0-54.323-4.403-71.27-28.621l-43.981-48.691c-131.584-22.989-227.021-83.968-227.021-128.973v-8.704c0-79.206 174.234-143.411 389.12-143.411 214.938 0 389.171 64.205 389.171 143.411v8.704c0 45.005-95.386 105.984-226.97 128.973zM617.984 750.592l-54.784 68.608h-102.4l-54.682-68.608h-87.040c0 0 95.334 113.715 108.083 129.126 9.728 11.776 19.661 16.282 32.563 16.282h104.602c12.954 0 22.886-4.506 32.614-16.282 12.698-15.411 108.083-129.126 108.083-129.126h-87.040z" /> +<glyph unicode="" glyph-name="triangle-down" d="M256 665.6h512l-256-460.8-256 460.8z" /> +<glyph unicode="" glyph-name="triangle-left" d="M716.8 716.8v-512l-460.8 256 460.8 256z" /> +<glyph unicode="" glyph-name="triangle-right" d="M768 460.8l-460.8-256v512l460.8-256z" /> +<glyph unicode="" glyph-name="triangle-up" d="M768 256h-512l256 460.8 256-460.8z" /> +<glyph unicode="" glyph-name="uninstall" d="M975.821 414.822l-162.355 405.862c-11.981 30.054-41.062 49.715-73.421 49.715h-456.090c-32.358 0-61.44-19.661-73.421-49.715l-162.355-405.862c-14.746-36.915-19.098-77.158-12.595-116.326l30.208-181.197c6.349-38.144 39.322-66.099 77.978-66.099h736.41c38.656 0 71.629 27.955 77.978 66.099l30.208 181.197c6.605 39.168 2.253 79.411-12.544 116.326zM282.624 727.757l83.917 57.958 146.842-102.963 146.842 102.963 83.917-57.958-146.893-104.090 149.914-105.472-83.917-59.955-149.862 106.291-149.862-106.291-83.917 59.955 149.914 105.472-146.893 104.090zM868.301 192.256c-3.686-22.323-22.989-38.656-45.619-38.656h-621.363c-22.63 0-41.933 16.333-45.619 38.656l-18.688 112.282c-4.762 28.211 16.998 53.862 45.619 53.862h658.79c28.57 0 50.33-25.651 45.619-53.862l-18.739-112.282z" /> +<glyph unicode="" glyph-name="upload-to-cloud" d="M778.906 632.883c-14.131 0-27.955-1.28-41.421-3.482-33.587 109.824-137.626 189.798-260.864 189.798-150.477 0-272.384-119.194-272.384-266.189 0-13.107 1.024-26.010 2.918-38.707-7.219 0.87-14.49 1.382-21.965 1.382-102.298 0-185.19-80.998-185.19-180.992s82.893-181.094 185.19-181.094h224.41v204.8h-128l230.4 256 230.4-256h-128v-204.8h164.506c135.322 0 245.094 107.315 245.094 239.616 0 132.403-109.773 239.667-245.094 239.667z" /> +<glyph unicode="" glyph-name="upload" d="M409.6 358.4h204.8v307.2h153.6l-256 256-256-256h153.6v-307.2zM990.106 279.962c-10.752 11.469-82.483 88.218-102.963 108.237-13.568 13.261-32.973 21.402-53.35 21.402h-89.958l156.877-153.293h-181.453c-5.222 0-9.933-2.662-12.288-6.81l-41.779-95.898h-306.381l-41.779 95.898c-2.355 4.147-7.117 6.81-12.288 6.81h-181.453l156.826 153.293h-89.907c-20.326 0-39.731-8.141-53.35-21.402-20.48-20.070-92.211-96.819-102.963-108.237-25.037-26.675-38.81-47.923-32.256-74.189l28.723-157.389c6.554-26.317 35.379-47.923 64.102-47.923h835.174c28.723 0 57.549 21.606 64.102 47.923l28.723 157.389c6.451 26.266-7.27 47.514-32.358 74.189z" /> +<glyph unicode="" glyph-name="add-user" d="M818.637-6.605c0.563 109.005-111.923 173.517-221.030 220.518-108.698 46.797-143.411 86.221-143.411 170.701 0 50.637 33.178 34.15 47.718 127.027 6.144 38.502 35.43 0.614 41.062 88.525 0 35.021-16.026 43.725-16.026 43.725s8.141 51.866 11.315 91.802c3.277 41.83-20.378 131.072-117.811 158.464-16.998 17.459-28.518 45.158 23.91 72.909-114.688 5.325-141.363-54.682-202.445-98.816-51.968-38.707-65.997-99.994-63.488-132.608 3.328-39.936 11.418-91.802 11.418-91.802s-16.077-8.704-16.077-43.725c5.632-87.962 35.021-50.022 41.114-88.525 14.541-92.877 47.77-76.39 47.77-127.027 0-84.48-10.854-113.152-119.603-159.949-109.107-46.95-143.053-122.214-142.49-231.219 0.154-32.614-0.563-44.595-0.563-44.595h819.2c0 0-0.717 11.981-0.563 44.595zM870.4 460.8v153.6h-102.4v-153.6h-153.6v-102.4h153.6v-153.6h102.4v153.6h153.6v102.4h-153.6z" /> +<glyph unicode="" glyph-name="address" d="M1013.709 708.352l-121.6 93.696c-6.912 4.762-16.589 9.011-26.675 12.134-10.138 3.123-20.634 5.018-29.030 5.018h-350.003l41.011-256h308.992c8.397 0 18.893 1.894 28.979 5.018s19.814 7.424 26.675 12.083l121.6 93.798c6.912 4.659 10.342 10.854 10.342 17.101s-3.43 12.442-10.291 17.152zM435.2 921.6h-51.2c-14.131 0-25.6-11.469-25.6-25.6v-179.2h-170.803c-8.499 0-18.944-1.894-29.030-5.069-10.138-3.072-19.814-7.322-26.675-12.083l-121.6-93.696c-6.912-4.659-10.291-10.906-10.291-17.152 0-6.195 3.379-12.39 10.291-17.152l121.6-93.798c6.861-4.659 16.538-8.96 26.675-12.032 10.086-3.123 20.531-5.018 29.030-5.018h170.803v-435.2c0-14.131 11.469-25.6 25.6-25.6h51.2c14.131 0 25.6 11.469 25.6 25.6v870.4c0 14.131-11.469 25.6-25.6 25.6z" /> +<glyph unicode="" glyph-name="adjust" d="M972.8 501.811c-9.318 0-40.909 0-50.176 0-28.314 0-51.2-18.381-51.2-41.011 0-22.579 22.886-40.909 51.2-40.909 9.318 0 40.909 0 50.176 0 28.262 0 51.2 18.278 51.2 40.909 0 22.579-22.989 41.011-51.2 41.011zM512 742.4c-156.211 0-281.6-125.389-281.6-281.6s125.389-281.6 281.6-281.6c156.16 0 281.6 125.389 281.6 281.6s-125.491 281.6-281.6 281.6zM512 256c-113.203 0-204.8 91.699-204.8 204.8 0 113.203 91.597 204.8 204.8 204.8v-409.6zM153.6 460.8c0 22.579-22.989 41.011-51.2 41.011-9.472 0-41.779 0-51.2 0-28.314 0-51.2-18.381-51.2-41.011 0-22.579 22.886-40.909 51.2-40.909 9.421 0 41.728 0 51.2 0 28.211 0 51.2 18.33 51.2 40.909zM512 819.2c22.579 0 40.909 22.886 40.909 51.2 0 9.421 0 41.779 0 51.2 0 28.314-18.33 51.2-40.909 51.2-22.63 0-41.011-22.886-41.011-51.2 0-9.421 0-41.779 0-51.2 0-28.314 18.381-51.2 41.011-51.2zM512 102.4c-22.63 0-41.011-22.886-41.011-51.2 0-9.421 0-41.779 0-51.2 0-28.314 18.381-51.2 41.011-51.2 22.579 0 40.909 22.886 40.909 51.2 0 9.421 0 41.779 0 51.2 0 28.314-18.33 51.2-40.909 51.2zM889.088 779.981c20.019 20.019 23.245 49.203 7.27 65.178s-45.21 12.698-65.126-7.322c-5.53-5.478-30.362-30.31-35.84-35.789-20.019-20.019-23.245-49.203-7.27-65.178s45.21-12.698 65.178 7.322c5.478 5.53 30.259 30.31 35.789 35.789zM170.701 177.51c-5.53-5.581-30.362-30.413-35.84-35.891-20.019-20.019-23.245-49.101-7.27-65.075s45.21-12.8 65.126 7.219c5.53 5.478 30.362 30.31 35.84 35.789 20.019 20.019 23.245 49.203 7.27 65.229s-45.21 12.646-65.126-7.27zM192.768 837.888c-19.968 20.019-49.203 23.296-65.178 7.322s-12.698-45.21 7.219-65.229c5.53-5.478 30.362-30.31 35.84-35.789 20.019-20.019 49.152-23.296 65.126-7.322s12.749 45.21-7.219 65.178c-5.478 5.53-30.259 30.362-35.789 35.84zM795.341 119.501c5.53-5.478 30.362-30.31 35.84-35.789 20.019-20.019 49.152-23.194 65.126-7.322 15.974 15.974 12.749 45.21-7.27 65.178-5.478 5.478-30.31 30.31-35.789 35.789-20.019 20.019-49.203 23.296-65.229 7.322s-12.698-45.158 7.322-65.178z" /> +<glyph unicode="" glyph-name="air" d="M135.322 647.322c89.446 76.8 160.102 137.523 351.846 29.184 92.109-52.019 166.4-71.68 228.198-71.578 108.288 0 178.483 60.211 239.155 112.282 21.658 18.586 24.422 51.61 6.246 73.677-18.278 22.118-50.534 24.986-72.192 6.4-89.395-76.902-160.102-137.626-351.846-29.184-253.338 143.002-372.019 41.114-467.354-40.806-21.606-18.586-24.371-51.507-6.195-73.677 18.227-22.016 50.483-24.934 72.141-6.298zM888.576 535.808c-89.395-76.8-160.102-137.626-351.846-29.184-253.338 143.104-372.019 41.165-467.354-40.704-21.606-18.586-24.422-51.61-6.195-73.677 18.176-22.118 50.483-24.986 72.141-6.4 89.446 76.851 160.102 137.574 351.846 29.286 92.109-52.122 166.4-71.68 228.198-71.68 108.288 0 178.483 60.211 239.155 112.384 21.658 18.586 24.422 51.61 6.246 73.626-18.227 22.17-50.534 24.934-72.192 6.349zM888.576 274.381c-89.395-76.902-160.102-137.626-351.846-29.286-253.338 143.104-372.019 41.216-467.354-40.704-21.606-18.586-24.422-51.61-6.195-73.677 18.176-22.118 50.483-24.883 72.141-6.298 89.446 76.8 160.102 137.472 351.846 29.184 92.109-52.019 166.4-71.68 228.198-71.68 108.288 0 178.483 60.314 239.155 112.384 21.658 18.586 24.422 51.61 6.246 73.677-18.227 22.118-50.534 24.934-72.192 6.4z" /> +<glyph unicode="" glyph-name="aircraft-landing" d="M960.102 151.654c-4.966-13.619-42.086-51.302-308.685 44.954l-261.376 94.362c-90.982 32.819-219.034 84.429-269.21 113.51-35.123 20.326-42.803 65.638-42.803 65.638s-8.346 151.347-13.466 188.621c-5.12 37.274 4.864 43.674 40.755 25.19 22.323-11.52 95.488-131.174 126.157-182.63 77.414-19.507 146.534-38.963 178.842-48.589-13.158 87.91-37.888 252.314-46.746 303.77-8.499 49.306 28.16 27.392 28.16 27.392 16.947-9.728 50.33-33.843 61.747-51.302 77.926-119.091 188.006-337.92 196.403-354.714 45.875-14.336 116.582-37.53 158.822-52.736 110.387-39.885 158.054-155.341 151.398-173.466z" /> +<glyph unicode="" glyph-name="aircraft-take-off" d="M1017.344 642.406c6.093-13.158 6.502-66.048-250.061-186.47l-251.546-118.067c-87.552-41.114-214.579-95.181-270.592-110.131-39.219-10.445-76.646 16.179-76.646 16.179s-112.947 101.12-142.95 123.853c-29.952 22.733-27.392 34.304 11.008 46.592 23.91 7.629 160.256-25.242 218.368-39.936 68.557 40.96 131.174 76.083 160.819 92.058-71.475 52.89-205.21 151.654-247.859 181.76-40.909 28.928 0.512 39.322 0.512 39.322 18.842 5.069 59.494 11.674 79.974 7.373 139.315-29.133 371.866-106.035 389.683-111.923 42.598 22.323 108.954 55.91 149.606 75.008 106.24 49.869 221.542 1.894 229.683-15.616z" /> +<glyph unicode="" glyph-name="aircraft" d="M639.795 81.203c-20.173 56.115-92.416 244.48-122.368 322.406-56.474-37.734-119.501-73.472-179.814-98.714-18.739-65.536-56.013-189.901-74.035-206.49-30.925-28.518-42.598-24.832-47.36 14.285s-24.832 165.683-24.832 165.683-110.694 62.413-145.408 80.282-34.15 30.259 2.918 49.869c21.606 11.418 149.862 4.352 217.19-0.256 44.083 48.691 98.867 96.358 153.242 137.165-62.208 55.091-212.48 188.16-257.741 226.509-39.731 33.69 4.045 40.806 4.045 40.806 19.968 3.584 62.566 6.758 83.354 0.461 129.229-39.066 329.83-105.882 376.986-121.651 18.074 12.749 37.734 26.624 59.494 42.035 240.742 170.496 301.414 132.762 312.883 116.224s25.754-87.091-214.989-257.638c-21.76-15.411-41.37-29.338-59.392-42.138-1.485-50.176-8.038-263.731-15.923-399.923-1.28-21.914-18.79-61.338-28.928-79.053-0.051 0-21.658-39.168-39.322 10.138z" /> +<glyph unicode="" glyph-name="align-bottom" d="M665.6 409.6h-102.4v409.6h-102.4v-409.6h-102.4l153.6-153.6 153.6 153.6zM890.88 204.8h-757.76c-28.262 0-30.72-22.886-30.72-51.2s2.458-51.2 30.72-51.2h757.76c28.262 0 30.72 22.886 30.72 51.2s-2.458 51.2-30.72 51.2z" /> +<glyph unicode="" glyph-name="align-horizontal-middle" d="M409.6 460.8l-153.6 153.6v-102.4h-204.8v-102.4h204.8v-102.4l153.6 153.6zM768 307.2v102.4h204.8v102.4h-204.8v102.4l-153.6-153.6 153.6-153.6zM512 51.2c28.314 0 51.2 2.509 51.2 30.72v757.76c0 28.314-22.886 30.72-51.2 30.72-28.262 0-51.2-2.406-51.2-30.72v-757.76c0-28.211 22.938-30.72 51.2-30.72z" /> +<glyph unicode="" glyph-name="align-left" d="M307.2 460.8l153.6-153.6v102.4h409.6v102.4h-409.6v102.4l-153.6-153.6zM204.8 870.4c-28.314 0-51.2-2.406-51.2-30.72v-757.76c0-28.211 22.886-30.72 51.2-30.72 28.262 0 51.2 2.509 51.2 30.72v757.76c0 28.314-22.938 30.72-51.2 30.72z" /> +<glyph unicode="" glyph-name="align-right" d="M563.2 614.4v-102.4h-409.6v-102.4h409.6v-102.4l153.6 153.6-153.6 153.6zM768 839.68v-757.76c0-28.211 22.938-30.72 51.2-30.72 28.314 0 51.2 2.509 51.2 30.72v757.76c0 28.314-22.886 30.72-51.2 30.72-28.262 0-51.2-2.406-51.2-30.72z" /> +<glyph unicode="" glyph-name="align-top" d="M512 665.6l-153.6-153.6h102.4v-409.6h102.4v409.6h102.4l-153.6 153.6zM921.6 768c0 28.314-2.458 51.2-30.72 51.2h-757.76c-28.262 0-30.72-22.886-30.72-51.2s2.458-51.2 30.72-51.2h757.76c28.262 0 30.72 22.886 30.72 51.2z" /> +<glyph unicode="" glyph-name="align-vertical-middle" d="M512 358.4l-153.6-153.6h102.4v-204.8h102.4v204.8h102.4l-153.6 153.6zM665.6 716.8h-102.4v204.8h-102.4v-204.8h-102.4l153.6-153.6 153.6 153.6zM921.6 460.8c0 28.314-2.458 51.2-30.72 51.2h-757.76c-28.262 0-30.72-22.886-30.72-51.2 0-28.211 2.458-51.2 30.72-51.2h757.76c28.262 0 30.72 22.989 30.72 51.2z" /> +<glyph unicode="" glyph-name="archive" d="M715.827 870.4h-407.706c0 0-50.995 0-50.995-51.2h509.696c0 51.2-50.995 51.2-50.995 51.2zM868.762 716.8c0 51.2-50.944 51.2-50.944 51.2h-611.635c0 0-50.944 0-50.944-51.2v-51.2h713.523v51.2zM970.65 665.6c-30.106 30.31-30.106 30.31-30.106 30.31v-81.51h-857.088v81.51c0 0 0 0-30.157-30.31s-51.763-38.4-39.629-102.4c12.083-63.795 70.605-413.491 79.309-460.8 9.523-51.917 62.31-51.2 62.31-51.2h713.523c0 0 52.736-0.717 62.31 51.2 8.704 47.309 67.174 397.005 79.309 460.8 12.032 64-9.574 72.090-39.782 102.4zM716.8 358.554c0-28.365-22.989-51.354-51.354-51.354h-306.893c-28.365 0-51.354 22.989-51.354 51.354v102.246h51.2v-102.4h307.2v102.4h51.2v-102.246z" /> +<glyph unicode="" glyph-name="area-graph" d="M1024 870.4v-819.2h-1007.616c-16.282 0-21.299 10.701-11.059 23.808l228.813 294.298c10.189 13.107 28.314 14.49 40.397 3.174l72.653-68.301c12.032-11.315 29.286-9.114 38.246 4.915l156.006 242.688c8.96 13.978 26.061 15.974 37.939 4.608l111.155-107.315c11.878-11.52 28.621-9.216 37.069 5.12l262.81 398.592c8.499 14.438 20.787 17.613 33.587 17.613z" /> +<glyph unicode="" glyph-name="attachment" d="M286.822-40.96c-66.202 0-128.205 28.416-172.954 73.728-86.784 87.859-110.95 241.203 10.701 364.339 71.219 72.090 356.659 361.114 499.098 505.344 50.586 51.2 114.944 71.014 176.538 54.272 60.57-16.384 110.131-66.611 126.362-127.898 16.486-62.464-3.021-127.642-53.555-178.842l-477.338-483.328c-27.238-27.597-58.061-43.93-88.986-47.206-30.669-3.277-59.904 6.656-80.384 27.392-37.069 37.683-42.394 108.39 19.354 170.854l335.258 339.456c13.773 13.926 36.096 13.926 49.869 0s13.773-36.557 0-50.483l-335.309-339.507c-28.979-29.286-31.642-57.293-19.302-69.837 5.427-5.427 13.619-7.936 23.091-6.861 14.49 1.485 31.027 11.059 46.541 26.675l477.338 483.277c32.768 33.178 45.312 72.192 35.328 109.824-9.83 37.12-39.834 67.482-76.442 77.466-37.171 10.086-75.776-2.662-108.544-35.84-142.438-144.282-427.827-433.254-499.098-505.344-92.979-94.157-70.707-202.547-10.701-263.322 60.058-60.774 167.014-83.405 260.045 10.854l499.098 505.344c13.773 13.926 36.096 13.926 49.869 0s13.773-36.557 0-50.534l-499.098-505.344c-58.829-59.494-124.723-84.48-186.778-84.48z" /> +<glyph unicode="" glyph-name="awareness-ribbon" d="M848.589 136.294c-38.758 53.811-145.971 195.789-233.984 312.627 35.635 51.149 64.051 92.928 77.056 114.79 79.104 132.813 44.749 218.112 1.126 290.304-43.725 72.243-50.637 113.971-180.787 113.971-130.202 0-137.114-41.728-180.787-114.022-43.725-72.192-78.029-157.491 1.075-290.304 13.005-21.811 41.421-63.642 77.107-114.79-88.064-116.787-195.277-258.816-234.035-312.627-9.011-12.493-8.192-33.997 0.461-55.398 6.656-16.486 32.256-90.214 38.502-105.677 7.987-19.917 33.997-34.304 55.398-4.71 12.339 17.101 132.198 180.48 242.278 333.926 110.029-153.395 229.939-316.826 242.278-333.926 21.35-29.594 47.411-15.206 55.398 4.71 6.246 15.514 31.846 89.19 38.502 105.677 8.55 21.453 9.421 42.957 0.41 55.45zM493.261 611.174c-54.682 75.981-93.798 164.403-93.798 164.403s21.504 38.81 112.538 38.81c91.034 0 112.538-38.81 112.538-38.81s-39.219-88.422-93.85-164.403c-4.506-6.195-11.162-15.206-18.688-25.446-7.629 10.24-14.285 19.251-18.739 25.446z" /> +<glyph unicode="" glyph-name="back-in-time" d="M563.2 880.691c-227.584 0-412.723-182.374-418.253-409.395v-10.496h-121.446l184.013-199.373 178.893 199.373h-136.806v10.496c5.478 169.114 143.77 304.384 313.6 304.384 173.363 0 313.907-141.005 313.907-314.88s-140.544-314.88-313.907-314.88c-69.478 0-133.683 22.784-185.702 61.082l-71.987-77.005c71.066-55.706 160.512-88.986 257.69-88.986 231.168 0 418.509 187.904 418.509 419.789s-187.341 419.891-418.509 419.891zM512 716.8v-256c0-6.656 1.382-13.312 3.942-19.558 2.611-6.246 6.349-11.93 11.059-16.64l163.84-163.84c14.49 9.37 28.16 19.917 40.294 32.154l-116.736 116.685v307.2h-102.4z" /> +<glyph unicode="" glyph-name="back" d="M972.8 614.4v-307.2c0-56.474-45.875-102.4-102.4-102.4h-716.8v153.6h665.6v204.8h-563.2v-102.4l-204.8 179.2 204.8 179.2v-102.4h614.4c56.525 0 102.4-45.875 102.4-102.4z" /> +<glyph unicode="" glyph-name="bar-graph" d="M870.4 921.6h-102.4c-28.262 0-51.2-22.886-51.2-51.2v-869.99h204.8v869.99c0 28.314-22.886 51.2-51.2 51.2zM563.2 614.4h-102.4c-28.262 0-51.2-22.886-51.2-51.2v-562.79h204.8v562.79c0 28.314-22.886 51.2-51.2 51.2zM256 307.2h-102.4c-28.262 0-51.2-22.886-51.2-51.2v-255.59h204.8v255.59c0 28.314-22.886 51.2-51.2 51.2z" /> +<glyph unicode="" glyph-name="battery" d="M788.89 460.8c0 141.619 65.382 221.184 116.582 221.184 18.586 0 67.328 0 67.328 0-34.202 54.221-62.515 86.016-187.29 86.016h-512.41c-191.181 0-273.101-176.179-273.101-307.2s81.92-307.2 273.101-307.2h512.41c124.826 0 153.088 31.795 187.29 86.016 0 0-16.128 0-67.328 0s-116.582 79.565-116.582 221.184zM649.626 368.896c-8.397-12.8-34.611-0.819-34.611-0.819l-151.398 68.506c0 0-13.517-34.304-23.91-58.419-10.496-24.115-18.483-51.405-61.901-20.89-43.469 30.618-183.347 166.4-183.347 166.4s-17.664 14.541-8.858 28.211c8.346 12.902 34.611 0.819 34.611 0.819l151.347-68.403c0 0 13.568 34.202 23.962 58.317 10.496 24.064 18.483 51.507 61.901 20.89 43.469-30.515 183.296-166.4 183.296-166.4s17.664-14.49 8.909-28.211zM966.349 566.886h-38.349c-28.621 0-56.576-38.605-56.576-101.325 0-62.822 28.006-101.376 56.576-101.376h38.349c28.672 0 57.651 38.605 57.651 101.376 0 62.72-28.979 101.325-57.651 101.325z" /> +<glyph unicode="" glyph-name="beamed-note" d="M870.4 921.6l-0.102-665.6c0-63.642-66.611-153.6-191.898-153.6-63.642 0-115.2 33.434-115.2 96 0 81.357 73.984 130.56 153.6 130.56 22.118 0 38.605-3.021 51.2-6.298v375.501l-358.4-65.178v-479.386h-0.102c0-63.642-66.611-153.6-191.898-153.6-63.642 0-115.2 33.434-115.2 96 0 81.357 73.984 130.56 153.6 130.56 22.118 0 38.605-3.021 51.2-6.298v598.938l563.2 102.4z" /> +<glyph unicode="" glyph-name="bell" d="M750.080 536.986c-116.736 251.238-177.459 346.675-368.179 342.682-67.942-1.382-51.661 49.254-103.475 30.054-51.712-19.2-7.322-47.309-60.262-90.778-148.582-122.010-134.912-234.854-65.997-503.808 29.030-113.306-69.99-118.835-30.822-228.608 28.621-80.077 239.565-113.613 462.080-31.078 222.566 82.586 362.803 246.477 334.182 326.554-39.168 109.824-118.323 49.203-167.526 154.982zM559.309 123.136c-198.758-73.728-362.086-30.413-368.998-11.11-11.878 33.28 64.154 144.179 291.379 228.506s354.048 53.043 367.309 15.923c7.834-21.965-90.88-159.539-289.69-233.318zM495.411 302.029c-103.885-38.554-176.077-82.637-222.874-122.317 32.922-29.901 94.566-37.171 155.955-14.387 78.182 28.928 126.259 95.539 107.264 148.685-0.256 0.666-0.563 1.178-0.819 1.843-12.851-4.198-26.010-8.755-39.526-13.824z" /> +<glyph unicode="" glyph-name="blackboard" d="M129.997-51.2h177.203l71.987 189.338-151.859 51.405-97.331-240.742zM644.813 138.138l71.987-189.338h177.203l-97.331 240.742-151.859-51.405zM921.6 870.4h-332.8l-25.6 102.4h-102.4l-25.6-102.4h-332.8c-28.314 0-51.2-22.886-51.2-51.2v-563.2c0-28.262 22.886-51.2 51.2-51.2h819.2c28.314 0 51.2 22.938 51.2 51.2v563.2c0 28.262-22.886 51.2-51.2 51.2z" /> +<glyph unicode="" glyph-name="block" d="M512 952.32c-271.514 0-491.571-220.058-491.571-491.52 0-271.514 220.058-491.571 491.571-491.571 271.411 0 491.52 220.058 491.52 491.571 0 271.462-220.109 491.52-491.52 491.52zM122.829 460.8c0 214.886 174.182 389.12 389.12 389.12 93.645 0 179.507-33.126 246.63-88.218l-547.533-547.533c-55.091 67.174-88.218 152.986-88.218 246.63zM511.949 71.731c-93.594 0-179.456 33.075-246.528 88.166l547.533 547.482c55.040-67.174 88.166-152.934 88.166-246.579 0-214.886-174.285-389.069-389.171-389.069z" /> +<glyph unicode="" glyph-name="book" d="M870.4 668.16v-529.971c0-26.726-23.142-39.475-51.2-59.392-22.528-16.026-51.2 3.84-51.2 30.054 0 0 0 507.136 0 517.837 0 10.803-3.789 21.094-16.077 27.392s-396.186 208.128-396.186 208.128c-6.195 2.304-33.229 19.354-69.274 0.819-34.253-17.613-52.89-36.762-57.651-45.773l418.816-229.478c11.11-5.837 17.971-14.848 17.971-26.419v-553.062c0-11.776-7.27-24.371-18.893-29.952-5.325-2.662-11.213-3.942-17.050-3.942-6.912 0-13.875 1.69-19.763 5.325-11.008 6.707-398.029 244.019-423.578 259.43-12.288 7.373-26.675 22.477-26.982 33.69l-5.734 526.643c0 10.138-1.178 28.006 14.797 52.838 35.686 55.501 160.205 118.63 223.232 85.914l460.749-233.216c11.11-5.734 18.022-17.203 18.022-36.864z" /> +<glyph unicode="" glyph-name="bowl" d="M867.789 590.234c-111.411-148.582-209.664-153.702-360.755-161.382h-5.171c-183.859 0.102-314.266 68.403-314.266 93.798-0.102 24.115 117.658 86.886 286.976 93.133l30.208 75.418c-0.973 0-1.894 0.102-2.918 0.102-251.29 0-398.899-79.974-398.899-156.211v-102.4c0-47.002 29.798-458.189 388.198-458.189s409.6 411.187 409.6 458.189v102.4c0 20.019-10.291 40.294-29.901 59.29l-3.072-4.147zM900.557 834.458c-22.579 16.896-54.733 12.39-71.629-10.291l-184.73-246.221 119.603 298.906c10.547 26.214-2.253 56.013-28.518 66.611-26.010 10.496-56.115-2.202-66.56-28.621l-166.861-416.87c147.558 7.526 218.982 11.622 310.63 133.683 91.597 122.214 98.253 131.123 98.253 131.123 16.998 22.579 12.442 54.682-10.189 71.68z" /> +<glyph unicode="" glyph-name="box" d="M942.029 870.4h-860.109c-16.998 0-30.72-13.67-30.72-30.72v-122.88h921.6v122.88c0 17.050-13.824 30.72-30.771 30.72zM102.4 122.88c0-39.424 32.205-71.68 71.629-71.68h675.84c39.424 0 71.68 32.307 71.68 71.68v542.72h-819.149v-542.72zM358.4 563.2h307.2v-102.4h-307.2v102.4z" /> +<glyph unicode="" glyph-name="briefcase" d="M460.8 460.8h102.4v-102.4h460.8c0 0-7.629 228.301-10.24 299.725-2.56 67.891-26.88 109.875-102.4 109.875h-164.25c-25.446 48.026-52.838 99.584-61.286 115.507-16.947 31.898-22.733 38.093-60.365 38.093h-226.97c-37.632 0-43.366-6.195-60.365-38.093-8.448-15.923-35.84-67.482-61.235-115.507h-164.301c-75.571 0-99.584-41.984-102.4-109.875-2.765-67.942-10.189-299.725-10.189-299.725h460.8v102.4zM391.629 823.501c11.776 22.118 15.77 26.419 41.83 26.419h157.030c26.061 0 30.106-4.301 41.779-26.419 4.403-8.192 16.282-30.72 29.44-55.501h-299.52c13.158 24.781 25.037 47.309 29.44 55.501zM563.2 204.8h-102.4v102.4h-435.2c0 0 6.349-92.006 10.189-170.086 1.587-32.41 11.162-85.914 92.16-85.914h768.051c80.998 0 90.368 53.606 92.16 85.914 4.454 80.282 10.24 170.086 10.24 170.086h-435.2v-102.4z" /> +<glyph unicode="" glyph-name="browser" d="M921.6 870.4h-819.2c-56.32 0-102.4-46.080-102.4-102.4v-614.4c0-56.32 46.080-102.4 102.4-102.4h819.2c56.32 0 102.4 46.080 102.4 102.4v614.4c0 56.32-46.080 102.4-102.4 102.4zM230.4 780.8c21.197 0 38.4-17.203 38.4-38.4s-17.203-38.4-38.4-38.4c-21.197 0-38.4 17.203-38.4 38.4s17.203 38.4 38.4 38.4zM89.6 742.4c0 21.197 17.203 38.4 38.4 38.4s38.4-17.203 38.4-38.4c0-21.197-17.203-38.4-38.4-38.4s-38.4 17.203-38.4 38.4zM921.6 153.6h-819.2v460.8h819.2v-460.8zM921.6 716.8h-614.4v51.2h615.373l-0.973-51.2z" /> +<glyph unicode="" glyph-name="brush" d="M141.466 278.374c-77.568-76.186-12.032-154.419-115.046-270.285-46.49-52.378 191.386-36.403 309.197 79.411 50.022 49.203 35.891 120.781-17.715 173.517-53.606 52.634-126.464 66.56-176.435 17.357zM1000.397 939.059c-39.731 39.117-480.205-313.805-611.277-442.675-65.075-64-86.784-98.304-106.701-123.904-8.704-11.213 2.816-14.592 7.885-17.203 25.805-13.21 43.827-25.395 67.123-48.282 23.347-22.886 35.789-40.602 49.101-65.997 2.714-5.018 6.195-16.282 17.51-7.782 26.112 19.61 60.979 41.011 126.054 104.909 131.123 128.819 490.138 561.869 450.304 600.934z" /> +<glyph unicode="" glyph-name="bucket" d="M563.2 921.6c-251.29 0-409.498-81.51-398.848-151.040 3.072-19.917 11.52-99.584 22.221-167.578-123.136-47.821-163.942-125.389-158.464-188.621 6.502-74.803 73.779-154.88 221.594-168.704 84.378-7.885 185.907 38.4 251.699 117.504-6.246 10.598-9.882 23.040-9.882 36.198 0 39.629 32.102 71.68 71.68 71.68 39.629 0 71.68-32.102 71.68-71.68 0-39.014-31.232-70.707-70.093-71.578-78.285-101.018-197.53-161.997-310.477-154.88 2.611-16.589 3.584-48.486 4.915-56.986 4.608-29.645 120.166-115.712 303.974-115.917 183.808 0.205 299.366 86.272 304.026 115.866 4.506 29.542 84.019 584.141 94.822 654.694 10.65 69.53-147.61 151.040-398.848 151.040zM99.482 420.608c-2.816 32.922 23.296 76.698 98.509 109.517 10.803-68.608 22.579-143.206 32.922-208.589-82.125 16.026-127.898 58.829-131.43 99.072zM563.2 664.371c-183.808 0.102-314.214 68.301-314.214 93.798-0.102 25.293 130.406 91.648 314.214 91.546 183.808 0.102 314.317-66.253 314.214-91.546 0-25.498-130.406-93.696-314.214-93.798z" /> +<glyph unicode="" glyph-name="cake" d="M490.701 663.757c99.942 0 132.659 70.707 94.157 145.562-44.595 86.682 97.024 161.536 26.675 161.536-66.611 0-191.283-72.602-214.528-162.97-17.357-67.789 15.155-144.128 93.696-144.128zM757.555 205.466l-22.733 19.61c-24.934 21.504-64 21.402-88.832 0l-22.63-19.558c-31.744-27.341-71.526-41.011-111.309-41.011s-79.565 13.67-111.258 40.96l-22.733 19.661c-24.934 21.402-63.949 21.453-88.781-0.051l-22.733-19.61c-61.082-52.634-151.91-54.067-215.245-5.12v-200.346c0-28.262 22.938-51.2 51.2-51.2h819.2c28.262 0 51.2 22.938 51.2 51.2v200.294c-63.334-48.845-154.163-47.565-215.347 5.171zM512 614.4c-387.789 0-460.8-172.083-460.8-256v-24.013l59.597-51.354c24.883-21.555 63.949-21.35 88.832 0l22.733 19.61c63.334 54.528 158.976 54.579 222.464 0l22.733-19.661c24.781-21.35 63.744-21.504 88.832 0.051l22.63 19.558c63.488 54.63 159.078 54.63 222.515 0.051l22.733-19.61c24.934-21.555 64-21.35 88.832 0l59.699 51.354v24.013c0 83.917-73.011 256-460.8 256z" /> +<glyph unicode="" glyph-name="calculator" d="M747.52 921.6h-471.142c-39.373 0-71.578-32.205-71.578-71.68v-778.24c0-39.424 32.205-71.68 71.578-71.68h471.142c39.373 0 71.68 32.307 71.68 71.68v778.24c0 39.475-32.307 71.68-71.68 71.68zM358.4 358.4c35.277 0 64-22.886 64-51.2s-28.723-51.2-64-51.2c-35.328 0-64 22.886-64 51.2s28.672 51.2 64 51.2zM294.4 460.8c0 28.314 28.672 51.2 64 51.2 35.277 0 64-22.886 64-51.2s-28.723-51.2-64-51.2c-35.328 0-64 22.886-64 51.2zM358.4 204.8c35.277 0 64-22.886 64-51.2s-28.723-51.2-64-51.2c-35.328 0-64 22.886-64 51.2s28.672 51.2 64 51.2zM512 358.4c35.277 0 64-22.886 64-51.2s-28.723-51.2-64-51.2c-35.328 0-64 22.886-64 51.2s28.672 51.2 64 51.2zM448 460.8c0 28.314 28.672 51.2 64 51.2 35.277 0 64-22.886 64-51.2s-28.723-51.2-64-51.2c-35.328 0-64 22.886-64 51.2zM512 204.8c35.277 0 64-22.886 64-51.2s-28.723-51.2-64-51.2c-35.328 0-64 22.886-64 51.2s28.672 51.2 64 51.2zM665.6 358.4c35.277 0 64-22.886 64-51.2s-28.723-51.2-64-51.2c-35.328 0-64 22.886-64 51.2s28.672 51.2 64 51.2zM601.6 460.8c0 28.314 28.672 51.2 64 51.2 35.277 0 64-22.886 64-51.2s-28.723-51.2-64-51.2c-35.328 0-64 22.886-64 51.2zM665.6 204.8c35.277 0 64-22.886 64-51.2s-28.723-51.2-64-51.2c-35.328 0-64 22.886-64 51.2s28.672 51.2 64 51.2zM256 614.4v153.6h512v-153.6h-512z" /> +<glyph unicode="" glyph-name="calendar" d="M870.4 819.2h-51.2v-102.4h-153.6v102.4h-307.2v-102.4h-153.6v102.4h-51.2c-56.371 0-102.4-46.080-102.4-102.4v-614.4c0-56.32 46.029-102.4 102.4-102.4h716.8c56.32 0 102.4 46.080 102.4 102.4v614.4c0 56.32-46.080 102.4-102.4 102.4zM870.4 102.4h-716.8v409.6h716.8v-409.6zM332.8 921.6h-102.4v-179.2h102.4v179.2zM793.6 921.6h-102.4v-179.2h102.4v179.2z" /> +<glyph unicode="" glyph-name="camera" d="M512 563.2c-84.838 0-153.6-68.813-153.6-153.6s68.762-153.6 153.6-153.6c84.787 0 153.6 68.813 153.6 153.6s-68.813 153.6-153.6 153.6zM921.6 716.8h-122.88c-16.896 0-35.123 13.107-40.397 29.184l-31.795 95.283c-5.376 16.026-23.501 29.133-40.448 29.133h-348.16c-16.896 0-35.123-13.107-40.397-29.082l-31.846-95.334c-5.325-16.077-23.501-29.184-40.397-29.184h-122.88c-56.32 0-102.4-46.080-102.4-102.4v-460.8c0-56.32 46.080-102.4 102.4-102.4h819.2c56.32 0 102.4 46.080 102.4 102.4v460.8c0 56.32-46.080 102.4-102.4 102.4zM512 153.6c-141.414 0-256 114.586-256 256s114.586 256 256 256c141.363 0 256-114.586 256-256s-114.637-256-256-256zM896 552.96c-19.814 0-35.84 16.077-35.84 35.891 0 19.712 16.026 35.84 35.84 35.84s35.84-16.077 35.84-35.84c0-19.814-16.026-35.891-35.84-35.891z" /> +<glyph unicode="" glyph-name="ccw" d="M35.072 460.8h121.446v10.496c5.53 227.021 190.669 409.395 418.253 409.395 231.168 0 418.509-188.006 418.509-419.891s-187.341-419.789-418.509-419.789c-97.178 0-186.624 33.28-257.69 88.986l71.987 77.005c52.019-38.298 116.224-61.082 185.702-61.082 173.363 0 313.907 141.005 313.907 314.88s-140.544 314.88-313.907 314.88c-169.83 0-308.122-135.322-313.6-304.384v-10.496h136.806l-178.893-199.373-184.013 199.373z" /> +<glyph unicode="" glyph-name="chat" d="M296.96 348.16v317.44h-194.56c-56.32 0-102.4-46.080-102.4-102.4v-307.2c0-56.32 46.080-102.4 102.4-102.4h51.2v-153.6l153.6 153.6h256c56.32 0 102.4 46.080 102.4 102.4v93.184c-3.277-0.717-6.758-1.075-10.24-1.075l-358.4 0.051zM921.6 921.6h-460.8c-56.32 0-102.4-46.080-102.4-102.4v-409.6h358.4l153.6-153.6v153.6h51.2c56.32 0 102.4 46.029 102.4 102.4v307.2c0 56.32-46.080 102.4-102.4 102.4z" /> +<glyph unicode="" glyph-name="check" d="M424.653 102.502c-22.272 0-43.366 10.394-56.883 28.314l-182.938 241.715c-23.808 31.386-17.613 76.083 13.824 99.891 31.488 23.91 76.186 17.613 99.994-13.824l120.371-158.925 302.643 485.99c20.838 33.382 64.87 43.622 98.355 22.784 33.434-20.787 43.725-64.819 22.835-98.304l-357.581-573.952c-12.39-20.019-33.843-32.512-57.344-33.587-1.126-0.102-2.15-0.102-3.277-0.102z" /> +<glyph unicode="" glyph-name="circle-with-cross" d="M512 890.88c-237.517 0-430.080-192.563-430.080-430.080s192.563-430.080 430.080-430.080 430.080 192.563 430.080 430.080c0 237.517-192.563 430.080-430.080 430.080zM757.197 304.077l-88.525-88.525-156.672 156.723-156.723-156.672-88.525 88.525 156.774 156.672-156.723 156.723 88.525 88.474 156.672-156.672 156.723 156.723 88.525-88.525-156.774-156.723 156.723-156.723z" /> +<glyph unicode="" glyph-name="circle-with-minus" d="M512 890.88c-237.517 0-430.080-192.563-430.080-430.080s192.563-430.080 430.080-430.080 430.080 192.563 430.080 430.080c0 237.517-192.563 430.080-430.080 430.080zM768 409.6h-512v102.4h512v-102.4z" /> +<glyph unicode="" glyph-name="circle-with-plus" d="M512 890.88c-237.517 0-430.080-192.563-430.080-430.080s192.563-430.080 430.080-430.080 430.080 192.563 430.080 430.080c0 237.517-192.563 430.080-430.080 430.080zM768 409.6h-204.8v-204.8h-102.4v204.8h-204.8v102.4h204.8v204.8h102.4v-204.8h204.8v-102.4z" /> +<glyph unicode="" glyph-name="circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52c271.411 0 491.52 220.058 491.52 491.571 0 271.411-220.109 491.469-491.52 491.469zM512 71.731c-214.886 0-389.12 174.182-389.12 389.12s174.182 389.069 389.12 389.069c214.886 0 389.171-174.182 389.171-389.12s-174.285-389.069-389.171-389.069z" /> +<glyph unicode="" glyph-name="circular-graph" d="M900.301 492.954h102.4c-3.328 53.709-15.002 105.114-34.202 152.781l-89.907-51.917c11.469-31.898 18.995-65.69 21.709-100.864zM721.971 906.496c-48.896 23.091-101.888 38.758-158.003 44.544v-103.475c37.53-4.966 73.37-15.104 106.701-29.952l51.302 88.883zM831.59 684.954l89.139 51.456c-30.259 44.954-68.096 84.224-111.206 116.992l-51.507-89.19c28.109-22.835 52.787-49.562 73.574-79.258zM512.717 73.165c-214.886 0-389.12 174.182-389.12 389.12 0 197.53 147.302 360.243 337.971 385.331v103.475c-247.45-25.6-440.371-234.65-440.371-488.806 0-271.514 220.058-491.571 491.571-491.571 246.989 0 450.918 182.426 485.683 419.84h-103.475c-33.69-180.582-191.898-317.389-382.259-317.389z" /> +<glyph unicode="" glyph-name="clapperboard" d="M1024 819.2v-716.8c0-28.262-22.886-51.2-51.2-51.2h-921.6c-28.314 0-51.2 22.938-51.2 51.2v716.8c0 28.314 22.886 51.2 51.2 51.2h51.2l153.6-153.6h128l-153.6 153.6h153.6l153.6-153.6h128l-153.6 153.6h153.6l153.6-153.6h128l-153.6 153.6h179.2c28.314 0 51.2-22.938 51.2-51.2z" /> +<glyph unicode="" glyph-name="clipboard" d="M798.72 870.4l-61.44-153.6h-450.56l-61.44 153.6c-39.475 0-71.68-32.205-71.68-71.68v-778.24c0-39.424 32.205-71.68 71.629-71.68h573.44c39.424 0 71.68 32.307 71.68 71.68v778.24c0.051 39.475-32.256 71.68-71.629 71.68zM696.32 768l46.080 102.4h-111.667l-36.813 102.4h-163.84l-36.864-102.4h-111.616l46.029-102.4h368.691z" /> +<glyph unicode="" glyph-name="clock" d="M512 952.32c-271.514 0-491.571-220.058-491.571-491.52 0-271.514 220.058-491.571 491.571-491.571 271.411 0 491.52 220.058 491.52 491.571 0 271.462-220.109 491.52-491.52 491.52zM511.949 71.68c-214.886 0-389.12 174.182-389.12 389.12 0 214.886 174.182 389.12 389.12 389.12 214.886 0 389.171-174.182 389.171-389.12 0-214.886-174.285-389.12-389.171-389.12zM563.2 495.104v272.896h-102.4v-319.744l-181.555-104.858 51.2-88.678 210.688 121.702c12.186 7.014 22.067 24.218 22.067 38.298v8.602l217.088 213.299c-10.138 13.875-21.043 27.085-33.126 39.219l-183.962-180.736z" /> +<glyph unicode="" glyph-name="code" d="M292.813 217.6c-12.083 0-24.269 4.25-33.997 12.902l-259.072 230.298 273.459 243.098c21.094 18.688 53.453 16.896 72.243-4.25s16.896-53.504-4.25-72.294l-187.341-166.554 172.954-153.702c21.146-18.79 23.040-51.149 4.25-72.294-10.086-11.418-24.166-17.203-38.246-17.203zM750.797 217.702l273.459 243.098-259.072 230.298c-21.146 18.79-53.504 16.896-72.243-4.25-18.79-21.146-16.896-53.504 4.25-72.294l172.954-153.754-187.341-166.502c-21.146-18.79-23.040-51.149-4.25-72.294 10.086-11.418 24.166-17.203 38.246-17.203 12.083 0 24.269 4.25 33.997 12.902zM511.283 145.152l102.4 614.4c4.659 27.904-14.182 54.272-42.086 58.931-28.006 4.71-54.323-14.182-58.88-42.086l-102.4-614.4c-4.659-27.904 14.182-54.272 42.086-58.931 2.867-0.461 5.632-0.666 8.448-0.666 24.576 0 46.285 17.766 50.432 42.752z" /> +<glyph unicode="" glyph-name="cog" d="M859.29 460.8c0 53.709 33.075 96 82.79 125.082-9.011 29.901-20.838 58.624-35.43 85.606-55.757-14.592-100.864 7.219-138.803 45.21-37.939 37.888-49.562 82.995-34.97 138.803-26.982 14.592-55.706 26.522-85.606 35.379-29.082-49.664-81.664-82.688-135.27-82.688-53.658 0-106.189 33.024-135.322 82.688-29.952-8.858-58.573-20.787-85.555-35.379 14.592-55.808 3.021-100.915-35.021-138.803-37.888-37.99-82.995-59.802-138.803-45.21-14.592-26.982-26.47-55.706-35.379-85.606 49.664-29.082 82.688-71.373 82.688-125.082 0-53.606-33.024-106.189-82.688-135.322 8.96-29.901 20.787-58.573 35.379-85.606 55.808 14.592 100.915 3.021 138.803-34.918 37.939-37.99 49.613-83.098 35.021-138.803 26.982-14.592 55.654-26.522 85.606-35.482 29.082 49.818 81.664 82.79 135.322 82.79 53.606 0 106.189-33.024 135.322-82.79 29.901 9.011 58.573 20.89 85.606 35.482-14.592 55.706-3.021 100.813 34.97 138.803 37.939 37.888 83.046 59.699 138.803 45.21 14.592 26.982 26.47 55.603 35.43 85.606-49.818 29.133-82.893 71.424-82.893 125.030zM512 273.818c-103.322 0-187.034 83.712-187.034 186.982 0 103.322 83.763 187.085 187.034 187.085 103.322 0 186.982-83.814 186.982-187.085 0-103.322-83.661-186.982-186.982-186.982z" /> +<glyph unicode="" glyph-name="colours" d="M162.765 665.702c-21.658 17.92-54.118 14.848-72.090-6.758l-65.382-78.797c-17.92-21.658-14.899-54.17 6.707-72.038l403.866-334.95-194.918 427.725-78.182 64.819zM359.066 835.43l-93.184-42.445c-25.549-11.674-36.966-42.24-25.344-67.789l217.6-477.44 10.906 469.965-42.086 92.365c-11.776 25.6-42.291 37.018-67.891 25.344zM727.603 824.986c0.666 28.16-21.862 51.712-49.971 52.378l-102.4 2.355c-28.109 0.666-51.661-21.862-52.326-49.971l-12.237-524.442 214.528 418.15 2.406 101.53zM982.579 776.346l-91.085 46.746c-25.037 12.8-56.115 2.816-68.966-22.221l-327.219-637.747c-12.851-25.037-2.867-56.115 22.221-68.966l91.085-46.746c25.037-12.851 56.064-2.867 68.915 22.17l327.219 637.747c12.851 25.139 2.867 56.166-22.17 69.018zM655.309 138.598c-12.902-25.19-43.776-35.123-68.915-22.221-25.19 12.902-35.072 43.725-22.17 68.915s43.725 35.072 68.915 22.17c25.19-12.851 35.072-43.725 22.17-68.864z" /> +<glyph unicode="" glyph-name="compass" d="M279.245 227.942c0 0 233.882 32.102 333.722 131.891s131.891 333.722 131.891 333.722-233.933-32.102-333.722-131.891-131.891-333.722-131.891-333.722zM461.67 511.232c41.882 41.882 122.112 71.68 190.925 90.214-18.483-68.71-48.384-149.504-90.112-191.078-27.802-27.904-73.011-27.904-100.813 0-27.904 27.802-27.904 72.96 0 100.864zM512.051 952.32c-271.514 0-491.571-220.058-491.571-491.52 0-271.514 220.058-491.571 491.571-491.571 271.411 0 491.52 220.058 491.52 491.571 0 271.462-220.109 491.52-491.52 491.52zM512 71.68c-214.886 0-389.12 174.182-389.12 389.12 0 214.886 174.182 389.12 389.12 389.12 214.886 0 389.171-174.182 389.171-389.12 0-214.886-174.285-389.12-389.171-389.12z" /> +<glyph unicode="" glyph-name="copy" d="M563.2 972.8h-409.6c-28.314 0-51.2-22.886-51.2-51.2v-614.4c0-28.262 22.886-51.2 51.2-51.2h256v-102.4h102.4v102.4h-102.349v102.4h102.349v102.4h-102.4v-102.4h-204.8v512h307.2v-204.8h102.4v256c0 28.262-22.886 51.2-51.2 51.2zM409.6 614.4v-51.2h102.4v102.4h-51.2c-28.314 0-51.2-22.886-51.2-51.2zM614.4-51.2h102.4v102.4h-102.4v-102.4zM614.4 563.2h102.4v102.4h-102.4v-102.4zM409.6 0c0-28.262 22.886-51.2 51.2-51.2h51.2v102.4h-102.4v-51.2zM870.4 665.6h-51.2v-102.4h102.4v51.2c0 28.262-22.886 51.2-51.2 51.2zM819.2-51.2h51.2c28.314 0 51.2 22.938 51.2 51.2v51.2h-102.4v-102.4zM819.2 358.4h102.4v102.4h-102.4v-102.4zM819.2 153.6h102.4v102.4h-102.4v-102.4z" /> +<glyph unicode="" glyph-name="credit-card" d="M921.6 819.2h-819.2c-56.371 0-102.4-46.080-102.4-102.4v-512c0-56.32 46.029-102.4 102.4-102.4h819.2c56.32 0 102.4 46.080 102.4 102.4v512c0 56.32-46.080 102.4-102.4 102.4zM921.6 204.8h-819.2v307.2h819.2v-307.2zM921.6 665.6h-819.2v51.2h819.2v-51.2zM204.8 404.48v-30.72h30.72v30.72h-30.72zM389.12 343.091v-30.771h61.44v30.771h30.72v30.72h30.72v30.72h-61.44v-30.72h-30.771v-30.72h-30.669zM512 312.32v30.771h-30.771v-30.771h30.771zM358.4 312.32v30.771h-61.44v-30.771h61.44zM389.12 373.811h30.72v30.72h-61.44v-61.389h30.72v30.669zM266.189 343.091h30.771v30.72h30.72v30.72h-61.44v-30.72h-30.72v-30.72h-30.72v-30.771h61.389v30.771z" /> +<glyph unicode="" glyph-name="credit" d="M563.2 114.944v-114.944h-102.4v109.722c-87.654 5.12-156.979 30.157-217.139 92.006l87.962 89.088c43.981-44.544 103.578-59.392 168.038-59.392 80.128 0 123.136 30.669 123.136 87.142 0 24.73-6.81 45.517-21.504 59.392-13.67 12.851-29.286 19.814-61.542 24.73l-84.070 11.878c-59.597 8.909-103.526 27.699-134.861 58.419-33.178 33.638-49.818 79.155-49.818 138.598 0 110.336 70.758 191.642 189.798 209.92v100.096h102.4v-98.918c70.758-7.424 126.208-31.744 174.848-79.411l-85.965-86.118c-43.981 42.598-96.717 48.486-142.694 48.486-72.294 0-107.469-40.55-107.469-89.088 0-17.818 5.888-36.659 20.531-50.483 13.67-12.902 36.147-23.757 64.512-27.699l82.022-11.878c63.539-8.909 103.578-26.726 132.915-54.426 37.171-35.635 53.76-87.142 53.76-149.504 0-115.2-80.23-187.494-192.461-207.616z" /> +<glyph unicode="" glyph-name="cross" d="M734.618 212.531c-24.013-24.013-62.925-24.013-86.886 0l-135.731 155.136-135.731-155.085c-24.013-24.013-62.925-24.013-86.886 0-24.013 24.013-24.013 62.925 0 86.886l141.21 161.28-141.261 161.382c-24.013 24.013-24.013 62.874 0 86.886s62.874 24.013 86.886 0l135.782-155.187 135.731 155.187c24.013 24.013 62.874 24.013 86.886 0s24.013-62.925 0-86.886l-141.21-161.382 141.21-161.28c24.013-24.013 24.013-62.925 0-86.938z" /> +<glyph unicode="" glyph-name="cup" d="M512 921.6c-219.085 0-355.328-72.192-347.904-130.816l73.83-689.51c2.97-23.552 113.715-101.171 274.074-101.274 160.307 0.102 271.104 77.722 273.971 101.325l73.83 689.51c7.424 58.573-128.717 130.765-347.802 130.765zM512 701.901c-160.358 0.102-274.074 57.19-274.074 78.592-0.051 21.197 113.766 78.387 274.074 78.285 160.307 0.102 274.125-57.088 273.971-78.285 0-21.402-113.664-78.49-273.971-78.592z" /> +<glyph unicode="" glyph-name="cw" d="M988.928 460.8h-121.446v10.496c-5.53 227.021-190.669 409.395-418.253 409.395-231.168 0-418.509-188.006-418.509-419.891s187.341-419.789 418.509-419.789c97.178 0 186.624 33.28 257.69 88.986l-71.987 77.005c-52.019-38.298-116.224-61.082-185.702-61.082-173.363 0-313.907 141.005-313.907 314.88s140.544 314.88 313.907 314.88c169.83 0 308.122-135.322 313.6-304.384v-10.496h-136.806l178.893-199.373 184.013 199.373z" /> +<glyph unicode="" glyph-name="cycle" d="M282.419 244.531c-115.814 124.518-113.766 319.693 6.554 440.883 49.254 49.613 110.797 79.206 174.797 88.883l-3.533 106.342c-89.856-10.906-176.742-50.995-245.606-120.371-161.229-162.304-163.174-424.397-6.298-590.387l-89.139-89.702 282.112-15.411-0.768 298.701-118.118-118.938zM622.746 856.832l0.768-298.701 118.118 118.886c115.814-124.621 113.766-319.795-6.554-440.883-49.203-49.613-110.797-79.206-174.797-88.883l3.533-106.291c89.856 10.906 176.742 50.995 245.658 120.32 161.178 162.406 163.123 424.499 6.246 590.387l89.139 89.805-282.112 15.36z" /> +<glyph unicode="" glyph-name="database" d="M856.371 325.581c-43.162-69.786-180.992-120.883-344.371-120.883s-301.21 51.098-344.422 120.883c-9.114 14.848-13.978 6.912-13.978-0.358 0-7.373 0-102.502 0-102.502 0-99.328 160.461-202.24 358.4-202.24s358.4 102.912 358.4 202.189c0 0 0 95.13 0 102.502 0 7.322-4.915 15.258-14.029 0.41zM856.934 587.52c-42.496-61.696-180.838-107.008-344.934-107.008s-302.49 45.312-344.986 107.008c-8.755 12.698-13.414 5.786-13.414 0.102 0-5.786 0-120.678 0-120.678 0-90.214 160.461-163.277 358.4-163.277s358.4 73.114 358.4 163.277c0 0 0 114.893 0 120.678 0 5.683-4.71 12.595-13.466-0.102zM512 921.6c-197.939 0-358.4-60.416-358.4-134.81v-64.512c0-78.899 160.461-142.899 358.4-142.899s358.4 64 358.4 142.899v64.512c0 74.394-160.461 134.81-358.4 134.81z" /> +<glyph unicode="" glyph-name="dial-pad" d="M307.2 972.8h-102.4c-28.262 0-51.2-22.938-51.2-51.2v-102.4c0-28.262 22.938-51.2 51.2-51.2h102.4c28.262 0 51.2 22.938 51.2 51.2v102.4c0 28.262-22.938 51.2-51.2 51.2zM563.2 972.8h-102.4c-28.262 0-51.2-22.938-51.2-51.2v-102.4c0-28.262 22.938-51.2 51.2-51.2h102.4c28.262 0 51.2 22.938 51.2 51.2v102.4c0 28.262-22.938 51.2-51.2 51.2zM819.2 972.8h-102.4c-28.262 0-51.2-22.938-51.2-51.2v-102.4c0-28.262 22.938-51.2 51.2-51.2h102.4c28.262 0 51.2 22.938 51.2 51.2v102.4c0 28.262-22.938 51.2-51.2 51.2zM307.2 716.8h-102.4c-28.262 0-51.2-22.938-51.2-51.2v-102.4c0-28.262 22.938-51.2 51.2-51.2h102.4c28.262 0 51.2 22.938 51.2 51.2v102.4c0 28.262-22.938 51.2-51.2 51.2zM563.2 716.8h-102.4c-28.262 0-51.2-22.938-51.2-51.2v-102.4c0-28.262 22.938-51.2 51.2-51.2h102.4c28.262 0 51.2 22.938 51.2 51.2v102.4c0 28.262-22.938 51.2-51.2 51.2zM819.2 716.8h-102.4c-28.262 0-51.2-22.938-51.2-51.2v-102.4c0-28.262 22.938-51.2 51.2-51.2h102.4c28.262 0 51.2 22.938 51.2 51.2v102.4c0 28.262-22.938 51.2-51.2 51.2zM307.2 460.8h-102.4c-28.262 0-51.2-22.938-51.2-51.2v-102.4c0-28.262 22.938-51.2 51.2-51.2h102.4c28.262 0 51.2 22.938 51.2 51.2v102.4c0 28.262-22.938 51.2-51.2 51.2zM563.2 460.8h-102.4c-28.262 0-51.2-22.938-51.2-51.2v-102.4c0-28.262 22.938-51.2 51.2-51.2h102.4c28.262 0 51.2 22.938 51.2 51.2v102.4c0 28.262-22.938 51.2-51.2 51.2zM563.2 153.6h-102.4c-28.262 0-51.2-22.938-51.2-51.2v-102.4c0-28.262 22.938-51.2 51.2-51.2h102.4c28.262 0 51.2 22.938 51.2 51.2v102.4c0 28.262-22.938 51.2-51.2 51.2zM819.2 460.8h-102.4c-28.262 0-51.2-22.938-51.2-51.2v-102.4c0-28.262 22.938-51.2 51.2-51.2h102.4c28.262 0 51.2 22.938 51.2 51.2v102.4c0 28.262-22.938 51.2-51.2 51.2z" /> +<glyph unicode="" glyph-name="direction" d="M924.672 873.421c-30.003 30.003-58.573 1.69-155.699-45.005-259.84-124.877-712.653-378.675-712.653-378.675l389.069-55.501 55.552-389.069c0 0 253.85 452.762 378.675 712.499 46.694 97.178 75.008 125.747 45.056 155.75zM831.283 773.325l-282.573-524.646-28.723 238.336 311.296 286.31z" /> +<glyph unicode="" glyph-name="document" d="M819.2 921.6h-614.4c-28.314 0-51.2-22.886-51.2-51.2v-819.2c0-28.262 22.886-51.2 51.2-51.2h614.4c28.314 0 51.2 22.938 51.2 51.2v819.2c0 28.262-22.886 51.2-51.2 51.2zM768 102.4h-512v716.8h512v-716.8z" /> +<glyph unicode="" glyph-name="documents" d="M993.178 593.152l-381.133 102.195-66.714 248.883c-5.581 20.787-27.904 32.87-49.818 27.085l-464.691-124.518c-21.914-5.837-35.123-27.546-29.542-48.333l165.376-617.011c5.581-20.787 27.853-32.922 49.715-26.982l184.986 49.51-25.19-94.106c-5.581-20.787 7.629-42.496 29.542-48.282l415.232-111.309c21.914-5.888 44.134 6.195 49.766 27.085l152.064 567.501c5.53 20.787-7.68 42.496-29.594 48.282zM83.61 786.893l400.896 107.315 148.378-553.882-400.896-107.315-148.378 553.882zM802.714 27.494l-348.877 95.386 27.443 102.502 199.731 53.606c21.914 5.786 35.226 27.494 29.594 48.282l-77.21 288.102 304.486-83.507-135.168-504.371z" /> +<glyph unicode="" glyph-name="drink" d="M897.946 837.683c20.173 27.904 23.654 83.917 23.654 83.917h-819.2c0 0 3.482-56.013 23.654-83.917l334.746-428.083v-307.2h-102.4c-102.4 0-102.4-102.4-102.4-102.4h512c0 0 0 102.4-102.4 102.4h-102.4v307.2l334.746 428.083zM481.28 665.6c0 45.312 36.659 81.92 81.92 81.92s81.92-36.608 81.92-81.92c0-45.21-36.659-81.92-81.92-81.92s-81.92 36.71-81.92 81.92z" /> +<glyph unicode="" glyph-name="drive" d="M975.821 414.822l-162.355 405.862c-11.981 30.054-41.062 49.715-73.421 49.715h-456.090c-32.358 0-61.44-19.661-73.421-49.715l-162.355-405.862c-14.746-36.915-19.098-77.158-12.595-116.326l30.208-181.197c6.349-38.144 39.322-66.099 77.978-66.099h736.41c38.656 0 71.629 27.955 77.978 66.099l30.208 181.197c6.605 39.168 2.253 79.411-12.544 116.326zM868.301 192.256c-3.686-22.323-22.989-38.656-45.619-38.656h-621.363c-22.63 0-41.933 16.333-45.619 38.656l-18.688 112.282c-4.762 28.211 16.998 53.862 45.619 53.862h658.79c28.57 0 50.33-25.651 45.619-53.862l-18.739-112.282z" /> +<glyph unicode="" glyph-name="drop" d="M522.394 944.077c-1.382 11.008-19.456 11.008-20.787 0-45.21-363.878-276.378-438.886-276.378-691.814 0-156.314 131.277-282.982 286.771-282.982 155.443 0 286.72 126.72 286.72 282.982 0 252.928-231.117 327.936-276.326 691.814zM478.72 541.798c-3.021-11.213-6.298-22.733-9.677-34.714-20.531-72.909-43.827-155.597-43.827-251.187 0-51.814-30.618-70.195-59.187-70.195-32.717 0-59.187 26.778-59.187 59.699 0 112.998 54.374 186.829 102.4 251.904 15.104 20.378 29.286 39.68 40.806 58.88 5.274 8.806 19.456 8.397 25.907-0.307 3.021-4.096 4.045-9.318 2.765-14.080z" /> +<glyph unicode="" glyph-name="edit" d="M899.123 847.923c-73.83 73.882-129.28 62.822-129.28 62.822l-656.691-656.64-51.712-243.814 243.866 51.712 656.691 656.538c-0.051 0 11.059 55.45-62.874 129.382zM290.816 91.29l-83.149-17.92c-7.987 15.002-17.664 30.003-35.328 47.718-17.715 17.715-32.717 27.29-47.718 35.379l17.92 83.098 24.064 24.013c0 0 45.21-0.922 96.307-52.019 51.046-50.995 52.019-96.307 52.019-96.307l-24.115-23.962z" /> +<glyph unicode="" glyph-name="email" d="M747.93 349.594c0-43.008 12.237-60.16 44.237-60.16 71.322 0 116.736 90.88 116.736 242.022 0 231.014-168.346 341.606-378.522 341.606-216.218 0-412.877-144.998-412.877-419.021 0-261.734 172.032-404.275 436.224-404.275 89.702 0 149.914 9.83 242.022 40.55l19.763-82.278c-90.931-29.542-188.109-38.093-263.014-38.093-346.522 0-532.122 190.464-532.122 484.147 0 296.141 215.091 497.664 511.232 497.664 308.429 0 471.808-184.32 471.808-410.419 0-191.693-60.16-337.92-249.395-337.92-86.067 0-142.541 34.406-149.914 110.643-22.118-84.787-81.101-110.643-161.024-110.643-106.906 0-196.608 82.381-196.608 248.218 0 167.117 78.694 270.336 220.006 270.336 74.957 0 121.651-29.491 142.438-76.186l35.686 65.126h103.219v-361.318h0.102zM596.838 511.795c0 67.533-50.432 95.846-92.211 95.846-45.466 0-95.795-36.813-95.795-144.998 0-86.016 38.093-133.939 95.795-133.939 40.55 0 92.211 25.805 92.211 97.075v86.016z" /> +<glyph unicode="" glyph-name="emoji-happy" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52c271.411 0 491.52 220.058 491.52 491.571 0 271.411-220.109 491.469-491.52 491.469zM512 71.731c-214.886 0-389.12 174.182-389.12 389.12s174.182 389.069 389.12 389.069c214.886 0 389.171-174.182 389.171-389.12s-174.285-389.069-389.171-389.069zM384.051 473.6c42.394 0 76.749 40.090 76.749 89.6s-34.406 89.6-76.8 89.6-76.8-40.090-76.8-89.6 34.406-89.6 76.851-89.6zM640 473.6c42.445 0 76.8 40.090 76.8 89.6s-34.406 89.6-76.8 89.6-76.8-40.141-76.8-89.6 34.406-89.6 76.8-89.6zM734.259 392.397c-18.586 9.523-41.728 2.202-51.61-16.384-1.741-3.379-44.493-81.562-170.598-81.562-125.491 0-168.499 77.466-170.65 81.51-9.626 18.688-32.358 26.317-51.405 16.845-18.944-9.523-26.624-32.563-17.152-51.558 2.56-5.069 63.898-123.597 239.206-123.597 175.36 0 236.595 118.579 239.104 123.648 9.421 18.79 1.843 41.472-16.896 51.098z" /> +<glyph unicode="" glyph-name="emoji-neutral" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52c271.411 0 491.52 220.058 491.52 491.571 0 271.411-220.109 491.469-491.52 491.469zM512 71.731c-214.886 0-389.12 174.182-389.12 389.12 0 214.886 174.182 389.12 389.12 389.12 214.886 0 389.12-174.182 389.12-389.12s-174.234-389.12-389.12-389.12zM640 652.749c-42.394 0-76.8-40.090-76.8-89.549s34.406-89.6 76.8-89.6c42.445 0 76.8 40.090 76.8 89.6s-34.355 89.549-76.8 89.549zM384.051 473.6c42.394 0 76.749 40.090 76.749 89.6s-34.406 89.6-76.8 89.6c-42.394 0-76.8-40.090-76.8-89.6s34.406-89.6 76.851-89.6zM665.6 345.6h-307.2c-21.197 0-38.4-17.203-38.4-38.4s17.203-38.4 38.4-38.4h307.2c21.197 0 38.4 17.203 38.4 38.4 0 21.248-17.152 38.4-38.4 38.4z" /> +<glyph unicode="" glyph-name="emoji-sad" d="M512.051 952.32c-271.514 0-491.571-220.058-491.571-491.52 0-271.514 220.058-491.571 491.571-491.571 271.411 0 491.52 220.058 491.52 491.571-0.051 271.462-220.16 491.52-491.52 491.52zM512 71.731c-214.886 0-389.12 174.182-389.12 389.12 0 214.886 174.182 389.12 389.12 389.12 214.886 0 389.12-174.182 389.12-389.12s-174.234-389.12-389.12-389.12zM640.051 473.6c42.394 0 76.8 40.090 76.8 89.6s-34.406 89.6-76.8 89.6c-42.394 0-76.8-40.090-76.8-89.6s34.355-89.6 76.8-89.6zM384.051 473.6c42.394 0 76.8 40.090 76.8 89.6s-34.406 89.6-76.8 89.6c-42.394 0-76.8-40.090-76.8-89.6s34.355-89.6 76.8-89.6zM512.102 396.8c-175.309 0-236.646-118.528-239.206-123.597-9.523-18.995-1.792-42.035 17.152-51.558 5.53-2.714 11.366-4.045 17.152-4.045 14.080 0 27.648 7.731 34.406 21.197 0.41 0.87 42.086 81.203 170.496 81.203 126.106 0 168.858-78.182 170.394-81.152 9.421-18.944 32.512-26.778 51.507-17.203 18.995 9.421 26.675 32.563 17.203 51.507-2.509 5.069-63.795 123.648-239.104 123.648z" /> +<glyph unicode="" glyph-name="erase" d="M921.6 819.2h-489.165c-22.528 0-54.835-12.083-71.782-26.88l-347.955-304.538c-16.947-14.797-16.947-39.117 0-53.914l347.955-304.486c16.947-14.797 49.254-26.982 71.782-26.982h489.165c56.32 0 102.4 46.080 102.4 102.4v512c0 56.32-46.080 102.4-102.4 102.4zM777.779 256l-130.918 130.918-130.867-130.918-73.882 73.882 130.867 130.918-130.867 130.918 73.882 73.882 130.918-130.816 130.816 130.816 73.933-73.882-130.867-130.918 130.918-130.816-73.933-73.984z" /> +<glyph unicode="" glyph-name="eraser" d="M870.298 758.784l-161.485 124.16c-44.646 34.355-109.312 25.907-143.718-18.688l-430.080-557.926c-34.355-44.595-25.958-109.158 18.688-143.514l161.434-124.16c44.646-34.355 109.312-25.907 143.718 18.688l430.131 557.926c34.355 44.595 25.958 109.158-18.688 143.514zM437.658 129.69l-27.494-34.867c-7.782-10.086-19.712-15.872-32.717-15.872-6.349 0-15.821 1.485-24.832 8.397l-161.434 124.16c-8.602 6.605-14.080 16.23-15.514 27.136s1.434 21.606 8.038 30.157l27.494 34.867c7.782 10.086 19.712 15.923 32.768 15.923 6.349 0 15.821-1.485 24.832-8.397l161.485-124.16c8.602-6.605 14.080-16.23 15.514-27.136 1.331-10.906-1.536-21.606-8.141-30.208z" /> +<glyph unicode="" glyph-name="export" d="M768 204.8h-665.6v460.8h132.864c0 0 35.277 45.875 111.104 102.4h-295.168c-28.314 0-51.2-22.989-51.2-51.2v-563.2c0-28.314 22.886-51.2 51.2-51.2h768c28.314 0 51.2 22.886 51.2 51.2v191.795l-102.4-84.224v-56.371zM684.083 560.64v-181.811l339.917 266.291-339.917 255.949v-160.307c-412.723 0-412.723-407.962-412.723-407.962 116.838 191.898 188.723 227.84 412.723 227.84z" /> +<glyph unicode="" glyph-name="eye" d="M512 747.52c-335.923 0-512-247.398-512-286.72 0-39.219 176.077-286.72 512-286.72 335.872 0 512 247.501 512 286.72 0 39.322-176.128 286.72-512 286.72zM512 240.282c-125.696 0-227.584 98.714-227.584 220.518s101.888 220.621 227.584 220.621c125.696 0 227.533-98.816 227.533-220.621s-101.837-220.518-227.533-220.518zM512 460.8c-20.838 22.886 33.946 110.285 0 110.285-62.874 0-113.818-49.408-113.818-110.285s50.944-110.285 113.818-110.285c62.822 0 113.818 49.408 113.818 110.285 0 28.006-96.102-19.405-113.818 0z" /> +<glyph unicode="" glyph-name="feather" d="M217.805-29.030c15.718 50.278 39.424 121.037 71.219 223.334 138.598 21.965 195.942-17.459 283.955 139.725-71.424-21.862-157.542 40.55-152.934 67.635 4.659 27.034 200.346-19.507 328.499 162.458-161.536-35.635-213.197 42.803-192.358 54.63 48.077 27.341 190.771 11.366 266.854 85.453 39.219 38.144 57.6 130.867 41.626 163.942-19.149 39.987-135.987 99.635-200.397 94.003-64.41-5.581-165.427-245.248-195.43-243.405-29.901 1.894-35.994 107.418 16.333 205.466-55.142-24.422-156.211-100.301-187.904-165.171-59.034-120.678 5.53-397.619-15.155-407.45-20.736-9.882-90.419 127.027-111.206 189.133-28.416-95.181-29.082-190.515 53.914-317.133-31.283-83.098-48.384-178.739-50.995-227.379-1.229-38.861 37.069-47.206 43.981-25.242z" /> +<glyph unicode="" glyph-name="flag" d="M969.011 686.899c-478.157-694.682-314.47 13.312-718.694-325.478l91.904-361.421h-103.373l-187.648 737.792 94.72 33.997c453.069 331.315 216.474-297.984 800.614-64.205 18.637 7.526 33.536-4.608 22.477-20.685z" /> +<glyph unicode="" glyph-name="flash" d="M348.314 0.102c-9.933 6.502 161.434 366.592 155.546 382.413-5.939 15.821-187.648 73.523-196.506 101.325-8.909 27.802 358.758 445.798 368.435 437.709 9.626-8.090-160.205-370.586-155.597-382.413 4.659-11.776 190.874-71.885 196.506-101.325 5.683-29.44-358.502-444.211-368.384-437.709z" /> +<glyph unicode="" glyph-name="flashlight" d="M876.288 825.139c-85.811 85.811-193.485 117.146-227.789 82.842l-138.035-138.035c-20.941-20.992-39.219-91.085-30.822-161.997l-417.843-417.843c-24.781-24.781-4.71-84.992 44.851-134.605s109.875-69.581 134.605-44.902l417.843 417.894c70.963-8.397 141.056 9.882 161.997 30.771l138.035 138.086c34.304 34.304 2.97 142.029-82.842 227.789zM416.819 407.603c-19.098 19.046-12.851 56.115 13.773 82.79 26.675 26.675 63.795 32.922 82.842 13.824 19.046-18.995 12.851-56.166-13.824-82.79-26.675-26.726-63.744-32.922-82.79-13.824zM762.419 711.27c-66.458 66.406-83.098 154.112-77.21 160 5.888 5.939 90.112-14.182 156.621-80.64 66.458-66.458 86.426-150.835 80.64-156.621-5.734-5.734-93.645 10.752-160.051 77.261z" /> +<glyph unicode="" glyph-name="flat-brush" d="M94.413 210.483c25.498-19.251 81.613 60.314 99.43 46.848s-41.984-90.214-27.034-101.478c14.95-11.264 77.466 63.437 94.822 50.381 17.306-13.056-41.114-90.829-22.374-105.011 18.79-14.182 79.974 61.542 94.822 50.33s-39.578-92.006-22.374-104.96c17.203-13.005 75.827 64.666 90.112 53.862 14.336-10.803-43.213-89.242-17.715-108.493 25.498-19.2 274.944 458.957 274.944 458.957l-198.451 150.477c0 0-391.68-371.712-366.182-390.912zM666.778 930.253l-172.134-263.987 210.995-159.181 225.075 217.395c-26.982 76.954-176.128 196.762-263.936 205.773z" /> +<glyph unicode="" glyph-name="folder-images" d="M942.336 829.491c-5.734 22.528-33.587 40.909-61.952 40.909h-736.768c-28.416 0-56.269-18.381-61.952-40.909l-10.291-61.491h881.203l-10.24 61.491zM993.894 716.8h-963.84c-17.51 0-31.181-15.053-29.542-32.512l47.258-597.453c1.946-20.173 18.944-35.635 39.219-35.635h849.971c20.326 0 37.274 15.462 39.219 35.635l47.258 597.453c1.69 17.459-12.032 32.512-29.542 32.512zM636.826 544c26.522 0 48.026-21.504 48.026-48.026s-21.504-48.026-48.026-48.026-48.026 21.555-48.026 48.077c0 26.47 21.504 47.974 48.026 47.974zM281.6 256l127.283 292.557 144.742-234.291 124.109 61.645 64.666-119.91h-460.8z" /> +<glyph unicode="" glyph-name="folder-music" d="M942.336 829.491c-5.734 22.528-33.587 40.909-61.952 40.909h-736.768c-28.416 0-56.269-18.381-61.952-40.909l-10.291-61.491h881.203l-10.24 61.491zM993.894 716.8h-963.84c-17.51 0-31.181-15.053-29.542-32.512l47.258-597.453c1.946-20.173 18.944-35.635 39.219-35.635h849.971c20.326 0 37.274 15.462 39.219 35.635l47.258 597.453c1.69 17.459-12.032 32.512-29.542 32.512zM611.43 331.725c-6.554-13.568-13.21-14.285-10.342 0 7.475 36.915 2.406 116.173-53.402 124.979v-168.653c0-34.509-15.923-64.614-58.163-78.234-41.062-13.107-86.989 0.563-97.69 30.003-10.752 29.491 13.363 65.331 53.862 80.077 22.63 8.243 48.845 10.394 66.509 3.584v239.718h35.533c-0.051-83.61 144.282-65.28 63.693-231.475z" /> +<glyph unicode="" glyph-name="folder-video" d="M942.336 829.491c-5.734 22.528-33.587 40.909-61.952 40.909h-736.768c-28.416 0-56.269-18.381-61.952-40.909l-10.291-61.491h881.203l-10.24 61.491zM993.894 716.8h-963.84c-17.51 0-31.181-15.053-29.542-32.512l47.258-597.453c1.946-20.173 18.944-35.635 39.219-35.635h849.971c20.326 0 37.274 15.462 39.219 35.635l47.258 597.453c1.69 17.459-12.032 32.512-29.542 32.512zM409.6 256v256l224.41-128-224.41-128z" /> +<glyph unicode="" glyph-name="folder" d="M942.336 727.091c-5.683 22.528-33.536 40.909-61.952 40.909h-348.877c-28.365 0-68.096 16.282-88.166 36.198l-30.515 30.106c-20.070 19.917-59.75 36.096-88.115 36.096h-166.656c-28.416 0-54.221-22.886-57.344-50.893l-14.95-153.907h866.867l-10.291 61.491zM993.894 614.4h-963.789c-17.51 0-31.232-15.053-29.542-32.512l47.258-495.053c1.894-20.173 18.893-35.635 39.219-35.635h849.92c20.326 0 37.274 15.462 39.219 35.635l47.258 495.053c1.69 17.459-12.032 32.512-29.542 32.512z" /> +<glyph unicode="" glyph-name="forward" d="M614.4 364.851v-223.078l358.4 342.528-358.4 336.486v-203.93c-449.28 0-563.2-498.278-563.2-498.278 127.181 224.666 319.334 246.272 563.2 246.272z" /> +<glyph unicode="" glyph-name="funnel" d="M512 921.6c-251.29 0-409.6-77.414-409.6-153.651v-102.4c0-47.002 307.2-307.2 307.2-307.2v-307.2c-0.051-35.021 51.2-51.2 102.4-51.2s102.451 16.179 102.4 51.2v307.2c0 0 307.2 260.198 307.2 307.2v102.4c0 76.237-158.31 153.651-409.6 153.651zM512 659.302c-183.859 0.051-314.266 68.25-314.266 93.747-0.102 25.344 130.458 93.747 314.266 93.645 183.808 0.102 314.368-68.301 314.266-93.594 0-25.549-130.406-93.747-314.266-93.798z" /> +<glyph unicode="" glyph-name="game-controller" d="M995.533 493.517c-45.158 252.211-146.125 326.605-199.834 326.605-83.814 0-105.318-62.31-283.699-64.41-178.381 2.099-199.885 64.41-283.699 64.41-53.709 0-154.726-74.394-199.885-326.605-25.754-143.974-53.709-358.912 12.902-384.717 82.893-32.102 111.002 48.179 202.035 116.019 92.416 68.762 136.755 84.941 268.646 84.941s176.23-16.179 268.646-84.941c91.034-67.789 119.142-148.122 202.035-116.019 66.611 25.805 38.656 240.691 12.851 384.717zM307.2 460.8c-56.576 0-102.4 45.875-102.4 102.4 0 56.576 45.824 102.4 102.4 102.4s102.4-45.824 102.4-102.4c0-56.525-45.875-102.4-102.4-102.4zM665.6 460.8c-28.314 0-51.2 22.886-51.2 51.2s22.886 51.2 51.2 51.2c28.314 0 51.2-22.886 51.2-51.2s-22.886-51.2-51.2-51.2zM768 563.2c-28.314 0-51.2 22.886-51.2 51.2s22.886 51.2 51.2 51.2c28.314 0 51.2-22.886 51.2-51.2s-22.886-51.2-51.2-51.2z" /> +<glyph unicode="" glyph-name="gauge" d="M416.102 276.48c-35.277-61.286-11.52-111.616 37.478-139.878 48.947-28.314 104.499-23.808 139.878 37.478 35.277 61.184 258.406 607.488 239.002 618.701s-381.030-455.066-416.358-516.301zM512 665.6c22.426 0 44.237-1.894 65.587-5.581 22.426 28.109 47.514 59.085 71.936 88.474-43.622 12.595-89.702 19.507-137.523 19.507-287.078 0-512-242.125-512-551.219 0-18.995 0.819-37.99 2.509-56.474 2.509-28.211 27.648-48.896 55.501-46.49 28.211 2.611 48.998 27.392 46.49 55.603-1.382 15.462-2.099 31.488-2.099 47.36 0 251.699 179.917 448.819 409.6 448.819zM881.613 601.6c-14.285-38.4-29.389-77.517-42.701-111.309 51.968-75.264 82.688-169.677 82.688-273.51 0-16.179-0.768-32.512-2.202-48.282-2.56-28.211 18.176-53.094 46.336-55.706 1.536-0.102 3.123-0.205 4.71-0.205 26.163 0 48.538 20.019 50.944 46.592 1.69 18.944 2.611 38.298 2.611 57.6 0 151.245-53.914 286.208-142.387 384.819z" /> +<glyph unicode="" glyph-name="globe" d="M512 952.32c-271.104 0-491.571-220.518-491.571-491.52s220.467-491.52 491.571-491.52c271.002 0 491.52 220.518 491.52 491.52s-220.518 491.52-491.52 491.52zM931.226 460.8c0-95.898-32.563-184.32-86.835-254.976-15.36 11.981-31.693 44.39-16.333 77.978 15.514 33.792 19.558 112.026 15.974 142.49-3.379 30.413-19.2 103.68-62.157 104.397-42.906 0.614-72.346 14.797-97.843 65.69-52.89 105.882 99.277 126.208 46.387 184.781-14.797 16.486-91.29-67.686-102.502 44.493-0.717 8.038 6.912 20.070 17.203 32.563 166.093-55.808 286.106-212.838 286.106-397.414zM454.4 875.878c-10.035-19.558-36.506-27.494-52.582-42.189-35.021-31.693-50.074-27.29-68.915-57.702-18.995-30.413-80.23-74.189-80.23-96.205s30.925-47.923 46.387-42.906c15.462 5.12 56.269 4.813 80.23-3.584 24.013-8.499 200.397-16.998 144.179-166.093-17.818-47.411-95.898-39.424-116.685-117.914-3.123-11.52-13.926-60.723-14.592-76.8-1.28-24.883 17.613-118.682-6.4-118.682-24.115 0-88.986 83.917-88.986 99.123s-16.794 68.506-16.794 114.176c0 45.619-77.722 44.902-77.722 105.574 0 54.682 42.138 81.92 32.666 108.186-9.267 26.112-83.302 26.982-114.176 30.208 53.914 139.827 180.736 243.61 333.619 264.806zM380.109 62.976c25.19 13.312 27.75 30.515 50.586 31.386 26.112 1.178 47.36 10.189 76.8 16.691 26.112 5.683 72.858 32.205 113.971 35.584 34.714 2.816 103.168-1.792 121.6-35.277-66.304-44.083-145.818-69.786-231.117-69.786-46.029 0-90.368 7.629-131.84 21.402z" /> +<glyph unicode="" glyph-name="graduation-cap" d="M169.062 346.214c23.757-96.205 53.965-138.291 154.726-182.374 100.813-44.032 148.685-92.16 188.211-92.16 39.475 0 84.378 42.086 185.139 86.221 100.813 44.083 73.882 57.498 97.638 153.702l-282.778-137.523-342.938 172.134zM998.963 597.197l-426.24 238.694c-33.382 18.688-88.064 18.688-121.446 0l-426.291-238.694c-33.382-18.688-33.382-49.306 0-67.994l426.24-238.694c33.382-18.688 88.064-18.688 121.446 0l275.558 154.317-298.803 69.99c-11.52-2.816-24.166-4.403-37.427-4.403-53.862 0-97.485 25.907-97.485 57.907 0 32.102 43.674 58.010 97.485 58.010 41.779 0 77.312-15.718 91.136-37.581l316.518-103.885 79.309 44.39c33.331 18.637 33.331 49.254 0 67.942zM868.71 144.896c-3.328-19.712 65.69-52.122 72.243 5.478 29.645 259.686-21.299 334.387-21.299 334.387l-71.424-39.987c0 0.051 60.57-57.6 20.48-299.878z" /> +<glyph unicode="" glyph-name="grid" d="M409.6 768h-153.6c-28.314 0-51.2-22.886-51.2-51.2v-153.6c0-28.262 22.886-51.2 51.2-51.2h153.6c28.314 0 51.2 22.938 51.2 51.2v153.6c0 28.262-22.886 51.2-51.2 51.2zM768 768h-153.6c-28.314 0-51.2-22.886-51.2-51.2v-153.6c0-28.262 22.886-51.2 51.2-51.2h153.6c28.314 0 51.2 22.938 51.2 51.2v153.6c0 28.262-22.886 51.2-51.2 51.2zM409.6 409.6h-153.6c-28.314 0-51.2-22.886-51.2-51.2v-153.6c0-28.262 22.886-51.2 51.2-51.2h153.6c28.314 0 51.2 22.938 51.2 51.2v153.6c0 28.262-22.886 51.2-51.2 51.2zM768 409.6h-153.6c-28.314 0-51.2-22.886-51.2-51.2v-153.6c0-28.262 22.886-51.2 51.2-51.2h153.6c28.314 0 51.2 22.938 51.2 51.2v153.6c0 28.262-22.886 51.2-51.2 51.2z" /> +<glyph unicode="" glyph-name="hair-cross" d="M512 952.32c-271.514 0-491.571-220.058-491.571-491.52 0-271.514 220.058-491.571 491.571-491.571 271.411 0 491.52 220.058 491.52 491.571 0 271.462-220.109 491.52-491.52 491.52zM563.2 75.52v231.68h-102.4v-231.68c-173.875 22.835-311.296 160.205-334.182 334.080h231.782v102.4h-231.782c22.886 173.875 160.307 311.245 334.182 334.080v-231.68h102.4v231.68c173.773-22.886 311.194-160.256 334.080-334.080h-231.68v-102.4h231.68c-22.886-173.773-160.307-311.194-334.080-334.080z" /> +<glyph unicode="" glyph-name="hand" d="M917.709 86.272c-2.918-8.909-9.882-18.79-21.299-22.118-8.243-2.406-280.986-81.408-289.382-83.61-24.013-6.4-40.704-1.69-51.661 7.987-16.691 14.694-209.562 145.92-452.864 158.31-26.010 1.28-13.261 99.891 61.082 99.891 50.944 0 199.885-37.018 217.856-18.995 13.875 13.926 20.173 96.205-37.734 239.77v0l-116.48 288.614c-11.059 27.392 2.253 58.522 29.594 69.581 27.392 11.059 58.624-2.202 69.581-29.594 0 0 91.699-227.226 101.683-251.853 9.882-24.576 22.067-33.894 35.328-28.774 11.827 4.506 14.285 12.39 7.117 36.301l-104.755 308.634c-9.523 27.955 5.427 58.266 33.382 67.789 28.006 9.574 58.419-5.427 67.84-33.382l99.635-293.478c8.806-25.805 18.125-39.322 32.87-33.075 8.858 3.738 8.243 17.306 5.888 29.133l-69.939 280.115c-7.168 28.723 10.291 57.702 38.963 64.87 28.672 7.117 57.6-10.24 64.819-38.963l64.512-258.15c9.421-37.939 18.074-51.61 33.075-47.872 15.309 3.738 14.592 16.333 12.493 26.726-4.864 24.32-44.646 221.594-44.646 221.594-5.274 26.368 11.776 51.968 38.093 57.242 26.266 5.274 51.917-11.776 57.139-38.042l48.538-241.203 0.051-0.051c0 0 0 0 0-0.051l29.082-144.64c6.349-27.29 13.619-52.992 23.040-78.182 55.552-147.917 26.573-284.877 17.101-314.522z" /> +<glyph unicode="" glyph-name="heart-outlined" d="M880.128 760.013c-85.606 78.592-224.41 78.592-310.016 0l-58.112-53.299-58.163 53.299c-85.606 78.592-224.358 78.592-309.965 0-96.307-88.371-96.307-231.373 0-319.744l368.128-337.869 368.128 337.869c96.256 88.371 96.256 231.424 0 319.744zM825.549 492.8l-313.549-292.608-313.6 292.608c-31.59 29.030-43.827 66.918-43.827 107.213s7.066 73.37 38.707 102.349c27.904 25.651 65.434 39.782 105.626 39.782 40.141 0 77.67-24.371 105.574-50.074l107.52-93.44 107.469 93.491c27.955 25.702 65.434 50.074 105.626 50.074s77.722-14.131 105.626-39.782c31.642-28.979 38.656-62.054 38.656-102.349s-12.186-78.234-43.827-107.264z" /> +<glyph unicode="" glyph-name="heart" d="M880.128 760.064c-85.606 78.541-224.41 78.541-310.016 0l-58.112-53.35-58.163 53.35c-85.606 78.541-224.358 78.541-309.965 0-96.307-88.422-96.307-231.424 0-319.795l368.128-337.869 368.128 337.869c96.256 88.371 96.256 231.424 0 319.795z" /> +<glyph unicode="" glyph-name="help-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52c271.411 0 491.52 220.058 491.52 491.571 0 271.411-220.109 491.469-491.52 491.469zM504.269 174.131h-2.611c-40.038 1.178-68.301 30.72-67.123 70.195 1.126 38.81 30.054 67.021 68.762 67.021l2.355-0.102c41.165-1.178 69.12-30.413 67.942-71.014-1.178-38.912-29.594-66.099-69.325-66.099zM672.768 508.518c-9.421-13.312-30.106-30.003-56.218-50.33l-28.774-19.814c-15.77-12.288-25.293-23.91-28.826-35.226-2.867-8.909-4.198-11.315-4.454-29.491v-4.608h-109.824l0.307 9.318c1.382 38.093 2.304 60.621 18.125 79.206 24.832 29.082 79.616 64.41 81.92 65.894 7.885 5.888 14.49 12.595 19.405 19.814 11.52 15.923 16.589 28.416 16.589 40.602 0 17.101-5.018 32.922-15.002 46.899-9.626 13.619-27.904 20.378-54.323 20.378-26.214 0-44.186-8.294-54.886-25.395-11.059-17.459-16.64-35.84-16.64-54.63v-4.71h-113.203l0.205 4.915c2.918 69.274 27.699 119.194 73.472 148.326 28.826 18.483 64.717 27.853 106.547 27.853 54.682 0 100.966-13.312 137.318-39.526 36.915-26.573 55.603-66.406 55.603-118.323-0.051-29.030-9.216-56.32-27.341-81.152z" /> +<glyph unicode="" glyph-name="help" d="M721.408 858.47c-58.368 42.086-131.686 63.13-219.955 63.13-67.123 0-123.802-14.797-169.83-44.442-73.062-46.387-111.872-125.184-116.582-236.288h169.318c0 32.41 9.472 63.488 28.314 93.594 18.893 30.003 50.944 45.005 96.154 45.005 45.978 0 77.67-12.186 94.925-36.506 17.357-24.422 26.010-51.405 26.010-80.998 0-25.805-12.902-49.408-28.518-70.81-8.55-12.493-19.814-24.013-33.843-34.509 0 0-91.802-58.88-132.096-106.189-23.347-27.392-25.446-68.506-27.546-127.386-0.102-4.198 1.485-12.902 16.128-12.902 14.694 0 118.579 0 131.635 0 13.107 0 15.821 9.677 15.974 14.029 0.922 21.402 3.277 32.41 7.219 44.8 7.373 23.398 27.546 43.776 50.125 61.389l46.592 32.102c42.086 32.819 75.622 59.699 90.47 80.794 25.293 34.611 43.11 77.312 43.11 128-0.051 82.688-29.235 144.998-87.603 187.187zM498.739 208.691c-58.317 1.792-106.445-38.605-108.288-101.888-1.792-63.181 43.93-105.011 102.298-106.701 60.877-1.792 107.725 37.222 109.619 100.506 1.741 63.283-42.701 106.291-103.629 108.083z" /> +<glyph unicode="" glyph-name="home" d="M956.006 409.6h-85.606v-307.2c0-22.784-9.933-51.2-51.2-51.2h-204.8v307.2h-204.8v-307.2h-204.8c-41.267 0-51.2 28.416-51.2 51.2v307.2h-85.606c-30.618 0-24.064 16.589-3.072 38.298l410.829 411.238c9.984 10.342 23.091 15.462 36.25 15.974 13.158-0.512 26.266-5.581 36.25-15.974l410.778-411.187c21.043-21.76 27.597-38.349-3.021-38.349z" /> +<glyph unicode="" glyph-name="hour-glass" d="M798.72 738.509c0 109.517 0 120.218 0 120.218 0 40.397-128.41 114.074-286.72 114.074-158.362 0-286.72-73.677-286.72-114.074 0 0 0-10.701 0-120.218 0-109.619 198.502-200.090 198.502-277.709 0-77.517-198.502-167.987-198.502-277.606s0-120.32 0-120.32c0-40.346 128.358-114.074 286.72-114.074 158.31 0 286.72 73.728 286.72 114.125 0 0 0 10.701 0 120.32s-198.502 200.090-198.502 277.606c0 77.568 198.502 168.038 198.502 277.658zM304.179 853.606c35.635 22.477 102.4 55.398 210.637 55.398 108.186 0 205.107-55.398 205.107-55.398 7.27-4.403 35.738-19.61 16.23-31.181-42.906-25.446-126.874-52.224-224.154-52.224s-178.381 29.491-221.389 54.989c-19.507 11.52 13.568 28.416 13.568 28.416zM537.651 460.8c0-61.082 50.995-100.403 105.011-152.883 39.475-38.298 93.491-90.778 93.491-124.672v-67.994c-49.664 24.73-198.246 48.896-198.246 128.205 0 40.090-51.866 40.090-51.866 0 0-79.309-148.582-103.475-198.246-128.205v67.994c0 33.894 54.067 86.426 93.491 124.672 54.016 52.48 105.011 91.802 105.011 152.883s-50.995 100.403-105.011 152.883c-39.475 38.4-93.491 90.88-93.491 124.826l-2.355 51.098c52.531-28.314 135.782-55.194 226.56-55.194 90.726 0 174.387 26.88 226.97 55.194l-2.816-51.098c0-33.894-54.067-86.426-93.491-124.826-53.965-52.48-105.011-91.802-105.011-152.883z" /> +<glyph unicode="" glyph-name="image-inverted" d="M921.6 819.2h-819.2c-28.314 0-51.2-22.886-51.2-51.2v-614.4c0-28.262 22.886-51.2 51.2-51.2h819.2c28.314 0 51.2 22.938 51.2 51.2v614.4c0 28.262-22.886 51.2-51.2 51.2zM678.4 640c35.328 0 64-28.672 64-64s-28.672-64-64-64-64 28.672-64 64 28.672 64 64 64zM204.8 256l169.677 390.093 192.973-312.422 165.427 82.176 86.323-159.846h-614.4z" /> +<glyph unicode="" glyph-name="image" d="M972.8 870.4h-921.6c-28.314 0-51.2-22.886-51.2-51.2v-716.8c0-28.262 22.886-51.2 51.2-51.2h921.6c28.314 0 51.2 22.938 51.2 51.2v716.8c0 28.262-22.886 51.2-51.2 51.2zM921.6 153.6h-819.2v614.4h819.2v-614.4zM732.928 415.898l-165.427-82.176-193.024 312.371-169.677-390.093h614.4l-86.272 159.898zM678.4 512c35.328 0 64 28.672 64 64s-28.672 64-64 64-64-28.672-64-64 28.672-64 64-64z" /> +<glyph unicode="" glyph-name="images" d="M876.8 656.896l-104.755 288.512c-7.731 21.299-30.464 32.614-50.637 25.19l-696.218-254.106c-20.173-7.373-30.362-30.566-22.579-51.866l110.387-304.179v162.97c0 73.626 58.778 133.478 131.072 133.478h183.962l219.392 154.010 126.925-154.010h102.451zM984.986 563.2h-740.915c-21.504 0-39.014-17.101-39.014-39.782v-482.304c0.051-22.733 17.562-41.114 39.014-41.114h740.915c21.504 0 39.014 18.381 39.014 41.114v482.304c0 22.682-17.51 39.782-39.014 39.782zM921.6 102.4h-614.4v102.4l101.581 205.722 141.722-175.923 133.018 136.294 170.906 61.696 67.174-176.589v-153.6z" /> +<glyph unicode="" glyph-name="inbox" d="M985.754 484.25c-19.866 21.299-115.968 116.275-159.846 159.642-13.466 13.261-32.717 21.709-52.89 21.709h-522.035c-20.173 0-39.424-8.448-52.89-21.709-43.93-43.366-139.981-138.291-159.846-159.642-24.832-26.675-37.018-46.182-31.949-74.189s23.859-135.885 28.467-157.389c4.506-21.453 35.021-47.872 63.488-47.872h827.494c28.467 0 58.982 26.419 63.539 47.872 4.557 21.504 23.398 129.382 28.467 157.389s-7.117 47.565-32 74.189zM717.517 460.646c-5.171 0-9.882-2.662-12.186-6.81l-41.472-95.437h-303.718l-41.421 95.437c-2.304 4.147-7.014 6.81-12.186 6.81h-179.917l103.526 102.554h563.712l103.578-102.554h-179.917z" /> +<glyph unicode="" glyph-name="infinity" d="M814.182 686.080c-106.445 0-223.13-59.29-302.182-149.299-79.104 90.010-195.84 149.299-302.285 149.299-101.376 0-209.715-59.187-209.715-225.28s108.339-225.178 209.715-225.28v0c106.445 0 223.13 59.29 302.234 149.299 79.053-90.010 195.738-149.299 302.182-149.299 101.427 0 209.869 59.187 209.869 225.28s-108.442 225.28-209.818 225.28zM209.715 325.581c-77.414 0-117.555 45.517-117.555 135.219s40.141 135.219 117.555 135.219c85.658 0 185.037-55.603 246.118-135.219-61.082-79.616-160.461-135.219-246.118-135.219zM814.182 325.581c-85.658 0-185.037 55.603-246.118 135.219 61.030 79.616 160.512 135.219 246.118 135.219 77.414 0 117.658-45.517 117.658-135.219s-40.243-135.219-117.658-135.219z" /> +<glyph unicode="" glyph-name="info-with-circle" d="M512 952.32c-271.514 0-491.571-220.058-491.571-491.52 0-271.514 220.058-491.571 491.571-491.571 271.411 0 491.52 220.058 491.52 491.571 0 271.462-220.109 491.52-491.52 491.52zM557.875 774.861c47.923 0 62.003-27.802 62.003-59.597 0-39.68-31.744-76.39-85.965-76.39-45.363 0-66.97 22.784-65.638 60.518 0 31.795 26.573 75.469 89.6 75.469zM435.098 166.4c-32.768 0-56.678 19.917-33.792 107.213l37.53 154.88c6.502 24.781 7.578 34.714 0 34.714-9.779 0-52.326-17.101-77.414-33.997l-16.333 26.778c79.616 66.509 171.162 105.523 210.33 105.523 32.768 0 38.195-38.707 21.862-98.304l-43.008-162.816c-7.629-28.774-4.352-38.707 3.277-38.707 9.83 0 41.984 11.878 73.626 36.813l18.534-24.883c-77.466-77.414-161.894-107.213-194.611-107.213z" /> +<glyph unicode="" glyph-name="info" d="M636.518 972.8c68.608 0 102.912-46.694 102.912-100.198 0-66.816-59.597-128.614-137.165-128.614-64.973 0-102.861 38.4-101.069 101.888 0 53.402 45.107 126.925 135.322 126.925zM425.421-51.2c-54.17 0-93.85 33.382-55.962 180.429l62.157 260.71c10.803 41.677 12.595 58.419 0 58.419-16.23 0-86.477-28.774-128.102-57.19l-27.034 45.056c131.686 111.923 283.187 177.51 348.211 177.51 54.118 0 63.13-65.178 36.096-165.376l-71.219-274.022c-12.595-48.384-7.219-65.075 5.427-65.075 16.23 0 69.478 20.070 121.805 61.798l30.72-41.677c-128.102-130.406-268.032-180.582-322.099-180.582z" /> +<glyph unicode="" glyph-name="key" d="M905.779 730.88c-25.754 152.422-164.864 254.31-310.733 227.379-145.92-26.88-269.107-144.179-243.354-296.704 5.478-32.819 20.89-84.173 39.066-121.088l-264.96-395.418c-9.779-14.592-15.309-40.909-12.39-58.419l17.050-100.915c2.97-17.51 19.046-29.286 35.84-26.317l77.619 14.387c16.794 3.021 38.093 17.818 47.309 32.717l104.806 169.523 0.922 1.126 70.963 13.107 122.368 198.605c40.192-7.117 97.894-4.71 131.994 1.587 145.818 26.931 209.254 187.904 183.501 340.429zM776.499 652.698c-40.141-59.904-81.101-17.715-138.394 24.32-57.293 41.882-109.312 67.686-69.222 127.59 40.141 59.904 119.091 74.496 176.486 32.512 57.344-41.933 71.219-124.518 31.13-184.422z" /> +<glyph unicode="" glyph-name="keyboard" d="M952.32 768h-880.64c-39.475 0-71.68-32.205-71.68-71.68v-471.040c0-39.373 32.205-71.68 71.629-71.68h880.64c39.424 0 71.68 32.307 71.68 71.68v471.040c0.051 39.475-32.256 71.68-71.629 71.68zM563.2 665.6h102.4v-102.4h-102.4v102.4zM716.8 512v-102.4h-102.4v102.4h102.4zM409.6 665.6h102.4v-102.4h-102.4v102.4zM563.2 512v-102.4h-102.4v102.4h102.4zM256 665.6h102.4v-102.4h-102.4v102.4zM409.6 512v-102.4h-102.4v102.4h102.4zM102.4 665.6h102.4v-102.4h-102.4v102.4zM256 512v-102.4h-102.4v102.4h102.4zM204.8 256h-102.4v102.4h102.4v-102.4zM768 256h-512v102.4h512v-102.4zM921.6 256h-102.4v102.4h102.4v-102.4zM768 409.6v102.4h102.4v-102.4h-102.4zM921.6 563.2h-204.8v102.4h204.8v-102.4z" /> +<glyph unicode="" glyph-name="lab-flask" d="M841.318 204.8c-104.704 261.478-226.918 330.394-226.918 460.8v153.6h25.6c14.131 0 25.6 11.469 25.6 25.6v51.2c0 14.131-11.469 25.6-25.6 25.6h-256c-14.131 0-25.6-11.469-25.6-25.6v-51.2c0-14.131 11.469-25.6 25.6-25.6h25.6v-153.6c0-130.406-122.214-199.322-226.918-460.8-33.331-83.2-118.938-204.8 329.318-204.8s362.65 121.6 329.318 204.8zM758.528 115.149c-35.942-10.752-107.469-22.989-246.528-22.989s-210.586 12.237-246.528 22.989c-12.749 3.789-17.715 18.586-13.21 32.154 11.264 34.304 32.512 93.594 72.243 159.795 97.075 161.741 197.786-25.446 281.6-25.446s60.826 79.923 93.389 25.446c39.629-66.253 60.979-125.491 72.243-159.795 4.506-13.568-0.461-28.314-13.21-32.154z" /> +<glyph unicode="" glyph-name="landline" d="M250.982 960c-71.885 14.182-142.694-32-157.133-103.578-56.576-279.296-56.576-511.846 0-791.245 12.646-62.72 68.454-106.138 130.816-106.138 8.704 0 17.51 0.819 26.368 2.56 72.294 14.285 119.245 83.866 104.755 155.443-50.074 247.398-50.074 440.218 0 687.616 14.438 71.475-32.512 141.056-104.806 155.341zM870.4 870.4h-438.477c3.738-23.91 4.147-48.691-0.87-73.728-47.923-241.664-47.923-429.978 0-671.744 5.018-25.088 4.608-49.818 0.87-73.728h438.477c56.32 0 102.4 46.080 102.4 102.4v614.4c0 56.32-46.029 102.4-102.4 102.4zM614.4 230.4c-42.394 0-76.8 34.406-76.8 76.8s34.406 76.8 76.8 76.8 76.8-34.406 76.8-76.8-34.406-76.8-76.8-76.8zM870.4 512h-358.4v204.8h358.4v-204.8z" /> +<glyph unicode="" glyph-name="language" d="M1011.354 414.259c-31.949 87.398-121.139 139.571-238.643 139.571-4.608 0-9.011-0.102-13.414-0.307l-0.819 105.626c0 0 174.592 30.106 180.48 31.078s6.81 6.093 5.581 11.827c-1.178 5.683-8.55 45.21-9.626 49.971-1.382 6.707-5.222 6.502-10.598 5.581-5.325-0.922-166.4-23.603-166.4-23.603s-0.614 99.994-0.666 106.394c-0.051 6.4-3.533 8.090-9.933 7.987s-47.104-0.717-52.48-0.819c-5.376-0.102-8.397-2.509-8.294-7.578 0.102-5.12 1.69-118.118 1.69-118.118s-156.723-26.982-160.973-27.802c-4.301-0.717-8.704-2.714-7.731-7.322s9.728-56.013 10.65-60.006c0.922-4.096 3.686-6.605 9.626-5.478 5.888 0.973 149.709 25.805 149.709 25.805l1.792-103.322c-55.142-14.387-92.211-42.189-115.507-66.714-39.322-41.318-61.798-96.614-61.798-151.706 0-81.203 49.715-129.485 119.194-137.984 161.894-19.814 262.093 156.672 295.373 241.408 56.166-77.107 13.107-222.925-107.213-306.176-2.202-1.485-5.018-6.605-1.69-10.598s27.699-33.894 31.693-38.707c4.096-4.915 10.547-3.021 13.107-1.178 128.512 88.576 187.443 231.168 146.893 342.17zM633.19 251.034c-49.459 6.195-48.333 46.797-48.333 74.394 0 39.578 16.742 80.896 44.851 110.387 17.152 18.125 38.4 31.795 62.925 40.909l4.198-218.982c-19.712-6.707-40.909-9.472-63.642-6.707zM757.453 279.347l2.355 210.381c4.301 0.205 8.499 0.512 12.902 0.512 39.578 0 76.493-7.424 96.512-18.483 20.019-11.11-52.378-138.906-111.77-192.41zM299.213 671.949c-1.536 4.813-5.274 7.424-10.035 7.424h-99.84c-4.762 0-8.448-2.611-9.933-7.373-21.094-66.509-178.176-562.688-178.995-565.299-0.87-2.611-0.563-3.891 3.174-3.891h88.73c3.84 0 5.069 1.178 5.837 3.686 0.768 2.611 51.61 169.882 51.61 169.882h178.995c0 0 50.79-167.322 51.61-169.882 0.819-2.509 1.997-3.686 5.786-3.686h88.781c3.686 0 3.994 1.28 3.174 3.891-0.717 2.56-157.85 498.739-178.893 565.248zM165.171 348.467l74.086 268.8 74.086-268.8h-148.173z" /> +<glyph unicode="" glyph-name="laptop" d="M1011.405 172.493c-12.646 18.995-89.805 134.707-89.805 134.707v460.8c0 56.422-46.080 102.4-102.4 102.4h-614.4c-56.371 0-102.4-45.978-102.4-102.4v-460.8c0 0-77.158-115.712-89.805-134.707-12.595-18.893-12.595-29.798-12.595-44.493v-25.6c0-25.6 25.6-51.2 51.149-51.2h921.702c25.549 0 51.149 25.6 51.149 51.2v25.6c0 14.694 0 25.6-12.595 44.493zM358.4 153.6l30.72 51.2h245.76l30.72-51.2h-307.2zM819.2 358.4h-614.4v409.6h614.4v-409.6z" /> +<glyph unicode="" glyph-name="leaf" d="M974.080 789.146c-223.027-130.867-207.053-399.667-363.315-520.96-117.606-91.29-283.546-45.056-379.494-5.786 0 0-65.024-82.074-111.667-191.488-15.616-36.71-84.173 3.738-72.141 34.816 152.474 393.472 671.232 589.773 671.232 589.773s-366.029 15.514-610.662-304.128c-6.554 73.011-17.408 270.541 172.032 391.68 256.819 164.403 746.086 36.608 694.016 6.093z" /> +<glyph unicode="" glyph-name="level-down" d="M51.2 358.4v358.4h153.6v-307.2h512v153.6l256-230.4-256-230.4v153.6h-563.2c-56.576 0-102.4 45.875-102.4 102.4z" /> +<glyph unicode="" glyph-name="level-up" d="M972.8 512v-358.4h-153.6v307.2h-512v-153.6l-256 230.4 256 230.4v-153.6h563.2c56.525 0 102.4-45.926 102.4-102.4z" /> +<glyph unicode="" glyph-name="lifebuoy" d="M859.546 808.346c-191.949 191.949-503.142 191.949-695.040 0-192-192-192-503.194-0.102-695.091 192-192 503.194-192 695.194 0 191.898 191.949 191.898 503.142-0.051 695.091zM345.498 294.298c-92.006 92.006-92.006 241.101 0 333.056 91.904 91.955 241.101 91.955 333.107 0 92.006-92.006 91.904-241.101 0-333.056-92.006-92.006-241.101-92.006-333.107 0zM785.766 313.395c49.562 92.109 49.613 202.701 0 294.861l91.29 49.152c65.997-122.419 65.997-270.848 0.102-393.114l-91.392 49.101zM708.557 825.907l-49.203-91.341c-92.109 49.51-202.701 49.51-294.707 0l-49.203 91.29c122.368 65.946 270.694 65.946 393.114 0.051zM146.944 657.408l91.341-49.203c-49.562-92.058-49.562-202.598-0.051-294.707l-91.341-49.203c-65.946 122.317-65.894 270.694 0.051 393.114zM315.341 95.795l49.203 91.29c92.109-49.613 202.752-49.613 294.861 0l49.203-91.392c-122.47-65.894-270.848-65.894-393.267 0.102z" /> +<glyph unicode="" glyph-name="light-bulb" d="M367.923-8.806c40.397-26.112 87.091-43.776 144.077-42.394 56.883-1.382 103.68 16.282 144.077 42.394l-0.87 111.206h-286.413l-0.87-111.206zM650.086 153.6c0 223.078 237.056 299.418 219.29 521.626-11.162 140.186-106.138 297.472-357.376 297.472s-346.214-157.286-357.427-297.523c-17.766-222.157 219.341-298.496 219.341-521.574h276.173zM256 665.6c10.598 133.018 108.186 204.8 256 204.8 147.763 0 238.285-70.195 248.883-203.213 5.786-72.909-36.096-121.498-92.621-201.011-41.677-58.675-82.074-119.962-105.062-210.176h-102.4c-22.989 90.214-63.386 151.501-105.114 210.227-56.474 79.462-105.523 126.464-99.686 199.373z" /> +<glyph unicode="" glyph-name="light-down" d="M512 624.794c-90.88 0-163.84-73.011-163.84-163.891 0-90.778 72.96-163.789 163.84-163.789 90.829 0 163.789 73.011 163.789 163.789 0 90.88-72.96 163.891-163.789 163.891zM512 355.994c-58.010 0-105.011 46.899-105.011 104.909s47.002 105.011 105.011 105.011c57.958 0 104.96-47.002 104.96-105.011-0.051-58.010-47.053-104.909-104.96-104.909zM768 716.8c-15.974 15.974-45.21 12.698-65.178-7.27-19.968-20.019-23.194-49.101-7.219-65.126s45.158-12.8 65.178 7.219c19.968 19.968 23.194 49.203 7.219 65.178zM263.27 269.875c-20.019-19.968-23.245-49.101-7.27-65.075s45.158-12.8 65.178 7.219c20.019 20.019 23.245 49.203 7.27 65.178s-45.21 12.698-65.178-7.322zM256 716.8c-15.974-15.974-12.749-45.21 7.219-65.178 20.019-20.019 49.203-23.194 65.178-7.219s12.749 45.21-7.27 65.178c-19.917 19.917-49.152 23.194-65.126 7.219zM702.822 212.122c19.968-20.019 49.152-23.296 65.178-7.322s12.749 45.21-7.27 65.229c-20.019 20.019-49.152 23.194-65.178 7.219s-12.698-45.158 7.27-65.126zM512 716.902c22.579 0 40.96 22.886 40.96 51.2-0.051 28.314-18.381 51.098-40.96 51.098-22.63 0-41.011-22.784-41.011-51.098s18.33-51.2 41.011-51.2zM512 102.4c22.579 0 40.96 22.886 40.96 51.2s-18.33 51.098-40.909 51.098c-22.63 0-41.011-22.784-41.011-51.098-0.051-28.314 18.278-51.2 40.96-51.2zM256 460.8c0 22.579-23.040 40.96-51.354 40.96s-51.046-18.381-51.046-40.96c0-22.63 22.733-40.96 51.046-40.96s51.354 18.33 51.354 40.96zM870.4 460.8c0 22.579-22.938 40.96-51.251 40.96s-51.149-18.381-51.149-40.96c0-22.63 22.835-40.96 51.149-40.96s51.251 18.33 51.251 40.96z" /> +<glyph unicode="" glyph-name="light-up" d="M972.8 501.811c-9.318 0-40.909 0-50.176 0-28.314 0-51.2-18.381-51.2-41.011 0-22.579 22.886-40.909 51.2-40.909 9.318 0 40.909 0 50.176 0 28.262 0 51.2 18.278 51.2 40.909 0 22.579-22.989 41.011-51.2 41.011zM512 742.4c-156.211 0-281.6-125.389-281.6-281.6s125.389-281.6 281.6-281.6c156.16 0 281.6 125.389 281.6 281.6s-125.491 281.6-281.6 281.6zM512 256c-113.203 0-204.8 91.699-204.8 204.8 0 113.203 91.597 204.8 204.8 204.8 113.101 0 204.8-91.597 204.8-204.8 0-113.101-91.699-204.8-204.8-204.8zM153.6 460.8c0 22.579-22.989 41.011-51.2 41.011-9.472 0-41.779 0-51.2 0-28.314 0-51.2-18.381-51.2-41.011 0-22.579 22.886-40.909 51.2-40.909 9.421 0 41.728 0 51.2 0 28.211 0 51.2 18.33 51.2 40.909zM512 819.2c22.579 0 40.909 22.886 40.909 51.2 0 9.421 0 41.779 0 51.2 0 28.314-18.33 51.2-40.909 51.2-22.63 0-41.011-22.886-41.011-51.2 0-9.421 0-41.779 0-51.2 0-28.314 18.381-51.2 41.011-51.2zM512 102.4c-22.63 0-41.011-22.886-41.011-51.2 0-9.421 0-41.779 0-51.2 0-28.314 18.381-51.2 41.011-51.2 22.579 0 40.909 22.886 40.909 51.2 0 9.421 0 41.779 0 51.2 0 28.314-18.33 51.2-40.909 51.2zM889.088 779.981c20.019 20.019 23.245 49.203 7.27 65.178s-45.21 12.698-65.126-7.322c-5.53-5.478-30.362-30.31-35.84-35.789-20.019-20.019-23.245-49.203-7.27-65.178s45.21-12.698 65.178 7.322c5.478 5.53 30.259 30.31 35.789 35.789zM170.701 177.51c-5.53-5.581-30.362-30.413-35.84-35.891-20.019-20.019-23.245-49.101-7.27-65.075s45.21-12.8 65.126 7.219c5.53 5.478 30.362 30.31 35.84 35.789 20.019 20.019 23.245 49.203 7.27 65.229s-45.21 12.646-65.126-7.27zM192.768 837.888c-19.968 20.019-49.203 23.296-65.178 7.322s-12.698-45.21 7.219-65.229c5.53-5.478 30.362-30.31 35.84-35.789 20.019-20.019 49.152-23.296 65.126-7.322s12.749 45.21-7.219 65.178c-5.478 5.53-30.259 30.362-35.789 35.84zM795.341 119.501c5.53-5.478 30.362-30.31 35.84-35.789 20.019-20.019 49.152-23.194 65.126-7.322 15.974 15.974 12.749 45.21-7.27 65.178-5.478 5.478-30.31 30.31-35.789 35.789-20.019 20.019-49.203 23.296-65.229 7.322s-12.698-45.158 7.322-65.178z" /> +<glyph unicode="" glyph-name="line-graph" d="M35.328 392.653l69.786-17.306 52.531 82.483-99.84 24.678c-24.986 6.195-50.227-8.909-56.422-33.792-6.195-24.73 8.96-49.818 33.946-56.064zM946.227 379.29l-228.506-205.619-268.646 207.923c-5.12 3.891-11.008 6.81-17.306 8.294l-35.738 8.909-52.582-82.483 56.32-13.978 291.686-225.69c8.499-6.502 18.534-9.677 28.621-9.677 11.213 0 22.426 3.994 31.181 11.878l257.434 231.782c19.046 17.101 20.531 46.387 3.277 65.382-17.254 18.944-46.643 20.48-65.741 3.277zM444.621 605.184l250.214-160.205c21.146-13.517 49.203-7.885 63.488 12.595l257.382 370.79c14.643 21.094 9.37 50.022-11.827 64.512-21.197 14.592-50.125 9.318-64.768-11.776l-231.834-333.875-251.699 161.126c-10.445 6.707-23.091 8.909-35.226 6.298-12.083-2.714-22.63-10.086-29.235-20.48l-383.846-602.47c-13.824-21.606-7.373-50.33 14.336-64 7.68-4.915 16.333-7.219 24.883-7.219 15.411 0 30.515 7.629 39.322 21.504l358.81 563.2z" /> +<glyph unicode="" glyph-name="link" d="M402.381 220.621l-41.472-41.216c-35.891-35.584-94.362-35.584-130.304 0-17.203 17.101-26.675 39.885-26.675 64.102s9.523 46.899 26.675 64.102l152.576 151.296c31.59 31.386 91.085 77.568 134.451 34.56 19.917-19.763 52.019-19.661 71.834 0.256 19.712 19.917 19.61 52.070-0.307 71.782-73.626 73.114-182.579 59.597-277.453-34.56l-152.576-151.347c-36.608-36.301-56.73-84.685-56.73-136.090 0-51.507 20.173-99.789 56.73-136.090 37.683-37.376 87.142-56.115 136.653-56.115s99.021 18.688 136.653 56.115l41.523 41.216c19.917 19.712 20.019 51.814 0.256 71.68-19.814 19.866-51.917 19.968-71.834 0.307zM864.819 808.602c-79.206 78.541-189.901 82.79-263.117 10.086l-51.661-51.302c-19.917-19.763-20.070-51.866-0.307-71.731 19.763-19.917 51.866-20.019 71.782-0.256l51.712 51.251c37.888 37.683 87.603 22.067 120.115-10.086 17.203-17.152 26.726-39.885 26.726-64.102s-9.523-46.95-26.726-64.051l-162.816-161.485c-74.445-73.779-109.363-39.219-124.262-24.422-19.917 19.763-52.019 19.61-71.731-0.256-19.763-19.917-19.661-52.070 0.256-71.731 34.202-33.894 73.216-50.688 114.074-50.688 50.022 0 102.912 25.19 153.242 75.11l162.816 161.434c36.454 36.352 56.678 84.685 56.678 136.090 0 51.456-20.224 99.789-56.781 136.141z" /> +<glyph unicode="" glyph-name="list" d="M737.28 512h-296.96c-28.262 0-30.72-22.886-30.72-51.2s2.458-51.2 30.72-51.2h296.96c28.262 0 30.72 22.886 30.72 51.2s-2.458 51.2-30.72 51.2zM839.68 256h-399.36c-28.262 0-30.72-22.886-30.72-51.2s2.458-51.2 30.72-51.2h399.36c28.262 0 30.72 22.886 30.72 51.2s-2.458 51.2-30.72 51.2zM440.32 665.6h399.36c28.262 0 30.72 22.886 30.72 51.2s-2.458 51.2-30.72 51.2h-399.36c-28.262 0-30.72-22.886-30.72-51.2s2.458-51.2 30.72-51.2zM276.48 512h-92.16c-28.262 0-30.72-22.886-30.72-51.2s2.458-51.2 30.72-51.2h92.16c28.262 0 30.72 22.886 30.72 51.2s-2.458 51.2-30.72 51.2zM276.48 256h-92.16c-28.262 0-30.72-22.886-30.72-51.2s2.458-51.2 30.72-51.2h92.16c28.262 0 30.72 22.886 30.72 51.2s-2.458 51.2-30.72 51.2zM276.48 768h-92.16c-28.262 0-30.72-22.886-30.72-51.2s2.458-51.2 30.72-51.2h92.16c28.262 0 30.72 22.886 30.72 51.2s-2.458 51.2-30.72 51.2z" /> +<glyph unicode="" glyph-name="location-pin" d="M512 869.939c-141.414 0-256-114.125-256-255.488 0-244.429 256-563.2 256-563.2s256 318.822 256 563.2c0 141.312-114.586 255.488-256 255.488zM512 473.088c-76.39 0-138.24 61.901-138.24 138.24s61.85 138.24 138.24 138.24c76.288 0 138.189-61.901 138.189-138.24s-61.901-138.24-138.189-138.24z" /> +<glyph unicode="" glyph-name="location" d="M991.59 45.978l-69.99 210.022h-76.8l42.65-204.8h-750.899l42.65 204.8h-76.8l-70.042-210.022c-17.766-53.453 13.722-97.178 70.042-97.178h819.2c56.32 0 87.808 43.725 69.99 97.178zM768 716.8c0 141.363-114.586 256-256 256s-256-114.637-256-256c0-244.48 256-512 256-512s256 267.52 256 512zM373.76 713.728c0 76.339 61.85 138.189 138.24 138.189s138.24-61.85 138.24-138.189c0-76.39-61.901-138.24-138.24-138.24s-138.24 61.901-138.24 138.24z" /> +<glyph unicode="" glyph-name="lock-open" d="M808.96 563.2h-92.16v122.88c0 148.326-68.352 235.52-204.8 235.52-136.499 0-204.8-87.194-204.8-235.52v-20.48h102.4v41.011c0 73.984 40.806 112.589 102.4 112.589s102.4-38.605 102.4-112.589v-143.411h-409.6c-28.314 0-51.2-33.075-51.2-61.389v-399.411c0-28.109 21.914-58.317 48.691-66.918l61.286-19.814c26.829-8.55 71.782-15.667 99.942-15.667h296.96c28.109 0 73.114 7.117 99.891 15.718l61.235 19.814c26.829 8.55 48.794 38.758 48.794 66.867v399.411c0 28.314-33.178 61.389-61.44 61.389z" /> +<glyph unicode="" glyph-name="lock" d="M808.96 563.2h-92.16v122.88c0 148.326-68.352 235.52-204.8 235.52-136.499 0-204.8-87.194-204.8-235.52v-122.88h-102.4c-28.314 0-51.2-33.075-51.2-61.389v-399.411c0-28.109 21.914-58.317 48.691-66.918l61.286-19.814c26.829-8.55 71.782-15.667 99.942-15.667h296.96c28.109 0 73.114 7.117 99.891 15.718l61.235 19.814c26.829 8.55 48.794 38.758 48.794 66.867v399.411c0 28.314-33.178 61.389-61.44 61.389zM614.4 563.2h-204.8v143.411c0 73.984 40.806 112.589 102.4 112.589s102.4-38.605 102.4-112.589v-143.411z" /> +<glyph unicode="" glyph-name="log-out" d="M972.8 460.8l-307.2 256v-153.6h-358.4v-204.8h358.4v-153.6l307.2 256zM153.6 819.2h409.6v102.4h-409.6c-56.32 0-102.4-46.080-102.4-102.4v-716.8c0-56.32 46.080-102.4 102.4-102.4h409.6v102.4h-409.6v716.8z" /> +<glyph unicode="" glyph-name="login" d="M716.8 460.8l-307.2 256v-153.6h-358.4v-204.8h358.4v-153.6l307.2 256zM870.4 102.4h-409.6v-102.4h409.6c56.32 0 102.4 46.080 102.4 102.4v716.8c0 56.32-46.080 102.4-102.4 102.4h-409.6v-102.4h409.6v-716.8z" /> +<glyph unicode="" glyph-name="loop" d="M1024 614.4v-358.4c0-56.474-45.875-102.4-102.4-102.4h-819.2c-56.525 0-102.4 45.926-102.4 102.4v358.4c0 56.525 45.875 102.4 102.4 102.4h358.4v102.4l204.8-179.2-204.8-179.2v102.4h-307.2v-256h716.8v256h-153.6v153.6h204.8c56.525 0 102.4-45.875 102.4-102.4z" /> +<glyph unicode="" glyph-name="magnet" d="M622.848 58.368c-1.434-15.821 11.11-29.901 27.904-31.283l204.032-16.691c16.845-1.382 31.795 10.394 33.28 26.214l15.923 168.294-265.216 21.811-15.923-168.346zM120.013 204.851l15.974-168.294c1.434-15.821 16.435-27.597 33.28-26.214l204.032 16.691c16.794 1.382 29.338 15.514 27.955 31.283l-15.974 168.294-265.267-21.76zM93.747 482.15l16.435-173.619 265.267 21.811-16.486 173.414c-0.358 4.198-0.563 8.499-0.563 12.8 0 79.616 68.915 144.384 153.6 144.384s153.6-64.819 153.6-144.384c0-4.301-0.205-8.602-0.614-12.8l-16.435-173.414 265.267-21.811 16.435 173.619c1.075 11.52 1.536 22.989 1.536 34.406 0.051 217.702-188.262 394.803-419.789 394.803s-419.84-177.101-419.84-394.803c0-11.418 0.563-22.886 1.587-34.406z" /> +<glyph unicode="" glyph-name="magnifying-glass" d="M898.304 180.89l-193.485 193.485c29.184 47.872 45.978 104.192 45.978 164.352 0 174.95-151.603 326.502-326.554 326.502-174.95 0.051-316.723-141.773-316.723-316.723 0-174.899 151.603-326.502 326.502-326.502 58.214 0 112.64 15.821 159.488 43.213l194.509-194.611c19.046-18.995 49.92-18.995 68.915 0l48.282 48.282c18.995 18.995 12.083 43.008-6.912 62.003zM205.005 548.506c0 121.139 98.15 219.29 219.238 219.29 121.139 0 229.069-107.878 229.069-229.069 0-121.088-98.202-219.29-219.29-219.29-121.139 0.051-229.018 107.981-229.018 229.069z" /> +<glyph unicode="" glyph-name="mail" d="M80.589 702.157c24.986-13.414 371.098-199.373 384-206.285s29.594-10.189 46.387-10.189c16.794 0 33.485 3.277 46.387 10.189s359.014 192.87 384 206.285c25.037 13.466 48.691 65.843 2.765 65.843h-866.253c-45.926 0-22.272-52.378 2.714-65.843zM952.986 589.363c-28.416-14.797-378.214-197.069-395.622-206.182s-29.594-10.189-46.387-10.189-28.979 1.075-46.387 10.189-365.21 191.437-393.626 206.234c-19.968 10.445-19.763-1.792-19.763-11.213s0-373.402 0-373.402c0-21.504 28.979-51.2 51.2-51.2h819.2c22.221 0 51.2 29.696 51.2 51.2 0 0 0 363.93 0 373.35s0.205 21.658-19.814 11.213z" /> +<glyph unicode="" glyph-name="man" d="M512 768c56.525 0 102.4 45.875 102.4 102.4 0 56.576-45.875 102.4-102.4 102.4s-102.4-45.824-102.4-102.4c0-56.525 45.875-102.4 102.4-102.4zM818.074 379.75c-19.712 90.88-54.17 240.026-104.55 301.773-48.998 60.058-147.712 62.566-201.523 62.566v0c-53.811 0-152.525-2.509-201.523-62.566-50.381-61.747-84.838-210.893-104.55-301.773-10.906-50.33 59.085-68.813 77.363-18.176 27.187 75.418 48.179 138.752 94.157 191.283 24.166-148.838-65.024-407.859-70.246-552.858 0-28.262 22.938-51.2 51.2-51.2 21.811 0 40.448 13.619 47.821 32.87 23.398 81.254 105.779 307.354 105.779 307.354v0 0c0 0 82.381-226.099 105.779-307.354 7.373-19.251 26.010-32.87 47.821-32.87 28.262 0 51.2 22.938 51.2 51.2-5.222 144.998-94.413 404.019-70.246 552.806 45.978-52.531 66.97-115.866 94.157-191.283 18.227-50.586 88.269-32.102 77.363 18.227z" /> +<glyph unicode="" glyph-name="map" d="M995.686 782.438l-307.2 153.6c-14.387 7.219-31.386 7.219-45.824 0l-288.256-144.128-287.027 95.693c-15.667 5.222-32.768 2.611-46.131-7.066-13.363-9.626-21.248-25.088-21.248-41.523v-665.651c0-19.405 10.957-37.12 28.314-45.773l307.2-153.6c7.219-3.584 15.053-5.427 22.886-5.427s15.718 1.792 22.886 5.427l288.256 144.077 287.027-95.693c15.616-5.12 32.768-2.509 46.131 7.117s21.248 25.088 21.248 41.472v665.702c0.051 19.405-10.906 37.12-28.262 45.773zM409.6 704.973l204.8 102.4v-602.266l-204.8-102.4v602.266zM102.4 768l204.8-68.25v-597.043l-204.8 102.4v562.893zM921.6 141.978l-204.8 68.301v597.094l204.8-102.4v-562.995z" /> +<glyph unicode="" glyph-name="mask" d="M1002.547 673.792c-2.202 24.013-23.654 41.114-47.104 37.376-89.19-14.234-298.291-96.768-443.443-96.768s-354.253 82.534-443.443 96.768c-23.45 3.738-44.851-13.312-47.104-37.325-7.27-78.438-21.453-287.283-21.453-318.925 0-42.496 177.766-139.878 307.2-139.878 125.542 0 151.040 139.878 204.8 139.878s79.258-139.878 204.8-139.878c129.434 0 307.2 97.382 307.2 139.878 0 31.642-14.182 240.486-21.453 318.874zM392.192 423.936c-18.074-16.282-68.352-54.784-129.587-42.752s-98.253 67.738-110.899 90.010c-3.072 5.427-2.099 12.288 2.253 16.23 18.074 16.282 68.352 54.784 129.638 42.752 61.235-12.032 98.253-67.738 110.899-90.010 3.021-5.427 2.048-12.288-2.304-16.23zM872.294 471.194c-12.595-22.323-49.613-77.978-110.899-90.010-61.235-12.032-111.565 26.47-129.587 42.752-4.403 3.942-5.325 10.803-2.304 16.23 12.595 22.323 49.613 77.978 110.899 90.010 61.235 12.032 111.565-26.47 129.587-42.752 4.403-3.942 5.376-10.803 2.304-16.23z" /> +<glyph unicode="" glyph-name="medal" d="M512 460.8c27.034 0 52.531-5.325 77.005-13.107l-311.142 466.688c-3.021 4.506-8.038 7.219-13.466 7.219h-182.067c-5.99 0-9.626-6.707-6.246-11.725l319.027-478.566c35.174 18.227 74.547 29.491 116.89 29.491zM941.67 921.6h-182.067c-5.427 0-10.445-2.714-13.466-7.219l-195.738-293.581 102.4-153.6 295.117 442.675c3.328 5.018-0.256 11.725-6.246 11.725zM512 409.6c-113.101 0-204.8-91.699-204.8-204.8s91.699-204.8 204.8-204.8 204.8 91.699 204.8 204.8c0 113.101-91.699 204.8-204.8 204.8zM620.134 198.81c3.174-3.277 2.662-8.090-1.126-10.65s-4.864-7.834-2.509-11.725c2.406-3.891 0.922-8.448-3.328-10.189s-6.4-6.656-4.864-10.957-0.87-8.448-5.325-9.267-7.629-5.171-7.014-9.677-2.611-8.090-7.168-7.936c-4.557 0.154-8.55-3.482-8.909-7.987s-4.25-7.373-8.653-6.298-9.114-1.587-10.394-5.99-5.683-6.349-9.779-4.352c-4.096 1.997-9.216 0.307-11.366-3.686s-6.861-5.018-10.496-2.202-8.96 2.253-11.878-1.229-7.731-3.482-10.701 0-8.294 4.045-11.878 1.229-8.294-1.792-10.496 2.202-7.27 5.683-11.366 3.686c-4.096-1.997-8.499 0-9.779 4.352s-5.939 7.066-10.394 5.99-8.346 1.741-8.653 6.298-4.301 8.141-8.858 8.038c-4.557-0.154-7.782 3.43-7.168 7.936s-2.56 8.858-7.014 9.677-6.912 4.966-5.325 9.267-0.666 9.216-4.864 10.957-5.683 6.298-3.328 10.189c2.406 3.891 1.28 9.165-2.509 11.725s-4.25 7.373-1.126 10.65c3.174 3.277 3.174 8.653 0 11.981s-2.662 8.090 1.126 10.65 4.864 7.834 2.509 11.725c-2.406 3.891-0.922 8.448 3.328 10.189s6.4 6.656 4.864 10.957 0.87 8.448 5.325 9.267 7.629 5.171 7.014 9.677 2.611 8.090 7.168 7.936c4.557-0.154 8.55 3.482 8.909 7.987s4.25 7.373 8.653 6.298 9.114 1.587 10.394 5.99 5.683 6.349 9.779 4.352c4.096-1.997 9.216-0.307 11.366 3.686s6.861 5.018 10.496 2.202 8.96-2.253 11.878 1.229 7.731 3.482 10.701 0 8.294-4.045 11.878-1.229 8.294 1.792 10.496-2.202 7.27-5.683 11.366-3.686c4.096 1.997 8.499 0 9.779-4.352s5.939-7.066 10.394-5.99 8.346-1.741 8.653-6.298 4.352-8.141 8.909-7.987c4.557 0.154 7.782-3.43 7.168-7.936s2.56-8.858 7.014-9.677 6.912-4.966 5.325-9.267 0.666-9.216 4.864-10.957 5.683-6.298 3.328-10.189c-2.406-3.891-1.28-9.165 2.509-11.725s4.25-7.373 1.126-10.65-3.226-8.755-0.051-12.032z" /> +<glyph unicode="" glyph-name="megaphone" d="M881.818 612.864c-81.101 188.723-211.558 332.288-277.555 305.51-112.077-45.619 66.765-264.397-483.686-488.090-47.565-19.405-59.597-96.666-39.68-142.95 19.866-46.182 84.89-92.211 132.454-72.909 8.243 3.379 38.451 13.107 38.451 13.107 33.946-45.619 69.478-18.586 82.125-47.514 15.155-34.816 48.077-110.49 59.29-136.192s36.608-49.51 55.040-42.496c18.381 7.014 80.998 30.822 104.96 39.885 23.962 9.114 29.645 30.515 22.323 47.309-7.885 18.176-40.243 23.501-49.51 44.698-9.216 21.094-39.373 88.986-48.026 110.387-11.776 29.082 13.261 52.787 49.664 56.525 250.573 26.214 297.421-128.614 382.72-93.901 65.894 26.88 52.48 218.061-28.57 406.63zM853.606 306.893c-14.694-5.888-113.306 71.782-176.282 218.47-63.027 146.586-55.091 280.576-40.448 286.566 14.643 5.888 110.848-87.91 173.824-234.496 63.027-146.586 57.549-264.55 42.906-270.541z" /> +<glyph unicode="" glyph-name="menu" d="M839.68 512h-655.36c-28.262 0-30.72-22.886-30.72-51.2s2.458-51.2 30.72-51.2h655.36c28.262 0 30.72 22.886 30.72 51.2s-2.458 51.2-30.72 51.2zM839.68 307.2h-655.36c-28.262 0-30.72-22.886-30.72-51.2s2.458-51.2 30.72-51.2h655.36c28.262 0 30.72 22.886 30.72 51.2s-2.458 51.2-30.72 51.2zM184.32 614.4h655.36c28.262 0 30.72 22.886 30.72 51.2s-2.458 51.2-30.72 51.2h-655.36c-28.262 0-30.72-22.886-30.72-51.2s2.458-51.2 30.72-51.2z" /> +<glyph unicode="" glyph-name="message" d="M921.6 665.6v-358.4c0-56.32-46.080-102.4-102.4-102.4h-204.8v-153.6l-204.8 153.6h-204.8c-56.371 0-102.4 46.080-102.4 102.4v358.4c0 56.32 46.029 102.4 102.4 102.4h614.4c56.32 0 102.4-46.080 102.4-102.4z" /> +<glyph unicode="" glyph-name="mic" d="M839.629 581.478v-141.158c0-114.483-84.122-237.005-276.429-253.901v-135.219h133.12c11.264 0 20.48-9.216 20.48-20.48v-61.44c0-11.315-9.267-20.48-20.48-20.48h-368.64c-11.264 0-20.48 9.216-20.48 20.48v61.44c0 11.264 9.216 20.48 20.429 20.48h133.171v135.219c-192.41 16.896-276.48 139.418-276.48 253.901v141.158c0 11.315 9.216 20.48 20.48 20.48h30.72c11.264 0 20.48-9.216 20.48-20.48v-141.158c0-68.403 53.914-184.32 256-184.32 202.035 0 256 115.917 256 184.32v141.158c0 11.315 9.216 20.48 20.429 20.48h30.771c11.264 0.051 20.429-9.165 20.429-20.48zM512 358.4c120.115 0 153.6 49.408 153.6 81.92v161.69h-307.2v-161.69c0-32.512 33.382-81.92 153.6-81.92zM665.6 890.88c0 32.614-33.485 81.92-153.6 81.92-120.218 0-153.6-49.306-153.6-81.92v-217.19h307.2v217.19z" /> +<glyph unicode="" glyph-name="minus" d="M819.2 460.8c0-28.314-2.458-51.2-30.771-51.2h-552.858c-28.262 0-30.771 22.886-30.771 51.2s2.509 51.2 30.771 51.2h552.909c28.262 0 30.72-22.886 30.72-51.2z" /> +<glyph unicode="" glyph-name="mobile" d="M717.005 972.8h-410.010c-56.422 0-102.195-45.773-102.195-102.195v-819.558c0-56.474 45.773-102.246 102.195-102.246h409.958c56.474 0 102.246 45.773 102.246 102.195v819.61c0 56.422-45.773 102.195-102.195 102.195zM512 0c-35.328 0-64 22.886-64 51.2s28.672 51.2 64 51.2 64-22.886 64-51.2-28.672-51.2-64-51.2zM716.8 153.6h-409.6v716.8h409.6v-716.8z" /> +<glyph unicode="" glyph-name="modern-mic" d="M62.874 415.181c-11.315-7.578-14.95-23.552-8.141-35.328l66.355-114.893c6.81-11.776 22.426-16.64 34.662-10.65l202.65 98.15v-352.461h102.4v402.125l208.435 101.018-134.144 232.448-472.218-320.41zM944.998 817.306c-57.395 99.328-184.525 133.376-283.955 75.981-46.592-26.88-77.21-69.581-92.211-117.197l152.371-263.987c48.691-10.854 101.018-5.632 147.712 21.248 99.43 57.395 133.478 184.474 76.083 283.955z" /> +<glyph unicode="" glyph-name="moon" d="M702.413 880.64c35.123-19.712 68.198-44.39 98.099-74.189 175.104-175.206 175.104-459.059 0-634.163s-459.008-175.104-634.163 0c-29.85 29.901-54.528 63.027-74.189 98.099 170.752-95.59 390.81-71.014 536.013 74.189 145.254 145.254 169.882 365.261 74.24 536.064z" /> +<glyph unicode="" glyph-name="mouse" d="M788.582 235.418l-134.502 385.792c-36.966 106.138-151.859 164.864-260.71 135.834l-101.171 196.352c-9.165 17.715-30.618 24.525-48.026 15.155-17.357-9.37-24.013-31.437-14.797-49.203l98.765-191.59c-78.694-52.224-119.603-151.245-93.645-244.429l109.517-394.035c30.822-110.694 157.696-167.117 285.235-128.102 125.901 44.186 197.12 165.734 159.334 274.227zM455.629 515.942c-37.376-12.288-77.363 8.806-89.344 47.155-12.032 38.298 8.602 79.258 45.926 91.546 37.376 12.288 77.414-8.806 89.395-47.104s-8.602-79.309-45.978-91.597z" /> +<glyph unicode="" glyph-name="music" d="M819.2 921.6h-614.4c-28.314 0-51.2-22.886-51.2-51.2v-819.2c0-28.262 22.886-51.2 51.2-51.2h614.4c28.314 0 51.2 22.938 51.2 51.2v819.2c0 28.262-22.886 51.2-51.2 51.2zM655.104 383.027c-9.472-19.558-19.098-20.582-14.899 0 10.803 53.197 3.482 167.475-77.005 180.173v-243.2c0-49.818-22.938-93.184-83.917-112.794-59.187-18.893-125.389 0.819-140.902 43.315s19.302 94.208 77.722 115.507c32.614 11.878 70.4 14.95 95.898 5.171v345.6h51.2c0-120.576 208.128-94.157 91.904-333.773z" /> +<glyph unicode="" glyph-name="network" d="M270.029 618.752c10.24 0 20.173-1.485 29.491-4.403 35.328 39.578 74.496 75.622 116.89 107.52-1.792 7.475-2.765 15.309-2.765 23.296 0 11.11 1.843 21.811 5.222 31.795-47.565 33.997-99.174 62.618-154.163 84.685-51.456-31.795-96.358-73.267-132.198-121.907 26.573-47.104 58.163-90.982 94.106-130.918 13.107 6.349 27.802 9.933 43.418 9.933zM169.779 518.554c0 14.080 2.97 27.494 8.141 39.578-32.154 35.43-61.286 73.523-86.784 114.125-32-63.59-50.176-135.424-50.176-211.507 0-88.013 24.269-170.394 66.304-240.896 15.053 84.685 43.571 164.813 82.944 238.182-12.8 16.794-20.429 37.837-20.429 60.518zM513.843 845.363c26.47 0 50.432-10.291 68.403-27.085 52.275 22.477 107.315 39.782 164.608 50.79-69.171 39.885-149.35 62.771-234.854 62.771-58.317 0-114.125-10.701-165.683-30.106 40.909-20.224 79.923-43.776 116.582-70.4 14.95 8.909 32.307 14.029 50.944 14.029zM663.654 373.35c6.246 13.005 15.104 24.525 26.061 33.587-29.594 90.982-76.442 174.285-136.806 245.914-11.981-5.12-25.19-7.885-39.117-7.885-21.76 0-41.779 7.014-58.214 18.688-36.352-27.597-69.99-58.522-100.557-92.314 9.626-15.309 15.206-33.382 15.206-52.787 0-10.394-1.587-20.48-4.608-30.003 87.91-58.675 189.133-99.021 298.035-115.2zM793.651 238.029c1.331-18.995 2.099-38.093 2.099-57.395 0-33.997-2.15-67.482-6.246-100.403 79.872 58.317 140.698 141.21 171.366 237.517-36.352-8.806-73.626-15.104-111.667-18.688-8.858-27.494-29.286-49.613-55.552-61.030zM640.205 305.971c-116.326 19.302-224.102 63.693-317.952 127.181-15.258-9.318-33.126-14.797-52.275-14.797-7.117 0-13.926 0.717-20.582 2.099-44.902-85.094-73.626-180.070-81.869-280.781 44.851-48.128 99.533-86.886 161.024-112.896 76.39 117.402 183.091 214.477 311.654 279.194zM828.211 809.933c-75.52-7.322-147.61-26.317-214.682-54.682 0.307-3.379 0.512-6.707 0.512-10.086 0-15.821-3.789-30.72-10.291-43.981 67.123-78.797 119.142-170.496 152.013-270.899 40.806-0.819 75.622-25.702 90.624-61.184 45.363 4.608 89.498 13.312 131.994 25.805 3.072 21.504 4.71 43.52 4.71 65.894-0.051 138.445-59.75 262.963-154.88 349.133zM690.637 252.467c-120.013-56.218-220.365-142.797-293.018-248.627 36.608-9.165 74.906-14.080 114.381-14.080 71.014 0 138.342 15.821 198.758 43.981 9.728 47.514 14.848 96.614 14.848 146.893 0 18.176-0.819 36.198-2.202 54.016-12.083 3.891-23.194 9.882-32.768 17.818z" /> +<glyph unicode="" glyph-name="new-message" d="M930.509 879.309c-56.422 56.422-106.598 39.782-106.598 39.782l-442.317-441.958-74.394-221.133 221.030 74.445 442.061 442.266c0 0 16.589 50.176-39.782 106.598zM542.976 378.624l-24.115-24.064-75.418-25.6c-5.325 12.288-11.981 24.422-25.498 37.888-13.517 13.517-25.6 20.173-37.888 25.498l25.6 75.418 24.115 24.064c0 0 39.731 4.557 78.694-34.458 39.014-38.963 34.509-78.746 34.509-78.746zM819.2 102.4h-665.6v665.6h256l102.4 102.4h-358.4c-56.32 0-102.4-46.080-102.4-102.4v-665.6c0-56.32 46.080-102.4 102.4-102.4h665.6c56.32 0 102.4 46.080 102.4 102.4v358.4l-102.4-102.4v-256z" /> +<glyph unicode="" glyph-name="new" d="M956.928 340.787l-88.422 78.746c-25.6 22.784-25.6 60.109 0 82.893l88.422 78.797c25.6 22.784 18.79 43.981-15.155 47.309l-117.248 11.11c-33.894 3.174-52.224 32.41-40.499 64.819l62.208 173.21c11.674 32.512-2.611 44.288-31.693 26.317l-138.291-85.504c-29.082-18.125-66.714-8.192-83.507 21.811l-50.074 89.395c-16.845 30.106-44.646 30.208-61.798 0.41l-46.541-80.896c-17.254-29.952-56.73-42.65-87.706-28.467l-81.92 37.581c-31.13 14.336-54.938-2.15-53.094-36.659l4.403-82.688c1.894-34.509-23.603-69.99-56.525-78.899l-79.104-21.197c-32.87-8.909-38.912-34.816-13.312-57.6l88.422-78.797c25.6-22.784 25.6-60.109 0-82.893l-88.422-78.797c-25.6-22.784-18.842-44.902 15.002-48.998l107.264-13.005c33.843-4.096 52.685-34.304 41.882-67.123l-54.989-166.81c-10.803-32.819 4.608-45.517 34.202-28.416l126.106 73.011c29.594 17.101 69.427 7.68 88.525-20.89l52.326-78.797c19.046-28.621 47.667-27.085 63.488 3.482l46.029 88.73c15.872 30.618 53.862 43.11 84.378 27.802l88.781-44.39c30.618-15.206 54.118 0.512 52.275 34.918l-4.454 82.79c-1.792 34.509 23.603 69.888 56.627 78.797l79.002 21.299c32.973 8.909 39.014 34.816 13.414 57.6zM563.2 256h-102.4v102.4h102.4v-102.4zM563.2 409.6h-102.4v256h102.4v-256z" /> +<glyph unicode="" glyph-name="news" d="M716.8 716.8h-204.8v-102.4h204.8v102.4zM716.8 563.2h-204.8v-51.2h204.8v51.2zM460.8 716.8h-153.6v-204.8h153.6v204.8zM460.8 409.6h256v51.2h-256v-51.2zM614.4 307.2h102.4v51.2h-102.4v-51.2zM716.8 256h-409.6v-51.2h409.6v51.2zM563.2 358.4h-256v-51.2h256v51.2zM409.6 460.8h-102.4v-51.2h102.4v51.2zM870.4 921.6h-716.8c-28.314 0-51.2-22.886-51.2-51.2v-819.2c0-28.262 22.886-51.2 51.2-51.2h716.8c28.314 0 51.2 22.938 51.2 51.2v819.2c0 28.262-22.886 51.2-51.2 51.2zM819.2 102.4h-614.4v716.8h614.4v-716.8z" /> +<glyph unicode="" glyph-name="note" d="M766.515 489.574c-21.606-33.587-33.075-19.2-26.624 0 17.203 50.842 17.818 231.834-125.491 254.413l-0.102-590.387c0-84.838-88.832-204.8-255.898-204.8-84.838 0-153.6 44.595-153.6 128 0 108.493 98.662 174.080 204.8 174.080 67.994 0 102.4-20.48 102.4-20.48v742.4h102.4c0-137.011 306.483-242.893 152.115-483.226z" /> +<glyph unicode="" glyph-name="notification" d="M768 543.744v-441.344h-614.4v614.4h441.344c-3.738 16.486-6.144 33.536-6.144 51.2s2.406 34.714 6.144 51.2h-441.344c-56.422 0-102.4-46.080-102.4-102.4v-614.4c0-56.32 46.080-102.4 102.4-102.4h614.4c56.32 0 102.4 46.080 102.4 102.4v441.344c-16.486-3.738-33.536-6.144-51.2-6.144s-34.714 2.406-51.2 6.144zM819.2 921.6c-84.838 0-153.6-68.762-153.6-153.6s68.762-153.6 153.6-153.6 153.6 68.762 153.6 153.6-68.762 153.6-153.6 153.6z" /> +<glyph unicode="" glyph-name="old-mobile" d="M696.32 819.2h-337.92v153.6h-102.4v-952.32c0-39.424 32.205-71.68 71.578-71.68h368.742c39.373 0 71.68 32.307 71.68 71.68v726.989c0 39.526-32.307 71.731-71.68 71.731zM409.6 204.8c-35.379 0-64 22.886-64 51.2s28.621 51.2 64 51.2 64-22.886 64-51.2-28.621-51.2-64-51.2zM473.6 102.4c0-28.314-28.621-51.2-64-51.2s-64 22.886-64 51.2 28.621 51.2 64 51.2 64-22.886 64-51.2zM358.4 409.6v307.2h307.2v-307.2h-307.2zM614.4 204.8c-35.379 0-64 22.886-64 51.2s28.621 51.2 64 51.2 64-22.886 64-51.2-28.621-51.2-64-51.2zM678.4 102.4c0-28.314-28.621-51.2-64-51.2s-64 22.886-64 51.2 28.621 51.2 64 51.2 64-22.886 64-51.2z" /> +<glyph unicode="" glyph-name="old-phone" d="M883.507 345.446c-4.915 34.15-31.283 60.774-65.229 68.71-131.942 30.925-165.018 106.906-170.598 191.181-23.398 4.352-65.024 9.062-135.68 9.062s-112.282-4.71-135.68-9.062c-5.581-84.275-38.656-160.256-170.598-191.181-33.946-7.987-60.314-34.56-65.229-68.71l-25.446-176.23c-8.96-62.054 36.608-118.016 99.994-118.016h593.92c63.334 0 108.954 55.962 99.994 118.016l-25.446 176.23zM512 179.61c-71.424 0-129.331 57.344-129.331 128s57.907 128 129.331 128 129.331-57.344 129.331-128-57.958-128-129.331-128zM1021.44 665.6c-1.229 76.8-196.71 204.749-509.44 204.8-312.781-0.051-508.262-128-509.44-204.8s1.075-176.742 129.792-160.102c150.579 19.507 141.312 72.090 141.312 147.251 0 52.429 122.47 65.075 238.336 65.075s238.285-12.646 238.336-65.075c0-75.162-9.267-127.744 141.312-147.251 128.666-16.64 130.97 83.302 129.792 160.102z" /> +<glyph unicode="" glyph-name="palette" d="M805.888 839.27c-180.634 60.723-361.779 49.203-548.864-65.229-146.074-89.242-241.562-311.091-210.074-470.118 37.274-187.955 222.771-306.944 473.242-238.131 270.080 74.189 335.309 232.755 326.605 273.101s-136.448 84.582-87.962 179.098c60.826 118.426 160.205 58.829 203.878 83.046 43.776 24.166 27.597 176.23-156.826 238.234zM619.213 291.123c-40.858-11.162-83.098 13.107-94.362 54.221-11.315 41.216 12.698 83.507 53.555 94.669s83.046-13.005 94.362-54.221c11.264-41.114-12.698-83.507-53.555-94.669z" /> +<glyph unicode="" glyph-name="paper-plane" d="M954.368 837.939c-17.613-6.195-886.835-312.525-903.987-318.566-14.541-5.12-17.766-17.664-0.512-24.525 20.531-8.243 194.355-77.875 194.355-77.875v0l115.2-46.131c0 0 554.906 407.45 562.381 412.979 7.578 5.53 16.282-4.864 10.803-10.803-5.478-5.99-402.995-435.866-402.995-435.866v-0.102l-23.142-25.754 30.669-16.486c0 0 238.080-128.205 255.078-137.318 14.899-7.987 34.202-1.382 38.502 17.101 5.069 21.811 145.664 627.763 148.787 641.28 4.045 17.562-7.578 28.262-25.139 22.067zM358.4 94.106c0-12.595 7.117-16.128 16.947-7.219 12.851 11.725 145.92 131.123 145.92 131.123l-162.867 84.173v-208.077z" /> +<glyph unicode="" glyph-name="pencil" d="M752.128 836.557c-96.973 70.605-165.99 69.069-192.205 64.819-7.373-1.178-13.568-5.427-17.92-11.418l-352.41-486.246c-14.182-19.558-22.374-42.803-23.654-66.918l-15.155-287.949c-1.075-20.736 19.558-35.738 38.912-28.314l269.107 102.912c22.682 8.704 42.394 23.808 56.627 43.469l352.256 486.093c4.557 6.298 6.4 13.978 5.12 21.658-4.301 26.931-24.934 92.262-120.678 161.894zM459.622 180.992l-104.602-40.397c-4.096-1.587-8.653-0.307-11.315 3.174-13.466 17.152-29.491 34.15-55.040 52.736-25.549 18.534-46.643 28.57-67.072 36.147-4.096 1.536-6.707 5.427-6.451 9.83l6.246 111.923 28.109 38.656c0 0 62.925 8.653 145.050-51.098 82.022-59.699 93.235-122.266 93.235-122.266l-28.16-38.707z" /> +<glyph unicode="" glyph-name="phone" d="M574.925 397.875c-81.050-80.998-174.95-158.515-212.070-121.395-53.094 53.094-85.862 99.379-203.008 5.222-117.094-94.106-27.136-156.877 24.32-208.282 59.392-59.392 280.781-3.174 499.61 215.603 218.778 218.829 274.842 440.218 215.398 499.61-51.456 51.507-113.92 141.414-208.026 24.32-94.157-117.094-47.923-149.862 5.274-203.008 36.966-37.12-40.499-131.021-121.498-212.070z" /> +<glyph unicode="" glyph-name="pie-chart" d="M563.2 923.75v-462.797c0-28.365-22.989-51.354-51.354-51.354h-462.797c25.498-233.216 222.976-414.72 462.95-414.72 257.331 0 465.92 208.589 465.92 465.92 0 240.026-181.504 437.453-414.72 462.95zM460.8 923.75c-216.371-23.654-388.096-195.379-411.75-411.75h411.75v411.75z" /> +<glyph unicode="" glyph-name="pin" d="M244.429 190.106l-107.776-166.4 11.469-54.426 54.272 11.622 107.725 166.298c-11.469 6.144-22.835 12.698-33.843 19.968-11.162 7.219-21.811 14.95-31.846 22.938zM700.723 248.218c0.717 1.485 1.178 3.123 1.843 4.71 2.714 5.99 5.12 11.981 7.066 18.278 0.307 1.126 0.461 2.253 0.819 3.277 1.997 6.963 3.686 13.824 5.018 20.89 0 0.358 0 0.614 0 1.075 9.984 59.853-7.424 126.618-47.258 186.931l56.832 87.757c65.485-8.346 122.112 8.141 149.35 50.278 47.258 72.858-10.24 194.15-128.256 271.002-118.118 76.902-252.058 80.128-299.213 7.373-27.341-42.189-19.354-100.71 15.002-157.338l-56.934-87.757c-71.117 11.93-139.059 0.819-189.594-32.768-0.307-0.102-0.666-0.205-0.87-0.41-5.888-3.994-11.622-8.397-16.998-13.005-0.87-0.717-1.894-1.382-2.611-2.099-5.018-4.301-9.523-9.114-13.875-13.926-1.024-1.229-2.458-2.304-3.43-3.584-5.427-6.195-10.445-12.749-14.848-19.712-70.861-109.21-10.394-274.483 134.81-369.101 145.306-94.618 320.512-82.637 391.219 26.573 4.454 6.912 8.55 14.131 11.93 21.555zM658.995 758.067c-45.414 29.542-67.584 76.134-49.408 104.243 18.125 28.006 69.683 26.726 114.995-2.816 45.517-29.542 67.482-76.237 49.408-104.243s-69.53-26.726-114.995 2.816z" /> +<glyph unicode="" glyph-name="plus" d="M819.2 460.8c0-28.314-2.458-51.2-30.771-51.2h-225.229v-225.229c0-28.262-22.886-30.771-51.2-30.771s-51.2 2.509-51.2 30.771v225.229h-225.229c-28.262 0-30.771 22.886-30.771 51.2s2.509 51.2 30.771 51.2h225.229v225.229c0 28.314 22.886 30.771 51.2 30.771s51.2-2.458 51.2-30.771v-225.229h225.229c28.314 0 30.771-22.886 30.771-51.2z" /> +<glyph unicode="" glyph-name="popup" d="M819.2 870.4h-410.675c-56.269 0-101.325-45.056-101.325-101.376v-410.624c0-56.32 46.080-102.4 102.4-102.4h409.6c56.32 0 102.4 46.080 102.4 102.4v409.6c0 56.32-46.080 102.4-102.4 102.4zM819.2 358.4h-409.6v409.6h409.6v-409.6zM204.8 460.8h-102.4v-307.2c0-56.32 46.080-102.4 102.4-102.4h307.2v102.4h-307.2v307.2z" /> +<glyph unicode="" glyph-name="power-plug" d="M0 256v-76.698c0-14.182 11.52-25.702 25.702-25.702h51.046c14.131 0 25.651 11.52 25.651 25.702v76.698c0 49.101 41.011 116.378 102.4 142.285v107.776c-118.579-27.443-204.8-146.125-204.8-250.061zM617.728 732.109l-129.536-97.178c-17.766-13.312-39.373-20.531-61.594-20.531h-119.142c-28.416 0-51.456-23.040-51.456-51.456v-204.339c0-28.365 23.040-51.405 51.456-51.405h119.142c22.221 0 43.827-7.219 61.594-20.531l129.587-97.178c31.027-23.296 68.813-35.891 107.622-35.891h93.798v614.4h-93.798c-38.81 0-76.595-12.595-107.674-35.891zM870.4 665.6v-102.4h153.6v102.4h-153.6zM870.4 256h153.6v102.4h-153.6v-102.4z" /> +<glyph unicode="" glyph-name="price-ribbon" d="M656.64 427.366c6.042 13.21 22.784 25.446 37.222 27.085s27.597 14.848 29.235 29.286c1.741 14.336 13.926 31.13 27.085 37.222 13.21 6.093 21.658 22.682 18.893 36.864-2.97 14.234 3.482 33.946 14.131 43.725 10.701 9.933 13.619 28.314 6.502 41.011-7.117 12.595-7.117 33.331 0 45.926 7.117 12.749 4.198 31.13-6.502 41.011-10.65 9.882-17.050 29.542-14.131 43.725 2.765 14.234-5.683 30.874-18.893 36.966-13.107 6.093-25.344 22.784-27.085 37.222-1.69 14.336-14.848 27.546-29.235 29.286-14.438 1.69-31.181 13.926-37.222 27.034-6.144 13.21-22.733 21.658-36.966 18.739-14.234-2.816-33.894 3.584-43.725 14.234-9.882 10.752-28.314 13.619-40.96 6.502s-33.382-7.117-45.978 0c-12.646 7.219-31.027 4.352-41.011-6.4-9.779-10.65-29.44-17.050-43.725-14.234-14.182 2.867-30.822-5.581-36.864-18.79-6.093-13.107-22.835-25.344-37.274-26.982-14.438-1.792-27.597-14.95-29.286-29.338-1.741-14.387-13.875-31.13-27.085-37.171-13.107-6.093-21.606-22.733-18.739-36.966 2.816-14.182-3.584-33.894-14.234-43.725s-13.619-28.262-6.502-41.011c7.117-12.595 7.117-33.331 0-45.926-7.117-12.698-4.198-31.078 6.502-41.062 10.701-9.728 17.050-29.44 14.234-43.725-2.867-14.182 5.632-30.822 18.739-36.864 13.21-6.093 25.344-22.886 27.034-37.222 1.741-14.438 14.848-27.648 29.286-29.286s31.181-13.926 37.274-27.085c6.042-13.107 22.682-21.555 36.864-18.739 14.234 2.816 33.946-3.533 43.725-14.234 9.933-10.65 28.314-13.619 41.011-6.502 12.595 7.117 33.331 7.117 45.978 0s31.078-4.147 40.96 6.502c9.882 10.752 29.491 17.050 43.725 14.234 14.285-2.867 30.925 5.581 37.018 18.688zM512 491.571c-96.154 0-174.080 77.978-174.080 174.029 0 96.154 77.926 174.131 174.080 174.131s174.080-77.978 174.080-174.131c0-96.051-77.978-174.029-174.080-174.029zM305.92 388.659l-63.642-360.909 160.154 23.757 142.387-77.107 63.386 359.475c-30.566-8.858-62.822-13.875-96.256-13.875-77.261 0-148.429 25.702-206.029 68.659zM714.803 386.202c-15.923-11.571-32.87-21.811-50.688-30.566l-38.298-216.883 172.493 93.594-83.507 153.856z" /> +<glyph unicode="" glyph-name="price-tag" d="M992.666 952.064c-5.683 16.077-23.245 24.576-39.373 18.995s-24.627-23.296-19.046-39.424c47.565-136.704-46.848-238.797-118.835-293.478l-29.082 41.677c-9.779 13.978-31.642 25.6-48.64 25.805l-163.226-0.717c-16.998 0.307-42.24-7.475-56.166-17.306l-480.973-337.254c-23.296-16.384-28.928-48.486-12.646-71.885l218.573-312.73c16.384-23.296 42.547-20.48 65.894-4.198l480.973 337.306c13.824 9.779 29.798 30.874 35.43 47.002l51.098 161.024c5.632 16.077 2.202 40.602-7.578 54.579l-17.715 25.395c96.666 74.086 197.018 205.005 141.312 365.21zM768.87 472.934c-37.222-26.112-88.627-16.998-114.688 20.275-26.163 37.376-17.050 88.781 20.224 114.995 29.594 20.736 67.994 19.251 95.642-0.87-13.926-8.397-23.501-13.312-25.293-14.080-15.411-7.322-22.016-25.805-14.746-41.216 5.325-11.213 16.435-17.818 28.006-17.818 4.403 0 8.909 1.024 13.158 3.021 9.933 4.71 20.582 10.291 31.693 16.896 4.966-30.413-7.117-62.31-33.997-81.203z" /> +<glyph unicode="" glyph-name="print" d="M76.851 665.6h870.4c29.184 0 24.422 31.13 9.882 36.198-14.592 5.069-176.282 66.202-204.493 66.202h-35.84v153.6h-409.6v-153.6h-35.789c-28.16 0-189.901-61.133-204.442-66.202s-19.302-36.198 9.882-36.198zM972.8 614.4h-921.6c-28.16 0-51.2-23.040-51.2-51.2v-256c0-28.211 23.040-51.2 51.2-51.2h116.89l-45.158-256h778.189l-45.21 256h116.89c28.211 0 51.2 22.989 51.2 51.2v256c0 28.16-22.989 51.2-51.2 51.2zM235.674 102.4l61.338 358.554h430.029l61.389-358.554h-552.755z" /> +<glyph unicode="" glyph-name="progress-empty" d="M921.6 716.8h-819.2c-56.32 0-102.4-46.080-102.4-102.4v-307.2c0-56.32 46.080-102.4 102.4-102.4h819.2c56.32 0 102.4 46.080 102.4 102.4v307.2c0 56.32-46.080 102.4-102.4 102.4zM921.6 307.2h-819.2v307.2h819.2v-307.2z" /> +<glyph unicode="" glyph-name="progress-full" d="M921.6 716.8h-819.2c-56.32 0-102.4-46.080-102.4-102.4v-307.2c0-56.32 46.080-102.4 102.4-102.4h819.2c56.32 0 102.4 46.080 102.4 102.4v307.2c0 56.32-46.080 102.4-102.4 102.4zM921.6 307.2h-819.2v307.2h819.2v-307.2zM358.4 563.2h-204.8v-204.8h204.8v204.8zM614.4 563.2h-204.8v-204.8h204.8v204.8zM870.4 563.2h-204.8v-204.8h204.8v204.8z" /> +<glyph unicode="" glyph-name="progress-one" d="M921.6 716.8h-819.2c-56.32 0-102.4-46.080-102.4-102.4v-307.2c0-56.32 46.080-102.4 102.4-102.4h819.2c56.32 0 102.4 46.080 102.4 102.4v307.2c0 56.32-46.080 102.4-102.4 102.4zM921.6 307.2h-819.2v307.2h819.2v-307.2zM358.4 563.2h-204.8v-204.8h204.8v204.8z" /> +<glyph unicode="" glyph-name="progress-two" d="M921.6 716.8h-819.2c-56.32 0-102.4-46.080-102.4-102.4v-307.2c0-56.32 46.080-102.4 102.4-102.4h819.2c56.32 0 102.4 46.080 102.4 102.4v307.2c0 56.32-46.080 102.4-102.4 102.4zM921.6 307.2h-819.2v307.2h819.2v-307.2zM358.4 563.2h-204.8v-204.8h204.8v204.8zM614.4 563.2h-204.8v-204.8h204.8v204.8z" /> +<glyph unicode="" glyph-name="publish" d="M510.31 553.318l-254.31-246.118h153.6v-307.2h204.8v307.2h153.6l-257.69 246.118zM921.6 921.6h-819.2c-56.32 0-102.4-46.080-102.4-102.4v-614.4c0-56.32 46.080-102.4 102.4-102.4h204.8v102.4h-204.8v460.8h819.2v-460.8h-204.8v-102.4h204.8c56.32 0 102.4 46.080 102.4 102.4v614.4c0 56.32-46.080 102.4-102.4 102.4zM128 755.2c-21.197 0-38.4 17.203-38.4 38.4s17.203 38.4 38.4 38.4c21.197 0 38.4-17.203 38.4-38.4s-17.203-38.4-38.4-38.4zM230.4 755.2c-21.197 0-38.4 17.203-38.4 38.4s17.203 38.4 38.4 38.4c21.197 0 38.4-17.203 38.4-38.4s-17.203-38.4-38.4-38.4zM921.6 768h-614.4v51.2h615.373l-0.973-51.2z" /> +<glyph unicode="" glyph-name="quote" d="M272.128 798.669c-82.432 0-149.299-68.762-149.299-153.6 0-84.787 66.867-153.6 149.299-153.6 149.248 0 49.766-296.909-149.299-296.909v-71.68c355.277-0.051 494.49 675.789 149.299 675.789zM702.208 798.669c-82.381 0-149.248-68.762-149.248-153.6 0-84.787 66.867-153.6 149.248-153.6 149.299 0 49.818-296.909-149.248-296.909v-71.68c355.226-0.051 494.438 675.789 149.248 675.789z" /> +<glyph unicode="" glyph-name="radio" d="M870.4 563.2h-613.325l459.469 269.568-50.944 88.832-576.717-336.435c-23.347-13.619-37.683-38.554-37.683-65.587v-417.178c0-56.576 45.824-102.4 102.4-102.4h716.8c56.576 0 102.4 45.824 102.4 102.4v358.4c0 56.576-45.824 102.4-102.4 102.4zM793.6 102.4c-42.394 0-76.8 34.406-76.8 76.8s34.406 76.8 76.8 76.8 76.8-34.406 76.8-76.8c0-42.394-34.406-76.8-76.8-76.8zM870.4 358.4h-716.8v102.4h716.8v-102.4z" /> +<glyph unicode="" glyph-name="reply-all" d="M369.92 677.53v137.267l-369.92-330.547 369.92-342.579v142.182l-216.32 200.397 216.32 193.28zM625.92 616.806v197.99l-369.92-330.547 369.92-342.579v223.078c168.55 0 270.899-21.606 398.080-246.272 0 0.051-18.842 498.33-398.080 498.33z" /> +<glyph unicode="" glyph-name="reply" d="M972.8 118.528c0 0-113.92 498.278-563.2 498.278v203.981l-358.4-336.538 358.4-342.528v223.078c243.866 0.051 436.019-21.555 563.2-246.272z" /> +<glyph unicode="" glyph-name="retweet" d="M256 307.2v256h102.4l-179.2 204.8-179.2-204.8h102.4v-307.2c0-56.525 45.824-102.4 102.4-102.4h485.478l-135.066 153.6h-299.213zM468.787 614.4l-135.066 153.6h485.478c56.525 0 102.4-45.926 102.4-102.4v-307.2h102.4l-179.2-204.8-179.2 204.8h102.4v256h-299.213z" /> +<glyph unicode="" glyph-name="rocket" d="M610.97 303.667c0 0 361.421 260.813 321.331 559.309-0.87 6.502-3.021 10.906-5.734 13.722-2.765 2.816-7.014 5.018-13.466 5.888-291.686 41.011-546.509-328.806-546.509-328.806-221.082 26.47-205.005-17.613-305.869-259.891-19.302-46.182 11.981-62.106 46.285-49.101 34.304 12.902 109.978 41.523 109.978 41.523l132.608-135.578c0 0-27.955-77.517-40.602-112.589-12.698-35.123 2.816-67.123 48.026-47.411 236.749 103.219 279.859 86.733 253.952 312.934zM662.63 606.566c-30.618 31.386-30.618 82.125 0 113.51 30.618 31.283 80.23 31.283 110.899 0 30.618-31.283 30.618-82.074 0-113.51-30.669-31.283-80.333-31.283-110.899 0z" /> +<glyph unicode="" glyph-name="round-brush" d="M621.312 496.435c-130.97 96.205-343.040-59.904-390.758-270.541-36.762-162.304-207.002-155.648-204.595-177.357 2.355-21.709 382.618-56.474 519.987 57.498 128.307 106.496 218.982 284.877 75.366 390.4zM734.106 895.59l-172.186-263.987c56.422-9.165 186.112-96.512 210.995-159.181l225.075 217.395c-26.931 76.954-176.026 196.813-263.885 205.773z" /> +<glyph unicode="" glyph-name="rss" d="M122.88 849.92v-121.19c362.803 0 656.896-294.195 656.896-656.998h121.293c0 429.773-348.416 778.189-778.189 778.189zM122.88 607.386v-121.293c228.813 0 414.362-185.498 414.362-414.413h121.242c0 295.834-239.821 535.706-535.603 535.706zM239.053 304.179c-64.205 0-116.224-52.122-116.224-116.275s52.019-116.224 116.224-116.224 116.173 52.019 116.173 116.224-51.968 116.275-116.173 116.275z" /> +<glyph unicode="" glyph-name="ruler" d="M729.549 950.374l-707.123-707.226c-29.901-29.901-29.901-78.746 0.102-108.749l163.072-163.174c29.901-29.901 78.899-30.003 108.749-0.102l707.226 707.226c29.901 29.952 29.901 78.899 0 108.8l-163.123 163.226c-30.054 30.003-78.95 29.85-108.902 0zM201.165 188.826l-38.861-38.861-97.075 97.126 38.861 38.861 97.075-97.126zM356.608 188.826l-38.861-38.861-174.848 174.848 38.861 38.912 174.848-174.899zM356.608 344.269l-38.861-38.861-97.178 97.075 38.912 38.912 97.126-97.126zM434.33 421.99l-38.861-38.861-97.075 97.075 38.861 38.912 97.075-97.126zM589.722 421.99l-38.861-38.861-174.797 174.797 38.861 38.861 174.797-174.797zM589.722 577.382l-38.861-38.861-97.075 97.075 38.861 38.861 97.075-97.075zM667.443 655.053l-38.861-38.861-97.126 97.126 38.861 38.861 97.126-97.126zM822.886 655.053l-38.912-38.861-174.797 174.848 38.861 38.912 174.848-174.899zM822.835 810.445l-38.861-38.861-97.075 97.178 38.861 38.81 97.075-97.126z" /> +<glyph unicode="" glyph-name="scissors" d="M429.056 686.592c0 104.346-84.582 188.928-188.928 188.928s-188.928-84.582-188.928-188.928c0-104.346 84.582-188.928 188.928-188.928 49.152 0 93.491 19.251 127.13 49.971l93.542-86.374 0.614-0.461-0.205-0.154-94.003-86.682c-33.587 30.72-77.926 49.971-127.078 49.971-104.346 0-188.928-84.582-188.928-188.928s84.582-188.928 188.928-188.928 188.928 84.582 188.928 188.928c0 15.206-2.253 29.798-5.683 43.93l145.613 101.939 211.302-156.928c113.254-79.309 192.512 33.946 192.512 33.946l-549.427 384.768c3.379 14.131 5.683 28.723 5.683 43.93zM240.128 594.432c-50.893 0-92.16 41.267-92.16 92.16s41.267 92.16 92.16 92.16 92.16-41.267 92.16-92.16-41.267-92.16-92.16-92.16zM240.128 142.848c-50.893 0-92.16 41.267-92.16 92.16s41.267 92.16 92.16 92.16 92.16-41.267 92.16-92.16-41.267-92.16-92.16-92.16zM972.8 663.654c0 0-79.258 113.254-192.512 33.946l-164.096-114.432 120.525-84.378 236.083 164.864z" /> +<glyph unicode="" glyph-name="share-alternitive" d="M460.8 307.2h102.4v460.8h102.4l-153.6 204.8-153.6-204.8h102.4v-460.8zM870.4 614.4h-153.6v-102.4h102.4v-460.8h-614.4v460.8h102.4v102.4h-153.6c-28.314 0-51.2-22.886-51.2-51.2v-563.2c0-28.262 22.886-51.2 51.2-51.2h716.8c28.314 0 51.2 22.938 51.2 51.2v563.2c0 28.262-22.886 51.2-51.2 51.2z" /> +<glyph unicode="" glyph-name="share" d="M768 284.57c-32.41 0-61.645-12.595-83.814-32.87l-304.026 177.306c2.355 9.626 3.84 19.661 3.84 29.901s-1.485 20.224-3.84 29.85l300.8 175.565c22.835-21.35 53.35-34.56 87.040-34.56 70.605 0 128 57.395 128 128s-57.395 128-128 128-128-57.395-128-128c0-10.24 1.485-20.275 3.84-29.85l-300.8-175.565c-22.835 21.299-53.35 34.56-87.040 34.56-70.605 0-128-57.395-128-128s57.395-128 128-128c33.69 0 64.205 13.21 87.040 34.56l304.026-177.306c-2.15-8.96-3.43-18.33-3.43-27.955 0-68.71 55.654-124.365 124.365-124.365s124.365 55.706 124.365 124.365-55.654 124.365-124.365 124.365z" /> +<glyph unicode="" glyph-name="shareable" d="M348.16 460.8c0-90.522 73.37-163.891 163.84-163.891 90.522 0 163.789 73.37 163.789 163.891 0 90.47-73.267 163.84-163.789 163.84s-163.84-73.37-163.84-163.84zM231.885 522.24c28.109 128.819 142.797 225.28 280.115 225.28 79.155 0 150.784-32.102 202.701-83.968 24.013-24.013 62.925-24.013 86.886 0 24.013 24.013 24.013 62.925 0 86.886-74.086 74.086-176.486 119.962-289.587 119.962-183.398 0-338.637-120.525-390.81-286.771h-121.19v-122.829h163.789c51.149 0 63.744 41.626 68.096 61.44zM860.16 460.8c-51.149 0-63.744-41.677-68.045-61.389-28.109-128.819-142.797-225.28-280.115-225.28-79.206 0-150.835 32.102-202.701 84.019-24.013 24.013-62.925 24.013-86.938 0-23.962-24.013-23.962-62.925 0-86.886 74.138-74.189 176.538-120.064 289.638-120.064 183.398 0 338.586 120.627 390.81 286.72h121.19v122.88h-163.84z" /> +<glyph unicode="" glyph-name="shield" d="M901.325 802.202c-236.237-34.202-283.085 25.549-389.325 119.398-106.24-93.85-153.088-153.6-389.325-119.398-125.901-627.098 389.325-802.202 389.325-802.202s515.226 175.104 389.325 802.202zM638.618 291.379l-126.618 66.56-126.566-66.56 24.166 140.954-102.4 99.84 141.517 20.531 63.283 128.256 63.283-128.256 141.517-20.531-102.4-99.789 24.218-141.005z" /> +<glyph unicode="" glyph-name="shop" d="M313.498 601.6l40.499 268.8h-210.637l-88.013-230.4c-2.714-8.192-4.147-16.691-4.147-25.6 0-56.525 58.88-102.4 131.635-102.4 67.072 0 122.522 39.117 130.662 89.6zM512 512c72.704 0 131.635 45.875 131.635 102.4 0 2.099-0.154 4.198-0.256 6.195l-26.061 249.805h-210.637l-26.112-249.6c-0.102-2.099-0.205-4.198-0.205-6.4 0-56.525 58.931-102.4 131.635-102.4zM768 458.445v-202.445h-512v202.138c-22.426-8.090-47.104-12.698-73.165-12.698-9.984 0-19.661 1.178-29.235 2.509v-325.069c0-39.424 32.205-71.68 71.578-71.68h573.542c39.424 0 71.68 32.307 71.68 71.68v325.018c-9.626-1.28-19.251-2.509-29.235-2.509-25.907 0.051-50.688 4.762-73.165 13.056zM968.704 640l-88.115 230.4h-210.586l40.448-268.39c7.885-50.688 63.334-90.010 130.714-90.010 72.704 0 131.635 45.875 131.635 102.4 0 8.909-1.434 17.408-4.096 25.6z" /> +<glyph unicode="" glyph-name="shopping-bag" d="M927.795 805.325c-15.104 13.107-97.587 88.627-112.998 101.939-15.309 13.261-38.707 14.336-56.422 14.336h-492.749c-17.664 0-41.062-1.075-56.422-14.336-15.411-13.312-97.894-88.883-112.998-101.939-15.206-13.107-27.802-32.922-23.757-61.030 4.045-28.211 96.768-699.443 99.174-715.418 2.355-15.923 16.282-28.518 33.178-28.877h614.4c16.896 0.358 30.822 12.954 33.178 28.928 2.406 15.923 95.13 687.206 99.226 715.418 3.994 28.058-8.602 47.872-23.808 60.979zM512 359.782c-166.298 0-201.882 235.315-209.254 283.802h94.054c14.131-70.707 46.285-191.693 115.2-191.693s101.12 120.986 115.2 191.693h94.106c-7.424-48.486-43.008-283.802-209.306-283.802zM162.304 767.693l93.696 102.707h512l93.696-102.707h-699.392z" /> +<glyph unicode="" glyph-name="shopping-basket" d="M942.029 614.4h-256.358l-92.774-92.774c-23.194-23.194-54.067-35.942-86.835-35.942-32.87 0-63.693 12.8-86.938 35.994-23.142 23.142-35.942 53.965-35.994 86.784 0 1.997 0.512 3.942 0.563 5.939h-301.773c-16.998 0-30.72-13.722-30.72-30.72v-122.88h921.6v122.88c0 16.998-13.824 30.72-30.771 30.72zM551.322 563.251l258.816 258.816c12.032 11.981 12.134 31.386 0.102 43.469l-47.104 47.104c-11.981 11.981-31.437 11.93-43.52 0l-258.816-258.867c-24.986-24.986-24.986-65.536 0-90.522 24.986-24.934 65.485-24.986 90.522 0zM195.738 88.525c4.966-20.531 26.368-37.325 47.462-37.325h537.6c21.094 0 42.496 16.794 47.462 37.325l77.978 321.075h-788.48l77.978-321.075z" /> +<glyph unicode="" glyph-name="shopping-cart" d="M665.6 102.4c0-56.525 45.773-102.4 102.4-102.4 56.525 0 102.4 45.875 102.4 102.4 0 56.627-45.875 102.4-102.4 102.4-56.627 0-102.4-45.773-102.4-102.4zM153.6 102.4c0-56.525 45.824-102.4 102.4-102.4 56.474 0 102.4 45.875 102.4 102.4 0 56.627-45.926 102.4-102.4 102.4-56.576 0-102.4-45.773-102.4-102.4zM335.206 349.594l566.682 161.894c10.803 3.123 19.712 14.797 19.712 26.112v281.6h-716.8v81.92c0 11.264-9.267 20.48-20.429 20.48h-163.942c-11.213 0-20.429-9.216-20.429-20.48v-81.92h102.4l97.792-458.598 4.608-48.282v-84.429c0-11.213 9.216-20.48 20.48-20.48h675.84c11.264 0 20.48 9.318 20.48 20.48v79.309h-575.898c-58.88 0-60.109 28.211-10.496 42.394z" /> +<glyph unicode="" glyph-name="shuffle" d="M772.762 630.067h47.104v-146.534l204.134 206.029-204.186 206.080v-122.214h-47.104c-189.133 0-295.731-140.186-389.837-263.782-84.582-111.206-157.696-207.309-275.763-207.309h-107.11v-143.309h107.162c189.133 0 295.731 140.083 389.837 263.782 84.582 111.258 157.696 207.258 275.763 207.258zM276.992 539.75c8.090 10.394 16.179 21.094 24.422 31.898 19.968 26.317 41.165 54.016 64.102 81.715-67.686 63.181-149.248 109.773-258.355 109.773h-107.162v-143.309h107.162c67.942 0 120.934-31.898 169.83-80.077zM819.814 292.147h-47.104c-72.038 0-127.334 35.891-178.739 88.986-5.12-6.707-10.291-13.517-15.514-20.326-22.579-29.696-46.848-61.491-73.677-93.082 69.427-67.789 153.6-118.989 267.878-118.989h47.104v-122.778l204.237 206.080-204.186 206.080v-145.971z" /> +<glyph unicode="" glyph-name="signal" d="M512 256c-56.013 0-101.427-45.773-101.427-102.4 0-56.525 45.414-102.4 101.427-102.4s101.376 45.875 101.376 102.4c0 56.576-45.363 102.4-101.376 102.4zM296.96 370.79l71.68-72.397c79.155 79.974 207.565 79.974 286.771 0l71.629 72.397c-118.733 119.962-311.347 119.962-430.080 0zM153.6 515.686l71.68-72.397c158.31 159.898 415.027 159.898 573.389 0l71.731 72.397c-197.888 199.885-518.912 199.885-716.8 0zM10.189 660.48l71.68-72.397c237.517 239.923 622.643 239.923 860.211 0l71.68 72.397c-277.094 279.91-726.426 279.91-1003.571 0z" /> +<glyph unicode="" glyph-name="sound-mix" d="M256 890.88c0 28.314-22.938 30.72-51.2 30.72-28.314 0-51.2-2.406-51.2-30.72v-430.080h102.4v430.080zM153.6 30.72c0-28.211 22.886-30.72 51.2-30.72 28.262 0 51.2 2.509 51.2 30.72v174.080h-102.4v-174.080zM327.629 409.6h-245.76c-28.314 0-30.669-22.938-30.669-51.2v-51.2c0-28.314 2.355-51.2 30.669-51.2h245.811c28.16 0 30.72 22.886 30.72 51.2v51.2c0 28.262-2.56 51.2-30.771 51.2zM942.029 358.4h-245.811c-28.262 0-30.618-22.938-30.618-51.2v-51.2c0-28.314 2.355-51.2 30.669-51.2h245.811c28.16 0 30.72 22.886 30.72 51.2v51.2c0 28.262-2.56 51.2-30.771 51.2zM665.6 614.4c0 28.262-2.56 51.2-30.771 51.2h-245.76c-28.314 0-30.669-22.938-30.669-51.2v-51.2c0-28.314 2.355-51.2 30.669-51.2h245.811c28.16 0 30.72 22.886 30.72 51.2v51.2zM563.2 890.88c0 28.314-22.938 30.72-51.2 30.72-28.314 0-51.2-2.406-51.2-30.72v-174.080h102.4v174.080zM460.8 30.72c0-28.211 22.886-30.72 51.2-30.72 28.262 0 51.2 2.509 51.2 30.72v430.080h-102.4v-430.080zM870.4 890.88c0 28.314-22.938 30.72-51.2 30.72-28.314 0-51.2-2.406-51.2-30.72v-481.28h102.4v481.28zM768 30.72c0-28.211 22.886-30.72 51.2-30.72 28.262 0 51.2 2.509 51.2 30.72v122.88h-102.4v-122.88z" /> +<glyph unicode="" glyph-name="sports-club" d="M307.2 281.6l204.8-128 204.8 128v435.2h-409.6v-435.2zM230.4 460.8c0 56.576-45.875 102.4-102.4 102.4s-102.4-45.824-102.4-102.4c0-56.576 45.875-102.4 102.4-102.4s102.4 45.824 102.4 102.4zM896 563.2c-56.525 0-102.4-45.824-102.4-102.4s45.875-102.4 102.4-102.4 102.4 45.824 102.4 102.4c0 56.576-45.875 102.4-102.4 102.4zM229.632 655.411c64.256 92.928 169.83 148.429 282.368 148.429 110.49 0 214.938-54.067 279.347-144.538 22.989-32.205 67.738-39.731 99.942-16.845 32.256 22.938 39.782 67.738 16.845 99.994-91.238 128.205-239.36 204.749-396.134 204.749-159.59 0-309.248-78.592-400.23-210.278-22.477-32.563-14.336-77.21 18.176-99.738 32.614-22.426 77.21-14.285 99.686 18.227zM791.347 262.298c-64.41-90.522-168.858-144.538-279.347-144.538-112.538 0-218.112 55.501-282.368 148.429-22.477 32.563-67.123 40.653-99.686 18.227-32.563-22.528-40.704-67.174-18.176-99.738 90.982-131.686 240.64-210.278 400.23-210.278 156.774 0 304.896 76.544 396.134 204.749 22.938 32.256 15.411 77.005-16.845 99.994-32.205 22.886-76.954 15.36-99.942-16.845z" /> +<glyph unicode="" glyph-name="spreadsheet" d="M819.2 921.6h-614.4c-28.314 0-51.2-22.886-51.2-51.2v-819.2c0-28.262 22.886-51.2 51.2-51.2h614.4c28.314 0 51.2 22.938 51.2 51.2v819.2c0 28.262-22.886 51.2-51.2 51.2zM768 563.2h-307.2v-460.8h-51.2v460.8h-153.6v51.2h153.6v204.8h51.2v-204.8h307.2v-51.2z" /> +<glyph unicode="" glyph-name="squared-cross" d="M819.2 870.4h-614.4c-56.32 0-102.4-46.080-102.4-102.4v-614.4c0-56.32 46.080-102.4 102.4-102.4h614.4c56.32 0 102.4 46.080 102.4 102.4v614.4c0 56.32-46.080 102.4-102.4 102.4zM668.723 215.603l-156.723 156.672-156.723-156.672-88.525 88.474 156.723 156.723-156.672 156.723 88.525 88.525 156.672-156.723 156.621 156.723 88.525-88.525-156.621-156.723 156.672-156.723-88.474-88.474z" /> +<glyph unicode="" glyph-name="squared-minus" d="M819.2 870.4h-614.4c-56.32 0-102.4-46.080-102.4-102.4v-614.4c0-56.32 46.080-102.4 102.4-102.4h614.4c56.32 0 102.4 46.080 102.4 102.4v614.4c0 56.32-46.080 102.4-102.4 102.4zM768 409.6h-512v102.4h512v-102.4z" /> +<glyph unicode="" glyph-name="squared-plus" d="M819.2 870.4h-614.4c-56.32 0-102.4-46.080-102.4-102.4v-614.4c0-56.32 46.080-102.4 102.4-102.4h614.4c56.32 0 102.4 46.080 102.4 102.4v614.4c0 56.32-46.080 102.4-102.4 102.4zM768 409.6h-204.8v-204.8h-102.4v204.8h-204.8v102.4h204.8v204.8h102.4v-204.8h204.8v-102.4z" /> +<glyph unicode="" glyph-name="star-outlined" d="M962.56 562.074h-328.346l-122.214 344.166-122.317-344.166h-328.294l267.878-202.086-95.795-354.765 278.528 212.685 278.426-212.685-95.693 354.765 267.827 202.086zM512 318.31l-154.317-128 63.642 182.374-145.971 117.76 180.326-5.171 56.32 206.848 56.269-206.848 180.275 5.171-145.971-117.76 63.642-182.374-154.214 128z" /> +<glyph unicode="" glyph-name="star" d="M512 906.24l122.266-344.166h328.294l-267.878-202.138 95.795-354.714-278.477 212.685-278.426-212.685 95.744 354.714-267.93 202.138h328.294l122.317 344.166z" /> +<glyph unicode="" glyph-name="stopwatch" d="M377.651 627.456c-22.886-14.080 61.286-217.19 81.818-250.266 17.92-29.133 55.962-37.99 84.89-20.173 29.082 18.022 38.144 56.013 20.224 84.992-20.326 33.178-164.096 199.578-186.931 185.446zM360.499 849.818c47.514 16.538 98.406 25.702 151.501 25.702s103.987-9.165 151.501-25.702c16.845-5.837 39.168 5.888 29.286 31.283-7.219 18.432-14.182 36.454-16.998 43.776-6.707 17.357-30.72 31.693-41.165 34.048-39.526 8.909-80.486 13.875-122.624 13.875s-83.098-4.966-122.675-13.875c-10.445-2.355-34.406-16.691-41.114-34.048-2.816-7.322-9.83-25.344-16.998-43.776-9.882-25.395 12.442-37.171 29.286-31.283zM977.818 809.677c-9.83 11.776-20.275 23.296-31.386 34.406-11.059 11.11-22.579 21.504-34.304 31.386-7.834 6.605-30.874 11.981-45.466-2.611-14.541-14.592-84.378-84.326-84.378-84.326 20.582-14.746 40.602-30.976 59.136-49.459s34.662-38.502 49.459-59.136c0 0 69.786 69.734 84.326 84.326 14.643 14.643 9.267 37.632 2.611 45.414zM512 824.32c-229.12 0-414.771-185.651-414.771-414.72 0-229.12 185.651-414.771 414.771-414.771 229.018 0 414.72 185.651 414.72 414.771 0 229.018-185.702 414.72-414.72 414.72zM512 97.229c-172.442 0-312.32 139.827-312.32 312.32s139.827 312.32 312.32 312.32c172.493 0 312.371-139.827 312.371-312.32 0-172.442-139.878-312.32-312.371-312.32z" /> +<glyph unicode="" glyph-name="suitcase" d="M921.6 768h-51.2v-768h51.2c56.32 0 102.4 46.080 102.4 102.4v563.2c0 56.32-46.080 102.4-102.4 102.4zM0 665.6v-563.2c0-56.32 46.029-102.4 102.4-102.4h51.2v768h-51.2c-56.371 0-102.4-46.080-102.4-102.4zM691.2 875.213c-34.867 16.179-96.717 46.387-180.173 46.387-83.61 0-143.36-30.208-178.227-46.387v-107.213h-128v-768h614.4v768h-128v107.213zM614.4 768h-204.8v68.403c27.341 11.776 55.194 23.808 101.427 23.808 46.182 0 76.083-11.981 103.373-23.808v-68.403z" /> +<glyph unicode="" glyph-name="swap" d="M716.8 716.8h-512v102.4l-204.8-179.2 204.8-179.2v102.4h512v153.6zM1024 281.6l-204.8 179.2v-102.4h-512v-153.6h512v-102.4l204.8 179.2z" /> +<glyph unicode="" glyph-name="sweden" d="M921.6 768h-460.8v-256h512v204.8c0 28.314-22.886 51.2-51.2 51.2zM51.2 204.8c0-28.314 12.698-51.2 40.96-51.2h266.24v256h-307.2v-204.8zM460.8 153.6h460.8c28.314 0 51.2 22.886 51.2 51.2v204.8h-512v-256zM51.2 716.8v-204.8h307.2v256h-266.24c-28.262 0-40.96-22.886-40.96-51.2z" /> +<glyph unicode="" glyph-name="switch" d="M665.6 819.2h-307.2c-197.939 0-358.4-160.461-358.4-358.4s160.461-358.4 358.4-358.4h307.2c197.939 0 358.4 160.461 358.4 358.4s-160.461 358.4-358.4 358.4zM665.6 204.8c-141.363 0-256 114.637-256 256s114.637 256 256 256 256-114.637 256-256-114.637-256-256-256z" /> +<glyph unicode="" glyph-name="tablet" d="M819.2 972.8h-614.4c-56.32 0-102.4-46.029-102.4-102.4v-819.2c0-56.32 46.080-102.4 102.4-102.4h614.4c56.371 0 102.4 46.080 102.4 102.4v819.2c0 56.371-46.029 102.4-102.4 102.4zM512 0c-35.328 0-64 22.886-64 51.2s28.672 51.2 64 51.2c35.277 0 64-22.886 64-51.2s-28.723-51.2-64-51.2zM819.2 153.6h-614.4v716.8h614.4v-716.8z" /> +<glyph unicode="" glyph-name="tag" d="M955.494 690.125l-687.36-690.125 36.198 254.31-253.184-36.301 687.36 690.125c20.019 20.070 58.010 15.77 72.294 0l144.691-145.357c25.6-24.218 20.019-52.531 0-72.653z" /> +<glyph unicode="" glyph-name="text-document-inverted" d="M819.2 921.6h-614.4c-28.314 0-51.2-22.886-51.2-51.2v-819.2c0-28.262 22.886-51.2 51.2-51.2h614.4c28.314 0 51.2 22.938 51.2 51.2v819.2c0 28.262-22.886 51.2-51.2 51.2zM665.6 204.8h-307.2v102.4h307.2v-102.4zM665.6 409.6h-307.2v102.4h307.2v-102.4zM665.6 614.4h-307.2v102.4h307.2v-102.4z" /> +<glyph unicode="" glyph-name="text-document" d="M819.2 921.6h-614.4c-28.314 0-51.2-22.886-51.2-51.2v-819.2c0-28.262 22.886-51.2 51.2-51.2h614.4c28.314 0 51.2 22.938 51.2 51.2v819.2c0 28.262-22.886 51.2-51.2 51.2zM768 102.4h-512v716.8h512v-716.8zM665.6 716.8h-307.2v-102.4h307.2v102.4zM665.6 307.2h-307.2v-102.4h307.2v102.4zM665.6 512h-307.2v-102.4h307.2v102.4z" /> +<glyph unicode="" glyph-name="text" d="M793.6 409.6h-563.2c-14.080 0-25.6-11.52-25.6-25.6v-51.2c0-14.131 11.52-25.6 25.6-25.6h563.2c14.131 0 25.6 11.469 25.6 25.6v51.2c0 14.080-11.469 25.6-25.6 25.6zM793.6 614.4h-563.2c-14.080 0-25.6-11.52-25.6-25.6v-51.2c0-14.131 11.52-25.6 25.6-25.6h563.2c14.131 0 25.6 11.469 25.6 25.6v51.2c0 14.080-11.469 25.6-25.6 25.6zM537.6 204.8h-307.2c-14.080 0-25.6-11.52-25.6-25.6v-51.2c0-14.131 11.52-25.6 25.6-25.6h307.2c14.131 0 25.6 11.469 25.6 25.6v51.2c0 14.080-11.469 25.6-25.6 25.6zM793.6 819.2h-563.2c-14.080 0-25.6-11.52-25.6-25.6v-51.2c0-14.131 11.52-25.6 25.6-25.6h563.2c14.131 0 25.6 11.469 25.6 25.6v51.2c0 14.080-11.469 25.6-25.6 25.6z" /> +<glyph unicode="" glyph-name="thermometer" d="M665.6 454.502v467.098c0 28.314-22.886 51.2-51.2 51.2h-215.091c-28.262 0-40.909-22.886-40.909-51.2v-467.098c-73.933-49.613-122.88-133.53-122.88-229.222 0-152.678 123.802-276.48 276.48-276.48s276.48 123.802 276.48 276.48c0 95.693-48.947 179.61-122.88 229.222zM512 56.32c-93.338 0-168.96 75.622-168.96 168.96 0 75.366 49.664 138.394 117.76 160.205v382.515h102.4v-382.515c68.096-21.811 117.76-84.838 117.76-160.205 0-93.286-75.622-168.96-168.96-168.96z" /> +<glyph unicode="" glyph-name="thumbs-down" d="M325.222 325.734c6.81-18.227-181.197-186.061-71.526-322.099 25.651-31.795 112.691 152.32 236.288 235.622 68.147 46.029 226.816 143.923 226.816 198.042v350.31c0 65.075-251.597 133.99-442.778 133.99-70.093 0-171.622-439.091-171.622-508.877 0-69.99 216.115-68.762 222.822-86.989zM768 330.598c33.69 0 153.6 20.48 153.6 159.898v248.218c0 139.315-119.91 154.675-153.6 154.675-33.638 0 51.2-29.286 51.2-115.712v-326.298c0-90.522-84.838-120.781-51.2-120.781z" /> +<glyph unicode="" glyph-name="thumbs-up" d="M698.778 595.866c-6.81 18.176 181.197 186.061 71.578 322.099-25.651 31.795-112.691-152.32-236.288-235.674-68.198-45.978-226.867-143.872-226.867-197.99v-350.31c0-65.075 251.597-133.99 442.778-133.99 70.093 0 171.622 439.091 171.622 508.826 0 70.042-216.115 68.813-222.822 87.040zM256 591.002c-33.69 0-153.6-20.48-153.6-159.898v-248.218c0-139.315 119.91-154.675 153.6-154.675 33.638 0-51.2 29.286-51.2 115.712v326.298c0 90.522 84.838 120.781 51.2 120.781z" /> +<glyph unicode="" glyph-name="thunder-cloud" d="M778.906 632.781c-14.131 0-27.955-1.178-41.421-3.379-33.587 109.824-137.677 189.798-260.864 189.798-150.477 0-272.384-119.194-272.384-266.189 0-13.21 1.024-26.112 2.918-38.707-7.27 0.819-14.541 1.382-21.965 1.382-102.298 0-185.19-81.101-185.19-180.992 0-99.994 82.893-181.094 185.19-181.094h593.715c135.322 0 245.094 107.315 245.094 239.616 0 132.403-109.773 239.565-245.094 239.565zM582.195 412.109c-25.293-35.994-133.837-147.917-138.445-152.576-5.325-6.605-20.019-17.613-33.946-8.499-4.045 2.611-8.806 7.782-8.806 18.125 0 9.882 4.506 20.019 5.018 21.094l52.89 117.094c-9.882 3.994-26.982 10.803-40.192 16.589l-3.482 1.485c-13.414 5.683-30.106 12.8-30.106 31.078 0 8.806 4.147 19.098 12.749 31.181 25.344 36.096 133.837 147.917 138.496 152.678 5.274 6.502 19.968 17.51 33.946 8.499 3.994-2.611 8.755-7.885 8.755-18.125 0-9.882-4.506-20.019-5.018-21.197l-52.941-116.992c9.984-3.994 27.034-10.906 40.294-16.589l3.482-1.485c13.414-5.683 30.106-12.8 30.106-31.181 0-8.806-4.198-18.995-12.8-31.181z" /> +<glyph unicode="" glyph-name="ticket" d="M251.187 381.901l181.811-181.914 333.722 333.722-181.914 181.811-333.619-333.619zM978.125 631.603l-77.363 77.414c-14.797-7.987-31.642-12.595-49.613-12.595-57.242 0-103.629 46.387-103.629 103.578 0 18.022 4.557 34.918 12.595 49.613l-77.363 77.414c-20.173 20.122-53.146 20.122-73.318 0l-563.712-563.712c-20.122-20.070-20.122-53.094 0-73.318l77.414-77.312c14.797 7.987 31.642 12.595 49.664 12.595 57.19 0 103.578-46.387 103.578-103.68 0-17.92-4.557-34.816-12.595-49.613l77.414-77.312c20.173-20.173 53.094-20.173 73.318 0l563.61 563.61c20.173 20.224 20.173 53.197 0 73.318zM432.998 116.787l-265.011 265.114 416.87 416.819 265.011-265.011-416.87-416.922z" /> +<glyph unicode="" glyph-name="time-slot" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52c271.411 0 491.52 220.058 491.52 491.571 0 271.411-220.109 491.469-491.52 491.469zM512 71.731c-214.886 0-389.12 174.182-389.12 389.12 0 214.886 174.182 389.12 389.12 389.12v0-389.171l347.75 173.875c26.266-52.378 41.37-111.258 41.37-173.875 0-214.886-174.234-389.069-389.12-389.069z" /> +<glyph unicode="" glyph-name="tools" d="M160.512 620.032c47.77 37.12 87.398 11.52 140.288-49.715 5.939-6.912 13.926 1.178 18.483 5.12 4.506 3.994 74.291 66.816 77.722 69.683 3.379 3.021 7.475 8.653 2.099 14.95-5.478 6.298-25.293 32-38.042 48.691-92.57 121.088 253.235 203.213 200.141 204.493-27.034 0.717-135.475 1.997-151.706 0.205-65.69-6.912-148.173-68.301-189.696-96.922-54.323-37.171-74.598-58.982-77.926-62.003-15.36-13.414-2.458-44.39-30.31-68.813-29.44-25.754-47.821-6.246-64.87-21.197-8.448-7.475-32.102-25.19-38.861-31.078-6.81-5.99-8.038-16.077-1.075-24.115 0 0 64.717-71.475 70.144-77.824 5.376-6.246 20.019-11.674 29.030-3.635 9.062 7.987 32.358 28.314 36.25 31.898 3.994 3.379-2.56 44.083 18.33 60.262zM452.762 593.562c-6.144 7.117-13.773 7.322-20.326 1.485l-73.421-64.102c-5.786-5.12-6.605-14.49-1.382-20.48l424.653-483.277c9.933-11.418 27.136-12.595 38.451-2.714l49.664 41.626c11.366 9.984 12.544 27.29 2.662 38.81l-420.301 488.653zM1018.982 799.232c-3.789 25.293-16.896 20.019-23.706 9.318-6.81-10.803-36.915-56.422-49.306-77.107-12.288-20.48-42.598-60.979-99.021-20.992-58.778 41.523-38.349 70.502-28.109 90.010 10.291 19.61 41.882 74.598 46.438 81.408 4.557 6.912-0.768 26.982-18.995 18.586-18.278-8.397-129.178-52.48-144.538-115.712-15.718-64.307 13.158-121.805-43.52-178.893l-68.762-71.68 69.069-80.179 84.685 80.384c20.173 20.275 63.283 39.987 102.298 31.078 83.61-18.893 129.229 12.493 156.723 64.41 24.678 46.387 20.582 144.077 16.742 169.37zM140.237 99.686c-10.65-10.701-10.65-28.109 0-38.81l48.691-47.616c10.65-10.701 27.546-6.195 38.195 4.506l251.238 246.989-76.954 87.757-261.171-252.826z" /> +<glyph unicode="" glyph-name="traffic-cone" d="M512 354.406c122.368 0 224.87 41.574 231.066 95.898-18.227 50.995-38.093 106.701-57.6 161.382-13.517-38.963-88.32-66.611-173.466-66.611s-159.949 27.648-173.466 66.611c-19.507-54.682-39.373-110.387-57.549-161.382 6.195-54.323 108.646-95.898 231.014-95.898zM512 697.702c57.549 0 110.95 17.818 126.618 45.517-21.555 60.518-40.038 112.486-51.763 145.203-7.782 21.862-43.059 33.178-74.854 33.178s-67.072-11.315-74.854-33.178c-11.674-32.717-30.208-84.685-51.763-145.203 15.667-27.699 69.12-45.517 126.618-45.517zM961.536 303.821l-192.256 77.517 22.17-61.798c-1.126-65.485-128.205-117.709-279.45-117.709-151.194 0-278.374 52.173-279.45 117.709l22.17 61.798-192.256-77.517c-53.914-21.709-56.218-61.901-5.018-89.293l361.574-193.894c51.098-27.392 134.81-27.392 185.958 0l361.626 193.894c51.149 27.392 48.845 67.584-5.069 89.293z" /> +<glyph unicode="" glyph-name="tree" d="M1024 460.8c0 69.683-38.81 133.939-103.987 185.446-0.102 0.051-0.205 0.051-0.256 0.154-18.534 182.886-193.894 326.4-407.757 326.4s-389.222-143.514-407.757-326.4c-0.051-0.102-0.154-0.102-0.256-0.154-65.178-51.507-103.987-115.763-103.987-185.446 0-159.334 202.086-290.253 460.8-305.664 0-17.306 0-34.97 0-52.736 0-51.2-93.235-97.843-93.235-97.843-5.069-2.509-7.578-8.858-5.581-14.182 0 0 15.616-41.574 47.616-41.574s57.549 25.6 121.549 25.6 124.877-22.118 124.877-22.118c5.222-1.946 12.851-0.256 16.845 3.738l36.71 36.71c3.994 3.994 2.97 8.858-2.355 10.854 0 0-92.774 34.816-92.774 98.816 0 15.974 0 36.147 0 57.395 233.677 28.416 409.549 152.371 409.549 301.005zM102.4 460.8c0 52.173 39.322 99.584 103.526 135.731-0.512 5.939-1.126 11.878-1.126 17.869 0 141.414 137.574 256 307.2 256s307.2-114.586 307.2-256c0-5.99-0.614-11.93-1.075-17.869 64.154-36.147 103.475-83.558 103.475-135.731 0-95.437-130.611-175.309-307.149-198.093 0 20.531 0 34.202 0 34.202 0 5.632 3.328 13.414 7.424 17.254l93.85 88.371c4.096 3.891 7.475 11.622 7.475 17.254v43.571c0 5.632-3.994 7.936-8.806 5.069l-91.085-53.606c-4.915-2.867-8.858-0.614-8.858 5.069v184.269c0 5.632-4.352 8.806-9.728 7.014l-134.195-44.749c-5.325-1.792-9.677-7.834-9.677-13.466v-133.12c0-5.632-4.045-8.090-9.062-5.478l-103.526 54.477c-4.966 2.611-12.288 1.536-16.282-2.458l-17.51-17.51c-3.994-3.994-3.738-10.291 0.461-13.978l138.24-120.883c4.25-3.738 7.68-11.366 7.68-16.998 0 0 0-15.258 0-39.168-201.984 12.544-358.451 98.509-358.451 202.957z" /> +<glyph unicode="" glyph-name="trophy" d="M572.416 237.773c0 74.291 56.32 115.405 148.173 176.23 112.333 74.547 252.211 167.168 252.211 387.072 0 19.814-16.23 35.789-36.301 35.789h-175.616c-24.781 45.875-98.765 94.976-248.883 94.976-150.221 0-224.102-49.101-248.934-94.976h-175.667c-20.019 0-36.198-16.026-36.198-35.789 0-219.904 139.776-312.525 252.211-387.021 91.853-60.826 148.173-101.939 148.173-176.23v-67.123c-96.461-10.701-167.373-46.387-167.373-88.883 0-50.893 101.99-92.109 227.789-92.109s227.789 41.216 227.789 92.109c0 42.496-70.912 78.182-167.373 88.883v67.072zM714.598 496.64c28.979 61.389 52.019 144.691 55.706 268.595h128.512c-12.288-138.291-95.334-208.077-184.218-268.595zM512 869.069c139.878 0.102 194.509-57.088 194.458-78.285 0-21.402-54.579-78.49-194.458-78.592-139.878 0.051-194.509 57.139-194.509 78.541-0.051 21.197 54.63 78.438 194.509 78.336zM125.184 765.235h128.461c3.738-123.904 26.675-207.206 55.757-268.595-88.883 60.518-171.981 130.304-184.218 268.595z" /> +<glyph unicode="" glyph-name="tv" d="M921.6 921.6h-819.2c-56.371 0-102.4-46.080-102.4-102.4v-563.2c0-56.32 45.158-111.514 100.403-122.522l223.846-44.8c0 0-192.666-88.678-68.25-88.678h512c124.416 0-68.301 88.678-68.301 88.678l223.898 44.8c55.194 11.008 100.403 66.202 100.403 122.522v563.2c0 56.32-46.080 102.4-102.4 102.4zM921.6 256h-819.2v563.2h819.2v-563.2z" /> +<glyph unicode="" glyph-name="typing" d="M819.2 768h-614.4c-56.371 0-102.4-46.080-102.4-102.4v-358.4c0-56.32 46.029-102.4 102.4-102.4h204.8l204.8-153.6v153.6h204.8c56.32 0 102.4 46.080 102.4 102.4v358.4c0 56.32-46.080 102.4-102.4 102.4zM307.2 430.080c-31.078 0-56.32 25.19-56.32 56.32s25.19 56.32 56.32 56.32 56.32-25.19 56.32-56.32c0-31.078-25.242-56.32-56.32-56.32zM512 430.080c-31.078 0-56.32 25.19-56.32 56.32s25.19 56.32 56.32 56.32 56.32-25.19 56.32-56.32c0-31.078-25.242-56.32-56.32-56.32zM716.8 430.080c-31.078 0-56.32 25.19-56.32 56.32s25.19 56.32 56.32 56.32 56.32-25.19 56.32-56.32c0-31.078-25.242-56.32-56.32-56.32z" /> +<glyph unicode="" glyph-name="unread" d="M870.4 819.2c-56.525 0-102.4-45.824-102.4-102.4s45.875-102.4 102.4-102.4 102.4 45.824 102.4 102.4c0 56.576-45.875 102.4-102.4 102.4zM640 768h-563.2c-14.131 0-25.6-11.469-25.6-25.6v-51.2c0-14.131 11.469-25.6 25.6-25.6h563.2c14.131 0 25.6 11.469 25.6 25.6v51.2c0 14.131-11.469 25.6-25.6 25.6zM640 512h-563.2c-14.131 0-25.6-11.469-25.6-25.6v-51.2c0-14.131 11.469-25.6 25.6-25.6h563.2c14.131 0 25.6 11.469 25.6 25.6v51.2c0 14.131-11.469 25.6-25.6 25.6zM640 256h-563.2c-14.131 0-25.6-11.469-25.6-25.6v-51.2c0-14.131 11.469-25.6 25.6-25.6h563.2c14.131 0 25.6 11.469 25.6 25.6v51.2c0 14.131-11.469 25.6-25.6 25.6z" /> +<glyph unicode="" glyph-name="untag" d="M51.2 218.010l253.184 36.301-36.147-254.31 305.254 306.432-208.333 226.765-313.958-315.187zM955.597 690.125c20.019 20.122 25.6 48.384 0 72.653l-144.691 145.357c-14.285 15.77-52.275 20.070-72.294 0l-192.819-193.536 208.282-226.765 201.523 202.291zM957.747 189.798l-716.851 716.8c-20.019 20.019-52.378 20.019-72.397 0s-20.019-52.378 0-72.397l716.851-716.8c10.035-10.035 23.142-15.002 36.198-15.002 13.107 0 26.214 5.018 36.198 15.002 20.019 19.968 20.019 52.378 0 72.397z" /> +<glyph unicode="" glyph-name="user" d="M395.52 862.925c-52.019-38.707-65.997-99.994-63.437-132.608 3.277-39.885 11.366-91.802 11.366-91.802s-16.026-8.704-16.026-43.725c5.581-87.91 34.97-49.971 41.011-88.525 14.541-92.877 47.77-76.339 47.77-127.027 0-84.429-34.816-123.904-143.514-170.701-109.056-47.002-221.491-106.138-221.491-208.538v-51.2h921.6v51.2c0 102.4-112.486 161.536-221.594 208.486-108.698 46.797-143.411 86.221-143.411 170.701 0 50.688 33.126 34.15 47.718 127.027 6.093 38.554 35.43 0.614 41.114 88.525 0 35.021-16.077 43.725-16.077 43.725s8.090 51.917 11.315 91.802c3.328 41.83-20.378 131.123-117.76 158.515-17.050 17.408-28.57 45.107 23.859 72.909-114.688 5.376-141.363-54.63-202.445-98.765z" /> +<glyph unicode="" glyph-name="users" d="M818.637-6.605c0 114.995-111.974 173.517-221.030 220.518-108.698 46.797-143.411 86.221-143.411 170.701 0 50.637 33.178 34.15 47.718 127.027 6.144 38.502 35.43 0.614 41.062 88.525 0 35.021-16.026 43.725-16.026 43.725s8.141 51.866 11.315 91.802c3.277 41.83-20.378 131.072-117.811 158.464-16.998 17.459-28.518 45.158 23.91 72.909-114.688 5.325-141.363-54.682-202.445-98.816-51.968-38.707-65.997-99.994-63.488-132.608 3.328-39.936 11.418-91.802 11.418-91.802s-16.077-8.704-16.077-43.725c5.632-87.962 35.021-50.022 41.114-88.525 14.541-92.877 47.77-76.39 47.77-127.027 0-84.48-10.854-113.152-119.603-159.949-109.107-46.95-143.053-122.214-142.49-231.219 0.154-32.614-0.563-44.595-0.563-44.595h819.2c0 0-0.563 11.981-0.563 44.595zM948.634 288.512c-58.112 23.398-82.176 51.302-82.176 105.779 0 32.819 21.402 22.118 30.822 82.074 3.942 24.781 22.886 0.41 26.522 57.088 0 22.579-10.342 28.211-10.342 28.211s5.274 33.587 7.322 59.341c2.56 32.102-18.637 115.046-116.122 115.046-97.434 0-118.682-82.944-116.173-115.046 2.15-25.702 7.373-59.341 7.373-59.341s-10.342-5.581-10.342-28.211c3.635-56.678 22.579-32.307 26.522-57.088 9.421-60.006 30.822-49.306 30.822-82.074 0-54.477-22.426-79.974-92.621-110.182-3.533-1.485-6.144-3.482-9.37-5.222 83.968-36.454 216.371-99.379 247.706-227.686h135.424c0 0 0 97.587 0 118.682 0 51.2-13.978 93.901-75.366 118.63z" /> +<glyph unicode="" glyph-name="v-card" d="M972.8 819.2h-921.6c-28.314 0-51.2-22.886-51.2-51.2v-614.4c0-28.262 22.886-51.2 51.2-51.2h921.6c28.314 0 51.2 22.938 51.2 51.2v614.4c0 28.262-22.886 51.2-51.2 51.2zM665.6 614.4h204.8v-51.2h-204.8v51.2zM563.2 214.886c-6.605 5.222-15.002 10.291-27.085 15.514-60.416 26.010-151.603 64.512-151.603 111.411 0 28.211 18.381 18.995 26.522 70.605 3.379 21.402 19.712 0.358 22.784 49.203 0 19.456-8.909 24.32-8.909 24.32s4.506 28.774 6.298 50.995c1.843 23.194-11.315 92.16-65.382 107.366-9.523 9.626-15.923 5.683 13.21 21.094-63.693 3.021-78.541-30.31-112.435-54.835-28.877-21.504-36.71-55.552-35.277-73.677 1.894-22.17 6.4-50.995 6.4-50.995s-8.96-4.813-8.96-24.269c3.123-48.845 19.456-27.802 22.784-49.203 8.090-51.61 26.573-42.394 26.573-70.605 0-46.899-91.187-85.402-151.603-111.411-10.394-4.506-17.869-8.858-24.115-13.312v499.712h460.8v-501.914zM921.6 409.6h-256v51.2h256v-51.2z" /> +<glyph unicode="" glyph-name="video" d="M1024 716.8v61.491c0 22.63-18.278 40.909-40.909 40.909h-942.080c-22.682 0-41.011-18.278-41.011-40.909v-61.491h102.4v-102.4h-102.4v-102.4h102.4v-102.4h-102.4v-102.4h102.4v-102.4h-102.4v-61.389c0-22.63 18.33-41.011 41.011-41.011h942.080c22.63 0 40.909 18.381 40.909 41.011v61.389h-102.4v102.4h102.4v102.4h-102.4v102.4h102.4v102.4h-102.4v102.4h102.4zM409.6 307.2v307.2l256-153.6-256-153.6z" /> +<glyph unicode="" glyph-name="vinyl" d="M511.949 931.84c-260.147 0-470.989-210.893-470.989-471.091 0-260.096 210.842-470.989 470.989-470.989s471.040 210.893 471.040 470.989c0 260.198-210.893 471.091-471.040 471.091zM512 307.149c-84.838 0-153.6 68.813-153.6 153.6s68.762 153.6 153.6 153.6c84.787 0 153.6-68.813 153.6-153.6s-68.813-153.6-153.6-153.6z" /> +<glyph unicode="" glyph-name="voicemail" d="M788.48 675.789c-130.099 0-235.571-105.421-235.571-235.52 0-49.408 15.258-95.181 41.267-133.12h-164.403c26.010 37.888 41.216 83.712 41.216 133.12 0 130.099-105.421 235.52-235.52 235.52-130.048 0-235.52-105.421-235.52-235.52 0.051-130.048 105.472-235.469 235.571-235.469h552.96c130.048 0 235.52 105.421 235.52 235.52s-105.472 235.469-235.52 235.469zM102.4 440.32c0 73.523 59.597 133.12 133.12 133.12s133.12-59.597 133.12-133.12c0-73.523-59.597-133.12-133.12-133.12s-133.12 59.597-133.12 133.12zM788.48 307.2c-73.574 0-133.171 59.597-133.171 133.12s59.597 133.12 133.171 133.12c73.472 0 133.12-59.597 133.12-133.12s-59.597-133.12-133.12-133.12z" /> +<glyph unicode="" glyph-name="wallet" d="M819.2 665.6h-640v25.6l563.2 45.056v-45.056h76.8v76.8c0 56.32-45.619 95.846-101.325 87.91l-514.099-73.421c-55.757-7.987-101.376-60.57-101.376-116.89v-512c0-56.525 45.824-102.4 102.4-102.4h614.4c56.525 0 102.4 45.875 102.4 102.4v409.6c0 56.525-45.875 102.4-102.4 102.4zM742.4 306.893c-42.394 0-76.8 34.406-76.8 76.8s34.406 76.8 76.8 76.8 76.8-34.406 76.8-76.8-34.406-76.8-76.8-76.8z" /> +<glyph unicode="" glyph-name="water" d="M505.958 507.238c-26.163-210.688-159.795-248.166-159.795-394.65 0-90.419 75.93-163.789 165.837-163.789s165.786 73.421 165.786 163.789c0 146.483-133.632 183.962-159.795 394.65-0.819 6.298-11.213 6.298-12.032 0zM198.81 968.038c-26.163-210.688-159.795-248.115-159.795-394.65 0-90.368 75.878-163.789 165.786-163.789s165.786 73.421 165.786 163.789c0 146.483-133.632 183.962-159.795 394.65-0.768 6.298-11.213 6.298-11.981 0zM813.21 968.038c-26.163-210.688-159.795-248.166-159.795-394.65 0-90.368 75.878-163.789 165.786-163.789s165.786 73.421 165.786 163.789c0 146.483-133.632 183.962-159.795 394.65-0.819 6.298-11.213 6.298-11.981 0z" /> +<glyph unicode="" glyph-name="500px-with-circle" d="M427.469 498.842c-8.141 6.093-16.64 11.11-25.446 15.002-8.909 3.994-17.715 5.99-26.573 5.99-16.333 0-29.235-6.195-38.758-18.483-9.626-12.39-14.387-26.266-14.387-41.574 0-16.742 4.915-30.515 14.694-41.216s23.296-16.077 40.499-16.077c8.858 0 17.664 1.792 26.573 5.325 8.858 3.482 17.254 7.885 25.139 13.261 7.936 5.325 15.411 11.366 22.374 18.125 7.014 6.707 13.261 13.414 18.842 19.917-5.581 5.939-12.134 12.595-19.558 19.814s-15.258 13.875-23.398 19.917zM646.502 519.834c-9.318 0-18.33-1.997-26.88-5.99-8.602-3.891-16.742-8.909-24.474-15.002-7.68-6.042-15.002-12.698-22.016-19.917s-13.363-13.875-18.842-19.917c6.042-7.014 12.544-13.926 19.558-20.582 7.014-6.81 14.387-12.8 22.426-18.176 7.834-5.325 16.077-9.626 24.73-12.902 8.602-3.277 17.869-4.915 27.597-4.915 17.254 0 30.464 5.581 39.782 16.794 9.37 11.213 13.926 24.883 13.926 41.216 0 16.282-5.069 30.31-15.002 41.882-9.984 11.674-23.603 17.51-40.806 17.51zM512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM759.552 411.546c-5.53-15.821-13.466-29.696-23.706-41.523-10.24-11.93-22.938-21.197-38.042-27.955-15.155-6.758-32-10.086-50.637-10.086-14.438 0-27.955 2.202-40.499 6.605-12.595 4.454-24.371 10.24-35.277 17.51-10.957 7.219-21.299 15.565-31.13 25.088-9.728 9.626-19.046 19.456-27.955 29.696-9.728-10.24-19.302-20.122-28.621-29.696-9.37-9.523-19.2-17.92-29.747-25.088-10.445-7.27-21.862-13.056-34.202-17.51-12.288-4.403-26.163-6.605-41.574-6.605-19.098 0-36.045 3.328-50.995 10.086-14.899 6.758-27.75 15.821-38.4 27.238-10.701 11.469-18.842 25.037-24.474 40.858-5.478 15.821-8.294 32.819-8.294 50.944 0 18.176 2.662 35.021 8.038 50.637s13.21 29.082 23.398 40.55c10.24 11.469 22.784 20.429 37.734 27.238 14.848 6.707 31.59 10.086 50.278 10.086 15.36 0 29.44-2.304 42.24-7.014 12.8-4.608 24.627-10.803 35.584-18.483 11.008-7.629 21.248-16.486 30.822-26.522s18.944-20.582 28.262-31.795c8.909 10.701 18.125 21.197 27.597 31.386 9.626 10.291 19.814 19.251 30.822 26.88 10.906 7.68 22.784 13.875 35.584 18.483 12.8 4.71 26.675 7.014 41.472 7.014 18.688 0 35.43-3.174 50.381-9.779 14.899-6.502 27.443-15.411 37.683-26.829 10.24-11.469 18.125-24.73 23.706-40.141 5.632-15.411 8.397-32.102 8.397-50.278 0-18.227-2.765-35.226-8.448-50.995z" /> +<glyph unicode="" glyph-name="500px" d="M327.578 216.32c24.627 8.909 47.514 20.48 68.454 34.97 20.992 14.438 40.806 31.13 59.392 50.278 18.586 19.098 37.683 38.861 57.242 59.341 17.715-20.48 36.352-40.243 55.91-59.341 19.558-19.149 40.294-35.84 62.157-50.278 21.914-14.438 45.414-26.061 70.605-34.97 25.088-8.858 52.070-13.261 80.998-13.261 37.222 0 71.014 6.758 101.222 20.275 30.259 13.517 55.654 32.102 76.134 55.91 20.429 23.757 36.352 51.456 47.514 83.098 11.213 31.59 16.794 65.587 16.794 101.939s-5.581 69.837-16.794 100.557c-11.162 30.822-27.034 57.498-47.514 80.333s-45.67 40.704-75.418 53.76c-29.85 13.107-63.386 19.61-100.659 19.61-29.747 0-57.498-4.71-83.098-13.978-25.6-9.318-49.357-21.658-71.219-37.018-21.914-15.36-42.394-33.28-61.491-53.811-19.046-20.429-37.478-41.472-55.194-62.874-18.637 22.374-37.478 43.52-56.525 63.59-19.098 20.019-39.578 37.734-61.491 53.094s-45.619 27.699-71.219 37.018c-25.6 9.318-53.811 13.978-84.48 13.978-37.274 0-70.912-6.81-100.608-20.275-29.901-13.517-54.938-31.59-75.469-54.477-20.48-22.835-36.147-49.869-46.797-81.050-10.701-31.181-16.026-64.922-16.026-101.171 0-36.352 5.53-70.349 16.691-101.99 11.213-31.693 27.494-58.88 48.896-81.766 21.453-22.835 47.053-41.011 76.8-54.477 29.901-13.517 63.795-20.275 102.042-20.275 30.72 0 58.47 4.403 83.149 13.261zM161.997 376.32c-19.61 21.402-29.338 48.896-29.338 82.381 0 30.72 9.523 58.47 28.723 83.149 19.046 24.576 44.851 37.018 77.568 37.018 17.664 0 35.277-3.994 52.992-11.878s34.714-17.92 51.046-30.054c16.23-12.134 31.846-25.395 46.694-39.782 14.899-14.49 27.955-27.75 39.168-39.834-11.213-13.056-23.757-26.368-37.734-39.731-13.978-13.619-28.774-25.702-44.646-36.352-15.923-10.752-32.614-19.558-50.33-26.573-17.664-7.014-35.379-10.496-53.043-10.496-34.56 0-61.542 10.701-81.101 32.154zM729.907 353.894c-17.203 6.502-33.792 15.155-49.562 25.856-15.923 10.701-30.874 22.784-44.749 36.301-13.978 13.517-27.034 27.238-39.117 41.267 11.162 12.083 23.706 25.344 37.683 39.834 13.978 14.387 28.672 27.648 43.981 39.731 15.36 12.134 31.693 22.17 48.896 30.054 17.254 7.885 35.226 11.878 53.811 11.878 34.458 0 61.645-11.622 81.715-34.97 20.070-23.245 30.054-51.2 30.054-83.866 0-32.614-9.37-60.006-27.955-82.33-18.637-22.426-45.158-33.536-79.616-33.536-19.507 0.051-37.939 3.277-55.142 9.779z" /> +<glyph unicode="" glyph-name="basecamp" d="M512 870.4c-239.258 0-476.16-331.827-476.16-636.006 0-70.502 232.141-183.194 476.16-183.194s476.16 112.691 476.16 183.194c0 304.179-236.902 636.006-476.16 636.006zM512.307 173.312c-266.138 0-341.658 105.882-341.658 139.366 0 65.894 109.056 229.632 148.787 229.632 36.813 0 78.95-92.723 118.477-92.723 63.539 0 131.43 202.445 183.245 202.445s235.571-265.114 235.571-345.549c0-13.875-55.501-133.171-344.422-133.171z" /> +<glyph unicode="" glyph-name="behance" d="M413.286 496.589c0 0 96.87 7.526 96.87 125.901 0 118.528-79.258 176.179-179.712 176.179h-330.445v-661.811h330.445c0 0 201.779-6.605 201.779 195.379-0.051 0.051 8.755 164.352-118.938 164.352zM145.613 681.114h184.832c0 0 44.954 0 44.954-68.813 0-68.915-26.419-78.899-56.422-78.899h-173.363v147.712zM321.075 254.515h-175.462v176.896h184.832c0 0 66.97 0.922 66.97-90.88 0-77.414-50.022-85.453-76.339-86.016zM801.229 630.374c-244.275 0-244.070-254.31-244.070-254.31s-16.691-252.979 244.070-252.979c0 0 217.242-13.005 217.242 175.974h-111.718c0 0 3.686-71.219-101.786-71.219 0 0-111.821-7.782-111.821 115.2h328.858c0.051 0.051 36.301 287.334-220.774 287.334zM900.608 431.411h-208.589c0 0 13.619 101.99 111.718 101.99s96.87-101.99 96.87-101.99zM926.566 759.808h-261.99v-81.613h261.99v81.613z" /> +<glyph unicode="" glyph-name="creative-cloud" d="M645.12 819.2c-100.659 0-191.488-41.626-256.614-108.493-19.661 3.994-39.987 6.093-60.826 6.093-169.677 0-307.2-137.523-307.2-307.2s137.523-307.2 307.2-307.2h317.44c197.939 0 358.4 160.461 358.4 358.4s-160.461 358.4-358.4 358.4zM327.68 167.526c-64.666 0-125.44 25.19-171.213 70.912-45.67 45.722-70.861 106.547-70.861 171.162s25.19 125.44 70.912 171.162c45.722 45.722 106.496 70.912 171.162 70.912s125.44-25.19 171.213-70.912l95.949-96c13.978-13.978 13.978-36.659 0-50.688-14.029-14.029-36.762-13.978-50.688 0l-95.949 96.051c-64.41 64.307-176.589 64.307-240.998 0-32.205-32.256-49.92-75.008-49.92-120.525s17.715-88.269 49.92-120.525c40.192-40.141 98.97-55.194 153.139-45.261 16.589-21.709 35.277-41.728 56.32-59.136-28.006-11.059-58.010-17.152-88.986-17.152zM854.477 251.443c-55.962-55.91-130.304-86.733-209.357-86.733-79.104 0-153.446 30.822-209.408 86.733l-138.701 138.701c-13.978 13.978-13.978 36.71 0 50.688s36.71 13.978 50.688 0l138.701-138.701c42.394-42.394 98.765-65.741 158.72-65.741s116.275 23.347 158.669 65.741 65.741 98.765 65.741 158.669-23.347 116.275-65.741 158.669-98.714 65.741-158.669 65.741c-44.698 0-87.398-13.056-123.802-37.222-19.507 15.821-41.062 29.133-64.051 39.885 52.992 43.93 118.221 69.069 187.904 69.069 79.053 0 153.395-30.822 209.357-86.733 55.962-55.962 86.733-130.304 86.733-209.357s-30.822-153.498-86.784-209.408z" /> +<glyph unicode="" glyph-name="dropbox" d="M312.781 926.618l-292.301-182.016 200.243-167.885 291.277 189.082-199.219 160.819zM688.742 154.010c-5.222 0-10.394 1.69-14.592 5.222l-162.15 134.554-162.15-134.605c-4.198-3.482-9.421-5.222-14.592-5.222-4.352 0-8.704 1.178-12.493 3.686l-120.115 78.49v-46.285l309.35-194.867 309.35 194.918v46.285l-120.115-78.49c-3.789-2.509-8.141-3.686-12.493-3.686zM1003.52 744.602l-292.352 182.016-199.168-160.819 291.226-189.082 200.294 167.885zM512 394.701l180.634-149.914 288.819 188.826-178.227 143.104-291.226-182.016zM331.366 244.787l180.634 149.914-291.277 182.016-178.176-143.104 288.819-188.826z" /> +<glyph unicode="" glyph-name="evernote" d="M887.757 752.282c0 58.88-88.678 65.382-88.678 65.382l-208.333 13.107c0 0-4.454 56.678-46.541 76.39-42.086 19.61-88.371 13.619-121.651 13.312-33.28-0.358-41.114-42.752-41.114-82.79 0-39.987 0.717-86.221 0.717-115.2 0-52.122-22.886-74.189-80.179-74.189h-118.118c-33.024 2.099-58.726-3.277-58.726-30.003 0-26.778 38.861-254.618 92.211-307.2 30.976-30.515 220.416-51.917 260.301-51.917s26.573 117.811 37.683 117.811c11.11 0 23.245-66.509 86.118-82.074 62.771-15.718 146.637-12.8 151.091-57.498 5.786-58.982 11.11-135.27-27.699-140.698l-87.859-3.482c-60.211 4.301-44.032 70.093-17.459 70.093s39.885 0.973 39.885 0.973l3.328 71.987c0 0-137.882 16.282-143.718-76.698-5.376-84.992 9.216-125.082 19.917-133.786 10.701-8.806 29.235-25.805 198.093-25.805 237.926 0 150.733 693.402 150.733 752.282zM790.528 444.416c-9.318-10.035-43.11 16.384-75.366 16.384-32.307 0-67.123-17.101-75.315-5.786-8.192 11.213 7.475 101.888 68.301 101.888s91.802-102.605 82.381-112.486zM297.165 759.501c0 11.725 2.97 152.781 2.97 152.781l-179.456-176.128c0 0 124.006 0 148.378 0 24.371 0.051 28.109 11.725 28.109 23.347z" /> +<glyph unicode="" glyph-name="flattr" d="M286.618 535.501c0 83.814 22.221 137.114 96.717 149.094 26.010 5.12 80.179 3.277 114.637 3.277v-128c0-1.229 0.154-3.277 0.461-4.301 1.382-5.171 6.093-8.96 11.674-8.96 3.123 0 6.042 1.587 9.114 4.608l319.283 319.181h-452.045c-188.109 0-284.058-108.288-284.058-310.579v-424.294l184.218 184.422v215.552zM737.28 601.702v-215.501c0-83.814-22.221-137.216-96.717-149.094-26.010-5.12-80.179-3.328-114.586-3.328v128c0 1.126-0.205 3.174-0.461 4.301-1.434 5.12-6.144 8.909-11.674 9.011-3.174 0-6.042-1.69-9.165-4.71l-319.232-319.078 452.096-0.102c188.058 0 284.058 108.288 284.058 310.579v424.294l-184.32-184.371z" /> +<glyph unicode="" glyph-name="foursquare" d="M251.904 921.6c-26.010 0-47.104-21.094-47.104-47.104v-845.619c0-32 39.168-47.411 61.030-24.064l228.915 245.248c3.482 3.789 8.346 5.939 13.517 5.939h165.734c24.883 0 46.336 17.562 51.251 41.984l108.083 538.317c8.858 44.134-24.883 85.299-69.888 85.299h-511.539zM452.506 348.672l-145.306-170.854v623.821c0 9.677 7.885 17.562 17.562 17.562h365.568c17.51 0 30.618-16.026 27.136-33.178l-21.146-105.216c-1.741-8.858-9.523-15.206-18.534-15.206h-189.952c-14.95 0-27.034-12.083-27.034-27.034v-62.464c0-7.117 5.786-12.902 12.954-12.902h168.653c15.667 0 27.443-14.336 24.371-29.747l-31.437-156.57c-2.202-10.752-11.674-18.483-22.63-18.483h-139.11c-8.141 0-15.821-3.533-21.094-9.728z" /> +<glyph unicode="" glyph-name="google-drive" d="M418.56 307.2l-170.189-307.2h605.389l170.24 307.2h-605.44zM300.288 855.091l-300.288-543.488 172.646-311.501 300.339 543.488-172.698 311.501zM995.584 358.4l-312.115 563.2h-345.344l311.706-563.2h345.754z" /> +<glyph unicode="" glyph-name="google-hangouts" d="M512 972.8c-243.2 0-440.32-194.867-440.32-435.2s197.12-435.2 440.32-435.2v-153.6c172.442 85.606 440.32 271.616 440.32 588.8 0 240.333-197.12 435.2-440.32 435.2zM460.8 474.061c0-67.994-52.275-124.006-118.784-129.946-6.298-0.563-11.674 4.506-11.674 10.803v43.622c0 5.427 4.045 9.933 9.421 10.752 27.187 3.891 47.974 24.934 53.606 51.507h-99.891c-20.685 0-37.478 16.794-37.478 37.478v129.843c0 20.685 16.794 37.478 37.478 37.478h129.843c20.685 0 37.478-16.794 37.478-37.478v-154.061zM768 474.061c0-67.994-52.275-124.006-118.784-129.946-6.298-0.563-11.674 4.506-11.674 10.803v43.622c0 5.427 4.045 9.933 9.421 10.752 27.187 3.942 47.974 24.934 53.606 51.507h-99.891c-20.685 0-37.478 16.794-37.478 37.478v129.843c0 20.685 16.794 37.478 37.478 37.478h129.843c20.685 0 37.478-16.794 37.478-37.478v-154.061z" /> +<glyph unicode="" glyph-name="grooveshark" d="M512 911.411c-248.883 0-450.56-201.728-450.56-450.611 0-248.781 201.677-450.611 450.611-450.611 248.832 0 450.56 201.779 450.56 450.611-0.051 248.883-201.728 450.611-450.611 450.611zM693.146 443.494c-24.371 34.099-49.306 67.584-76.646 99.277-25.651 29.901-52.941 58.419-82.637 84.224-29.594 25.805-61.85 50.278-97.28 67.379-23.808 11.52-48.333 20.122-73.677 27.443-2.867 0.768-10.65 4.301-12.902 0.768-1.434-2.202-0.307-6.298-0.102-8.704 0.717-5.274 1.331-10.496 1.997-15.77 7.578-62.874 10.445-129.28-9.114-190.413-10.445-32.922-29.594-62.976-55.040-86.323-21.146-19.405-51.302-38.912-81.254-37.478-5.53 0.205-11.162 1.178-16.589 3.021-32.051 10.803-33.946 45.363-34.15 73.882-0.205 30.618 3.482 61.184 11.059 90.88 2.304 9.114 5.171 18.074 8.192 26.982 35.072 101.683 116.224 184.422 218.061 220.518 38.093 13.517 78.438 20.326 118.938 20.326 119.091 0 232.397-61.184 297.83-160.614 16.384-24.986 29.542-52.019 39.219-80.179h-0.154c3.123-8.909 5.99-17.92 8.346-26.982 7.475-29.696 11.264-60.314 11.059-90.88-0.41-57.6-18.944-121.19-91.29-90.675-34.15 14.438-62.669 43.622-83.866 73.318z" /> +<glyph unicode="" glyph-name="icloud" d="M558.541 716.8c96.461 0 174.95-81.818 174.95-182.323 0-6.963-0.614-14.848-1.894-24.781 0 0-8.346-64.614-10.547-81.613s9.523-33.28 27.034-33.434c17.51-0.102 84.48-0.512 84.48-0.512 49.050-0.307 89.037-42.752 89.037-94.618 0-52.224-40.192-94.72-89.6-94.72h-618.65c-61.184 0-110.95 52.326-110.95 116.634 0 46.746 26.573 88.832 67.738 107.264 0 0 21.555 9.626 33.331 14.899s26.010 22.067 26.419 39.68c0.41 17.613 0.819 36.557 0.819 36.557 0.614 27.392 21.555 49.664 46.592 49.664 1.638 0 4.813-0.307 10.598-1.792 0 0 39.629-10.086 53.197-13.517s31.027 3.379 37.376 15.821c6.349 12.442 25.754 50.227 25.754 50.227 30.618 59.546 89.754 96.563 154.317 96.563zM558.541 819.2c-106.547 0-198.963-61.798-245.402-152.269-11.52 2.918-23.398 4.915-35.789 4.915-81.254 0-147.098-66.765-148.992-149.709-75.469-33.741-128.358-110.797-128.358-200.704 0-120.986 95.488-219.034 213.35-219.034h618.65c106.035 0 192 88.269 192 197.12 0 108.442-85.35 196.352-190.874 197.018 1.587 12.442 2.714 25.037 2.714 37.939 0.051 157.235-124.109 284.723-277.299 284.723v0z" /> +<glyph unicode="" glyph-name="mixi" d="M488.755 89.19h48.896v-109.722c333.312 35.021 511.078 365.722 482.355 598.579-28.877 232.96-279.091 393.83-560.333 359.424-281.19-34.509-484.762-251.29-455.987-484.301 26.266-211.866 235.622-364.186 485.069-363.981zM803.533 314.368h-93.747v253.594c0 10.189-0.922 19.814-2.714 28.518-1.485 7.578-4.301 13.978-8.397 19.507-3.891 5.12-9.574 9.318-16.896 12.493-7.782 3.379-18.586 5.12-31.898 5.12-27.494 0-48.998-7.219-64.051-21.299-14.899-13.978-22.17-32.41-22.17-56.32v-241.613h-93.696v253.594c0 10.496-0.973 20.224-3.021 28.877-1.741 7.68-4.659 14.182-8.858 19.814-3.942 5.222-9.165 9.114-16.077 12.134-7.373 3.174-17.408 4.813-29.696 4.813-15.974 0-29.696-3.021-40.704-8.909-11.418-5.99-20.736-13.312-27.699-21.606-7.066-8.397-12.237-17.101-15.309-25.907-3.174-8.806-4.71-15.872-4.71-21.197v-241.613h-93.798v394.035h90.010v-30.72c29.389 26.010 66.867 39.219 111.667 39.219 26.112 0 50.227-5.274 71.629-15.616 15.667-7.526 28.365-18.688 37.786-33.382 11.827 12.698 25.805 23.091 41.677 31.181 23.245 11.827 49.050 17.818 76.749 17.818 20.582 0 39.578-2.202 56.422-6.502 17.562-4.403 32.973-11.52 45.824-21.094 13.21-9.882 23.552-22.784 30.822-38.4 7.219-15.411 10.854-33.792 10.854-54.784v-281.754z" /> +<glyph unicode="" glyph-name="onedrive" d="M329.165 468.634c24.934 100.403 115.149 173.773 222.259 173.773 63.283 0 122.573-25.856 165.478-70.758 18.125 5.837 39.322 10.342 58.163 10.752v6.656c0 127.078-94.464 230.144-210.944 230.144-83.251 0-154.624-53.146-188.928-129.587-25.293 17.101-54.835 27.392-86.733 27.392-91.392 0-165.427-80.742-165.427-180.378 0-10.752 1.229-21.197 2.918-31.386-70.502-6.963-125.696-79.053-125.696-157.696 0-0.819 0.205-1.485 0.205-2.304-0.051-0.717-0.461-1.434-0.461-2.15 0-31.488 10.957-60.262 28.723-83.507 25.19-33.894 64.614-54.784 109.568-54.784h64.563c-12.595 24.986-20.378 52.838-20.378 82.688-0.051 88.934 62.976 163.43 146.688 181.146zM915.917 369.818c-1.28 0-2.56-0.358-3.84-0.41 0.358 3.789 1.126 7.475 1.126 11.366 0 75.366-61.082 136.397-136.448 136.397-30.003 0-57.498-9.933-80.077-26.419-27.955 51.968-82.125 87.654-145.306 87.654-91.546 0-165.734-74.189-165.734-165.734 0-1.178 0.307-2.202 0.358-3.379-6.042 0.922-12.083 1.843-18.381 1.843-68.352 0-123.648-55.347-123.648-123.648 0-8.55 0.87-16.896 2.509-24.934 11.674-62.003 65.946-108.954 131.379-108.954h548.147v0.973c54.886 5.222 97.997 50.893 97.997 107.11 0 59.699-48.384 108.134-108.083 108.134z" /> +<glyph unicode="" glyph-name="paypal" d="M405.197 426.138h84.941c184.525 0 289.229 83.098 322.56 253.952 1.075 5.632 2.048 11.059 2.867 16.486 1.843 11.571 2.765 21.965 3.174 31.949 0.307 6.861 0.512 10.906 0.461 14.694-0.41 20.019-3.942 36.966-11.059 53.197-6.605 15.155-16.589 30.054-31.386 47.002-43.674 49.664-119.757 78.182-210.637 78.182h-289.434c-20.378 0-37.734-14.848-40.909-34.97l-52.224-336.435-64.973-419.072c-2.355-15.104 9.318-28.723 24.576-28.723h141.926l43.469 258.202c5.99 37.888 38.246 65.536 76.646 65.536zM871.27 660.992c-40.55-193.075-171.878-295.526-381.184-295.526h-84.89c-8.397 0-15.462-6.042-16.794-14.438l-56.576-351.027h148.838c17.818 0 33.024 12.954 35.789 30.566l1.485 7.68 28.416 179.917 1.843 9.933c2.765 17.613 17.971 30.566 35.789 30.566h22.528c145.92 0 260.147 59.29 293.53 230.707 13.722 70.656 6.758 129.741-28.774 171.622z" /> +<glyph unicode="" glyph-name="picasa" d="M297.37 879.462c-158.157-81.306-256.41-241.715-256.41-419.738 0-32.41 4.096-65.28 11.315-98.202l406.989 370.637c-43.418 39.475-157.491 143.309-161.894 147.302zM706.202 889.549c-61.44 27.904-126.771 42.291-194.253 42.291-47.821 0-94.976-7.987-140.749-22.579l335.002-304.691v284.979zM777.83 847.974v-543.59h178.432c17.562 50.278 26.726 102.605 26.726 155.392 0.051 155.29-77.926 300.646-205.158 388.198zM74.906 285.235c34.509-86.682 95.078-161.28 172.442-214.221v371.2l-104.704-95.283c-35.738-32.461-65.536-59.699-67.738-61.696zM318.976 29.44c47.872-21.606 97.946-34.918 149.504-39.68h86.477c154.573 14.387 293.222 105.882 368.589 242.893h-604.57v-203.213z" /> +<glyph unicode="" glyph-name="qq" d="M870.656 306.278c-39.885 28.006-89.651 26.112-117.965-14.182-28.314-40.192-226.202-288.41-550.451-185.293 12.237-10.701 25.088-20.787 38.656-30.31 212.634-149.811 506.47-98.714 656.179 113.92 28.416 40.294 13.466 87.757-26.419 115.866zM244.992 337.869c-20.685 44.595-136.653 340.122 114.688 569.395-15.36-5.325-30.566-11.315-45.568-18.278-235.981-109.312-338.739-389.274-229.427-625.306 20.634-44.595 69.274-55.501 113.562-35.021 44.237 20.531 67.379 64.614 46.746 109.21zM554.291 930.662c-48.947 4.403-82.637-32.205-87.040-80.794-4.352-48.589 22.272-90.675 71.219-95.078s362.854-51.712 435.712-384.102c3.174 15.923 5.427 32.102 6.963 48.589 23.296 259.123-167.782 488.090-426.854 511.386zM352.819 433.664c-13.517-31.693-15.667-62.106-4.813-67.686 7.475-3.891 19.149 5.018 30.106 21.299 4.352-17.766 15.104-33.894 30.464-46.797-16.077-5.888-26.624-15.616-26.624-26.573 0-18.125 28.467-32.717 63.539-32.717 31.642 0 57.856 11.878 62.72 27.494 1.28 0 6.298 0 7.526 0 4.864-15.616 31.078-27.494 62.771-27.494 35.123 0 63.539 14.592 63.539 32.717 0 11.008-10.496 20.685-26.624 26.573 15.309 12.902 26.112 28.979 30.413 46.797 10.957-16.282 22.63-25.19 30.157-21.299 10.803 5.581 8.704 35.994-4.864 67.686-10.598 24.986-24.986 43.418-35.942 47.411 0.205 1.587 0.205 3.226 0.205 4.813 0 9.728-2.662 18.586-7.27 25.805 0.102 0.614 0.102 1.178 0.102 1.69 0 4.506-1.075 8.602-2.867 12.186-2.765 64.922-45.005 116.429-113.357 116.429-68.403 0-110.643-51.507-113.408-116.378-1.792-3.584-2.918-7.68-2.918-12.186 0-0.512 0.051-1.075 0.102-1.69-4.506-7.27-7.219-16.179-7.219-25.856 0-1.587 0.051-3.174 0.205-4.813-10.906-3.994-25.344-22.374-35.942-47.411z" /> +<glyph unicode="" glyph-name="rdio-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM686.234 487.322c1.126-8.704 1.741-17.51 1.741-26.522 0-111.411-89.19-201.779-199.27-201.779-109.978 0-199.219 90.419-199.219 201.779 0 111.514 89.19 201.83 199.219 201.83 15.821 0 31.13-1.997 45.875-5.478v-114.944c-23.245 8.499-51.968 7.27-78.899-5.683-48.742-23.603-73.472-76.493-55.245-118.323 18.278-41.779 72.602-56.627 121.395-33.024 33.587 16.179 63.181 55.194 63.181 104.192v148.122c4.198-2.304 8.294-4.915 12.288-7.475 37.837-23.808 94.106-55.603 159.795-58.982 25.651-1.331-10.086-65.741-70.861-83.712z" /> +<glyph unicode="" glyph-name="renren" d="M433.562 928.512c-222.771-37.325-392.602-231.014-392.602-464.435 0-116.019 41.984-222.106 111.565-304.179 164.915 79.821 280.166 260.403 281.037 470.579v298.035zM512.102 345.19c-29.338-121.498-116.992-225.28-226.202-294.298 67.072-36.813 144.179-57.805 226.099-57.805 82.022 0 159.13 20.992 226.202 57.805-109.21 69.018-196.813 172.8-226.099 294.298zM590.592 632.678c0-211.098 115.507-392.602 280.934-472.781 69.53 82.074 111.514 188.211 111.514 304.179 0 233.421-169.728 427.008-392.448 464.384v-295.782z" /> +<glyph unicode="" glyph-name="scribd" d="M237.722 36.659c0-11.469-3.686-25.19-7.578-36.659h293.734c16.794 19.302 26.266 42.547 26.266 68.71 0 70.912-84.173 110.285-268.339 196.71l-25.907 12.083c-90.778 43.162-158.003 81.152-204.698 126.413v-225.178c9.011 1.229 18.381 2.15 28.57 2.15 153.651-0.051 157.952-142.797 157.952-144.23zM870.4 921.6h-191.386c89.498-60.314 126.31-145.51 126.31-212.070 0-112.333-94.003-148.736-139.622-148.736l-13.875-0.102c-104.755 0-158.208 63.846-158.925 189.798-6.195 4.915-35.226 23.194-120.166 23.194-100.352 0-141.978-79.002-141.978-121.293 0-49.818 27.802-105.216 229.581-173.158 344.883-115.405 344.883-269.056 344.883-404.634v-1.331c0-22.374-1.587-47.309-5.99-73.267h71.168c56.32 0 102.4 46.029 102.4 102.4v716.8c0 56.32-46.080 102.4-102.4 102.4z" /> +<glyph unicode="" glyph-name="sina-weibo" d="M752.026 457.318c-14.029 4.301-23.706 7.27-16.333 26.010 15.923 40.806 17.613 75.981 0.358 101.12-32.41 47.104-121.037 44.595-222.618 1.28 0 0.102-31.898-14.182-23.757 11.622 15.667 51.046 13.261 93.85-11.059 118.528-55.091 56.218-201.574-2.099-327.27-129.997-94.157-95.795-148.787-197.274-148.787-285.082 0-167.987 211.558-280.32 418.56-280.32 271.309 0 451.84 170.701 451.84 298.086 0 77.056-63.693 120.73-120.934 138.752zM421.683 95.795c-165.12-16.384-307.763 58.726-318.464 167.68-10.701 109.005 114.483 210.688 279.654 227.226 165.171 16.384 307.763-58.675 318.464-167.68 10.701-109.107-114.483-210.842-279.654-227.226zM1021.44 594.074c-0.051 169.574-137.523 306.995-307.2 306.995-19.814 0-35.789-15.974-35.789-35.789s15.974-35.789 35.789-35.789c130.099 0 235.571-105.523 235.571-235.622 0-19.814 16.026-35.789 35.84-35.789s35.789 16.026 35.789 35.84v0.154zM879.053 599.296c-16.333 79.974-79.411 143.002-159.386 159.386-19.354 3.994-38.298-8.499-42.291-27.904-3.942-19.302 8.499-38.298 27.904-42.291 52.019-10.598 92.979-51.61 103.629-103.578 3.994-19.405 22.938-31.795 42.291-27.904 19.302 3.994 31.846 22.989 27.853 42.291zM336.998 383.898c-66.56-13.414-111.462-69.222-100.301-124.621 11.162-55.501 74.086-89.6 140.646-76.186 66.509 13.414 111.411 69.222 100.301 124.621-11.162 55.398-74.189 89.6-140.646 76.186z" /> +<glyph unicode="" glyph-name="skype-with-circle" d="M622.797 468.378c-11.776 7.885-26.317 14.694-43.059 20.224-16.538 5.478-35.226 10.496-55.654 15.002-16.077 3.789-27.802 6.81-34.765 8.806-6.81 1.894-13.619 4.608-20.275 8.090-6.349 3.277-11.418 7.219-15.002 11.725-3.328 4.198-5.018 9.216-5.018 15.104 0 9.626 5.12 17.715 15.616 24.781 10.854 7.322 25.549 11.008 43.571 11.008 19.456 0 33.587-3.277 42.035-9.882 8.704-6.81 16.282-16.486 22.528-28.774 5.427-9.626 10.291-16.282 15.053-20.48 5.069-4.608 12.339-7.014 21.658-7.014 10.291 0 18.944 3.686 25.856 11.11 6.861 7.322 10.342 15.718 10.342 24.986 0 9.626-2.714 19.61-7.885 29.491s-13.414 19.405-24.422 28.314c-11.008 8.909-24.934 15.974-41.523 21.299-16.486 5.325-36.301 7.987-58.726 7.987-28.16 0-52.992-3.994-73.882-11.981-21.146-8.090-37.581-19.866-48.845-34.97-11.366-15.206-17.101-32.819-17.101-52.378 0-20.48 5.478-37.888 16.282-51.814 10.598-13.722 25.19-24.678 43.213-32.614 17.715-7.68 39.834-14.49 65.997-20.275 19.149-4.096 34.714-8.090 46.131-11.776 10.957-3.482 20.019-8.602 26.88-15.206 6.502-6.298 9.677-14.285 9.677-24.627 0-12.902-6.093-23.398-18.586-32.307-12.851-9.011-29.901-13.517-50.688-13.517-15.155 0-27.392 2.202-36.557 6.707-9.062 4.403-16.128 9.984-21.094 16.691-5.171 7.014-9.984 15.923-14.438 26.419-3.994 9.677-9.011 17.101-14.797 22.221-5.99 5.325-13.517 7.885-22.118 7.885-10.598 0-19.405-3.379-26.317-9.984-6.963-6.81-10.496-15.002-10.496-24.525 0-15.104 5.427-30.925 16.128-46.694 10.598-15.821 24.525-28.518 41.472-37.888 23.654-12.902 53.965-19.405 90.112-19.405 30.106 0 56.525 4.813 78.643 14.182 22.272 9.523 39.475 22.989 51.098 39.885 11.674 16.998 17.613 36.506 17.613 57.805 0 17.818-3.43 33.178-10.24 45.619-6.81 12.39-16.384 22.682-28.416 30.771zM512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM629.811 185.6c-24.934 0-48.435 6.4-69.018 17.818-14.899-2.918-30.31-4.403-46.080-4.403-138.906 0-251.597 116.019-251.597 258.918 0 17.92 1.792 35.328 5.12 52.122-12.749 22.221-20.070 48.128-20.070 75.827 0 82.893 65.331 150.221 145.971 150.221 28.518 0 55.091-8.499 77.619-23.091 13.926 2.509 28.365 3.789 42.957 3.789 139.008 0 251.648-115.917 251.648-258.918 0-18.995-1.997-37.581-5.786-55.501 9.677-20.122 15.155-42.701 15.155-66.714-0.051-82.842-65.331-150.067-145.92-150.067z" /> +<glyph unicode="" glyph-name="skype" d="M955.955 356.506c6.758 31.898 10.394 65.126 10.394 99.226 0 255.283-201.216 462.285-449.382 462.285-26.163 0-51.814-2.406-76.8-6.81-40.192 26.010-87.654 41.114-138.598 41.114-143.923 0-260.608-120.013-260.608-268.134 0-49.408 13.107-95.795 35.789-135.578-5.939-30.003-9.114-61.133-9.114-92.928 0-255.283 201.216-462.285 449.28-462.285 28.211 0 55.654 2.611 82.278 7.68 36.71-20.275 78.592-31.795 123.187-31.795 143.923 0 260.608 120.013 260.608 268.083 0.051 42.854-9.728 83.251-27.034 119.142zM747.469 234.701c-20.787-30.208-51.507-54.221-91.29-71.219-39.373-16.896-86.63-25.395-140.39-25.395-64.512 0-118.63 11.622-160.922 34.714-30.208 16.794-55.091 39.475-73.984 67.482-19.046 28.416-28.723 56.525-28.723 83.61 0 16.896 6.298 31.59 18.688 43.622 12.288 11.878 28.109 18.022 46.899 18.022 15.411 0 28.774-4.813 39.578-14.182 10.342-9.011 19.2-22.426 26.317-39.578 7.987-18.79 16.691-34.611 25.856-47.104 8.806-11.981 21.504-22.118 37.632-30.003 16.282-7.885 38.298-11.878 65.28-11.878 37.12 0 67.584 8.090 90.522 24.218 22.426 15.821 33.28 34.611 33.28 57.702 0 18.278-5.683 32.614-17.408 43.878-12.186 11.674-28.416 20.89-47.923 27.187-20.429 6.502-48.179 13.619-82.483 20.992-46.592 10.291-86.17 22.477-117.709 36.198-32.256 14.080-58.214 33.69-77.21 58.214-19.2 24.73-29.030 55.91-29.030 92.518 0 34.918 10.24 66.406 30.515 93.594 20.122 26.88 49.408 47.872 87.194 62.31 37.274 14.182 81.715 21.402 131.891 21.402 40.090 0 75.418-4.813 104.806-14.182 29.594-9.523 54.579-22.323 74.189-38.093 19.814-15.923 34.509-32.922 43.725-50.483 9.318-17.92 14.080-35.584 14.080-52.787 0-16.486-6.195-31.488-18.483-44.595-12.288-13.21-27.802-19.814-46.080-19.814-16.589 0-29.696 4.198-38.707 12.39-8.397 7.578-17.203 19.61-26.829 36.71-11.213 21.914-24.781 39.219-40.346 51.302-15.104 11.878-40.346 17.92-75.059 17.92-32.205 0-58.419-6.707-77.773-19.814-18.842-12.749-27.904-27.238-27.904-44.339 0-10.598 2.97-19.405 9.011-26.88 6.4-8.090 15.411-15.104 26.778-20.992 11.776-6.144 23.91-10.957 36.096-14.438 12.493-3.584 33.485-8.806 62.208-15.718 36.403-7.987 69.786-16.998 99.277-26.675 29.952-9.882 55.808-22.016 76.902-36.096 21.504-14.49 38.605-33.024 50.637-55.091 12.134-22.221 18.278-49.613 18.278-81.408 0.051-38.144-10.547-72.806-31.386-103.219z" /> +<glyph unicode="" glyph-name="slideshare" d="M665.6 610.304c70.707 0 128 57.293 128 128s-57.293 128-128 128-128-57.293-128-128 57.344-128 128-128zM964.864 668.518c-183.296-130.816-267.725-107.93-350.464-105.318-57.242 2.918-76.8-15.258-76.8-55.296l0.051-307.2c0-256 431.155-175.616 264.448 253.389 85.555 49.101 157.491 124.621 198.451 174.694 21.043 31.13-1.434 63.744-35.686 39.731zM358.4 866.304c-70.707 0-128-57.293-128-128s57.293-128 128-128 128 57.293 128 128-57.344 128-128 128zM409.6 563.2c-82.739-2.611-167.168-25.498-350.464 105.318-34.253 24.013-56.73-8.602-35.686-39.68 40.96-50.125 112.896-125.594 198.451-174.694-166.707-429.005 264.448-509.389 264.448-253.389l0.051 307.2c0 39.987-19.558 58.163-76.8 55.245z" /> +<glyph unicode="" glyph-name="smashing" d="M513.178 151.962c-128.41 0-217.754 79.616-217.754 79.616l-75.93-172.186c52.378-28.006 107.11-47.923 138.701-58.419l-81.51-19.507c-38.195-9.114-76.595 14.49-85.76 52.685l-158.208 661.914c-9.165 38.195 14.387 76.595 52.634 85.811l190.259 45.517c-46.592-52.685-64.666-115.302-60.109-186.88 7.117-112.282 114.534-198.605 242.381-246.886 240.691-90.931 183.603-241.664 55.296-241.664zM991.283 225.587l-158.259 661.914c-9.114 38.195-47.514 61.798-85.76 52.582l-136.346-32.614c34.765-5.376 103.629-20.48 179.456-60.314l-59.341-164.506c0 0-49.408 55.194-181.914 61.901-125.952 6.4-195.994-129.894 49.613-210.176 188.109-61.491 248.218-180.019 245.094-289.69-1.587-56.986-21.555-103.322-44.646-138.291l139.52 33.382c38.195 9.114 61.747 47.514 52.582 85.811z" /> +<glyph unicode="" glyph-name="soundcloud" d="M34.406 304.384l16.794 71.731-16.794 74.086c-0.461 2.202-4.71 3.891-9.779 3.891-5.222 0-9.421-1.69-9.779-3.891l-14.848-74.086 14.797-71.68c0.41-2.304 4.608-3.891 9.779-3.891 5.12-0.051 9.37 1.536 9.83 3.84zM139.418 264.602l14.182 110.797-14.182 171.418c-0.461 4.301-5.837 7.782-12.237 7.782-6.502 0-11.93-3.482-12.186-7.782l-12.595-171.418 12.595-110.797c0.307-4.403 5.683-7.782 12.186-7.782 6.4 0 11.776 3.379 12.237 7.782zM244.122 266.394l11.878 108.902-11.878 228.198c-0.307 5.427-6.605 9.626-14.438 9.626-7.782 0-14.080-4.198-14.387-9.626l-10.496-228.198 10.496-109.005c0.307-5.274 6.605-9.523 14.387-9.523 7.834 0.051 14.131 4.25 14.438 9.626zM348.672 267.981l9.728 107.315-9.728 229.888c-0.256 6.298-7.475 11.315-16.384 11.315-9.011 0-16.179-5.018-16.435-11.315l-8.653-229.888 8.704-107.315c0.205-6.298 7.424-11.315 16.384-11.315 8.909 0.051 16.128 4.915 16.384 11.315zM453.12 269.414l7.68 105.779-7.68 263.629c-0.205 7.27-8.397 13.056-18.33 13.056s-18.125-5.888-18.278-13.107l-6.912-263.475 6.912-105.882c0.154-7.219 8.346-13.107 18.278-13.107s18.125 5.786 18.33 13.107zM526.182 256.205c0.41 0 363.52-0.205 365.824-0.205 72.909 0 131.994 57.19 131.994 127.693s-59.085 127.59-131.994 127.59c-18.074 0-35.277-3.584-50.995-9.882-10.496 114.995-110.234 205.21-231.885 205.21-29.747 0-58.778-5.683-84.378-15.206-10.035-3.789-12.646-7.578-12.749-15.104v-404.992c0.102-7.834 6.349-14.285 14.182-15.104z" /> +<glyph unicode="" glyph-name="spotify-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM663.757 264.346c-7.578 0-12.8 2.867-18.381 6.246-51.866 31.386-116.122 47.872-185.754 47.872-35.533 0-73.882-4.198-113.971-12.39l-4.864-1.229c-5.12-1.229-10.291-2.56-14.285-2.56-16.128 0-28.774 12.544-28.774 28.621 0 16.282 9.216 27.802 24.525 30.72 47.821 10.906 92.877 16.179 137.574 16.179 80.896 0 153.293-18.688 215.091-55.808 10.65-6.195 17.306-13.312 17.306-29.133-0.051-15.77-12.749-28.518-28.467-28.518zM703.59 376.115c-9.062 0-14.95 3.43-20.224 6.502-93.44 55.501-232.806 73.882-347.392 43.366-1.894-0.563-3.584-1.075-5.222-1.587-4.301-1.382-8.397-2.714-14.029-2.714-18.842 0-34.15 15.411-34.15 34.406 0 18.278 9.523 31.078 26.829 35.942 44.134 12.083 85.709 20.122 145.408 20.122 96.563 0 190.157-24.218 263.475-68.096 13.363-7.578 19.405-18.074 19.405-33.69 0-18.944-15.309-34.253-34.099-34.253zM748.8 503.501c-8.499 0-13.773 1.997-21.555 6.298-63.437 38.093-162.355 60.723-264.909 60.723-53.402 0-101.888-5.888-144.23-17.306-1.434-0.358-2.816-0.768-4.25-1.229-4.506-1.331-10.138-2.97-15.974-2.97-22.477 0-40.090 17.818-40.090 40.55 0 19.763 11.11 34.867 29.645 40.346 51.098 15.104 109.978 22.682 174.848 22.682 116.787 0 227.994-25.907 304.998-71.219 14.541-8.192 21.658-20.685 21.658-37.99 0-22.323-17.664-39.885-40.141-39.885z" /> +<glyph unicode="" glyph-name="spotify" d="M512 911.36c-248.883 0-450.56-201.626-450.56-450.56 0-248.781 201.677-450.56 450.56-450.56 248.934 0 450.509 201.728 450.509 450.56 0 248.883-201.523 450.56-450.509 450.56zM690.074 230.298c-8.858 0-15.053 3.379-21.555 7.322-60.877 36.915-136.294 56.269-218.010 56.269-41.677 0-86.682-4.966-133.632-14.592l-5.734-1.434c-5.939-1.434-12.032-3.021-16.691-3.021-18.995 0-33.843 14.746-33.843 33.587 0 19.098 10.752 32.614 28.774 35.994 56.115 12.8 108.954 19.046 161.382 19.046 94.976 0 179.866-22.016 252.467-65.485 12.442-7.27 20.275-15.667 20.275-34.202-0.051-18.483-15.002-33.485-33.434-33.485zM736.819 361.421c-10.598 0-17.562 4.045-23.706 7.629-109.722 65.075-273.050 86.682-407.603 50.842-2.253-0.666-4.301-1.28-6.144-1.894-5.069-1.587-9.779-3.174-16.435-3.174-22.118 0-40.090 18.074-40.090 40.346 0 21.453 11.213 36.454 31.437 42.189 51.866 14.234 100.557 23.654 170.65 23.654 113.254 0 223.078-28.416 309.146-79.923 15.667-8.96 22.784-21.197 22.784-39.475 0-22.221-17.971-40.192-40.038-40.192zM789.862 510.925c-9.984 0-16.128 2.406-25.344 7.373-74.394 44.646-190.464 71.219-310.733 71.219-62.669 0-119.603-6.912-169.267-20.326-1.69-0.41-3.277-0.87-5.018-1.382-5.274-1.587-11.878-3.482-18.688-3.482-26.419 0-47.053 20.89-47.053 47.565 0 23.194 13.005 40.909 34.816 47.36 59.955 17.715 128.973 26.675 205.107 26.675 137.114 0 267.571-30.464 357.939-83.507 16.998-9.677 25.344-24.32 25.344-44.646 0-26.266-20.685-46.848-47.104-46.848z" /> +<glyph unicode="" glyph-name="swarm" d="M526.643 9.165c-73.165 11.878-139.93 31.078-188.262 47.258-2.355 0.768-39.987 14.438-51.558 18.944-14.234 5.478-21.658 22.067-16.23 36.352 4.403 11.52 19.405 48.589 20.429 50.893 20.48 47.104 51.2 110.234 91.904 173.005 1.485-61.594 15.206-122.829 40.499-179.507 24.576-55.142 59.853-105.267 103.219-146.944zM520.858 613.018c-142.899 291.277-460.288 280.883-510.362 150.682-38.451-99.942 129.792-338.022 516.966-166.093 0.102 0.051 0.102 0.051 0.205 0.102-1.331 2.406-5.837 12.646-6.81 15.309zM591.872 624.384c0.051 0 0.102 0.051 0.102 0.051 218.675 97.126 188.109 265.779 131.533 287.437-76.134 29.133-214.528-83.149-135.526-278.886 0.768-1.382 3.379-7.168 3.891-8.602zM993.946 411.136c-33.075 74.24-93.85 127.437-164.506 152.781-7.117 2.56-14.387 3.738-21.658 3.738-36.71 0-72.038-30.464-75.366-68.506-5.581-63.437 7.014-128.051 34.816-190.362 27.392-61.389 66.253-113.306 116.224-151.398 13.005-9.933 28.928-14.592 44.8-14.592 28.621 0 57.19 15.155 68.557 42.291 29.235 69.734 30.566 151.194-2.867 226.048zM828.006 85.043c-61.184 46.694-109.67 109.517-144.128 186.675-34.918 78.285-49.203 157.44-42.342 235.315 1.894 21.658 8.243 42.547 18.432 61.645-1.792-0.461-5.683-1.382-5.837-1.434-32.154-8.038-63.334-21.965-91.034-40.141-40.141-26.317-75.52-65.382-90.726-111.462-4.096-12.442-7.219-26.112-8.243-39.168-4.864-62.362 5.274-126.771 32.563-187.904 26.419-59.136 65.792-108.442 113.306-146.074 28.979-22.886 81.203-37.376 123.904-37.376 40.090 0 79.667 11.93 115.2 29.952 11.11 5.632 35.584 20.89 37.171 21.965-21.248 5.427-41.165 14.95-58.266 28.006z" /> +<glyph unicode="" glyph-name="vine-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM609.69 622.029c-18.944 0-32.358-18.022-32.358-52.634 0-70.554 44.8-111.155 102.963-111.155 10.291 0 21.862 1.229 33.69 3.942v-54.886c-19.354-4.403-38.81-6.195-54.989-6.298-38.656-81.459-108.186-151.091-131.328-164.25-14.848-8.346-28.723-8.806-44.954 0.922-28.621 17.050-136.602 105.728-172.698 384.41h78.336c19.814-167.322 67.84-252.979 120.986-317.235 29.235 29.235 57.395 68.198 79.462 112.282-52.48 26.726-84.378 85.146-84.378 153.19 0 68.864 39.68 120.934 107.622 120.934 65.894 0 101.939-41.062 101.939-111.667 0-26.317-5.581-56.218-16.077-79.258-48.998-9.626-66.816 21.658-66.816 21.658 3.584 12.083 8.602 32.512 8.602 51.098 0.051 32.768-11.981 48.947-30.003 48.947z" /> +<glyph unicode="" glyph-name="vine" d="M893.542 463.309c-22.426-5.171-44.186-7.424-63.693-7.424-109.824 0-194.406 76.595-194.406 210.022 0 65.382 25.242 99.379 61.030 99.379 33.997 0 56.678-30.515 56.678-92.416 0-35.226-9.421-73.728-16.384-96.614 0 0 33.792-58.982 126.413-40.909 19.712 43.622 30.362 100.147 30.362 149.709 0 133.376-68.096 210.893-192.666 210.893-128.205 0-203.162-98.406-203.162-228.403 0-128.614 60.16-239.002 159.386-289.331-41.728-83.405-94.822-156.928-150.17-212.275-100.403 121.395-191.181 283.341-228.506 599.347h-147.968c68.352-526.285 272.333-693.914 326.298-726.067 30.515-18.33 56.73-17.459 84.685-1.741 43.776 24.832 175.206 156.365 248.166 310.323 30.566 0.102 67.277 3.533 103.936 11.827v103.68z" /> +<glyph unicode="" glyph-name="vk-alternitive" d="M972.8 102.4v716.8c0 56.32-46.234 102.4-102.656 102.4h-716.288c-58.88 0-102.656-43.674-102.656-102.4v-716.8c0-58.778 43.776-102.4 102.656-102.4h716.288c56.422 0 102.656 46.029 102.656 102.4zM777.421 378.522c0 0 57.958-57.19 72.243-83.712 0.41-0.563 0.563-1.075 0.717-1.28 5.786-9.728 7.27-17.408 4.352-23.040-4.813-9.37-21.197-14.080-26.778-14.49 0 0-99.482 0-102.349 0-7.168 0-22.016 1.843-40.038 14.285-13.824 9.626-27.494 25.549-40.806 41.062-19.866 23.040-37.069 43.008-54.374 43.008-2.202 0-4.403-0.358-6.451-1.075-13.158-4.198-29.85-22.886-29.85-72.806 0-15.616-12.288-24.525-20.992-24.525 0 0-44.646 0-46.899 0-15.974 0-99.174 5.581-172.851 83.354-90.419 95.232-171.622 286.259-172.339 287.949-5.12 12.339 5.478 19.046 16.998 19.046h103.424c13.875 0 18.33-8.397 21.504-15.923 3.584-8.55 17.101-43.059 39.219-81.869 35.994-63.13 58.163-88.832 75.827-88.832 3.277 0 6.451 0.87 9.421 2.509 23.091 12.749 18.79 95.078 17.766 112.077 0 3.226-0.051 36.813-11.827 52.941-8.499 11.674-22.886 16.128-31.59 17.818 2.304 3.328 7.27 8.499 13.619 11.571 15.821 7.885 44.339 9.011 72.704 9.011h15.77c30.771-0.41 38.758-2.406 49.869-5.222 22.477-5.376 22.938-19.968 20.941-69.632-0.563-14.131-1.178-30.157-1.178-48.947 0-4.045-0.154-8.499-0.154-13.107-0.717-25.395-1.536-54.118 16.384-65.894 2.355-1.434 4.966-2.253 7.731-2.253 6.246 0 24.934 0 75.571 86.886 22.272 38.349 39.424 83.61 40.602 86.989 1.024 1.843 4.045 7.27 7.578 9.37 2.867 1.69 6.554 1.997 8.499 1.997h121.6c13.312 0 22.323-1.997 24.013-7.066 2.918-8.141-0.563-32.973-56.115-108.032-9.421-12.442-17.562-23.296-24.73-32.768-50.381-65.946-50.381-69.325 2.97-119.398z" /> +<glyph unicode="" glyph-name="vk-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM701.030 397.773c0 0 43.469-42.906 54.17-62.822 0.307-0.41 0.461-0.819 0.563-1.024 4.352-7.322 5.376-13.005 3.226-17.254-3.584-7.066-15.872-10.547-20.070-10.854 0 0-74.65 0-76.8 0-5.325 0-16.486 1.382-30.003 10.701-10.394 7.27-20.634 19.2-30.618 30.822-14.899 17.306-27.802 32.256-40.806 32.256-1.638 0-3.328-0.256-4.864-0.768-9.83-3.174-22.426-17.203-22.426-54.579 0-11.674-9.216-18.381-15.718-18.381 0 0-33.536 0-35.174 0-11.981 0-74.394 4.198-129.69 62.515-67.686 71.424-128.614 214.682-129.126 216.013-3.84 9.267 4.096 14.234 12.749 14.234h77.568c10.342 0 13.722-6.298 16.077-11.878 2.765-6.502 12.902-32.358 29.542-61.44 26.982-47.411 43.52-66.662 56.781-66.662 2.509 0 4.813 0.666 7.117 1.843 17.306 9.626 14.080 71.322 13.312 84.122 0 2.406-0.051 27.597-8.909 39.68-6.349 8.755-17.152 12.083-23.706 13.312 1.69 2.509 5.478 6.349 10.189 8.653 11.878 5.939 33.28 6.81 54.528 6.81h11.827c23.040-0.307 28.979-1.792 37.325-3.891 16.896-4.045 17.254-14.95 15.77-52.275-0.461-10.598-0.922-22.579-0.922-36.71 0-3.072-0.154-6.349-0.154-9.83-0.512-18.995-1.126-40.55 12.288-49.408 1.741-1.075 3.738-1.69 5.837-1.69 4.659 0 18.688 0 56.678 65.178 16.64 28.774 29.542 62.72 30.464 65.229 0.768 1.331 3.021 5.427 5.683 7.014 2.099 1.229 4.915 1.485 6.349 1.485h91.187c9.933 0 16.742-1.485 18.022-5.325 2.253-6.093-0.41-24.678-42.035-81.050-7.014-9.318-13.21-17.459-18.586-24.525-37.734-49.459-37.734-51.968 2.355-89.498z" /> +<glyph unicode="" glyph-name="vk" d="M911.462 343.142c0 0 82.79-81.766 103.27-119.603 0.563-0.819 0.819-1.434 0.922-1.792 8.346-13.978 10.394-24.934 6.298-33.024-6.912-13.363-30.31-20.070-38.246-20.634 0 0-142.234 0-146.33 0-10.189 0-31.386 2.662-57.19 20.48-19.712 13.773-39.322 36.454-58.317 58.624-28.365 32.922-52.89 61.491-77.722 61.491-3.174 0-6.246-0.512-9.216-1.536-18.79-5.939-42.65-32.717-42.65-104.038 0-22.323-17.613-35.021-29.952-35.021 0 0-63.898 0-67.021 0-22.835 0-141.722 7.987-247.142 119.142-129.178 136.090-245.197 409.088-246.323 411.494-7.219 17.664 7.936 27.29 24.32 27.29h147.763c19.814 0 26.266-11.981 30.771-22.733 5.222-12.339 24.576-61.696 56.32-117.146 51.405-90.214 82.995-126.925 108.237-126.925 4.762 0 9.267 1.178 13.517 3.584 32.973 18.125 26.829 135.885 25.293 160.154 0 4.71-0.051 52.582-16.947 75.725-12.083 16.589-32.666 23.040-45.107 25.395 3.328 4.813 10.394 12.186 19.456 16.538 22.579 11.264 63.386 12.902 103.885 12.902h22.477c43.93-0.614 55.296-3.43 71.27-7.475 32.154-7.68 32.768-28.518 29.952-99.482-0.819-20.275-1.69-43.11-1.69-69.99 0-5.734-0.256-12.134-0.256-18.637-0.973-36.403-2.253-77.414 23.45-94.259 3.277-2.048 7.117-3.174 11.11-3.174 8.909 0 35.584 0 107.93 124.16 31.744 54.835 56.32 119.501 58.010 124.365 1.434 2.714 5.734 10.342 10.957 13.414 3.994 2.458 9.318 2.867 12.083 2.867h173.824c18.944 0 31.795-2.867 34.304-10.035 4.198-11.622-0.819-47.104-80.179-154.419-13.363-17.869-25.088-33.331-35.379-46.848-71.936-94.413-71.936-99.174 4.25-170.854z" /> +<glyph unicode="" glyph-name="xing-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM412.826 384c0 0-4.403-8.806-7.834-15.821-3.635-7.066-12.083-9.779-17.766-9.779h-72.397c-12.8 0-12.237 9.779-9.114 16.179 3.226 6.4 4.71 9.421 4.71 9.421l57.6 115.2-32 64c0 0-1.485 3.072-4.71 9.472-3.123 6.4-3.686 16.128 9.114 16.128h72.397c5.683 0 14.131-2.714 17.766-9.728 3.43-7.066 7.834-15.872 7.834-15.872l32-64-57.6-115.2zM718.336 675.072c-3.226-6.4-4.71-9.472-4.71-9.472l-128-256 76.8-153.6c0 0 1.485-3.021 4.71-9.421 3.174-6.4 3.686-16.179-9.114-16.179h-72.397c-5.734 0-14.080 2.714-17.664 9.779-3.533 7.066-7.936 15.821-7.936 15.821l-76.8 153.6 128 256c0 0 4.403 8.806 7.936 15.872s11.878 9.728 17.664 9.728h72.397c12.8 0 12.237-9.728 9.114-16.128z" /> +<glyph unicode="" glyph-name="xing" d="M906.394 921.6h-144.794c-11.418 0-28.314-5.376-35.328-19.507s-15.872-31.693-15.872-31.693l-256-512 153.6-307.2c0 0 8.806-17.613 15.872-31.693s23.91-19.507 35.328-19.507h144.794c25.6 0 24.576 19.507 18.176 32.307s-9.37 18.893-9.37 18.893l-153.6 307.2 256 512c0 0 3.021 6.093 9.421 18.893s7.373 32.307-18.227 32.307zM348.928 697.293c-7.014 14.131-23.91 19.507-35.328 19.507h-144.794c-25.6 0-24.576-19.507-18.176-32.307s9.37-18.893 9.37-18.893l64-128-115.2-230.4c0 0-3.021-6.093-9.421-18.893s-7.373-32.307 18.227-32.307h144.794c11.418 0 28.314 5.427 35.379 19.507 7.014 14.080 15.821 31.693 15.821 31.693l115.2 230.4-64 128c0 0-8.806 17.613-15.872 31.693z" /> +<glyph unicode="" glyph-name="yelp" d="M641.946 334.285l231.578-75.059c0 0 33.126-6.093 32.768-28.262-0.205-15.616-10.086-33.382-10.086-33.382l-97.792-141.107c0 0-17.459-14.643-35.123-14.643-17.613 0-37.939 27.494-37.939 27.494l-123.75 208.538c0 0-13.926 30.413 2.56 47.155 15.104 15.36 37.786 9.267 37.786 9.267zM592.384 430.080c11.827-20.275 44.544-14.387 44.544-14.387l231.066 68.147c0 0 31.488 12.954 35.994 30.157 4.403 17.254-5.222 38.042-5.222 38.042l-110.438 131.277c0 0-9.574 16.589-29.44 18.278-21.914 1.894-35.379-24.883-35.379-24.883l-130.56-207.36c0.051 0.051-11.469-20.582-0.563-39.27zM483.226 510.925c27.187 6.758 31.539 46.643 31.539 46.643l-1.843 332.032c0 0-4.096 40.96-22.323 52.070-28.621 17.51-37.069 8.397-45.261 7.168l-191.846-71.936c0 0-18.79-6.298-28.57-22.118-13.978-22.374 14.182-55.245 14.182-55.245l199.373-274.33c0 0 19.712-20.531 44.749-14.285zM435.866 376.576c0.666 25.6-30.464 41.011-30.464 41.011l-206.234 105.114c0 0-30.566 12.698-45.414 3.84-11.315-6.758-21.402-19.046-22.374-29.85l-13.414-166.861c0 0-1.997-28.928 5.427-42.086 10.496-18.637 45.107-5.683 45.107-5.683l240.742 53.709c9.318 6.349 25.702 6.963 26.624 40.806zM495.718 286.515c-20.685 10.701-45.414-11.469-45.414-11.469l-161.178-179.098c0 0-20.122-27.392-15.002-44.186 4.813-15.77 12.8-23.603 24.064-29.133l161.894-51.558c0 0 19.61-4.096 34.509 0.256 21.094 6.195 17.203 39.526 17.203 39.526l3.635 242.483c0-0.051-0.819 23.296-19.712 33.178z" /> +<glyph unicode="" glyph-name="dribbble-with-circle" d="M525.312 461.722c1.69 0.614 3.482 1.075 5.274 1.587-4.25 9.472-8.96 19.302-14.285 29.901-96.256-28.518-188.416-28.774-204.851-28.518-0.154-1.28-0.154-2.611-0.154-3.891 0-48.384 17.408-94.874 49.050-131.379 10.547 16.998 66.458 100.403 164.966 132.301zM390.298 301.414c35.277-27.034 77.414-41.318 121.702-41.318 26.47 0 52.173 5.12 76.493 15.104-3.379 19.507-15.104 78.899-42.086 149.606-108.595-38.4-149.606-110.694-156.109-123.392zM642.816 613.018c-36.403 31.283-82.79 48.486-130.816 48.486-14.541 0-29.133-1.587-43.52-4.813 10.496-14.080 42.598-58.675 72.755-113.818 65.69 25.242 95.386 61.645 101.581 70.144zM496.896 529.203c-31.13 54.886-63.539 100.096-72.448 112.179-54.63-26.47-94.822-77.107-108.186-136.090h0.87c20.787 0 94.669 1.69 179.763 23.91zM589.517 435.405c23.808-66.202 34.765-121.19 37.888-138.803 43.622 30.72 73.421 77.875 82.381 130.202-8.909 2.714-41.062 11.315-81.51 11.315-13.21 0-26.266-0.922-38.758-2.714zM512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM512 220.314c-132.71 0-240.589 107.878-240.589 240.486 0 132.71 107.878 240.589 240.589 240.589 132.659 0 240.538-107.93 240.538-240.589 0-132.608-107.878-240.486-240.538-240.486zM559.206 508.211c4.454-9.216 8.602-18.278 12.39-27.187 1.178-2.918 2.458-5.786 3.635-8.704 14.182 1.69 29.338 2.509 45.158 2.509 43.725 0 80.026-6.4 92.211-8.806-1.126 43.52-16.538 85.811-43.622 119.808-8.192-10.547-41.882-49.306-109.773-77.619z" /> +<glyph unicode="" glyph-name="dribbble" d="M489.728 592.845c-69.53 123.597-143.923 224.41-149.35 231.834-112.179-53.043-195.891-156.416-222.054-280.934 10.547-0.205 178.278-2.202 371.405 49.101zM539.802 457.677c5.222 1.69 10.547 3.277 15.821 4.813-10.086 22.886-21.094 45.824-32.614 68.403-207.155-62.054-405.914-57.549-412.928-57.344-0.154-4.301-0.358-8.499-0.358-12.8 0-103.373 39.066-197.683 103.219-268.902l-0.256 0.307c0 0 110.080 195.277 327.117 265.523zM264.755 143.667v0.205c-2.97 2.304-6.144 4.403-9.114 6.912 5.427-4.352 9.114-7.117 9.114-7.117zM415.642 851.354c-0.358-0.102-0.768-0.205-0.768-0.205 0.307 0.102 0.717 0.102 0.717 0.102l0.051 0.102zM777.677 762.675c-70.861 62.362-163.789 100.403-265.677 100.403-32.717 0-64.41-3.994-94.822-11.315 6.144-8.192 81.664-108.493 150.426-234.701 151.654 56.781 208.947 143.974 210.074 145.613zM512-10.24c-260.096 0-470.989 210.893-470.989 470.989-0.051 260.198 210.842 471.091 470.989 471.091 260.198 0 471.040-210.893 471.040-471.091 0-260.096-210.842-470.989-471.040-470.989zM580.403 394.957c-236.083-82.278-314.061-247.706-315.648-251.085 68.301-53.299 153.907-85.299 247.194-85.299 55.706 0 108.8 11.315 157.030 31.795-5.939 35.277-29.338 158.515-85.965 305.51-0.819-0.307-1.69-0.614-2.611-0.922zM598.528 557.056c9.421-19.098 18.33-38.605 26.778-58.317 3.021-6.912 5.837-13.926 8.704-20.787 138.906 17.51 275.712-12.186 280.218-13.107-0.973 95.386-35.123 182.886-91.494 251.494-0.922-1.178-65.485-94.362-224.205-159.283zM658.483 414.464c52.787-145.203 74.189-263.27 78.285-287.283 90.317 60.979 154.522 157.696 172.39 269.824-7.987 2.56-120.627 38.246-250.675 17.459z" /> +<glyph unicode="" glyph-name="facebook-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM628.429 612.659h-73.882c-8.755 0-18.483-11.52-18.483-26.829v-53.35h92.416l-13.978-76.083h-78.438v-228.403h-87.194v228.403h-79.104v76.083h79.104v44.749c0 64.205 44.544 116.378 105.677 116.378h73.882v-80.947z" /> +<glyph unicode="" glyph-name="facebook" d="M870.4 921.6h-716.8c-56.32 0-102.4-46.080-102.4-102.4v-716.8c0-56.371 46.080-102.4 102.4-102.4h358.4v358.4h-102.4v126.72h102.4v104.96c0 110.797 62.054 188.621 192.819 188.621l92.314-0.102v-133.376h-61.286c-50.893 0-70.246-38.195-70.246-73.626v-86.528h131.482l-29.082-126.669h-102.4v-358.4h204.8c56.32 0 102.4 46.029 102.4 102.4v716.8c0 56.32-46.080 102.4-102.4 102.4z" /> +<glyph unicode="" glyph-name="flickr-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM380.723 358.4c-56.115 0-101.478 45.824-101.478 102.4s45.414 102.4 101.478 102.4c56.013 0 101.478-45.824 101.478-102.4s-45.517-102.4-101.478-102.4zM643.328 358.4c-56.064 0-101.53 45.824-101.53 102.4s45.466 102.4 101.53 102.4c56.115 0 101.478-45.824 101.478-102.4s-45.414-102.4-101.478-102.4z" /> +<glyph unicode="" glyph-name="flickr" d="M256 256c-112.026 0-202.752 91.597-202.752 204.8s90.726 204.8 202.752 204.8c111.974 0 202.752-91.597 202.752-204.8s-90.778-204.8-202.752-204.8zM768 256c-112.026 0-202.752 91.597-202.752 204.8s90.726 204.8 202.752 204.8c111.974 0 202.752-91.597 202.752-204.8s-90.778-204.8-202.752-204.8z" /> +<glyph unicode="" glyph-name="github-with-circle" d="M512.768 463.411c0 0-0.512 0-0.768 0h-0.768c-60.979 0-114.688 15.514-146.483-13.722-18.995-17.51-26.982-38.605-26.982-61.286 0-94.822 75.93-106.496 173.517-106.496h1.485c97.536 0 173.517 11.725 173.517 106.496 0 22.682-7.987 43.827-26.982 61.286-31.846 29.235-85.555 13.722-146.534 13.722zM429.722 333.824c-18.586 0-33.587 20.89-33.587 46.592s15.002 46.49 33.587 46.49c18.586 0 33.638-20.787 33.638-46.49 0.051-25.702-15.002-46.592-33.638-46.592zM594.227 333.824c-18.586 0-33.638 20.89-33.638 46.592s15.053 46.49 33.638 46.49c18.534 0 33.587-20.787 33.587-46.49 0.051-25.702-15.002-46.592-33.587-46.592zM512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM556.851 259.123c-8.806 0-26.317 0-44.851-0.102-18.534 0.102-36.045 0.102-44.851 0.102-38.912 0-193.126 3.021-193.126 188.877 0 42.701 14.643 73.984 38.656 100.096-3.789 9.421-3.994 63.078 16.384 114.483 0 0 46.899-5.12 117.811-53.811 14.797 4.147 39.987 6.246 65.126 6.246s50.278-2.099 65.178-6.195c70.912 48.691 117.811 53.811 117.811 53.811 20.378-51.405 20.224-105.114 16.384-114.483 24.013-26.112 38.656-57.395 38.656-100.096-0.051-185.958-154.266-188.928-193.178-188.928z" /> +<glyph unicode="" glyph-name="github" d="M674.816 393.779c-36.762 0-66.56-41.318-66.56-92.109 0-50.893 29.798-92.211 66.56-92.211s66.56 41.318 66.56 92.211c-0.051 50.79-29.798 92.109-66.56 92.109zM906.547 633.549c7.629 18.688 7.936 124.877-32.512 226.611 0 0-92.723-10.189-233.011-106.496-29.44 8.192-79.258 12.186-128.973 12.186-49.818 0-99.584-3.994-129.024-12.186-140.339 96.307-233.062 106.496-233.062 106.496-40.397-101.734-39.987-207.923-32.461-226.611-47.514-51.61-76.544-113.613-76.544-198.195 0-367.923 305.306-373.811 382.31-373.811 17.51 0 52.122-0.102 88.781-0.102 36.608 0 71.27 0.102 88.678 0.102 77.107 0 382.31 5.888 382.31 373.811 0 84.582-28.979 146.586-76.493 198.195zM513.434 106.752h-2.867c-193.075 0-343.501 22.989-343.501 210.688 0 45.005 15.872 86.682 53.606 121.293 62.822 57.702 169.216 27.187 289.894 27.187 0.512 0 1.024 0 1.485 0 0.512 0 0.922 0 1.382 0 120.678 0 227.123 30.515 289.997-27.187 37.632-34.611 53.504-76.288 53.504-121.293 0-187.699-150.374-210.688-343.501-210.688zM349.235 393.779c-36.762 0-66.56-41.318-66.56-92.109 0-50.893 29.798-92.211 66.56-92.211 36.813 0 66.611 41.318 66.611 92.211 0 50.79-29.798 92.109-66.611 92.109z" /> +<glyph unicode="" glyph-name="google-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM483.686 249.805c-30.874-15.002-64.102-16.589-76.954-16.589-2.458 0-3.84 0-3.84 0s-1.178 0-2.765 0c-20.070 0-119.962 4.608-119.962 95.59 0 89.395 108.8 96.41 142.131 96.41h0.87c-19.251 25.702-15.258 51.61-15.258 51.61-1.69-0.102-4.147-0.205-7.168-0.205-12.544 0-36.762 1.997-57.549 15.411-25.498 16.384-38.4 44.288-38.4 82.893 0 109.107 119.142 113.51 120.32 113.613h118.989v-2.611c0-13.312-23.91-15.923-40.192-18.125-5.53-0.819-16.64-1.894-19.763-3.482 30.157-16.128 35.021-41.421 35.021-79.104 0-42.906-16.794-65.587-34.611-81.51-11.059-9.882-19.712-17.613-19.712-28.006 0-10.189 11.878-20.582 25.702-32.717 22.579-19.917 53.555-47.002 53.555-92.723 0-47.258-20.326-81.050-60.416-100.454zM742.4 460.8h-76.8v-76.8h-51.2v76.8h-76.8v51.2h76.8v76.8h51.2v-76.8h76.8v-51.2zM421.018 401.92c-2.662 0-5.325-0.102-8.038-0.307-22.733-1.69-43.725-10.189-58.88-24.013-15.053-13.619-22.733-30.822-21.658-48.179 2.304-36.403 41.37-57.702 88.832-54.323 46.694 3.379 77.824 30.31 75.571 66.714-2.15 34.202-31.898 60.109-75.827 60.109zM465.766 599.808c-12.39 43.52-32.358 56.422-63.386 56.422-3.328 0-6.707-0.512-9.933-1.382-13.466-3.84-24.166-15.053-30.106-31.744-6.093-16.896-6.451-34.509-1.229-54.579 9.472-35.891 34.97-61.901 60.672-61.901 3.379 0 6.758 0.41 9.933 1.382 28.109 7.885 45.722 50.79 34.048 91.802z" /> +<glyph unicode="" glyph-name="google" d="M101.837 686.643c0-76.493 25.549-131.686 75.878-164.096 41.267-26.624 89.088-30.618 113.971-30.618 6.042 0 10.906 0.307 14.285 0.512 0 0-7.885-51.405 30.208-102.195h-1.741c-65.997 0-281.242-13.773-281.242-190.822 0-180.019 197.683-189.184 237.363-189.184 3.123 0 4.966 0.102 4.966 0.102 0.41 0 3.226-0.102 8.090-0.102 25.446 0 91.238 3.174 152.32 32.922 79.258 38.4 119.45 105.421 119.45 198.912 0 90.317-61.235 144.077-105.933 183.398-27.29 24.013-50.893 44.698-50.893 64.819 0 20.48 17.254 35.891 39.014 55.398 35.277 31.488 68.557 76.39 68.557 161.28 0 74.598-9.677 124.723-69.325 156.518 6.195 3.174 28.211 5.478 39.066 7.014 32.307 4.403 79.565 9.421 79.565 35.789v5.069h-235.469c-2.355-0.102-238.131-8.806-238.131-224.717zM481.946 225.178c4.506-71.987-57.088-125.082-149.606-131.789-93.952-6.912-171.264 35.379-175.77 107.315-2.202 34.611 13.005 68.403 42.752 95.386 30.157 27.29 71.578 44.186 116.634 47.514 5.325 0.307 10.598 0.614 15.872 0.614 86.989-0.051 145.869-51.149 150.118-119.040zM420.454 735.949c23.091-81.306-11.776-166.195-67.379-181.914-6.4-1.792-12.954-2.662-19.661-2.662-50.893 0-101.325 51.507-120.064 122.522-10.445 39.731-9.574 74.65 2.406 108.134 11.725 33.024 32.922 55.194 59.546 62.72 6.4 1.792 13.005 2.714 19.712 2.714 61.44 0 100.966-25.498 125.44-111.514zM819.2 563.2v153.6h-102.4v-153.6h-153.6v-102.4h153.6v-153.6h102.4v153.6h153.6v102.4h-153.6z" /> +<glyph unicode="" glyph-name="instagram-with-circle" d="M665.6 460.8c0-84.838-68.762-153.6-153.6-153.6s-153.6 68.762-153.6 153.6c0 8.755 0.922 17.306 2.509 25.6h-53.709v-204.646c0-14.234 11.52-25.754 25.754-25.754h358.144c14.182 0 25.702 11.52 25.702 25.754v204.646h-53.709c1.587-8.294 2.509-16.845 2.509-25.6zM512 358.4c56.525 0 102.4 45.875 102.4 102.4s-45.875 102.4-102.4 102.4-102.4-45.875-102.4-102.4 45.875-102.4 102.4-102.4zM634.88 568.32h61.389c8.499 0 15.411 6.912 15.411 15.36v61.389c0 8.499-6.912 15.411-15.411 15.411h-61.389c-8.499 0-15.411-6.912-15.411-15.411v-61.389c0.051-8.448 6.963-15.36 15.411-15.36zM512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52c271.462 0 491.52 220.058 491.52 491.52s-220.058 491.52-491.52 491.52zM768 261.683c0-31.283-25.6-56.883-56.883-56.883h-398.234c-31.283 0-56.883 25.6-56.883 56.883v398.234c0 31.283 25.6 56.883 56.883 56.883h398.234c31.283 0 56.883-25.6 56.883-56.883v-398.234z" /> +<glyph unicode="" glyph-name="instagram" d="M870.4 921.6h-716.8c-56.32 0-102.4-46.080-102.4-102.4v-716.8c0-56.371 46.080-102.4 102.4-102.4h716.8c56.32 0 102.4 46.029 102.4 102.4v716.8c0 56.32-46.080 102.4-102.4 102.4zM511.181 178.022c156.621 0 283.546 127.027 283.546 283.597 0 17.306-2.202 33.997-5.274 50.381h80.947v-369.459c0-19.558-15.872-35.328-35.482-35.328h-645.837c-19.61 0-35.482 15.77-35.482 35.328v369.459h79.309c-3.123-16.384-5.325-33.075-5.325-50.381 0-156.621 127.027-283.597 283.597-283.597zM333.978 461.619c0 97.894 79.36 177.203 177.254 177.203 97.843 0 177.254-79.309 177.254-177.203s-79.411-177.254-177.254-177.254c-97.946 0-177.254 79.36-177.254 177.254zM834.918 665.6h-82.688c-19.558 0-35.43 15.974-35.43 35.43v82.79c0 19.558 15.872 35.379 35.379 35.379h82.688c19.661 0 35.533-15.821 35.533-35.379v-82.739c0-19.507-15.872-35.482-35.482-35.482z" /> +<glyph unicode="" glyph-name="lastfm-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM647.373 315.904c-102.502 0-138.086 46.592-156.979 104.602l-18.995 59.699c-14.182 43.571-25.651 75.11-77.773 75.11-36.147 0-83.251-23.706-83.251-97.178 0-57.293 39.424-93.184 80.282-93.184 34.662 0 55.501 19.507 66.355 29.286l18.125-51.814c-12.339-8.909-37.581-26.47-87.398-26.47-68.915 0-134.4 48.998-134.4 139.776 0 94.413 68.25 150.016 138.496 150.016 78.848 0 108.186-28.672 133.12-106.394l19.558-59.699c14.234-43.622 44.288-75.315 104.141-75.315 40.294 0 61.645 9.011 61.645 31.078 0 17.306-10.086 29.901-40.294 37.018l-40.294 9.626c-49.203 11.878-68.762 37.581-68.762 78.285 0 65.075 52.122 85.402 105.523 85.402 60.467 0 97.178-22.118 101.888-75.878l-59.238-7.117c-2.355 25.6-17.766 36.403-46.234 36.403-26.061 0-42.035-11.981-42.035-32.307 0-17.92 7.68-28.621 33.792-34.611l37.888-8.397c50.944-11.93 78.234-37.018 78.234-85.402-0.051-59.853-49.869-82.534-123.392-82.534z" /> +<glyph unicode="" glyph-name="lastfm" d="M438.989 226.509c-24.422-17.818-74.496-52.429-173.107-52.429-136.243 0-265.882 96.922-265.882 276.736 0 186.778 135.014 296.704 274.125 296.704 156.006 0 214.17-56.73 263.373-210.381l38.707-118.221c28.211-86.426 87.706-148.992 206.131-148.992 79.77 0 121.958 17.715 121.958 61.389 0 34.304-19.917 59.187-79.718 73.421l-79.821 18.893c-97.28 23.603-135.987 74.496-135.987 154.88 0 128.819 103.219 169.011 208.742 169.011 119.654 0 192.358-43.725 201.728-150.118l-117.299-14.182c-4.71 50.79-35.226 72.090-91.494 72.090-51.61 0-83.302-23.603-83.302-63.795 0-35.482 15.309-56.781 66.918-68.608l75.059-16.589c100.864-23.603 154.88-73.318 154.88-169.114 0-118.221-98.509-163.123-244.019-163.123-202.906 0-273.306 92.211-310.784 206.899l-37.581 118.221c-28.109 86.374-50.688 148.582-153.907 148.582-71.578 0-164.813-46.899-164.813-192.307 0-113.51 77.978-184.525 158.925-184.525 68.608 0 109.875 38.605 131.277 57.907l35.891-102.349z" /> +<glyph unicode="" glyph-name="linkedin-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM391.68 257.075h-99.533v320.307h99.533v-320.307zM341.299 616.704c-31.437 0-51.763 22.272-51.763 49.818 0 28.109 20.941 49.715 53.043 49.715s51.763-21.606 52.378-49.715c0-27.546-20.275-49.818-53.658-49.818zM755.2 257.075h-99.533v177.51c0 41.318-14.438 69.376-50.432 69.376-27.494 0-43.827-18.995-51.046-37.274-2.662-6.502-3.328-15.718-3.328-24.883v-184.678h-99.584v218.112c0 39.987-1.28 73.421-2.611 102.195h86.477l4.557-44.493h1.997c13.107 20.89 45.21 51.712 98.918 51.712 65.485 0 114.586-43.878 114.586-138.189v-189.389z" /> +<glyph unicode="" glyph-name="linkedin" d="M256 819.2c0-54.374-36.352-101.171-102.451-101.171-62.208 0-102.349 44.134-102.349 98.509 0 55.808 38.912 105.062 102.4 105.062s101.171-46.592 102.4-102.4zM51.2 0v665.6h204.8v-665.6h-204.8zM358.4 438.067c0 79.104-2.611 145.203-5.222 202.291h184.013l9.114-88.218h3.891c25.907 41.523 89.395 102.4 195.686 102.4 129.638 0 226.918-86.784 226.918-273.51v-381.030h-204.8v351.283c0 81.613-31.078 143.872-102.4 143.872-54.374 0-81.613-44.032-95.898-80.333-5.222-13.005-6.502-31.13-6.502-49.306v-365.517h-204.8v438.067z" /> +<glyph unicode="" glyph-name="pinterest-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM545.638 344.32c-31.539 2.406-44.749 18.022-69.427 32.973-13.568-71.219-30.157-139.52-79.309-175.206-15.206 107.725 22.221 188.518 39.629 274.381-29.645 49.92 3.533 150.323 66.099 125.645 76.954-30.515-66.662-185.6 29.747-205.005 100.659-20.173 141.773 174.694 79.36 237.978-90.214 91.494-262.502 2.099-241.306-128.87 5.12-32 38.246-41.728 13.21-85.914-57.702 12.8-74.957 58.317-72.704 118.989 3.533 99.328 89.242 168.909 175.155 178.483 108.698 12.083 210.688-39.885 224.819-142.182 15.821-115.405-49.101-240.282-165.274-231.27z" /> +<glyph unicode="" glyph-name="pinterest" d="M441.19 295.578c-26.931-141.005-59.75-276.173-157.082-346.778-30.003 213.094 44.083 373.094 78.541 542.976-58.726 98.816 7.066 297.574 130.816 248.576 152.32-60.211-131.891-367.206 58.88-405.606 199.219-39.987 280.525 345.6 156.979 470.989-178.432 181.146-519.475 4.25-477.491-255.078 10.189-63.386 75.674-82.586 26.163-170.086-114.227 25.293-148.326 115.405-143.923 235.52 7.066 196.608 176.589 334.182 346.675 353.28 215.091 24.115 416.973-79.002 444.877-281.293 31.386-228.403-97.075-475.802-327.117-457.984-62.362 4.864-88.474 35.789-137.318 65.485z" /> +<glyph unicode="" glyph-name="rdio" d="M829.594 460.749c0-220.518-176.538-399.309-394.291-399.309s-394.342 178.79-394.342 399.309c0 220.621 176.538 399.411 394.291 399.411 31.283 0 61.645-3.891 90.829-10.906v-227.379c-46.182 16.896-102.912 14.387-156.314-11.418-96.512-46.592-145.459-151.398-109.312-233.984 36.096-82.688 143.718-112.026 240.179-65.382 66.509 32.102 125.082 109.414 125.082 206.285v293.069c8.294-4.608 16.384-9.626 24.32-14.797 74.957-47.104 186.266-110.182 316.314-116.787 50.688-2.509-19.917-130.099-140.186-165.683 2.253-17.101 3.43-34.611 3.43-52.429z" /> +<glyph unicode="" glyph-name="stumbleupon-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM512 574.208c-15.002 0-27.187-12.186-27.187-27.085v-162.202c0-63.693-51.968-115.507-115.763-115.507s-115.763 51.814-115.763 115.507v67.891h88.525v-67.891c0-15.002 12.186-27.085 27.187-27.085s27.187 12.083 27.187 27.085v162.202c0.102 63.693 51.968 115.456 115.814 115.456 63.795 0 115.763-51.814 115.763-115.507v-30.874l-53.248-17.101-35.328 17.101v30.925c0 14.899-12.134 27.085-27.187 27.085zM770.714 384.922c0-63.693-51.968-115.507-115.763-115.507-63.846 0-115.814 51.814-115.814 115.507v69.325l35.328-17.101 53.248 17.101v-69.325c0-15.002 12.186-27.085 27.187-27.085s27.136 12.083 27.136 27.085v67.891h88.627v-67.891z" /> +<glyph unicode="" glyph-name="stumbleupon" d="M565.811 560.179l69.888-33.792 105.421 33.792v61.133c0 126.106-102.81 228.608-229.12 228.608s-229.12-102.502-229.12-228.608v-321.024c0-29.594-24.166-53.709-53.811-53.709-29.696 0-53.811 24.115-53.811 53.709v134.4h-175.258v-134.4c0-126.003 102.758-228.608 229.12-228.608 126.31 0 229.069 102.605 229.069 228.608v321.024c0 29.594 24.166 53.709 53.862 53.709 29.645 0 53.811-24.115 53.811-53.709v-61.133zM848.691 434.688v-134.4c0-29.594-24.115-53.709-53.811-53.709s-53.811 24.115-53.811 53.709v137.114l-105.421-33.69-69.888 33.69v-137.114c0-126.003 102.81-228.608 229.12-228.608s229.12 102.605 229.12 228.608v134.4h-175.309z" /> +<glyph unicode="" glyph-name="tumblr-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM643.942 248.781c-20.122-9.626-38.298-16.282-54.579-20.224-16.282-3.789-33.894-5.786-52.787-5.786-21.504 0-40.499 2.816-57.037 8.294s-30.618 13.312-42.291 23.501c-11.674 10.086-19.763 20.992-24.269 32.41-4.506 11.52-6.758 28.109-6.758 49.818v167.014h-52.019v67.277c18.381 6.093 34.304 14.797 47.462 26.214 13.158 11.315 23.757 24.883 31.693 40.806 7.987 15.872 13.466 36.198 16.486 60.672h66.918v-120.32h111.616v-74.65h-111.616v-122.112c0-27.597 1.434-45.312 4.352-53.094 2.867-7.885 8.243-14.080 16.128-18.79 10.445-6.298 22.374-9.472 35.686-9.472 23.859 0 47.514 7.885 71.066 23.603v-75.162z" /> +<glyph unicode="" glyph-name="tumblr" d="M798.72 41.165c-39.782-18.995-75.776-32.307-107.981-39.987-32.256-7.578-67.123-11.418-104.602-11.418-42.547 0-80.179 5.478-112.896 16.282-32.717 10.906-60.57 26.419-83.712 46.49-23.091 20.224-39.117 41.574-48.026 64.205-8.909 22.682-13.363 55.603-13.363 98.611v330.496h-102.861v133.325c36.557 11.981 67.891 29.184 93.952 51.712 26.112 22.426 47.002 49.408 62.822 80.896 15.77 31.386 26.573 71.475 32.563 120.064h132.352v-238.182h220.877v-147.814h-220.877v-241.613c0-54.579 2.867-89.702 8.602-105.216 5.683-15.514 16.333-27.904 31.846-37.12 20.634-12.493 44.186-18.79 70.707-18.79 47.104 0 94.003 15.514 140.595 46.49v-148.429z" /> +<glyph unicode="" glyph-name="twitter-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM711.936 549.683c0.205-4.198 0.256-8.397 0.256-12.493 0-128-97.331-275.507-275.405-275.507-54.682 0-105.574 15.974-148.378 43.52 7.526-0.922 15.258-1.28 23.091-1.28 45.363 0 87.091 15.411 120.218 41.421-42.342 0.819-78.080 28.774-90.419 67.174 5.888-1.075 11.93-1.69 18.176-1.69 8.806 0 17.408 1.178 25.498 3.379-44.288 8.909-77.67 48.026-77.67 94.925v1.178c13.056-7.219 28.006-11.622 43.878-12.134-26.010 17.408-43.059 47.002-43.059 80.64 0 17.715 4.762 34.406 13.107 48.691 47.77-58.573 119.040-97.075 199.526-101.222-1.69 7.117-2.509 14.49-2.509 22.118 0 53.402 43.315 96.819 96.819 96.819 27.802 0 52.992-11.776 70.656-30.618 22.067 4.403 42.752 12.39 61.44 23.501-7.219-22.579-22.528-41.574-42.547-53.606 19.61 2.406 38.246 7.578 55.603 15.309-12.954-19.405-29.389-36.506-48.282-50.125z" /> +<glyph unicode="" glyph-name="twitter" d="M886.579 653.005c0.41-8.294 0.563-16.691 0.563-24.986 0-255.488-194.406-549.99-549.888-549.99-109.21 0-210.739 32-296.294 86.886 15.155-1.792 30.515-2.714 46.080-2.714 90.624 0 173.926 30.925 240.026 82.688-84.531 1.587-155.955 57.395-180.531 134.195 11.776-2.202 23.91-3.379 36.352-3.379 17.664 0 34.765 2.304 50.944 6.707-88.422 17.818-155.034 95.898-155.034 189.594 0 0.819 0 1.587 0 2.406 26.061-14.49 55.91-23.194 87.552-24.218-51.866 34.714-86.016 93.798-86.016 160.922 0 35.379 9.523 68.608 26.214 97.178 95.283-116.992 237.773-193.894 398.387-201.984-3.277 14.182-4.966 28.877-4.966 44.083 0 106.701 86.477 193.178 193.229 193.178 55.603 0 105.83-23.398 141.107-60.979 43.981 8.704 85.35 24.781 122.726 46.899-14.438-45.107-45.107-82.995-84.992-106.906 39.117 4.71 76.288 15.002 111.002 30.413-25.907-38.81-58.675-72.806-96.461-99.994z" /> +<glyph unicode="" glyph-name="vimeo-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM737.331 555.52c-26.010-149.299-171.418-275.814-215.091-304.691-43.725-28.774-83.661 11.622-98.099 42.189-16.589 34.918-66.202 223.898-79.206 239.616-13.005 15.667-52.019-15.718-52.019-15.718l-18.893 25.293c0 0 79.206 96.41 139.469 108.39 63.898 12.8 63.795-99.891 79.155-162.509 14.899-60.57 24.883-95.181 37.837-95.181 13.005 0 37.837 33.69 64.973 85.504 27.238 51.814-1.126 97.587-54.323 65.024 21.248 130.048 222.208 161.382 196.198 12.083z" /> +<glyph unicode="" glyph-name="vimeo" d="M968.192 673.792c-51.507-295.578-339.2-545.792-425.728-602.982-86.528-57.088-165.53 22.886-194.15 83.507-32.819 68.966-131.021 443.187-156.774 474.163-25.754 31.027-102.912-30.976-102.912-30.976l-37.427 49.971c0 0 156.723 190.72 276.019 214.579 126.464 25.242 126.259-197.837 156.672-321.638 29.389-119.91 49.203-188.416 74.906-188.416s74.854 66.816 128.614 169.216c53.914 102.605-2.304 193.126-107.571 128.717 42.138 257.382 439.859 319.283 388.352 23.859z" /> +<glyph unicode="" glyph-name="youtube-with-circle" d="M594.074 469.35l-114.995 53.658c-10.035 4.659-18.278-0.563-18.278-11.674v-101.069c0-11.11 8.243-16.333 18.278-11.674l114.944 53.658c10.086 4.71 10.086 12.39 0.051 17.101zM512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM512 261.12c-251.597 0-256 22.682-256 199.68s4.403 199.68 256 199.68 256-22.682 256-199.68-4.403-199.68-256-199.68z" /> +<glyph unicode="" glyph-name="youtube" d="M512 855.040c-503.194 0-512-44.749-512-394.24s8.806-394.24 512-394.24 512 44.749 512 394.24-8.806 394.24-512 394.24zM676.096 443.699l-229.888-107.315c-20.122-9.318-36.608 1.126-36.608 23.347v202.138c0 22.17 16.486 32.666 36.608 23.347l229.888-107.315c20.122-9.421 20.122-24.781 0-34.202z" /> +</font></defs></svg>
@@ -0,0 +1,9 @@
+/* axios v0.16.2 | (c) 2017 by Matt Zabriskie */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.axios=t():e.axios=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";function r(e){var t=new s(e),n=i(s.prototype.request,t);return o.extend(n,s.prototype,t),o.extend(n,t),n}var o=n(2),i=n(3),s=n(5),u=n(6),a=r(u);a.Axios=s,a.create=function(e){return r(o.merge(u,e))},a.Cancel=n(23),a.CancelToken=n(24),a.isCancel=n(20),a.all=function(e){return Promise.all(e)},a.spread=n(25),e.exports=a,e.exports.default=a},function(e,t,n){"use strict";function r(e){return"[object Array]"===R.call(e)}function o(e){return"[object ArrayBuffer]"===R.call(e)}function i(e){return"undefined"!=typeof FormData&&e instanceof FormData}function s(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function p(e){return"[object Date]"===R.call(e)}function d(e){return"[object File]"===R.call(e)}function l(e){return"[object Blob]"===R.call(e)}function h(e){return"[object Function]"===R.call(e)}function m(e){return f(e)&&h(e.pipe)}function y(e){return"undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams}function w(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function v(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)}function g(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||r(e)||(e=[e]),r(e))for(var n=0,o=e.length;n<o;n++)t.call(null,e[n],n,e);else for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.call(null,e[i],i,e)}function x(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=x(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;n<r;n++)g(arguments[n],e);return t}function b(e,t,n){return g(t,function(t,r){n&&"function"==typeof t?e[r]=E(t,n):e[r]=t}),e}var E=n(3),C=n(4),R=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isBuffer:C,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:p,isFile:d,isBlob:l,isFunction:h,isStream:m,isURLSearchParams:y,isStandardBrowserEnv:v,forEach:g,merge:x,extend:b,trim:w}},function(e,t){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return e.apply(t,n)}}},function(e,t){function n(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function r(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&n(e.slice(0,0))}/*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org> + * @license MIT + */ +e.exports=function(e){return null!=e&&(n(e)||r(e)||!!e._isBuffer)}},function(e,t,n){"use strict";function r(e){this.defaults=e,this.interceptors={request:new s,response:new s}}var o=n(6),i=n(2),s=n(17),u=n(18),a=n(21),c=n(22);r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.method=e.method.toLowerCase(),e.baseURL&&!a(e.url)&&(e.url=c(e.baseURL,e.url));var t=[u,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n},i.forEach(["delete","get","head","options"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))}}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))}}),e.exports=r},function(e,t,n){"use strict";function r(e,t){!i.isUndefined(e)&&i.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}function o(){var e;return"undefined"!=typeof XMLHttpRequest?e=n(8):"undefined"!=typeof process&&(e=n(8)),e}var i=n(2),s=n(7),u={"Content-Type":"application/x-www-form-urlencoded"},a={adapter:o(),transformRequest:[function(e,t){return s(t,"Content-Type"),i.isFormData(e)||i.isArrayBuffer(e)||i.isBuffer(e)||i.isStream(e)||i.isFile(e)||i.isBlob(e)?e:i.isArrayBufferView(e)?e.buffer:i.isURLSearchParams(e)?(r(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):i.isObject(e)?(r(t,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(e){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300}};a.headers={common:{Accept:"application/json, text/plain, */*"}},i.forEach(["delete","get","head"],function(e){a.headers[e]={}}),i.forEach(["post","put","patch"],function(e){a.headers[e]=i.merge(u)}),e.exports=a},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){r.forEach(e,function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])})}},function(e,t,n){"use strict";var r=n(2),o=n(9),i=n(12),s=n(13),u=n(14),a=n(10),c="undefined"!=typeof window&&window.btoa&&window.btoa.bind(window)||n(15);e.exports=function(e){return new Promise(function(t,f){var p=e.data,d=e.headers;r.isFormData(p)&&delete d["Content-Type"];var l=new XMLHttpRequest,h="onreadystatechange",m=!1;if("undefined"==typeof window||!window.XDomainRequest||"withCredentials"in l||u(e.url)||(l=new window.XDomainRequest,h="onload",m=!0,l.onprogress=function(){},l.ontimeout=function(){}),e.auth){var y=e.auth.username||"",w=e.auth.password||"";d.Authorization="Basic "+c(y+":"+w)}if(l.open(e.method.toUpperCase(),i(e.url,e.params,e.paramsSerializer),!0),l.timeout=e.timeout,l[h]=function(){if(l&&(4===l.readyState||m)&&(0!==l.status||l.responseURL&&0===l.responseURL.indexOf("file:"))){var n="getAllResponseHeaders"in l?s(l.getAllResponseHeaders()):null,r=e.responseType&&"text"!==e.responseType?l.response:l.responseText,i={data:r,status:1223===l.status?204:l.status,statusText:1223===l.status?"No Content":l.statusText,headers:n,config:e,request:l};o(t,f,i),l=null}},l.onerror=function(){f(a("Network Error",e,null,l)),l=null},l.ontimeout=function(){f(a("timeout of "+e.timeout+"ms exceeded",e,"ECONNABORTED",l)),l=null},r.isStandardBrowserEnv()){var v=n(16),g=(e.withCredentials||u(e.url))&&e.xsrfCookieName?v.read(e.xsrfCookieName):void 0;g&&(d[e.xsrfHeaderName]=g)}if("setRequestHeader"in l&&r.forEach(d,function(e,t){"undefined"==typeof p&&"content-type"===t.toLowerCase()?delete d[t]:l.setRequestHeader(t,e)}),e.withCredentials&&(l.withCredentials=!0),e.responseType)try{l.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress&&l.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&l.upload&&l.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function(e){l&&(l.abort(),f(e),l=null)}),void 0===p&&(p=null),l.send(p)})}},function(e,t,n){"use strict";var r=n(10);e.exports=function(e,t,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(r("Request failed with status code "+n.status,n.config,null,n.request,n)):e(n)}},function(e,t,n){"use strict";var r=n(11);e.exports=function(e,t,n,o,i){var s=new Error(e);return r(s,t,n,o,i)}},function(e,t){"use strict";e.exports=function(e,t,n,r,o){return e.config=t,n&&(e.code=n),e.request=r,e.response=o,e}},function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=n(2);e.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else if(o.isURLSearchParams(t))i=t.toString();else{var s=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),s.push(r(t)+"="+r(e))}))}),i=s.join("&")}return i&&(e+=(e.indexOf("?")===-1?"?":"&")+i),e}},function(e,t,n){"use strict";var r=n(2);e.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},function(e,t){"use strict";function n(){this.message="String contains an invalid character"}function r(e){for(var t,r,i=String(e),s="",u=0,a=o;i.charAt(0|u)||(a="=",u%1);s+=a.charAt(63&t>>8-u%1*8)){if(r=i.charCodeAt(u+=.75),r>255)throw new n;t=t<<8|r}return s}var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",e.exports=r},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){"use strict";function r(){this.handlers=[]}var o=n(2);r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=r},function(e,t,n){"use strict";function r(e){e.cancelToken&&e.cancelToken.throwIfRequested()}var o=n(2),i=n(19),s=n(20),u=n(6);e.exports=function(e){r(e),e.headers=e.headers||{},e.data=i(e.data,e.headers,e.transformRequest),e.headers=o.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),o.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=e.adapter||u.adapter;return t(e).then(function(t){return r(e),t.data=i(t.data,t.headers,e.transformResponse),t},function(t){return s(t)||(r(e),t&&t.response&&(t.response.data=i(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)})}},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},function(e,t){"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},function(e,t){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},function(e,t){"use strict";function n(e){this.message=e}n.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},n.prototype.__CANCEL__=!0,e.exports=n},function(e,t,n){"use strict";function r(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(e){t=e});var n=this;e(function(e){n.reason||(n.reason=new o(e),t(n.reason))})}var o=n(23);r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var e,t=new r(function(t){e=t});return{token:t,cancel:e}},e.exports=r},function(e,t){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}}])}); +//# sourceMappingURL=axios.min.map
@@ -0,0 +1,1 @@
+{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///axios.min.js","webpack:///webpack/bootstrap f984b11ce1b235ad2090","webpack:///./index.js","webpack:///./lib/axios.js","webpack:///./lib/utils.js","webpack:///./lib/helpers/bind.js","webpack:///./~/is-buffer/index.js","webpack:///./lib/core/Axios.js","webpack:///./lib/defaults.js","webpack:///./lib/helpers/normalizeHeaderName.js","webpack:///./lib/adapters/xhr.js","webpack:///./lib/core/settle.js","webpack:///./lib/core/createError.js","webpack:///./lib/core/enhanceError.js","webpack:///./lib/helpers/buildURL.js","webpack:///./lib/helpers/parseHeaders.js","webpack:///./lib/helpers/isURLSameOrigin.js","webpack:///./lib/helpers/btoa.js","webpack:///./lib/helpers/cookies.js","webpack:///./lib/core/InterceptorManager.js","webpack:///./lib/core/dispatchRequest.js","webpack:///./lib/core/transformData.js","webpack:///./lib/cancel/isCancel.js","webpack:///./lib/helpers/isAbsoluteURL.js","webpack:///./lib/helpers/combineURLs.js","webpack:///./lib/cancel/Cancel.js","webpack:///./lib/cancel/CancelToken.js","webpack:///./lib/helpers/spread.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","createInstance","defaultConfig","context","Axios","instance","bind","prototype","request","utils","extend","defaults","axios","create","instanceConfig","merge","Cancel","CancelToken","isCancel","all","promises","Promise","spread","default","isArray","val","toString","isArrayBuffer","isFormData","FormData","isArrayBufferView","result","ArrayBuffer","isView","buffer","isString","isNumber","isUndefined","isObject","isDate","isFile","isBlob","isFunction","isStream","pipe","isURLSearchParams","URLSearchParams","trim","str","replace","isStandardBrowserEnv","navigator","product","window","document","forEach","obj","fn","i","l","length","key","Object","hasOwnProperty","assignValue","arguments","a","b","thisArg","isBuffer","args","Array","apply","constructor","isSlowBuffer","readFloatLE","slice","_isBuffer","interceptors","InterceptorManager","response","dispatchRequest","isAbsoluteURL","combineURLs","config","url","method","toLowerCase","baseURL","chain","undefined","promise","resolve","interceptor","unshift","fulfilled","rejected","push","then","shift","data","setContentTypeIfUnset","headers","value","getDefaultAdapter","adapter","XMLHttpRequest","process","normalizeHeaderName","DEFAULT_CONTENT_TYPE","Content-Type","transformRequest","JSON","stringify","transformResponse","parse","e","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","common","Accept","normalizedName","name","toUpperCase","settle","buildURL","parseHeaders","isURLSameOrigin","createError","btoa","reject","requestData","requestHeaders","loadEvent","xDomain","XDomainRequest","onprogress","ontimeout","auth","username","password","Authorization","open","params","paramsSerializer","readyState","responseURL","indexOf","responseHeaders","getAllResponseHeaders","responseData","responseType","responseText","statusText","onerror","cookies","xsrfValue","withCredentials","read","setRequestHeader","onDownloadProgress","addEventListener","onUploadProgress","upload","cancelToken","cancel","abort","send","enhanceError","message","code","error","Error","encode","encodeURIComponent","serializedParams","parts","v","toISOString","join","parsed","split","line","substr","resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","charAt","originURL","test","userAgent","createElement","location","requestURL","E","input","block","charCode","String","output","idx","map","chars","charCodeAt","write","expires","path","domain","secure","cookie","Date","toGMTString","match","RegExp","decodeURIComponent","remove","now","handlers","use","eject","h","throwIfCancellationRequested","throwIfRequested","transformData","reason","fns","__CANCEL__","relativeURL","executor","TypeError","resolvePromise","token","source","callback","arr"],"mappings":"CAAA,SAAAA,EAAAC,GACA,gBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,IACA,kBAAAG,gBAAAC,IACAD,UAAAH,GACA,gBAAAC,SACAA,QAAA,MAAAD,IAEAD,EAAA,MAAAC,KACCK,KAAA,WACD,MCAgB,UAAUC,GCN1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAP,OAGA,IAAAC,GAAAO,EAAAD,IACAP,WACAS,GAAAF,EACAG,QAAA,EAUA,OANAL,GAAAE,GAAAI,KAAAV,EAAAD,QAAAC,IAAAD,QAAAM,GAGAL,EAAAS,QAAA,EAGAT,EAAAD,QAvBA,GAAAQ,KAqCA,OATAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAQ,EAAA,GAGAR,EAAA,KDgBM,SAASL,EAAQD,EAASM,GEtDhCL,EAAAD,QAAAM,EAAA,IF4DM,SAASL,EAAQD,EAASM,GG5DhC,YAaA,SAAAS,GAAAC,GACA,GAAAC,GAAA,GAAAC,GAAAF,GACAG,EAAAC,EAAAF,EAAAG,UAAAC,QAAAL,EAQA,OALAM,GAAAC,OAAAL,EAAAD,EAAAG,UAAAJ,GAGAM,EAAAC,OAAAL,EAAAF,GAEAE,EArBA,GAAAI,GAAAjB,EAAA,GACAc,EAAAd,EAAA,GACAY,EAAAZ,EAAA,GACAmB,EAAAnB,EAAA,GAsBAoB,EAAAX,EAAAU,EAGAC,GAAAR,QAGAQ,EAAAC,OAAA,SAAAC,GACA,MAAAb,GAAAQ,EAAAM,MAAAJ,EAAAG,KAIAF,EAAAI,OAAAxB,EAAA,IACAoB,EAAAK,YAAAzB,EAAA,IACAoB,EAAAM,SAAA1B,EAAA,IAGAoB,EAAAO,IAAA,SAAAC,GACA,MAAAC,SAAAF,IAAAC,IAEAR,EAAAU,OAAA9B,EAAA,IAEAL,EAAAD,QAAA0B,EAGAzB,EAAAD,QAAAqC,QAAAX,GHmEM,SAASzB,EAAQD,EAASM,GItHhC,YAiBA,SAAAgC,GAAAC,GACA,yBAAAC,EAAA7B,KAAA4B,GASA,QAAAE,GAAAF,GACA,+BAAAC,EAAA7B,KAAA4B,GASA,QAAAG,GAAAH,GACA,yBAAAI,WAAAJ,YAAAI,UASA,QAAAC,GAAAL,GACA,GAAAM,EAMA,OAJAA,GADA,mBAAAC,0BAAA,OACAA,YAAAC,OAAAR,GAEA,GAAAA,EAAA,QAAAA,EAAAS,iBAAAF,aAWA,QAAAG,GAAAV,GACA,sBAAAA,GASA,QAAAW,GAAAX,GACA,sBAAAA,GASA,QAAAY,GAAAZ,GACA,yBAAAA,GASA,QAAAa,GAAAb,GACA,cAAAA,GAAA,gBAAAA,GASA,QAAAc,GAAAd,GACA,wBAAAC,EAAA7B,KAAA4B,GASA,QAAAe,GAAAf,GACA,wBAAAC,EAAA7B,KAAA4B,GASA,QAAAgB,GAAAhB,GACA,wBAAAC,EAAA7B,KAAA4B,GASA,QAAAiB,GAAAjB,GACA,4BAAAC,EAAA7B,KAAA4B,GASA,QAAAkB,GAAAlB,GACA,MAAAa,GAAAb,IAAAiB,EAAAjB,EAAAmB,MASA,QAAAC,GAAApB,GACA,yBAAAqB,kBAAArB,YAAAqB,iBASA,QAAAC,GAAAC,GACA,MAAAA,GAAAC,QAAA,WAAAA,QAAA,WAgBA,QAAAC,KACA,0BAAAC,YAAA,gBAAAA,UAAAC,WAIA,mBAAAC,SACA,mBAAAC,WAgBA,QAAAC,GAAAC,EAAAC,GAEA,UAAAD,GAAA,mBAAAA,GAUA,GALA,gBAAAA,IAAAhC,EAAAgC,KAEAA,OAGAhC,EAAAgC,GAEA,OAAAE,GAAA,EAAAC,EAAAH,EAAAI,OAAmCF,EAAAC,EAAOD,IAC1CD,EAAA5D,KAAA,KAAA2D,EAAAE,KAAAF,OAIA,QAAAK,KAAAL,GACAM,OAAAvD,UAAAwD,eAAAlE,KAAA2D,EAAAK,IACAJ,EAAA5D,KAAA,KAAA2D,EAAAK,KAAAL,GAuBA,QAAAzC,KAEA,QAAAiD,GAAAvC,EAAAoC,GACA,gBAAA9B,GAAA8B,IAAA,gBAAApC,GACAM,EAAA8B,GAAA9C,EAAAgB,EAAA8B,GAAApC,GAEAM,EAAA8B,GAAApC,EAIA,OATAM,MASA2B,EAAA,EAAAC,EAAAM,UAAAL,OAAuCF,EAAAC,EAAOD,IAC9CH,EAAAU,UAAAP,GAAAM,EAEA,OAAAjC,GAWA,QAAArB,GAAAwD,EAAAC,EAAAC,GAQA,MAPAb,GAAAY,EAAA,SAAA1C,EAAAoC,GACAO,GAAA,kBAAA3C,GACAyC,EAAAL,GAAAvD,EAAAmB,EAAA2C,GAEAF,EAAAL,GAAApC,IAGAyC,EApRA,GAAA5D,GAAAd,EAAA,GACA6E,EAAA7E,EAAA,GAMAkC,EAAAoC,OAAAvD,UAAAmB,QAgRAvC,GAAAD,SACAsC,UACAG,gBACA0C,WACAzC,aACAE,oBACAK,WACAC,WACAE,WACAD,cACAE,SACAC,SACAC,SACAC,aACAC,WACAE,oBACAK,uBACAK,UACAxC,QACAL,SACAqC,SJ8HM,SAAS5D,EAAQD,GK3avB,YAEAC,GAAAD,QAAA,SAAAuE,EAAAW,GACA,kBAEA,OADAE,GAAA,GAAAC,OAAAN,UAAAL,QACAF,EAAA,EAAmBA,EAAAY,EAAAV,OAAiBF,IACpCY,EAAAZ,GAAAO,UAAAP,EAEA,OAAAD,GAAAe,MAAAJ,EAAAE,MLobM,SAASnF,EAAQD,GM/avB,QAAAmF,GAAAb,GACA,QAAAA,EAAAiB,aAAA,kBAAAjB,GAAAiB,YAAAJ,UAAAb,EAAAiB,YAAAJ,SAAAb,GAIA,QAAAkB,GAAAlB,GACA,wBAAAA,GAAAmB,aAAA,kBAAAnB,GAAAoB,OAAAP,EAAAb,EAAAoB,MAAA;;;;;;AAVAzF,EAAAD,QAAA,SAAAsE,GACA,aAAAA,IAAAa,EAAAb,IAAAkB,EAAAlB,QAAAqB,aN6cM,SAAS1F,EAAQD,EAASM,GOvdhC,YAcA,SAAAY,GAAAU,GACAxB,KAAAqB,SAAAG,EACAxB,KAAAwF,cACAtE,QAAA,GAAAuE,GACAC,SAAA,GAAAD,IAhBA,GAAApE,GAAAnB,EAAA,GACAiB,EAAAjB,EAAA,GACAuF,EAAAvF,EAAA,IACAyF,EAAAzF,EAAA,IACA0F,EAAA1F,EAAA,IACA2F,EAAA3F,EAAA,GAoBAY,GAAAG,UAAAC,QAAA,SAAA4E,GAGA,gBAAAA,KACAA,EAAA3E,EAAAM,OACAsE,IAAApB,UAAA,IACKA,UAAA,KAGLmB,EAAA3E,EAAAM,MAAAJ,EAAArB,KAAAqB,UAAiD2E,OAAA,OAAgBF,GACjEA,EAAAE,OAAAF,EAAAE,OAAAC,cAGAH,EAAAI,UAAAN,EAAAE,EAAAC,OACAD,EAAAC,IAAAF,EAAAC,EAAAI,QAAAJ,EAAAC,KAIA,IAAAI,IAAAR,EAAAS,QACAC,EAAAtE,QAAAuE,QAAAR,EAUA,KARA9F,KAAAwF,aAAAtE,QAAA+C,QAAA,SAAAsC,GACAJ,EAAAK,QAAAD,EAAAE,UAAAF,EAAAG,YAGA1G,KAAAwF,aAAAE,SAAAzB,QAAA,SAAAsC,GACAJ,EAAAQ,KAAAJ,EAAAE,UAAAF,EAAAG,YAGAP,EAAA7B,QACA+B,IAAAO,KAAAT,EAAAU,QAAAV,EAAAU,QAGA,OAAAR,IAIAlF,EAAA8C,SAAA,0CAAA+B,GAEAlF,EAAAG,UAAA+E,GAAA,SAAAD,EAAAD,GACA,MAAA9F,MAAAkB,QAAAC,EAAAM,MAAAqE,OACAE,SACAD,YAKA5E,EAAA8C,SAAA,+BAAA+B,GAEAlF,EAAAG,UAAA+E,GAAA,SAAAD,EAAAe,EAAAhB,GACA,MAAA9F,MAAAkB,QAAAC,EAAAM,MAAAqE,OACAE,SACAD,MACAe,aAKAjH,EAAAD,QAAAkB,GP8dM,SAASjB,EAAQD,EAASM,GQnjBhC,YASA,SAAA6G,GAAAC,EAAAC,IACA9F,EAAA4B,YAAAiE,IAAA7F,EAAA4B,YAAAiE,EAAA,mBACAA,EAAA,gBAAAC,GAIA,QAAAC,KACA,GAAAC,EAQA,OAPA,mBAAAC,gBAEAD,EAAAjH,EAAA,GACG,mBAAAmH,WAEHF,EAAAjH,EAAA,IAEAiH,EAtBA,GAAAhG,GAAAjB,EAAA,GACAoH,EAAApH,EAAA,GAEAqH,GACAC,eAAA,qCAqBAnG,GACA8F,QAAAD,IAEAO,kBAAA,SAAAX,EAAAE,GAEA,MADAM,GAAAN,EAAA,gBACA7F,EAAAmB,WAAAwE,IACA3F,EAAAkB,cAAAyE,IACA3F,EAAA4D,SAAA+B,IACA3F,EAAAkC,SAAAyD,IACA3F,EAAA+B,OAAA4D,IACA3F,EAAAgC,OAAA2D,GAEAA,EAEA3F,EAAAqB,kBAAAsE,GACAA,EAAAlE,OAEAzB,EAAAoC,kBAAAuD,IACAC,EAAAC,EAAA,mDACAF,EAAA1E,YAEAjB,EAAA6B,SAAA8D,IACAC,EAAAC,EAAA,kCACAU,KAAAC,UAAAb,IAEAA,IAGAc,mBAAA,SAAAd,GAEA,mBAAAA,GACA,IACAA,EAAAY,KAAAG,MAAAf,GACO,MAAAgB,IAEP,MAAAhB,KAGAiB,QAAA,EAEAC,eAAA,aACAC,eAAA,eAEAC,kBAAA,EAEAC,eAAA,SAAAC,GACA,MAAAA,IAAA,KAAAA,EAAA,KAIA/G,GAAA2F,SACAqB,QACAC,OAAA,sCAIAnH,EAAA8C,SAAA,gCAAA+B,GACA3E,EAAA2F,QAAAhB,QAGA7E,EAAA8C,SAAA,+BAAA+B,GACA3E,EAAA2F,QAAAhB,GAAA7E,EAAAM,MAAA8F,KAGA1H,EAAAD,QAAAyB,GR0jBM,SAASxB,EAAQD,EAASM,GSrpBhC,YAEA,IAAAiB,GAAAjB,EAAA,EAEAL,GAAAD,QAAA,SAAAoH,EAAAuB,GACApH,EAAA8C,QAAA+C,EAAA,SAAAC,EAAAuB,GACAA,IAAAD,GAAAC,EAAAC,gBAAAF,EAAAE,gBACAzB,EAAAuB,GAAAtB,QACAD,GAAAwB,QT+pBM,SAAS3I,EAAQD,EAASM,GUvqBhC,YAEA,IAAAiB,GAAAjB,EAAA,GACAwI,EAAAxI,EAAA,GACAyI,EAAAzI,EAAA,IACA0I,EAAA1I,EAAA,IACA2I,EAAA3I,EAAA,IACA4I,EAAA5I,EAAA,IACA6I,EAAA,mBAAAhF,gBAAAgF,MAAAhF,OAAAgF,KAAA/H,KAAA+C,SAAA7D,EAAA,GAEAL,GAAAD,QAAA,SAAAkG,GACA,UAAA/D,SAAA,SAAAuE,EAAA0C,GACA,GAAAC,GAAAnD,EAAAgB,KACAoC,EAAApD,EAAAkB,OAEA7F,GAAAmB,WAAA2G,UACAC,GAAA,eAGA,IAAAhI,GAAA,GAAAkG,gBACA+B,EAAA,qBACAC,GAAA,CAiBA,IAXA,mBAAArF,UACAA,OAAAsF,gBAAA,mBAAAnI,IACA2H,EAAA/C,EAAAC,OACA7E,EAAA,GAAA6C,QAAAsF,eACAF,EAAA,SACAC,GAAA,EACAlI,EAAAoI,WAAA,aACApI,EAAAqI,UAAA,cAIAzD,EAAA0D,KAAA,CACA,GAAAC,GAAA3D,EAAA0D,KAAAC,UAAA,GACAC,EAAA5D,EAAA0D,KAAAE,UAAA,EACAR,GAAAS,cAAA,SAAAZ,EAAAU,EAAA,IAAAC,GA+DA,GA5DAxI,EAAA0I,KAAA9D,EAAAE,OAAAyC,cAAAE,EAAA7C,EAAAC,IAAAD,EAAA+D,OAAA/D,EAAAgE,mBAAA,GAGA5I,EAAA6G,QAAAjC,EAAAiC,QAGA7G,EAAAiI,GAAA,WACA,GAAAjI,IAAA,IAAAA,EAAA6I,YAAAX,KAQA,IAAAlI,EAAAkH,QAAAlH,EAAA8I,aAAA,IAAA9I,EAAA8I,YAAAC,QAAA,WAKA,GAAAC,GAAA,yBAAAhJ,GAAA0H,EAAA1H,EAAAiJ,yBAAA,KACAC,EAAAtE,EAAAuE,cAAA,SAAAvE,EAAAuE,aAAAnJ,EAAAwE,SAAAxE,EAAAoJ,aACA5E,GACAoB,KAAAsD,EAEAhC,OAAA,OAAAlH,EAAAkH,OAAA,IAAAlH,EAAAkH,OACAmC,WAAA,OAAArJ,EAAAkH,OAAA,aAAAlH,EAAAqJ,WACAvD,QAAAkD,EACApE,SACA5E,UAGAwH,GAAApC,EAAA0C,EAAAtD,GAGAxE,EAAA,OAIAA,EAAAsJ,QAAA,WAGAxB,EAAAF,EAAA,gBAAAhD,EAAA,KAAA5E,IAGAA,EAAA,MAIAA,EAAAqI,UAAA,WACAP,EAAAF,EAAA,cAAAhD,EAAAiC,QAAA,cAAAjC,EAAA,eACA5E,IAGAA,EAAA,MAMAC,EAAAyC,uBAAA,CACA,GAAA6G,GAAAvK,EAAA,IAGAwK,GAAA5E,EAAA6E,iBAAA9B,EAAA/C,EAAAC,OAAAD,EAAAkC,eACAyC,EAAAG,KAAA9E,EAAAkC,gBACA5B,MAEAsE,KACAxB,EAAApD,EAAAmC,gBAAAyC,GAuBA,GAlBA,oBAAAxJ,IACAC,EAAA8C,QAAAiF,EAAA,SAAA/G,EAAAoC,GACA,mBAAA0E,IAAA,iBAAA1E,EAAA0B,oBAEAiD,GAAA3E,GAGArD,EAAA2J,iBAAAtG,EAAApC,KAMA2D,EAAA6E,kBACAzJ,EAAAyJ,iBAAA,GAIA7E,EAAAuE,aACA,IACAnJ,EAAAmJ,aAAAvE,EAAAuE,aACO,MAAAvC,GAGP,YAAAhC,EAAAuE,aACA,KAAAvC,GAMA,kBAAAhC,GAAAgF,oBACA5J,EAAA6J,iBAAA,WAAAjF,EAAAgF,oBAIA,kBAAAhF,GAAAkF,kBAAA9J,EAAA+J,QACA/J,EAAA+J,OAAAF,iBAAA,WAAAjF,EAAAkF,kBAGAlF,EAAAoF,aAEApF,EAAAoF,YAAA7E,QAAAO,KAAA,SAAAuE,GACAjK,IAIAA,EAAAkK,QACApC,EAAAmC,GAEAjK,EAAA,QAIAkF,SAAA6C,IACAA,EAAA,MAIA/H,EAAAmK,KAAApC,OVgrBM,SAASpJ,EAAQD,EAASM,GWj2BhC,YAEA,IAAA4I,GAAA5I,EAAA,GASAL,GAAAD,QAAA,SAAA0G,EAAA0C,EAAAtD,GACA,GAAAyC,GAAAzC,EAAAI,OAAAqC,cAEAzC,GAAA0C,QAAAD,MAAAzC,EAAA0C,QAGAY,EAAAF,EACA,mCAAApD,EAAA0C,OACA1C,EAAAI,OACA,KACAJ,EAAAxE,QACAwE,IAPAY,EAAAZ,KXk3BM,SAAS7F,EAAQD,EAASM,GYj4BhC,YAEA,IAAAoL,GAAApL,EAAA,GAYAL,GAAAD,QAAA,SAAA2L,EAAAzF,EAAA0F,EAAAtK,EAAAwE,GACA,GAAA+F,GAAA,GAAAC,OAAAH,EACA,OAAAD,GAAAG,EAAA3F,EAAA0F,EAAAtK,EAAAwE,KZy4BM,SAAS7F,EAAQD,Gaz5BvB,YAYAC,GAAAD,QAAA,SAAA6L,EAAA3F,EAAA0F,EAAAtK,EAAAwE,GAOA,MANA+F,GAAA3F,SACA0F,IACAC,EAAAD,QAEAC,EAAAvK,UACAuK,EAAA/F,WACA+F,Ibi6BM,SAAS5L,EAAQD,EAASM,Gcp7BhC,YAIA,SAAAyL,GAAAxJ,GACA,MAAAyJ,oBAAAzJ,GACAwB,QAAA,aACAA,QAAA,aACAA,QAAA,YACAA,QAAA,aACAA,QAAA,YACAA,QAAA,aACAA,QAAA,aAVA,GAAAxC,GAAAjB,EAAA,EAoBAL,GAAAD,QAAA,SAAAmG,EAAA8D,EAAAC,GAEA,IAAAD,EACA,MAAA9D,EAGA,IAAA8F,EACA,IAAA/B,EACA+B,EAAA/B,EAAAD,OACG,IAAA1I,EAAAoC,kBAAAsG,GACHgC,EAAAhC,EAAAzH,eACG,CACH,GAAA0J,KAEA3K,GAAA8C,QAAA4F,EAAA,SAAA1H,EAAAoC,GACA,OAAApC,GAAA,mBAAAA,KAIAhB,EAAAe,QAAAC,KACAoC,GAAA,MAGApD,EAAAe,QAAAC,KACAA,OAGAhB,EAAA8C,QAAA9B,EAAA,SAAA4J,GACA5K,EAAA8B,OAAA8I,GACAA,IAAAC,cACS7K,EAAA6B,SAAA+I,KACTA,EAAArE,KAAAC,UAAAoE,IAEAD,EAAAnF,KAAAgF,EAAApH,GAAA,IAAAoH,EAAAI,SAIAF,EAAAC,EAAAG,KAAA,KAOA,MAJAJ,KACA9F,MAAAkE,QAAA,mBAAA4B,GAGA9F,Id47BM,SAASlG,EAAQD,EAASM,Ge9/BhC,YAEA,IAAAiB,GAAAjB,EAAA,EAeAL,GAAAD,QAAA,SAAAoH,GACA,GACAzC,GACApC,EACAiC,EAHA8H,IAKA,OAAAlF,IAEA7F,EAAA8C,QAAA+C,EAAAmF,MAAA,eAAAC,GACAhI,EAAAgI,EAAAnC,QAAA,KACA1F,EAAApD,EAAAsC,KAAA2I,EAAAC,OAAA,EAAAjI,IAAA6B,cACA9D,EAAAhB,EAAAsC,KAAA2I,EAAAC,OAAAjI,EAAA,IAEAG,IACA2H,EAAA3H,GAAA2H,EAAA3H,GAAA2H,EAAA3H,GAAA,KAAApC,OAIA+J,GAZiBA,IfkhCX,SAASrM,EAAQD,EAASM,GgBziChC,YAEA,IAAAiB,GAAAjB,EAAA,EAEAL,GAAAD,QACAuB,EAAAyC,uBAIA,WAWA,QAAA0I,GAAAvG,GACA,GAAAwG,GAAAxG,CAWA,OATAyG,KAEAC,EAAAC,aAAA,OAAAH,GACAA,EAAAE,EAAAF,MAGAE,EAAAC,aAAA,OAAAH,IAIAA,KAAAE,EAAAF,KACAI,SAAAF,EAAAE,SAAAF,EAAAE,SAAAhJ,QAAA,YACAiJ,KAAAH,EAAAG,KACAC,OAAAJ,EAAAI,OAAAJ,EAAAI,OAAAlJ,QAAA,aACAmJ,KAAAL,EAAAK,KAAAL,EAAAK,KAAAnJ,QAAA,YACAoJ,SAAAN,EAAAM,SACAC,KAAAP,EAAAO,KACAC,SAAA,MAAAR,EAAAQ,SAAAC,OAAA,GACAT,EAAAQ,SACA,IAAAR,EAAAQ,UAhCA,GAEAE,GAFAX,EAAA,kBAAAY,KAAAvJ,UAAAwJ,WACAZ,EAAAzI,SAAAsJ,cAAA,IA2CA,OARAH,GAAAb,EAAAvI,OAAAwJ,SAAAhB,MAQA,SAAAiB,GACA,GAAAtB,GAAA/K,EAAA0B,SAAA2K,GAAAlB,EAAAkB,IACA,OAAAtB,GAAAS,WAAAQ,EAAAR,UACAT,EAAAU,OAAAO,EAAAP,SAKA,WACA,kBACA,chBmjCM,SAAS/M,EAAQD,GiBnnCvB,YAMA,SAAA6N,KACAzN,KAAAuL,QAAA,uCAMA,QAAAxC,GAAA2E,GAGA,IAEA,GAAAC,GAAAC,EAJAlK,EAAAmK,OAAAH,GACAI,EAAA,GAGAC,EAAA,EAAAC,EAAAC,EAIAvK,EAAAwJ,OAAA,EAAAa,KAAAC,EAAA,IAAAD,EAAA,GAEAD,GAAAE,EAAAd,OAAA,GAAAS,GAAA,EAAAI,EAAA,KACA,CAEA,GADAH,EAAAlK,EAAAwK,WAAAH,GAAA,KACAH,EAAA,IACA,SAAAH,EAEAE,MAAA,EAAAC,EAEA,MAAAE,GA5BA,GAAAG,GAAA,mEAKAR,GAAAxM,UAAA,GAAAyK,OACA+B,EAAAxM,UAAAuK,KAAA,EACAiC,EAAAxM,UAAAuH,KAAA,wBAwBA3I,EAAAD,QAAAmJ,GjB0nCM,SAASlJ,EAAQD,EAASM,GkB7pChC,YAEA,IAAAiB,GAAAjB,EAAA,EAEAL,GAAAD,QACAuB,EAAAyC,uBAGA,WACA,OACAuK,MAAA,SAAA3F,EAAAvB,EAAAmH,EAAAC,EAAAC,EAAAC,GACA,GAAAC,KACAA,GAAA7H,KAAA6B,EAAA,IAAAoD,mBAAA3E,IAEA9F,EAAA2B,SAAAsL,IACAI,EAAA7H,KAAA,cAAA8H,MAAAL,GAAAM,eAGAvN,EAAA0B,SAAAwL,IACAG,EAAA7H,KAAA,QAAA0H,GAGAlN,EAAA0B,SAAAyL,IACAE,EAAA7H,KAAA,UAAA2H,GAGAC,KAAA,GACAC,EAAA7H,KAAA,UAGA3C,SAAAwK,SAAAvC,KAAA,OAGArB,KAAA,SAAApC,GACA,GAAAmG,GAAA3K,SAAAwK,OAAAG,MAAA,GAAAC,QAAA,aAA0DpG,EAAA,aAC1D,OAAAmG,GAAAE,mBAAAF,EAAA,UAGAG,OAAA,SAAAtG,GACAxI,KAAAmO,MAAA3F,EAAA,GAAAiG,KAAAM,MAAA,YAMA,WACA,OACAZ,MAAA,aACAvD,KAAA,WAA6B,aAC7BkE,OAAA,kBlBuqCM,SAASjP,EAAQD,EAASM,GmBxtChC,YAIA,SAAAuF,KACAzF,KAAAgP,YAHA,GAAA7N,GAAAjB,EAAA,EAcAuF,GAAAxE,UAAAgO,IAAA,SAAAxI,EAAAC,GAKA,MAJA1G,MAAAgP,SAAArI,MACAF,YACAC,aAEA1G,KAAAgP,SAAA1K,OAAA,GAQAmB,EAAAxE,UAAAiO,MAAA,SAAA7O,GACAL,KAAAgP,SAAA3O,KACAL,KAAAgP,SAAA3O,GAAA,OAYAoF,EAAAxE,UAAAgD,QAAA,SAAAE,GACAhD,EAAA8C,QAAAjE,KAAAgP,SAAA,SAAAG,GACA,OAAAA,GACAhL,EAAAgL,MAKAtP,EAAAD,QAAA6F,GnB+tCM,SAAS5F,EAAQD,EAASM,GoBlxChC,YAUA,SAAAkP,GAAAtJ,GACAA,EAAAoF,aACApF,EAAAoF,YAAAmE,mBAVA,GAAAlO,GAAAjB,EAAA,GACAoP,EAAApP,EAAA,IACA0B,EAAA1B,EAAA,IACAmB,EAAAnB,EAAA,EAiBAL,GAAAD,QAAA,SAAAkG,GACAsJ,EAAAtJ,GAGAA,EAAAkB,QAAAlB,EAAAkB,YAGAlB,EAAAgB,KAAAwI,EACAxJ,EAAAgB,KACAhB,EAAAkB,QACAlB,EAAA2B,kBAIA3B,EAAAkB,QAAA7F,EAAAM,MACAqE,EAAAkB,QAAAqB,WACAvC,EAAAkB,QAAAlB,EAAAE,YACAF,EAAAkB,aAGA7F,EAAA8C,SACA,qDACA,SAAA+B,SACAF,GAAAkB,QAAAhB,IAIA,IAAAmB,GAAArB,EAAAqB,SAAA9F,EAAA8F,OAEA,OAAAA,GAAArB,GAAAc,KAAA,SAAAlB,GAUA,MATA0J,GAAAtJ,GAGAJ,EAAAoB,KAAAwI,EACA5J,EAAAoB,KACApB,EAAAsB,QACAlB,EAAA8B,mBAGAlC,GACG,SAAA6J,GAcH,MAbA3N,GAAA2N,KACAH,EAAAtJ,GAGAyJ,KAAA7J,WACA6J,EAAA7J,SAAAoB,KAAAwI,EACAC,EAAA7J,SAAAoB,KACAyI,EAAA7J,SAAAsB,QACAlB,EAAA8B,qBAKA7F,QAAAiH,OAAAuG,OpB2xCM,SAAS1P,EAAQD,EAASM,GqBv2ChC,YAEA,IAAAiB,GAAAjB,EAAA,EAUAL,GAAAD,QAAA,SAAAkH,EAAAE,EAAAwI,GAMA,MAJArO,GAAA8C,QAAAuL,EAAA,SAAArL,GACA2C,EAAA3C,EAAA2C,EAAAE,KAGAF,IrB+2CM,SAASjH,EAAQD,GsBj4CvB,YAEAC,GAAAD,QAAA,SAAAqH,GACA,SAAAA,MAAAwI,ctBy4CM,SAAS5P,EAAQD,GuB54CvB,YAQAC,GAAAD,QAAA,SAAAmG,GAIA,sCAAAqH,KAAArH,KvBo5CM,SAASlG,EAAQD,GwBh6CvB,YASAC,GAAAD,QAAA,SAAAsG,EAAAwJ,GACA,MAAAA,GACAxJ,EAAAvC,QAAA,eAAA+L,EAAA/L,QAAA,WACAuC,IxBw6CM,SAASrG,EAAQD,GyBp7CvB,YAQA,SAAA8B,GAAA6J,GACAvL,KAAAuL,UAGA7J,EAAAT,UAAAmB,SAAA,WACA,gBAAApC,KAAAuL,QAAA,KAAAvL,KAAAuL,QAAA,KAGA7J,EAAAT,UAAAwO,YAAA,EAEA5P,EAAAD,QAAA8B,GzB27CM,SAAS7B,EAAQD,EAASM,G0B78ChC,YAUA,SAAAyB,GAAAgO,GACA,qBAAAA,GACA,SAAAC,WAAA,+BAGA,IAAAC,EACA7P,MAAAqG,QAAA,GAAAtE,SAAA,SAAAuE,GACAuJ,EAAAvJ,GAGA,IAAAwJ,GAAA9P,IACA2P,GAAA,SAAApE,GACAuE,EAAAP,SAKAO,EAAAP,OAAA,GAAA7N,GAAA6J,GACAsE,EAAAC,EAAAP,WA1BA,GAAA7N,GAAAxB,EAAA,GAiCAyB,GAAAV,UAAAoO,iBAAA,WACA,GAAArP,KAAAuP,OACA,KAAAvP,MAAAuP,QAQA5N,EAAAoO,OAAA,WACA,GAAA5E,GACA2E,EAAA,GAAAnO,GAAA,SAAAlB,GACA0K,EAAA1K,GAEA,QACAqP,QACA3E,WAIAtL,EAAAD,QAAA+B,G1Bo9CM,SAAS9B,EAAQD,G2B5gDvB,YAsBAC,GAAAD,QAAA,SAAAoQ,GACA,gBAAAC,GACA,MAAAD,GAAA9K,MAAA,KAAA+K","file":"axios.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar bind = __webpack_require__(3);\n\tvar Axios = __webpack_require__(5);\n\tvar defaults = __webpack_require__(6);\n\t\n\t/**\n\t * Create an instance of Axios\n\t *\n\t * @param {Object} defaultConfig The default config for the instance\n\t * @return {Axios} A new instance of Axios\n\t */\n\tfunction createInstance(defaultConfig) {\n\t var context = new Axios(defaultConfig);\n\t var instance = bind(Axios.prototype.request, context);\n\t\n\t // Copy axios.prototype to instance\n\t utils.extend(instance, Axios.prototype, context);\n\t\n\t // Copy context to instance\n\t utils.extend(instance, context);\n\t\n\t return instance;\n\t}\n\t\n\t// Create the default instance to be exported\n\tvar axios = createInstance(defaults);\n\t\n\t// Expose Axios class to allow class inheritance\n\taxios.Axios = Axios;\n\t\n\t// Factory for creating new instances\n\taxios.create = function create(instanceConfig) {\n\t return createInstance(utils.merge(defaults, instanceConfig));\n\t};\n\t\n\t// Expose Cancel & CancelToken\n\taxios.Cancel = __webpack_require__(23);\n\taxios.CancelToken = __webpack_require__(24);\n\taxios.isCancel = __webpack_require__(20);\n\t\n\t// Expose all/spread\n\taxios.all = function all(promises) {\n\t return Promise.all(promises);\n\t};\n\taxios.spread = __webpack_require__(25);\n\t\n\tmodule.exports = axios;\n\t\n\t// Allow use of default import syntax in TypeScript\n\tmodule.exports.default = axios;\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar bind = __webpack_require__(3);\n\tvar isBuffer = __webpack_require__(4);\n\t\n\t/*global toString:true*/\n\t\n\t// utils is a library of generic helper functions non-specific to axios\n\t\n\tvar toString = Object.prototype.toString;\n\t\n\t/**\n\t * Determine if a value is an Array\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Array, otherwise false\n\t */\n\tfunction isArray(val) {\n\t return toString.call(val) === '[object Array]';\n\t}\n\t\n\t/**\n\t * Determine if a value is an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBuffer(val) {\n\t return toString.call(val) === '[object ArrayBuffer]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a FormData\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an FormData, otherwise false\n\t */\n\tfunction isFormData(val) {\n\t return (typeof FormData !== 'undefined') && (val instanceof FormData);\n\t}\n\t\n\t/**\n\t * Determine if a value is a view on an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBufferView(val) {\n\t var result;\n\t if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n\t result = ArrayBuffer.isView(val);\n\t } else {\n\t result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Determine if a value is a String\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a String, otherwise false\n\t */\n\tfunction isString(val) {\n\t return typeof val === 'string';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Number\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Number, otherwise false\n\t */\n\tfunction isNumber(val) {\n\t return typeof val === 'number';\n\t}\n\t\n\t/**\n\t * Determine if a value is undefined\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if the value is undefined, otherwise false\n\t */\n\tfunction isUndefined(val) {\n\t return typeof val === 'undefined';\n\t}\n\t\n\t/**\n\t * Determine if a value is an Object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Object, otherwise false\n\t */\n\tfunction isObject(val) {\n\t return val !== null && typeof val === 'object';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Date\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Date, otherwise false\n\t */\n\tfunction isDate(val) {\n\t return toString.call(val) === '[object Date]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a File\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a File, otherwise false\n\t */\n\tfunction isFile(val) {\n\t return toString.call(val) === '[object File]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Blob\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Blob, otherwise false\n\t */\n\tfunction isBlob(val) {\n\t return toString.call(val) === '[object Blob]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Function\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Function, otherwise false\n\t */\n\tfunction isFunction(val) {\n\t return toString.call(val) === '[object Function]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Stream\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Stream, otherwise false\n\t */\n\tfunction isStream(val) {\n\t return isObject(val) && isFunction(val.pipe);\n\t}\n\t\n\t/**\n\t * Determine if a value is a URLSearchParams object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n\t */\n\tfunction isURLSearchParams(val) {\n\t return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n\t}\n\t\n\t/**\n\t * Trim excess whitespace off the beginning and end of a string\n\t *\n\t * @param {String} str The String to trim\n\t * @returns {String} The String freed of excess whitespace\n\t */\n\tfunction trim(str) {\n\t return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n\t}\n\t\n\t/**\n\t * Determine if we're running in a standard browser environment\n\t *\n\t * This allows axios to run in a web worker, and react-native.\n\t * Both environments support XMLHttpRequest, but not fully standard globals.\n\t *\n\t * web workers:\n\t * typeof window -> undefined\n\t * typeof document -> undefined\n\t *\n\t * react-native:\n\t * navigator.product -> 'ReactNative'\n\t */\n\tfunction isStandardBrowserEnv() {\n\t if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n\t return false;\n\t }\n\t return (\n\t typeof window !== 'undefined' &&\n\t typeof document !== 'undefined'\n\t );\n\t}\n\t\n\t/**\n\t * Iterate over an Array or an Object invoking a function for each item.\n\t *\n\t * If `obj` is an Array callback will be called passing\n\t * the value, index, and complete array for each item.\n\t *\n\t * If 'obj' is an Object callback will be called passing\n\t * the value, key, and complete object for each property.\n\t *\n\t * @param {Object|Array} obj The object to iterate\n\t * @param {Function} fn The callback to invoke for each item\n\t */\n\tfunction forEach(obj, fn) {\n\t // Don't bother if no value provided\n\t if (obj === null || typeof obj === 'undefined') {\n\t return;\n\t }\n\t\n\t // Force an array if not already something iterable\n\t if (typeof obj !== 'object' && !isArray(obj)) {\n\t /*eslint no-param-reassign:0*/\n\t obj = [obj];\n\t }\n\t\n\t if (isArray(obj)) {\n\t // Iterate over array values\n\t for (var i = 0, l = obj.length; i < l; i++) {\n\t fn.call(null, obj[i], i, obj);\n\t }\n\t } else {\n\t // Iterate over object keys\n\t for (var key in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, key)) {\n\t fn.call(null, obj[key], key, obj);\n\t }\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * Accepts varargs expecting each argument to be an object, then\n\t * immutably merges the properties of each object and returns result.\n\t *\n\t * When multiple objects contain the same key the later object in\n\t * the arguments list will take precedence.\n\t *\n\t * Example:\n\t *\n\t * ```js\n\t * var result = merge({foo: 123}, {foo: 456});\n\t * console.log(result.foo); // outputs 456\n\t * ```\n\t *\n\t * @param {Object} obj1 Object to merge\n\t * @returns {Object} Result of all merge properties\n\t */\n\tfunction merge(/* obj1, obj2, obj3, ... */) {\n\t var result = {};\n\t function assignValue(val, key) {\n\t if (typeof result[key] === 'object' && typeof val === 'object') {\n\t result[key] = merge(result[key], val);\n\t } else {\n\t result[key] = val;\n\t }\n\t }\n\t\n\t for (var i = 0, l = arguments.length; i < l; i++) {\n\t forEach(arguments[i], assignValue);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Extends object a by mutably adding to it the properties of object b.\n\t *\n\t * @param {Object} a The object to be extended\n\t * @param {Object} b The object to copy properties from\n\t * @param {Object} thisArg The object to bind function to\n\t * @return {Object} The resulting value of object a\n\t */\n\tfunction extend(a, b, thisArg) {\n\t forEach(b, function assignValue(val, key) {\n\t if (thisArg && typeof val === 'function') {\n\t a[key] = bind(val, thisArg);\n\t } else {\n\t a[key] = val;\n\t }\n\t });\n\t return a;\n\t}\n\t\n\tmodule.exports = {\n\t isArray: isArray,\n\t isArrayBuffer: isArrayBuffer,\n\t isBuffer: isBuffer,\n\t isFormData: isFormData,\n\t isArrayBufferView: isArrayBufferView,\n\t isString: isString,\n\t isNumber: isNumber,\n\t isObject: isObject,\n\t isUndefined: isUndefined,\n\t isDate: isDate,\n\t isFile: isFile,\n\t isBlob: isBlob,\n\t isFunction: isFunction,\n\t isStream: isStream,\n\t isURLSearchParams: isURLSearchParams,\n\t isStandardBrowserEnv: isStandardBrowserEnv,\n\t forEach: forEach,\n\t merge: merge,\n\t extend: extend,\n\t trim: trim\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function bind(fn, thisArg) {\n\t return function wrap() {\n\t var args = new Array(arguments.length);\n\t for (var i = 0; i < args.length; i++) {\n\t args[i] = arguments[i];\n\t }\n\t return fn.apply(thisArg, args);\n\t };\n\t};\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t/*!\n\t * Determine if an object is a Buffer\n\t *\n\t * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n\t * @license MIT\n\t */\n\t\n\t// The _isBuffer check is for Safari 5-7 support, because it's missing\n\t// Object.prototype.constructor. Remove this eventually\n\tmodule.exports = function (obj) {\n\t return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n\t}\n\t\n\tfunction isBuffer (obj) {\n\t return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n\t}\n\t\n\t// For Node v0.10 support. Remove this eventually.\n\tfunction isSlowBuffer (obj) {\n\t return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n\t}\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar defaults = __webpack_require__(6);\n\tvar utils = __webpack_require__(2);\n\tvar InterceptorManager = __webpack_require__(17);\n\tvar dispatchRequest = __webpack_require__(18);\n\tvar isAbsoluteURL = __webpack_require__(21);\n\tvar combineURLs = __webpack_require__(22);\n\t\n\t/**\n\t * Create a new instance of Axios\n\t *\n\t * @param {Object} instanceConfig The default config for the instance\n\t */\n\tfunction Axios(instanceConfig) {\n\t this.defaults = instanceConfig;\n\t this.interceptors = {\n\t request: new InterceptorManager(),\n\t response: new InterceptorManager()\n\t };\n\t}\n\t\n\t/**\n\t * Dispatch a request\n\t *\n\t * @param {Object} config The config specific for this request (merged with this.defaults)\n\t */\n\tAxios.prototype.request = function request(config) {\n\t /*eslint no-param-reassign:0*/\n\t // Allow for axios('example/url'[, config]) a la fetch API\n\t if (typeof config === 'string') {\n\t config = utils.merge({\n\t url: arguments[0]\n\t }, arguments[1]);\n\t }\n\t\n\t config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\t config.method = config.method.toLowerCase();\n\t\n\t // Support baseURL config\n\t if (config.baseURL && !isAbsoluteURL(config.url)) {\n\t config.url = combineURLs(config.baseURL, config.url);\n\t }\n\t\n\t // Hook up interceptors middleware\n\t var chain = [dispatchRequest, undefined];\n\t var promise = Promise.resolve(config);\n\t\n\t this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n\t chain.unshift(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n\t chain.push(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t while (chain.length) {\n\t promise = promise.then(chain.shift(), chain.shift());\n\t }\n\t\n\t return promise;\n\t};\n\t\n\t// Provide aliases for supported request methods\n\tutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url\n\t }));\n\t };\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, data, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url,\n\t data: data\n\t }));\n\t };\n\t});\n\t\n\tmodule.exports = Axios;\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar normalizeHeaderName = __webpack_require__(7);\n\t\n\tvar DEFAULT_CONTENT_TYPE = {\n\t 'Content-Type': 'application/x-www-form-urlencoded'\n\t};\n\t\n\tfunction setContentTypeIfUnset(headers, value) {\n\t if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n\t headers['Content-Type'] = value;\n\t }\n\t}\n\t\n\tfunction getDefaultAdapter() {\n\t var adapter;\n\t if (typeof XMLHttpRequest !== 'undefined') {\n\t // For browsers use XHR adapter\n\t adapter = __webpack_require__(8);\n\t } else if (typeof process !== 'undefined') {\n\t // For node use HTTP adapter\n\t adapter = __webpack_require__(8);\n\t }\n\t return adapter;\n\t}\n\t\n\tvar defaults = {\n\t adapter: getDefaultAdapter(),\n\t\n\t transformRequest: [function transformRequest(data, headers) {\n\t normalizeHeaderName(headers, 'Content-Type');\n\t if (utils.isFormData(data) ||\n\t utils.isArrayBuffer(data) ||\n\t utils.isBuffer(data) ||\n\t utils.isStream(data) ||\n\t utils.isFile(data) ||\n\t utils.isBlob(data)\n\t ) {\n\t return data;\n\t }\n\t if (utils.isArrayBufferView(data)) {\n\t return data.buffer;\n\t }\n\t if (utils.isURLSearchParams(data)) {\n\t setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n\t return data.toString();\n\t }\n\t if (utils.isObject(data)) {\n\t setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n\t return JSON.stringify(data);\n\t }\n\t return data;\n\t }],\n\t\n\t transformResponse: [function transformResponse(data) {\n\t /*eslint no-param-reassign:0*/\n\t if (typeof data === 'string') {\n\t try {\n\t data = JSON.parse(data);\n\t } catch (e) { /* Ignore */ }\n\t }\n\t return data;\n\t }],\n\t\n\t timeout: 0,\n\t\n\t xsrfCookieName: 'XSRF-TOKEN',\n\t xsrfHeaderName: 'X-XSRF-TOKEN',\n\t\n\t maxContentLength: -1,\n\t\n\t validateStatus: function validateStatus(status) {\n\t return status >= 200 && status < 300;\n\t }\n\t};\n\t\n\tdefaults.headers = {\n\t common: {\n\t 'Accept': 'application/json, text/plain, */*'\n\t }\n\t};\n\t\n\tutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n\t defaults.headers[method] = {};\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n\t});\n\t\n\tmodule.exports = defaults;\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n\t utils.forEach(headers, function processHeader(value, name) {\n\t if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n\t headers[normalizedName] = value;\n\t delete headers[name];\n\t }\n\t });\n\t};\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar settle = __webpack_require__(9);\n\tvar buildURL = __webpack_require__(12);\n\tvar parseHeaders = __webpack_require__(13);\n\tvar isURLSameOrigin = __webpack_require__(14);\n\tvar createError = __webpack_require__(10);\n\tvar btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || __webpack_require__(15);\n\t\n\tmodule.exports = function xhrAdapter(config) {\n\t return new Promise(function dispatchXhrRequest(resolve, reject) {\n\t var requestData = config.data;\n\t var requestHeaders = config.headers;\n\t\n\t if (utils.isFormData(requestData)) {\n\t delete requestHeaders['Content-Type']; // Let the browser set it\n\t }\n\t\n\t var request = new XMLHttpRequest();\n\t var loadEvent = 'onreadystatechange';\n\t var xDomain = false;\n\t\n\t // For IE 8/9 CORS support\n\t // Only supports POST and GET calls and doesn't returns the response headers.\n\t // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n\t if ((\"production\") !== 'test' &&\n\t typeof window !== 'undefined' &&\n\t window.XDomainRequest && !('withCredentials' in request) &&\n\t !isURLSameOrigin(config.url)) {\n\t request = new window.XDomainRequest();\n\t loadEvent = 'onload';\n\t xDomain = true;\n\t request.onprogress = function handleProgress() {};\n\t request.ontimeout = function handleTimeout() {};\n\t }\n\t\n\t // HTTP basic authentication\n\t if (config.auth) {\n\t var username = config.auth.username || '';\n\t var password = config.auth.password || '';\n\t requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n\t }\n\t\n\t request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\t\n\t // Set the request timeout in MS\n\t request.timeout = config.timeout;\n\t\n\t // Listen for ready state\n\t request[loadEvent] = function handleLoad() {\n\t if (!request || (request.readyState !== 4 && !xDomain)) {\n\t return;\n\t }\n\t\n\t // The request errored out and we didn't get a response, this will be\n\t // handled by onerror instead\n\t // With one exception: request that using file: protocol, most browsers\n\t // will return status as 0 even though it's a successful request\n\t if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n\t return;\n\t }\n\t\n\t // Prepare the response\n\t var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n\t var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n\t var response = {\n\t data: responseData,\n\t // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n\t status: request.status === 1223 ? 204 : request.status,\n\t statusText: request.status === 1223 ? 'No Content' : request.statusText,\n\t headers: responseHeaders,\n\t config: config,\n\t request: request\n\t };\n\t\n\t settle(resolve, reject, response);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle low level network errors\n\t request.onerror = function handleError() {\n\t // Real errors are hidden from us by the browser\n\t // onerror should only fire if it's a network error\n\t reject(createError('Network Error', config, null, request));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle timeout\n\t request.ontimeout = function handleTimeout() {\n\t reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n\t request));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Add xsrf header\n\t // This is only done if running in a standard browser environment.\n\t // Specifically not if we're in a web worker, or react-native.\n\t if (utils.isStandardBrowserEnv()) {\n\t var cookies = __webpack_require__(16);\n\t\n\t // Add xsrf header\n\t var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n\t cookies.read(config.xsrfCookieName) :\n\t undefined;\n\t\n\t if (xsrfValue) {\n\t requestHeaders[config.xsrfHeaderName] = xsrfValue;\n\t }\n\t }\n\t\n\t // Add headers to the request\n\t if ('setRequestHeader' in request) {\n\t utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n\t if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n\t // Remove Content-Type if data is undefined\n\t delete requestHeaders[key];\n\t } else {\n\t // Otherwise add header to the request\n\t request.setRequestHeader(key, val);\n\t }\n\t });\n\t }\n\t\n\t // Add withCredentials to request if needed\n\t if (config.withCredentials) {\n\t request.withCredentials = true;\n\t }\n\t\n\t // Add responseType to request if needed\n\t if (config.responseType) {\n\t try {\n\t request.responseType = config.responseType;\n\t } catch (e) {\n\t // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n\t // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n\t if (config.responseType !== 'json') {\n\t throw e;\n\t }\n\t }\n\t }\n\t\n\t // Handle progress if needed\n\t if (typeof config.onDownloadProgress === 'function') {\n\t request.addEventListener('progress', config.onDownloadProgress);\n\t }\n\t\n\t // Not all browsers support upload events\n\t if (typeof config.onUploadProgress === 'function' && request.upload) {\n\t request.upload.addEventListener('progress', config.onUploadProgress);\n\t }\n\t\n\t if (config.cancelToken) {\n\t // Handle cancellation\n\t config.cancelToken.promise.then(function onCanceled(cancel) {\n\t if (!request) {\n\t return;\n\t }\n\t\n\t request.abort();\n\t reject(cancel);\n\t // Clean up request\n\t request = null;\n\t });\n\t }\n\t\n\t if (requestData === undefined) {\n\t requestData = null;\n\t }\n\t\n\t // Send the request\n\t request.send(requestData);\n\t });\n\t};\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar createError = __webpack_require__(10);\n\t\n\t/**\n\t * Resolve or reject a Promise based on response status.\n\t *\n\t * @param {Function} resolve A function that resolves the promise.\n\t * @param {Function} reject A function that rejects the promise.\n\t * @param {object} response The response.\n\t */\n\tmodule.exports = function settle(resolve, reject, response) {\n\t var validateStatus = response.config.validateStatus;\n\t // Note: status is not exposed by XDomainRequest\n\t if (!response.status || !validateStatus || validateStatus(response.status)) {\n\t resolve(response);\n\t } else {\n\t reject(createError(\n\t 'Request failed with status code ' + response.status,\n\t response.config,\n\t null,\n\t response.request,\n\t response\n\t ));\n\t }\n\t};\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar enhanceError = __webpack_require__(11);\n\t\n\t/**\n\t * Create an Error with the specified message, config, error code, request and response.\n\t *\n\t * @param {string} message The error message.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t * @param {Object} [request] The request.\n\t * @param {Object} [response] The response.\n\t * @returns {Error} The created error.\n\t */\n\tmodule.exports = function createError(message, config, code, request, response) {\n\t var error = new Error(message);\n\t return enhanceError(error, config, code, request, response);\n\t};\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Update an Error with the specified config, error code, and response.\n\t *\n\t * @param {Error} error The error to update.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t * @param {Object} [request] The request.\n\t * @param {Object} [response] The response.\n\t * @returns {Error} The error.\n\t */\n\tmodule.exports = function enhanceError(error, config, code, request, response) {\n\t error.config = config;\n\t if (code) {\n\t error.code = code;\n\t }\n\t error.request = request;\n\t error.response = response;\n\t return error;\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tfunction encode(val) {\n\t return encodeURIComponent(val).\n\t replace(/%40/gi, '@').\n\t replace(/%3A/gi, ':').\n\t replace(/%24/g, '$').\n\t replace(/%2C/gi, ',').\n\t replace(/%20/g, '+').\n\t replace(/%5B/gi, '[').\n\t replace(/%5D/gi, ']');\n\t}\n\t\n\t/**\n\t * Build a URL by appending params to the end\n\t *\n\t * @param {string} url The base of the url (e.g., http://www.google.com)\n\t * @param {object} [params] The params to be appended\n\t * @returns {string} The formatted url\n\t */\n\tmodule.exports = function buildURL(url, params, paramsSerializer) {\n\t /*eslint no-param-reassign:0*/\n\t if (!params) {\n\t return url;\n\t }\n\t\n\t var serializedParams;\n\t if (paramsSerializer) {\n\t serializedParams = paramsSerializer(params);\n\t } else if (utils.isURLSearchParams(params)) {\n\t serializedParams = params.toString();\n\t } else {\n\t var parts = [];\n\t\n\t utils.forEach(params, function serialize(val, key) {\n\t if (val === null || typeof val === 'undefined') {\n\t return;\n\t }\n\t\n\t if (utils.isArray(val)) {\n\t key = key + '[]';\n\t }\n\t\n\t if (!utils.isArray(val)) {\n\t val = [val];\n\t }\n\t\n\t utils.forEach(val, function parseValue(v) {\n\t if (utils.isDate(v)) {\n\t v = v.toISOString();\n\t } else if (utils.isObject(v)) {\n\t v = JSON.stringify(v);\n\t }\n\t parts.push(encode(key) + '=' + encode(v));\n\t });\n\t });\n\t\n\t serializedParams = parts.join('&');\n\t }\n\t\n\t if (serializedParams) {\n\t url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n\t }\n\t\n\t return url;\n\t};\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\t/**\n\t * Parse headers into an object\n\t *\n\t * ```\n\t * Date: Wed, 27 Aug 2014 08:58:49 GMT\n\t * Content-Type: application/json\n\t * Connection: keep-alive\n\t * Transfer-Encoding: chunked\n\t * ```\n\t *\n\t * @param {String} headers Headers needing to be parsed\n\t * @returns {Object} Headers parsed into an object\n\t */\n\tmodule.exports = function parseHeaders(headers) {\n\t var parsed = {};\n\t var key;\n\t var val;\n\t var i;\n\t\n\t if (!headers) { return parsed; }\n\t\n\t utils.forEach(headers.split('\\n'), function parser(line) {\n\t i = line.indexOf(':');\n\t key = utils.trim(line.substr(0, i)).toLowerCase();\n\t val = utils.trim(line.substr(i + 1));\n\t\n\t if (key) {\n\t parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n\t }\n\t });\n\t\n\t return parsed;\n\t};\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs have full support of the APIs needed to test\n\t // whether the request URL is of the same origin as current location.\n\t (function standardBrowserEnv() {\n\t var msie = /(msie|trident)/i.test(navigator.userAgent);\n\t var urlParsingNode = document.createElement('a');\n\t var originURL;\n\t\n\t /**\n\t * Parse a URL to discover it's components\n\t *\n\t * @param {String} url The URL to be parsed\n\t * @returns {Object}\n\t */\n\t function resolveURL(url) {\n\t var href = url;\n\t\n\t if (msie) {\n\t // IE needs attribute set twice to normalize properties\n\t urlParsingNode.setAttribute('href', href);\n\t href = urlParsingNode.href;\n\t }\n\t\n\t urlParsingNode.setAttribute('href', href);\n\t\n\t // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\t return {\n\t href: urlParsingNode.href,\n\t protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n\t host: urlParsingNode.host,\n\t search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n\t hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n\t hostname: urlParsingNode.hostname,\n\t port: urlParsingNode.port,\n\t pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n\t urlParsingNode.pathname :\n\t '/' + urlParsingNode.pathname\n\t };\n\t }\n\t\n\t originURL = resolveURL(window.location.href);\n\t\n\t /**\n\t * Determine if a URL shares the same origin as the current location\n\t *\n\t * @param {String} requestURL The URL to test\n\t * @returns {boolean} True if URL shares the same origin, otherwise false\n\t */\n\t return function isURLSameOrigin(requestURL) {\n\t var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n\t return (parsed.protocol === originURL.protocol &&\n\t parsed.host === originURL.host);\n\t };\n\t })() :\n\t\n\t // Non standard browser envs (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return function isURLSameOrigin() {\n\t return true;\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\t\n\tvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\t\n\tfunction E() {\n\t this.message = 'String contains an invalid character';\n\t}\n\tE.prototype = new Error;\n\tE.prototype.code = 5;\n\tE.prototype.name = 'InvalidCharacterError';\n\t\n\tfunction btoa(input) {\n\t var str = String(input);\n\t var output = '';\n\t for (\n\t // initialize result and counter\n\t var block, charCode, idx = 0, map = chars;\n\t // if the next str index does not exist:\n\t // change the mapping table to \"=\"\n\t // check if d has no fractional digits\n\t str.charAt(idx | 0) || (map = '=', idx % 1);\n\t // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n\t output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n\t ) {\n\t charCode = str.charCodeAt(idx += 3 / 4);\n\t if (charCode > 0xFF) {\n\t throw new E();\n\t }\n\t block = block << 8 | charCode;\n\t }\n\t return output;\n\t}\n\t\n\tmodule.exports = btoa;\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs support document.cookie\n\t (function standardBrowserEnv() {\n\t return {\n\t write: function write(name, value, expires, path, domain, secure) {\n\t var cookie = [];\n\t cookie.push(name + '=' + encodeURIComponent(value));\n\t\n\t if (utils.isNumber(expires)) {\n\t cookie.push('expires=' + new Date(expires).toGMTString());\n\t }\n\t\n\t if (utils.isString(path)) {\n\t cookie.push('path=' + path);\n\t }\n\t\n\t if (utils.isString(domain)) {\n\t cookie.push('domain=' + domain);\n\t }\n\t\n\t if (secure === true) {\n\t cookie.push('secure');\n\t }\n\t\n\t document.cookie = cookie.join('; ');\n\t },\n\t\n\t read: function read(name) {\n\t var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n\t return (match ? decodeURIComponent(match[3]) : null);\n\t },\n\t\n\t remove: function remove(name) {\n\t this.write(name, '', Date.now() - 86400000);\n\t }\n\t };\n\t })() :\n\t\n\t // Non standard browser env (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return {\n\t write: function write() {},\n\t read: function read() { return null; },\n\t remove: function remove() {}\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tfunction InterceptorManager() {\n\t this.handlers = [];\n\t}\n\t\n\t/**\n\t * Add a new interceptor to the stack\n\t *\n\t * @param {Function} fulfilled The function to handle `then` for a `Promise`\n\t * @param {Function} rejected The function to handle `reject` for a `Promise`\n\t *\n\t * @return {Number} An ID used to remove interceptor later\n\t */\n\tInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n\t this.handlers.push({\n\t fulfilled: fulfilled,\n\t rejected: rejected\n\t });\n\t return this.handlers.length - 1;\n\t};\n\t\n\t/**\n\t * Remove an interceptor from the stack\n\t *\n\t * @param {Number} id The ID that was returned by `use`\n\t */\n\tInterceptorManager.prototype.eject = function eject(id) {\n\t if (this.handlers[id]) {\n\t this.handlers[id] = null;\n\t }\n\t};\n\t\n\t/**\n\t * Iterate over all the registered interceptors\n\t *\n\t * This method is particularly useful for skipping over any\n\t * interceptors that may have become `null` calling `eject`.\n\t *\n\t * @param {Function} fn The function to call for each interceptor\n\t */\n\tInterceptorManager.prototype.forEach = function forEach(fn) {\n\t utils.forEach(this.handlers, function forEachHandler(h) {\n\t if (h !== null) {\n\t fn(h);\n\t }\n\t });\n\t};\n\t\n\tmodule.exports = InterceptorManager;\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar transformData = __webpack_require__(19);\n\tvar isCancel = __webpack_require__(20);\n\tvar defaults = __webpack_require__(6);\n\t\n\t/**\n\t * Throws a `Cancel` if cancellation has been requested.\n\t */\n\tfunction throwIfCancellationRequested(config) {\n\t if (config.cancelToken) {\n\t config.cancelToken.throwIfRequested();\n\t }\n\t}\n\t\n\t/**\n\t * Dispatch a request to the server using the configured adapter.\n\t *\n\t * @param {object} config The config that is to be used for the request\n\t * @returns {Promise} The Promise to be fulfilled\n\t */\n\tmodule.exports = function dispatchRequest(config) {\n\t throwIfCancellationRequested(config);\n\t\n\t // Ensure headers exist\n\t config.headers = config.headers || {};\n\t\n\t // Transform request data\n\t config.data = transformData(\n\t config.data,\n\t config.headers,\n\t config.transformRequest\n\t );\n\t\n\t // Flatten headers\n\t config.headers = utils.merge(\n\t config.headers.common || {},\n\t config.headers[config.method] || {},\n\t config.headers || {}\n\t );\n\t\n\t utils.forEach(\n\t ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n\t function cleanHeaderConfig(method) {\n\t delete config.headers[method];\n\t }\n\t );\n\t\n\t var adapter = config.adapter || defaults.adapter;\n\t\n\t return adapter(config).then(function onAdapterResolution(response) {\n\t throwIfCancellationRequested(config);\n\t\n\t // Transform response data\n\t response.data = transformData(\n\t response.data,\n\t response.headers,\n\t config.transformResponse\n\t );\n\t\n\t return response;\n\t }, function onAdapterRejection(reason) {\n\t if (!isCancel(reason)) {\n\t throwIfCancellationRequested(config);\n\t\n\t // Transform response data\n\t if (reason && reason.response) {\n\t reason.response.data = transformData(\n\t reason.response.data,\n\t reason.response.headers,\n\t config.transformResponse\n\t );\n\t }\n\t }\n\t\n\t return Promise.reject(reason);\n\t });\n\t};\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\t/**\n\t * Transform the data for a request or a response\n\t *\n\t * @param {Object|String} data The data to be transformed\n\t * @param {Array} headers The headers for the request or response\n\t * @param {Array|Function} fns A single function or Array of functions\n\t * @returns {*} The resulting transformed data\n\t */\n\tmodule.exports = function transformData(data, headers, fns) {\n\t /*eslint no-param-reassign:0*/\n\t utils.forEach(fns, function transform(fn) {\n\t data = fn(data, headers);\n\t });\n\t\n\t return data;\n\t};\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function isCancel(value) {\n\t return !!(value && value.__CANCEL__);\n\t};\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Determines whether the specified URL is absolute\n\t *\n\t * @param {string} url The URL to test\n\t * @returns {boolean} True if the specified URL is absolute, otherwise false\n\t */\n\tmodule.exports = function isAbsoluteURL(url) {\n\t // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n\t // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n\t // by any combination of letters, digits, plus, period, or hyphen.\n\t return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n\t};\n\n\n/***/ },\n/* 22 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Creates a new URL by combining the specified URLs\n\t *\n\t * @param {string} baseURL The base URL\n\t * @param {string} relativeURL The relative URL\n\t * @returns {string} The combined URL\n\t */\n\tmodule.exports = function combineURLs(baseURL, relativeURL) {\n\t return relativeURL\n\t ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n\t : baseURL;\n\t};\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * A `Cancel` is an object that is thrown when an operation is canceled.\n\t *\n\t * @class\n\t * @param {string=} message The message.\n\t */\n\tfunction Cancel(message) {\n\t this.message = message;\n\t}\n\t\n\tCancel.prototype.toString = function toString() {\n\t return 'Cancel' + (this.message ? ': ' + this.message : '');\n\t};\n\t\n\tCancel.prototype.__CANCEL__ = true;\n\t\n\tmodule.exports = Cancel;\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar Cancel = __webpack_require__(23);\n\t\n\t/**\n\t * A `CancelToken` is an object that can be used to request cancellation of an operation.\n\t *\n\t * @class\n\t * @param {Function} executor The executor function.\n\t */\n\tfunction CancelToken(executor) {\n\t if (typeof executor !== 'function') {\n\t throw new TypeError('executor must be a function.');\n\t }\n\t\n\t var resolvePromise;\n\t this.promise = new Promise(function promiseExecutor(resolve) {\n\t resolvePromise = resolve;\n\t });\n\t\n\t var token = this;\n\t executor(function cancel(message) {\n\t if (token.reason) {\n\t // Cancellation has already been requested\n\t return;\n\t }\n\t\n\t token.reason = new Cancel(message);\n\t resolvePromise(token.reason);\n\t });\n\t}\n\t\n\t/**\n\t * Throws a `Cancel` if cancellation has been requested.\n\t */\n\tCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n\t if (this.reason) {\n\t throw this.reason;\n\t }\n\t};\n\t\n\t/**\n\t * Returns an object that contains a new `CancelToken` and a function that, when called,\n\t * cancels the `CancelToken`.\n\t */\n\tCancelToken.source = function source() {\n\t var cancel;\n\t var token = new CancelToken(function executor(c) {\n\t cancel = c;\n\t });\n\t return {\n\t token: token,\n\t cancel: cancel\n\t };\n\t};\n\t\n\tmodule.exports = CancelToken;\n\n\n/***/ },\n/* 25 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Syntactic sugar for invoking a function and expanding an array for arguments.\n\t *\n\t * Common use case would be to use `Function.prototype.apply`.\n\t *\n\t * ```js\n\t * function f(x, y, z) {}\n\t * var args = [1, 2, 3];\n\t * f.apply(null, args);\n\t * ```\n\t *\n\t * With `spread` this example can be re-written.\n\t *\n\t * ```js\n\t * spread(function(x, y, z) {})([1, 2, 3]);\n\t * ```\n\t *\n\t * @param {Function} callback\n\t * @returns {Function}\n\t */\n\tmodule.exports = function spread(callback) {\n\t return function wrap(arr) {\n\t return callback.apply(null, arr);\n\t };\n\t};\n\n\n/***/ }\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// axios.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap f984b11ce1b235ad2090","module.exports = require('./lib/axios');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(utils.merge(defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/axios.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar bind = require('./helpers/bind');\nvar isBuffer = require('is-buffer');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object' && !isArray(obj)) {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/utils.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/bind.js\n// module id = 3\n// module chunks = 0","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/is-buffer/index.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar defaults = require('./../defaults');\nvar utils = require('./../utils');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\nvar combineURLs = require('./../helpers/combineURLs');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n config.method = config.method.toLowerCase();\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/Axios.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/defaults.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/normalizeHeaderName.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\nvar btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || require('./../helpers/btoa');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n var loadEvent = 'onreadystatechange';\n var xDomain = false;\n\n // For IE 8/9 CORS support\n // Only supports POST and GET calls and doesn't returns the response headers.\n // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n if (process.env.NODE_ENV !== 'test' &&\n typeof window !== 'undefined' &&\n window.XDomainRequest && !('withCredentials' in request) &&\n !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\n loadEvent = 'onload';\n xDomain = true;\n request.onprogress = function handleProgress() {};\n request.ontimeout = function handleTimeout() {};\n }\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request[loadEvent] = function handleLoad() {\n if (!request || (request.readyState !== 4 && !xDomain)) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n status: request.status === 1223 ? 204 : request.status,\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/adapters/xhr.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n // Note: status is not exposed by XDomainRequest\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/settle.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/createError.js\n// module id = 10\n// module chunks = 0","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n error.request = request;\n error.response = response;\n return error;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/enhanceError.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n }\n\n if (!utils.isArray(val)) {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/buildURL.js\n// module id = 12\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/parseHeaders.js\n// module id = 13\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/isURLSameOrigin.js\n// module id = 14\n// module chunks = 0","'use strict';\n\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction E() {\n this.message = 'String contains an invalid character';\n}\nE.prototype = new Error;\nE.prototype.code = 5;\nE.prototype.name = 'InvalidCharacterError';\n\nfunction btoa(input) {\n var str = String(input);\n var output = '';\n for (\n // initialize result and counter\n var block, charCode, idx = 0, map = chars;\n // if the next str index does not exist:\n // change the mapping table to \"=\"\n // check if d has no fractional digits\n str.charAt(idx | 0) || (map = '=', idx % 1);\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n ) {\n charCode = str.charCodeAt(idx += 3 / 4);\n if (charCode > 0xFF) {\n throw new E();\n }\n block = block << 8 | charCode;\n }\n return output;\n}\n\nmodule.exports = btoa;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/btoa.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/cookies.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/InterceptorManager.js\n// module id = 17\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/dispatchRequest.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/transformData.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/cancel/isCancel.js\n// module id = 20\n// module chunks = 0","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/isAbsoluteURL.js\n// module id = 21\n// module chunks = 0","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/combineURLs.js\n// module id = 22\n// module chunks = 0","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/cancel/Cancel.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/cancel/CancelToken.js\n// module id = 24\n// module chunks = 0","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/spread.js\n// module id = 25\n// module chunks = 0"],"sourceRoot":""}
@@ -0,0 +1,1 @@
+{"version":3,"sources":["es6-shim.js"],"names":["root","factory","define","amd","exports","module","returnExports","this","_apply","Function","call","bind","apply","_call","isArray","Array","keys","Object","not","notThunker","func","notThunk","arguments","throwsError","e","valueOrFalseIfThrows","isCallableWithoutNew","arePropertyDescriptorsSupported","defineProperty","get","supportsDescriptors","functionsHaveNames","foo","name","_forEach","prototype","forEach","_reduce","reduce","_filter","filter","_some","some","object","value","force","configurable","enumerable","writable","defineProperties","map","forceOverride","method","_toString","toString","isCallable","IsCallableSlow","x","IsCallableFast","Value","getter","TypeError","proxy","originalObject","key","targetObject","originalDescriptor","getOwnPropertyDescriptor","getKey","set","setKey","redefine","property","newValue","descriptor","defineByDescriptor","preserveToString","target","source","create","properties","Prototype","supportsSubclassing","C","f","setPrototypeOf","Sub","Subclass","arg","o","constructor","getGlobal","self","window","global","Error","globals","globalIsFinite","isFinite","_indexOf","String","indexOf","_arrayIndexOfApply","_concat","concat","_strSlice","slice","_push","push","_pushApply","_shift","shift","_max","Math","max","_min","min","_floor","floor","_abs","abs","_exp","exp","_log","log","_sqrt","sqrt","_hasOwnProperty","hasOwnProperty","ArrayIterator","noop","OrigMap","Map","origMapDelete","origMapGet","origMapHas","has","origMapSet","Symbol","symbolSpecies","species","numberIsNaN","Number","isNaN","numberIsFinite","_sign","sign","number","isStandardArguments","isArguments","isLegacyArguments","length","callee","Type","primitive","string","regex","symbol","overrideNative","replacement","original","hasSymbols","$iterator$","iterator","Set","Reflect","$String","domAll","document","all","isNullOrUndefined","isNullOrUndefinedAndNotDocumentAll","ES","Call","F","V","args","IsCallable","RequireObjectCoercible","optMessage","TypeIsObject","ToObject","IsConstructor","ToInt32","ToNumber","ToUint32","ToInteger","ToLength","len","MAX_SAFE_INTEGER","SameValue","a","b","SameValueZero","IsIterable","GetIterator","itFn","GetMethod","it","p","IteratorComplete","iterResult","done","IteratorClose","completionIsThrow","returnMethod","innerResult","innerException","IteratorNext","result","next","IteratorStep","Construct","newTarget","isES6internal","construct","proto","obj","SpeciesConstructor","O","defaultConstructor","S","CreateHTML","tag","attribute","ToString","p1","escapedV","replace","p2","p3","IsRegExp","argument","isRegExp","match","defineWellKnownSymbol","sym","search","symbolSearch","originalSearch","RegExp","searchShim","regexp","searcher","symbolReplace","originalReplace","replaceValue","replaceShim","searchValue","replacer","split","symbolSplit","originalSplit","limit","splitShim","separator","splitter","symbolMatchExists","stringMatchIgnoresSymbolMatch","symbolMatch","originalMatch","matchShim","matcher","wrapConstructor","keysToSkip","getOwnPropertyNames","defaultSpeciesGetter","addDefaultSpecies","addIterator","impl","implementation","createDataProperty","createDataPropertyOrThrow","emulateES6construct","defaultNewTarget","defaultProto","slots","fromCodePoint","originalFromCodePoint","codePoints","StringShims","i","RangeError","fromCharCode","join","raw","callSite","cooked","rawString","literalsegments","stringElements","nextIndex","nextKey","nextSeg","nextSub","0","1","stringRepeat","repeat","s","times","half","stringMaxLength","Infinity","StringPrototypeShims","thisStr","numTimes","startsWith","searchString","searchStr","position","start","endsWith","endPosition","pos","end","includes","codePointAt","first","charCodeAt","isEnd","second","startsWithRejectsRegex","startsWithHandlesInfinity","startsWithSupportsSymbolMatch","re","endsWithSupportsSymbolMatch","includesSupportsSymbolMatch","ws","trimRegexp","trimShim","trim","nonWS","nonWSregex","isBadHexRegex","hasStringTrimBug","iteratorResult","StringIterator","_s","_i","substr","ArrayShims","from","items","mapFn","mapping","T","usingIterator","nextValue","arrayLike","of","A","k","array","kind","retval","arrayOfSupportsSubclassing","Foo","fooArr","ArrayPrototypeShims","copyWithin","relativeTarget","relativeStart","to","relativeEnd","finalItem","count","direction","fill","find","predicate","list","thisArg","findIndex","values","entries","unscopables","originalArrayPrototypeValues","searchElement","getPrototypeOf","arrayFromSwallowsNegativeLengths","arrayFromHandlesIterables","arr","arrayFromHandlesUndefinedMapFunction","origArrayFrom","int32sAsOne","pow","toLengthsCorrectly","reversed","originalForEach","callbackFn","originalMap","originalFilter","originalSome","every","originalEvery","originalReduce","reduceRight","originalReduceRight","lacksOctalSupport","lacksBinarySupport","trimsNonWhitespace","c","OrigNumber","binaryRegex","octalRegex","isBinary","test","isOctal","toPrimitive","valueOf","hasNonWS","isBadHex","NumberShim","primValue","parseInt","NaN","receiver","valueOfSucceeds","MAX_VALUE","MIN_VALUE","NEGATIVE_INFINITY","POSITIVE_INFINITY","maxSafeInteger","MIN_SAFE_INTEGER","EPSILON","parseFloat","isInteger","isSafeInteger","isEnumerableOn","propertyIsEnumerable","ensureEnumerable","prop","sliceArgs","initial","desiredArgCount","assignTo","assignToSource","assignReducer","sourceKeys","symbols","getOwnPropertySymbols","ObjectShims","assign","is","assignHasPendingExceptions","preventExtensions","thrower","ES5ObjectShims","magic","checkArgs","polyfill","FAKENULL","gpo","spo","objectKeysAcceptsPrimitives","originalObjectKeys","objectKeysRejectsRegex","regexRejectingObjectKeys","regexKeys","objectGOPNAcceptsPrimitives","cachedWindowNames","originalObjectGetOwnPropertyNames","val","objectGOPDAcceptsPrimitives","originalObjectGetOwnPropertyDescriptor","seal","objectSealAcceptsPrimitives","originalObjectSeal","isSealed","objectIsSealedAcceptsPrimitives","originalObjectIsSealed","freeze","objectFreezeAcceptsPrimitives","originalObjectFreeze","isFrozen","objectIsFrozenAcceptsPrimitives","originalObjectIsFrozen","objectPreventExtensionsAcceptsPrimitives","originalObjectPreventExtensions","isExtensible","objectIsExtensibleAcceptsPrimitives","originalObjectIsExtensible","objectGetProtoAcceptsPrimitives","originalGetProto","hasFlags","desc","regExpFlagsGetter","flags","ignoreCase","multiline","unicode","sticky","regExpSupportsFlagsWithRegex","regExpNeedsToSupportSymbolMatch","regexToStringIsGeneric","regexToStringSupportsGenericFlags","origRegExpToString","R","pattern","flagsGetter","sourceDesc","legacySourceGetter","sourceGetter","OrigRegExp","RegExpShim","patternIsRegExp","calledWithNew","P","$input","regexGlobals","input","lastMatch","lastParen","leftContext","rightContext","inverseEpsilon","roundTiesToEven","n","BINARY_32_EPSILON","BINARY_32_MAX_VALUE","BINARY_32_MIN_VALUE","E","LOG2E","LOG10E","numberCLZ","clz","MathShims","acosh","asinh","atanh","cbrt","negate","clz32","cosh","expm1","t","sum","hypot","y","largest","log2","log10","log1p","sinh","tanh","trunc","imul","ah","al","bh","bl","fround","v","expm1OfTen","origMathRound","round","roundHandlesBoundaryConditions","smallestPositiveNumberWhereRoundBreaks","largestPositiveNumberWhereRoundBreaks","roundDoesNotIncreaseIntegers","num","ceil","origImul","PromiseShim","setTimeout","IsPromise","promise","_promise","PromiseCapability","capability","resolver","resolve","reject","makeZeroTimeout","postMessage","timeouts","messageName","setZeroTimeout","fn","handleMessage","event","data","stopPropagation","addEventListener","makePromiseAsap","Promise","pr","task","then","enqueue","setImmediate","process","nextTick","PROMISE_IDENTITY","PROMISE_THROWER","PROMISE_PENDING","PROMISE_FULFILLED","PROMISE_REJECTED","PROMISE_FULFILL_OFFSET","PROMISE_REJECT_OFFSET","PROMISE_CAPABILITY_OFFSET","PROMISE_FAKE_CAPABILITY","enqueuePromiseReactionJob","handler","promiseReactionJob","promiseCapability","handlerResult","fulfillPromise","reactionLength","fulfillReactionHandler0","reactionCapability0","rejectReactions0","idx","state","rejectPromise","reason","rejectReactionHandler0","createResolvingFunctions","alreadyResolved","resolution","promiseResolveThenableJob","optimizedThen","thenable","Promise$prototype$then","resolvingFunctions","Promise$prototype","_promiseAllResolver","index","remaining","alreadyCalled","performPromiseAll","iteratorRecord","resultCapability","nextPromise","resolveElement","performPromiseRace","iterable","exception","ee","race","rejectFunc","resolveFunc","catch","onRejected","onFulfilled","returnValueIsIgnored","fulfillReactionHandler","rejectReactionHandler","accept","defer","chain","promiseSupportsSubclassing","promiseIgnoresNonFunctionThenCallbacks","promiseRequiresObjectContext","promiseResolveBroken","getsThenSynchronously","BadResolverPromise","executor","hasBadResolverPromise","origAll","origRace","origResolve","origReject","r","testOrder","preservesInsertionOrder","preservesNumericInsertionOrder","fastkey","skipInsertionOrderCheck","emptyObject","addIterableToMap","MapConstructor","entry","iter","adder","nextItem","addIterableToSet","SetConstructor","add","collectionShims","empty","MapEntry","prev","isRemoved","isMap","_es6map","requireMapSlot","MapIterator","head","_head","Map$prototype","MapShim","_map","_size","_storage","fkey","delete","clear","callback","context","isSet","_es6set","requireSetSlot","Set$prototype","SetShim","[[SetData]]","decodeKey","charAt","ensureMap","m","size","hasFKey","entireSet","mapAcceptsArguments","testMap","mapUsesSameValueZero","mapSupportsChaining","testSet","setUsesSameValueZero","setSupportsChaining","origSetAdd","origSetHas","origSetDel","SetDelete","mapSupportsSubclassing","M","mapFailsToSupportSubclassing","mapRequiresNew","setSupportsSubclassing","setFailsToSupportSubclassing","setRequiresNew","OrigSet","newMap","mapIterationThrowsStopIterator","anonymousSetHas","throwUnlessTargetIsObject","ReflectShims","deleteProperty","ownKeys","callAndCatchException","ConvertExceptionToBoolean","internalGet","parent","internalSet","existingDesc","propertyKey","attributes","objectDotGetPrototypeOf","willCreateCircularPrototype","lastProto","defineOrOverrideReflectProperty","shim","acceptsPrimitives","originalReflectGetProto","basic","extensible","Date","dateToString","shimmedDateToString","stringHTMLshims","anchor","big","blink","bold","fixed","fontcolor","color","fontsize","italics","link","url","small","strike","sub","sup","shouldOverwrite","output","quotesCount","toLowerCase","JSONstringifiesSymbols","stringify","JSON","JSONstringifyAcceptsObjectSymbol","origStringify","replaceFn","wrappedReplacer","parsedValue"],"mappings":";;;;;;;;;CAYC,SAAUA,EAAMC,GAEf,SAAWC,UAAW,YAAcA,OAAOC,IAAK,CAE9CD,OAAOD,OACF,UAAWG,WAAY,SAAU,CAItCC,OAAOD,QAAUH,QACZ,CAELD,EAAKM,cAAgBL,OAEvBM,KAAM,WACN,YAEA,IAAIC,GAASC,SAASC,KAAKC,KAAKF,SAASG,MACzC,IAAIC,GAAQJ,SAASC,KAAKC,KAAKF,SAASC,KACxC,IAAII,GAAUC,MAAMD,OACpB,IAAIE,GAAOC,OAAOD,IAElB,IAAIE,GAAM,QAASC,YAAWC,GAC5B,MAAO,SAASC,YACd,OAAQb,EAAOY,EAAMb,KAAMe,YAG/B,IAAIC,GAAc,SAAUH,GAC1B,IACEA,GACA,OAAO,OACP,MAAOI,GACP,MAAO,OAGX,IAAIC,GAAuB,QAASA,sBAAqBL,GACvD,IACE,MAAOA,KACP,MAAOI,GACP,MAAO,QAIX,IAAIE,GAAuBR,EAAIK,EAC/B,IAAII,GAAkC,WAEpC,OAAQJ,EAAY,WAClBN,OAAOW,kBAAmB,KAAOC,IAAK,iBAG1C,IAAIC,KAAwBb,OAAOW,gBAAkBD,GACrD,IAAII,GAAqB,QAAUC,SAAUC,OAAS,KAEtD,IAAIC,GAAWzB,SAASC,KAAKC,KAAKI,MAAMoB,UAAUC,QAClD,IAAIC,GAAU5B,SAASC,KAAKC,KAAKI,MAAMoB,UAAUG,OACjD,IAAIC,GAAU9B,SAASC,KAAKC,KAAKI,MAAMoB,UAAUK,OACjD,IAAIC,GAAQhC,SAASC,KAAKC,KAAKI,MAAMoB,UAAUO,KAE/C,IAAId,GAAiB,SAAUe,EAAQV,EAAMW,EAAOC,GAClD,IAAKA,GAASZ,IAAQU,GAAQ,CAAE,OAChC,GAAIb,EAAqB,CACvBb,OAAOW,eAAee,EAAQV,GAC5Ba,aAAc,KACdC,WAAY,MACZC,SAAU,KACVJ,MAAOA,QAEJ,CACLD,EAAOV,GAAQW,GAMnB,IAAIK,GAAmB,SAAUN,EAAQO,EAAKC,GAC5CjB,EAASlB,EAAKkC,GAAM,SAAUjB,GAC5B,GAAImB,GAASF,EAAIjB,EACjBL,GAAee,EAAQV,EAAMmB,IAAUD,KAI3C,IAAIE,GAAY5C,SAASC,KAAKC,KAAKM,OAAOkB,UAAUmB,SACpD,IAAIC,SAAoB,QAAU,WAAa,QAASC,gBAAeC,GAErE,aAAcA,KAAM,YAAcJ,EAAUI,KAAO,qBACjD,QAASC,gBAAeD,GAAK,aAAcA,KAAM,WAErD,IAAIE,IACFC,OAAQ,SAAUjB,EAAQV,EAAM2B,GAC9B,IAAK9B,EAAqB,CACxB,KAAM,IAAI+B,WAAU,oCAEtB5C,OAAOW,eAAee,EAAQV,GAC5Ba,aAAc,KACdC,WAAY,MACZlB,IAAK+B,KAGTE,MAAO,SAAUC,EAAgBC,EAAKC,GACpC,IAAKnC,EAAqB,CACxB,KAAM,IAAI+B,WAAU,oCAEtB,GAAIK,GAAqBjD,OAAOkD,yBAAyBJ,EAAgBC,EACzE/C,QAAOW,eAAeqC,EAAcD,GAClClB,aAAcoB,EAAmBpB,aACjCC,WAAYmB,EAAmBnB,WAC/BlB,IAAK,QAASuC,UAAW,MAAOL,GAAeC,IAC/CK,IAAK,QAASC,QAAO1B,GAASmB,EAAeC,GAAOpB,MAGxD2B,SAAU,SAAU5B,EAAQ6B,EAAUC,GACpC,GAAI3C,EAAqB,CACvB,GAAI4C,GAAazD,OAAOkD,yBAAyBxB,EAAQ6B,EACzDE,GAAW9B,MAAQ6B,CACnBxD,QAAOW,eAAee,EAAQ6B,EAAUE,OACnC,CACL/B,EAAO6B,GAAYC,IAGvBE,mBAAoB,SAAUhC,EAAQ6B,EAAUE,GAC9C,GAAI5C,EAAqB,CACvBb,OAAOW,eAAee,EAAQ6B,EAAUE,OACnC,IAAI,SAAWA,GAAY,CAChC/B,EAAO6B,GAAYE,EAAW9B,QAGlCgC,iBAAkB,SAAUC,EAAQC,GAClC,GAAIA,GAAUvB,EAAWuB,EAAOxB,UAAW,CACzC1B,EAAeiD,EAAQ,WAAYC,EAAOxB,SAAS3C,KAAKmE,GAAS,QAOvE,IAAIC,GAAS9D,OAAO8D,QAAU,SAAU5C,EAAW6C,GACjD,GAAIC,GAAY,QAASA,cACzBA,GAAU9C,UAAYA,CACtB,IAAIQ,GAAS,GAAIsC,EACjB,UAAWD,KAAe,YAAa,CACrChE,EAAKgE,GAAY5C,QAAQ,SAAU4B,GACjCL,EAAMgB,mBAAmBhC,EAAQqB,EAAKgB,EAAWhB,MAGrD,MAAOrB,GAGT,IAAIuC,GAAsB,SAAUC,EAAGC,GACrC,IAAKnE,OAAOoE,eAAgB,CAAE,MAAO,OACrC,MAAO5D,GAAqB,WAC1B,GAAI6D,GAAM,QAASC,UAASC,GAC1B,GAAIC,GAAI,GAAIN,GAAEK,EACdvE,QAAOoE,eAAeI,EAAGF,SAASpD,UAClC,OAAOsD,GAETxE,QAAOoE,eAAeC,EAAKH,EAC3BG,GAAInD,UAAY4C,EAAOI,EAAEhD,WACvBuD,aAAe9C,MAAO0C,IAExB,OAAOF,GAAEE,KAIb,IAAIK,GAAY,WAKd,SAAWC,QAAS,YAAa,CAAE,MAAOA,MAC1C,SAAWC,UAAW,YAAa,CAAE,MAAOA,QAC5C,SAAWC,UAAW,YAAa,CAAE,MAAOA,QAC5C,KAAM,IAAIC,OAAM,kCAGlB,IAAIC,GAAUL,GACd,IAAIM,GAAiBD,EAAQE,QAC7B,IAAIC,GAAW1F,SAASC,KAAKC,KAAKyF,OAAOjE,UAAUkE,QACnD,IAAIC,GAAqB7F,SAASG,MAAMD,KAAKI,MAAMoB,UAAUkE,QAC7D,IAAIE,GAAU9F,SAASC,KAAKC,KAAKI,MAAMoB,UAAUqE,OAEjD,IAAIC,GAAYhG,SAASC,KAAKC,KAAKyF,OAAOjE,UAAUuE,MACpD,IAAIC,GAAQlG,SAASC,KAAKC,KAAKI,MAAMoB,UAAUyE,KAC/C,IAAIC,GAAapG,SAASG,MAAMD,KAAKI,MAAMoB,UAAUyE,KACrD,IAAIE,GAASrG,SAASC,KAAKC,KAAKI,MAAMoB,UAAU4E,MAChD,IAAIC,GAAOC,KAAKC,GAChB,IAAIC,GAAOF,KAAKG,GAChB,IAAIC,GAASJ,KAAKK,KAClB,IAAIC,GAAON,KAAKO,GAChB,IAAIC,GAAOR,KAAKS,GAChB,IAAIC,GAAOV,KAAKW,GAChB,IAAIC,GAAQZ,KAAKa,IACjB,IAAIC,GAAkBtH,SAASC,KAAKC,KAAKM,OAAOkB,UAAU6F,eAC1D,IAAIC,EACJ,IAAIC,GAAO,YAEX,IAAIC,GAAUnC,EAAQoC,GACtB,IAAIC,GAAgBF,GAAWA,EAAQhG,UAAU,SACjD,IAAImG,GAAaH,GAAWA,EAAQhG,UAAUN,GAC9C,IAAI0G,GAAaJ,GAAWA,EAAQhG,UAAUqG,GAC9C,IAAIC,GAAaN,GAAWA,EAAQhG,UAAUkC,GAE9C,IAAIqE,GAAS1C,EAAQ0C,UACrB,IAAIC,GAAgBD,EAAOE,SAAW,WAEtC,IAAIC,GAAcC,OAAOC,OAAS,QAASA,OAAMnG,GAM/C,MAAOA,KAAUA,EAEnB,IAAIoG,GAAiBF,OAAO5C,UAAY,QAASA,UAAStD,GACxD,aAAcA,KAAU,UAAYqD,EAAerD,GAErD,IAAIqG,GAAQ1F,EAAW0D,KAAKiC,MAAQjC,KAAKiC,KAAO,QAASA,MAAKtG,GAC5D,GAAIuG,GAASL,OAAOlG,EACpB,IAAIuG,IAAW,EAAG,CAAE,MAAOA,GAC3B,GAAIN,EAAYM,GAAS,CAAE,MAAOA,GAClC,MAAOA,GAAS,GAAK,EAAI,EAK3B,IAAIC,GAAsB,QAASC,aAAYzG,GAC7C,MAAOS,GAAUT,KAAW,qBAE9B,IAAI0G,GAAoB,QAASD,aAAYzG,GAC3C,MAAOA,KAAU,YACRA,KAAU,gBACVA,GAAM2G,SAAW,UACxB3G,EAAM2G,QAAU,GAChBlG,EAAUT,KAAW,kBACrBS,EAAUT,EAAM4G,UAAY,oBAEhC,IAAIH,IAAcD,EAAoB9H,WAAa8H,EAAsBE,CAEzE,IAAIG,KACFC,UAAW,SAAUjG,GAAK,MAAOA,KAAM,YAAgBA,KAAM,kBAAqBA,KAAM,UACxFkG,OAAQ,SAAUlG,GAAK,MAAOJ,GAAUI,KAAO,mBAC/CmG,MAAO,SAAUnG,GAAK,MAAOJ,GAAUI,KAAO,mBAC9CoG,OAAQ,SAAUpG,GAChB,aAAcuC,GAAQ0C,SAAW,kBAAqBjF,KAAM,UAIhE,IAAIqG,IAAiB,QAASA,gBAAenH,EAAQ6B,EAAUuF,GAC7D,GAAIC,GAAWrH,EAAO6B,EACtB5C,GAAee,EAAQ6B,EAAUuF,EAAa,KAC9CpG,GAAMiB,iBAAiBjC,EAAO6B,GAAWwF,GAI3C,IAAIC,UAAoBvB,KAAW,kBAAqBA,GAAO,SAAW,YAAce,GAAKI,OAAOnB,IAOpG,IAAIwB,IAAaT,GAAKI,OAAOnB,EAAOyB,UAAYzB,EAAOyB,SAAW,qBAIlE,IAAInE,EAAQoE,YAAc,GAAIpE,GAAQoE,KAAM,gBAAkB,WAAY,CACxEF,GAAa,aAIf,IAAKlE,EAAQqE,QAAS,CACpBzI,EAAeoE,EAAS,aAAe,MAEzC,GAAIqE,IAAUrE,EAAQqE,OAEtB,IAAIC,IAAUlE,MAGd,IAAImE,UAAiBC,YAAa,cAAgBA,SAAY,KAAOA,SAASC,GAE9E,IAAIC,IAAoBH,IAAU,KAAO,QAASG,mBAAkBjH,GAElE,MAAOA,IAAK,MACV,QAASkH,oCAAmClH,GAE9C,MAAOA,IAAK,MAAQA,IAAM8G,GAG5B,IAAIK,KAEFC,KAAM,QAASA,MAAKC,EAAGC,GACrB,GAAIC,GAAO1J,UAAUiI,OAAS,EAAIjI,UAAU,KAC5C,KAAKsJ,GAAGK,WAAWH,GAAI,CACrB,KAAM,IAAIjH,WAAUiH,EAAI,sBAE1B,MAAOtK,GAAOsK,EAAGC,EAAGC,IAGtBE,uBAAwB,SAAUzH,EAAG0H,GACnC,GAAIT,GAAkBjH,GAAI,CACxB,KAAM,IAAII,WAAUsH,GAAc,yBAA2B1H,GAE/D,MAAOA,IAYT2H,aAAc,SAAU3H,GACtB,GAAIA,QAAW,IAAKA,IAAM,MAAQA,IAAM,MAAQA,IAAM,MAAO,CAC3D,MAAO,OAET,aAAcA,KAAM,kBAAqBA,KAAM,UAAYA,IAAM8G,IAGnEc,SAAU,SAAU5F,EAAG0F,GACrB,MAAOlK,QAAO2J,GAAGM,uBAAuBzF,EAAG0F,KAG7CF,WAAY1H,EAEZ+H,cAAe,SAAU7H,GAEvB,MAAOmH,IAAGK,WAAWxH,IAGvB8H,QAAS,SAAU9H,GACjB,MAAOmH,IAAGY,SAAS/H,IAAM,GAG3BgI,SAAU,SAAUhI,GAClB,MAAOmH,IAAGY,SAAS/H,KAAO,GAG5B+H,SAAU,SAAU5I,GAClB,GAAIS,EAAUT,KAAW,kBAAmB,CAC1C,KAAM,IAAIiB,WAAU,6CAEtB,OAAQjB,GAGV8I,UAAW,SAAU9I,GACnB,GAAIuG,GAASyB,GAAGY,SAAS5I,EACzB,IAAIiG,EAAYM,GAAS,CAAE,MAAO,GAClC,GAAIA,IAAW,IAAMH,EAAeG,GAAS,CAAE,MAAOA,GACtD,OAAQA,EAAS,EAAI,GAAK,GAAK9B,EAAOE,EAAK4B,KAG7CwC,SAAU,SAAU/I,GAClB,GAAIgJ,GAAMhB,GAAGc,UAAU9I,EACvB,IAAIgJ,GAAO,EAAG,CAAE,MAAO,GACvB,GAAIA,EAAM9C,OAAO+C,iBAAkB,CAAE,MAAO/C,QAAO+C,iBACnD,MAAOD,IAGTE,UAAW,SAAUC,EAAGC,GACtB,GAAID,IAAMC,EAAG,CAEX,GAAID,IAAM,EAAG,CAAE,MAAO,GAAIA,IAAM,EAAIC,EACpC,MAAO,MAET,MAAOnD,GAAYkD,IAAMlD,EAAYmD,IAGvCC,cAAe,SAAUF,EAAGC,GAE1B,MAAQD,KAAMC,GAAOnD,EAAYkD,IAAMlD,EAAYmD,IAGrDE,WAAY,SAAUzG,GACpB,MAAOmF,IAAGQ,aAAa3F,WAAcA,GAAEyE,MAAgB,aAAeb,GAAY5D,KAGpF0G,YAAa,SAAU1G,GACrB,GAAI4D,GAAY5D,GAAI,CAElB,MAAO,IAAIwC,GAAcxC,EAAG,SAE9B,GAAI2G,GAAOxB,GAAGyB,UAAU5G,EAAGyE,GAC3B,KAAKU,GAAGK,WAAWmB,GAAO,CAExB,KAAM,IAAIvI,WAAU,4BAEtB,GAAIyI,GAAK1B,GAAGC,KAAKuB,EAAM3G,EACvB,KAAKmF,GAAGQ,aAAakB,GAAK,CACxB,KAAM,IAAIzI,WAAU,gBAEtB,MAAOyI,IAGTD,UAAW,SAAU5G,EAAG8G,GACtB,GAAInL,GAAOwJ,GAAGS,SAAS5F,GAAG8G,EAC1B,IAAI7B,GAAkBtJ,GAAO,CAC3B,WAAY,GAEd,IAAKwJ,GAAGK,WAAW7J,GAAO,CACxB,KAAM,IAAIyC,WAAU,wBAA0B0I,GAEhD,MAAOnL,IAGToL,iBAAkB,SAAUC,GAC1B,QAASA,EAAWC,MAGtBC,cAAe,SAAUxC,EAAUyC,GACjC,GAAIC,GAAejC,GAAGyB,UAAUlC,EAAU,SAC1C,IAAI0C,QAAsB,GAAG,CAC3B,OAEF,GAAIC,GAAaC,CACjB,KACED,EAAclC,GAAGC,KAAKgC,EAAc1C,GACpC,MAAO3I,GACPuL,EAAiBvL,EAEnB,GAAIoL,EAAmB,CACrB,OAEF,GAAIG,EAAgB,CAClB,KAAMA,GAER,IAAKnC,GAAGQ,aAAa0B,GAAc,CACjC,KAAM,IAAIjJ,WAAU,qDAIxBmJ,aAAc,SAAUV,GACtB,GAAIW,GAAS3L,UAAUiI,OAAS,EAAI+C,EAAGY,KAAK5L,UAAU,IAAMgL,EAAGY,MAC/D,KAAKtC,GAAGQ,aAAa6B,GAAS,CAC5B,KAAM,IAAIpJ,WAAU,gBAEtB,MAAOoJ,IAGTE,aAAc,SAAUb,GACtB,GAAIW,GAASrC,GAAGoC,aAAaV,EAC7B,IAAII,GAAO9B,GAAG4B,iBAAiBS,EAC/B,OAAOP,GAAO,MAAQO,GAGxBG,UAAW,SAAUjI,EAAG6F,EAAMqC,EAAWC,GACvC,GAAIzI,SAAgBwI,KAAc,YAAclI,EAAIkI,CAEpD,KAAKC,GAAiBjD,GAAQkD,UAAW,CAEvC,MAAOlD,IAAQkD,UAAUpI,EAAG6F,EAAMnG,GAOpC,GAAI2I,GAAQ3I,EAAO1C,SACnB,KAAKyI,GAAGQ,aAAaoC,GAAQ,CAC3BA,EAAQvM,OAAOkB,UAEjB,GAAIsL,GAAM1I,EAAOyI,EAEjB,IAAIP,GAASrC,GAAGC,KAAK1F,EAAGsI,EAAKzC,EAC7B,OAAOJ,IAAGQ,aAAa6B,GAAUA,EAASQ,GAG5CC,mBAAoB,SAAUC,EAAGC,GAC/B,GAAIzI,GAAIwI,EAAEjI,WACV,IAAIP,QAAW,GAAG,CAChB,MAAOyI,GAET,IAAKhD,GAAGQ,aAAajG,GAAI,CACvB,KAAM,IAAItB,WAAU,mBAEtB,GAAIgK,GAAI1I,EAAEwD,EACV,IAAI+B,GAAkBmD,GAAI,CACxB,MAAOD,GAET,IAAKhD,GAAGU,cAAcuC,GAAI,CACxB,KAAM,IAAIhK,WAAU,iBAEtB,MAAOgK,IAGTC,WAAY,SAAUnE,EAAQoE,EAAKC,EAAWpL,GAC5C,GAAIiL,GAAIjD,GAAGqD,SAAStE,EACpB,IAAIuE,GAAK,IAAMH,CACf,IAAIC,IAAc,GAAI,CACpB,GAAIjD,GAAIH,GAAGqD,SAASrL,EACpB,IAAIuL,GAAWpD,EAAEqD,QAAQ,KAAM,SAC/BF,IAAM,IAAMF,EAAY,KAAOG,EAAW,IAE5C,GAAIE,GAAKH,EAAK,GACd,IAAII,GAAKD,EAAKR,CACd,OAAOS,GAAK,KAAOP,EAAM,KAG3BQ,SAAU,QAASA,UAASC,GAC1B,IAAK5D,GAAGQ,aAAaoD,GAAW,CAC9B,MAAO,OAET,GAAIC,GAAWD,EAAS9F,EAAOgG,MAC/B,UAAWD,KAAa,YAAa,CACnC,QAASA,EAEX,MAAOhF,IAAKG,MAAM4E,IAGpBP,SAAU,QAASA,UAAStE,GAC1B,MAAOW,IAAQX,IAKnB,IAAI7H,GAAuBmI,GAAY,CACrC,GAAI0E,IAAwB,QAASA,uBAAsB1M,GACzD,GAAIwH,GAAKI,OAAOnB,EAAOzG,IAAQ,CAC7B,MAAOyG,GAAOzG,GAGhB,GAAI2M,GAAMlG,EAAO,OAAO,UAAYzG,EACpChB,QAAOW,eAAe8G,EAAQzG,GAC5Ba,aAAc,MACdC,WAAY,MACZC,SAAU,MACVJ,MAAOgM,GAET,OAAOA,GAET,KAAKnF,GAAKI,OAAOnB,EAAOmG,QAAS,CAC/B,GAAIC,IAAeH,GAAsB,SACzC,IAAII,IAAiB3I,OAAOjE,UAAU0M,MACtCjN,GAAeoN,OAAO7M,UAAW2M,GAAc,QAASD,QAAOlF,GAC7D,MAAOiB,IAAGC,KAAKkE,GAAgBpF,GAASpJ,QAE1C,IAAI0O,IAAa,QAASJ,QAAOK,GAC/B,GAAIvB,GAAI/C,GAAGM,uBAAuB3K,KAClC,KAAKmK,GAAkBwE,GAAS,CAC9B,GAAIC,GAAWvE,GAAGyB,UAAU6C,EAAQJ,GACpC,UAAWK,KAAa,YAAa,CACnC,MAAOvE,IAAGC,KAAKsE,EAAUD,GAASvB,KAGtC,MAAO/C,IAAGC,KAAKkE,GAAgBpB,GAAI/C,GAAGqD,SAASiB,KAEjDpF,IAAe1D,OAAOjE,UAAW,SAAU8M,IAE7C,IAAKxF,GAAKI,OAAOnB,EAAO0F,SAAU,CAChC,GAAIgB,IAAgBT,GAAsB,UAC1C,IAAIU,IAAkBjJ,OAAOjE,UAAUiM,OACvCxM,GAAeoN,OAAO7M,UAAWiN,GAAe,QAAShB,SAAQzE,EAAQ2F,GACvE,MAAO1E,IAAGC,KAAKwE,GAAiB1F,GAASpJ,KAAM+O,KAEjD,IAAIC,IAAc,QAASnB,SAAQoB,EAAaF,GAC9C,GAAI3B,GAAI/C,GAAGM,uBAAuB3K,KAClC,KAAKmK,GAAkB8E,GAAc,CACnC,GAAIC,GAAW7E,GAAGyB,UAAUmD,EAAaJ,GACzC,UAAWK,KAAa,YAAa,CACnC,MAAO7E,IAAGC,KAAK4E,EAAUD,GAAc7B,EAAG2B,KAG9C,MAAO1E,IAAGC,KAAKwE,GAAiB1B,GAAI/C,GAAGqD,SAASuB,GAAcF,IAEhExF,IAAe1D,OAAOjE,UAAW,UAAWoN,IAE9C,IAAK9F,GAAKI,OAAOnB,EAAOgH,OAAQ,CAC9B,GAAIC,IAAchB,GAAsB,QACxC,IAAIiB,IAAgBxJ,OAAOjE,UAAUuN,KACrC9N,GAAeoN,OAAO7M,UAAWwN,GAAa,QAASD,OAAM/F,EAAQkG,GACnE,MAAOjF,IAAGC,KAAK+E,GAAejG,GAASpJ,KAAMsP,KAE/C,IAAIC,IAAY,QAASJ,OAAMK,EAAWF,GACxC,GAAIlC,GAAI/C,GAAGM,uBAAuB3K,KAClC,KAAKmK,GAAkBqF,GAAY,CACjC,GAAIC,GAAWpF,GAAGyB,UAAU0D,EAAWJ,GACvC,UAAWK,KAAa,YAAa,CACnC,MAAOpF,IAAGC,KAAKmF,EAAUD,GAAYpC,EAAGkC,KAG5C,MAAOjF,IAAGC,KAAK+E,GAAejC,GAAI/C,GAAGqD,SAAS8B,GAAYF,IAE5D/F,IAAe1D,OAAOjE,UAAW,QAAS2N,IAE5C,GAAIG,IAAoBxG,GAAKI,OAAOnB,EAAOgG,MAC3C,IAAIwB,IAAgCD,IAAsB,WAGxD,GAAIxK,KACJA,GAAEiD,EAAOgG,OAAS,WAAc,MAAO,IACvC,OAAO,IAAIA,MAAMjJ,KAAO,KAE1B,KAAKwK,IAAqBC,GAA+B,CACvD,GAAIC,IAAcxB,GAAsB,QAExC,IAAIyB,IAAgBhK,OAAOjE,UAAUuM,KACrC9M,GAAeoN,OAAO7M,UAAWgO,GAAa,QAASzB,OAAM/E,GAC3D,MAAOiB,IAAGC,KAAKuF,GAAezG,GAASpJ,QAGzC,IAAI8P,IAAY,QAAS3B,OAAMQ,GAC7B,GAAIvB,GAAI/C,GAAGM,uBAAuB3K,KAClC,KAAKmK,GAAkBwE,GAAS,CAC9B,GAAIoB,GAAU1F,GAAGyB,UAAU6C,EAAQiB,GACnC,UAAWG,KAAY,YAAa,CAClC,MAAO1F,IAAGC,KAAKyF,EAASpB,GAASvB,KAGrC,MAAO/C,IAAGC,KAAKuF,GAAezC,GAAI/C,GAAGqD,SAASiB,KAEhDpF,IAAe1D,OAAOjE,UAAW,QAASkO,KAI9C,GAAIE,IAAkB,QAASA,iBAAgBvG,EAAUD,EAAayG,GACpE7M,EAAMiB,iBAAiBmF,EAAaC,EACpC,IAAI/I,OAAOoE,eAAgB,CAEzBpE,OAAOoE,eAAe2E,EAAUD,GAElC,GAAIjI,EAAqB,CACvBI,EAASjB,OAAOwP,oBAAoBzG,GAAW,SAAUhG,GACvD,GAAIA,IAAOkE,IAAQsI,EAAWxM,GAAM,CAAE,OACtCL,EAAMG,MAAMkG,EAAUhG,EAAK+F,SAExB,CACL7H,EAASjB,OAAOD,KAAKgJ,GAAW,SAAUhG,GACxC,GAAIA,IAAOkE,IAAQsI,EAAWxM,GAAM,CAAE,OACtC+F,EAAY/F,GAAOgG,EAAShG,KAGhC+F,EAAY5H,UAAY6H,EAAS7H,SACjCwB,GAAMY,SAASyF,EAAS7H,UAAW,cAAe4H,GAGpD,IAAI2G,IAAuB,WAAc,MAAOnQ,MAChD,IAAIoQ,IAAoB,SAAUxL,GAChC,GAAIrD,IAAwBiG,EAAgB5C,EAAGwD,GAAgB,CAC7DhF,EAAMC,OAAOuB,EAAGwD,EAAe+H,KAInC,IAAIE,IAAc,SAAUzO,EAAW0O,GACrC,GAAIC,GAAiBD,GAAQ,QAAS1G,YAAa,MAAO5J,MAC1DqB,GAAeO,EAAW+H,GAAY4G,EACtC,KAAK3O,EAAU+H,KAAeT,GAAKI,OAAOK,IAAa,CAErD/H,EAAU+H,IAAc4G,GAI5B,IAAIC,IAAqB,QAASA,oBAAmBpO,EAAQV,EAAMW,GACjE,GAAId,EAAqB,CACvBb,OAAOW,eAAee,EAAQV,GAC5Ba,aAAc,KACdC,WAAY,KACZC,SAAU,KACVJ,MAAOA,QAEJ,CACLD,EAAOV,GAAQW,GAGnB,IAAIoO,IAA4B,QAASA,2BAA0BrO,EAAQV,EAAMW,GAC/EmO,GAAmBpO,EAAQV,EAAMW,EACjC,KAAKgI,GAAGkB,UAAUnJ,EAAOV,GAAOW,GAAQ,CACtC,KAAM,IAAIiB,WAAU,gCAIxB,IAAIoN,IAAsB,SAAUxL,EAAGyL,EAAkBC,EAAcC,GAWrE,IAAKxG,GAAGQ,aAAa3F,GAAI,CACvB,KAAM,IAAI5B,WAAU,+BAAiCqN,EAAiBjP,MAExE,GAAIuL,GAAQ0D,EAAiB/O,SAC7B,KAAKyI,GAAGQ,aAAaoC,GAAQ,CAC3BA,EAAQ2D,EAEV,GAAI1D,GAAM1I,EAAOyI,EACjB,KAAK,GAAIvL,KAAQmP,GAAO,CACtB,GAAIrJ,EAAgBqJ,EAAOnP,GAAO,CAChC,GAAIW,GAAQwO,EAAMnP,EAClBL,GAAe6L,EAAKxL,EAAMW,EAAO,OAGrC,MAAO6K,GAKT,IAAIrH,OAAOiL,eAAiBjL,OAAOiL,cAAc9H,SAAW,EAAG,CAC7D,GAAI+H,IAAwBlL,OAAOiL,aACnCvH,IAAe1D,OAAQ,gBAAiB,QAASiL,eAAcE,GAC7D,MAAO3G,IAAGC,KAAKyG,GAAuB/Q,KAAMe,aAIhD,GAAIkQ,KACFH,cAAe,QAASA,eAAcE,GACpC,GAAItE,KACJ,IAAIC,EACJ,KAAK,GAAIuE,GAAI,EAAGlI,EAASjI,UAAUiI,OAAQkI,EAAIlI,EAAQkI,IAAK,CAC1DvE,EAAOpE,OAAOxH,UAAUmQ,GACxB,KAAK7G,GAAGkB,UAAUoB,EAAMtC,GAAGc,UAAUwB,KAAUA,EAAO,GAAKA,EAAO,QAAU,CAC1E,KAAM,IAAIwE,YAAW,sBAAwBxE,GAG/C,GAAIA,EAAO,MAAS,CAClBvG,EAAMsG,EAAQ7G,OAAOuL,aAAazE,QAC7B,CACLA,GAAQ,KACRvG,GAAMsG,EAAQ7G,OAAOuL,cAAczE,GAAQ,IAAM,OACjDvG,GAAMsG,EAAQ7G,OAAOuL,aAAczE,EAAO,KAAS,SAGvD,MAAOD,GAAO2E,KAAK,KAGrBC,IAAK,QAASA,KAAIC,GAChB,GAAIC,GAASnH,GAAGS,SAASyG,EAAU,eACnC,IAAIE,GAAYpH,GAAGS,SAAS0G,EAAOF,IAAK,gBACxC,IAAIjG,GAAMoG,EAAUzI,MACpB,IAAI0I,GAAkBrH,GAAGe,SAASC,EAClC,IAAIqG,GAAmB,EAAG,CACxB,MAAO,GAGT,GAAIC,KACJ,IAAIC,GAAY,CAChB,IAAIC,GAASlF,EAAMmF,EAASC,CAC5B,OAAOH,EAAYF,EAAiB,CAClCG,EAAUxH,GAAGqD,SAASkE,EACtBE,GAAUzH,GAAGqD,SAAS+D,EAAUI,GAChCzL,GAAMuL,EAAgBG,EACtB,IAAIF,EAAY,GAAKF,EAAiB,CACpC,MAEF/E,EAAOiF,EAAY,EAAI7Q,UAAUiI,OAASjI,UAAU6Q,EAAY,GAAK,EACrEG,GAAU1H,GAAGqD,SAASf,EACtBvG,GAAMuL,EAAgBI,EACtBH,IAAa,EAEf,MAAOD,GAAeN,KAAK,KAG/B,IAAIxL,OAAOyL,KAAOzL,OAAOyL,KAAMA,KAAOU,EAAG,IAAKC,EAAG,IAAKjJ,OAAQ,OAAW,KAAM,CAE7EO,GAAe1D,OAAQ,MAAOoL,GAAYK,KAE5C5O,EAAiBmD,OAAQoL,GAIzB,IAAIiB,IAAe,QAASC,QAAOC,EAAGC,GACpC,GAAIA,EAAQ,EAAG,CAAE,MAAO,GACxB,GAAIA,EAAQ,EAAG,CAAE,MAAOF,QAAOC,EAAGC,EAAQ,GAAKD,EAC/C,GAAIE,GAAOH,OAAOC,EAAGC,EAAQ,EAC7B,OAAOC,GAAOA,EAEhB,IAAIC,IAAkBC,QAEtB,IAAIC,KACFN,OAAQ,QAASA,QAAOE,GACtB,GAAIK,GAAUrI,GAAGqD,SAASrD,GAAGM,uBAAuB3K,MACpD,IAAI2S,GAAWtI,GAAGc,UAAUkH,EAC5B,IAAIM,EAAW,GAAKA,GAAYJ,GAAiB,CAC/C,KAAM,IAAIpB,YAAW,gFAEvB,MAAOe,IAAaQ,EAASC,IAG/BC,WAAY,QAASA,YAAWC,GAC9B,GAAIvF,GAAIjD,GAAGqD,SAASrD,GAAGM,uBAAuB3K,MAC9C,IAAIqK,GAAG2D,SAAS6E,GAAe,CAC7B,KAAM,IAAIvP,WAAU,gDAEtB,GAAIwP,GAAYzI,GAAGqD,SAASmF,EAC5B,IAAIE,EACJ,IAAIhS,UAAUiI,OAAS,EAAG,CACxB+J,EAAWhS,UAAU,GAEvB,GAAIiS,GAAQvM,EAAK4D,GAAGc,UAAU4H,GAAW,EACzC,OAAO7M,GAAUoH,EAAG0F,EAAOA,EAAQF,EAAU9J,UAAY8J,GAG3DG,SAAU,QAASA,UAASJ,GAC1B,GAAIvF,GAAIjD,GAAGqD,SAASrD,GAAGM,uBAAuB3K,MAC9C,IAAIqK,GAAG2D,SAAS6E,GAAe,CAC7B,KAAM,IAAIvP,WAAU,8CAEtB,GAAIwP,GAAYzI,GAAGqD,SAASmF,EAC5B,IAAIxH,GAAMiC,EAAEtE,MACZ,IAAIkK,EACJ,IAAInS,UAAUiI,OAAS,EAAG,CACxBkK,EAAcnS,UAAU,GAE1B,GAAIoS,SAAaD,KAAgB,YAAc7H,EAAMhB,GAAGc,UAAU+H,EAClE,IAAIE,GAAMxM,EAAKH,EAAK0M,EAAK,GAAI9H,EAC7B,OAAOnF,GAAUoH,EAAG8F,EAAMN,EAAU9J,OAAQoK,KAASN,GAGvDO,SAAU,QAASA,UAASR,GAC1B,GAAIxI,GAAG2D,SAAS6E,GAAe,CAC7B,KAAM,IAAIvP,WAAU,uCAEtB,GAAIwP,GAAYzI,GAAGqD,SAASmF,EAC5B,IAAIE,EACJ,IAAIhS,UAAUiI,OAAS,EAAG,CACxB+J,EAAWhS,UAAU,GAGvB,MAAO6E,GAAS5F,KAAM8S,EAAWC,MAAe,GAGlDO,YAAa,QAASA,aAAYH,GAChC,GAAIT,GAAUrI,GAAGqD,SAASrD,GAAGM,uBAAuB3K,MACpD,IAAI+S,GAAW1I,GAAGc,UAAUgI,EAC5B,IAAInK,GAAS0J,EAAQ1J,MACrB,IAAI+J,GAAY,GAAKA,EAAW/J,EAAQ,CACtC,GAAIuK,GAAQb,EAAQc,WAAWT,EAC/B,IAAIU,GAAQV,EAAW,IAAM/J,CAC7B,IAAIuK,EAAQ,OAAUA,EAAQ,OAAUE,EAAO,CAAE,MAAOF,GACxD,GAAIG,GAAShB,EAAQc,WAAWT,EAAW,EAC3C,IAAIW,EAAS,OAAUA,EAAS,MAAQ,CAAE,MAAOH,GACjD,OAASA,EAAQ,OAAU,MAASG,EAAS,OAAU,QAI7D,IAAI7N,OAAOjE,UAAUyR,UAAY,IAAIA,SAAS,IAAKb,YAAc,MAAO,CACtEjJ,GAAe1D,OAAOjE,UAAW,WAAY6Q,GAAqBY,UAGpE,GAAIxN,OAAOjE,UAAUgR,YAAc/M,OAAOjE,UAAUqR,SAAU,CAC5D,GAAIU,IAAyB3S,EAAY,WAEvC,MAAM4R,WAAW,MAEnB,IAAIgB,IAA4B1S,EAAqB,WACnD,MAAO,MAAM0R,WAAW,IAAKJ,YAAc,OAE7C,KAAKmB,KAA2BC,GAA2B,CAEzDrK,GAAe1D,OAAOjE,UAAW,aAAc6Q,GAAqBG,WACpErJ,IAAe1D,OAAOjE,UAAW,WAAY6Q,GAAqBQ,WAGtE,GAAIvJ,GAAY,CACd,GAAImK,IAAgC3S,EAAqB,WACvD,GAAI4S,GAAK,GACTA,GAAG3L,EAAOgG,OAAS,KACnB,OAAO,MAAMyE,WAAWkB,IAE1B,KAAKD,GAA+B,CAClCtK,GAAe1D,OAAOjE,UAAW,aAAc6Q,GAAqBG,YAEtE,GAAImB,IAA8B7S,EAAqB,WACrD,GAAI4S,GAAK,GACTA,GAAG3L,EAAOgG,OAAS,KACnB,OAAO,MAAM8E,SAASa,IAExB,KAAKC,GAA6B,CAChCxK,GAAe1D,OAAOjE,UAAW,WAAY6Q,GAAqBQ,UAEpE,GAAIe,IAA8B9S,EAAqB,WACrD,GAAI4S,GAAK,GACTA,GAAG3L,EAAOgG,OAAS,KACnB,OAAO,MAAMkF,SAASS,IAExB,KAAKE,GAA6B,CAChCzK,GAAe1D,OAAOjE,UAAW,WAAY6Q,GAAqBY,WAItE3Q,EAAiBmD,OAAOjE,UAAW6Q,GAInC,IAAIwB,KACF,sDACA,qEACA,gBACA5C,KAAK,GACP,IAAI6C,IAAa,GAAIzF,QAAO,MAAQwF,GAAK,SAAWA,GAAK,OAAQ,IACjE,IAAIE,IAAW,QAASC,QACtB,MAAO/J,IAAGqD,SAASrD,GAAGM,uBAAuB3K,OAAO6N,QAAQqG,GAAY,IAE1E,IAAIG,KAAS,OAAU,SAAU,UAAUhD,KAAK,GAChD,IAAIiD,IAAa,GAAI7F,QAAO,IAAM4F,GAAQ,IAAK,IAC/C,IAAIE,IAAgB,oBACpB,IAAIC,IAAmBH,GAAMD,OAAOpL,SAAWqL,GAAMrL,MACrD3H,GAAewE,OAAOjE,UAAW,OAAQuS,GAAUK,GAKnD,IAAIC,IAAiB,SAAUvR,GAC7B,OAASb,MAAOa,EAAGiJ,KAAMpL,UAAUiI,SAAW,GAIhD,IAAI0L,IAAiB,SAAUtC,GAC7B/H,GAAGM,uBAAuByH,EAC1BpS,MAAK2U,GAAKtK,GAAGqD,SAAS0E,EACtBpS,MAAK4U,GAAK,EAEZF,IAAe9S,UAAU+K,KAAO,WAC9B,GAAIyF,GAAIpS,KAAK2U,EACb,IAAIzD,GAAIlR,KAAK4U,EACb,UAAWxC,KAAM,aAAelB,GAAKkB,EAAEpJ,OAAQ,CAC7ChJ,KAAK2U,OAAU,EACf,OAAOF,MAET,GAAIlB,GAAQnB,EAAEoB,WAAWtC,EACzB,IAAIwC,GAAQrI,CACZ,IAAIkI,EAAQ,OAAUA,EAAQ,OAAWrC,EAAI,IAAOkB,EAAEpJ,OAAQ,CAC5DqC,EAAM,MACD,CACLqI,EAAStB,EAAEoB,WAAWtC,EAAI,EAC1B7F,GAAOqI,EAAS,OAAUA,EAAS,MAAU,EAAI,EAEnD1T,KAAK4U,GAAK1D,EAAI7F,CACd,OAAOoJ,IAAerC,EAAEyC,OAAO3D,EAAG7F,IAEpCgF,IAAYqE,GAAe9S,UAC3ByO,IAAYxK,OAAOjE,UAAW,WAC5B,MAAO,IAAI8S,IAAe1U,OAG5B,IAAI8U,KACFC,KAAM,QAASA,MAAKC,GAClB,GAAIpQ,GAAI5E,IACR,IAAIiV,EACJ,IAAIlU,UAAUiI,OAAS,EAAG,CACxBiM,EAAQlU,UAAU,GAEpB,GAAImU,GAASC,CACb,UAAWF,KAAU,YAAa,CAChCC,EAAU,UACL,CACL,IAAK7K,GAAGK,WAAWuK,GAAQ,CACzB,KAAM,IAAI3R,WAAU,qEAEtB,GAAIvC,UAAUiI,OAAS,EAAG,CACxBmM,EAAIpU,UAAU,GAEhBmU,EAAU,KAKZ,GAAIE,UAAwBtM,GAAYkM,IAAU3K,GAAGyB,UAAUkJ,EAAOrL,OAAiB,WAEvF,IAAIX,GAAQ0D,EAAQwE,CACpB,IAAIkE,EAAe,CACjB1I,EAASrC,GAAGU,cAAcnG,GAAKlE,OAAO,GAAIkE,MAC1C,IAAIgF,GAAWS,GAAGuB,YAAYoJ,EAC9B,IAAIrI,GAAM0I,CAEVnE,GAAI,CACJ,OAAO,KAAM,CACXvE,EAAOtC,GAAGuC,aAAahD,EACvB,IAAI+C,IAAS,MAAO,CAClB,MAEF0I,EAAY1I,EAAKtK,KACjB,KACE,GAAI6S,EAAS,CACXG,QAAmBF,KAAM,YAAcF,EAAMI,EAAWnE,GAAK5Q,EAAM2U,EAAOE,EAAGE,EAAWnE,GAE1FxE,EAAOwE,GAAKmE,EACZ,MAAOpU,GACPoJ,GAAG+B,cAAcxC,EAAU,KAC3B,MAAM3I,GAERiQ,GAAK,EAEPlI,EAASkI,MACJ,CACL,GAAIoE,GAAYjL,GAAGS,SAASkK,EAC5BhM,GAASqB,GAAGe,SAASkK,EAAUtM,OAC/B0D,GAASrC,GAAGU,cAAcnG,GAAKlE,OAAO,GAAIkE,GAAEoE,IAAW,GAAIxI,OAAMwI,EACjE,IAAI3G,EACJ,KAAK6O,EAAI,EAAGA,EAAIlI,IAAUkI,EAAG,CAC3B7O,EAAQiT,EAAUpE,EAClB,IAAIgE,EAAS,CACX7S,QAAe8S,KAAM,YAAcF,EAAM5S,EAAO6O,GAAK5Q,EAAM2U,EAAOE,EAAG9S,EAAO6O,GAE9ET,GAA0B/D,EAAQwE,EAAG7O,IAIzCqK,EAAO1D,OAASA,CAChB,OAAO0D,IAGT6I,GAAI,QAASA,MACX,GAAIlK,GAAMtK,UAAUiI,MACpB,IAAIpE,GAAI5E,IACR,IAAIwV,GAAIjV,EAAQqE,KAAOyF,GAAGK,WAAW9F,GAAK,GAAIpE,OAAM6K,GAAOhB,GAAGwC,UAAUjI,GAAIyG,GAC5E,KAAK,GAAIoK,GAAI,EAAGA,EAAIpK,IAAOoK,EAAG,CAC5BhF,GAA0B+E,EAAGC,EAAG1U,UAAU0U,IAE5CD,EAAExM,OAASqC,CACX,OAAOmK,IAGX9S,GAAiBlC,MAAOsU,GACxB1E,IAAkB5P,MAIlBkH,GAAgB,SAAUgO,EAAOC,GAC/B3V,KAAKkR,EAAI,CACTlR,MAAK0V,MAAQA,CACb1V,MAAK2V,KAAOA,EAGdjT,GAAiBgF,EAAc9F,WAC7B+K,KAAM,WACJ,GAAIuE,GAAIlR,KAAKkR,CACb,IAAIwE,GAAQ1V,KAAK0V,KACjB,MAAM1V,eAAgB0H,IAAgB,CACpC,KAAM,IAAIpE,WAAU,wBAEtB,SAAWoS,KAAU,YAAa,CAChC,GAAIrK,GAAMhB,GAAGe,SAASsK,EAAM1M,OAC5B,MAAOkI,EAAI7F,EAAK6F,IAAK,CACnB,GAAIyE,GAAO3V,KAAK2V,IAChB,IAAIC,EACJ,IAAID,IAAS,MAAO,CAClBC,EAAS1E,MACJ,IAAIyE,IAAS,QAAS,CAC3BC,EAASF,EAAMxE,OACV,IAAIyE,IAAS,QAAS,CAC3BC,GAAU1E,EAAGwE,EAAMxE,IAErBlR,KAAKkR,EAAIA,EAAI,CACb,OAAOuD,IAAemB,IAG1B5V,KAAK0V,UAAa,EAClB,OAAOjB,QAGXpE,IAAY3I,EAAc9F,UAgC1B,IAAIiU,IAA6BrV,MAAM+U,KAAOT,GAAWS,IAAO,WAE9D,GAAIO,GAAM,QAASA,KAAIzK,GAAOrL,KAAKgJ,OAASqC,EAC5CyK,GAAIlU,YACJ,IAAImU,GAASvV,MAAM+U,GAAGlV,MAAMyV,GAAM,EAAG,GACrC,OAAOC,aAAkBD,IAAOC,EAAO/M,SAAW,IAEpD,KAAK6M,GAA4B,CAC/BtM,GAAe/I,MAAO,KAAMsU,GAAWS,IAGzC,GAAIS,KACFC,WAAY,QAASA,YAAW3R,EAAQ0O,GACtC,GAAI9N,GAAImF,GAAGS,SAAS9K,KACpB,IAAIqL,GAAMhB,GAAGe,SAASlG,EAAE8D,OACxB,IAAIkN,GAAiB7L,GAAGc,UAAU7G,EAClC,IAAI6R,GAAgB9L,GAAGc,UAAU6H,EACjC,IAAIoD,GAAKF,EAAiB,EAAIzP,EAAK4E,EAAM6K,EAAgB,GAAKtP,EAAKsP,EAAgB7K,EACnF,IAAI0J,GAAOoB,EAAgB,EAAI1P,EAAK4E,EAAM8K,EAAe,GAAKvP,EAAKuP,EAAe9K,EAClF,IAAI+H,EACJ,IAAIrS,UAAUiI,OAAS,EAAG,CACxBoK,EAAMrS,UAAU,GAElB,GAAIsV,SAAqBjD,KAAQ,YAAc/H,EAAMhB,GAAGc,UAAUiI,EAClE,IAAIkD,GAAYD,EAAc,EAAI5P,EAAK4E,EAAMgL,EAAa,GAAKzP,EAAKyP,EAAahL,EACjF,IAAIkL,GAAQ3P,EAAK0P,EAAYvB,EAAM1J,EAAM+K,EACzC,IAAII,GAAY,CAChB,IAAIzB,EAAOqB,GAAMA,EAAMrB,EAAOwB,EAAQ,CACpCC,GAAa,CACbzB,IAAQwB,EAAQ,CAChBH,IAAMG,EAAQ,EAEhB,MAAOA,EAAQ,EAAG,CAChB,GAAIxB,IAAQ7P,GAAG,CACbA,EAAEkR,GAAMlR,EAAE6P,OACL,OACE7P,GAAEkR,GAEXrB,GAAQyB,CACRJ,IAAMI,CACND,IAAS,EAEX,MAAOrR,IAGTuR,KAAM,QAASA,MAAKpU,GAClB,GAAI2Q,EACJ,IAAIjS,UAAUiI,OAAS,EAAG,CACxBgK,EAAQjS,UAAU,GAEpB,GAAIqS,EACJ,IAAIrS,UAAUiI,OAAS,EAAG,CACxBoK,EAAMrS,UAAU,GAElB,GAAIqM,GAAI/C,GAAGS,SAAS9K,KACpB,IAAIqL,GAAMhB,GAAGe,SAASgC,EAAEpE,OACxBgK,GAAQ3I,GAAGc,gBAAiB6H,KAAU,YAAc,EAAIA,EACxDI,GAAM/I,GAAGc,gBAAiBiI,KAAQ,YAAc/H,EAAM+H,EAEtD,IAAI+C,GAAgBnD,EAAQ,EAAIvM,EAAK4E,EAAM2H,EAAO,GAAKpM,EAAKoM,EAAO3H,EACnE,IAAIgL,GAAcjD,EAAM,EAAI/H,EAAM+H,EAAMA,CAExC,KAAK,GAAIlC,GAAIiF,EAAejF,EAAI7F,GAAO6F,EAAImF,IAAenF,EAAG,CAC3D9D,EAAE8D,GAAK7O,EAET,MAAO+K,IAGTsJ,KAAM,QAASA,MAAKC,GAClB,GAAIC,GAAOvM,GAAGS,SAAS9K,KACvB,IAAIgJ,GAASqB,GAAGe,SAASwL,EAAK5N,OAC9B,KAAKqB,GAAGK,WAAWiM,GAAY,CAC7B,KAAM,IAAIrT,WAAU,4CAEtB,GAAIuT,GAAU9V,UAAUiI,OAAS,EAAIjI,UAAU,GAAK,IACpD,KAAK,GAAImQ,GAAI,EAAG7O,EAAO6O,EAAIlI,EAAQkI,IAAK,CACtC7O,EAAQuU,EAAK1F,EACb,IAAI2F,EAAS,CACX,GAAIvW,EAAMqW,EAAWE,EAASxU,EAAO6O,EAAG0F,GAAO,CAC7C,MAAOvU,QAEJ,IAAIsU,EAAUtU,EAAO6O,EAAG0F,GAAO,CACpC,MAAOvU,MAKbyU,UAAW,QAASA,WAAUH,GAC5B,GAAIC,GAAOvM,GAAGS,SAAS9K,KACvB,IAAIgJ,GAASqB,GAAGe,SAASwL,EAAK5N,OAC9B,KAAKqB,GAAGK,WAAWiM,GAAY,CAC7B,KAAM,IAAIrT,WAAU,iDAEtB,GAAIuT,GAAU9V,UAAUiI,OAAS,EAAIjI,UAAU,GAAK,IACpD,KAAK,GAAImQ,GAAI,EAAGA,EAAIlI,EAAQkI,IAAK,CAC/B,GAAI2F,EAAS,CACX,GAAIvW,EAAMqW,EAAWE,EAASD,EAAK1F,GAAIA,EAAG0F,GAAO,CAC/C,MAAO1F,QAEJ,IAAIyF,EAAUC,EAAK1F,GAAIA,EAAG0F,GAAO,CACtC,MAAO1F,IAGX,OAAQ,GAGVzQ,KAAM,QAASA,QACb,MAAO,IAAIiH,GAAc1H,KAAM,QAGjC+W,OAAQ,QAASA,UACf,MAAO,IAAIrP,GAAc1H,KAAM,UAGjCgX,QAAS,QAASA,WAChB,MAAO,IAAItP,GAAc1H,KAAM,UAKnC,IAAIQ,MAAMoB,UAAUnB,OAAS4J,GAAGK,YAAY,GAAGjK,OAAOkM,MAAO,OACpDnM,OAAMoB,UAAUnB,KAEzB,GAAID,MAAMoB,UAAUoV,UAAY3M,GAAGK,YAAY,GAAGsM,UAAUrK,MAAO,OAC1DnM,OAAMoB,UAAUoV,QAIzB,GAAIxW,MAAMoB,UAAUnB,MAAQD,MAAMoB,UAAUoV,UAAYxW,MAAMoB,UAAUmV,QAAUvW,MAAMoB,UAAU+H,IAAa,CAC7GjH,EAAiBlC,MAAMoB,WACrBmV,OAAQvW,MAAMoB,UAAU+H,KAE1B,IAAIT,GAAKI,OAAOnB,EAAO8O,aAAc,CACnCzW,MAAMoB,UAAUuG,EAAO8O,aAAaF,OAAS,MAIjD,GAAIvV,GAAsBhB,MAAMoB,UAAUmV,QAAUvW,MAAMoB,UAAUmV,OAAOrV,OAAS,SAAU,CAC5F,GAAIwV,IAA+B1W,MAAMoB,UAAUmV,MACnDxN,IAAe/I,MAAMoB,UAAW,SAAU,QAASmV,UAAW,MAAO1M,IAAGC,KAAK4M,GAA8BlX,KAAMe,YACjHM,GAAeb,MAAMoB,UAAW+H,GAAYnJ,MAAMoB,UAAUmV,OAAQ,MAEtErU,EAAiBlC,MAAMoB,UAAWoU,GAElC,IAAI,GAAK,MAAMlQ,QAAQ,MAAO,GAAK,EAAG,CAGpCzE,EAAeb,MAAMoB,UAAW,UAAW,QAASkE,SAAQqR,GAC1D,GAAI9U,GAAQ0D,EAAmB/F,KAAMe,UACrC,IAAIsB,IAAU,GAAM,EAAIA,EAAS,EAAG,CAClC,MAAO,GAET,MAAOA,IACN,MAGLgO,GAAY7P,MAAMoB,UAAW,WAAc,MAAO5B,MAAK+W,UAGvD,IAAIrW,OAAO0W,eAAgB,CACzB/G,GAAY3P,OAAO0W,kBAAkBL,WAIvC,GAAIM,IAAoC,WAGtC,MAAOnW,GAAqB,WAC1B,MAAOV,OAAMuU,MAAO/L,QAAS,IAAKA,SAAW,MAGjD,IAAIsO,IAA6B,WAE/B,GAAIC,GAAM/W,MAAMuU,MAAM,GAAGiC,UACzB,OAAOO,GAAIvO,SAAW,GAAKzI,EAAQgX,EAAI,KAAOA,EAAI,GAAG,KAAO,GAAKA,EAAI,GAAG,KAAO,IAEjF,KAAKF,KAAqCC,GAA2B,CACnE/N,GAAe/I,MAAO,OAAQsU,GAAWC,MAE3C,GAAIyC,IAAwC,WAG1C,MAAOtW,GAAqB,WAC1B,MAAOV,OAAMuU,MAAM,OAAS,QAGhC,KAAKyC,GAAsC,CACzC,GAAIC,IAAgBjX,MAAMuU,IAC1BxL,IAAe/I,MAAO,OAAQ,QAASuU,MAAKC,GAC1C,GAAIjU,UAAUiI,OAAS,SAAYjI,WAAU,KAAO,YAAa,CAC/D,MAAOsJ,IAAGC,KAAKmN,GAAezX,KAAMe,eAC/B,CACL,MAAOT,GAAMmX,GAAezX,KAAMgV,MAKxC,GAAI0C,MAAgBhR,KAAKiR,IAAI,EAAG,IAAM,EACtC,IAAIC,IAAqB,SAAU/U,EAAQgV,GACzC,GAAI3K,IAAQlE,OAAQ0O,GACpBxK,GAAI2K,GAAY3K,EAAIlE,SAAW,GAAK,EAAI,GAAK,IAC7C,OAAO9H,GAAqB,WAC1BZ,EAAMuC,EAAQqK,EAAK,WAGjB,KAAM,IAAIiE,YAAW,6BAEvB,OAAO,QAGX,KAAKyG,GAAmBpX,MAAMoB,UAAUC,SAAU,CAChD,GAAIiW,IAAkBtX,MAAMoB,UAAUC,OACtC0H,IAAe/I,MAAMoB,UAAW,UAAW,QAASC,SAAQkW,GAC1D,MAAO1N,IAAGC,KAAKwN,GAAiB9X,KAAKgJ,QAAU,EAAIhJ,QAAWe,YAC7D,MAEL,IAAK6W,GAAmBpX,MAAMoB,UAAUe,KAAM,CAC5C,GAAIqV,IAAcxX,MAAMoB,UAAUe,GAClC4G,IAAe/I,MAAMoB,UAAW,MAAO,QAASe,KAAIoV,GAClD,MAAO1N,IAAGC,KAAK0N,GAAahY,KAAKgJ,QAAU,EAAIhJ,QAAWe,YACzD,MAEL,IAAK6W,GAAmBpX,MAAMoB,UAAUK,QAAS,CAC/C,GAAIgW,IAAiBzX,MAAMoB,UAAUK,MACrCsH,IAAe/I,MAAMoB,UAAW,SAAU,QAASK,QAAO8V,GACxD,MAAO1N,IAAGC,KAAK2N,GAAgBjY,KAAKgJ,QAAU,EAAIhJ,QAAWe,YAC5D,MAEL,IAAK6W,GAAmBpX,MAAMoB,UAAUO,MAAO,CAC7C,GAAI+V,IAAe1X,MAAMoB,UAAUO,IACnCoH,IAAe/I,MAAMoB,UAAW,OAAQ,QAASO,MAAK4V,GACpD,MAAO1N,IAAGC,KAAK4N,GAAclY,KAAKgJ,QAAU,EAAIhJ,QAAWe,YAC1D,MAEL,IAAK6W,GAAmBpX,MAAMoB,UAAUuW,OAAQ,CAC9C,GAAIC,IAAgB5X,MAAMoB,UAAUuW,KACpC5O,IAAe/I,MAAMoB,UAAW,QAAS,QAASuW,OAAMJ,GACtD,MAAO1N,IAAGC,KAAK8N,GAAepY,KAAKgJ,QAAU,EAAIhJ,QAAWe,YAC3D,MAEL,IAAK6W,GAAmBpX,MAAMoB,UAAUG,QAAS,CAC/C,GAAIsW,IAAiB7X,MAAMoB,UAAUG,MACrCwH,IAAe/I,MAAMoB,UAAW,SAAU,QAASG,QAAOgW,GACxD,MAAO1N,IAAGC,KAAK+N,GAAgBrY,KAAKgJ,QAAU,EAAIhJ,QAAWe,YAC5D,MAEL,IAAK6W,GAAmBpX,MAAMoB,UAAU0W,YAAa,MAAO,CAC1D,GAAIC,IAAsB/X,MAAMoB,UAAU0W,WAC1C/O,IAAe/I,MAAMoB,UAAW,cAAe,QAAS0W,aAAYP,GAClE,MAAO1N,IAAGC,KAAKiO,GAAqBvY,KAAKgJ,QAAU,EAAIhJ,QAAWe,YACjE,MAGL,GAAIyX,IAAoBjQ,OAAO,UAAY,CAC3C,IAAIkQ,IAAqBlQ,OAAO,UAAY,CAC5C,IAAImQ,IAAqBxW,EAAMmS,GAAO,SAAUsE,GAC9C,MAAOpQ,QAAOoQ,EAAI,EAAIA,KAAO,GAE/B,IAAIH,IAAqBC,IAAsBC,GAAoB,CACjE,GAAIE,IAAarQ,MACjB,IAAIsQ,IAAc,YAClB,IAAIC,IAAa,aAEjB,IAAIC,IAAWF,GAAYG,KAAK5Y,KAAKyY,GACrC,IAAII,IAAUH,GAAWE,KAAK5Y,KAAK0Y,GACnC,IAAII,IAAc,SAAU9L,GAC1B,GAAIV,EACJ,UAAWU,GAAE+L,UAAY,WAAY,CACnCzM,EAASU,EAAE+L,SACX,IAAIjQ,GAAKC,UAAUuD,GAAS,CAC1B,MAAOA,IAGX,SAAWU,GAAErK,WAAa,WAAY,CACpC2J,EAASU,EAAErK,UACX,IAAImG,GAAKC,UAAUuD,GAAS,CAC1B,MAAOA,IAGX,KAAM,IAAIpJ,WAAU,oBAEtB,IAAI8V,IAAW9E,GAAW0E,KAAK5Y,KAAKkU,GACpC,IAAI+E,IAAW9E,GAAcyE,KAAK5Y,KAAKmU,GACvC,IAAI+E,IAAc,WAEhB,GAAIA,GAAa,QAAS/Q,QAAOlG,GAC/B,GAAIkX,EACJ,IAAIxY,UAAUiI,OAAS,EAAG,CACxBuQ,EAAYrQ,GAAKC,UAAU9G,GAASA,EAAQ6W,GAAY7W,EAAO,cAC1D,CACLkX,EAAY,EAEd,SAAWA,KAAc,SAAU,CACjCA,EAAYlP,GAAGC,KAAK6J,GAAUoF,EAC9B,IAAIR,GAASQ,GAAY,CACvBA,EAAYC,SAAStT,EAAUqT,EAAW,GAAI,OACzC,IAAIN,GAAQM,GAAY,CAC7BA,EAAYC,SAAStT,EAAUqT,EAAW,GAAI,OACzC,IAAIH,GAASG,IAAcF,GAASE,GAAY,CACrDA,EAAYE,KAGhB,GAAIC,GAAW1Z,IACf,IAAI2Z,GAAkBzY,EAAqB,WACzC0X,GAAWhX,UAAUuX,QAAQhZ,KAAKuZ,EAClC,OAAO,OAET,IAAIA,YAAoBJ,KAAeK,EAAiB,CACtD,MAAO,IAAIf,IAAWW,GAGxB,MAAOX,IAAWW,GAGpB,OAAOD,KAETtJ,IAAgB4I,GAAYU,MAE5B5W,GAAiB4W,IACfG,IAAKb,GAAWa,IAChBG,UAAWhB,GAAWgB,UACtBC,UAAWjB,GAAWiB,UACtBC,kBAAmBlB,GAAWkB,kBAC9BC,kBAAmBnB,GAAWmB,mBAKhCxR,QAAS+Q,EACTlW,GAAMY,SAASyB,EAAS,SAAU6T,IAMpC,GAAIU,IAAiBtT,KAAKiR,IAAI,EAAG,IAAM,CACvCjV,GAAiB6F,QACf+C,iBAAkB0O,GAClBC,kBAAmBD,GACnBE,QAAS,sBAETV,SAAU/T,EAAQ+T,SAClBW,WAAY1U,EAAQ0U,WAEpBxU,SAAU8C,EAEV2R,UAAW,QAASA,WAAU/X,GAC5B,MAAOoG,GAAepG,IAAUgI,GAAGc,UAAU9I,KAAWA,GAG1DgY,cAAe,QAASA,eAAchY,GACpC,MAAOkG,QAAO6R,UAAU/X,IAAU2E,EAAK3E,IAAUkG,OAAO+C,kBAG1D9C,MAAOF,GAGTjH,GAAekH,OAAQ,WAAY9C,EAAQ+T,SAAUjR,OAAOiR,WAAa/T,EAAQ+T,SAQjF,KAAK,CAAE,GAAG9C,KAAK,WAAc,MAAO,UAAa,EAAG,CAClDnN,GAAe/I,MAAMoB,UAAW,OAAQoU,GAAoBU,MAE9D,IAAK,CAAE,GAAGI,UAAU,WAAc,MAAO,UAAa,EAAG,CACvDvN,GAAe/I,MAAMoB,UAAW,YAAaoU,GAAoBc,WAKnE,GAAIwD,IAAiBpa,SAASE,KAAKD,KAAKD,SAASE,KAAMM,OAAOkB,UAAU2Y,qBACxE,IAAIC,IAAmB,QAASA,kBAAiBtN,EAAKuN,GACpD,GAAIlZ,GAAuB+Y,GAAepN,EAAKuN,GAAO,CACpD/Z,OAAOW,eAAe6L,EAAKuN,GAAQjY,WAAY,SAGnD,IAAIkY,IAAY,QAASA,aAGvB,GAAIC,GAAUpS,OAAOvI,KACrB,IAAIqL,GAAMtK,UAAUiI,MACpB,IAAI4R,GAAkBvP,EAAMsP,CAC5B,IAAIlQ,GAAO,GAAIjK,OAAMoa,EAAkB,EAAI,EAAIA,EAC/C,KAAK,GAAI1J,GAAIyJ,EAASzJ,EAAI7F,IAAO6F,EAAG,CAClCzG,EAAKyG,EAAIyJ,GAAW5Z,UAAUmQ,GAEhC,MAAOzG,GAET,IAAIoQ,IAAW,QAASA,UAAStW,GAC/B,MAAO,SAASuW,gBAAexW,EAAQb,GACrCa,EAAOb,GAAOc,EAAOd,EACrB,OAAOa,IAGX,IAAIyW,IAAgB,SAAUzW,EAAQC,GACpC,GAAIyW,GAAava,EAAKC,OAAO6D,GAC7B,IAAI0W,EACJ,IAAI5Q,GAAGK,WAAWhK,OAAOwa,uBAAwB,CAC/CD,EAAUjZ,EAAQtB,OAAOwa,sBAAsBxa,OAAO6D,IAAU+V,GAAe/V,IAEjF,MAAOzC,GAAQkE,EAAQgV,EAAYC,OAAgBJ,GAAStW,GAASD,GAGvE,IAAI6W,KAEFC,OAAQ,SAAU9W,EAAQC,GACxB,GAAI6R,GAAK/L,GAAGS,SAASxG,EAAQ,6CAC7B,OAAOxC,GAAQuI,GAAGC,KAAKoQ,GAAW,EAAG3Z,WAAYga,GAAe3E,IAIlEiF,GAAI,QAASA,IAAG7P,EAAGC,GACjB,MAAOpB,IAAGkB,UAAUC,EAAGC,IAG3B,IAAI6P,IAA6B5a,OAAO0a,QAAU1a,OAAO6a,mBAAsB,WAG7E,GAAIC,GAAU9a,OAAO6a,mBAAoBtJ,EAAG,GAC5C,KACEvR,OAAO0a,OAAOI,EAAS,MACvB,MAAOva,GACP,MAAOua,GAAQ,KAAO,OAG1B,IAAIF,GAA4B,CAC9B/R,GAAe7I,OAAQ,SAAUya,GAAYC,QAE/C1Y,EAAiBhC,OAAQya,GAEzB,IAAI5Z,EAAqB,CACvB,GAAIka,KAGF3W,eAAiB,SAAUpE,EAAQgb,GACjC,GAAI5X,EAEJ,IAAI6X,GAAY,SAAUvO,EAAGH,GAC3B,IAAK5C,GAAGQ,aAAauC,GAAI,CACvB,KAAM,IAAI9J,WAAU,wCAEtB,KAAM2J,IAAU,MAAQ5C,GAAGQ,aAAaoC,IAAS,CAC/C,KAAM,IAAI3J,WAAU,8CAAgD2J,IAIxE,IAAInI,GAAiB,SAAUsI,EAAGH,GAChC0O,EAAUvO,EAAGH,EACb3M,GAAMwD,EAAKsJ,EAAGH,EACd,OAAOG,GAGT,KAEEtJ,EAAMpD,EAAOkD,yBAAyBlD,EAAOkB,UAAW8Z,GAAO5X,GAC/DxD,GAAMwD,KAAS,MACf,MAAO7C,GACP,GAAIP,EAAOkB,eAAiB8Z,GAAQ,CAElC,OAGF5X,EAAM,SAAUmJ,GACdjN,KAAK0b,GAASzO,EAOhBnI,GAAe8W,SAAW9W,EACxBA,KAAmB,MACnBpE,EAAOkB,oBACIlB,GASf,MAAOoE,IACPpE,OAAQ,aAGZgC,GAAiBhC,OAAQ+a,IAK3B,GAAI/a,OAAOoE,gBAAkBpE,OAAO0W,gBAChC1W,OAAO0W,eAAe1W,OAAOoE,kBAAmB,SAAW,MAC3DpE,OAAO0W,eAAe1W,OAAO8D,OAAO,SAAW,KAAM,EACtD,WACC,GAAIqX,GAAWnb,OAAO8D,OAAO,KAC7B,IAAIsX,GAAMpb,OAAO0W,cACjB,IAAI2E,GAAMrb,OAAOoE,cACjBpE,QAAO0W,eAAiB,SAAUlS,GAChC,GAAIwH,GAASoP,EAAI5W,EACjB,OAAOwH,KAAWmP,EAAW,KAAOnP,EAEtChM,QAAOoE,eAAiB,SAAUI,EAAG8G,GACnC,GAAIiB,GAAQjB,IAAM,KAAO6P,EAAW7P,CACpC,OAAO+P,GAAI7W,EAAG+H,GAEhBvM,QAAOoE,eAAe8W,SAAW,UAIrC,GAAII,KAA+Bhb,EAAY,WAAcN,OAAOD,KAAK,QACzE,KAAKub,GAA6B,CAChC,GAAIC,IAAqBvb,OAAOD,IAChC8I,IAAe7I,OAAQ,OAAQ,QAASD,MAAK4B,GAC3C,MAAO4Z,IAAmB5R,GAAGS,SAASzI,KAExC5B,GAAOC,OAAOD,KAEhB,GAAIyb,IAAyBlb,EAAY,WAAcN,OAAOD,KAAK,OACnE,IAAIyb,GAAwB,CAC1B,GAAIC,IAA2Bzb,OAAOD,IACtC8I,IAAe7I,OAAQ,OAAQ,QAASD,MAAK4B,GAC3C,GAAI6G,GAAKG,MAAMhH,GAAQ,CACrB,GAAI+Z,KACJ,KAAK,GAAI3G,KAAKpT,GAAO,CACnB,GAAImF,EAAgBnF,EAAOoT,GAAI,CAC7BrP,EAAMgW,EAAW3G,IAGrB,MAAO2G,GAET,MAAOD,IAAyB9Z,IAElC5B,GAAOC,OAAOD,KAGhB,GAAIC,OAAOwP,oBAAqB,CAC9B,GAAImM,KAA+Brb,EAAY,WAAcN,OAAOwP,oBAAoB,QACxF,KAAKmM,GAA6B,CAChC,GAAIC,UAA2BhX,UAAW,SAAW5E,OAAOwP,oBAAoB5K,UAChF,IAAIiX,IAAoC7b,OAAOwP,mBAC/C3G,IAAe7I,OAAQ,sBAAuB,QAASwP,qBAAoB7N,GACzE,GAAIma,GAAMnS,GAAGS,SAASzI,EACtB,IAAIS,EAAU0Z,KAAS,kBAAmB,CACxC,IACE,MAAOD,IAAkCC,GACzC,MAAOvb,GAEP,MAAO+E,MAAYsW,KAGvB,MAAOC,IAAkCC,MAI/C,GAAI9b,OAAOkD,yBAA0B,CACnC,GAAI6Y,KAA+Bzb,EAAY,WAAcN,OAAOkD,yBAAyB,MAAO,QACpG,KAAK6Y,GAA6B,CAChC,GAAIC,IAAyChc,OAAOkD,wBACpD2F,IAAe7I,OAAQ,2BAA4B,QAASkD,0BAAyBvB,EAAO4B,GAC1F,MAAOyY,IAAuCrS,GAAGS,SAASzI,GAAQ4B,MAIxE,GAAIvD,OAAOic,KAAM,CACf,GAAIC,KAA+B5b,EAAY,WAAcN,OAAOic,KAAK,QACzE,KAAKC,GAA6B,CAChC,GAAIC,IAAqBnc,OAAOic,IAChCpT,IAAe7I,OAAQ,OAAQ,QAASic,MAAKta,GAC3C,IAAKgI,GAAGQ,aAAaxI,GAAQ,CAAE,MAAOA,GACtC,MAAOwa,IAAmBxa,MAIhC,GAAI3B,OAAOoc,SAAU,CACnB,GAAIC,KAAmC/b,EAAY,WAAcN,OAAOoc,SAAS,QACjF,KAAKC,GAAiC,CACpC,GAAIC,IAAyBtc,OAAOoc,QACpCvT,IAAe7I,OAAQ,WAAY,QAASoc,UAASza,GACnD,IAAKgI,GAAGQ,aAAaxI,GAAQ,CAAE,MAAO,MACtC,MAAO2a,IAAuB3a,MAIpC,GAAI3B,OAAOuc,OAAQ,CACjB,GAAIC,KAAiClc,EAAY,WAAcN,OAAOuc,OAAO,QAC7E,KAAKC,GAA+B,CAClC,GAAIC,IAAuBzc,OAAOuc,MAClC1T,IAAe7I,OAAQ,SAAU,QAASuc,QAAO5a,GAC/C,IAAKgI,GAAGQ,aAAaxI,GAAQ,CAAE,MAAOA,GACtC,MAAO8a,IAAqB9a,MAIlC,GAAI3B,OAAO0c,SAAU,CACnB,GAAIC,KAAmCrc,EAAY,WAAcN,OAAO0c,SAAS,QACjF,KAAKC,GAAiC,CACpC,GAAIC,IAAyB5c,OAAO0c,QACpC7T,IAAe7I,OAAQ,WAAY,QAAS0c,UAAS/a,GACnD,IAAKgI,GAAGQ,aAAaxI,GAAQ,CAAE,MAAO,MACtC,MAAOib,IAAuBjb,MAIpC,GAAI3B,OAAO6a,kBAAmB,CAC5B,GAAIgC,KAA4Cvc,EAAY,WAAcN,OAAO6a,kBAAkB,QACnG,KAAKgC,GAA0C,CAC7C,GAAIC,IAAkC9c,OAAO6a,iBAC7ChS,IAAe7I,OAAQ,oBAAqB,QAAS6a,mBAAkBlZ,GACrE,IAAKgI,GAAGQ,aAAaxI,GAAQ,CAAE,MAAOA,GACtC,MAAOmb,IAAgCnb,MAI7C,GAAI3B,OAAO+c,aAAc,CACvB,GAAIC,KAAuC1c,EAAY,WAAcN,OAAO+c,aAAa,QACzF,KAAKC,GAAqC,CACxC,GAAIC,IAA6Bjd,OAAO+c,YACxClU,IAAe7I,OAAQ,eAAgB,QAAS+c,cAAapb,GAC3D,IAAKgI,GAAGQ,aAAaxI,GAAQ,CAAE,MAAO,OACtC,MAAOsb,IAA2Btb,MAIxC,GAAI3B,OAAO0W,eAAgB,CACzB,GAAIwG,KAAmC5c,EAAY,WAAcN,OAAO0W,eAAe,QACvF,KAAKwG,GAAiC,CACpC,GAAIC,IAAmBnd,OAAO0W,cAC9B7N,IAAe7I,OAAQ,iBAAkB,QAAS0W,gBAAe/U,GAC/D,MAAOwb,IAAiBxT,GAAGS,SAASzI,OAK1C,GAAIyb,IAAWvc,GAAwB,WACrC,GAAIwc,GAAOrd,OAAOkD,yBAAyB6K,OAAO7M,UAAW,QAC7D,OAAOmc,IAAQ1T,GAAGK,WAAWqT,EAAKzc,OAEpC,IAAIC,IAAwBuc,GAAU,CACpC,GAAIE,IAAoB,QAASC,SAC/B,IAAK5T,GAAGQ,aAAa7K,MAAO,CAC1B,KAAM,IAAIsD,WAAU,0DAEtB,GAAIoJ,GAAS,EACb,IAAI1M,KAAKuF,OAAQ,CACfmH,GAAU,IAEZ,GAAI1M,KAAKke,WAAY,CACnBxR,GAAU,IAEZ,GAAI1M,KAAKme,UAAW,CAClBzR,GAAU,IAEZ,GAAI1M,KAAKoe,QAAS,CAChB1R,GAAU,IAEZ,GAAI1M,KAAKqe,OAAQ,CACf3R,GAAU,IAEZ,MAAOA,GAGTtJ,GAAMC,OAAOoL,OAAO7M,UAAW,QAASoc,IAG1C,GAAIM,IAA+B/c,GAAuBL,EAAqB,WAC7E,MAAO2E,QAAO,GAAI4I,QAAO,KAAM,QAAU,QAE3C,IAAI8P,IAAkC7U,IAAcnI,GAAwB,WAE1E,GAAI8H,GAAQ,GACZA,GAAMlB,EAAOgG,OAAS,KACtB,OAAOM,QAAOpF,KAAWA,IAG3B,IAAImV,IAAyBtd,EAAqB,WAChD,MAAOuN,QAAO7M,UAAUmB,SAAS5C,MAAOoE,OAAQ,UAAa,SAE/D,IAAIka,IAAoCD,IAA0Btd,EAAqB,WACrF,MAAOuN,QAAO7M,UAAUmB,SAAS5C,MAAOoE,OAAQ,IAAK0Z,MAAO,QAAW,QAEzE,KAAKO,KAA2BC,GAAmC,CACjE,GAAIC,IAAqBjQ,OAAO7M,UAAUmB,QAC1C1B,GAAeoN,OAAO7M,UAAW,WAAY,QAASmB,YACpD,GAAI4b,GAAItU,GAAGM,uBAAuB3K,KAClC,IAAIkJ,GAAKG,MAAMsV,GAAI,CACjB,MAAOre,GAAMoe,GAAoBC,GAEnC,GAAIC,GAAU7U,GAAQ4U,EAAEpa,OACxB,IAAI0Z,GAAQlU,GAAQ4U,EAAEV,MACtB,OAAO,IAAMW,EAAU,IAAMX,GAC5B,KACH7a,GAAMiB,iBAAiBoK,OAAO7M,UAAUmB,SAAU2b,IAGpD,GAAInd,KAAyB+c,IAAgCC,IAAkC,CAC7F,GAAIM,IAAcne,OAAOkD,yBAAyB6K,OAAO7M,UAAW,SAASN,GAC7E,IAAIwd,IAAape,OAAOkD,yBAAyB6K,OAAO7M,UAAW,aACnE,IAAImd,IAAqB,WAEvB,MAAO/e,MAAKuE,OAEd,IAAIya,IAAe3U,GAAGK,WAAWoU,GAAWxd,KAAOwd,GAAWxd,IAAMyd,EAEpE,IAAIE,IAAaxQ,MACjB,IAAIyQ,IAAc,WAChB,MAAO,SAASzQ,QAAOmQ,EAASX,GAC9B,GAAIkB,GAAkB9U,GAAG2D,SAAS4Q,EAClC,IAAIQ,GAAgBpf,eAAgByO,OACpC,KAAK2Q,GAAiBD,SAA0BlB,KAAU,aAAeW,EAAQzZ,cAAgBsJ,OAAQ,CACvG,MAAOmQ,GAGT,GAAIS,GAAIT,CACR,IAAIrU,GAAI0T,CACR,IAAI/U,GAAKG,MAAMuV,GAAU,CACvBS,EAAIhV,GAAGC,KAAK0U,GAAcJ,EAC1BrU,SAAW0T,KAAU,YAAc5T,GAAGC,KAAKuU,GAAaD,GAAWX,CACnE,OAAO,IAAIxP,QAAO4Q,EAAG9U,OAChB,IAAI4U,EAAiB,CAC1BE,EAAIT,EAAQra,MACZgG,SAAW0T,KAAU,YAAcW,EAAQX,MAAQA,EAErD,MAAO,IAAIgB,IAAWL,EAASX,MAGnCjO,IAAgBiP,GAAYC,IAC1BI,OAAQ,MAKV7Q,QAASyQ,EACT9b,GAAMY,SAASyB,EAAS,SAAUyZ,IAMpC,GAAI3d,EAAqB,CACvB,GAAIge,KACFC,MAAO,KACPC,UAAW,KACXC,UAAW,KACXC,YAAa,KACbC,aAAc,KAEhBje,GAASlB,EAAK8e,IAAe,SAAU9E,GACrC,GAAIA,IAAQhM,WAAY8Q,GAAa9E,IAAShM,SAAS,CACrDrL,EAAMC,OAAOoL,OAAQ8Q,GAAa9E,GAAO,QAASnZ,OAChD,MAAOmN,QAAOgM,QAKtBrK,GAAkB3B,OAElB,IAAIoR,IAAiB,EAAItX,OAAO2R,OAChC,IAAI4F,IAAkB,QAASA,iBAAgBC,GAE7C,MAAQA,GAAIF,GAAkBA,GAEhC,IAAIG,IAAoBtZ,KAAKiR,IAAI,GAAI,GACrC,IAAIsI,IAAsBvZ,KAAKiR,IAAI,EAAG,MAAQ,EAAIqI,GAClD,IAAIE,IAAsBxZ,KAAKiR,IAAI,GAAI,IACvC,IAAIwI,IAAIzZ,KAAKyZ,CACb,IAAIC,IAAQ1Z,KAAK0Z,KACjB,IAAIC,IAAS3Z,KAAK2Z,MAClB,IAAIC,IAAY/X,OAAO3G,UAAU2e,UAC1BhY,QAAO3G,UAAU2e,GAExB,IAAIC,KACFC,MAAO,QAASA,OAAMpe,GACpB,GAAIa,GAAIqF,OAAOlG,EACf,IAAIiG,EAAYpF,IAAMb,EAAQ,EAAG,CAAE,MAAOoX,KAC1C,GAAIvW,IAAM,EAAG,CAAE,MAAO,GACtB,GAAIA,IAAMsP,SAAU,CAAE,MAAOtP,GAC7B,MAAOkE,GAAMlE,EAAIid,GAAM7Y,EAAMpE,EAAI,GAAKoE,EAAMpE,EAAI,GAAKid,IAAM,GAG7DO,MAAO,QAASA,OAAMre,GACpB,GAAIa,GAAIqF,OAAOlG,EACf,IAAIa,IAAM,IAAMwC,EAAexC,GAAI,CACjC,MAAOA,GAET,MAAOA,GAAI,GAAKwd,OAAOxd,GAAKkE,EAAKlE,EAAIoE,EAAOpE,EAAIA,EAAK,KAGvDyd,MAAO,QAASA,OAAMte,GACpB,GAAIa,GAAIqF,OAAOlG,EACf,IAAIiG,EAAYpF,IAAMA,GAAK,GAAKA,EAAI,EAAG,CACrC,MAAOuW,KAET,GAAIvW,KAAO,EAAG,CAAE,OAAQsP,SACxB,GAAItP,IAAM,EAAG,CAAE,MAAOsP,UACtB,GAAItP,IAAM,EAAG,CAAE,MAAOA,GACtB,MAAO,GAAMkE,GAAM,EAAIlE,IAAM,EAAIA,KAGnC0d,KAAM,QAASA,MAAKve,GAClB,GAAIa,GAAIqF,OAAOlG,EACf,IAAIa,IAAM,EAAG,CAAE,MAAOA,GACtB,GAAI2d,GAAS3d,EAAI,CACjB,IAAIwJ,EACJ,IAAImU,EAAQ,CAAE3d,GAAKA,EACnB,GAAIA,IAAMsP,SAAU,CAClB9F,EAAS8F,aACJ,CACL9F,EAASxF,EAAKE,EAAKlE,GAAK,EAExBwJ,IAAWxJ,GAAKwJ,EAASA,GAAY,EAAIA,GAAW,EAEtD,MAAOmU,IAAUnU,EAASA,GAG5BoU,MAAO,QAASA,OAAMze,GAEpB,GAAIa,GAAIqF,OAAOlG,EACf,IAAIuG,GAASyB,GAAGa,SAAShI,EACzB,IAAI0F,IAAW,EAAG,CAChB,MAAO,IAET,MAAO0X,IAAYjW,GAAGC,KAAKgW,GAAW1X,GAAU,GAAK9B,EAAOM,EAAKwB,EAAS,IAAOwX,KAGnFW,KAAM,QAASA,MAAK1e,GAClB,GAAIa,GAAIqF,OAAOlG,EACf,IAAIa,IAAM,EAAG,CAAE,MAAO,GACtB,GAAIoF,EAAYpF,GAAI,CAAE,MAAOuW,KAC7B,IAAK/T,EAAexC,GAAI,CAAE,MAAOsP,UACjC,GAAItP,EAAI,EAAG,CAAEA,GAAKA,EAClB,GAAIA,EAAI,GAAI,CAAE,MAAOgE,GAAKhE,GAAK,EAC/B,OAAQgE,EAAKhE,GAAKgE,GAAMhE,IAAM,GAGhC8d,MAAO,QAASA,OAAM3e,GACpB,GAAIa,GAAIqF,OAAOlG,EACf,IAAIa,KAAOsP,SAAU,CAAE,OAAQ,EAC/B,IAAK9M,EAAexC,IAAMA,IAAM,EAAG,CAAE,MAAOA,GAC5C,GAAI8D,EAAK9D,GAAK,GAAK,CACjB,MAAOgE,GAAKhE,GAAK,EAInB,GAAI+d,GAAI/d,CACR,IAAIge,GAAM,CACV,IAAInB,GAAI,CACR,OAAOmB,EAAMD,IAAMC,EAAK,CACtBA,GAAOD,CACPlB,IAAK,CACLkB,IAAK/d,EAAI6c,EAEX,MAAOmB,IAGTC,MAAO,QAASA,OAAMje,EAAGke,GACvB,GAAI1U,GAAS,CACb,IAAI2U,GAAU,CACd,KAAK,GAAInQ,GAAI,EAAGA,EAAInQ,UAAUiI,SAAUkI,EAAG,CACzC,GAAI7O,GAAQ2E,EAAKuB,OAAOxH,UAAUmQ,IAClC,IAAImQ,EAAUhf,EAAO,CACnBqK,GAAW2U,EAAUhf,GAAUgf,EAAUhf,EACzCqK,IAAU,CACV2U,GAAUhf,MACL,CACLqK,GAAUrK,EAAQ,EAAKA,EAAQgf,GAAYhf,EAAQgf,GAAWhf,GAGlE,MAAOgf,KAAY7O,SAAWA,SAAW6O,EAAU/Z,EAAMoF,IAG3D4U,KAAM,QAASA,MAAKjf,GAClB,MAAO+E,GAAK/E,GAAS+d,IAGvBmB,MAAO,QAASA,OAAMlf,GACpB,MAAO+E,GAAK/E,GAASge,IAGvBmB,MAAO,QAASA,OAAMnf,GACpB,GAAIa,GAAIqF,OAAOlG,EACf,IAAIa,GAAK,GAAKoF,EAAYpF,GAAI,CAAE,MAAOuW,KACvC,GAAIvW,IAAM,GAAKA,IAAMsP,SAAU,CAAE,MAAOtP,GACxC,GAAIA,KAAO,EAAG,CAAE,OAAQsP,SAExB,MAAQ,GAAItP,EAAK,IAAM,EAAIA,EAAIA,GAAKkE,EAAK,EAAIlE,IAAO,EAAIA,EAAK,KAG/DyF,KAAMD,EAEN+Y,KAAM,QAASA,MAAKpf,GAClB,GAAIa,GAAIqF,OAAOlG,EACf,KAAKqD,EAAexC,IAAMA,IAAM,EAAG,CAAE,MAAOA,GAE5C,GAAI8D,EAAK9D,GAAK,EAAG,CACf,OAAQwD,KAAKsa,MAAM9d,GAAKwD,KAAKsa,OAAO9d,IAAM,EAE5C,OAAQgE,EAAKhE,EAAI,GAAKgE,GAAMhE,EAAI,IAAMid,GAAI,GAG5CuB,KAAM,QAASA,MAAKrf,GAClB,GAAIa,GAAIqF,OAAOlG,EACf,IAAIiG,EAAYpF,IAAMA,IAAM,EAAG,CAAE,MAAOA,GAExC,GAAIA,GAAK,GAAI,CAAE,MAAO,GACtB,GAAIA,IAAM,GAAI,CAAE,OAAQ,EAExB,OAAQwD,KAAKsa,MAAM9d,GAAKwD,KAAKsa,OAAO9d,KAAOgE,EAAKhE,GAAKgE,GAAMhE,KAG7Dye,MAAO,QAASA,OAAMtf,GACpB,GAAIa,GAAIqF,OAAOlG,EACf,OAAOa,GAAI,GAAK4D,GAAQ5D,GAAK4D,EAAO5D,IAGtC0e,KAAM,QAASA,MAAK1e,EAAGke,GAErB,GAAI5V,GAAInB,GAAGa,SAAShI,EACpB,IAAIuI,GAAIpB,GAAGa,SAASkW,EACpB,IAAIS,GAAMrW,IAAM,GAAM,KACtB,IAAIsW,GAAKtW,EAAI,KACb,IAAIuW,GAAMtW,IAAM,GAAM,KACtB,IAAIuW,GAAKvW,EAAI,KAGb,OAAQqW,GAAKE,GAAUH,EAAKG,EAAOF,EAAKC,GAAQ,KAAQ,GAAK,GAG/DE,OAAQ,QAASA,QAAO/e,GACtB,GAAIgf,GAAI3Z,OAAOrF,EACf,IAAIgf,IAAM,GAAKA,IAAM1P,UAAY0P,KAAO1P,UAAYlK,EAAY4Z,GAAI,CAClE,MAAOA,GAET,GAAIvZ,GAAOD,EAAMwZ,EACjB,IAAIjb,GAAMD,EAAKkb,EACf,IAAIjb,EAAMiZ,GAAqB,CAC7B,MAAOvX,GAAOmX,GACZ7Y,EAAMiZ,GAAsBF,IAC1BE,GAAsBF,GAG5B,GAAIxU,IAAK,EAAKwU,GAAoBzX,OAAO2R,SAAYjT,CACrD,IAAIyF,GAASlB,GAAKA,EAAIvE,EACtB,IAAIyF,EAASuT,IAAuB3X,EAAYoE,GAAS,CACvD,MAAO/D,GAAO6J,SAEhB,MAAO7J,GAAO+D,GAGlBhK,GAAiBgE,KAAM8Z,GAEvBnf,GAAeqF,KAAM,QAAS8Z,GAAUgB,MAAO9a,KAAK8a,OAAO,UAAY,MAEvEngB,GAAeqF,KAAM,QAAS8Z,GAAUE,MAAOha,KAAKga,OAAO,QAAUha,KAAKga,MAAM,KAEhFrf,GAAeqF,KAAM,OAAQ8Z,GAAUkB,KAAMhb,KAAKgb,MAAM,UAAY,MAEpErgB,GAAeqF,KAAM,QAAS8Z,GAAUC,MAAO/Z,KAAK+Z,MAAMlY,OAAOqR,aAAepH,SAEhFnR,GAAeqF,KAAM,OAAQ8Z,GAAUI,KAAMla,KAAKO,IAAI,EAAKP,KAAKka,KAAK,QAAU,QAAWrY,OAAO2R,QAAU,EAE3G7Y,GAAeqF,KAAM,OAAQ8Z,GAAUiB,KAAM/a,KAAK+a,MAAM,UAAY,MAEpE,IAAIU,IAAazb,KAAKsa,MAAM,GAC5B3f,GAAeqF,KAAM,QAAS8Z,GAAUQ,MAAOmB,GAAa,oBAAsBA,GAAa,mBAE/F,IAAIC,IAAgB1b,KAAK2b,KAEzB,IAAIC,IAAiC5b,KAAK2b,MAAM,GAAO9Z,OAAO2R,QAAU,KAAQ,GAC9ExT,KAAK2b,OAAO,GAAO9Z,OAAO2R,QAAU,QAAW,CAMjD,IAAIqI,IAAyC1C,GAAiB,CAC9D,IAAI2C,IAAyC,EAAI3C,GAAkB,CACnE,IAAI4C,KACFF,GACAC,IACArK,MAAM,SAAUuK,GAChB,MAAOhc,MAAK2b,MAAMK,KAASA,GAE7BrhB,GAAeqF,KAAM,QAAS,QAAS2b,OAAMnf,GAC3C,GAAI6D,GAAQD,EAAO5D,EACnB,IAAIyf,GAAO5b,KAAW,GAAK,EAAIA,EAAQ;AACvC,MAAO7D,GAAI6D,EAAQ,GAAMA,EAAQ4b,IAC/BL,KAAmCG,GACvCrf,GAAMiB,iBAAiBqC,KAAK2b,MAAOD,GAEnC,IAAIQ,IAAWlc,KAAKkb,IACpB,IAAIlb,KAAKkb,KAAK,WAAY,MAAQ,EAAG,CAEnClb,KAAKkb,KAAOpB,GAAUoB,IACtBxe,GAAMiB,iBAAiBqC,KAAKkb,KAAMgB,IAEpC,GAAIlc,KAAKkb,KAAK5Y,SAAW,EAAG,CAG1BO,GAAe7C,KAAM,OAAQ,QAASkb,MAAK1e,EAAGke,GAC5C,MAAO/W,IAAGC,KAAKsY,GAAUlc,KAAM3F,aAOnC,GAAI8hB,IAAe,WACjB,GAAIC,GAAard,EAAQqd,UAEzB,UAAWA,KAAe,kBAAqBA,KAAe,SAAU,CAAE,OAE1EzY,GAAG0Y,UAAY,SAAUC,GACvB,IAAK3Y,GAAGQ,aAAamY,GAAU,CAC7B,MAAO,OAET,SAAWA,GAAQC,WAAa,YAAa,CAC3C,MAAO,OAET,MAAO,MAKT,IAAIC,GAAoB,SAAUte,GAChC,IAAKyF,GAAGU,cAAcnG,GAAI,CACxB,KAAM,IAAItB,WAAU,2BAEtB,GAAI6f,GAAanjB,IACjB,IAAIojB,GAAW,SAAUC,EAASC,GAChC,GAAIH,EAAWE,cAAiB,IAAKF,EAAWG,aAAgB,GAAG,CACjE,KAAM,IAAIhgB,WAAU,+BAEtB6f,EAAWE,QAAUA,CACrBF,GAAWG,OAASA,EAGtBH,GAAWE,YAAe,EAC1BF,GAAWG,WAAc,EACzBH,GAAWH,QAAU,GAAIpe,GAAEwe,EAC3B,MAAM/Y,GAAGK,WAAWyY,EAAWE,UAAYhZ,GAAGK,WAAWyY,EAAWG,SAAU,CAC5E,KAAM,IAAIhgB,WAAU,4BAKxB,IAAIigB,EAEJ,UAAWje,UAAW,aAAe+E,GAAGK,WAAWpF,OAAOke,aAAc,CACtED,EAAkB,WAEhB,GAAIE,KACJ,IAAIC,GAAc,sBAClB,IAAIC,GAAiB,SAAUC,GAC7Bxd,EAAMqd,EAAUG,EAChBte,QAAOke,YAAYE,EAAa,KAElC,IAAIG,GAAgB,SAAUC,GAC5B,GAAIA,EAAMvf,SAAWe,QAAUwe,EAAMC,OAASL,EAAa,CACzDI,EAAME,iBACN,IAAIP,EAASza,SAAW,EAAG,CAAE,OAC7B,GAAI4a,GAAKrd,EAAOkd,EAChBG,MAGJte,QAAO2e,iBAAiB,UAAWJ,EAAe,KAClD,OAAOF,IAGX,GAAIO,GAAkB,WAKpB,GAAI7E,GAAI5Z,EAAQ0e,OAChB,IAAIC,GAAK/E,GAAKA,EAAEgE,SAAWhE,EAAEgE,SAC7B,OAAOe,IAAM,SAAUC,GACrB,MAAOD,GAAGE,KAAKD,IAKnB,IAAIE,GAAUla,GAAGK,WAAWjF,EAAQ+e,cAClC/e,EAAQ+e,mBACDC,WAAY,UAAYA,QAAQC,SAAWD,QAAQC,SAC1DR,MACC7Z,GAAGK,WAAW6Y,GAAmBA,IAClC,SAAUc,GAAQvB,EAAWuB,EAAM,IAIrC,IAAIM,GAAmB,SAAUzhB,GAAK,MAAOA,GAC7C,IAAI0hB,GAAkB,SAAU3jB,GAAK,KAAMA,GAC3C,IAAI4jB,GAAkB,CACtB,IAAIC,GAAoB,CACxB,IAAIC,GAAmB,CAEvB,IAAIC,GAAyB,CAC7B,IAAIC,GAAwB,CAC5B,IAAIC,GAA4B,CAEhC,IAAIC,KAEJ,IAAIC,GAA4B,SAAUC,EAASlC,EAAYlV,GAC7DsW,EAAQ,WACNe,EAAmBD,EAASlC,EAAYlV,KAI5C,IAAIqX,GAAqB,SAAUD,EAASE,EAAmBtX,GAC7D,GAAIuX,GAAe3gB,CACnB,IAAI0gB,IAAsBJ,EAAyB,CAGjD,MAAOE,GAAQpX,GAEjB,IACEuX,EAAgBH,EAAQpX,EACxBpJ,GAAI0gB,EAAkBlC,QACtB,MAAOpiB,GACPukB,EAAgBvkB,CAChB4D,GAAI0gB,EAAkBjC,OAExBze,EAAE2gB,GAGJ,IAAIC,GAAiB,SAAUzC,EAAS3gB,GACtC,GAAI4gB,GAAWD,EAAQC,QACvB,IAAIja,GAASia,EAASyC,cACtB,IAAI1c,EAAS,EAAG,CACdoc,EACEnC,EAAS0C,wBACT1C,EAAS2C,oBACTvjB,EAEF4gB,GAAS0C,4BAA+B,EACxC1C,GAAS4C,qBAAwB,EACjC5C,GAAS2C,wBAA2B,EACpC,IAAI5c,EAAS,EAAG,CACd,IAAK,GAAIkI,GAAI,EAAG4U,EAAM,EAAG5U,EAAIlI,EAAQkI,IAAK4U,GAAO,EAAG,CAClDV,EACEnC,EAAS6C,EAAMd,GACf/B,EAAS6C,EAAMZ,GACf7iB,EAEF2gB,GAAQ8C,EAAMd,OAA+B,EAC7ChC,GAAQ8C,EAAMb,OAA8B,EAC5CjC,GAAQ8C,EAAMZ,OAAkC,KAItDjC,EAASvW,OAASrK,CAClB4gB,GAAS8C,MAAQjB,CACjB7B,GAASyC,eAAiB,EAG5B,IAAIM,GAAgB,SAAUhD,EAASiD,GACrC,GAAIhD,GAAWD,EAAQC,QACvB,IAAIja,GAASia,EAASyC,cACtB,IAAI1c,EAAS,EAAG,CACdoc,EACEnC,EAASiD,uBACTjD,EAAS2C,oBACTK,EAEFhD,GAAS0C,4BAA+B,EACxC1C,GAAS4C,qBAAwB,EACjC5C,GAAS2C,wBAA2B,EACpC,IAAI5c,EAAS,EAAG,CACd,IAAK,GAAIkI,GAAI,EAAG4U,EAAM,EAAG5U,EAAIlI,EAAQkI,IAAK4U,GAAO,EAAG,CAClDV,EACEnC,EAAS6C,EAAMb,GACfhC,EAAS6C,EAAMZ,GACfe,EAEFjD,GAAQ8C,EAAMd,OAA+B,EAC7ChC,GAAQ8C,EAAMb,OAA8B,EAC5CjC,GAAQ8C,EAAMZ,OAAkC,KAItDjC,EAASvW,OAASuZ,CAClBhD,GAAS8C,MAAQhB,CACjB9B,GAASyC,eAAiB,EAG5B,IAAIS,GAA2B,SAAUnD,GACvC,GAAIoD,GAAkB,KACtB,IAAI/C,GAAU,SAAUgD,GACtB,GAAI/B,EACJ,IAAI8B,EAAiB,CAAE,OACvBA,EAAkB,IAClB,IAAIC,IAAerD,EAAS,CAC1B,MAAOgD,GAAchD,EAAS,GAAI1f,WAAU,oBAE9C,IAAK+G,GAAGQ,aAAawb,GAAa,CAChC,MAAOZ,GAAezC,EAASqD,GAEjC,IACE/B,EAAO+B,EAAW/B,KAClB,MAAOrjB,GACP,MAAO+kB,GAAchD,EAAS/hB,GAEhC,IAAKoJ,GAAGK,WAAW4Z,GAAO,CACxB,MAAOmB,GAAezC,EAASqD,GAEjC9B,EAAQ,WACN+B,EAA0BtD,EAASqD,EAAY/B,KAGnD,IAAIhB,GAAS,SAAU2C,GACrB,GAAIG,EAAiB,CAAE,OACvBA,EAAkB,IAClB,OAAOJ,GAAchD,EAASiD,GAEhC,QAAS5C,QAASA,EAASC,OAAQA,GAGrC,IAAIiD,GAAgB,SAAUjC,EAAMkC,EAAUnD,EAASC,GAKrD,GAAIgB,IAASmC,EAAwB,CACnCnmB,EAAMgkB,EAAMkC,EAAUnD,EAASC,EAAQ6B,OAClC,CACL7kB,EAAMgkB,EAAMkC,EAAUnD,EAASC,IAGnC,IAAIgD,GAA4B,SAAUtD,EAASwD,EAAUlC,GAC3D,GAAIoC,GAAqBP,EAAyBnD,EAClD,IAAIK,GAAUqD,EAAmBrD,OACjC,IAAIC,GAASoD,EAAmBpD,MAChC,KACEiD,EAAcjC,EAAMkC,EAAUnD,EAASC,GACvC,MAAOriB,GACPqiB,EAAOriB,IAIX,IAAI0lB,GAAmBF,CACvB,IAAItC,GAAW,WACb,GAAItB,GAAc,QAASsB,SAAQf,GACjC,KAAMpjB,eAAgB6iB,IAAc,CAClC,KAAM,IAAIvf,WAAU,sCAEtB,GAAItD,MAAQA,KAAKijB,SAAU,CACzB,KAAM,IAAI3f,WAAU,oBAGtB,IAAK+G,GAAGK,WAAW0Y,GAAW,CAC5B,KAAM,IAAI9f,WAAU,wBAEtB,GAAI0f,GAAUtS,GAAoB1Q,KAAM6iB,EAAa8D,GACnD1D,UACEvW,WAAa,GACbqZ,MAAOlB,EAMPa,eAAgB,EAChBC,4BAA8B,GAC9BO,2BAA6B,GAC7BN,wBAA0B,KAG9B,IAAIc,GAAqBP,EAAyBnD,EAClD,IAAIM,GAASoD,EAAmBpD,MAChC,KACEF,EAASsD,EAAmBrD,QAASC,GACrC,MAAOriB,GACPqiB,EAAOriB,GAET,MAAO+hB,GAET,OAAOH,KAET8D,GAAoBxC,EAAQviB,SAE5B,IAAIglB,GAAsB,SAAUC,EAAO9P,EAAQoM,EAAY2D,GAC7D,GAAIC,GAAgB,KACpB,OAAO,UAAU7jB,GACf,GAAI6jB,EAAe,CAAE,OACrBA,EAAgB,IAChBhQ,GAAO8P,GAAS3jB,CAChB,MAAO4jB,EAAUvQ,QAAW,EAAG,CAC7B,GAAI8M,GAAUF,EAAWE,OACzBA,GAAQtM,KAKd,IAAIiQ,GAAoB,SAAUC,EAAgBriB,EAAGsiB,GACnD,GAAInb,GAAKkb,EAAerd,QACxB,IAAImN,KACJ,IAAI+P,IAAcvQ,MAAO,EACzB,IAAI5J,GAAM0I,CACV,IAAIwR,GAAQ,CACZ,OAAO,KAAM,CACX,IACEla,EAAOtC,GAAGuC,aAAab,EACvB,IAAIY,IAAS,MAAO,CAClBsa,EAAe9a,KAAO,IACtB,OAEFkJ,EAAY1I,EAAKtK,MACjB,MAAOpB,GACPgmB,EAAe9a,KAAO,IACtB,MAAMlL,GAER8V,EAAO8P,OAAc,EACrB,IAAIM,GAAcviB,EAAEye,QAAQhO,EAC5B,IAAI+R,GAAiBR,EACnBC,EAAO9P,EAAQmQ,EAAkBJ,EAEnCA,GAAUvQ,OAAS,CACnBgQ,GAAcY,EAAY7C,KAAM6C,EAAaC,EAAgBF,EAAiB5D,OAC9EuD,IAAS,EAEX,KAAOC,EAAUvQ,QAAW,EAAG,CAC7B,GAAI8M,GAAU6D,EAAiB7D,OAC/BA,GAAQtM,GAEV,MAAOmQ,GAAiBlE,QAG1B,IAAIqE,GAAqB,SAAUJ,EAAgBriB,EAAGsiB,GACpD,GAAInb,GAAKkb,EAAerd,QACxB,IAAI+C,GAAM0I,EAAW8R,CACrB,OAAO,KAAM,CACX,IACExa,EAAOtC,GAAGuC,aAAab,EACvB,IAAIY,IAAS,MAAO,CAKlBsa,EAAe9a,KAAO,IACtB,OAEFkJ,EAAY1I,EAAKtK,MACjB,MAAOpB,GACPgmB,EAAe9a,KAAO,IACtB,MAAMlL,GAERkmB,EAAcviB,EAAEye,QAAQhO,EACxBkR,GAAcY,EAAY7C,KAAM6C,EAAaD,EAAiB7D,QAAS6D,EAAiB5D,QAE1F,MAAO4D,GAAiBlE,QAG1BtgB,GAAiByhB,GACfja,IAAK,QAASA,KAAIod,GAChB,GAAI1iB,GAAI5E,IACR,KAAKqK,GAAGQ,aAAajG,GAAI,CACvB,KAAM,IAAItB,WAAU,yBAEtB,GAAI6f,GAAa,GAAID,GAAkBte,EACvC,IAAIgF,GAAUqd,CACd,KACErd,EAAWS,GAAGuB,YAAY0b,EAC1BL,IAAmBrd,SAAUA,EAAUuC,KAAM,MAC7C,OAAO6a,GAAkBC,EAAgBriB,EAAGue,GAC5C,MAAOliB,GACP,GAAIsmB,GAAYtmB,CAChB,IAAIgmB,IAAmBA,EAAe9a,KAAM,CAC1C,IACE9B,GAAG+B,cAAcxC,EAAU,MAC3B,MAAO4d,GACPD,EAAYC,GAGhB,GAAIlE,GAASH,EAAWG,MACxBA,GAAOiE,EACP,OAAOpE,GAAWH,UAItByE,KAAM,QAASA,MAAKH,GAClB,GAAI1iB,GAAI5E,IACR,KAAKqK,GAAGQ,aAAajG,GAAI,CACvB,KAAM,IAAItB,WAAU,yBAEtB,GAAI6f,GAAa,GAAID,GAAkBte,EACvC,IAAIgF,GAAUqd,CACd,KACErd,EAAWS,GAAGuB,YAAY0b,EAC1BL,IAAmBrd,SAAUA,EAAUuC,KAAM,MAC7C,OAAOkb,GAAmBJ,EAAgBriB,EAAGue,GAC7C,MAAOliB,GACP,GAAIsmB,GAAYtmB,CAChB,IAAIgmB,IAAmBA,EAAe9a,KAAM,CAC1C,IACE9B,GAAG+B,cAAcxC,EAAU,MAC3B,MAAO4d,GACPD,EAAYC,GAGhB,GAAIlE,GAASH,EAAWG,MACxBA,GAAOiE,EACP,OAAOpE,GAAWH,UAItBM,OAAQ,QAASA,QAAO2C,GACtB,GAAIrhB,GAAI5E,IACR,KAAKqK,GAAGQ,aAAajG,GAAI,CACvB,KAAM,IAAItB,WAAU,2BAEtB,GAAI6f,GAAa,GAAID,GAAkBte,EACvC,IAAI8iB,GAAavE,EAAWG,MAC5BoE,GAAWzB,EACX,OAAO9C,GAAWH,SAGpBK,QAAS,QAASA,SAAQnB,GAExB,GAAItd,GAAI5E,IACR,KAAKqK,GAAGQ,aAAajG,GAAI,CACvB,KAAM,IAAItB,WAAU,2BAEtB,GAAI+G,GAAG0Y,UAAUb,GAAI,CACnB,GAAI/c,GAAc+c,EAAE/c,WACpB,IAAIA,IAAgBP,EAAG,CACrB,MAAOsd,IAGX,GAAIiB,GAAa,GAAID,GAAkBte,EACvC,IAAI+iB,GAAcxE,EAAWE,OAC7BsE,GAAYzF,EACZ,OAAOiB,GAAWH,UAItBtgB,GAAiBikB,GACfiB,MAAS,SAAUC,GACjB,MAAO7nB,MAAKskB,KAAK,KAAMuD,IAGzBvD,KAAM,QAASA,MAAKwD,EAAaD,GAC/B,GAAI7E,GAAUhjB,IACd,KAAKqK,GAAG0Y,UAAUC,GAAU,CAAE,KAAM,IAAI1f,WAAU,iBAClD,GAAIsB,GAAIyF,GAAG8C,mBAAmB6V,EAASmB,EACvC,IAAI+C,EACJ,IAAIa,GAAuBhnB,UAAUiI,OAAS,GAAKjI,UAAU,KAAOokB,CACpE,IAAI4C,GAAwBnjB,IAAMuf,EAAS,CACzC+C,EAAmB/B,MACd,CACL+B,EAAmB,GAAIhE,GAAkBte,GAM3C,GAAIojB,GAAyB3d,GAAGK,WAAWod,GAAeA,EAAcnD,CACxE,IAAIsD,GAAwB5d,GAAGK,WAAWmd,GAAcA,EAAajD,CACrE,IAAI3B,GAAWD,EAAQC,QACvB,IAAI5gB,EACJ,IAAI4gB,EAAS8C,QAAUlB,EAAiB,CACtC,GAAI5B,EAASyC,iBAAmB,EAAG,CACjCzC,EAAS0C,wBAA0BqC,CACnC/E,GAASiD,uBAAyB+B,CAClChF,GAAS2C,oBAAsBsB,MAC1B,CACL,GAAIpB,GAAM,GAAK7C,EAASyC,eAAiB,EACzCzC,GAAS6C,EAAMd,GAA0BgD,CACzC/E,GAAS6C,EAAMb,GAAyBgD,CACxChF,GAAS6C,EAAMZ,GAA6BgC,EAE9CjE,EAASyC,gBAAkB,MACtB,IAAIzC,EAAS8C,QAAUjB,EAAmB,CAC/CziB,EAAQ4gB,EAASvW,MACjB0Y,GACE4C,EAAwBd,EAAkB7kB,OAEvC,IAAI4gB,EAAS8C,QAAUhB,EAAkB,CAC9C1iB,EAAQ4gB,EAASvW,MACjB0Y,GACE6C,EAAuBf,EAAkB7kB,OAEtC,CACL,KAAM,IAAIiB,WAAU,4BAEtB,MAAO4jB,GAAiBlE,UAK5BmC,GAA0B,GAAIjC,GAAkBiB,EAChDsC,GAAyBE,EAAkBrC,IAE3C,OAAOH,KAIT,IAAI1e,EAAQ0e,QAAS,OACZ1e,GAAQ0e,QAAQ+D,aAChBziB,GAAQ0e,QAAQgE,YAChB1iB,GAAQ0e,QAAQviB,UAAUwmB,MAGnC,SAAWvF,MAAgB,WAAY,CAErCngB,EAAiB+C,GAAW0e,QAAStB,IAIrC,IAAIwF,IAA6B1jB,EAAoBc,EAAQ0e,QAAS,SAAU7W,GAC9E,MAAOA,GAAE+V,QAAQ,IAAIiB,KAAK,uBAA2BhX,IAEvD,IAAIgb,KAA0CtnB,EAAY,WACxDyE,EAAQ0e,QAAQb,OAAO,IAAIgB,KAAK,KAAM,GAAGA,KAAK,KAAM3c,IAEtD,IAAI4gB,IAA+BvnB,EAAY,WAAcyE,EAAQ0e,QAAQhkB,KAAK,EAAGwH,IAMrF,IAAI6gB,IAAwB,SAAUrE,GACpC,GAAInY,GAAImY,EAAQd,QAAQ,EACxBrX,GAAE7G,cACF,IAAI2I,GAAKqW,EAAQd,QAAQrX,EACzB,KACE8B,EAAGwW,KAAK,KAAM3c,GAAM2c,KAAK,KAAM3c,GAC/B,MAAO1G,GACP,MAAO,MAET,MAAO+K,KAAM8B,GACbrI,EAAQ0e,QAGV,IAAIsE,IAAwBlnB,GAAwB,WAClD,GAAIgV,GAAQ,CACZ,IAAIiQ,GAAW9lB,OAAOW,kBAAmB,QAAUC,IAAK,WAAciV,GAAS,IAC/E4N,SAAQd,QAAQmD,EAChB,OAAOjQ,KAAU,IAGnB,IAAImS,IAAqB,QAASA,oBAAmBC,GACnD,GAAI3c,GAAI,GAAImY,SAAQwE,EACpBA,GAAS,EAAG,aACZ3oB,MAAKskB,KAAOtY,EAAEsY,IACdtkB,MAAKmF,YAAcujB,mBAErBA,IAAmB9mB,UAAYuiB,QAAQviB,SACvC8mB,IAAmBxe,IAAMia,QAAQja,GAEjC,IAAI0e,IAAwB1nB,EAAqB,WAC/C,QAASwnB,GAAmBxe,KAAK,EAAG,KAGtC,KAAKme,KAA+BC,KAC/BC,IAAgCC,KAChCC,IAAyBG,GAAuB,CAInDzE,QAAUtB,EAIVtZ,IAAe9D,EAAS,UAAWod,IAErC,GAAIsB,QAAQja,IAAIlB,SAAW,EAAG,CAC5B,GAAI6f,IAAU1E,QAAQja,GACtBX,IAAe4a,QAAS,MAAO,QAASja,KAAIod,GAC1C,MAAOjd,IAAGC,KAAKue,GAAS7oB,KAAMe,aAGlC,GAAIojB,QAAQsD,KAAKze,SAAW,EAAG,CAC7B,GAAI8f,IAAW3E,QAAQsD,IACvBle,IAAe4a,QAAS,OAAQ,QAASsD,MAAKH,GAC5C,MAAOjd,IAAGC,KAAKwe,GAAU9oB,KAAMe,aAGnC,GAAIojB,QAAQd,QAAQra,SAAW,EAAG,CAChC,GAAI+f,IAAc5E,QAAQd,OAC1B9Z,IAAe4a,QAAS,UAAW,QAASd,SAAQngB,GAClD,MAAOmH,IAAGC,KAAKye,GAAa/oB,KAAMe,aAGtC,GAAIojB,QAAQb,OAAOta,SAAW,EAAG,CAC/B,GAAIggB,IAAa7E,QAAQb,MACzB/Z,IAAe4a,QAAS,SAAU,QAASb,QAAO2F,GAChD,MAAO5e,IAAGC,KAAK0e,GAAYhpB,KAAMe,aAGrCyZ,GAAiB2J,QAAS,MAC1B3J,IAAiB2J,QAAS,OAC1B3J,IAAiB2J,QAAS,UAC1B3J,IAAiB2J,QAAS,SAC1B/T,IAAkB+T,SAMpB,GAAI+E,IAAY,SAAU1d,GACxB,GAAIC,GAAIhL,EAAKqB,EAAQ0J,EAAG,SAAUtG,EAAGuQ,GACnCvQ,EAAEuQ,GAAK,IACP,OAAOvQ,QAET,OAAOsG,GAAE6F,KAAK,OAAS5F,EAAE4F,KAAK,KAEhC,IAAI8X,IAA0BD,IAAW,IAAK,IAAK,MAEnD,IAAIE,IAAiCF,IAAW,IAAK,EAAG,IAAK,IAAK,GAElE,IAAI3nB,EAAqB,CAEvB,GAAI8nB,IAAU,QAASA,SAAQ5lB,EAAK6lB,GAClC,IAAKA,IAA4BH,GAAyB,CACxD,MAAO,MAET,GAAIhf,GAAkB1G,GAAM,CAC1B,MAAO,IAAM4G,GAAGqD,SAASjK,OACpB,UAAWA,KAAQ,SAAU,CAClC,MAAO,IAAMA,MACR,UAAWA,KAAQ,SAAU,CAElC,IAAK2lB,GAAgC,CACnC,MAAO,IAAM3lB,EAEf,MAAOA,OACF,UAAWA,KAAQ,UAAW,CACnC,MAAO,IAAMA,EAEf,MAAO,MAGT,IAAI8lB,IAAc,QAASA,eAEzB,MAAO7oB,QAAO8D,OAAS9D,OAAO8D,OAAO,SAGvC,IAAIglB,IAAmB,QAASA,kBAAiBC,EAAgB9mB,EAAK2kB,GACpE,GAAI/mB,EAAQ+mB,IAAape,GAAKE,OAAOke,GAAW,CAC9C3lB,EAAS2lB,EAAU,SAAUoC,GAC3B,IAAKrf,GAAGQ,aAAa6e,GAAQ,CAC3B,KAAM,IAAIpmB,WAAU,kBAAoBomB,EAAQ,2BAElD/mB,EAAImB,IAAI4lB,EAAM,GAAIA,EAAM,UAErB,IAAIpC,YAAoBmC,GAAgB,CAC7CnpB,EAAMmpB,EAAe7nB,UAAUC,QAASylB,EAAU,SAAUjlB,EAAOoB,GACjEd,EAAImB,IAAIL,EAAKpB,SAEV,CACL,GAAIsnB,GAAMC,CACV,KAAKzf,GAAkBmd,GAAW,CAChCsC,EAAQjnB,EAAImB,GACZ,KAAKuG,GAAGK,WAAWkf,GAAQ,CAAE,KAAM,IAAItmB,WAAU,WACjDqmB,EAAOtf,GAAGuB,YAAY0b,GAExB,SAAWqC,KAAS,YAAa,CAC/B,MAAO,KAAM,CACX,GAAIhd,GAAOtC,GAAGuC,aAAa+c,EAC3B,IAAIhd,IAAS,MAAO,CAAE,MACtB,GAAIkd,GAAWld,EAAKtK,KACpB,KACE,IAAKgI,GAAGQ,aAAagf,GAAW,CAC9B,KAAM,IAAIvmB,WAAU,kBAAoBumB,EAAW,2BAErDvpB,EAAMspB,EAAOjnB,EAAKknB,EAAS,GAAIA,EAAS,IACxC,MAAO5oB,GACPoJ,GAAG+B,cAAcud,EAAM,KACvB,MAAM1oB,OAMhB,IAAI6oB,IAAmB,QAASA,kBAAiBC,EAAgBjmB,EAAKwjB,GACpE,GAAI/mB,EAAQ+mB,IAAape,GAAKE,OAAOke,GAAW,CAC9C3lB,EAAS2lB,EAAU,SAAUjlB,GAC3ByB,EAAIkmB,IAAI3nB,SAEL,IAAIilB,YAAoByC,GAAgB,CAC7CzpB,EAAMypB,EAAenoB,UAAUC,QAASylB,EAAU,SAAUjlB,GAC1DyB,EAAIkmB,IAAI3nB,SAEL,CACL,GAAIsnB,GAAMC,CACV,KAAKzf,GAAkBmd,GAAW,CAChCsC,EAAQ9lB,EAAIkmB,GACZ,KAAK3f,GAAGK,WAAWkf,GAAQ,CAAE,KAAM,IAAItmB,WAAU,WACjDqmB,EAAOtf,GAAGuB,YAAY0b,GAExB,SAAWqC,KAAS,YAAa,CAC/B,MAAO,KAAM,CACX,GAAIhd,GAAOtC,GAAGuC,aAAa+c,EAC3B,IAAIhd,IAAS,MAAO,CAAE,MACtB,GAAI0I,GAAY1I,EAAKtK,KACrB,KACE/B,EAAMspB,EAAO9lB,EAAKuR,GAClB,MAAOpU,GACPoJ,GAAG+B,cAAcud,EAAM,KACvB,MAAM1oB,OAOhB,IAAIgpB,KACFpiB,IAAM,WAEJ,GAAIqiB,KAEJ,IAAIC,GAAW,QAASA,UAAS1mB,EAAKpB,GACpCrC,KAAKyD,IAAMA,CACXzD,MAAKqC,MAAQA,CACbrC,MAAK2M,KAAO,IACZ3M,MAAKoqB,KAAO,KAGdD,GAASvoB,UAAUyoB,UAAY,QAASA,aACtC,MAAOrqB,MAAKyD,MAAQymB,EAGtB,IAAII,GAAQ,QAASA,OAAM3nB,GACzB,QAASA,EAAI4nB,QAGf,IAAIC,GAAiB,QAASA,gBAAe7nB,EAAKE,GAChD,IAAKwH,GAAGQ,aAAalI,KAAS2nB,EAAM3nB,GAAM,CACxC,KAAM,IAAIW,WAAU,wBAA0BT,EAAS,oCAAsCwH,GAAGqD,SAAS/K,KAI7G,IAAI8nB,GAAc,QAASA,aAAY9nB,EAAKgT,GAC1C6U,EAAe7nB,EAAK,kBACpB3C,MAAK0qB,KAAO/nB,EAAIgoB,KAChB3qB,MAAKkR,EAAIlR,KAAK0qB,IACd1qB,MAAK2V,KAAOA,EAGd8U,GAAY7oB,WACV+K,KAAM,QAASA,QACb,GAAIuE,GAAIlR,KAAKkR,CACb,IAAIyE,GAAO3V,KAAK2V,IAChB,IAAI+U,GAAO1qB,KAAK0qB,IAChB,UAAW1qB,MAAKkR,IAAM,YAAa,CACjC,MAAOuD,MAET,MAAOvD,EAAEmZ,aAAenZ,IAAMwZ,EAAM,CAElCxZ,EAAIA,EAAEkZ,KAGR,GAAI1d,EACJ,OAAOwE,EAAEvE,OAAS+d,EAAM,CACtBxZ,EAAIA,EAAEvE,IACN,KAAKuE,EAAEmZ,YAAa,CAClB,GAAI1U,IAAS,MAAO,CAClBjJ,EAASwE,EAAEzN,QACN,IAAIkS,IAAS,QAAS,CAC3BjJ,EAASwE,EAAE7O,UACN,CACLqK,GAAUwE,EAAEzN,IAAKyN,EAAE7O,OAErBrC,KAAKkR,EAAIA,CACT,OAAOuD,IAAe/H,IAI1B1M,KAAKkR,MAAS,EACd,OAAOuD,OAGXpE,IAAYoa,EAAY7oB,UAExB,IAAIgpB,EACJ,IAAIC,GAAU,QAAShjB,OACrB,KAAM7H,eAAgB6H,MAAM,CAC1B,KAAM,IAAIvE,WAAU,kCAEtB,GAAItD,MAAQA,KAAKuqB,QAAS,CACxB,KAAM,IAAIjnB,WAAU,oBAEtB,GAAIX,GAAM+N,GAAoB1Q,KAAM6H,IAAK+iB,GACvCL,QAAS,KACTI,MAAO,KACPG,KAAMljB,EAAU,GAAIA,GAAY,KAChCmjB,MAAO,EACPC,SAAUzB,MAGZ,IAAImB,GAAO,GAAIP,GAAS,KAAM,KAG9BO,GAAK/d,KAAO+d,EAAKN,KAAOM,CACxB/nB,GAAIgoB,MAAQD,CAGZ,IAAI3pB,UAAUiI,OAAS,EAAG,CACxBwgB,GAAiB3hB,IAAKlF,EAAK5B,UAAU,IAEvC,MAAO4B,GAETioB,GAAgBC,EAAQjpB,SAExBwB,GAAMC,OAAOunB,EAAe,OAAQ,WAClC,SAAW5qB,MAAK+qB,QAAU,YAAa,CACrC,KAAM,IAAIznB,WAAU,0CAEtB,MAAOtD,MAAK+qB,OAGdroB,GAAiBkoB,GACftpB,IAAK,QAASA,KAAImC,GAChB+mB,EAAexqB,KAAM,MACrB,IAAI0pB,EACJ,IAAIuB,GAAO5B,GAAQ5lB,EAAK,KACxB,IAAIwnB,IAAS,KAAM,CAEjBvB,EAAQ1pB,KAAKgrB,SAASC,EACtB,IAAIvB,EAAO,CACT,MAAOA,GAAMrnB,UACR,CACL,QAGJ,GAAIrC,KAAK8qB,KAAM,CAEbpB,EAAQ3hB,EAAW5H,KAAKH,KAAK8qB,KAAMrnB,EACnC,IAAIimB,EAAO,CACT,MAAOA,GAAMrnB,UACR,CACL,QAGJ,GAAIqoB,GAAO1qB,KAAK2qB,KAChB,IAAIzZ,GAAIwZ,CACR,QAAQxZ,EAAIA,EAAEvE,QAAU+d,EAAM,CAC5B,GAAIrgB,GAAGqB,cAAcwF,EAAEzN,IAAKA,GAAM,CAChC,MAAOyN,GAAE7O,SAKf4F,IAAK,QAASA,KAAIxE,GAChB+mB,EAAexqB,KAAM,MACrB,IAAIirB,GAAO5B,GAAQ5lB,EAAK,KACxB,IAAIwnB,IAAS,KAAM,CAEjB,aAAcjrB,MAAKgrB,SAASC,KAAU,YAExC,GAAIjrB,KAAK8qB,KAAM,CAEb,MAAO9iB,GAAW7H,KAAKH,KAAK8qB,KAAMrnB,GAEpC,GAAIinB,GAAO1qB,KAAK2qB,KAChB,IAAIzZ,GAAIwZ,CACR,QAAQxZ,EAAIA,EAAEvE,QAAU+d,EAAM,CAC5B,GAAIrgB,GAAGqB,cAAcwF,EAAEzN,IAAKA,GAAM,CAChC,MAAO,OAGX,MAAO,QAGTK,IAAK,QAASA,KAAIL,EAAKpB,GACrBmoB,EAAexqB,KAAM,MACrB,IAAI0qB,GAAO1qB,KAAK2qB,KAChB,IAAIzZ,GAAIwZ,CACR,IAAIhB,EACJ,IAAIuB,GAAO5B,GAAQ5lB,EAAK,KACxB,IAAIwnB,IAAS,KAAM,CAEjB,SAAWjrB,MAAKgrB,SAASC,KAAU,YAAa,CAC9CjrB,KAAKgrB,SAASC,GAAM5oB,MAAQA,CAC5B,OAAOrC,UACF,CACL0pB,EAAQ1pB,KAAKgrB,SAASC,GAAQ,GAAId,GAAS1mB,EAAKpB,EAChD6O,GAAIwZ,EAAKN,UAGN,IAAIpqB,KAAK8qB,KAAM,CAEpB,GAAI9iB,EAAW7H,KAAKH,KAAK8qB,KAAMrnB,GAAM,CACnCsE,EAAW5H,KAAKH,KAAK8qB,KAAMrnB,GAAKpB,MAAQA,MACnC,CACLqnB,EAAQ,GAAIS,GAAS1mB,EAAKpB,EAC1B6F,GAAW/H,KAAKH,KAAK8qB,KAAMrnB,EAAKimB,EAChCxY,GAAIwZ,EAAKN,MAIb,OAAQlZ,EAAIA,EAAEvE,QAAU+d,EAAM,CAC5B,GAAIrgB,GAAGqB,cAAcwF,EAAEzN,IAAKA,GAAM,CAChCyN,EAAE7O,MAAQA,CACV,OAAOrC,OAGX0pB,EAAQA,GAAS,GAAIS,GAAS1mB,EAAKpB,EACnC,IAAIgI,GAAGkB,WAAW,EAAG9H,GAAM,CACzBimB,EAAMjmB,KAAO,EAEfimB,EAAM/c,KAAO3M,KAAK2qB,KAClBjB,GAAMU,KAAOpqB,KAAK2qB,MAAMP,IACxBV,GAAMU,KAAKzd,KAAO+c,CAClBA,GAAM/c,KAAKyd,KAAOV,CAClB1pB,MAAK+qB,OAAS,CACd,OAAO/qB,OAGTkrB,OAAU,SAAUznB,GAClB+mB,EAAexqB,KAAM,SACrB,IAAI0qB,GAAO1qB,KAAK2qB,KAChB,IAAIzZ,GAAIwZ,CACR,IAAIO,GAAO5B,GAAQ5lB,EAAK,KACxB,IAAIwnB,IAAS,KAAM,CAEjB,SAAWjrB,MAAKgrB,SAASC,KAAU,YAAa,CAC9C,MAAO,OAET/Z,EAAIlR,KAAKgrB,SAASC,GAAMb,WACjBpqB,MAAKgrB,SAASC,OAEhB,IAAIjrB,KAAK8qB,KAAM,CAEpB,IAAK9iB,EAAW7H,KAAKH,KAAK8qB,KAAMrnB,GAAM,CACpC,MAAO,OAETyN,EAAInJ,EAAW5H,KAAKH,KAAK8qB,KAAMrnB,GAAK2mB,IACpCtiB,GAAc3H,KAAKH,KAAK8qB,KAAMrnB,GAGhC,OAAQyN,EAAIA,EAAEvE,QAAU+d,EAAM,CAC5B,GAAIrgB,GAAGqB,cAAcwF,EAAEzN,IAAKA,GAAM,CAChCyN,EAAEzN,IAAMymB,CACRhZ,GAAE7O,MAAQ6nB,CACVhZ,GAAEkZ,KAAKzd,KAAOuE,EAAEvE,IAChBuE,GAAEvE,KAAKyd,KAAOlZ,EAAEkZ,IAChBpqB,MAAK+qB,OAAS,CACd,OAAO,OAGX,MAAO,QAGTI,MAAO,QAASA,SAEdX,EAAexqB,KAAM,QACrBA,MAAK8qB,KAAOljB,EAAU,GAAIA,GAAY,IACtC5H,MAAK+qB,MAAQ,CACb/qB,MAAKgrB,SAAWzB,IAChB,IAAImB,GAAO1qB,KAAK2qB,KAChB,IAAIzZ,GAAIwZ,CACR,IAAI1e,GAAIkF,EAAEvE,IACV,QAAQuE,EAAIlF,KAAO0e,EAAM,CACvBxZ,EAAEzN,IAAMymB,CACRhZ,GAAE7O,MAAQ6nB,CACVle,GAAIkF,EAAEvE,IACNuE,GAAEvE,KAAOuE,EAAEkZ,KAAOM,EAEpBA,EAAK/d,KAAO+d,EAAKN,KAAOM,GAG1BjqB,KAAM,QAASA,QACb+pB,EAAexqB,KAAM,OACrB,OAAO,IAAIyqB,GAAYzqB,KAAM,QAG/B+W,OAAQ,QAASA,UACfyT,EAAexqB,KAAM,SACrB,OAAO,IAAIyqB,GAAYzqB,KAAM,UAG/BgX,QAAS,QAASA,WAChBwT,EAAexqB,KAAM,UACrB,OAAO,IAAIyqB,GAAYzqB,KAAM,cAG/B6B,QAAS,QAASA,SAAQupB,GACxBZ,EAAexqB,KAAM,UACrB,IAAIqrB,GAAUtqB,UAAUiI,OAAS,EAAIjI,UAAU,GAAK,IACpD,IAAIgL,GAAK/L,KAAKgX,SACd,KAAK,GAAI0S,GAAQ3d,EAAGY,QAAS+c,EAAMvd,KAAMud,EAAQ3d,EAAGY,OAAQ,CAC1D,GAAI0e,EAAS,CACX/qB,EAAM8qB,EAAUC,EAAS3B,EAAMrnB,MAAM,GAAIqnB,EAAMrnB,MAAM,GAAIrC,UACpD,CACLorB,EAAS1B,EAAMrnB,MAAM,GAAIqnB,EAAMrnB,MAAM,GAAIrC,UAKjDqQ,IAAYua,EAAeA,EAAc5T,QAEzC,OAAO6T,MAGThhB,IAAM,WACJ,GAAIyhB,GAAQ,QAASA,OAAMxnB,GACzB,MAAOA,GAAIynB,eAAkBznB,GAAIknB,WAAa,YAEhD,IAAIQ,GAAiB,QAASA,gBAAe1nB,EAAKjB,GAChD,IAAKwH,GAAGQ,aAAa/G,KAASwnB,EAAMxnB,GAAM,CAExC,KAAM,IAAIR,WAAU,iBAAmBT,EAAS,oCAAsCwH,GAAGqD,SAAS5J,KAQtG,IAAI2nB,EACJ,IAAIC,GAAU,QAAS7hB,OACrB,KAAM7J,eAAgB6J,MAAM,CAC1B,KAAM,IAAIvG,WAAU,kCAEtB,GAAItD,MAAQA,KAAKurB,QAAS,CACxB,KAAM,IAAIjoB,WAAU,oBAEtB,GAAIQ,GAAM4M,GAAoB1Q,KAAM6J,IAAK4hB,GACvCF,QAAS,KACTI,cAAe,KACfX,SAAUzB,MAEZ,KAAKzlB,EAAIynB,QAAS,CAChB,KAAM,IAAIjoB,WAAU,WAItB,GAAIvC,UAAUiI,OAAS,EAAG,CACxB8gB,GAAiBjgB,IAAK/F,EAAK/C,UAAU,IAEvC,MAAO+C,GAET2nB,GAAgBC,EAAQ9pB,SAExB,IAAIgqB,GAAY,SAAUnoB,GACxB,GAAIgS,GAAIhS,CACR,IAAIgS,IAAM,QAAS,CACjB,MAAO,UACF,IAAIA,IAAM,aAAc,CAC7B,WAAY,OACP,CACL,GAAIlC,GAAQkC,EAAEoW,OAAO,EACrB,IAAItY,IAAU,IAAK,CACjB,MAAOrN,GAAUuP,EAAG,OACf,IAAIlC,IAAU,IAAK,CACxB,OAAQrN,EAAUuP,EAAG,OAChB,IAAIlC,IAAU,IAAK,CACxB,MAAOkC,KAAM,SAGjB,OAAQA,EAGV,IAAIqW,GAAY,QAASA,WAAUhoB,GACjC,IAAKA,EAAI,eAAgB,CACvB,GAAIioB,GAAI,GAAI9B,IAAgBpiB,GAC5B/D,GAAI,eAAiBioB,CACrBpqB,GAASlB,EAAKqD,EAAIknB,UAAW,SAAUvnB,GACrC,GAAIgS,GAAImW,EAAUnoB,EAClBsoB,GAAEjoB,IAAI2R,EAAGA,IAEX3R,GAAI,eAAiBioB,EAEvBjoB,EAAIknB,SAAW,KAGjB5nB,GAAMC,OAAOqoB,EAAQ9pB,UAAW,OAAQ,WACtC4pB,EAAexrB,KAAM,OACrB,IAAIA,KAAKgrB,SAAU,CACjB,MAAOvqB,GAAKT,KAAKgrB,UAAUhiB,OAE7B8iB,EAAU9rB,KACV,OAAOA,MAAK,eAAegsB,MAG7BtpB,GAAiBgpB,EAAQ9pB,WACvBqG,IAAK,QAASA,KAAIxE,GAChB+nB,EAAexrB,KAAM,MACrB,IAAIirB,EACJ,IAAIjrB,KAAKgrB,WAAaC,EAAO5B,GAAQ5lB,MAAU,KAAM,CACnD,QAASzD,KAAKgrB,SAASC,GAEzBa,EAAU9rB,KACV,OAAOA,MAAK,eAAeiI,IAAIxE,IAGjCumB,IAAK,QAASA,KAAIvmB,GAChB+nB,EAAexrB,KAAM,MACrB,IAAIirB,EACJ,IAAIjrB,KAAKgrB,WAAaC,EAAO5B,GAAQ5lB,MAAU,KAAM,CACnDzD,KAAKgrB,SAASC,GAAQ,IACtB,OAAOjrB,MAET8rB,EAAU9rB,KACVA,MAAK,eAAe8D,IAAIL,EAAKA,EAC7B,OAAOzD,OAGTkrB,OAAU,SAAUznB,GAClB+nB,EAAexrB,KAAM,SACrB,IAAIirB,EACJ,IAAIjrB,KAAKgrB,WAAaC,EAAO5B,GAAQ5lB,MAAU,KAAM,CACnD,GAAIwoB,GAAUzkB,EAAgBxH,KAAKgrB,SAAUC,EAC7C,cAAejrB,MAAKgrB,SAASC,IAAUgB,EAEzCH,EAAU9rB,KACV,OAAOA,MAAK,eAAe,UAAUyD,IAGvC0nB,MAAO,QAASA,SACdK,EAAexrB,KAAM,QACrB,IAAIA,KAAKgrB,SAAU,CACjBhrB,KAAKgrB,SAAWzB,KAElB,GAAIvpB,KAAK,eAAgB,CACvBA,KAAK,eAAemrB,UAIxBpU,OAAQ,QAASA,UACfyU,EAAexrB,KAAM,SACrB8rB,GAAU9rB,KACV,OAAOA,MAAK,eAAe+W,UAG7BC,QAAS,QAASA,WAChBwU,EAAexrB,KAAM,UACrB8rB,GAAU9rB,KACV,OAAOA,MAAK,eAAegX,WAG7BnV,QAAS,QAASA,SAAQupB,GACxBI,EAAexrB,KAAM,UACrB,IAAIqrB,GAAUtqB,UAAUiI,OAAS,EAAIjI,UAAU,GAAK,IACpD,IAAImrB,GAAYlsB,IAChB8rB,GAAUI,EACVlsB,MAAK,eAAe6B,QAAQ,SAAUQ,EAAOoB,GAC3C,GAAI4nB,EAAS,CACX/qB,EAAM8qB,EAAUC,EAAS5nB,EAAKA,EAAKyoB,OAC9B,CACLd,EAAS3nB,EAAKA,EAAKyoB,QAK3B7qB,GAAeqqB,EAAQ9pB,UAAW,OAAQ8pB,EAAQ9pB,UAAUmV,OAAQ,KACpE1G,IAAYqb,EAAQ9pB,UAAW8pB,EAAQ9pB,UAAUmV,OAEjD,OAAO2U,MAIX,IAAIjmB,EAAQoC,KAAOpC,EAAQoE,IAAK,CAE9B,GAAIsiB,IAAsBjrB,EAAqB,WAAc,MAAO,IAAI2G,OAAM,EAAG,KAAKvG,IAAI,KAAO,GACjG,KAAK6qB,GAAqB,CACxB1mB,EAAQoC,IAAM,QAASA,OACrB,KAAM7H,eAAgB6H,MAAM,CAC1B,KAAM,IAAIvE,WAAU,kCAEtB,GAAIyoB,GAAI,GAAInkB,EACZ,IAAI7G,UAAUiI,OAAS,EAAG,CACxBwgB,GAAiB3hB,IAAKkkB,EAAGhrB,UAAU,UAE9BgrB,GAAE5mB,WACTzE,QAAOoE,eAAeinB,EAAGtmB,EAAQoC,IAAIjG,UACrC,OAAOmqB,GAETtmB,GAAQoC,IAAIjG,UAAY4C,EAAOoD,EAAQhG,UACvCP,GAAeoE,EAAQoC,IAAIjG,UAAW,cAAe6D,EAAQoC,IAAK,KAClEzE,GAAMiB,iBAAiBoB,EAAQoC,IAAKD,GAEtC,GAAIwkB,IAAU,GAAIvkB,IAClB,IAAIwkB,IAAwB,WAE1B,GAAIN,GAAI,GAAIlkB,OAAM,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAC7CkkB,GAAEjoB,KAAK,EAAGioB,EACV,OAAOA,GAAEzqB,IAAI,KAAOyqB,GAAKA,EAAEzqB,KAAK,KAAOyqB,GAAKA,EAAE9jB,IAAI,IAAM8jB,EAAE9jB,KAAK,KAEjE,IAAIqkB,IAAsBF,GAAQtoB,IAAI,EAAG,KAAOsoB,EAChD,KAAKC,KAAyBC,GAAqB,CACjD/iB,GAAe1B,IAAIjG,UAAW,MAAO,QAASkC,KAAI2R,EAAGyM,GACnD5hB,EAAM4H,EAAYlI,KAAMyV,IAAM,EAAI,EAAIA,EAAGyM,EACzC,OAAOliB,QAGX,IAAKqsB,GAAsB,CACzB3pB,EAAiBmF,IAAIjG,WACnBN,IAAK,QAASA,KAAImU,GAChB,MAAOnV,GAAMyH,EAAY/H,KAAMyV,IAAM,EAAI,EAAIA,IAE/CxN,IAAK,QAASA,KAAIwN,GAChB,MAAOnV,GAAM0H,EAAYhI,KAAMyV,IAAM,EAAI,EAAIA,KAE9C,KACHrS,GAAMiB,iBAAiBwD,IAAIjG,UAAUN,IAAKyG,EAC1C3E,GAAMiB,iBAAiBwD,IAAIjG,UAAUqG,IAAKD,GAE5C,GAAIukB,IAAU,GAAI1iB,IAClB,IAAI2iB,IAAwB,SAAUpa,GACpCA,EAAE,UAAU,EACZA,GAAE4X,KAAK,EACP,QAAQ5X,EAAEnK,IAAI,IACdskB,GACF,IAAIE,IAAsBF,GAAQvC,IAAI,KAAOuC,EAC7C,KAAKC,KAAyBC,GAAqB,CACjD,GAAIC,IAAa7iB,IAAIjI,UAAUooB,GAC/BngB,KAAIjI,UAAUooB,IAAM,QAASA,KAAI9H,GAC/B5hB,EAAMosB,GAAY1sB,KAAMkiB,IAAM,EAAI,EAAIA,EACtC,OAAOliB,MAEToD,GAAMiB,iBAAiBwF,IAAIjI,UAAUooB,IAAK0C,IAE5C,IAAKF,GAAsB,CACzB,GAAIG,IAAa9iB,IAAIjI,UAAUqG,GAC/B4B,KAAIjI,UAAUqG,IAAM,QAASA,KAAIia,GAC/B,MAAO5hB,GAAMqsB,GAAY3sB,KAAMkiB,IAAM,EAAI,EAAIA,GAE/C9e,GAAMiB,iBAAiBwF,IAAIjI,UAAUqG,IAAK0kB,GAC1C,IAAIC,IAAa/iB,IAAIjI,UAAU,SAC/BiI,KAAIjI,UAAU,UAAY,QAASirB,WAAU3K,GAC3C,MAAO5hB,GAAMssB,GAAY5sB,KAAMkiB,IAAM,EAAI,EAAIA,GAE/C9e,GAAMiB,iBAAiBwF,IAAIjI,UAAU,UAAWgrB,IAElD,GAAIE,IAAyBnoB,EAAoBc,EAAQoC,IAAK,SAAUklB,GACtE,GAAIhB,GAAI,GAAIgB,MAGZhB,GAAEjoB,IAAI,GAAI,GACV,OAAOioB,aAAagB,IAGtB,IAAIC,IAA+BtsB,OAAOoE,iBAAmBgoB,EAC7D,IAAIG,IAAkB,WACpB,IACE,QAASxnB,EAAQoC,eAAiBpC,GAAQoC,KAC1C,MAAO5G,GACP,MAAOA,aAAaqC,cAGxB,IAAImC,EAAQoC,IAAImB,SAAW,GAAKgkB,KAAiCC,GAAgB,CAC/ExnB,EAAQoC,IAAM,QAASA,OACrB,KAAM7H,eAAgB6H,MAAM,CAC1B,KAAM,IAAIvE,WAAU,kCAEtB,GAAIyoB,GAAI,GAAInkB,EACZ,IAAI7G,UAAUiI,OAAS,EAAG,CACxBwgB,GAAiB3hB,IAAKkkB,EAAGhrB,UAAU,UAE9BgrB,GAAE5mB,WACTzE,QAAOoE,eAAeinB,EAAGlkB,IAAIjG,UAC7B,OAAOmqB,GAETtmB,GAAQoC,IAAIjG,UAAYgG,EAAQhG,SAChCP,GAAeoE,EAAQoC,IAAIjG,UAAW,cAAe6D,EAAQoC,IAAK,KAClEzE,GAAMiB,iBAAiBoB,EAAQoC,IAAKD,GAEtC,GAAIslB,IAAyBvoB,EAAoBc,EAAQoE,IAAK,SAAUyD,GACtE,GAAI8E,GAAI,GAAI9E,MACZ8E,GAAE4X,IAAI,GAAI,GACV,OAAO5X,aAAa9E,IAGtB,IAAI6f,IAA+BzsB,OAAOoE,iBAAmBooB,EAC7D,IAAIE,IAAkB,WACpB,IACE,QAAS3nB,EAAQoE,eAAiBpE,GAAQoE,KAC1C,MAAO5I,GACP,MAAOA,aAAaqC,cAGxB,IAAImC,EAAQoE,IAAIb,SAAW,GAAKmkB,KAAiCC,GAAgB,CAC/E,GAAIC,IAAU5nB,EAAQoE,GACtBpE,GAAQoE,IAAM,QAASA,OACrB,KAAM7J,eAAgB6J,MAAM,CAC1B,KAAM,IAAIvG,WAAU,kCAEtB,GAAI8O,GAAI,GAAIib,GACZ,IAAItsB,UAAUiI,OAAS,EAAG,CACxB8gB,GAAiBjgB,IAAKuI,EAAGrR,UAAU,UAE9BqR,GAAEjN,WACTzE,QAAOoE,eAAesN,EAAGvI,IAAIjI,UAC7B,OAAOwQ,GAET3M,GAAQoE,IAAIjI,UAAYyrB,GAAQzrB,SAChCP,GAAeoE,EAAQoE,IAAIjI,UAAW,cAAe6D,EAAQoE,IAAK,KAClEzG,GAAMiB,iBAAiBoB,EAAQoE,IAAKwjB,IAEtC,GAAIC,IAAS,GAAI7nB,GAAQoC,GACzB,IAAI0lB,KAAkCrsB,EAAqB,WACzD,MAAOosB,IAAO7sB,OAAOkM,OAAOR,MAS9B,UACS1G,GAAQoC,IAAIjG,UAAUupB,QAAU,aACvC,GAAI1lB,GAAQoE,KAAMmiB,OAAS,GAC3BsB,GAAOtB,OAAS,SACTvmB,GAAQoC,IAAIjG,UAAUnB,OAAS,kBAC/BgF,GAAQoE,IAAIjI,UAAUnB,OAAS,kBAC/BgF,GAAQoC,IAAIjG,UAAUC,UAAY,kBAClC4D,GAAQoE,IAAIjI,UAAUC,UAAY,YACzCV,EAAqBsE,EAAQoC,MAC7B1G,EAAqBsE,EAAQoE,YACtByjB,IAAO7sB,OAAOkM,OAAS,YAC9B4gB,KACCT,GACD,CACApqB,EAAiB+C,GACfoC,IAAKoiB,GAAgBpiB,IACrBgC,IAAKogB,GAAgBpgB,KACpB,MAGL,GAAIpE,EAAQoE,IAAIjI,UAAUnB,OAASgF,EAAQoE,IAAIjI,UAAUmV,OAAQ,CAE/D1V,EAAeoE,EAAQoE,IAAIjI,UAAW,OAAQ6D,EAAQoE,IAAIjI,UAAUmV,OAAQ,MAI9E1G,GAAY3P,OAAO0W,gBAAe,GAAK3R,GAAQoC,KAAOpH,QACtD4P,IAAY3P,OAAO0W,gBAAe,GAAK3R,GAAQoE,KAAOpJ,QAEtD,IAAIe,GAAsBiE,EAAQoE,IAAIjI,UAAUqG,IAAIvG,OAAS,MAAO,CAElE,GAAI8rB,IAAkB/nB,EAAQoE,IAAIjI,UAAUqG,GAC5CsB,IAAe9D,EAAQoE,IAAIjI,UAAW,MAAO,QAASqG,KAAIxE,GACxD,MAAOnD,GAAMktB,GAAiBxtB,KAAMyD,MAI1Cf,EAAiB+C,EAASwkB,GAC1B7Z,IAAkB3K,EAAQoC,IAC1BuI,IAAkB3K,EAAQoE,KAG5B,GAAI4jB,IAA4B,QAASA,2BAA0BnpB,GACjE,IAAK+F,GAAGQ,aAAavG,GAAS,CAC5B,KAAM,IAAIhB,WAAU,6BAQxB,IAAIoqB,KAEFrtB,MAAO,QAASA,SACd,MAAOgK,IAAGC,KAAKD,GAAGC,KAAM,KAAMvJ,YAIhCiM,UAAW,QAASA,WAAU7H,EAAasF,GACzC,IAAKJ,GAAGU,cAAc5F,GAAc,CAClC,KAAM,IAAI7B,WAAU,yCAEtB,GAAIwJ,GAAY/L,UAAUiI,OAAS,EAAIjI,UAAU,GAAKoE,CACtD,KAAKkF,GAAGU,cAAc+B,GAAY,CAChC,KAAM,IAAIxJ,WAAU,qCAEtB,MAAO+G,IAAGwC,UAAU1H,EAAasF,EAAMqC,EAAW,aAOpD6gB,eAAgB,QAASA,gBAAerpB,EAAQb,GAC9CgqB,GAA0BnpB,EAC1B,IAAI/C,EAAqB,CACvB,GAAIwc,GAAOrd,OAAOkD,yBAAyBU,EAAQb,EAEnD,IAAIsa,IAASA,EAAKxb,aAAc,CAC9B,MAAO,QAKX,aAAc+B,GAAOb,IAGvBwE,IAAK,QAASA,KAAI3D,EAAQb,GACxBgqB,GAA0BnpB,EAC1B,OAAOb,KAAOa,IAIlB,IAAI5D,OAAOwP,oBAAqB,CAC9BxP,OAAO0a,OAAOsS,IAMZE,QAAS,QAASA,SAAQtpB,GACxBmpB,GAA0BnpB,EAC1B,IAAI7D,GAAOC,OAAOwP,oBAAoB5L,EAEtC,IAAI+F,GAAGK,WAAWhK,OAAOwa,uBAAwB,CAC/C5U,EAAW7F,EAAMC,OAAOwa,sBAAsB5W,IAGhD,MAAO7D,MAKb,GAAIotB,IAAwB,QAASC,2BAA0BjtB,GAC7D,OAAQG,EAAYH,GAGtB,IAAIH,OAAO6a,kBAAmB,CAC5B7a,OAAO0a,OAAOsS,IACZjQ,aAAc,QAASA,cAAanZ,GAClCmpB,GAA0BnpB,EAC1B,OAAO5D,QAAO+c,aAAanZ,IAE7BiX,kBAAmB,QAASA,mBAAkBjX,GAC5CmpB,GAA0BnpB,EAC1B,OAAOupB,IAAsB,WAC3BntB,OAAO6a,kBAAkBjX,QAMjC,GAAI/C,EAAqB,CACvB,GAAIwsB,IAAc,QAASzsB,KAAIgD,EAAQb,EAAKiW,GAC1C,GAAIqE,GAAOrd,OAAOkD,yBAAyBU,EAAQb,EAEnD,KAAKsa,EAAM,CACT,GAAIiQ,GAASttB,OAAO0W,eAAe9S,EAEnC,IAAI0pB,IAAW,KAAM,CACnB,WAAY,GAGd,MAAOD,IAAYC,EAAQvqB,EAAKiW,GAGlC,GAAI,SAAWqE,GAAM,CACnB,MAAOA,GAAK1b,MAGd,GAAI0b,EAAKzc,IAAK,CACZ,MAAO+I,IAAGC,KAAKyT,EAAKzc,IAAKoY,GAG3B,WAAY,GAGd,IAAIuU,IAAc,QAASnqB,KAAIQ,EAAQb,EAAKpB,EAAOqX,GACjD,GAAIqE,GAAOrd,OAAOkD,yBAAyBU,EAAQb,EAEnD,KAAKsa,EAAM,CACT,GAAIiQ,GAASttB,OAAO0W,eAAe9S,EAEnC,IAAI0pB,IAAW,KAAM,CACnB,MAAOC,IAAYD,EAAQvqB,EAAKpB,EAAOqX,GAGzCqE,GACE1b,UAAY,GACZI,SAAU,KACVD,WAAY,KACZD,aAAc,MAIlB,GAAI,SAAWwb,GAAM,CACnB,IAAKA,EAAKtb,SAAU,CAClB,MAAO,OAGT,IAAK4H,GAAGQ,aAAa6O,GAAW,CAC9B,MAAO,OAGT,GAAIwU,GAAextB,OAAOkD,yBAAyB8V,EAAUjW,EAE7D,IAAIyqB,EAAc,CAChB,MAAOpkB,IAAQzI,eAAeqY,EAAUjW,GACtCpB,MAAOA,QAEJ,CACL,MAAOyH,IAAQzI,eAAeqY,EAAUjW,GACtCpB,MAAOA,EACPI,SAAU,KACVD,WAAY,KACZD,aAAc,QAKpB,GAAIwb,EAAKja,IAAK,CACZxD,EAAMyd,EAAKja,IAAK4V,EAAUrX,EAC1B,OAAO,MAGT,MAAO,OAGT3B,QAAO0a,OAAOsS,IACZrsB,eAAgB,QAASA,gBAAeiD,EAAQ6pB,EAAaC,GAC3DX,GAA0BnpB,EAC1B,OAAOupB,IAAsB,WAC3BntB,OAAOW,eAAeiD,EAAQ6pB,EAAaC,MAI/CxqB,yBAA0B,QAASA,0BAAyBU,EAAQ6pB,GAClEV,GAA0BnpB,EAC1B,OAAO5D,QAAOkD,yBAAyBU,EAAQ6pB,IAIjD7sB,IAAK,QAASA,KAAIgD,EAAQb,GACxBgqB,GAA0BnpB,EAC1B,IAAIoV,GAAW3Y,UAAUiI,OAAS,EAAIjI,UAAU,GAAKuD,CAErD,OAAOypB,IAAYzpB,EAAQb,EAAKiW,IAGlC5V,IAAK,QAASA,KAAIQ,EAAQb,EAAKpB,GAC7BorB,GAA0BnpB,EAC1B,IAAIoV,GAAW3Y,UAAUiI,OAAS,EAAIjI,UAAU,GAAKuD,CAErD,OAAO2pB,IAAY3pB,EAAQb,EAAKpB,EAAOqX,MAK7C,GAAIhZ,OAAO0W,eAAgB,CACzB,GAAIiX,IAA0B3tB,OAAO0W,cACrCsW,IAAatW,eAAiB,QAASA,gBAAe9S,GACpDmpB,GAA0BnpB,EAC1B,OAAO+pB,IAAwB/pB,IAInC,GAAI5D,OAAOoE,gBAAkB4oB,GAAatW,eAAgB,CACxD,GAAIkX,IAA8B,SAAUlsB,EAAQmsB,GAClD,GAAIthB,GAAQshB,CACZ,OAAOthB,EAAO,CACZ,GAAI7K,IAAW6K,EAAO,CACpB,MAAO,MAETA,EAAQygB,GAAatW,eAAenK,GAEtC,MAAO,OAGTvM,QAAO0a,OAAOsS,IAGZ5oB,eAAgB,QAASA,gBAAe1C,EAAQ6K,GAC9CwgB,GAA0BrrB,EAC1B,IAAI6K,IAAU,OAAS5C,GAAGQ,aAAaoC,GAAQ,CAC7C,KAAM,IAAI3J,WAAU,mCAItB,GAAI2J,IAAUnD,GAAQsN,eAAehV,GAAS,CAC5C,MAAO,MAIT,GAAI0H,GAAQ2T,eAAiB3T,GAAQ2T,aAAarb,GAAS,CACzD,MAAO,OAIT,GAAIksB,GAA4BlsB,EAAQ6K,GAAQ,CAC9C,MAAO,OAGTvM,OAAOoE,eAAe1C,EAAQ6K,EAE9B,OAAO,SAIb,GAAIuhB,IAAkC,SAAU/qB,EAAKgrB,GACnD,IAAKpkB,GAAGK,WAAWjF,EAAQqE,QAAQrG,IAAO,CACxCpC,EAAeoE,EAAQqE,QAASrG,EAAKgrB,OAChC,CACL,GAAIC,GAAoBxtB,EAAqB,WAC3CuE,EAAQqE,QAAQrG,GAAK,EACrBgC,GAAQqE,QAAQrG,GAAKgW,IACrBhU,GAAQqE,QAAQrG,GAAK,KACrB,OAAO,OAET,IAAIirB,EAAmB,CACrBnlB,GAAe9D,EAAQqE,QAASrG,EAAKgrB,KAI3C/tB,QAAOD,KAAKitB,IAAc7rB,QAAQ,SAAU4B,GAC1C+qB,GAAgC/qB,EAAKiqB,GAAajqB,KAEpD,IAAIkrB,IAA0BlpB,EAAQqE,QAAQsN,cAC9C,IAAI5V,GAAsBmtB,IAA2BA,GAAwBjtB,OAAS,iBAAkB,CACtG6H,GAAe9D,EAAQqE,QAAS,iBAAkB,QAASsN,gBAAe9S,GACxE,MAAOhE,GAAMquB,GAAyBlpB,EAAQqE,QAASxF,KAG3D,GAAImB,EAAQqE,QAAQhF,eAAgB,CAClC,GAAI5D,EAAqB,WACvBuE,EAAQqE,QAAQhF,eAAe,KAC/B,OAAO,QACL,CACFyE,GAAe9D,EAAQqE,QAAS,iBAAkB4jB,GAAa5oB,iBAGnE,GAAIW,EAAQqE,QAAQzI,eAAgB,CAClC,IAAKH,EAAqB,WACxB,GAAI0tB,IAASnpB,EAAQqE,QAAQzI,eAAe,EAAG,QAAUgB,MAAO,GAEhE,IAAIwsB,SAAoBnuB,QAAO6a,oBAAsB,aAAe9V,EAAQqE,QAAQzI,eAAeX,OAAO6a,sBAAuB,UACjI,OAAOqT,IAASC,IACd,CACFtlB,GAAe9D,EAAQqE,QAAS,iBAAkB4jB,GAAarsB,iBAGnE,GAAIoE,EAAQqE,QAAQkD,UAAW,CAC7B,IAAK9L,EAAqB,WACxB,GAAIqJ,GAAI,QAASA,MACjB,OAAO9E,GAAQqE,QAAQkD,UAAU,gBAAoBzC,YAAcA,KACjE,CACFhB,GAAe9D,EAAQqE,QAAS,YAAa4jB,GAAa1gB,YAI9D,GAAInH,OAAO,GAAIipB,MAAKrV,QAAU,eAAgB,CAC5C,GAAIsV,IAAeD,KAAKltB,UAAUmB,QAClC,IAAIisB,IAAsB,QAASjsB,YACjC,GAAIoW,IAAWnZ,IACf,IAAImZ,IAAYA,EAAS,CACvB,MAAO,eAET,MAAO9O,IAAGC,KAAKykB,GAAc/uB,MAE/BuJ,IAAeulB,KAAKltB,UAAW,WAAYotB,IAK7C,GAAIC,KACFC,OAAQ,QAASA,QAAOxtB,GAAQ,MAAO2I,IAAGkD,WAAWvN,KAAM,IAAK,OAAQ0B,IACxEytB,IAAK,QAASA,OAAQ,MAAO9kB,IAAGkD,WAAWvN,KAAM,MAAO,GAAI,KAC5DovB,MAAO,QAASA,SAAU,MAAO/kB,IAAGkD,WAAWvN,KAAM,QAAS,GAAI,KAClEqvB,KAAM,QAASA,QAAS,MAAOhlB,IAAGkD,WAAWvN,KAAM,IAAK,GAAI,KAC5DsvB,MAAO,QAASA,SAAU,MAAOjlB,IAAGkD,WAAWvN,KAAM,KAAM,GAAI,KAC/DuvB,UAAW,QAASA,WAAUC,GAAS,MAAOnlB,IAAGkD,WAAWvN,KAAM,OAAQ,QAASwvB,IACnFC,SAAU,QAASA,UAASzD,GAAQ,MAAO3hB,IAAGkD,WAAWvN,KAAM,OAAQ,OAAQgsB,IAC/E0D,QAAS,QAASA,WAAY,MAAOrlB,IAAGkD,WAAWvN,KAAM,IAAK,GAAI,KAClE2vB,KAAM,QAASA,MAAKC,GAAO,MAAOvlB,IAAGkD,WAAWvN,KAAM,IAAK,OAAQ4vB,IACnEC,MAAO,QAASA,SAAU,MAAOxlB,IAAGkD,WAAWvN,KAAM,QAAS,GAAI,KAClE8vB,OAAQ,QAASA,UAAW,MAAOzlB,IAAGkD,WAAWvN,KAAM,SAAU,GAAI,KACrE+vB,IAAK,QAASA,OAAQ,MAAO1lB,IAAGkD,WAAWvN,KAAM,MAAO,GAAI,KAC5DgwB,IAAK,QAASD,OAAQ,MAAO1lB,IAAGkD,WAAWvN,KAAM,MAAO,GAAI,KAE9D2B,GAASjB,OAAOD,KAAKwuB,IAAkB,SAAUxrB,GAC/C,GAAIZ,GAASgD,OAAOjE,UAAU6B,EAC9B,IAAIwsB,GAAkB,KACtB,IAAI5lB,GAAGK,WAAW7H,GAAS,CACzB,GAAIqtB,GAAS5vB,EAAMuC,EAAQ,GAAI,MAC/B,IAAIstB,GAAcnqB,KAAYkqB,EAAO/hB,MAAM,OAAOnF,MAClDinB,GAAkBC,IAAWA,EAAOE,eAAiBD,EAAc,MAC9D,CACLF,EAAkB,KAEpB,GAAIA,EAAiB,CACnB1mB,GAAe1D,OAAOjE,UAAW6B,EAAKwrB,GAAgBxrB,MAI1D,IAAI4sB,IAA0B,WAE5B,IAAK3mB,GAAY,CAAE,MAAO,OAC1B,GAAI4mB,SAAmBC,QAAS,gBAAmBA,MAAKD,YAAc,WAAaC,KAAKD,UAAY,IACpG,KAAKA,EAAW,CAAE,MAAO,OACzB,SAAWA,GAAUnoB,OAAc,YAAa,CAAE,MAAO,MACzD,GAAImoB,GAAWnoB,QAAe,SAAU,CAAE,MAAO,MACjD,GAAI+E,IAAQ1B,EAAGrD,IACf+E,GAAI/E,KAAY,IAChB,IAAImoB,EAAUpjB,KAAS,KAAM,CAAE,MAAO,MACtC,MAAO,SAET,IAAIsjB,IAAmCtvB,EAAqB,WAE1D,IAAKwI,GAAY,CAAE,MAAO,MAC1B,MAAO6mB,MAAKD,UAAU5vB,OAAOyH,QAAe,MAAQooB,KAAKD,WAAW5vB,OAAOyH,SAAgB,QAE7F,IAAIkoB,KAA2BG,GAAkC,CAC/D,GAAIC,IAAgBF,KAAKD,SACzB/mB,IAAegnB,KAAM,YAAa,QAASD,WAAUjuB,GACnD,SAAWA,KAAU,SAAU,CAAE,OACjC,GAAI6M,EACJ,IAAInO,UAAUiI,OAAS,EAAG,CACxBkG,EAAWnO,UAAU,GAEvB,GAAI0J,IAAQpI,EACZ,KAAK9B,EAAQ2O,GAAW,CACtB,GAAIwhB,GAAYrmB,GAAGK,WAAWwE,GAAYA,EAAW,IACrD,IAAIyhB,GAAkB,SAAUltB,EAAK+Y,GACnC,GAAIoU,GAAcF,EAAYpwB,EAAMowB,EAAW1wB,KAAMyD,EAAK+Y,GAAOA,CACjE,UAAWoU,KAAgB,SAAU,CACnC,GAAI1nB,GAAKI,OAAOsnB,GAAc,CAC5B,MAAO/V,QAAa+V,OACf,CACL,MAAOA,KAIbnmB,GAAKpE,KAAKsqB,OACL,CAELlmB,EAAKpE,KAAK6I,GAEZ,GAAInO,UAAUiI,OAAS,EAAG,CACxByB,EAAKpE,KAAKtF,UAAU,IAEtB,MAAO0vB,IAAcpwB,MAAML,KAAMyK,KAIrC,MAAOhF"}
@@ -0,0 +1,12 @@
+/*! + * https://github.com/paulmillr/es6-shim + * @license es6-shim Copyright 2013-2016 by Paul Miller (http://paulmillr.com) + * and contributors, MIT License + * es6-shim: v0.35.1 + * see https://github.com/paulmillr/es6-shim/blob/0.35.1/LICENSE + * Details and documentation: + * https://github.com/paulmillr/es6-shim/ + */ +(function(e,t){if(typeof define==="function"&&define.amd){define(t)}else if(typeof exports==="object"){module.exports=t()}else{e.returnExports=t()}})(this,function(){"use strict";var e=Function.call.bind(Function.apply);var t=Function.call.bind(Function.call);var r=Array.isArray;var n=Object.keys;var o=function notThunker(t){return function notThunk(){return!e(t,this,arguments)}};var i=function(e){try{e();return false}catch(e){return true}};var a=function valueOrFalseIfThrows(e){try{return e()}catch(e){return false}};var u=o(i);var f=function(){return!i(function(){Object.defineProperty({},"x",{get:function(){}})})};var s=!!Object.defineProperty&&f();var c=function foo(){}.name==="foo";var l=Function.call.bind(Array.prototype.forEach);var p=Function.call.bind(Array.prototype.reduce);var v=Function.call.bind(Array.prototype.filter);var y=Function.call.bind(Array.prototype.some);var h=function(e,t,r,n){if(!n&&t in e){return}if(s){Object.defineProperty(e,t,{configurable:true,enumerable:false,writable:true,value:r})}else{e[t]=r}};var b=function(e,t,r){l(n(t),function(n){var o=t[n];h(e,n,o,!!r)})};var g=Function.call.bind(Object.prototype.toString);var d=typeof/abc/==="function"?function IsCallableSlow(e){return typeof e==="function"&&g(e)==="[object Function]"}:function IsCallableFast(e){return typeof e==="function"};var m={getter:function(e,t,r){if(!s){throw new TypeError("getters require true ES5 support")}Object.defineProperty(e,t,{configurable:true,enumerable:false,get:r})},proxy:function(e,t,r){if(!s){throw new TypeError("getters require true ES5 support")}var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,{configurable:n.configurable,enumerable:n.enumerable,get:function getKey(){return e[t]},set:function setKey(r){e[t]=r}})},redefine:function(e,t,r){if(s){var n=Object.getOwnPropertyDescriptor(e,t);n.value=r;Object.defineProperty(e,t,n)}else{e[t]=r}},defineByDescriptor:function(e,t,r){if(s){Object.defineProperty(e,t,r)}else if("value"in r){e[t]=r.value}},preserveToString:function(e,t){if(t&&d(t.toString)){h(e,"toString",t.toString.bind(t),true)}}};var O=Object.create||function(e,t){var r=function Prototype(){};r.prototype=e;var o=new r;if(typeof t!=="undefined"){n(t).forEach(function(e){m.defineByDescriptor(o,e,t[e])})}return o};var w=function(e,t){if(!Object.setPrototypeOf){return false}return a(function(){var r=function Subclass(t){var r=new e(t);Object.setPrototypeOf(r,Subclass.prototype);return r};Object.setPrototypeOf(r,e);r.prototype=O(e.prototype,{constructor:{value:r}});return t(r)})};var j=function(){if(typeof self!=="undefined"){return self}if(typeof window!=="undefined"){return window}if(typeof global!=="undefined"){return global}throw new Error("unable to locate global object")};var S=j();var T=S.isFinite;var I=Function.call.bind(String.prototype.indexOf);var E=Function.apply.bind(Array.prototype.indexOf);var P=Function.call.bind(Array.prototype.concat);var C=Function.call.bind(String.prototype.slice);var M=Function.call.bind(Array.prototype.push);var x=Function.apply.bind(Array.prototype.push);var N=Function.call.bind(Array.prototype.shift);var A=Math.max;var R=Math.min;var _=Math.floor;var k=Math.abs;var F=Math.exp;var L=Math.log;var D=Math.sqrt;var z=Function.call.bind(Object.prototype.hasOwnProperty);var q;var W=function(){};var G=S.Map;var H=G&&G.prototype["delete"];var V=G&&G.prototype.get;var B=G&&G.prototype.has;var U=G&&G.prototype.set;var $=S.Symbol||{};var J=$.species||"@@species";var X=Number.isNaN||function isNaN(e){return e!==e};var K=Number.isFinite||function isFinite(e){return typeof e==="number"&&T(e)};var Z=d(Math.sign)?Math.sign:function sign(e){var t=Number(e);if(t===0){return t}if(X(t)){return t}return t<0?-1:1};var Y=function isArguments(e){return g(e)==="[object Arguments]"};var Q=function isArguments(e){return e!==null&&typeof e==="object"&&typeof e.length==="number"&&e.length>=0&&g(e)!=="[object Array]"&&g(e.callee)==="[object Function]"};var ee=Y(arguments)?Y:Q;var te={primitive:function(e){return e===null||typeof e!=="function"&&typeof e!=="object"},string:function(e){return g(e)==="[object String]"},regex:function(e){return g(e)==="[object RegExp]"},symbol:function(e){return typeof S.Symbol==="function"&&typeof e==="symbol"}};var re=function overrideNative(e,t,r){var n=e[t];h(e,t,r,true);m.preserveToString(e[t],n)};var ne=typeof $==="function"&&typeof $["for"]==="function"&&te.symbol($());var oe=te.symbol($.iterator)?$.iterator:"_es6-shim iterator_";if(S.Set&&typeof(new S.Set)["@@iterator"]==="function"){oe="@@iterator"}if(!S.Reflect){h(S,"Reflect",{},true)}var ie=S.Reflect;var ae=String;var ue=typeof document==="undefined"||!document?null:document.all;var fe=ue==null?function isNullOrUndefined(e){return e==null}:function isNullOrUndefinedAndNotDocumentAll(e){return e==null&&e!==ue};var se={Call:function Call(t,r){var n=arguments.length>2?arguments[2]:[];if(!se.IsCallable(t)){throw new TypeError(t+" is not a function")}return e(t,r,n)},RequireObjectCoercible:function(e,t){if(fe(e)){throw new TypeError(t||"Cannot call method on "+e)}return e},TypeIsObject:function(e){if(e===void 0||e===null||e===true||e===false){return false}return typeof e==="function"||typeof e==="object"||e===ue},ToObject:function(e,t){return Object(se.RequireObjectCoercible(e,t))},IsCallable:d,IsConstructor:function(e){return se.IsCallable(e)},ToInt32:function(e){return se.ToNumber(e)>>0},ToUint32:function(e){return se.ToNumber(e)>>>0},ToNumber:function(e){if(g(e)==="[object Symbol]"){throw new TypeError("Cannot convert a Symbol value to a number")}return+e},ToInteger:function(e){var t=se.ToNumber(e);if(X(t)){return 0}if(t===0||!K(t)){return t}return(t>0?1:-1)*_(k(t))},ToLength:function(e){var t=se.ToInteger(e);if(t<=0){return 0}if(t>Number.MAX_SAFE_INTEGER){return Number.MAX_SAFE_INTEGER}return t},SameValue:function(e,t){if(e===t){if(e===0){return 1/e===1/t}return true}return X(e)&&X(t)},SameValueZero:function(e,t){return e===t||X(e)&&X(t)},IsIterable:function(e){return se.TypeIsObject(e)&&(typeof e[oe]!=="undefined"||ee(e))},GetIterator:function(e){if(ee(e)){return new q(e,"value")}var t=se.GetMethod(e,oe);if(!se.IsCallable(t)){throw new TypeError("value is not an iterable")}var r=se.Call(t,e);if(!se.TypeIsObject(r)){throw new TypeError("bad iterator")}return r},GetMethod:function(e,t){var r=se.ToObject(e)[t];if(fe(r)){return void 0}if(!se.IsCallable(r)){throw new TypeError("Method not callable: "+t)}return r},IteratorComplete:function(e){return!!e.done},IteratorClose:function(e,t){var r=se.GetMethod(e,"return");if(r===void 0){return}var n,o;try{n=se.Call(r,e)}catch(e){o=e}if(t){return}if(o){throw o}if(!se.TypeIsObject(n)){throw new TypeError("Iterator's return method returned a non-object.")}},IteratorNext:function(e){var t=arguments.length>1?e.next(arguments[1]):e.next();if(!se.TypeIsObject(t)){throw new TypeError("bad iterator")}return t},IteratorStep:function(e){var t=se.IteratorNext(e);var r=se.IteratorComplete(t);return r?false:t},Construct:function(e,t,r,n){var o=typeof r==="undefined"?e:r;if(!n&&ie.construct){return ie.construct(e,t,o)}var i=o.prototype;if(!se.TypeIsObject(i)){i=Object.prototype}var a=O(i);var u=se.Call(e,a,t);return se.TypeIsObject(u)?u:a},SpeciesConstructor:function(e,t){var r=e.constructor;if(r===void 0){return t}if(!se.TypeIsObject(r)){throw new TypeError("Bad constructor")}var n=r[J];if(fe(n)){return t}if(!se.IsConstructor(n)){throw new TypeError("Bad @@species")}return n},CreateHTML:function(e,t,r,n){var o=se.ToString(e);var i="<"+t;if(r!==""){var a=se.ToString(n);var u=a.replace(/"/g,""");i+=" "+r+'="'+u+'"'}var f=i+">";var s=f+o;return s+"</"+t+">"},IsRegExp:function IsRegExp(e){if(!se.TypeIsObject(e)){return false}var t=e[$.match];if(typeof t!=="undefined"){return!!t}return te.regex(e)},ToString:function ToString(e){return ae(e)}};if(s&&ne){var ce=function defineWellKnownSymbol(e){if(te.symbol($[e])){return $[e]}var t=$["for"]("Symbol."+e);Object.defineProperty($,e,{configurable:false,enumerable:false,writable:false,value:t});return t};if(!te.symbol($.search)){var le=ce("search");var pe=String.prototype.search;h(RegExp.prototype,le,function search(e){return se.Call(pe,e,[this])});var ve=function search(e){var t=se.RequireObjectCoercible(this);if(!fe(e)){var r=se.GetMethod(e,le);if(typeof r!=="undefined"){return se.Call(r,e,[t])}}return se.Call(pe,t,[se.ToString(e)])};re(String.prototype,"search",ve)}if(!te.symbol($.replace)){var ye=ce("replace");var he=String.prototype.replace;h(RegExp.prototype,ye,function replace(e,t){return se.Call(he,e,[this,t])});var be=function replace(e,t){var r=se.RequireObjectCoercible(this);if(!fe(e)){var n=se.GetMethod(e,ye);if(typeof n!=="undefined"){return se.Call(n,e,[r,t])}}return se.Call(he,r,[se.ToString(e),t])};re(String.prototype,"replace",be)}if(!te.symbol($.split)){var ge=ce("split");var de=String.prototype.split;h(RegExp.prototype,ge,function split(e,t){return se.Call(de,e,[this,t])});var me=function split(e,t){var r=se.RequireObjectCoercible(this);if(!fe(e)){var n=se.GetMethod(e,ge);if(typeof n!=="undefined"){return se.Call(n,e,[r,t])}}return se.Call(de,r,[se.ToString(e),t])};re(String.prototype,"split",me)}var Oe=te.symbol($.match);var we=Oe&&function(){var e={};e[$.match]=function(){return 42};return"a".match(e)!==42}();if(!Oe||we){var je=ce("match");var Se=String.prototype.match;h(RegExp.prototype,je,function match(e){return se.Call(Se,e,[this])});var Te=function match(e){var t=se.RequireObjectCoercible(this);if(!fe(e)){var r=se.GetMethod(e,je);if(typeof r!=="undefined"){return se.Call(r,e,[t])}}return se.Call(Se,t,[se.ToString(e)])};re(String.prototype,"match",Te)}}var Ie=function wrapConstructor(e,t,r){m.preserveToString(t,e);if(Object.setPrototypeOf){Object.setPrototypeOf(e,t)}if(s){l(Object.getOwnPropertyNames(e),function(n){if(n in W||r[n]){return}m.proxy(e,n,t)})}else{l(Object.keys(e),function(n){if(n in W||r[n]){return}t[n]=e[n]})}t.prototype=e.prototype;m.redefine(e.prototype,"constructor",t)};var Ee=function(){return this};var Pe=function(e){if(s&&!z(e,J)){m.getter(e,J,Ee)}};var Ce=function(e,t){var r=t||function iterator(){return this};h(e,oe,r);if(!e[oe]&&te.symbol(oe)){e[oe]=r}};var Me=function createDataProperty(e,t,r){if(s){Object.defineProperty(e,t,{configurable:true,enumerable:true,writable:true,value:r})}else{e[t]=r}};var xe=function createDataPropertyOrThrow(e,t,r){Me(e,t,r);if(!se.SameValue(e[t],r)){throw new TypeError("property is nonconfigurable")}};var Ne=function(e,t,r,n){if(!se.TypeIsObject(e)){throw new TypeError("Constructor requires `new`: "+t.name)}var o=t.prototype;if(!se.TypeIsObject(o)){o=r}var i=O(o);for(var a in n){if(z(n,a)){var u=n[a];h(i,a,u,true)}}return i};if(String.fromCodePoint&&String.fromCodePoint.length!==1){var Ae=String.fromCodePoint;re(String,"fromCodePoint",function fromCodePoint(e){return se.Call(Ae,this,arguments)})}var Re={fromCodePoint:function fromCodePoint(e){var t=[];var r;for(var n=0,o=arguments.length;n<o;n++){r=Number(arguments[n]);if(!se.SameValue(r,se.ToInteger(r))||r<0||r>1114111){throw new RangeError("Invalid code point "+r)}if(r<65536){M(t,String.fromCharCode(r))}else{r-=65536;M(t,String.fromCharCode((r>>10)+55296));M(t,String.fromCharCode(r%1024+56320))}}return t.join("")},raw:function raw(e){var t=se.ToObject(e,"bad callSite");var r=se.ToObject(t.raw,"bad raw value");var n=r.length;var o=se.ToLength(n);if(o<=0){return""}var i=[];var a=0;var u,f,s,c;while(a<o){u=se.ToString(a);s=se.ToString(r[u]);M(i,s);if(a+1>=o){break}f=a+1<arguments.length?arguments[a+1]:"";c=se.ToString(f);M(i,c);a+=1}return i.join("")}};if(String.raw&&String.raw({raw:{0:"x",1:"y",length:2}})!=="xy"){re(String,"raw",Re.raw)}b(String,Re);var _e=function repeat(e,t){if(t<1){return""}if(t%2){return repeat(e,t-1)+e}var r=repeat(e,t/2);return r+r};var ke=Infinity;var Fe={repeat:function repeat(e){var t=se.ToString(se.RequireObjectCoercible(this));var r=se.ToInteger(e);if(r<0||r>=ke){throw new RangeError("repeat count must be less than infinity and not overflow maximum string size")}return _e(t,r)},startsWith:function startsWith(e){var t=se.ToString(se.RequireObjectCoercible(this));if(se.IsRegExp(e)){throw new TypeError('Cannot call method "startsWith" with a regex')}var r=se.ToString(e);var n;if(arguments.length>1){n=arguments[1]}var o=A(se.ToInteger(n),0);return C(t,o,o+r.length)===r},endsWith:function endsWith(e){var t=se.ToString(se.RequireObjectCoercible(this));if(se.IsRegExp(e)){throw new TypeError('Cannot call method "endsWith" with a regex')}var r=se.ToString(e);var n=t.length;var o;if(arguments.length>1){o=arguments[1]}var i=typeof o==="undefined"?n:se.ToInteger(o);var a=R(A(i,0),n);return C(t,a-r.length,a)===r},includes:function includes(e){if(se.IsRegExp(e)){throw new TypeError('"includes" does not accept a RegExp')}var t=se.ToString(e);var r;if(arguments.length>1){r=arguments[1]}return I(this,t,r)!==-1},codePointAt:function codePointAt(e){var t=se.ToString(se.RequireObjectCoercible(this));var r=se.ToInteger(e);var n=t.length;if(r>=0&&r<n){var o=t.charCodeAt(r);var i=r+1===n;if(o<55296||o>56319||i){return o}var a=t.charCodeAt(r+1);if(a<56320||a>57343){return o}return(o-55296)*1024+(a-56320)+65536}}};if(String.prototype.includes&&"a".includes("a",Infinity)!==false){re(String.prototype,"includes",Fe.includes)}if(String.prototype.startsWith&&String.prototype.endsWith){var Le=i(function(){"/a/".startsWith(/a/)});var De=a(function(){return"abc".startsWith("a",Infinity)===false});if(!Le||!De){re(String.prototype,"startsWith",Fe.startsWith);re(String.prototype,"endsWith",Fe.endsWith)}}if(ne){var ze=a(function(){var e=/a/;e[$.match]=false;return"/a/".startsWith(e)});if(!ze){re(String.prototype,"startsWith",Fe.startsWith)}var qe=a(function(){var e=/a/;e[$.match]=false;return"/a/".endsWith(e)});if(!qe){re(String.prototype,"endsWith",Fe.endsWith)}var We=a(function(){var e=/a/;e[$.match]=false;return"/a/".includes(e)});if(!We){re(String.prototype,"includes",Fe.includes)}}b(String.prototype,Fe);var Ge=["\t\n\v\f\r \xa0\u1680\u180e\u2000\u2001\u2002\u2003","\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028","\u2029\ufeff"].join("");var He=new RegExp("(^["+Ge+"]+)|(["+Ge+"]+$)","g");var Ve=function trim(){return se.ToString(se.RequireObjectCoercible(this)).replace(He,"")};var Be=["\x85","\u200b","\ufffe"].join("");var Ue=new RegExp("["+Be+"]","g");var $e=/^[-+]0x[0-9a-f]+$/i;var Je=Be.trim().length!==Be.length;h(String.prototype,"trim",Ve,Je);var Xe=function(e){return{value:e,done:arguments.length===0}};var Ke=function(e){se.RequireObjectCoercible(e);this._s=se.ToString(e);this._i=0};Ke.prototype.next=function(){var e=this._s;var t=this._i;if(typeof e==="undefined"||t>=e.length){this._s=void 0;return Xe()}var r=e.charCodeAt(t);var n,o;if(r<55296||r>56319||t+1===e.length){o=1}else{n=e.charCodeAt(t+1);o=n<56320||n>57343?1:2}this._i=t+o;return Xe(e.substr(t,o))};Ce(Ke.prototype);Ce(String.prototype,function(){return new Ke(this)});var Ze={from:function from(e){var r=this;var n;if(arguments.length>1){n=arguments[1]}var o,i;if(typeof n==="undefined"){o=false}else{if(!se.IsCallable(n)){throw new TypeError("Array.from: when provided, the second argument must be a function")}if(arguments.length>2){i=arguments[2]}o=true}var a=typeof(ee(e)||se.GetMethod(e,oe))!=="undefined";var u,f,s;if(a){f=se.IsConstructor(r)?Object(new r):[];var c=se.GetIterator(e);var l,p;s=0;while(true){l=se.IteratorStep(c);if(l===false){break}p=l.value;try{if(o){p=typeof i==="undefined"?n(p,s):t(n,i,p,s)}f[s]=p}catch(e){se.IteratorClose(c,true);throw e}s+=1}u=s}else{var v=se.ToObject(e);u=se.ToLength(v.length);f=se.IsConstructor(r)?Object(new r(u)):new Array(u);var y;for(s=0;s<u;++s){y=v[s];if(o){y=typeof i==="undefined"?n(y,s):t(n,i,y,s)}xe(f,s,y)}}f.length=u;return f},of:function of(){var e=arguments.length;var t=this;var n=r(t)||!se.IsCallable(t)?new Array(e):se.Construct(t,[e]);for(var o=0;o<e;++o){xe(n,o,arguments[o])}n.length=e;return n}};b(Array,Ze);Pe(Array);q=function(e,t){this.i=0;this.array=e;this.kind=t};b(q.prototype,{next:function(){var e=this.i;var t=this.array;if(!(this instanceof q)){throw new TypeError("Not an ArrayIterator")}if(typeof t!=="undefined"){var r=se.ToLength(t.length);for(;e<r;e++){var n=this.kind;var o;if(n==="key"){o=e}else if(n==="value"){o=t[e]}else if(n==="entry"){o=[e,t[e]]}this.i=e+1;return Xe(o)}}this.array=void 0;return Xe()}});Ce(q.prototype);var Ye=Array.of===Ze.of||function(){var e=function Foo(e){this.length=e};e.prototype=[];var t=Array.of.apply(e,[1,2]);return t instanceof e&&t.length===2}();if(!Ye){re(Array,"of",Ze.of)}var Qe={copyWithin:function copyWithin(e,t){var r=se.ToObject(this);var n=se.ToLength(r.length);var o=se.ToInteger(e);var i=se.ToInteger(t);var a=o<0?A(n+o,0):R(o,n);var u=i<0?A(n+i,0):R(i,n);var f;if(arguments.length>2){f=arguments[2]}var s=typeof f==="undefined"?n:se.ToInteger(f);var c=s<0?A(n+s,0):R(s,n);var l=R(c-u,n-a);var p=1;if(u<a&&a<u+l){p=-1;u+=l-1;a+=l-1}while(l>0){if(u in r){r[a]=r[u]}else{delete r[a]}u+=p;a+=p;l-=1}return r},fill:function fill(e){var t;if(arguments.length>1){t=arguments[1]}var r;if(arguments.length>2){r=arguments[2]}var n=se.ToObject(this);var o=se.ToLength(n.length);t=se.ToInteger(typeof t==="undefined"?0:t);r=se.ToInteger(typeof r==="undefined"?o:r);var i=t<0?A(o+t,0):R(t,o);var a=r<0?o+r:r;for(var u=i;u<o&&u<a;++u){n[u]=e}return n},find:function find(e){var r=se.ToObject(this);var n=se.ToLength(r.length);if(!se.IsCallable(e)){throw new TypeError("Array#find: predicate must be a function")}var o=arguments.length>1?arguments[1]:null;for(var i=0,a;i<n;i++){a=r[i];if(o){if(t(e,o,a,i,r)){return a}}else if(e(a,i,r)){return a}}},findIndex:function findIndex(e){var r=se.ToObject(this);var n=se.ToLength(r.length);if(!se.IsCallable(e)){throw new TypeError("Array#findIndex: predicate must be a function")}var o=arguments.length>1?arguments[1]:null;for(var i=0;i<n;i++){if(o){if(t(e,o,r[i],i,r)){return i}}else if(e(r[i],i,r)){return i}}return-1},keys:function keys(){return new q(this,"key")},values:function values(){return new q(this,"value")},entries:function entries(){return new q(this,"entry")}};if(Array.prototype.keys&&!se.IsCallable([1].keys().next)){delete Array.prototype.keys}if(Array.prototype.entries&&!se.IsCallable([1].entries().next)){delete Array.prototype.entries}if(Array.prototype.keys&&Array.prototype.entries&&!Array.prototype.values&&Array.prototype[oe]){b(Array.prototype,{values:Array.prototype[oe]});if(te.symbol($.unscopables)){Array.prototype[$.unscopables].values=true}}if(c&&Array.prototype.values&&Array.prototype.values.name!=="values"){var et=Array.prototype.values;re(Array.prototype,"values",function values(){return se.Call(et,this,arguments)});h(Array.prototype,oe,Array.prototype.values,true)}b(Array.prototype,Qe);if(1/[true].indexOf(true,-0)<0){h(Array.prototype,"indexOf",function indexOf(e){var t=E(this,arguments);if(t===0&&1/t<0){return 0}return t},true)}Ce(Array.prototype,function(){return this.values()});if(Object.getPrototypeOf){Ce(Object.getPrototypeOf([].values()))}var tt=function(){return a(function(){return Array.from({length:-1}).length===0})}();var rt=function(){var e=Array.from([0].entries());return e.length===1&&r(e[0])&&e[0][0]===0&&e[0][1]===0}();if(!tt||!rt){re(Array,"from",Ze.from)}var nt=function(){return a(function(){return Array.from([0],void 0)})}();if(!nt){var ot=Array.from;re(Array,"from",function from(e){if(arguments.length>1&&typeof arguments[1]!=="undefined"){return se.Call(ot,this,arguments)}else{return t(ot,this,e)}})}var it=-(Math.pow(2,32)-1);var at=function(e,r){var n={length:it};n[r?(n.length>>>0)-1:0]=true;return a(function(){t(e,n,function(){throw new RangeError("should not reach here")},[]);return true})};if(!at(Array.prototype.forEach)){var ut=Array.prototype.forEach;re(Array.prototype,"forEach",function forEach(e){return se.Call(ut,this.length>=0?this:[],arguments)},true)}if(!at(Array.prototype.map)){var ft=Array.prototype.map;re(Array.prototype,"map",function map(e){return se.Call(ft,this.length>=0?this:[],arguments)},true)}if(!at(Array.prototype.filter)){var st=Array.prototype.filter;re(Array.prototype,"filter",function filter(e){return se.Call(st,this.length>=0?this:[],arguments)},true)}if(!at(Array.prototype.some)){var ct=Array.prototype.some;re(Array.prototype,"some",function some(e){return se.Call(ct,this.length>=0?this:[],arguments)},true)}if(!at(Array.prototype.every)){var lt=Array.prototype.every;re(Array.prototype,"every",function every(e){return se.Call(lt,this.length>=0?this:[],arguments)},true)}if(!at(Array.prototype.reduce)){var pt=Array.prototype.reduce;re(Array.prototype,"reduce",function reduce(e){return se.Call(pt,this.length>=0?this:[],arguments)},true)}if(!at(Array.prototype.reduceRight,true)){var vt=Array.prototype.reduceRight;re(Array.prototype,"reduceRight",function reduceRight(e){return se.Call(vt,this.length>=0?this:[],arguments)},true)}var yt=Number("0o10")!==8;var ht=Number("0b10")!==2;var bt=y(Be,function(e){return Number(e+0+e)===0});if(yt||ht||bt){var gt=Number;var dt=/^0b[01]+$/i;var mt=/^0o[0-7]+$/i;var Ot=dt.test.bind(dt);var wt=mt.test.bind(mt);var jt=function(e){var t;if(typeof e.valueOf==="function"){t=e.valueOf();if(te.primitive(t)){return t}}if(typeof e.toString==="function"){t=e.toString();if(te.primitive(t)){return t}}throw new TypeError("No default value")};var St=Ue.test.bind(Ue);var Tt=$e.test.bind($e);var It=function(){var e=function Number(t){var r;if(arguments.length>0){r=te.primitive(t)?t:jt(t,"number")}else{r=0}if(typeof r==="string"){r=se.Call(Ve,r);if(Ot(r)){r=parseInt(C(r,2),2)}else if(wt(r)){r=parseInt(C(r,2),8)}else if(St(r)||Tt(r)){r=NaN}}var n=this;var o=a(function(){gt.prototype.valueOf.call(n);return true});if(n instanceof e&&!o){return new gt(r)}return gt(r)};return e}();Ie(gt,It,{});b(It,{NaN:gt.NaN,MAX_VALUE:gt.MAX_VALUE,MIN_VALUE:gt.MIN_VALUE,NEGATIVE_INFINITY:gt.NEGATIVE_INFINITY,POSITIVE_INFINITY:gt.POSITIVE_INFINITY});Number=It;m.redefine(S,"Number",It)}var Et=Math.pow(2,53)-1;b(Number,{MAX_SAFE_INTEGER:Et,MIN_SAFE_INTEGER:-Et,EPSILON:2.220446049250313e-16,parseInt:S.parseInt,parseFloat:S.parseFloat,isFinite:K,isInteger:function isInteger(e){return K(e)&&se.ToInteger(e)===e},isSafeInteger:function isSafeInteger(e){return Number.isInteger(e)&&k(e)<=Number.MAX_SAFE_INTEGER},isNaN:X});h(Number,"parseInt",S.parseInt,Number.parseInt!==S.parseInt);if([,1].find(function(){return true})===1){re(Array.prototype,"find",Qe.find)}if([,1].findIndex(function(){return true})!==0){re(Array.prototype,"findIndex",Qe.findIndex)}var Pt=Function.bind.call(Function.bind,Object.prototype.propertyIsEnumerable);var Ct=function ensureEnumerable(e,t){if(s&&Pt(e,t)){Object.defineProperty(e,t,{enumerable:false})}};var Mt=function sliceArgs(){var e=Number(this);var t=arguments.length;var r=t-e;var n=new Array(r<0?0:r);for(var o=e;o<t;++o){n[o-e]=arguments[o]}return n};var xt=function assignTo(e){return function assignToSource(t,r){t[r]=e[r];return t}};var Nt=function(e,t){var r=n(Object(t));var o;if(se.IsCallable(Object.getOwnPropertySymbols)){o=v(Object.getOwnPropertySymbols(Object(t)),Pt(t))}return p(P(r,o||[]),xt(t),e)};var At={assign:function(e,t){var r=se.ToObject(e,"Cannot convert undefined or null to object");return p(se.Call(Mt,1,arguments),Nt,r)},is:function is(e,t){return se.SameValue(e,t)}};var Rt=Object.assign&&Object.preventExtensions&&function(){var e=Object.preventExtensions({1:2});try{Object.assign(e,"xy")}catch(t){return e[1]==="y"}}();if(Rt){re(Object,"assign",At.assign)}b(Object,At);if(s){var _t={setPrototypeOf:function(e,r){var n;var o=function(e,t){if(!se.TypeIsObject(e)){throw new TypeError("cannot set prototype on a non-object")}if(!(t===null||se.TypeIsObject(t))){throw new TypeError("can only set prototype to an object or null"+t)}};var i=function(e,r){o(e,r);t(n,e,r);return e};try{n=e.getOwnPropertyDescriptor(e.prototype,r).set;t(n,{},null)}catch(t){if(e.prototype!=={}[r]){return}n=function(e){this[r]=e};i.polyfill=i(i({},null),e.prototype)instanceof e}return i}(Object,"__proto__")};b(Object,_t)}if(Object.setPrototypeOf&&Object.getPrototypeOf&&Object.getPrototypeOf(Object.setPrototypeOf({},null))!==null&&Object.getPrototypeOf(Object.create(null))===null){(function(){var e=Object.create(null);var t=Object.getPrototypeOf;var r=Object.setPrototypeOf;Object.getPrototypeOf=function(r){var n=t(r);return n===e?null:n};Object.setPrototypeOf=function(t,n){var o=n===null?e:n;return r(t,o)};Object.setPrototypeOf.polyfill=false})()}var kt=!i(function(){Object.keys("foo")});if(!kt){var Ft=Object.keys;re(Object,"keys",function keys(e){return Ft(se.ToObject(e))});n=Object.keys}var Lt=i(function(){Object.keys(/a/g)});if(Lt){var Dt=Object.keys;re(Object,"keys",function keys(e){if(te.regex(e)){var t=[];for(var r in e){if(z(e,r)){M(t,r)}}return t}return Dt(e)});n=Object.keys}if(Object.getOwnPropertyNames){var zt=!i(function(){Object.getOwnPropertyNames("foo")});if(!zt){var qt=typeof window==="object"?Object.getOwnPropertyNames(window):[];var Wt=Object.getOwnPropertyNames;re(Object,"getOwnPropertyNames",function getOwnPropertyNames(e){var t=se.ToObject(e);if(g(t)==="[object Window]"){try{return Wt(t)}catch(e){return P([],qt)}}return Wt(t)})}}if(Object.getOwnPropertyDescriptor){var Gt=!i(function(){Object.getOwnPropertyDescriptor("foo","bar")});if(!Gt){var Ht=Object.getOwnPropertyDescriptor;re(Object,"getOwnPropertyDescriptor",function getOwnPropertyDescriptor(e,t){return Ht(se.ToObject(e),t)})}}if(Object.seal){var Vt=!i(function(){Object.seal("foo")});if(!Vt){var Bt=Object.seal;re(Object,"seal",function seal(e){if(!se.TypeIsObject(e)){return e}return Bt(e)})}}if(Object.isSealed){var Ut=!i(function(){Object.isSealed("foo")});if(!Ut){var $t=Object.isSealed;re(Object,"isSealed",function isSealed(e){if(!se.TypeIsObject(e)){return true}return $t(e)})}}if(Object.freeze){var Jt=!i(function(){Object.freeze("foo")});if(!Jt){var Xt=Object.freeze;re(Object,"freeze",function freeze(e){if(!se.TypeIsObject(e)){return e}return Xt(e)})}}if(Object.isFrozen){var Kt=!i(function(){Object.isFrozen("foo")});if(!Kt){var Zt=Object.isFrozen;re(Object,"isFrozen",function isFrozen(e){if(!se.TypeIsObject(e)){return true}return Zt(e)})}}if(Object.preventExtensions){var Yt=!i(function(){Object.preventExtensions("foo")});if(!Yt){var Qt=Object.preventExtensions;re(Object,"preventExtensions",function preventExtensions(e){if(!se.TypeIsObject(e)){return e}return Qt(e)})}}if(Object.isExtensible){var er=!i(function(){Object.isExtensible("foo")});if(!er){var tr=Object.isExtensible;re(Object,"isExtensible",function isExtensible(e){if(!se.TypeIsObject(e)){return false}return tr(e)})}}if(Object.getPrototypeOf){var rr=!i(function(){Object.getPrototypeOf("foo")});if(!rr){var nr=Object.getPrototypeOf;re(Object,"getPrototypeOf",function getPrototypeOf(e){return nr(se.ToObject(e))})}}var or=s&&function(){var e=Object.getOwnPropertyDescriptor(RegExp.prototype,"flags");return e&&se.IsCallable(e.get)}();if(s&&!or){var ir=function flags(){if(!se.TypeIsObject(this)){throw new TypeError("Method called on incompatible type: must be an object.")}var e="";if(this.global){e+="g"}if(this.ignoreCase){e+="i"}if(this.multiline){e+="m"}if(this.unicode){e+="u"}if(this.sticky){e+="y"}return e};m.getter(RegExp.prototype,"flags",ir)}var ar=s&&a(function(){return String(new RegExp(/a/g,"i"))==="/a/i"});var ur=ne&&s&&function(){var e=/./;e[$.match]=false;return RegExp(e)===e}();var fr=a(function(){return RegExp.prototype.toString.call({source:"abc"})==="/abc/"});var sr=fr&&a(function(){return RegExp.prototype.toString.call({source:"a",flags:"b"})==="/a/b"});if(!fr||!sr){var cr=RegExp.prototype.toString;h(RegExp.prototype,"toString",function toString(){var e=se.RequireObjectCoercible(this);if(te.regex(e)){return t(cr,e)}var r=ae(e.source);var n=ae(e.flags);return"/"+r+"/"+n},true);m.preserveToString(RegExp.prototype.toString,cr)}if(s&&(!ar||ur)){var lr=Object.getOwnPropertyDescriptor(RegExp.prototype,"flags").get;var pr=Object.getOwnPropertyDescriptor(RegExp.prototype,"source")||{};var vr=function(){return this.source};var yr=se.IsCallable(pr.get)?pr.get:vr;var hr=RegExp;var br=function(){return function RegExp(e,t){var r=se.IsRegExp(e);var n=this instanceof RegExp;if(!n&&r&&typeof t==="undefined"&&e.constructor===RegExp){return e}var o=e;var i=t;if(te.regex(e)){o=se.Call(yr,e);i=typeof t==="undefined"?se.Call(lr,e):t;return new RegExp(o,i)}else if(r){o=e.source;i=typeof t==="undefined"?e.flags:t}return new hr(e,t)}}();Ie(hr,br,{$input:true});RegExp=br;m.redefine(S,"RegExp",br)}if(s){var gr={input:"$_",lastMatch:"$&",lastParen:"$+",leftContext:"$`",rightContext:"$'"};l(n(gr),function(e){if(e in RegExp&&!(gr[e]in RegExp)){m.getter(RegExp,gr[e],function get(){return RegExp[e]})}})}Pe(RegExp);var dr=1/Number.EPSILON;var mr=function roundTiesToEven(e){return e+dr-dr};var Or=Math.pow(2,-23);var wr=Math.pow(2,127)*(2-Or);var jr=Math.pow(2,-126);var Sr=Math.E;var Tr=Math.LOG2E;var Ir=Math.LOG10E;var Er=Number.prototype.clz;delete Number.prototype.clz;var Pr={acosh:function acosh(e){var t=Number(e);if(X(t)||e<1){return NaN}if(t===1){return 0}if(t===Infinity){return t}return L(t/Sr+D(t+1)*D(t-1)/Sr)+1},asinh:function asinh(e){var t=Number(e);if(t===0||!T(t)){return t}return t<0?-asinh(-t):L(t+D(t*t+1))},atanh:function atanh(e){var t=Number(e);if(X(t)||t<-1||t>1){return NaN}if(t===-1){return-Infinity}if(t===1){return Infinity}if(t===0){return t}return.5*L((1+t)/(1-t))},cbrt:function cbrt(e){var t=Number(e);if(t===0){return t}var r=t<0;var n;if(r){t=-t}if(t===Infinity){n=Infinity}else{n=F(L(t)/3);n=(t/(n*n)+2*n)/3}return r?-n:n},clz32:function clz32(e){var t=Number(e);var r=se.ToUint32(t);if(r===0){return 32}return Er?se.Call(Er,r):31-_(L(r+.5)*Tr)},cosh:function cosh(e){var t=Number(e);if(t===0){return 1}if(X(t)){return NaN}if(!T(t)){return Infinity}if(t<0){t=-t}if(t>21){return F(t)/2}return(F(t)+F(-t))/2},expm1:function expm1(e){var t=Number(e);if(t===-Infinity){return-1}if(!T(t)||t===0){return t}if(k(t)>.5){return F(t)-1}var r=t;var n=0;var o=1;while(n+r!==n){n+=r;o+=1;r*=t/o}return n},hypot:function hypot(e,t){var r=0;var n=0;for(var o=0;o<arguments.length;++o){var i=k(Number(arguments[o]));if(n<i){r*=n/i*(n/i);r+=1;n=i}else{r+=i>0?i/n*(i/n):i}}return n===Infinity?Infinity:n*D(r)},log2:function log2(e){return L(e)*Tr},log10:function log10(e){return L(e)*Ir},log1p:function log1p(e){var t=Number(e);if(t<-1||X(t)){return NaN}if(t===0||t===Infinity){return t}if(t===-1){return-Infinity}return 1+t-1===0?t:t*(L(1+t)/(1+t-1))},sign:Z,sinh:function sinh(e){var t=Number(e);if(!T(t)||t===0){return t}if(k(t)<1){return(Math.expm1(t)-Math.expm1(-t))/2}return(F(t-1)-F(-t-1))*Sr/2},tanh:function tanh(e){var t=Number(e);if(X(t)||t===0){return t}if(t>=20){return 1}if(t<=-20){return-1}return(Math.expm1(t)-Math.expm1(-t))/(F(t)+F(-t))},trunc:function trunc(e){var t=Number(e);return t<0?-_(-t):_(t)},imul:function imul(e,t){var r=se.ToUint32(e);var n=se.ToUint32(t);var o=r>>>16&65535;var i=r&65535;var a=n>>>16&65535;var u=n&65535;return i*u+(o*u+i*a<<16>>>0)|0},fround:function fround(e){var t=Number(e);if(t===0||t===Infinity||t===-Infinity||X(t)){return t}var r=Z(t);var n=k(t);if(n<jr){return r*mr(n/jr/Or)*jr*Or}var o=(1+Or/Number.EPSILON)*n;var i=o-(o-n);if(i>wr||X(i)){return r*Infinity}return r*i}};b(Math,Pr);h(Math,"log1p",Pr.log1p,Math.log1p(-1e-17)!==-1e-17);h(Math,"asinh",Pr.asinh,Math.asinh(-1e7)!==-Math.asinh(1e7));h(Math,"tanh",Pr.tanh,Math.tanh(-2e-17)!==-2e-17);h(Math,"acosh",Pr.acosh,Math.acosh(Number.MAX_VALUE)===Infinity);h(Math,"cbrt",Pr.cbrt,Math.abs(1-Math.cbrt(1e-300)/1e-100)/Number.EPSILON>8);h(Math,"sinh",Pr.sinh,Math.sinh(-2e-17)!==-2e-17);var Cr=Math.expm1(10);h(Math,"expm1",Pr.expm1,Cr>22025.465794806718||Cr<22025.465794806718);var Mr=Math.round;var xr=Math.round(.5-Number.EPSILON/4)===0&&Math.round(-.5+Number.EPSILON/3.99)===1;var Nr=dr+1;var Ar=2*dr-1;var Rr=[Nr,Ar].every(function(e){return Math.round(e)===e});h(Math,"round",function round(e){var t=_(e);var r=t===-1?-0:t+1; +return e-t<.5?t:r},!xr||!Rr);m.preserveToString(Math.round,Mr);var _r=Math.imul;if(Math.imul(4294967295,5)!==-5){Math.imul=Pr.imul;m.preserveToString(Math.imul,_r)}if(Math.imul.length!==2){re(Math,"imul",function imul(e,t){return se.Call(_r,Math,arguments)})}var kr=function(){var e=S.setTimeout;if(typeof e!=="function"&&typeof e!=="object"){return}se.IsPromise=function(e){if(!se.TypeIsObject(e)){return false}if(typeof e._promise==="undefined"){return false}return true};var r=function(e){if(!se.IsConstructor(e)){throw new TypeError("Bad promise constructor")}var t=this;var r=function(e,r){if(t.resolve!==void 0||t.reject!==void 0){throw new TypeError("Bad Promise implementation!")}t.resolve=e;t.reject=r};t.resolve=void 0;t.reject=void 0;t.promise=new e(r);if(!(se.IsCallable(t.resolve)&&se.IsCallable(t.reject))){throw new TypeError("Bad promise constructor")}};var n;if(typeof window!=="undefined"&&se.IsCallable(window.postMessage)){n=function(){var e=[];var t="zero-timeout-message";var r=function(r){M(e,r);window.postMessage(t,"*")};var n=function(r){if(r.source===window&&r.data===t){r.stopPropagation();if(e.length===0){return}var n=N(e);n()}};window.addEventListener("message",n,true);return r}}var o=function(){var e=S.Promise;var t=e&&e.resolve&&e.resolve();return t&&function(e){return t.then(e)}};var i=se.IsCallable(S.setImmediate)?S.setImmediate:typeof process==="object"&&process.nextTick?process.nextTick:o()||(se.IsCallable(n)?n():function(t){e(t,0)});var a=function(e){return e};var u=function(e){throw e};var f=0;var s=1;var c=2;var l=0;var p=1;var v=2;var y={};var h=function(e,t,r){i(function(){g(e,t,r)})};var g=function(e,t,r){var n,o;if(t===y){return e(r)}try{n=e(r);o=t.resolve}catch(e){n=e;o=t.reject}o(n)};var d=function(e,t){var r=e._promise;var n=r.reactionLength;if(n>0){h(r.fulfillReactionHandler0,r.reactionCapability0,t);r.fulfillReactionHandler0=void 0;r.rejectReactions0=void 0;r.reactionCapability0=void 0;if(n>1){for(var o=1,i=0;o<n;o++,i+=3){h(r[i+l],r[i+v],t);e[i+l]=void 0;e[i+p]=void 0;e[i+v]=void 0}}}r.result=t;r.state=s;r.reactionLength=0};var m=function(e,t){var r=e._promise;var n=r.reactionLength;if(n>0){h(r.rejectReactionHandler0,r.reactionCapability0,t);r.fulfillReactionHandler0=void 0;r.rejectReactions0=void 0;r.reactionCapability0=void 0;if(n>1){for(var o=1,i=0;o<n;o++,i+=3){h(r[i+p],r[i+v],t);e[i+l]=void 0;e[i+p]=void 0;e[i+v]=void 0}}}r.result=t;r.state=c;r.reactionLength=0};var O=function(e){var t=false;var r=function(r){var n;if(t){return}t=true;if(r===e){return m(e,new TypeError("Self resolution"))}if(!se.TypeIsObject(r)){return d(e,r)}try{n=r.then}catch(t){return m(e,t)}if(!se.IsCallable(n)){return d(e,r)}i(function(){j(e,r,n)})};var n=function(r){if(t){return}t=true;return m(e,r)};return{resolve:r,reject:n}};var w=function(e,r,n,o){if(e===I){t(e,r,n,o,y)}else{t(e,r,n,o)}};var j=function(e,t,r){var n=O(e);var o=n.resolve;var i=n.reject;try{w(r,t,o,i)}catch(e){i(e)}};var T,I;var E=function(){var e=function Promise(t){if(!(this instanceof e)){throw new TypeError('Constructor Promise requires "new"')}if(this&&this._promise){throw new TypeError("Bad construction")}if(!se.IsCallable(t)){throw new TypeError("not a valid resolver")}var r=Ne(this,e,T,{_promise:{result:void 0,state:f,reactionLength:0,fulfillReactionHandler0:void 0,rejectReactionHandler0:void 0,reactionCapability0:void 0}});var n=O(r);var o=n.reject;try{t(n.resolve,o)}catch(e){o(e)}return r};return e}();T=E.prototype;var P=function(e,t,r,n){var o=false;return function(i){if(o){return}o=true;t[e]=i;if(--n.count===0){var a=r.resolve;a(t)}}};var C=function(e,t,r){var n=e.iterator;var o=[];var i={count:1};var a,u;var f=0;while(true){try{a=se.IteratorStep(n);if(a===false){e.done=true;break}u=a.value}catch(t){e.done=true;throw t}o[f]=void 0;var s=t.resolve(u);var c=P(f,o,r,i);i.count+=1;w(s.then,s,c,r.reject);f+=1}if(--i.count===0){var l=r.resolve;l(o)}return r.promise};var x=function(e,t,r){var n=e.iterator;var o,i,a;while(true){try{o=se.IteratorStep(n);if(o===false){e.done=true;break}i=o.value}catch(t){e.done=true;throw t}a=t.resolve(i);w(a.then,a,r.resolve,r.reject)}return r.promise};b(E,{all:function all(e){var t=this;if(!se.TypeIsObject(t)){throw new TypeError("Promise is not object")}var n=new r(t);var o,i;try{o=se.GetIterator(e);i={iterator:o,done:false};return C(i,t,n)}catch(e){var a=e;if(i&&!i.done){try{se.IteratorClose(o,true)}catch(e){a=e}}var u=n.reject;u(a);return n.promise}},race:function race(e){var t=this;if(!se.TypeIsObject(t)){throw new TypeError("Promise is not object")}var n=new r(t);var o,i;try{o=se.GetIterator(e);i={iterator:o,done:false};return x(i,t,n)}catch(e){var a=e;if(i&&!i.done){try{se.IteratorClose(o,true)}catch(e){a=e}}var u=n.reject;u(a);return n.promise}},reject:function reject(e){var t=this;if(!se.TypeIsObject(t)){throw new TypeError("Bad promise constructor")}var n=new r(t);var o=n.reject;o(e);return n.promise},resolve:function resolve(e){var t=this;if(!se.TypeIsObject(t)){throw new TypeError("Bad promise constructor")}if(se.IsPromise(e)){var n=e.constructor;if(n===t){return e}}var o=new r(t);var i=o.resolve;i(e);return o.promise}});b(T,{catch:function(e){return this.then(null,e)},then:function then(e,t){var n=this;if(!se.IsPromise(n)){throw new TypeError("not a promise")}var o=se.SpeciesConstructor(n,E);var i;var b=arguments.length>2&&arguments[2]===y;if(b&&o===E){i=y}else{i=new r(o)}var g=se.IsCallable(e)?e:a;var d=se.IsCallable(t)?t:u;var m=n._promise;var O;if(m.state===f){if(m.reactionLength===0){m.fulfillReactionHandler0=g;m.rejectReactionHandler0=d;m.reactionCapability0=i}else{var w=3*(m.reactionLength-1);m[w+l]=g;m[w+p]=d;m[w+v]=i}m.reactionLength+=1}else if(m.state===s){O=m.result;h(g,i,O)}else if(m.state===c){O=m.result;h(d,i,O)}else{throw new TypeError("unexpected Promise state")}return i.promise}});y=new r(E);I=T.then;return E}();if(S.Promise){delete S.Promise.accept;delete S.Promise.defer;delete S.Promise.prototype.chain}if(typeof kr==="function"){b(S,{Promise:kr});var Fr=w(S.Promise,function(e){return e.resolve(42).then(function(){})instanceof e});var Lr=!i(function(){S.Promise.reject(42).then(null,5).then(null,W)});var Dr=i(function(){S.Promise.call(3,W)});var zr=function(e){var t=e.resolve(5);t.constructor={};var r=e.resolve(t);try{r.then(null,W).then(null,W)}catch(e){return true}return t===r}(S.Promise);var qr=s&&function(){var e=0;var t=Object.defineProperty({},"then",{get:function(){e+=1}});Promise.resolve(t);return e===1}();var Wr=function BadResolverPromise(e){var t=new Promise(e);e(3,function(){});this.then=t.then;this.constructor=BadResolverPromise};Wr.prototype=Promise.prototype;Wr.all=Promise.all;var Gr=a(function(){return!!Wr.all([1,2])});if(!Fr||!Lr||!Dr||zr||!qr||Gr){Promise=kr;re(S,"Promise",kr)}if(Promise.all.length!==1){var Hr=Promise.all;re(Promise,"all",function all(e){return se.Call(Hr,this,arguments)})}if(Promise.race.length!==1){var Vr=Promise.race;re(Promise,"race",function race(e){return se.Call(Vr,this,arguments)})}if(Promise.resolve.length!==1){var Br=Promise.resolve;re(Promise,"resolve",function resolve(e){return se.Call(Br,this,arguments)})}if(Promise.reject.length!==1){var Ur=Promise.reject;re(Promise,"reject",function reject(e){return se.Call(Ur,this,arguments)})}Ct(Promise,"all");Ct(Promise,"race");Ct(Promise,"resolve");Ct(Promise,"reject");Pe(Promise)}var $r=function(e){var t=n(p(e,function(e,t){e[t]=true;return e},{}));return e.join(":")===t.join(":")};var Jr=$r(["z","a","bb"]);var Xr=$r(["z",1,"a","3",2]);if(s){var Kr=function fastkey(e,t){if(!t&&!Jr){return null}if(fe(e)){return"^"+se.ToString(e)}else if(typeof e==="string"){return"$"+e}else if(typeof e==="number"){if(!Xr){return"n"+e}return e}else if(typeof e==="boolean"){return"b"+e}return null};var Zr=function emptyObject(){return Object.create?Object.create(null):{}};var Yr=function addIterableToMap(e,n,o){if(r(o)||te.string(o)){l(o,function(e){if(!se.TypeIsObject(e)){throw new TypeError("Iterator value "+e+" is not an entry object")}n.set(e[0],e[1])})}else if(o instanceof e){t(e.prototype.forEach,o,function(e,t){n.set(t,e)})}else{var i,a;if(!fe(o)){a=n.set;if(!se.IsCallable(a)){throw new TypeError("bad map")}i=se.GetIterator(o)}if(typeof i!=="undefined"){while(true){var u=se.IteratorStep(i);if(u===false){break}var f=u.value;try{if(!se.TypeIsObject(f)){throw new TypeError("Iterator value "+f+" is not an entry object")}t(a,n,f[0],f[1])}catch(e){se.IteratorClose(i,true);throw e}}}}};var Qr=function addIterableToSet(e,n,o){if(r(o)||te.string(o)){l(o,function(e){n.add(e)})}else if(o instanceof e){t(e.prototype.forEach,o,function(e){n.add(e)})}else{var i,a;if(!fe(o)){a=n.add;if(!se.IsCallable(a)){throw new TypeError("bad set")}i=se.GetIterator(o)}if(typeof i!=="undefined"){while(true){var u=se.IteratorStep(i);if(u===false){break}var f=u.value;try{t(a,n,f)}catch(e){se.IteratorClose(i,true);throw e}}}}};var en={Map:function(){var e={};var r=function MapEntry(e,t){this.key=e;this.value=t;this.next=null;this.prev=null};r.prototype.isRemoved=function isRemoved(){return this.key===e};var n=function isMap(e){return!!e._es6map};var o=function requireMapSlot(e,t){if(!se.TypeIsObject(e)||!n(e)){throw new TypeError("Method Map.prototype."+t+" called on incompatible receiver "+se.ToString(e))}};var i=function MapIterator(e,t){o(e,"[[MapIterator]]");this.head=e._head;this.i=this.head;this.kind=t};i.prototype={next:function next(){var e=this.i;var t=this.kind;var r=this.head;if(typeof this.i==="undefined"){return Xe()}while(e.isRemoved()&&e!==r){e=e.prev}var n;while(e.next!==r){e=e.next;if(!e.isRemoved()){if(t==="key"){n=e.key}else if(t==="value"){n=e.value}else{n=[e.key,e.value]}this.i=e;return Xe(n)}}this.i=void 0;return Xe()}};Ce(i.prototype);var a;var u=function Map(){if(!(this instanceof Map)){throw new TypeError('Constructor Map requires "new"')}if(this&&this._es6map){throw new TypeError("Bad construction")}var e=Ne(this,Map,a,{_es6map:true,_head:null,_map:G?new G:null,_size:0,_storage:Zr()});var t=new r(null,null);t.next=t.prev=t;e._head=t;if(arguments.length>0){Yr(Map,e,arguments[0])}return e};a=u.prototype;m.getter(a,"size",function(){if(typeof this._size==="undefined"){throw new TypeError("size method called on incompatible Map")}return this._size});b(a,{get:function get(e){o(this,"get");var t;var r=Kr(e,true);if(r!==null){t=this._storage[r];if(t){return t.value}else{return}}if(this._map){t=V.call(this._map,e);if(t){return t.value}else{return}}var n=this._head;var i=n;while((i=i.next)!==n){if(se.SameValueZero(i.key,e)){return i.value}}},has:function has(e){o(this,"has");var t=Kr(e,true);if(t!==null){return typeof this._storage[t]!=="undefined"}if(this._map){return B.call(this._map,e)}var r=this._head;var n=r;while((n=n.next)!==r){if(se.SameValueZero(n.key,e)){return true}}return false},set:function set(e,t){o(this,"set");var n=this._head;var i=n;var a;var u=Kr(e,true);if(u!==null){if(typeof this._storage[u]!=="undefined"){this._storage[u].value=t;return this}else{a=this._storage[u]=new r(e,t);i=n.prev}}else if(this._map){if(B.call(this._map,e)){V.call(this._map,e).value=t}else{a=new r(e,t);U.call(this._map,e,a);i=n.prev}}while((i=i.next)!==n){if(se.SameValueZero(i.key,e)){i.value=t;return this}}a=a||new r(e,t);if(se.SameValue(-0,e)){a.key=+0}a.next=this._head;a.prev=this._head.prev;a.prev.next=a;a.next.prev=a;this._size+=1;return this},delete:function(t){o(this,"delete");var r=this._head;var n=r;var i=Kr(t,true);if(i!==null){if(typeof this._storage[i]==="undefined"){return false}n=this._storage[i].prev;delete this._storage[i]}else if(this._map){if(!B.call(this._map,t)){return false}n=V.call(this._map,t).prev;H.call(this._map,t)}while((n=n.next)!==r){if(se.SameValueZero(n.key,t)){n.key=e;n.value=e;n.prev.next=n.next;n.next.prev=n.prev;this._size-=1;return true}}return false},clear:function clear(){o(this,"clear");this._map=G?new G:null;this._size=0;this._storage=Zr();var t=this._head;var r=t;var n=r.next;while((r=n)!==t){r.key=e;r.value=e;n=r.next;r.next=r.prev=t}t.next=t.prev=t},keys:function keys(){o(this,"keys");return new i(this,"key")},values:function values(){o(this,"values");return new i(this,"value")},entries:function entries(){o(this,"entries");return new i(this,"key+value")},forEach:function forEach(e){o(this,"forEach");var r=arguments.length>1?arguments[1]:null;var n=this.entries();for(var i=n.next();!i.done;i=n.next()){if(r){t(e,r,i.value[1],i.value[0],this)}else{e(i.value[1],i.value[0],this)}}}});Ce(a,a.entries);return u}(),Set:function(){var e=function isSet(e){return e._es6set&&typeof e._storage!=="undefined"};var r=function requireSetSlot(t,r){if(!se.TypeIsObject(t)||!e(t)){throw new TypeError("Set.prototype."+r+" called on incompatible receiver "+se.ToString(t))}};var o;var i=function Set(){if(!(this instanceof Set)){throw new TypeError('Constructor Set requires "new"')}if(this&&this._es6set){throw new TypeError("Bad construction")}var e=Ne(this,Set,o,{_es6set:true,"[[SetData]]":null,_storage:Zr()});if(!e._es6set){throw new TypeError("bad set")}if(arguments.length>0){Qr(Set,e,arguments[0])}return e};o=i.prototype;var a=function(e){var t=e;if(t==="^null"){return null}else if(t==="^undefined"){return void 0}else{var r=t.charAt(0);if(r==="$"){return C(t,1)}else if(r==="n"){return+C(t,1)}else if(r==="b"){return t==="btrue"}}return+t};var u=function ensureMap(e){if(!e["[[SetData]]"]){var t=new en.Map;e["[[SetData]]"]=t;l(n(e._storage),function(e){var r=a(e);t.set(r,r)});e["[[SetData]]"]=t}e._storage=null};m.getter(i.prototype,"size",function(){r(this,"size");if(this._storage){return n(this._storage).length}u(this);return this["[[SetData]]"].size});b(i.prototype,{has:function has(e){r(this,"has");var t;if(this._storage&&(t=Kr(e))!==null){return!!this._storage[t]}u(this);return this["[[SetData]]"].has(e)},add:function add(e){r(this,"add");var t;if(this._storage&&(t=Kr(e))!==null){this._storage[t]=true;return this}u(this);this["[[SetData]]"].set(e,e);return this},delete:function(e){r(this,"delete");var t;if(this._storage&&(t=Kr(e))!==null){var n=z(this._storage,t);return delete this._storage[t]&&n}u(this);return this["[[SetData]]"]["delete"](e)},clear:function clear(){r(this,"clear");if(this._storage){this._storage=Zr()}if(this["[[SetData]]"]){this["[[SetData]]"].clear()}},values:function values(){r(this,"values");u(this);return this["[[SetData]]"].values()},entries:function entries(){r(this,"entries");u(this);return this["[[SetData]]"].entries()},forEach:function forEach(e){r(this,"forEach");var n=arguments.length>1?arguments[1]:null;var o=this;u(o);this["[[SetData]]"].forEach(function(r,i){if(n){t(e,n,i,i,o)}else{e(i,i,o)}})}});h(i.prototype,"keys",i.prototype.values,true);Ce(i.prototype,i.prototype.values);return i}()};if(S.Map||S.Set){var tn=a(function(){return new Map([[1,2]]).get(1)===2});if(!tn){S.Map=function Map(){if(!(this instanceof Map)){throw new TypeError('Constructor Map requires "new"')}var e=new G;if(arguments.length>0){Yr(Map,e,arguments[0])}delete e.constructor;Object.setPrototypeOf(e,S.Map.prototype);return e};S.Map.prototype=O(G.prototype);h(S.Map.prototype,"constructor",S.Map,true);m.preserveToString(S.Map,G)}var rn=new Map;var nn=function(){var e=new Map([[1,0],[2,0],[3,0],[4,0]]);e.set(-0,e);return e.get(0)===e&&e.get(-0)===e&&e.has(0)&&e.has(-0)}();var on=rn.set(1,2)===rn;if(!nn||!on){re(Map.prototype,"set",function set(e,r){t(U,this,e===0?0:e,r);return this})}if(!nn){b(Map.prototype,{get:function get(e){return t(V,this,e===0?0:e)},has:function has(e){return t(B,this,e===0?0:e)}},true);m.preserveToString(Map.prototype.get,V);m.preserveToString(Map.prototype.has,B)}var an=new Set;var un=function(e){e["delete"](0);e.add(-0);return!e.has(0)}(an);var fn=an.add(1)===an;if(!un||!fn){var sn=Set.prototype.add;Set.prototype.add=function add(e){t(sn,this,e===0?0:e);return this};m.preserveToString(Set.prototype.add,sn)}if(!un){var cn=Set.prototype.has;Set.prototype.has=function has(e){return t(cn,this,e===0?0:e)};m.preserveToString(Set.prototype.has,cn);var ln=Set.prototype["delete"];Set.prototype["delete"]=function SetDelete(e){return t(ln,this,e===0?0:e)};m.preserveToString(Set.prototype["delete"],ln)}var pn=w(S.Map,function(e){var t=new e([]);t.set(42,42);return t instanceof e});var vn=Object.setPrototypeOf&&!pn;var yn=function(){try{return!(S.Map()instanceof S.Map)}catch(e){return e instanceof TypeError}}();if(S.Map.length!==0||vn||!yn){S.Map=function Map(){if(!(this instanceof Map)){throw new TypeError('Constructor Map requires "new"')}var e=new G;if(arguments.length>0){Yr(Map,e,arguments[0])}delete e.constructor;Object.setPrototypeOf(e,Map.prototype);return e};S.Map.prototype=G.prototype;h(S.Map.prototype,"constructor",S.Map,true);m.preserveToString(S.Map,G)}var hn=w(S.Set,function(e){var t=new e([]);t.add(42,42);return t instanceof e});var bn=Object.setPrototypeOf&&!hn;var gn=function(){try{return!(S.Set()instanceof S.Set)}catch(e){return e instanceof TypeError}}();if(S.Set.length!==0||bn||!gn){var dn=S.Set;S.Set=function Set(){if(!(this instanceof Set)){throw new TypeError('Constructor Set requires "new"')}var e=new dn;if(arguments.length>0){Qr(Set,e,arguments[0])}delete e.constructor;Object.setPrototypeOf(e,Set.prototype);return e};S.Set.prototype=dn.prototype;h(S.Set.prototype,"constructor",S.Set,true);m.preserveToString(S.Set,dn)}var mn=new S.Map;var On=!a(function(){return mn.keys().next().done});if(typeof S.Map.prototype.clear!=="function"||(new S.Set).size!==0||mn.size!==0||typeof S.Map.prototype.keys!=="function"||typeof S.Set.prototype.keys!=="function"||typeof S.Map.prototype.forEach!=="function"||typeof S.Set.prototype.forEach!=="function"||u(S.Map)||u(S.Set)||typeof mn.keys().next!=="function"||On||!pn){b(S,{Map:en.Map,Set:en.Set},true)}if(S.Set.prototype.keys!==S.Set.prototype.values){h(S.Set.prototype,"keys",S.Set.prototype.values,true)}Ce(Object.getPrototypeOf((new S.Map).keys()));Ce(Object.getPrototypeOf((new S.Set).keys()));if(c&&S.Set.prototype.has.name!=="has"){var wn=S.Set.prototype.has;re(S.Set.prototype,"has",function has(e){return t(wn,this,e)})}}b(S,en);Pe(S.Map);Pe(S.Set)}var jn=function throwUnlessTargetIsObject(e){if(!se.TypeIsObject(e)){throw new TypeError("target must be an object")}};var Sn={apply:function apply(){return se.Call(se.Call,null,arguments)},construct:function construct(e,t){if(!se.IsConstructor(e)){throw new TypeError("First argument must be a constructor.")}var r=arguments.length>2?arguments[2]:e;if(!se.IsConstructor(r)){throw new TypeError("new.target must be a constructor.")}return se.Construct(e,t,r,"internal")},deleteProperty:function deleteProperty(e,t){jn(e);if(s){var r=Object.getOwnPropertyDescriptor(e,t);if(r&&!r.configurable){return false}}return delete e[t]},has:function has(e,t){jn(e);return t in e}};if(Object.getOwnPropertyNames){Object.assign(Sn,{ownKeys:function ownKeys(e){jn(e);var t=Object.getOwnPropertyNames(e);if(se.IsCallable(Object.getOwnPropertySymbols)){x(t,Object.getOwnPropertySymbols(e))}return t}})}var Tn=function ConvertExceptionToBoolean(e){return!i(e)};if(Object.preventExtensions){Object.assign(Sn,{isExtensible:function isExtensible(e){jn(e);return Object.isExtensible(e)},preventExtensions:function preventExtensions(e){jn(e);return Tn(function(){Object.preventExtensions(e)})}})}if(s){var In=function get(e,t,r){var n=Object.getOwnPropertyDescriptor(e,t);if(!n){var o=Object.getPrototypeOf(e);if(o===null){return void 0}return In(o,t,r)}if("value"in n){return n.value}if(n.get){return se.Call(n.get,r)}return void 0};var En=function set(e,r,n,o){var i=Object.getOwnPropertyDescriptor(e,r);if(!i){var a=Object.getPrototypeOf(e);if(a!==null){return En(a,r,n,o)}i={value:void 0,writable:true,enumerable:true,configurable:true}}if("value"in i){if(!i.writable){return false}if(!se.TypeIsObject(o)){return false}var u=Object.getOwnPropertyDescriptor(o,r);if(u){return ie.defineProperty(o,r,{value:n})}else{return ie.defineProperty(o,r,{value:n,writable:true,enumerable:true,configurable:true})}}if(i.set){t(i.set,o,n);return true}return false};Object.assign(Sn,{defineProperty:function defineProperty(e,t,r){jn(e);return Tn(function(){Object.defineProperty(e,t,r)})},getOwnPropertyDescriptor:function getOwnPropertyDescriptor(e,t){jn(e);return Object.getOwnPropertyDescriptor(e,t)},get:function get(e,t){jn(e);var r=arguments.length>2?arguments[2]:e;return In(e,t,r)},set:function set(e,t,r){jn(e);var n=arguments.length>3?arguments[3]:e;return En(e,t,r,n)}})}if(Object.getPrototypeOf){var Pn=Object.getPrototypeOf;Sn.getPrototypeOf=function getPrototypeOf(e){jn(e);return Pn(e)}}if(Object.setPrototypeOf&&Sn.getPrototypeOf){var Cn=function(e,t){var r=t;while(r){if(e===r){return true}r=Sn.getPrototypeOf(r)}return false};Object.assign(Sn,{setPrototypeOf:function setPrototypeOf(e,t){jn(e);if(t!==null&&!se.TypeIsObject(t)){throw new TypeError("proto must be an object or null")}if(t===ie.getPrototypeOf(e)){return true}if(ie.isExtensible&&!ie.isExtensible(e)){return false}if(Cn(e,t)){return false}Object.setPrototypeOf(e,t);return true}})}var Mn=function(e,t){if(!se.IsCallable(S.Reflect[e])){h(S.Reflect,e,t)}else{var r=a(function(){S.Reflect[e](1);S.Reflect[e](NaN);S.Reflect[e](true);return true});if(r){re(S.Reflect,e,t)}}};Object.keys(Sn).forEach(function(e){Mn(e,Sn[e])});var xn=S.Reflect.getPrototypeOf;if(c&&xn&&xn.name!=="getPrototypeOf"){re(S.Reflect,"getPrototypeOf",function getPrototypeOf(e){return t(xn,S.Reflect,e)})}if(S.Reflect.setPrototypeOf){if(a(function(){S.Reflect.setPrototypeOf(1,{});return true})){re(S.Reflect,"setPrototypeOf",Sn.setPrototypeOf)}}if(S.Reflect.defineProperty){if(!a(function(){var e=!S.Reflect.defineProperty(1,"test",{value:1});var t=typeof Object.preventExtensions!=="function"||!S.Reflect.defineProperty(Object.preventExtensions({}),"test",{});return e&&t})){re(S.Reflect,"defineProperty",Sn.defineProperty)}}if(S.Reflect.construct){if(!a(function(){var e=function F(){};return S.Reflect.construct(function(){},[],e)instanceof e})){re(S.Reflect,"construct",Sn.construct)}}if(String(new Date(NaN))!=="Invalid Date"){var Nn=Date.prototype.toString;var An=function toString(){var e=+this;if(e!==e){return"Invalid Date"}return se.Call(Nn,this)};re(Date.prototype,"toString",An)}var Rn={anchor:function anchor(e){return se.CreateHTML(this,"a","name",e)},big:function big(){return se.CreateHTML(this,"big","","")},blink:function blink(){return se.CreateHTML(this,"blink","","")},bold:function bold(){return se.CreateHTML(this,"b","","")},fixed:function fixed(){return se.CreateHTML(this,"tt","","")},fontcolor:function fontcolor(e){return se.CreateHTML(this,"font","color",e)},fontsize:function fontsize(e){return se.CreateHTML(this,"font","size",e)},italics:function italics(){return se.CreateHTML(this,"i","","")},link:function link(e){return se.CreateHTML(this,"a","href",e)},small:function small(){return se.CreateHTML(this,"small","","")},strike:function strike(){return se.CreateHTML(this,"strike","","")},sub:function sub(){return se.CreateHTML(this,"sub","","")},sup:function sub(){return se.CreateHTML(this,"sup","","")}};l(Object.keys(Rn),function(e){var r=String.prototype[e];var n=false;if(se.IsCallable(r)){var o=t(r,"",' " ');var i=P([],o.match(/"/g)).length;n=o!==o.toLowerCase()||i>2}else{n=true}if(n){re(String.prototype,e,Rn[e])}});var _n=function(){if(!ne){return false}var e=typeof JSON==="object"&&typeof JSON.stringify==="function"?JSON.stringify:null;if(!e){return false}if(typeof e($())!=="undefined"){return true}if(e([$()])!=="[null]"){return true}var t={a:$()};t[$()]=true;if(e(t)!=="{}"){return true}return false}();var kn=a(function(){if(!ne){return true}return JSON.stringify(Object($()))==="{}"&&JSON.stringify([Object($())])==="[{}]"});if(_n||!kn){var Fn=JSON.stringify;re(JSON,"stringify",function stringify(e){if(typeof e==="symbol"){return}var n;if(arguments.length>1){n=arguments[1]}var o=[e];if(!r(n)){var i=se.IsCallable(n)?n:null;var a=function(e,r){var n=i?t(i,this,e,r):r;if(typeof n!=="symbol"){if(te.symbol(n)){return xt({})(n)}else{return n}}};o.push(a)}else{o.push(n)}if(arguments.length>2){o.push(arguments[2])}return Fn.apply(this,o)})}return S}); +//# sourceMappingURL=es6-shim.map
@@ -0,0 +1,2 @@
+/*! highlight.js v9.12.0 | BSD3 License | git.io/hljslicense */ +!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0===t.index}function a(e){return k.test(e)}function i(e){var n,t,r,i,o=e.className+" ";if(o+=e.parentNode?e.parentNode.className:"",t=B.exec(o))return w(t[1])?t[1]:"no-highlight";for(o=o.split(/\s+/),n=0,r=o.length;r>n;n++)if(i=o[n],a(i)||w(i))return i}function o(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3===i.nodeType?a+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!==r[0].offset?e[0].offset<r[0].offset?e:r:"start"===r[0].event?e:r:e.length?e:r}function o(e){function r(e){return" "+e.nodeName+'="'+n(e.value).replace('"',""")+'"'}s+="<"+t(e)+E.map.call(e.attributes,r).join("")+">"}function u(e){s+="</"+t(e)+">"}function c(e){("start"===e.event?o:u)(e.node)}for(var l=0,s="",f=[];e.length||r.length;){var g=i();if(s+=n(a.substring(l,g[0].offset)),l=g[0].offset,g===e){f.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g===e&&g.length&&g[0].offset===l);f.reverse().forEach(o)}else"start"===g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return s+n(a.substr(l))}function l(e){return e.v&&!e.cached_variants&&(e.cached_variants=e.v.map(function(n){return o(e,{v:null},n)})),e.cached_variants||e.eW&&[o(e)]||[e]}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var o={},u=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");o[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?u("keyword",a.k):x(a.k).forEach(function(e){u(e,a.k[e])}),a.k=o}a.lR=t(a.l||/\w+/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),null==a.r&&(a.r=1),a.c||(a.c=[]),a.c=Array.prototype.concat.apply([],a.c.map(function(e){return l("self"===e?a:e)})),a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var c=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=c.length?t(c.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){var t,a;for(t=0,a=n.c.length;a>t;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function l(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function p(e,n,t,r){var a=r?"":I.classPrefix,i='<span class="'+a,o=t?"":C;return i+=e+'">',i+n+o}function h(){var e,t,r,a;if(!E.k)return n(k);for(a="",t=0,E.lR.lastIndex=0,r=E.lR.exec(k);r;)a+=n(k.substring(t,r.index)),e=l(E,r),e?(B+=e[1],a+=p(e[0],n(r[0]))):a+=n(r[0]),t=E.lR.lastIndex,r=E.lR.exec(k);return a+n(k.substr(t))}function d(){var e="string"==typeof E.sL;if(e&&!y[E.sL])return n(k);var t=e?f(E.sL,k,!0,x[E.sL]):g(k,E.sL.length?E.sL:void 0);return E.r>0&&(B+=t.r),e&&(x[E.sL]=t.top),p(t.language,t.value,!1,!0)}function b(){L+=null!=E.sL?d():h(),k=""}function v(e){L+=e.cN?p(e.cN,"",!0):"",E=Object.create(e,{parent:{value:E}})}function m(e,n){if(k+=e,null==n)return b(),0;var t=o(n,E);if(t)return t.skip?k+=n:(t.eB&&(k+=n),b(),t.rB||t.eB||(k=n)),v(t,n),t.rB?0:n.length;var r=u(E,n);if(r){var a=E;a.skip?k+=n:(a.rE||a.eE||(k+=n),b(),a.eE&&(k=n));do E.cN&&(L+=C),E.skip||(B+=E.r),E=E.parent;while(E!==r.parent);return r.starts&&v(r.starts,""),a.rE?0:n.length}if(c(n,E))throw new Error('Illegal lexeme "'+n+'" for mode "'+(E.cN||"<unnamed>")+'"');return k+=n,n.length||1}var N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var R,E=i||N,x={},L="";for(R=E;R!==N;R=R.parent)R.cN&&(L=p(R.cN,"",!0)+L);var k="",B=0;try{for(var M,j,O=0;;){if(E.t.lastIndex=O,M=E.t.exec(t),!M)break;j=m(t.substring(O,M.index),M[0]),O=M.index+j}for(m(t.substr(O)),R=E;R.parent;R=R.parent)R.cN&&(L+=C);return{r:B,value:L,language:e,top:E}}catch(T){if(T.message&&-1!==T.message.indexOf("Illegal"))return{r:0,value:n(t)};throw T}}function g(e,t){t=t||I.languages||x(y);var r={r:0,value:n(e)},a=r;return t.filter(w).forEach(function(n){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function p(e){return I.tabReplace||I.useBR?e.replace(M,function(e,n){return I.useBR&&"\n"===e?"<br>":I.tabReplace?n.replace(/\t/g,I.tabReplace):""}):e}function h(e,n,t){var r=n?L[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function d(e){var n,t,r,o,l,s=i(e);a(s)||(I.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div"),n.innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n")):n=e,l=n.textContent,r=s?f(s,l,!0):g(l),t=u(n),t.length&&(o=document.createElementNS("http://www.w3.org/1999/xhtml","div"),o.innerHTML=r.value,r.value=c(t,u(o),l)),r.value=p(r.value),e.innerHTML=r.value,e.className=h(e.className,s,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function b(e){I=o(I,e)}function v(){if(!v.called){v.called=!0;var e=document.querySelectorAll("pre code");E.forEach.call(e,d)}}function m(){addEventListener("DOMContentLoaded",v,!1),addEventListener("load",v,!1)}function N(n,t){var r=y[n]=t(e);r.aliases&&r.aliases.forEach(function(e){L[e]=n})}function R(){return x(y)}function w(e){return e=(e||"").toLowerCase(),y[e]||y[L[e]]}var E=[],x=Object.keys,y={},L={},k=/^(no-?highlight|plain|text)$/i,B=/\blang(?:uage)?-([\w-]+)\b/i,M=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,C="</span>",I={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};return e.highlight=f,e.highlightAuto=g,e.fixMarkup=p,e.highlightBlock=d,e.configure=b,e.initHighlighting=v,e.initHighlightingOnLoad=m,e.registerLanguage=N,e.listLanguages=R,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("dos",function(e){var r=e.C(/^\s*@?rem\b/,/$/,{r:10}),t={cN:"symbol",b:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)",r:0};return{aliases:["bat","cmd"],cI:!0,i:/\/\*/,k:{keyword:"if else goto for in do call exit not exist errorlevel defined equ neq lss leq gtr geq",built_in:"prn nul lpt3 lpt2 lpt1 con com4 com3 com2 com1 aux shift cd dir echo setlocal endlocal set pause copy append assoc at attrib break cacls cd chcp chdir chkdsk chkntfs cls cmd color comp compact convert date dir diskcomp diskcopy doskey erase fs find findstr format ftype graftabl help keyb label md mkdir mode more move path pause print popd pushd promt rd recover rem rename replace restore rmdir shiftsort start subst time title tree type ver verify vol ping net ipconfig taskkill xcopy ren del"},c:[{cN:"variable",b:/%%[^ ]|%[^ ]+?%|![^ ]+?!/},{cN:"function",b:t.b,e:"goto:eof",c:[e.inherit(e.TM,{b:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),r]},{cN:"number",b:"\\b\\d+",r:0},r]}});hljs.registerLanguage("php",function(e){var c={b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},i={cN:"meta",b:/<\?(php)?|\?>/},t={cN:"string",c:[e.BE,i],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},a={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[i]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},i,{cN:"keyword",b:/\$this\b/},c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,t,a]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},t,a]}});hljs.registerLanguage("rust",function(e){var t="([ui](8|16|32|64|128|size)|f(32|64))?",r="alignof as be box break const continue crate do else enum extern false fn for if impl in let loop match mod mut offsetof once priv proc pub pure ref return self Self sizeof static struct super trait true type typeof unsafe unsized use virtual while where yield move default",n="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{aliases:["rs"],k:{keyword:r,literal:"true false Some None Ok Err",built_in:n},l:e.IR+"!?",i:"</",c:[e.CLCM,e.C("/\\*","\\*/",{c:["self"]}),e.inherit(e.QSM,{b:/b?"/,i:null}),{cN:"string",v:[{b:/r(#*)"(.|\n)*?"\1(?!#)/},{b:/b?'\\?(x\w{2}|u\w{4}|U\w{8}|.)'/}]},{cN:"symbol",b:/'[a-zA-Z_][a-zA-Z0-9_]*/},{cN:"number",v:[{b:"\\b0b([01_]+)"+t},{b:"\\b0o([0-7_]+)"+t},{b:"\\b0x([A-Fa-f0-9_]+)"+t},{b:"\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)"+t}],r:0},{cN:"function",bK:"fn",e:"(\\(|<)",eE:!0,c:[e.UTM]},{cN:"meta",b:"#\\!?\\[",e:"\\]",c:[{cN:"meta-string",b:/"/,e:/"/}]},{cN:"class",bK:"type",e:";",c:[e.inherit(e.UTM,{endsParent:!0})],i:"\\S"},{cN:"class",bK:"trait enum struct union",e:"{",c:[e.inherit(e.UTM,{endsParent:!0})],i:"[\\w\\d]"},{b:e.IR+"::",k:{built_in:n}},{b:"->"}]}});hljs.registerLanguage("nimrod",function(t){return{aliases:["nim"],k:{keyword:"addr and as asm bind block break case cast const continue converter discard distinct div do elif else end enum except export finally for from generic if import in include interface is isnot iterator let macro method mixin mod nil not notin object of or out proc ptr raise ref return shl shr static template try tuple type using var when while with without xor yield",literal:"shared guarded stdin stdout stderr result true false",built_in:"int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float float32 float64 bool char string cstring pointer expr stmt void auto any range array openarray varargs seq set clong culong cchar cschar cshort cint csize clonglong cfloat cdouble clongdouble cuchar cushort cuint culonglong cstringarray semistatic"},c:[{cN:"meta",b:/{\./,e:/\.}/,r:10},{cN:"string",b:/[a-zA-Z]\w*"/,e:/"/,c:[{b:/""/}]},{cN:"string",b:/([a-zA-Z]\w*)?"""/,e:/"""/},t.QSM,{cN:"type",b:/\b[A-Z]\w+\b/,r:0},{cN:"number",r:0,v:[{b:/\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/},{b:/\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/},{b:/\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/},{b:/\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/}]},t.HCM]}});hljs.registerLanguage("javascript",function(e){var r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},n={cN:"subst",b:"\\$\\{",e:"\\}",k:t,c:[]},c={cN:"string",b:"`",e:"`",c:[e.BE,n]};n.c=[e.ASM,e.QSM,c,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:t,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,c,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:r+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:r,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+r+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:r},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:s}]}]},{b:/</,e:/(\/\w+|\w+\/)>/,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:r}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:s}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage("ebnf",function(a){var e=a.C(/\(\*/,/\*\)/),t={cN:"attribute",b:/^[ ]*[a-zA-Z][a-zA-Z-]*([\s-]+[a-zA-Z][a-zA-Z]*)*/},r={cN:"meta",b:/\?.*\?/},b={b:/=/,e:/;/,c:[e,r,a.ASM,a.QSM]};return{i:/\S/,c:[e,t,b]}});hljs.registerLanguage("scss",function(e){var t="[a-zA-Z-][a-zA-Z0-9_-]*",i={cN:"variable",b:"(\\$"+t+")\\b"},r={cN:"number",b:"#[0-9A-Fa-f]+"};({cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:!0,i:"[^\\s]",starts:{eW:!0,eE:!0,c:[r,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"meta",b:"!important"}]}});return{cI:!0,i:"[=/|']",c:[e.CLCM,e.CBCM,{cN:"selector-id",b:"\\#[A-Za-z0-9_-]+",r:0},{cN:"selector-class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"selector-attr",b:"\\[",e:"\\]",i:"$"},{cN:"selector-tag",b:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",r:0},{b:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{b:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},i,{cN:"attribute",b:"\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",i:"[^\\s]"},{b:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{b:":",e:";",c:[i,r,e.CSSNM,e.QSM,e.ASM,{cN:"meta",b:"!important"}]},{b:"@",e:"[{;]",k:"mixin include extend for if else each while charset import debug media page content font-face namespace warn",c:[i,e.QSM,e.ASM,r,e.CSSNM,{b:"\\s[A-Za-z0-9_.-]+",r:0}]}]}});hljs.registerLanguage("typescript",function(e){var r={keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private protected get set super static implements enum export import declare type namespace abstract as from extends async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void Promise"};return{aliases:["ts"],k:r,c:[{cN:"meta",b:/^\s*['"]use strict['"]/},e.ASM,e.QSM,{cN:"string",b:"`",e:"`",c:[e.BE,{cN:"subst",b:"\\$\\{",e:"\\}"}]},e.CLCM,e.CBCM,{cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+e.IR+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:e.IR},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:r,c:["self",e.CLCM,e.CBCM]}]}]}],r:0},{cN:"function",b:"function",e:/[\{;]/,eE:!0,k:r,c:["self",e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:r,c:[e.CLCM,e.CBCM],i:/["'\(]/}],i:/%/,r:0},{bK:"constructor",e:/\{/,eE:!0,c:["self",{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:r,c:[e.CLCM,e.CBCM],i:/["'\(]/}]},{b:/module\./,k:{built_in:"module"},r:0},{bK:"module",e:/\{/,eE:!0},{bK:"interface",e:/\{/,eE:!0,k:"interface extends"},{b:/\$[(.]/},{b:"\\."+e.IR,r:0},{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("ruby",function(e){var b="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},c={cN:"doctag",b:"@[A-Za-z]+"},a={b:"#<",e:">"},s=[e.C("#","$",{c:[c]}),e.C("^\\=begin","^\\=end",{c:[c],r:10}),e.C("^__END__","\\n$")],n={cN:"subst",b:"#\\{",e:"}",k:r},t={cN:"string",c:[e.BE,n],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<(-?)\w+$/,e:/^\s*\w+$/}]},i={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:r},d=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(s)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:b}),i].concat(s)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":(?!\\s)",c:[t,{b:b}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:r},{b:"("+e.RSR+"|unless)\\s*",k:"unless",c:[a,{cN:"regexp",c:[e.BE,n],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(s),r:0}].concat(s);n.c=d,i.c=d;var l="[>?]>",o="[\\w#]+\\(\\w+\\):\\d+:\\d+>",u="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",w=[{b:/^\s*=>/,starts:{e:"$",c:d}},{cN:"meta",b:"^("+l+"|"+o+"|"+u+")",starts:{e:"$",c:d}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,i:/\/\*/,c:s.concat(w).concat(d)}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*#]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",r:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:n,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})],i:"\\S"},c={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return n.splice(n.length,0,t,c),{c:n,k:i,i:"\\S"}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,s,a,t]}});hljs.registerLanguage("less",function(e){var r="[\\w-]+",t="("+r+"|@{"+r+"})",a=[],c=[],s=function(e){return{cN:"string",b:"~?"+e+".*?"+e}},b=function(e,r,t){return{cN:e,b:r,r:t}},n={b:"\\(",e:"\\)",c:c,r:0};c.push(e.CLCM,e.CBCM,s("'"),s('"'),e.CSSNM,{b:"(url|data-uri)\\(",starts:{cN:"string",e:"[\\)\\n]",eE:!0}},b("number","#[0-9A-Fa-f]+\\b"),n,b("variable","@@?"+r,10),b("variable","@{"+r+"}"),b("built_in","~?`[^`]*?`"),{cN:"attribute",b:r+"\\s*:",e:":",rB:!0,eE:!0},{cN:"meta",b:"!important"});var i=c.concat({b:"{",e:"}",c:a}),o={bK:"when",eW:!0,c:[{bK:"and not"}].concat(c)},u={b:t+"\\s*:",rB:!0,e:"[;}]",r:0,c:[{cN:"attribute",b:t,e:":",eE:!0,starts:{eW:!0,i:"[<=$]",r:0,c:c}}]},l={cN:"keyword",b:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{e:"[;{}]",rE:!0,c:c,r:0}},C={cN:"variable",v:[{b:"@"+r+"\\s*:",r:15},{b:"@"+r}],starts:{e:"[;}]",rE:!0,c:i}},p={v:[{b:"[\\.#:&\\[>]",e:"[;{}]"},{b:t,e:"{"}],rB:!0,rE:!0,i:"[<='$\"]",r:0,c:[e.CLCM,e.CBCM,o,b("keyword","all\\b"),b("variable","@{"+r+"}"),b("selector-tag",t+"%?",0),b("selector-id","#"+t),b("selector-class","\\."+t,0),b("selector-tag","&",0),{cN:"selector-attr",b:"\\[",e:"\\]"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"\\(",e:"\\)",c:i},{b:"!important"}]};return a.push(e.CLCM,e.CBCM,l,C,u,p),{cI:!0,i:"[=>'/<($\"]",c:a}});hljs.registerLanguage("yaml",function(e){var b="true false yes no null",a="^[ \\-]*",r="[a-zA-Z_][\\w\\-]*",t={cN:"attr",v:[{b:a+r+":"},{b:a+'"'+r+'":'},{b:a+"'"+r+"':"}]},c={cN:"template-variable",v:[{b:"{{",e:"}}"},{b:"%{",e:"}"}]},l={cN:"string",r:0,v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/\S+/}],c:[e.BE,c]};return{cI:!0,aliases:["yml","YAML","yaml"],c:[t,{cN:"meta",b:"^---s*$",r:10},{cN:"string",b:"[\\|>] *$",rE:!0,c:l.c,e:t.v[0].b},{b:"<%[%=-]?",e:"[%-]?%>",sL:"ruby",eB:!0,eE:!0,r:0},{cN:"type",b:"!!"+e.UIR},{cN:"meta",b:"&"+e.UIR+"$"},{cN:"meta",b:"\\*"+e.UIR+"$"},{cN:"bullet",b:"^ *-",r:0},e.HCM,{bK:b,k:{literal:b}},e.CNM,l]}});hljs.registerLanguage("shell",function(s){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}});hljs.registerLanguage("swift",function(e){var i={keyword:"__COLUMN__ __FILE__ __FUNCTION__ __LINE__ as as! as? associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},t={cN:"type",b:"\\b[A-Z][\\wÀ-ʸ']*",r:0},n=e.C("/\\*","\\*/",{c:["self"]}),r={cN:"subst",b:/\\\(/,e:"\\)",k:i,c:[]},a={cN:"number",b:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",r:0},o=e.inherit(e.QSM,{c:[r,e.BE]});return r.c=[a],{k:i,c:[o,e.CLCM,n,t,a,{cN:"function",bK:"func",e:"{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{b:/</,e:/>/},{cN:"params",b:/\(/,e:/\)/,endsParent:!0,k:i,c:["self",a,o,e.CBCM,{b:":"}],i:/["']/}],i:/\[|%/},{cN:"class",bK:"struct protocol class extension enum",k:i,e:"\\{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{cN:"meta",b:"(@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain)"},{bK:"import",e:/$/,c:[e.CLCM,n]}]}});hljs.registerLanguage("lisp",function(b){var e="[a-zA-Z_\\-\\+\\*\\/\\<\\=\\>\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*",c="\\|[^]*?\\|",r="(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|\\-)?\\d+)?",a={cN:"meta",b:"^#!",e:"$"},l={cN:"literal",b:"\\b(t{1}|nil)\\b"},n={cN:"number",v:[{b:r,r:0},{b:"#(b|B)[0-1]+(/[0-1]+)?"},{b:"#(o|O)[0-7]+(/[0-7]+)?"},{b:"#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?"},{b:"#(c|C)\\("+r+" +"+r,e:"\\)"}]},i=b.inherit(b.QSM,{i:null}),t=b.C(";","$",{r:0}),s={b:"\\*",e:"\\*"},u={cN:"symbol",b:"[:&]"+e},d={b:e,r:0},f={b:c},m={b:"\\(",e:"\\)",c:["self",l,i,n,d]},o={c:[n,i,s,u,m,d],v:[{b:"['`]\\(",e:"\\)"},{b:"\\(quote ",e:"\\)",k:{name:"quote"}},{b:"'"+c}]},v={v:[{b:"'"+e},{b:"#'"+e+"(::"+e+")*"}]},N={b:"\\(\\s*",e:"\\)"},A={eW:!0,r:0};return N.c=[{cN:"name",v:[{b:e},{b:c}]},A],A.c=[o,v,N,l,n,i,t,s,u,f,d],{i:/\S/,c:[n,a,l,i,t,o,v,N,d]}});hljs.registerLanguage("vim",function(e){return{l:/[!#@\w]+/,k:{keyword:"N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope cp cpf cq cr cs cst cu cuna cunme cw delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu go gr grepa gu gv ha helpf helpg helpt hi hid his ia iabc if ij il im imapc ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf quita qa rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank",built_in:"synIDtrans atan2 range matcharg did_filetype asin feedkeys xor argv complete_check add getwinposx getqflist getwinposy screencol clearmatches empty extend getcmdpos mzeval garbagecollect setreg ceil sqrt diff_hlID inputsecret get getfperm getpid filewritable shiftwidth max sinh isdirectory synID system inputrestore winline atan visualmode inputlist tabpagewinnr round getregtype mapcheck hasmapto histdel argidx findfile sha256 exists toupper getcmdline taglist string getmatches bufnr strftime winwidth bufexists strtrans tabpagebuflist setcmdpos remote_read printf setloclist getpos getline bufwinnr float2nr len getcmdtype diff_filler luaeval resolve libcallnr foldclosedend reverse filter has_key bufname str2float strlen setline getcharmod setbufvar index searchpos shellescape undofile foldclosed setqflist buflisted strchars str2nr virtcol floor remove undotree remote_expr winheight gettabwinvar reltime cursor tabpagenr finddir localtime acos getloclist search tanh matchend rename gettabvar strdisplaywidth type abs py3eval setwinvar tolower wildmenumode log10 spellsuggest bufloaded synconcealed nextnonblank server2client complete settabwinvar executable input wincol setmatches getftype hlID inputsave searchpair or screenrow line settabvar histadd deepcopy strpart remote_peek and eval getftime submatch screenchar winsaveview matchadd mkdir screenattr getfontname libcall reltimestr getfsize winnr invert pow getbufline byte2line soundfold repeat fnameescape tagfiles sin strwidth spellbadword trunc maparg log lispindent hostname setpos globpath remote_foreground getchar synIDattr fnamemodify cscope_connection stridx winbufnr indent min complete_add nr2char searchpairpos inputdialog values matchlist items hlexists strridx browsedir expand fmod pathshorten line2byte argc count getwinvar glob foldtextresult getreg foreground cosh matchdelete has char2nr simplify histget searchdecl iconv winrestcmd pumvisible writefile foldlevel haslocaldir keys cos matchstr foldtext histnr tan tempname getcwd byteidx getbufvar islocked escape eventhandler remote_send serverlist winrestview synstack pyeval prevnonblank readfile cindent filereadable changenr exp"},i:/;/,c:[e.NM,e.ASM,{cN:"string",b:/"(\\"|\n\\|[^"\n])*"/},e.C('"',"$"),{cN:"variable",b:/[bwtglsav]:[\w\d_]*/},{cN:"function",bK:"function function!",e:"$",r:0,c:[e.TM,{cN:"params",b:"\\(",e:"\\)"}]},{cN:"symbol",b:/<[\w-]+>/}]}});hljs.registerLanguage("xml",function(s){var e="[A-Za-z0-9\\._:-]+",t={eW:!0,i:/</,r:0,c:[{cN:"attr",b:e,r:0},{b:/=\s*/,r:0,c:[{cN:"string",endsParent:!0,v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},s.C("<!--","-->",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0}]},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{name:"style"},c:[t],starts:{e:"</style>",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{name:"script"},c:[t],starts:{e:"</script>",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"name",b:/[^\/><\s]+/,r:0},t]}]}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage("awk",function(e){var r={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},b="BEGIN END if else while do for in break continue delete next nextfile function func exit|10",n={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,r:10},{b:/(u|b)?r?"""/,e:/"""/,r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},e.ASM,e.QSM]};return{k:{keyword:b},c:[r,n,e.RM,e.HCM,e.NM]}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",t={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:c,r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,t]}]}});hljs.registerLanguage("scheme",function(e){var t="[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+",r="(\\-|\\+)?\\d+([./]\\d+)?",a=r+"[+\\-]"+r+"i",i={"builtin-name":"case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char<? char=? char>=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci<? string-ci=? string-ci>=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string<? string=? string>=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"},n={cN:"meta",b:"^#!",e:"$"},c={cN:"literal",b:"(#t|#f|#\\\\"+t+"|#\\\\.)"},l={cN:"number",v:[{b:r,r:0},{b:a,r:0},{b:"#b[0-1]+(/[0-1]+)?"},{b:"#o[0-7]+(/[0-7]+)?"},{b:"#x[0-9a-f]+(/[0-9a-f]+)?"}]},s=e.QSM,o=[e.C(";","$",{r:0}),e.C("#\\|","\\|#")],u={b:t,r:0},p={cN:"symbol",b:"'"+t},d={eW:!0,r:0},m={v:[{b:/'/},{b:"`"}],c:[{b:"\\(",e:"\\)",c:["self",c,s,l,u,p]}]},g={cN:"name",b:t,l:t,k:i},h={b:/lambda/,eW:!0,rB:!0,c:[g,{b:/\(/,e:/\)/,endsParent:!0,c:[u]}]},b={v:[{b:"\\(",e:"\\)"},{b:"\\[",e:"\\]"}],c:[h,g,d]};return d.c=[c,l,s,u,p,m,b].concat(o),{i:/\S/,c:[n,l,s,p,m,b].concat(o)}});hljs.registerLanguage("python",function(e){var r={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},b={cN:"meta",b:/^(>>>|\.\.\.) /},c={cN:"subst",b:/\{/,e:/\}/,k:r,i:/#/},a={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[b],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[b],r:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[b,c]},{b:/(fr|rf|f)"""/,e:/"""/,c:[b,c]},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},{b:/(fr|rf|f)'/,e:/'/,c:[c]},{b:/(fr|rf|f)"/,e:/"/,c:[c]},e.ASM,e.QSM]},s={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},i={cN:"params",b:/\(/,e:/\)/,c:["self",b,s,a]};return c.c=[a,s,b],{aliases:["py","gyp"],k:r,i:/(<\/|->|\?)|=>/,c:[b,s,a,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,i,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[{b:'(u8?|U)?L?"',e:'"',i:"\\n",c:[t.BE]},{b:'(u8?|U)?R"',e:'"',c:[t.BE]},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},i={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},t.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:/<[^\n>]*>/,e:/$/,i:"\\n"},t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},n=[e,t.CLCM,t.CBCM,s,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"</",c:n.concat([i,{b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:c,c:["self",e]},{b:t.IR+"::",k:c},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:c,c:n.concat([{b:/\(/,e:/\)/,k:c,c:n.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s,e]},t.CLCM,t.CBCM,i]},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b:/</,e:/>/,c:["self"]},t.TM]}]),exports:{preprocessor:i,strings:r,k:c}}});hljs.registerLanguage("tcl",function(e){return{aliases:["tk"],k:"after append apply array auto_execok auto_import auto_load auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd chan clock close concat continue dde dict encoding eof error eval exec exit expr fblocked fconfigure fcopy file fileevent filename flush for foreach format gets glob global history http if incr info interp join lappend|10 lassign|10 lindex|10 linsert|10 list llength|10 load lrange|10 lrepeat|10 lreplace|10 lreverse|10 lsearch|10 lset|10 lsort|10 mathfunc mathop memory msgcat namespace open package parray pid pkg::create pkg_mkIndex platform platform::shell proc puts pwd read refchan regexp registry regsub|10 rename return safe scan seek set socket source split string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter tcl_wordBreakBefore tcltest tclvars tell time tm trace unknown unload unset update uplevel upvar variable vwait while",c:[e.C(";[ \\t]*#","$"),e.C("^[ \\t]*#","$"),{bK:"proc",e:"[\\{]",eE:!0,c:[{cN:"title",b:"[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",e:"[ \\t\\n\\r]",eW:!0,eE:!0}]},{eE:!0,v:[{b:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*\\(([a-zA-Z0-9_])*\\)",e:"[^a-zA-Z0-9_\\}\\$]"},{b:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",e:"(\\))?[^a-zA-Z0-9_\\}\\$]"}]},{cN:"string",c:[e.BE],v:[e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},{cN:"number",v:[e.BNM,e.CNM]}]}});hljs.registerLanguage("objectivec",function(e){var t={cN:"built_in",b:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},_={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},i=/[a-zA-Z@][a-zA-Z0-9_]*/,n="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],k:_,l:i,i:"</",c:[t,e.CLCM,e.CBCM,e.CNM,e.QSM,{cN:"string",v:[{b:'@"',e:'"',i:"\\n",c:[e.BE]},{b:"'",e:"[^\\\\]'",i:"[^\\\\][^']"}]},{cN:"meta",b:"#",e:"$",c:[{cN:"meta-string",v:[{b:'"',e:'"'},{b:"<",e:">"}]}]},{cN:"class",b:"("+n.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:n,l:i,c:[e.UTM]},{b:"\\."+e.UIR,r:0}]}});hljs.registerLanguage("nginx",function(e){var r={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},b={eW:!0,l:"[a-z/_]+",k:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s+{",rB:!0,e:"{",c:[{cN:"section",b:e.UIR}],r:0},{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"attribute",b:e.UIR,starts:b}],r:0}],i:"[^\\s\\}]"}});
@@ -0,0 +1,131 @@
+(function(window){ + var axios = window.axios; + var hostname = window.location.hostname; + var endpoint = '/search/'; + var searchInput = window.document.getElementsByClassName('search-input')[0]; + var searchButton = window.document.getElementsByClassName('search-button')[0]; + var clearButton = window.document.getElementsByClassName('clear-button')[0]; + var archivesButton = window.document.getElementsByClassName('archives-button')[0]; + var archivesDiv = window.document.getElementsByClassName('timeline')[0]; + var noResultsDiv = window.document.getElementsByClassName('no-search-results')[0]; + var resultsDiv = window.document.getElementsByClassName('search-results')[0]; + var loadingDiv = window.document.getElementsByClassName('loading')[0]; + + if (hostname === 'localhost') { + endpoint = 'http://localhost:9500/docs/'; + } + + function init() { + searchButton.addEventListener('click', reqSearch); + clearButton.addEventListener('click', reset); + searchInput.addEventListener('keypress', reqSearch); + archivesButton.addEventListener('click', archives); + search(); + } + + function result(data) { + var id = data.id.replace(/\/index\.html$/i, ''); + var card = window.document.createElement('div'); + card.classList.add('card'); + + var header = window.document.createElement('div'); + header.classList.add('card-header'); + + var title = window.document.createElement('div'); + title.classList.add('card-title'); + title.classList.add('h5'); + + var link = window.document.createElement('a'); + link.setAttribute('href', id); + link.innerHTML = '→ ' + id; + + var body = window.document.createElement('div'); + body.classList.add('card-body'); + body.innerHTML = data.highlight; + + // Structure + title.appendChild(link); + header.appendChild(title); + card.appendChild(header); + card.appendChild(body); + + return card + } + + function getParam(name) { + var url = window.location.href; + name = name.replace(/[\[\]]/g, "\\$&"); + var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), + results = regex.exec(url); + if (!results) return null; + if (!results[2]) return ''; + return results[2].replace(/\+/g, " "); + } + + function search() { + var q = getParam('q'); + if (!q) { + archives(); + return; + } + searchInput.value = decodeURIComponent(q); + var req = endpoint + '?search=' + q + '&contents=false'; + axios.get(req).then(function(resp){ + results(resp.data.results); + }).catch(function(resp){ + noResults(); + }) + } + + function noResults(){ + noResultsDiv.classList.remove('d-none'); + resultsDiv.innerHTML = ''; + clearButton.classList.remove('d-none'); + loadingDiv.classList.add('d-none'); + resultsDiv.classList.add('d-none'); + archivesDiv.classList.add('d-none'); + } + + function results(items){ + var info = window.document.createElement('p'); + info.textContent = items.length + ' results found.'; + resultsDiv.innerHTML = ''; + resultsDiv.appendChild(info); + items.forEach(function(item) { + resultsDiv.appendChild(result(item)); + }); + clearButton.classList.remove('d-none'); + loadingDiv.classList.add('d-none'); + noResultsDiv.classList.add('d-none'); + resultsDiv.classList.remove('d-none'); + archivesDiv.classList.add('d-none'); + } + + function archives(){ + noResultsDiv.classList.add('d-none'); + clearButton.classList.add('d-none'); + loadingDiv.classList.add('d-none'); + searchInput.value = ''; + resultsDiv.innerHTML = ''; + resultsDiv.classList.add('d-none'); + archivesDiv.classList.remove('d-none'); + } + + function reset() { + window.location.search = ''; + } + + function reqSearch(e){ + if (e && e.type === 'keypress' && e.keyCode != 13) { + return false; + } + var q = searchInput.value; + if (q) { + window.location.search = '?q=' + encodeURIComponent(q); + } else { + reset(); + } + } + + init(); +})(window)
@@ -0,0 +1,96 @@
+/* + +Atom One Light by Daniel Gamage +Original One Light Syntax theme from https://github.com/atom/one-light-syntax + +base: #fafafa +mono-1: #383a42 +mono-2: #686b77 +mono-3: #a0a1a7 +hue-1: #0184bb +hue-2: #4078f2 +hue-3: #a626a4 +hue-4: #50a14f +hue-5: #e45649 +hue-5-2: #c91243 +hue-6: #986801 +hue-6-2: #c18401 + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + color: #383a42; + background: #fafafa; +} + +.hljs-comment, +.hljs-quote { + color: #a0a1a7; + font-style: italic; +} + +.hljs-doctag, +.hljs-keyword, +.hljs-formula { + color: #a626a4; +} + +.hljs-section, +.hljs-name, +.hljs-selector-tag, +.hljs-deletion, +.hljs-subst { + color: #e45649; +} + +.hljs-literal { + color: #0184bb; +} + +.hljs-string, +.hljs-regexp, +.hljs-addition, +.hljs-attribute, +.hljs-meta-string { + color: #50a14f; +} + +.hljs-built_in, +.hljs-class .hljs-title { + color: #c18401; +} + +.hljs-attr, +.hljs-variable, +.hljs-template-variable, +.hljs-type, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-number { + color: #986801; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-link, +.hljs-meta, +.hljs-selector-id, +.hljs-title { + color: #4078f2; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-link { + text-decoration: underline; +}
@@ -0,0 +1,1181 @@
+@font-face { + font-family: 'entypo'; + src: url('../fonts/entypo.eot?wjma87'); + src: url('../fonts/entypo.eot?wjma87#iefix') format('embedded-opentype'), + url('../fonts/entypo.ttf?wjma87') format('truetype'), + url('../fonts/entypo.woff?wjma87') format('woff'), + url('../fonts/entypo.svg?wjma87#entypo') format('svg'); + font-weight: normal; + font-style: normal; +} + +.ent { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'entypo' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.ent-add-to-list:before { + content: "\e900"; +} +.ent-classic-computer:before { + content: "\e901"; +} +.ent-controller-fast-backward:before { + content: "\e902"; +} +.ent-creative-commons-attribution:before { + content: "\e903"; +} +.ent-creative-commons-noderivs:before { + content: "\e904"; +} +.ent-creative-commons-noncommercial-eu:before { + content: "\e905"; +} +.ent-creative-commons-noncommercial-us:before { + content: "\e906"; +} +.ent-creative-commons-public-domain:before { + content: "\e907"; +} +.ent-creative-commons-remix:before { + content: "\e908"; +} +.ent-creative-commons-share:before { + content: "\e909"; +} +.ent-creative-commons-sharealike:before { + content: "\e90a"; +} +.ent-creative-commons:before { + content: "\e90b"; +} +.ent-document-landscape:before { + content: "\e90c"; +} +.ent-remove-user:before { + content: "\e90d"; +} +.ent-warning:before { + content: "\e90e"; +} +.ent-arrow-bold-down:before { + content: "\e90f"; +} +.ent-arrow-bold-left:before { + content: "\e910"; +} +.ent-arrow-bold-right:before { + content: "\e911"; +} +.ent-arrow-bold-up:before { + content: "\e912"; +} +.ent-arrow-down:before { + content: "\e913"; +} +.ent-arrow-left:before { + content: "\e914"; +} +.ent-arrow-long-down:before { + content: "\e915"; +} +.ent-arrow-long-left:before { + content: "\e916"; +} +.ent-arrow-long-right:before { + content: "\e917"; +} +.ent-arrow-long-up:before { + content: "\e918"; +} +.ent-arrow-right:before { + content: "\e919"; +} +.ent-arrow-up:before { + content: "\e91a"; +} +.ent-arrow-with-circle-down:before { + content: "\e91b"; +} +.ent-arrow-with-circle-left:before { + content: "\e91c"; +} +.ent-arrow-with-circle-right:before { + content: "\e91d"; +} +.ent-arrow-with-circle-up:before { + content: "\e91e"; +} +.ent-bookmark:before { + content: "\e91f"; +} +.ent-bookmarks:before { + content: "\e920"; +} +.ent-chevron-down:before { + content: "\e921"; +} +.ent-chevron-left:before { + content: "\e922"; +} +.ent-chevron-right:before { + content: "\e923"; +} +.ent-chevron-small-down:before { + content: "\e924"; +} +.ent-chevron-small-left:before { + content: "\e925"; +} +.ent-chevron-small-right:before { + content: "\e926"; +} +.ent-chevron-small-up:before { + content: "\e927"; +} +.ent-chevron-thin-down:before { + content: "\e928"; +} +.ent-chevron-thin-left:before { + content: "\e929"; +} +.ent-chevron-thin-right:before { + content: "\e92a"; +} +.ent-chevron-thin-up:before { + content: "\e92b"; +} +.ent-chevron-up:before { + content: "\e92c"; +} +.ent-chevron-with-circle-down:before { + content: "\e92d"; +} +.ent-chevron-with-circle-left:before { + content: "\e92e"; +} +.ent-chevron-with-circle-right:before { + content: "\e92f"; +} +.ent-chevron-with-circle-up:before { + content: "\e930"; +} +.ent-cloud:before { + content: "\e931"; +} +.ent-controller-fast-forward:before { + content: "\e932"; +} +.ent-controller-jump-to-start:before { + content: "\e933"; +} +.ent-controller-next:before { + content: "\e934"; +} +.ent-controller-paus:before { + content: "\e935"; +} +.ent-controller-play:before { + content: "\e936"; +} +.ent-controller-record:before { + content: "\e937"; +} +.ent-controller-stop:before { + content: "\e938"; +} +.ent-controller-volume:before { + content: "\e939"; +} +.ent-dot-single:before { + content: "\e93a"; +} +.ent-dots-three-horizontal:before { + content: "\e93b"; +} +.ent-dots-three-vertical:before { + content: "\e93c"; +} +.ent-dots-two-horizontal:before { + content: "\e93d"; +} +.ent-dots-two-vertical:before { + content: "\e93e"; +} +.ent-download:before { + content: "\e93f"; +} +.ent-emoji-flirt:before { + content: "\e940"; +} +.ent-flow-branch:before { + content: "\e941"; +} +.ent-flow-cascade:before { + content: "\e942"; +} +.ent-flow-line:before { + content: "\e943"; +} +.ent-flow-parallel:before { + content: "\e944"; +} +.ent-flow-tree:before { + content: "\e945"; +} +.ent-install:before { + content: "\e946"; +} +.ent-layers:before { + content: "\e947"; +} +.ent-open-book:before { + content: "\e948"; +} +.ent-resize-100:before { + content: "\e949"; +} +.ent-resize-full-screen:before { + content: "\e94a"; +} +.ent-save:before { + content: "\e94b"; +} +.ent-select-arrows:before { + content: "\e94c"; +} +.ent-sound-mute:before { + content: "\e94d"; +} +.ent-sound:before { + content: "\e94e"; +} +.ent-trash:before { + content: "\e94f"; +} +.ent-triangle-down:before { + content: "\e950"; +} +.ent-triangle-left:before { + content: "\e951"; +} +.ent-triangle-right:before { + content: "\e952"; +} +.ent-triangle-up:before { + content: "\e953"; +} +.ent-uninstall:before { + content: "\e954"; +} +.ent-upload-to-cloud:before { + content: "\e955"; +} +.ent-upload:before { + content: "\e956"; +} +.ent-add-user:before { + content: "\e957"; +} +.ent-address:before { + content: "\e958"; +} +.ent-adjust:before { + content: "\e959"; +} +.ent-air:before { + content: "\e95a"; +} +.ent-aircraft-landing:before { + content: "\e95b"; +} +.ent-aircraft-take-off:before { + content: "\e95c"; +} +.ent-aircraft:before { + content: "\e95d"; +} +.ent-align-bottom:before { + content: "\e95e"; +} +.ent-align-horizontal-middle:before { + content: "\e95f"; +} +.ent-align-left:before { + content: "\e960"; +} +.ent-align-right:before { + content: "\e961"; +} +.ent-align-top:before { + content: "\e962"; +} +.ent-align-vertical-middle:before { + content: "\e963"; +} +.ent-archive:before { + content: "\e964"; +} +.ent-area-graph:before { + content: "\e965"; +} +.ent-attachment:before { + content: "\e966"; +} +.ent-awareness-ribbon:before { + content: "\e967"; +} +.ent-back-in-time:before { + content: "\e968"; +} +.ent-back:before { + content: "\e969"; +} +.ent-bar-graph:before { + content: "\e96a"; +} +.ent-battery:before { + content: "\e96b"; +} +.ent-beamed-note:before { + content: "\e96c"; +} +.ent-bell:before { + content: "\e96d"; +} +.ent-blackboard:before { + content: "\e96e"; +} +.ent-block:before { + content: "\e96f"; +} +.ent-book:before { + content: "\e970"; +} +.ent-bowl:before { + content: "\e971"; +} +.ent-box:before { + content: "\e972"; +} +.ent-briefcase:before { + content: "\e973"; +} +.ent-browser:before { + content: "\e974"; +} +.ent-brush:before { + content: "\e975"; +} +.ent-bucket:before { + content: "\e976"; +} +.ent-cake:before { + content: "\e977"; +} +.ent-calculator:before { + content: "\e978"; +} +.ent-calendar:before { + content: "\e979"; +} +.ent-camera:before { + content: "\e97a"; +} +.ent-ccw:before { + content: "\e97b"; +} +.ent-chat:before { + content: "\e97c"; +} +.ent-check:before { + content: "\e97d"; +} +.ent-circle-with-cross:before { + content: "\e97e"; +} +.ent-circle-with-minus:before { + content: "\e97f"; +} +.ent-circle-with-plus:before { + content: "\e980"; +} +.ent-circle:before { + content: "\e981"; +} +.ent-circular-graph:before { + content: "\e982"; +} +.ent-clapperboard:before { + content: "\e983"; +} +.ent-clipboard:before { + content: "\e984"; +} +.ent-clock:before { + content: "\e985"; +} +.ent-code:before { + content: "\e986"; +} +.ent-cog:before { + content: "\e987"; +} +.ent-colours:before { + content: "\e988"; +} +.ent-compass:before { + content: "\e989"; +} +.ent-copy:before { + content: "\e98a"; +} +.ent-credit-card:before { + content: "\e98b"; +} +.ent-credit:before { + content: "\e98c"; +} +.ent-cross:before { + content: "\e98d"; +} +.ent-cup:before { + content: "\e98e"; +} +.ent-cw:before { + content: "\e98f"; +} +.ent-cycle:before { + content: "\e990"; +} +.ent-database:before { + content: "\e991"; +} +.ent-dial-pad:before { + content: "\e992"; +} +.ent-direction:before { + content: "\e993"; +} +.ent-document:before { + content: "\e994"; +} +.ent-documents:before { + content: "\e995"; +} +.ent-drink:before { + content: "\e996"; +} +.ent-drive:before { + content: "\e997"; +} +.ent-drop:before { + content: "\e998"; +} +.ent-edit:before { + content: "\e999"; +} +.ent-email:before { + content: "\e99a"; +} +.ent-emoji-happy:before { + content: "\e99b"; +} +.ent-emoji-neutral:before { + content: "\e99c"; +} +.ent-emoji-sad:before { + content: "\e99d"; +} +.ent-erase:before { + content: "\e99e"; +} +.ent-eraser:before { + content: "\e99f"; +} +.ent-export:before { + content: "\e9a0"; +} +.ent-eye:before { + content: "\e9a1"; +} +.ent-feather:before { + content: "\e9a2"; +} +.ent-flag:before { + content: "\e9a3"; +} +.ent-flash:before { + content: "\e9a4"; +} +.ent-flashlight:before { + content: "\e9a5"; +} +.ent-flat-brush:before { + content: "\e9a6"; +} +.ent-folder-images:before { + content: "\e9a7"; +} +.ent-folder-music:before { + content: "\e9a8"; +} +.ent-folder-video:before { + content: "\e9a9"; +} +.ent-folder:before { + content: "\e9aa"; +} +.ent-forward:before { + content: "\e9ab"; +} +.ent-funnel:before { + content: "\e9ac"; +} +.ent-game-controller:before { + content: "\e9ad"; +} +.ent-gauge:before { + content: "\e9ae"; +} +.ent-globe:before { + content: "\e9af"; +} +.ent-graduation-cap:before { + content: "\e9b0"; +} +.ent-grid:before { + content: "\e9b1"; +} +.ent-hair-cross:before { + content: "\e9b2"; +} +.ent-hand:before { + content: "\e9b3"; +} +.ent-heart-outlined:before { + content: "\e9b4"; +} +.ent-heart:before { + content: "\e9b5"; +} +.ent-help-with-circle:before { + content: "\e9b6"; +} +.ent-help:before { + content: "\e9b7"; +} +.ent-home:before { + content: "\e9b8"; +} +.ent-hour-glass:before { + content: "\e9b9"; +} +.ent-image-inverted:before { + content: "\e9ba"; +} +.ent-image:before { + content: "\e9bb"; +} +.ent-images:before { + content: "\e9bc"; +} +.ent-inbox:before { + content: "\e9bd"; +} +.ent-infinity:before { + content: "\e9be"; +} +.ent-info-with-circle:before { + content: "\e9bf"; +} +.ent-info:before { + content: "\e9c0"; +} +.ent-key:before { + content: "\e9c1"; +} +.ent-keyboard:before { + content: "\e9c2"; +} +.ent-lab-flask:before { + content: "\e9c3"; +} +.ent-landline:before { + content: "\e9c4"; +} +.ent-language:before { + content: "\e9c5"; +} +.ent-laptop:before { + content: "\e9c6"; +} +.ent-leaf:before { + content: "\e9c7"; +} +.ent-level-down:before { + content: "\e9c8"; +} +.ent-level-up:before { + content: "\e9c9"; +} +.ent-lifebuoy:before { + content: "\e9ca"; +} +.ent-light-bulb:before { + content: "\e9cb"; +} +.ent-light-down:before { + content: "\e9cc"; +} +.ent-light-up:before { + content: "\e9cd"; +} +.ent-line-graph:before { + content: "\e9ce"; +} +.ent-link:before { + content: "\e9cf"; +} +.ent-list:before { + content: "\e9d0"; +} +.ent-location-pin:before { + content: "\e9d1"; +} +.ent-location:before { + content: "\e9d2"; +} +.ent-lock-open:before { + content: "\e9d3"; +} +.ent-lock:before { + content: "\e9d4"; +} +.ent-log-out:before { + content: "\e9d5"; +} +.ent-login:before { + content: "\e9d6"; +} +.ent-loop:before { + content: "\e9d7"; +} +.ent-magnet:before { + content: "\e9d8"; +} +.ent-magnifying-glass:before { + content: "\e9d9"; +} +.ent-mail:before { + content: "\e9da"; +} +.ent-man:before { + content: "\e9db"; +} +.ent-map:before { + content: "\e9dc"; +} +.ent-mask:before { + content: "\e9dd"; +} +.ent-medal:before { + content: "\e9de"; +} +.ent-megaphone:before { + content: "\e9df"; +} +.ent-menu:before { + content: "\e9e0"; +} +.ent-message:before { + content: "\e9e1"; +} +.ent-mic:before { + content: "\e9e2"; +} +.ent-minus:before { + content: "\e9e3"; +} +.ent-mobile:before { + content: "\e9e4"; +} +.ent-modern-mic:before { + content: "\e9e5"; +} +.ent-moon:before { + content: "\e9e6"; +} +.ent-mouse:before { + content: "\e9e7"; +} +.ent-music:before { + content: "\e9e8"; +} +.ent-network:before { + content: "\e9e9"; +} +.ent-new-message:before { + content: "\e9ea"; +} +.ent-new:before { + content: "\e9eb"; +} +.ent-news:before { + content: "\e9ec"; +} +.ent-note:before { + content: "\e9ed"; +} +.ent-notification:before { + content: "\e9ee"; +} +.ent-old-mobile:before { + content: "\e9ef"; +} +.ent-old-phone:before { + content: "\e9f0"; +} +.ent-palette:before { + content: "\e9f1"; +} +.ent-paper-plane:before { + content: "\e9f2"; +} +.ent-pencil:before { + content: "\e9f3"; +} +.ent-phone:before { + content: "\e9f4"; +} +.ent-pie-chart:before { + content: "\e9f5"; +} +.ent-pin:before { + content: "\e9f6"; +} +.ent-plus:before { + content: "\e9f7"; +} +.ent-popup:before { + content: "\e9f8"; +} +.ent-power-plug:before { + content: "\e9f9"; +} +.ent-price-ribbon:before { + content: "\e9fa"; +} +.ent-price-tag:before { + content: "\e9fb"; +} +.ent-print:before { + content: "\e9fc"; +} +.ent-progress-empty:before { + content: "\e9fd"; +} +.ent-progress-full:before { + content: "\e9fe"; +} +.ent-progress-one:before { + content: "\e9ff"; +} +.ent-progress-two:before { + content: "\ea00"; +} +.ent-publish:before { + content: "\ea01"; +} +.ent-quote:before { + content: "\ea02"; +} +.ent-radio:before { + content: "\ea03"; +} +.ent-reply-all:before { + content: "\ea04"; +} +.ent-reply:before { + content: "\ea05"; +} +.ent-retweet:before { + content: "\ea06"; +} +.ent-rocket:before { + content: "\ea07"; +} +.ent-round-brush:before { + content: "\ea08"; +} +.ent-rss:before { + content: "\ea09"; +} +.ent-ruler:before { + content: "\ea0a"; +} +.ent-scissors:before { + content: "\ea0b"; +} +.ent-share-alternitive:before { + content: "\ea0c"; +} +.ent-share:before { + content: "\ea0d"; +} +.ent-shareable:before { + content: "\ea0e"; +} +.ent-shield:before { + content: "\ea0f"; +} +.ent-shop:before { + content: "\ea10"; +} +.ent-shopping-bag:before { + content: "\ea11"; +} +.ent-shopping-basket:before { + content: "\ea12"; +} +.ent-shopping-cart:before { + content: "\ea13"; +} +.ent-shuffle:before { + content: "\ea14"; +} +.ent-signal:before { + content: "\ea15"; +} +.ent-sound-mix:before { + content: "\ea16"; +} +.ent-sports-club:before { + content: "\ea17"; +} +.ent-spreadsheet:before { + content: "\ea18"; +} +.ent-squared-cross:before { + content: "\ea19"; +} +.ent-squared-minus:before { + content: "\ea1a"; +} +.ent-squared-plus:before { + content: "\ea1b"; +} +.ent-star-outlined:before { + content: "\ea1c"; +} +.ent-star:before { + content: "\ea1d"; +} +.ent-stopwatch:before { + content: "\ea1e"; +} +.ent-suitcase:before { + content: "\ea1f"; +} +.ent-swap:before { + content: "\ea20"; +} +.ent-sweden:before { + content: "\ea21"; +} +.ent-switch:before { + content: "\ea22"; +} +.ent-tablet:before { + content: "\ea23"; +} +.ent-tag:before { + content: "\ea24"; +} +.ent-text-document-inverted:before { + content: "\ea25"; +} +.ent-text-document:before { + content: "\ea26"; +} +.ent-text:before { + content: "\ea27"; +} +.ent-thermometer:before { + content: "\ea28"; +} +.ent-thumbs-down:before { + content: "\ea29"; +} +.ent-thumbs-up:before { + content: "\ea2a"; +} +.ent-thunder-cloud:before { + content: "\ea2b"; +} +.ent-ticket:before { + content: "\ea2c"; +} +.ent-time-slot:before { + content: "\ea2d"; +} +.ent-tools:before { + content: "\ea2e"; +} +.ent-traffic-cone:before { + content: "\ea2f"; +} +.ent-tree:before { + content: "\ea30"; +} +.ent-trophy:before { + content: "\ea31"; +} +.ent-tv:before { + content: "\ea32"; +} +.ent-typing:before { + content: "\ea33"; +} +.ent-unread:before { + content: "\ea34"; +} +.ent-untag:before { + content: "\ea35"; +} +.ent-user:before { + content: "\ea36"; +} +.ent-users:before { + content: "\ea37"; +} +.ent-v-card:before { + content: "\ea38"; +} +.ent-video:before { + content: "\ea39"; +} +.ent-vinyl:before { + content: "\ea3a"; +} +.ent-voicemail:before { + content: "\ea3b"; +} +.ent-wallet:before { + content: "\ea3c"; +} +.ent-water:before { + content: "\ea3d"; +} +.ent-500px-with-circle:before { + content: "\ea3e"; +} +.ent-500px:before { + content: "\ea3f"; +} +.ent-basecamp:before { + content: "\ea40"; +} +.ent-behance:before { + content: "\ea41"; +} +.ent-creative-cloud:before { + content: "\ea42"; +} +.ent-dropbox:before { + content: "\ea43"; +} +.ent-evernote:before { + content: "\ea44"; +} +.ent-flattr:before { + content: "\ea45"; +} +.ent-foursquare:before { + content: "\ea46"; +} +.ent-google-drive:before { + content: "\ea47"; +} +.ent-google-hangouts:before { + content: "\ea48"; +} +.ent-grooveshark:before { + content: "\ea49"; +} +.ent-icloud:before { + content: "\ea4a"; +} +.ent-mixi:before { + content: "\ea4b"; +} +.ent-onedrive:before { + content: "\ea4c"; +} +.ent-paypal:before { + content: "\ea4d"; +} +.ent-picasa:before { + content: "\ea4e"; +} +.ent-qq:before { + content: "\ea4f"; +} +.ent-rdio-with-circle:before { + content: "\ea50"; +} +.ent-renren:before { + content: "\ea51"; +} +.ent-scribd:before { + content: "\ea52"; +} +.ent-sina-weibo:before { + content: "\ea53"; +} +.ent-skype-with-circle:before { + content: "\ea54"; +} +.ent-skype:before { + content: "\ea55"; +} +.ent-slideshare:before { + content: "\ea56"; +} +.ent-smashing:before { + content: "\ea57"; +} +.ent-soundcloud:before { + content: "\ea58"; +} +.ent-spotify-with-circle:before { + content: "\ea59"; +} +.ent-spotify:before { + content: "\ea5a"; +} +.ent-swarm:before { + content: "\ea5b"; +} +.ent-vine-with-circle:before { + content: "\ea5c"; +} +.ent-vine:before { + content: "\ea5d"; +} +.ent-vk-alternitive:before { + content: "\ea5e"; +} +.ent-vk-with-circle:before { + content: "\ea5f"; +} +.ent-vk:before { + content: "\ea60"; +} +.ent-xing-with-circle:before { + content: "\ea61"; +} +.ent-xing:before { + content: "\ea62"; +} +.ent-yelp:before { + content: "\ea63"; +} +.ent-dribbble-with-circle:before { + content: "\ea64"; +} +.ent-dribbble:before { + content: "\ea65"; +} +.ent-facebook-with-circle:before { + content: "\ea66"; +} +.ent-facebook:before { + content: "\ea67"; +} +.ent-flickr-with-circle:before { + content: "\ea68"; +} +.ent-flickr:before { + content: "\ea69"; +} +.ent-github-with-circle:before { + content: "\ea6a"; +} +.ent-github:before { + content: "\ea6b"; +} +.ent-google-with-circle:before { + content: "\ea6c"; +} +.ent-google:before { + content: "\ea6d"; +} +.ent-instagram-with-circle:before { + content: "\ea6e"; +} +.ent-instagram:before { + content: "\ea6f"; +} +.ent-lastfm-with-circle:before { + content: "\ea70"; +} +.ent-lastfm:before { + content: "\ea71"; +} +.ent-linkedin-with-circle:before { + content: "\ea72"; +} +.ent-linkedin:before { + content: "\ea73"; +} +.ent-pinterest-with-circle:before { + content: "\ea74"; +} +.ent-pinterest:before { + content: "\ea75"; +} +.ent-rdio:before { + content: "\ea76"; +} +.ent-stumbleupon-with-circle:before { + content: "\ea77"; +} +.ent-stumbleupon:before { + content: "\ea78"; +} +.ent-tumblr-with-circle:before { + content: "\ea79"; +} +.ent-tumblr:before { + content: "\ea7a"; +} +.ent-twitter-with-circle:before { + content: "\ea7b"; +} +.ent-twitter:before { + content: "\ea7c"; +} +.ent-vimeo-with-circle:before { + content: "\ea7d"; +} +.ent-vimeo:before { + content: "\ea7e"; +} +.ent-youtube-with-circle:before { + content: "\ea7f"; +} +.ent-youtube:before { + content: "\ea80"; +}
@@ -0,0 +1,122 @@
+@font-face { + font-family: 'Raleway'; + src: url('../fonts/raleway-light.woff2') format('woff2'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'Raleway'; + src: url('../fonts/raleway-lightitalic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; +} + +@font-face { + font-family: 'Raleway'; + src: url('../fonts/raleway-semibold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; +} + +@font-face { + font-family: 'Raleway'; + src: url('../fonts/raleway-semibolditalic.woff2') format('woff2'); + font-weight: bold; + font-style: italic; +} + + +@font-face { + font-family: 'Hack'; + src: url('../fonts/hack-regular-webfont.eot?v=2.020'); + src: url('../fonts/hack-regular-webfont.eot?#iefix&v=2.020') format('embedded-opentype'), url('../fonts/hack-regular-webfont.woff2?v=2.020') format('woff2'), url('../fonts/hack-regular-webfont.woff?v=2.020') format('woff'), url('../fonts/hack-regular-webfont.ttf?v=2.020') format('truetype'); + font-weight: 400; + font-style: normal; + } + + @font-face { + font-family: 'Hack'; + src: url('../fonts/hack-bold-webfont.eot?v=2.020'); + src: url('../fonts/hack-bold-webfont.eot?#iefix&v=2.020') format('embedded-opentype'), url('../fonts/hack-bold-webfont.woff2?v=2.020') format('woff2'), url('../fonts/hack-bold-webfont.woff?v=2.020') format('woff'), url('../fonts/hack-bold-webfont.ttf?v=2.020') format('truetype'); + font-weight: 700; + font-style: normal; + } + + @font-face { + font-family: 'Hack'; + src: url('../fonts/hack-italic-webfont.eot?v=2.020'); + src: url('../fonts/hack-italic-webfont.eot?#iefix&v=2.020') format('embedded-opentype'), url('../fonts/hack-italic-webfont.woff2?v=2.020') format('woff2'), url('../fonts/hack-italic-webfont.woff?v=2.020') format('woff'), url('../fonts/hack-italic-webfont.ttf?v=2.020') format('truetype'); + font-weight: 400; + font-style: italic; + } + + @font-face { + font-family: 'Hack'; + src: url('../fonts/hack-bolditalic-webfont.eot?v=2.020'); + src: url('../fonts/hack-bolditalic-webfont.eot?#iefix&v=2.020') format('embedded-opentype'), url('../fonts/hack-bolditalic-webfont.woff2?v=2.020') format('woff2'), url('../fonts/hack-bolditalic-webfont.woff?v=2.020') format('woff'), url('../fonts/hack-bolditalic-webfont.ttf?v=2.020') format('truetype'); + font-weight: 700; + font-style: italic; + } + @font-face { + font-family: 'H3RALD'; + src: url('../fonts/h3rald-eot.eot'); + src: url('../fonts/h3rald-eot.eot?#iefix') format('embedded-opentype'), url('../fonts/h3rald-ttf.ttf') format('truetype'), url('../fonts/h3rald-woff.woff') format('woff'), url('../fonts/h3rald-svg.svg#h3rald') format('svg'); + font-weight: normal; + font-style: normal; + } + .h3rald { + font-family: "H3RALD"; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + content: "\e7c4"; + display: inline; + } + .h3rald:before { + content: "\e7c4"; + } + .h3rald-header, + .navbar a.h3rald.h3rald-header { + margin-left: 1rem; + color: #000000; + font-size: 35px; + } + .h3rald-header:hover, + .navbar a.h3rald.h3rald-header:hover { + text-decoration: none; + } + .h3rald-footer { + position: relative; + top: 3px; + font-size: 13px; + } + + @font-face { + font-family: 'HastyScribe'; + src: url('../fonts/hastyscribe-eot.eot'); + src: url('../fonts/hastyscribe-eot.eot?#iefix') format('embedded-opentype'), url('../fonts/hastyscribe-ttf.ttf') format('truetype'), url('../fonts/hastyscribe-woff.woff') format('woff'), url('../fonts/hastyscribe-svg.svg#hastyscribe') format('svg'); + font-weight: normal; + font-style: normal; + } + .hastyscribe:before { + font-family: "HastyScribe"; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + font-size: 150%; + vertical-align: bottom; + line-height: 0.7; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + display: inline; + content: "H"; + } +
@@ -0,0 +1,1 @@
+/*! Spectre.css Experimentals | MIT License | github.com/picturepan2/spectre */.calendar{border:.05rem solid #d9dce3;border-radius:.1rem;display:block;min-width:280px;text-align:center}.calendar .calendar-nav{align-items:center;background:#ebecf0;border-top-left-radius:.1rem;border-top-right-radius:.1rem;display:flex;display:-ms-flexbox;-ms-flex-align:center;font-size:1.2rem;padding:.4rem}.calendar .calendar-body,.calendar .calendar-header{display:flex;display:-ms-flexbox;-ms-flex-pack:center;-ms-flex-wrap:wrap;flex-wrap:wrap;justify-content:center;padding:.4rem 0}.calendar .calendar-body .calendar-date,.calendar .calendar-header .calendar-date{-ms-flex:0 0 14.28%;flex:0 0 14.28%;max-width:14.28%}.calendar .calendar-header{background:#ebecf0;border-bottom:.05rem solid #d9dce3;color:#51596c;font-size:.8rem}.calendar .calendar-body{color:#0f1115}.calendar .calendar-date{border:0;padding:.2rem}.calendar .calendar-date .date-item{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:0 0;border:.05rem solid transparent;border-radius:50%;color:#0f1115;cursor:pointer;height:1.4rem;line-height:1rem;outline:0;padding:.1rem;position:relative;text-align:center;text-decoration:none;transition:all .2s ease;vertical-align:middle;white-space:nowrap;width:1.4rem}.calendar .calendar-date .date-item.date-today{border-color:#ff8560;color:#a22600}.calendar .calendar-date .date-item:focus{box-shadow:0 0 0 .1rem rgba(162,38,0,.2)}.calendar .calendar-date .date-item:focus,.calendar .calendar-date .date-item:hover{background:#ff9c7e;border-color:#ff8560;color:#a22600;text-decoration:none}.calendar .calendar-date .date-item.active,.calendar .calendar-date .date-item:active{background:#932200;border-color:#791c00;color:#fff}.calendar .calendar-date .date-item.badge::after{position:absolute;right:3px;top:3px;transform:translate(50%,-50%)}.calendar .calendar-date .calendar-event:disabled,.calendar .calendar-date .date-item:disabled,.calendar .calendar-date.disabled .calendar-event,.calendar .calendar-date.disabled .date-item{cursor:default;opacity:.25;pointer-events:none}.calendar .calendar-range{position:relative}.calendar .calendar-range::before{background:#ff916f;content:"";height:1.4rem;left:0;position:absolute;right:0;top:50%;transform:translateY(-50%)}.calendar .calendar-range.range-start::before{left:50%}.calendar .calendar-range.range-end::before{right:50%}.calendar .calendar-range .date-item{color:#a22600}.calendar.calendar-lg .calendar-body{padding:0}.calendar.calendar-lg .calendar-body .calendar-date{border-bottom:.05rem solid #d9dce3;border-right:.05rem solid #d9dce3;display:flex;display:-ms-flexbox;-ms-flex-direction:column;flex-direction:column;height:5.5rem;padding:0}.calendar.calendar-lg .calendar-body .calendar-date:nth-child(7n){border-right:0}.calendar.calendar-lg .calendar-body .calendar-date:nth-last-child(-n+7){border-bottom:0}.calendar.calendar-lg .date-item{align-self:flex-end;-ms-flex-item-align:end;height:1.4rem;margin-right:.2rem;margin-top:.2rem}.calendar.calendar-lg .calendar-range::before{top:19px}.calendar.calendar-lg .calendar-range.range-start::before{left:auto;width:19px}.calendar.calendar-lg .calendar-range.range-end::before{right:19px}.calendar.calendar-lg .calendar-events{flex-grow:1;-ms-flex-positive:1;line-height:1;overflow-y:auto;padding:.2rem}.calendar.calendar-lg .calendar-event{background:#ff916f;border-radius:.1rem;color:#a22600;display:block;font-size:.8rem;margin:.1rem auto;overflow:hidden;padding:3px 4px;text-align:left;text-overflow:ellipsis;white-space:nowrap}.carousel{background:#ebecf0;display:block;overflow:hidden;position:relative;width:100%}.carousel .carousel-container{height:100%;left:0;position:relative}.carousel .carousel-container::before{content:"";display:block;padding-bottom:56.25%}.carousel .carousel-container .carousel-item{animation:carousel-slideout 1s ease-in-out 1;height:100%;left:0;margin:0;opacity:0;position:absolute;top:0;width:100%}.carousel .carousel-container .carousel-item:hover .item-next,.carousel .carousel-container .carousel-item:hover .item-prev{opacity:1}.carousel .carousel-container .item-next,.carousel .carousel-container .item-prev{background:rgba(130,139,161,.25);border-color:rgba(130,139,161,.5);color:#828ba1;opacity:0;position:absolute;top:50%;transform:translateY(-50%);transition:all .4s ease;z-index:200}.carousel .carousel-container .item-prev{left:1rem}.carousel .carousel-container .item-next{right:1rem}.carousel .carousel-locator:nth-of-type(1):checked~.carousel-container .carousel-item:nth-of-type(1),.carousel .carousel-locator:nth-of-type(2):checked~.carousel-container .carousel-item:nth-of-type(2),.carousel .carousel-locator:nth-of-type(3):checked~.carousel-container .carousel-item:nth-of-type(3),.carousel .carousel-locator:nth-of-type(4):checked~.carousel-container .carousel-item:nth-of-type(4){animation:carousel-slidein .75s ease-in-out 1;opacity:1;z-index:100}.carousel .carousel-locator:nth-of-type(1):checked~.carousel-nav .nav-item:nth-of-type(1),.carousel .carousel-locator:nth-of-type(2):checked~.carousel-nav .nav-item:nth-of-type(2),.carousel .carousel-locator:nth-of-type(3):checked~.carousel-nav .nav-item:nth-of-type(3),.carousel .carousel-locator:nth-of-type(4):checked~.carousel-nav .nav-item:nth-of-type(4){color:#828ba1}.carousel .carousel-nav{bottom:.4rem;display:flex;display:-ms-flexbox;-ms-flex-pack:center;justify-content:center;left:50%;position:absolute;transform:translateX(-50%);width:10rem;z-index:200}.carousel .carousel-nav .nav-item{color:rgba(130,139,161,.5);display:block;-ms-flex:1 0 auto;flex:1 0 auto;height:1.6rem;margin:.2rem;max-width:2.5rem;position:relative}.carousel .carousel-nav .nav-item::before{background:currentColor;content:"";display:block;height:.1rem;position:absolute;top:.5rem;width:100%}@keyframes carousel-slidein{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@keyframes carousel-slideout{0%{opacity:1;transform:translateX(0)}100%{opacity:1;transform:translateX(-50%)}}.comparison-slider{height:50vh;overflow:hidden;position:relative;width:100%}.comparison-slider .comparison-after,.comparison-slider .comparison-before{height:100%;left:0;margin:0;overflow:hidden;position:absolute;top:0}.comparison-slider .comparison-after img,.comparison-slider .comparison-before img{height:100%;object-fit:none;object-position:left center;position:absolute;width:100%}.comparison-slider .comparison-before{width:100%;z-index:1}.comparison-slider .comparison-before .comparison-label{right:.8rem}.comparison-slider .comparison-after{max-width:100%;min-width:0;z-index:2}.comparison-slider .comparison-after::before{background:0 0;content:"";cursor:default;height:100%;left:0;position:absolute;right:.8rem;top:0;z-index:1}.comparison-slider .comparison-after::after{background:currentColor;border-radius:50%;box-shadow:0 -5px,0 5px;color:#fff;content:"";height:3px;position:absolute;right:.4rem;top:50%;transform:translate(50%,-50%);width:3px}.comparison-slider .comparison-after .comparison-label{left:.8rem}.comparison-slider .comparison-resizer{animation:first-run 1.5s 1 ease-in-out;cursor:ew-resize;height:.8rem;left:0;max-width:100%;min-width:.8rem;opacity:0;outline:0;position:relative;resize:horizontal;top:50%;transform:translateY(-50%) scaleY(30);width:0}.comparison-slider .comparison-label{background:rgba(59,65,79,.5);bottom:.8rem;color:#fff;padding:.2rem .4rem;position:absolute;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@keyframes first-run{0%{width:0}25%{width:2.4rem}50%{width:.8rem}75%{width:1.2rem}100%{width:0}}.filter .filter-nav{margin:.4rem 0}.filter .filter-body{display:flex;display:-ms-flexbox;-ms-flex-wrap:wrap;flex-wrap:wrap}.filter .filter-tag#tag-action:checked~.filter-nav .chip[for=tag-action],.filter .filter-tag#tag-all:checked~.filter-nav .chip[for=tag-all],.filter .filter-tag#tag-roleplaying:checked~.filter-nav .chip[for=tag-roleplaying],.filter .filter-tag#tag-shooter:checked~.filter-nav .chip[for=tag-shooter],.filter .filter-tag#tag-sports:checked~.filter-nav .chip[for=tag-sports]{background:#a22600;color:#fff}.filter .filter-tag#tag-action:checked~.filter-body .column:not([data-tag~=tag-action]),.filter .filter-tag#tag-roleplaying:checked~.filter-body .column:not([data-tag~=tag-roleplaying]),.filter .filter-tag#tag-shooter:checked~.filter-body .column:not([data-tag~=tag-shooter]),.filter .filter-tag#tag-sports:checked~.filter-body .column:not([data-tag~=tag-sports]){display:none}.meter{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#ebecf0;border:0;border-radius:.1rem;display:block;height:.8rem;width:100%}.meter::-webkit-meter-inner-element{display:block}.meter::-webkit-meter-bar,.meter::-webkit-meter-even-less-good-value,.meter::-webkit-meter-optimum-value,.meter::-webkit-meter-suboptimum-value{border-radius:.1rem}.meter::-webkit-meter-bar{background:#ebecf0}.meter::-webkit-meter-optimum-value{background:#32b643}.meter::-webkit-meter-suboptimum-value{background:#ffb700}.meter::-webkit-meter-even-less-good-value{background:#e85600}.meter:-moz-meter-optimum,.meter:-moz-meter-sub-optimum,.meter:-moz-meter-sub-sub-optimum,.meter::-moz-meter-bar{border-radius:.1rem}.meter:-moz-meter-optimum::-moz-meter-bar{background:#32b643}.meter:-moz-meter-sub-optimum::-moz-meter-bar{background:#ffb700}.meter:-moz-meter-sub-sub-optimum::-moz-meter-bar{background:#e85600}.off-canvas{display:flex;display:-ms-flexbox;height:100%;left:0;overflow:hidden;position:fixed;top:0;width:100%}.off-canvas .off-canvas-sidebar{background:#ebecf0;height:100%;left:0;padding:.8rem;position:absolute;top:0;transform:translateX(-100%);transition:transform .25s ease;width:10rem;z-index:300}.off-canvas .off-canvas-content{-ms-flex:1 1 auto;flex:1 1 auto;overflow-y:auto;padding:.8rem .8rem .8rem 4rem}.off-canvas .off-canvas-checkbox:checked~.off-canvas-sidebar{transform:translateX(0)}.off-canvas .off-canvas-checkbox:checked~.off-canvas-toggle{background:rgba(59,65,79,.1);border-color:transparent;border-radius:0;bottom:0;height:100%;left:0;right:0;top:0;width:100%}.off-canvas .off-canvas-checkbox:checked~.off-canvas-toggle .icon{display:none}.off-canvas .off-canvas-toggle{display:block;left:.8rem;padding-left:0;padding-right:0;position:absolute;top:.8rem;transition:none;width:2rem;z-index:200}@media (min-width:960px){.off-canvas .off-canvas-sidebar{-ms-flex:0 0 auto;flex:0 0 auto;position:static;transform:translateX(0)}.off-canvas .off-canvas-content{padding-left:.8rem}.off-canvas .off-canvas-toggle{display:none}}.parallax{display:block;height:auto;position:relative;width:auto}.parallax .parallax-content{box-shadow:0 1rem 2.1rem rgba(59,65,79,.3);height:auto;transform:perspective(1000px);transform-style:preserve-3d;transition:all .4s ease;width:100%}.parallax .parallax-content::before{content:"";display:block;height:100%;left:0;position:absolute;top:0;width:100%}.parallax .parallax-front{align-items:center;color:#fff;display:flex;display:-ms-flexbox;-ms-flex-align:center;-ms-flex-pack:center;height:100%;justify-content:center;left:0;position:absolute;text-align:center;text-shadow:0 0 20px rgba(59,65,79,.75);top:0;transform:translateZ(50px) scale(.95);transition:all .4s ease;width:100%;z-index:1}.parallax .parallax-top-left{height:50%;left:0;position:absolute;top:0;width:50%;z-index:100}.parallax .parallax-top-left:hover~.parallax-content{transform:perspective(1000px) rotateX(3deg) rotateY(-3deg)}.parallax .parallax-top-left:hover~.parallax-content::before{background:linear-gradient(135deg,rgba(255,255,255,.35) 0,transparent 50%)}.parallax .parallax-top-left:hover~.parallax-content .parallax-front{transform:translate3d(4.5px,4.5px,50px) scale(.95)}.parallax .parallax-top-right{height:50%;position:absolute;right:0;top:0;width:50%;z-index:100}.parallax .parallax-top-right:hover~.parallax-content{transform:perspective(1000px) rotateX(3deg) rotateY(3deg)}.parallax .parallax-top-right:hover~.parallax-content::before{background:linear-gradient(-135deg,rgba(255,255,255,.35) 0,transparent 50%)}.parallax .parallax-top-right:hover~.parallax-content .parallax-front{transform:translate3d(-4.5px,4.5px,50px) scale(.95)}.parallax .parallax-bottom-left{bottom:0;height:50%;left:0;position:absolute;width:50%;z-index:100}.parallax .parallax-bottom-left:hover~.parallax-content{transform:perspective(1000px) rotateX(-3deg) rotateY(-3deg)}.parallax .parallax-bottom-left:hover~.parallax-content::before{background:linear-gradient(45deg,rgba(255,255,255,.35) 0,transparent 50%)}.parallax .parallax-bottom-left:hover~.parallax-content .parallax-front{transform:translate3d(4.5px,-4.5px,50px) scale(.95)}.parallax .parallax-bottom-right{bottom:0;height:50%;position:absolute;right:0;width:50%;z-index:100}.parallax .parallax-bottom-right:hover~.parallax-content{transform:perspective(1000px) rotateX(-3deg) rotateY(3deg)}.parallax .parallax-bottom-right:hover~.parallax-content::before{background:linear-gradient(-45deg,rgba(255,255,255,.35) 0,transparent 50%)}.parallax .parallax-bottom-right:hover~.parallax-content .parallax-front{transform:translate3d(-4.5px,-4.5px,50px) scale(.95)}.progress{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#e2e4e9;border:0;border-radius:.1rem;color:#a22600;height:.2rem;position:relative;width:100%}.progress::-webkit-progress-bar{background:0 0;border-radius:.1rem}.progress::-webkit-progress-value{background:#a22600;border-radius:.1rem}.progress::-moz-progress-bar{background:#a22600;border-radius:.1rem}.progress:indeterminate{animation:progress-indeterminate 1.5s linear infinite;background:#e2e4e9 linear-gradient(to right,#a22600 30%,#e2e4e9 30%) top left/150% 150% no-repeat}.progress:indeterminate::-moz-progress-bar{background:0 0}@keyframes progress-indeterminate{0%{background-position:200% 0}100%{background-position:-200% 0}}.slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:0 0;display:block;height:1.2rem;width:100%}.slider:focus{box-shadow:0 0 0 .1rem rgba(162,38,0,.2);outline:0}.slider::-webkit-slider-thumb{-webkit-appearance:none;background:#a22600;border:0;border-radius:50%;height:.6rem;margin-top:-.25rem;transition:transform .2s ease;width:.6rem}.slider::-moz-range-thumb{background:#a22600;border:0;border-radius:50%;height:.6rem;transition:transform .2s ease;width:.6rem}.slider::-ms-thumb{background:#a22600;border:0;border-radius:50%;height:.6rem;transition:transform .2s ease;width:.6rem}.slider:active::-webkit-slider-thumb{transform:scale(1.25)}.slider:active::-moz-range-thumb{transform:scale(1.25)}.slider:active::-ms-thumb{transform:scale(1.25)}.slider.disabled::-webkit-slider-thumb,.slider:disabled::-webkit-slider-thumb{background:#828ba1;transform:scale(1)}.slider.disabled::-moz-range-thumb,.slider:disabled::-moz-range-thumb{background:#828ba1;transform:scale(1)}.slider.disabled::-ms-thumb,.slider:disabled::-ms-thumb{background:#828ba1;transform:scale(1)}.slider::-webkit-slider-runnable-track{background:#e2e4e9;border-radius:.1rem;height:.1rem;width:100%}.slider::-moz-range-track{background:#e2e4e9;border-radius:.1rem;height:.1rem;width:100%}.slider::-ms-track{background:#e2e4e9;border-radius:.1rem;height:.1rem;width:100%}.slider::-ms-fill-lower{background:#a22600}.timeline .timeline-item{display:flex;display:-ms-flexbox;margin-bottom:1.2rem;position:relative}.timeline .timeline-item::before{background:#d9dce3;content:"";height:100%;left:11px;position:absolute;top:1.2rem;width:2px}.timeline .timeline-item .timeline-left{-ms-flex:0 0 auto;flex:0 0 auto}.timeline .timeline-item .timeline-content{-ms-flex:1 1 auto;flex:1 1 auto;padding:2px 0 2px .8rem}.timeline .timeline-item .timeline-icon{border-radius:50%;color:#fff;display:block;height:1.2rem;text-align:center;width:1.2rem}.timeline .timeline-item .timeline-icon::before{border:.1rem solid #a22600;border-radius:50%;content:"";display:block;height:.4rem;left:.4rem;position:absolute;top:.4rem;width:.4rem}.timeline .timeline-item .timeline-icon.icon-lg{background:#a22600;font-size:1.2rem;line-height:1.2rem}.timeline .timeline-item .timeline-icon.icon-lg::before{content:none}
@@ -0,0 +1,1 @@
+/*! Spectre.css | MIT License | github.com/picturepan2/spectre */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}hr{box-sizing:content-box;height:0;overflow:visible}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}address{font-style:normal}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:"SF Mono","Segoe UI Mono","Roboto Mono",Menlo,Courier,monospace;font-size:1em}dfn{font-style:italic}small{font-size:80%;font-weight:400}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}fieldset{border:0;margin:0;padding:0}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item;outline:0}canvas{display:inline-block}template{display:none}[hidden]{display:none}*,::after,::before{box-sizing:inherit}html{box-sizing:border-box;font-size:16px;line-height:1.428571429;-webkit-tap-highlight-color:transparent}body{background:#fff;color:#464d5e;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",sans-serif;font-size:1rem;overflow-x:hidden;text-rendering:optimizeLegibility}a{color:#a22600;outline:0;text-decoration:none}a:focus{box-shadow:0 0 0 .1rem rgba(162,38,0,.2)}a.active,a:active,a:focus,a:hover{color:#892000;text-decoration:underline}h1,h2,h3,h4,h5,h6{color:inherit;font-weight:500;line-height:1.2;margin-bottom:.25em;margin-top:0}.h1,.h2,.h3,.h4,.h5,.h6{font-weight:500}.h1,h1{font-size:2rem}.h2,h2{font-size:1.6rem}.h3,h3{font-size:1.4rem}.h4,h4{font-size:1.2rem}.h5,h5{font-size:1rem}.h6,h6{font-size:.8rem}p{line-height:1.44rem;margin:0 0 .8rem}a,ins,u{-webkit-text-decoration-skip:ink edges;text-decoration-skip:ink edges}abbr[title]{border-bottom:.05rem dotted;cursor:help;text-decoration:none}kbd{background:#3b414f;border-radius:.1rem;color:#fff;font-size:.65rem;line-height:1;padding:.15rem}mark{background:#ffe9b3;border-radius:.1rem;color:#464d5e;padding:.05rem}blockquote{border-left:.1rem solid #d9dce3;margin-left:0;padding:.4rem .8rem}blockquote p:last-child{margin-bottom:0}ol,ul{margin:.8rem 0 .8rem .8rem;padding:0}ol ol,ol ul,ul ol,ul ul{margin:.8rem 0 .8rem .8rem}ol li,ul li{margin-top:.4rem}ul{list-style:disc inside}ul ul{list-style-type:circle}ol{list-style:decimal inside}ol ol{list-style-type:lower-alpha}dl dt{font-weight:700}dl dd{margin:.4rem 0 .8rem 0}:lang(zh){font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",sans-serif}:lang(ja){font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Hiragino Sans","Hiragino Kaku Gothic Pro","Yu Gothic",YuGothic,Meiryo,"Helvetica Neue",sans-serif}:lang(ko){font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Malgun Gothic","Helvetica Neue",sans-serif}.cjk ins,.cjk u,:lang(ja) ins,:lang(ja) u,:lang(zh) ins,:lang(zh) u{border-bottom:.05rem solid;text-decoration:none}.cjk del+del,.cjk del+s,.cjk ins+ins,.cjk ins+u,.cjk s+del,.cjk s+s,.cjk u+ins,.cjk u+u,:lang(ja) del+del,:lang(ja) del+s,:lang(ja) ins+ins,:lang(ja) ins+u,:lang(ja) s+del,:lang(ja) s+s,:lang(ja) u+ins,:lang(ja) u+u,:lang(zh) del+del,:lang(zh) del+s,:lang(zh) ins+ins,:lang(zh) ins+u,:lang(zh) s+del,:lang(zh) s+s,:lang(zh) u+ins,:lang(zh) u+u{margin-left:.125em}.table{border-collapse:collapse;border-spacing:0;text-align:left;width:100%}.table.table-striped tbody tr:nth-of-type(odd){background:#ebecf0}.table.table-hover tbody tr:hover{background:#e2e4e9}.table tbody tr.active,.table.table-striped tbody tr.active{background:#e2e4e9}.table td,.table th{border-bottom:.05rem solid #d9dce3;padding:.6rem .4rem}.table th{border-bottom-width:.1rem}.btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#fff;border:.05rem solid #a22600;border-radius:.1rem;color:#a22600;cursor:pointer;display:inline-block;font-size:1rem;height:1.6rem;line-height:1.2rem;outline:0;padding:.15rem .4rem;text-align:center;text-decoration:none;transition:all .2s ease;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.btn:focus{box-shadow:0 0 0 .1rem rgba(162,38,0,.2)}.btn:focus,.btn:hover{background:#ff916f;border-color:#932200;text-decoration:none}.btn.active,.btn:active{background:#932200;border-color:#791c00;color:#fff;text-decoration:none}.btn.active.loading::after,.btn:active.loading::after{border-bottom-color:#fff;border-left-color:#fff}.btn.disabled,.btn:disabled,.btn[disabled]{cursor:default;opacity:.5;pointer-events:none}.btn.btn-primary{background:#a22600;border-color:#932200;color:#fff}.btn.btn-primary:focus,.btn.btn-primary:hover{background:#892000;border-color:#791c00;color:#fff}.btn.btn-primary.active,.btn.btn-primary:active{background:#7e1e00;border-color:#6f1a00;color:#fff}.btn.btn-primary.loading::after{border-bottom-color:#fff;border-left-color:#fff}.btn.btn-link{background:0 0;border-color:transparent;color:#a22600}.btn.btn-link.active,.btn.btn-link:active,.btn.btn-link:focus,.btn.btn-link:hover{color:#892000}.btn.btn-sm{font-size:.8rem;height:1.2rem}.btn.btn-lg{font-size:1.2rem;height:2rem;padding:.35rem .5rem}.btn.btn-block{display:block;width:100%}.btn.btn-action{padding-left:0;padding-right:0;width:1.6rem}.btn.btn-action.btn-sm{width:1.2rem}.btn.btn-action.btn-lg{width:2rem}.btn.btn-clear{background:0 0;border:0;color:currentColor;height:.8rem;line-height:.8rem;margin-left:.2rem;margin-right:-2px;opacity:.45;padding:0 2px;text-decoration:none;width:.8rem}.btn.btn-clear:hover{opacity:.85}.btn.btn-clear::before{content:"\2715"}.btn-group{display:inline-flex;display:-ms-inline-flexbox;-ms-flex-wrap:wrap;flex-wrap:wrap}.btn-group .btn{-ms-flex:1 0 auto;flex:1 0 auto}.btn-group .btn:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group .btn:not(:first-child):not(:last-child){border-radius:0;margin-left:-.05rem}.btn-group .btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-.05rem}.btn-group .btn.active,.btn-group .btn:active,.btn-group .btn:focus,.btn-group .btn:hover{z-index:1}.btn-group.btn-group-block{display:flex;display:-ms-flexbox}.btn-group.btn-group-block .btn{-ms-flex:1 0 0;flex:1 0 0}.form-group:not(:last-child){margin-bottom:.4rem}fieldset{margin-bottom:.8rem}legend{font-size:1.2rem;font-weight:500;margin-bottom:.8rem}.form-label{display:block;padding:.2rem 0}.form-label.label-sm{padding:0 0}.form-label.label-lg{padding:.4rem 0}.form-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#fff;background-image:none;border:.05rem solid #bcc1cd;border-radius:.1rem;color:#464d5e;display:block;font-size:1rem;height:1.6rem;line-height:1.2rem;max-width:100%;outline:0;padding:.15rem .4rem;position:relative;transition:all .2s ease;width:100%}.form-input:focus{border-color:#a22600;box-shadow:0 0 0 .1rem rgba(162,38,0,.2)}.form-input::-webkit-input-placeholder{color:#51596c}.form-input:-ms-input-placeholder{color:#51596c}.form-input::placeholder{color:#51596c}.form-input.input-sm{font-size:.8rem;height:1.2rem}.form-input.input-lg{font-size:1.2rem;height:2rem;padding:.35rem .4rem}.form-input.input-inline{display:inline-block;vertical-align:middle;width:auto}.form-input[type=file]{height:auto}textarea.form-input{height:auto}.form-input-hint{color:#51596c;font-size:.8rem;margin-top:.2rem}.has-success .form-input-hint,.is-success+.form-input-hint{color:#32b643}.has-error .form-input-hint,.is-error+.form-input-hint{color:#e85600}.form-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:.05rem solid #bcc1cd;border-radius:.1rem;color:inherit;font-size:1rem;height:1.6rem;line-height:1.2rem;outline:0;padding:.15rem .4rem;vertical-align:middle;width:100%}.form-select[multiple],.form-select[size]{height:auto}.form-select[multiple] option,.form-select[size] option{padding:.1rem .2rem}.form-select:not([multiple]):not([size]){background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23667189' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .35rem center/.4rem .5rem;padding-right:1.1rem}.form-select:focus{border-color:#a22600;box-shadow:0 0 0 .1rem rgba(162,38,0,.2)}.form-select::-ms-expand{display:none}.form-select.select-sm{font-size:.8rem;height:1.2rem}.form-select.select-lg{font-size:1.2rem;height:2rem;padding:.35rem 1.1rem .35rem .4rem}.has-icon-left,.has-icon-right{position:relative}.has-icon-left .form-icon,.has-icon-right .form-icon{height:.7rem;margin:0 .15rem;position:absolute;top:50%;transform:translateY(-50%);width:.7rem}.has-icon-left .form-icon{left:.05rem}.has-icon-left .form-input{padding-left:1rem}.has-icon-right .form-icon{right:.05rem}.has-icon-right .form-input{padding-right:1rem}.form-checkbox,.form-radio,.form-switch{display:inline-block;line-height:1.2rem;padding:0 1.1rem;position:relative}.form-checkbox input,.form-radio input,.form-switch input{clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;position:absolute;width:1px}.form-checkbox input:focus+.form-icon,.form-radio input:focus+.form-icon,.form-switch input:focus+.form-icon{border-color:#a22600;box-shadow:0 0 0 .1rem rgba(162,38,0,.2)}.form-checkbox input:checked+.form-icon,.form-radio input:checked+.form-icon,.form-switch input:checked+.form-icon{background:#a22600;border-color:#a22600}.form-checkbox .form-icon,.form-radio .form-icon,.form-switch .form-icon{border:.05rem solid #bcc1cd;cursor:pointer;display:inline-block;position:absolute;transition:all .2s ease}.form-checkbox .form-icon,.form-radio .form-icon{background:#fff;height:.7rem;left:0;top:.25rem;width:.7rem}.form-checkbox input:active+.form-icon,.form-radio input:active+.form-icon{background:#e2e4e9}.form-checkbox .form-icon{border-radius:.1rem}.form-checkbox input:checked+.form-icon::before{background-clip:padding-box;border:.1rem solid #fff;border-left-width:0;border-top-width:0;content:"";height:10px;left:50%;margin-left:-3px;margin-top:-6px;position:absolute;top:50%;transform:rotate(45deg);width:6px}.form-checkbox input:indeterminate+.form-icon{background:#a22600;border-color:#a22600}.form-checkbox input:indeterminate+.form-icon::before{background:#fff;content:"";height:2px;left:50%;margin-left:-5px;margin-top:-1px;position:absolute;top:50%;width:10px}.form-radio .form-icon{border-radius:.35rem}.form-radio input:checked+.form-icon::before{background:#fff;border-radius:.1rem;content:"";height:4px;left:50%;margin-left:-2px;margin-top:-2px;position:absolute;top:50%;width:4px}.form-switch{padding-left:2rem}.form-switch .form-icon{background:#828ba1;background-clip:padding-box;border-radius:.45rem;height:.9rem;left:0;top:.15rem;width:1.6rem}.form-switch .form-icon::before{background:#fff;border-radius:.4rem;content:"";display:block;height:.8rem;left:0;position:absolute;top:0;transition:all .2s ease;width:.8rem}.form-switch input:checked+.form-icon::before{left:14px}.form-switch input:active+.form-icon::before{background:#ebecf0}.input-group{display:flex;display:-ms-flexbox}.input-group .input-group-addon{background:#ebecf0;border:.05rem solid #bcc1cd;border-radius:.1rem;line-height:1.2rem;padding:.15rem .4rem}.input-group .input-group-addon.addon-sm{font-size:.8rem}.input-group .input-group-addon.addon-lg{font-size:1.2rem;padding:.35rem .4rem}.input-group .form-input,.input-group .form-select{-ms-flex:1 1 auto;flex:1 1 auto}.input-group .input-group-btn{z-index:1}.input-group .form-input:first-child:not(:last-child),.input-group .form-select:first-child:not(:last-child),.input-group .input-group-addon:first-child:not(:last-child),.input-group .input-group-btn:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.input-group .form-input:not(:first-child):not(:last-child),.input-group .form-select:not(:first-child):not(:last-child),.input-group .input-group-addon:not(:first-child):not(:last-child),.input-group .input-group-btn:not(:first-child):not(:last-child){border-radius:0;margin-left:-.05rem}.input-group .form-input:last-child:not(:first-child),.input-group .form-select:last-child:not(:first-child),.input-group .input-group-addon:last-child:not(:first-child),.input-group .input-group-btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-.05rem}.input-group .form-input:focus,.input-group .form-select:focus,.input-group .input-group-addon:focus,.input-group .input-group-btn:focus{z-index:2}.input-group .form-select{width:auto}.input-group.input-inline{display:inline-flex;display:-ms-inline-flexbox}.form-input.is-success,.form-select.is-success,.has-success .form-input,.has-success .form-select{border-color:#32b643}.form-input.is-success:focus,.form-select.is-success:focus,.has-success .form-input:focus,.has-success .form-select:focus{box-shadow:0 0 0 .1rem rgba(50,182,67,.2)}.form-input.is-error,.form-select.is-error,.has-error .form-input,.has-error .form-select{border-color:#e85600}.form-input.is-error:focus,.form-select.is-error:focus,.has-error .form-input:focus,.has-error .form-select:focus{box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.form-checkbox.is-error .form-icon,.form-radio.is-error .form-icon,.form-switch.is-error .form-icon,.has-error .form-checkbox .form-icon,.has-error .form-radio .form-icon,.has-error .form-switch .form-icon{border-color:#e85600}.form-checkbox.is-error input:checked+.form-icon,.form-radio.is-error input:checked+.form-icon,.form-switch.is-error input:checked+.form-icon,.has-error .form-checkbox input:checked+.form-icon,.has-error .form-radio input:checked+.form-icon,.has-error .form-switch input:checked+.form-icon{background:#e85600;border-color:#e85600}.form-checkbox.is-error input:focus+.form-icon,.form-radio.is-error input:focus+.form-icon,.form-switch.is-error input:focus+.form-icon,.has-error .form-checkbox input:focus+.form-icon,.has-error .form-radio input:focus+.form-icon,.has-error .form-switch input:focus+.form-icon{border-color:#e85600;box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.form-input:not(:placeholder-shown):invalid{border-color:#e85600}.form-input:not(:placeholder-shown):invalid:focus{box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.form-input:not(:placeholder-shown):invalid+.form-input-hint{color:#e85600}.form-input.disabled,.form-input:disabled,.form-select.disabled,.form-select:disabled{background-color:#e2e4e9;cursor:not-allowed;opacity:.5}.form-input[readonly]{background-color:#ebecf0}input.disabled+.form-icon,input:disabled+.form-icon{background:#e2e4e9;cursor:not-allowed;opacity:.5}.form-switch input.disabled+.form-icon::before,.form-switch input:disabled+.form-icon::before{background:#fff}.form-horizontal{padding:.4rem}.form-horizontal .form-group{display:flex;display:-ms-flexbox}.form-horizontal .form-checkbox,.form-horizontal .form-radio,.form-horizontal .form-switch{margin:.2rem 0}.label{background:#ebecf0;border-radius:.1rem;color:#51596c;display:inline-block;line-height:1;padding:.15rem}.label.label-rounded{border-radius:5rem;padding-left:.4rem;padding-right:.4rem}.label.label-primary{background:#a22600;color:#fff}.label.label-secondary{background:#ff916f;color:#a22600}.label.label-success{background:#32b643;color:#fff}.label.label-warning{background:#ffb700;color:#fff}.label.label-error{background:#e85600;color:#fff}code{background:#fdf4f4;border-radius:.1rem;color:#e06870;font-size:.65rem;line-height:1;padding:.15rem}.code{border-radius:.1rem;color:#464d5e;line-height:1.2rem;position:relative}.code::before{color:#51596c;content:attr(data-lang);font-size:.8rem;position:absolute;right:.4rem;top:.1rem}.code code{background:#ebecf0;color:inherit;display:block;line-height:inherit;overflow-x:auto;padding:1rem;width:100%}.img-responsive{display:block;height:auto;max-width:100%}.img-fit-cover{object-fit:cover}.img-fit-contain{object-fit:contain}.video-responsive{display:block;overflow:hidden;padding:0;position:relative;width:100%}.video-responsive::before{content:"";display:block;padding-bottom:56.25%}.video-responsive embed,.video-responsive iframe,.video-responsive object{border:0;bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}video.video-responsive{height:auto;max-width:100%}video.video-responsive::before{content:none}.video-responsive-4-3::before{padding-bottom:75%}.video-responsive-1-1::before{padding-bottom:100%}.figure{margin:0 0 .4rem 0}.figure .figure-caption{color:#0f1115;margin-top:.4rem}.container{margin-left:auto;margin-right:auto;padding-left:.4rem;padding-right:.4rem;width:100%}.container.grid-xl{max-width:1292.8px}.container.grid-lg{max-width:972.8px}.container.grid-md{max-width:852.8px}.container.grid-sm{max-width:612.8px}.container.grid-xs{max-width:492.8px}.show-lg,.show-md,.show-sm,.show-xl,.show-xs{display:none!important}.columns{display:flex;display:-ms-flexbox;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-left:-.4rem;margin-right:-.4rem}.columns.col-gapless{margin-left:0;margin-right:0}.columns.col-gapless>.column{padding-left:0;padding-right:0}.columns.col-oneline{-ms-flex-wrap:nowrap;flex-wrap:nowrap;overflow-x:auto}.column{-ms-flex:1;flex:1;max-width:100%;padding-left:.4rem;padding-right:.4rem}.column.col-1,.column.col-10,.column.col-11,.column.col-12,.column.col-2,.column.col-3,.column.col-4,.column.col-5,.column.col-6,.column.col-7,.column.col-8,.column.col-9{-ms-flex:none;flex:none}.col-12{width:100%}.col-11{width:91.66666667%}.col-10{width:83.33333333%}.col-9{width:75%}.col-8{width:66.66666667%}.col-7{width:58.33333333%}.col-6{width:50%}.col-5{width:41.66666667%}.col-4{width:33.33333333%}.col-3{width:25%}.col-2{width:16.66666667%}.col-1{width:8.33333333%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;max-width:none;width:auto}.col-mx-auto{margin-left:auto;margin-right:auto}.col-ml-auto{margin-left:auto}.col-mr-auto{margin-right:auto}@media (max-width:1280px){.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{-ms-flex:none;flex:none}.col-xl-12{width:100%}.col-xl-11{width:91.66666667%}.col-xl-10{width:83.33333333%}.col-xl-9{width:75%}.col-xl-8{width:66.66666667%}.col-xl-7{width:58.33333333%}.col-xl-6{width:50%}.col-xl-5{width:41.66666667%}.col-xl-4{width:33.33333333%}.col-xl-3{width:25%}.col-xl-2{width:16.66666667%}.col-xl-1{width:8.33333333%}.hide-xl{display:none!important}.show-xl{display:block!important}}@media (max-width:960px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{-ms-flex:none;flex:none}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.hide-lg{display:none!important}.show-lg{display:block!important}}@media (max-width:840px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{-ms-flex:none;flex:none}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.hide-md{display:none!important}.show-md{display:block!important}}@media (max-width:600px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{-ms-flex:none;flex:none}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.hide-sm{display:none!important}.show-sm{display:block!important}}@media (max-width:480px){.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{-ms-flex:none;flex:none}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.hide-xs{display:none!important}.show-xs{display:block!important}}.navbar{align-items:stretch;display:flex;display:-ms-flexbox;-ms-flex-align:stretch;-ms-flex-pack:justify;-ms-flex-wrap:wrap;flex-wrap:wrap;justify-content:space-between}.navbar .navbar-section{align-items:center;display:flex;display:-ms-flexbox;-ms-flex:1 0 0;flex:1 0 0;-ms-flex-align:center}.navbar .navbar-section:last-child{-ms-flex-pack:end;justify-content:flex-end}.navbar .navbar-center{align-items:center;display:flex;display:-ms-flexbox;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-align:center}.navbar .navbar-brand{font-size:1.2rem;font-weight:500;text-decoration:none}.accordion input:checked~.accordion-header .icon,.accordion[open] .accordion-header .icon{transform:rotate(90deg)}.accordion input:checked~.accordion-body,.accordion[open] .accordion-body{max-height:50rem}.accordion .accordion-header{display:block;padding:.2rem .4rem}.accordion .accordion-header .icon{transition:all .2s ease}.accordion .accordion-body{margin-bottom:.4rem;max-height:0;overflow:hidden;transition:max-height .2s ease}summary.accordion-header::-webkit-details-marker{display:none}.form-autocomplete{position:relative}.form-autocomplete .form-autocomplete-input{align-content:flex-start;display:flex;display:-ms-flexbox;-ms-flex-line-pack:start;-ms-flex-wrap:wrap;flex-wrap:wrap;height:auto;min-height:1.6rem;padding:.1rem}.form-autocomplete .form-autocomplete-input.is-focused{border-color:#a22600;box-shadow:0 0 0 .1rem rgba(162,38,0,.2)}.form-autocomplete .form-autocomplete-input .form-input{border-color:transparent;box-shadow:none;display:inline-block;-ms-flex:1 0 auto;flex:1 0 auto;height:1.2rem;line-height:.8rem;margin:.1rem;width:auto}.form-autocomplete .menu{left:0;position:absolute;top:100%;width:100%}.avatar{background:#a22600;border-radius:50%;color:rgba(255,255,255,.85);display:inline-block;font-size:.8rem;font-weight:300;height:1.6rem;line-height:1;margin:0;position:relative;vertical-align:middle;width:1.6rem}.avatar.avatar-xs{font-size:.4rem;height:.8rem;width:.8rem}.avatar.avatar-sm{font-size:.6rem;height:1.2rem;width:1.2rem}.avatar.avatar-lg{font-size:1.2rem;height:2.4rem;width:2.4rem}.avatar.avatar-xl{font-size:1.6rem;height:3.2rem;width:3.2rem}.avatar img{border-radius:50%;height:100%;position:relative;width:100%;z-index:1}.avatar .avatar-icon,.avatar .avatar-presence{background:#fff;bottom:14.64%;height:50%;padding:.1rem;position:absolute;right:14.64%;transform:translate(50%,50%);width:50%;z-index:2}.avatar .avatar-presence{background:#51596c;border-radius:50%;box-shadow:0 0 0 .1rem #fff;height:.5em;width:.5em}.avatar .avatar-presence.online{background:#32b643}.avatar .avatar-presence.busy{background:#e85600}.avatar .avatar-presence.away{background:#ffb700}.avatar[data-initial]::before{color:currentColor;content:attr(data-initial);left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:1}.badge{position:relative;white-space:nowrap}.badge:not([data-badge])::after,.badge[data-badge]::after{background:#a22600;background-clip:padding-box;border-radius:.5rem;box-shadow:0 0 0 .1rem #fff;color:#fff;content:attr(data-badge);display:inline-block;transform:translate(-.1rem,-.5rem)}.badge[data-badge]::after{font-size:.8rem;height:18px;line-height:1;min-width:18px;padding:3px 5px;text-align:center;white-space:nowrap}.badge:not([data-badge])::after,.badge[data-badge=""]::after{height:6px;min-width:6px;padding:0;width:6px}.badge.btn::after{position:absolute;right:0;top:0;transform:translate(50%,-50%)}.badge.avatar::after{position:absolute;right:14.64%;top:14.64%;transform:translate(50%,-50%);z-index:100}.badge.avatar-xs::after{content:"";height:.4rem;min-width:.4rem;padding:0;width:.4rem}.breadcrumb{list-style:none;margin:.2rem 0;padding:.2rem 0}.breadcrumb .breadcrumb-item{color:#0f1115;display:inline-block;margin:0;padding:.2rem 0}.breadcrumb .breadcrumb-item:not(:last-child){margin-right:.2rem}.breadcrumb .breadcrumb-item:not(:last-child) a{color:#0f1115}.breadcrumb .breadcrumb-item:not(:first-child)::before{color:#828ba1;content:"/";padding-right:.2rem}.bar{background:#e2e4e9;border-radius:.1rem;display:flex;display:-ms-flexbox;-ms-flex-wrap:nowrap;flex-wrap:nowrap;height:.8rem;width:100%}.bar.bar-sm{height:.2rem}.bar .bar-item{background:#a22600;color:#fff;display:block;-ms-flex-negative:0;flex-shrink:0;font-size:.8rem;height:100%;line-height:.8rem;position:relative;text-align:center;width:0}.bar .bar-item:first-child{border-bottom-left-radius:.1rem;border-top-left-radius:.1rem}.bar .bar-item:last-child{border-bottom-right-radius:.1rem;border-top-right-radius:.1rem;-ms-flex-negative:1;flex-shrink:1}.bar-slider{height:.1rem;margin:.4rem 0;position:relative}.bar-slider .bar-item{left:0;padding:0;position:absolute}.bar-slider .bar-item:not(:last-child):first-child{background:#e2e4e9;z-index:1}.bar-slider .bar-slider-btn{background:#a22600;border:0;border-radius:50%;height:.6rem;padding:0;position:absolute;right:0;top:50%;transform:translate(50%,-50%);width:.6rem}.bar-slider .bar-slider-btn:active{box-shadow:0 0 0 .1rem #a22600}.card{background:#fff;border:.05rem solid #d9dce3;border-radius:.1rem;display:flex;display:-ms-flexbox;-ms-flex-direction:column;flex-direction:column}.card .card-body,.card .card-footer,.card .card-header{padding:.8rem;padding-bottom:0}.card .card-body:last-child,.card .card-footer:last-child,.card .card-header:last-child{padding-bottom:.8rem}.card .card-image{padding-top:.8rem}.card .card-image:first-child{padding-top:0}.card .card-image:first-child img{border-top-left-radius:.1rem;border-top-right-radius:.1rem}.card .card-image:last-child img{border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem}.chip{align-items:center;background:#e2e4e9;border-radius:5rem;color:#0f1115;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;height:1.2rem;margin:.1rem;max-width:100%;padding:.1rem .5rem;text-decoration:none;vertical-align:middle}.chip.active{background:#a22600;color:#fff}.chip .avatar{margin-left:-.5rem;margin-right:.2rem}.dropdown{display:inline-block;position:relative}.dropdown .menu{animation:slide-down .15s ease 1;display:none;left:0;max-height:50vh;overflow-y:auto;position:absolute;top:100%}.dropdown.dropdown-right .menu{left:auto;right:0}.dropdown .dropdown-toggle:focus+.menu,.dropdown .menu:hover,.dropdown.active .menu{display:block}.dropdown .btn-group .dropdown-toggle:nth-last-child(2){border-bottom-right-radius:.1rem;border-top-right-radius:.1rem}.empty{background:#ebecf0;border-radius:.1rem;color:#0f1115;padding:1.6rem;text-align:center}.empty .empty-icon{margin-bottom:.8rem}.empty .empty-subtitle,.empty .empty-title{margin:.4rem auto}.empty .empty-action{margin-top:.8rem}.menu{background:#fff;border-radius:.1rem;box-shadow:0 .05rem .2rem rgba(59,65,79,.3);list-style:none;margin:0;min-width:180px;padding:.4rem;transform:translateY(.2rem);z-index:100}.menu.menu-nav{background:0 0;box-shadow:none}.menu .menu-item{margin-top:0;padding:0 .4rem;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.menu .menu-item>a{border-radius:.1rem;color:inherit;display:block;margin:0 -.4rem;padding:.2rem .4rem;text-decoration:none}.menu .menu-item>a:focus,.menu .menu-item>a:hover{background:#ff916f;color:#a22600}.menu .menu-item>a.active,.menu .menu-item>a:active{background:#ff916f;color:#a22600}.menu .menu-item+.menu-item{margin-top:.2rem}.menu .menu-badge{float:right;padding:.2rem 0}.menu .menu-badge .btn{margin-top:-.1rem}.modal{align-items:center;bottom:0;display:none;-ms-flex-align:center;-ms-flex-pack:center;justify-content:center;left:0;opacity:0;overflow:hidden;padding:.4rem;position:fixed;right:0;top:0}.modal.active,.modal:target{display:flex;display:-ms-flexbox;opacity:1;z-index:400}.modal.active .modal-overlay,.modal:target .modal-overlay{background:rgba(235,236,240,.75);bottom:0;cursor:default;display:block;left:0;position:absolute;right:0;top:0}.modal.active .modal-container,.modal:target .modal-container{animation:slide-down .2s ease 1;max-width:640px;z-index:1}.modal.modal-sm .modal-container{max-width:320px}.modal-container{background:#fff;border-radius:.1rem;box-shadow:0 .2rem .5rem rgba(59,65,79,.3);display:block;padding:0;text-align:left}.modal-container .modal-header{padding:.8rem}.modal-container .modal-header .modal-title{margin:0}.modal-container .modal-body{max-height:50vh;overflow-y:auto;padding:.8rem;position:relative}.modal-container .modal-footer{padding:.8rem;text-align:right}.nav{display:flex;display:-ms-flexbox;-ms-flex-direction:column;flex-direction:column;list-style:none;margin:.2rem 0}.nav .nav-item a{color:#0f1115;padding:.2rem .4rem;text-decoration:none}.nav .nav-item a:focus,.nav .nav-item a:hover{color:#a22600}.nav .nav-item.active>a{color:#000;font-weight:700}.nav .nav-item.active>a:focus,.nav .nav-item.active>a:hover{color:#a22600}.nav .nav{margin-bottom:.4rem;margin-left:.8rem}.pagination{display:flex;display:-ms-flexbox;list-style:none;margin:.2rem 0;padding:.2rem 0}.pagination .page-item{margin:.2rem .05rem}.pagination .page-item span{display:inline-block;padding:.2rem .2rem}.pagination .page-item a{border-radius:.1rem;color:#0f1115;display:inline-block;padding:.2rem .4rem;text-decoration:none}.pagination .page-item a:focus,.pagination .page-item a:hover{color:#a22600}.pagination .page-item.disabled a{cursor:default;opacity:.5;pointer-events:none}.pagination .page-item.active a{background:#a22600;color:#fff}.pagination .page-item.page-next,.pagination .page-item.page-prev{-ms-flex:1 0 50%;flex:1 0 50%}.pagination .page-item.page-next{text-align:right}.pagination .page-item .page-item-title{margin:0}.pagination .page-item .page-item-subtitle{margin:0;opacity:.5}.panel{border:.05rem solid #d9dce3;border-radius:.1rem;display:flex;display:-ms-flexbox;-ms-flex-direction:column;flex-direction:column}.panel .panel-footer,.panel .panel-header{-ms-flex:0 0 auto;flex:0 0 auto;padding:.8rem}.panel .panel-nav{-ms-flex:0 0 auto;flex:0 0 auto}.panel .panel-body{-ms-flex:1 1 auto;flex:1 1 auto;overflow-y:auto;padding:0 .8rem}.popover{display:inline-block;position:relative}.popover .popover-container{content:attr(data-tooltip);left:50%;opacity:0;padding:.4rem;position:absolute;top:0;transform:translate(-50%,-50%) scale(0);transition:transform .2s ease;width:320px;z-index:400}.popover .popover-container:hover,.popover :focus+.popover-container,.popover:hover .popover-container{display:block;opacity:1;transform:translate(-50%,-100%) scale(1)}.popover.popover-right .popover-container{left:100%;top:50%}.popover.popover-right .popover-container:hover,.popover.popover-right :focus+.popover-container,.popover.popover-right:hover .popover-container{transform:translate(0,-50%) scale(1)}.popover.popover-bottom .popover-container{left:50%;top:100%}.popover.popover-bottom .popover-container:hover,.popover.popover-bottom :focus+.popover-container,.popover.popover-bottom:hover .popover-container{transform:translate(-50%,0) scale(1)}.popover.popover-left .popover-container{left:0;top:50%}.popover.popover-left .popover-container:hover,.popover.popover-left :focus+.popover-container,.popover.popover-left:hover .popover-container{transform:translate(-100%,-50%) scale(1)}.popover .card{border:0;box-shadow:0 .2rem .5rem rgba(59,65,79,.3)}.step{display:flex;display:-ms-flexbox;-ms-flex-wrap:nowrap;flex-wrap:nowrap;list-style:none;margin:.2rem 0;width:100%}.step .step-item{-ms-flex:1 1 0;flex:1 1 0;margin-top:0;min-height:1rem;position:relative;text-align:center}.step .step-item:not(:first-child)::before{background:#a22600;content:"";height:2px;left:-50%;position:absolute;top:9px;width:100%}.step .step-item a{color:#51596c;display:inline-block;padding:20px 10px 0;text-decoration:none}.step .step-item a::before{background:#a22600;border:.1rem solid #fff;border-radius:50%;content:"";display:block;height:.6rem;left:50%;position:absolute;top:.2rem;transform:translateX(-50%);width:.6rem;z-index:1}.step .step-item.active a::before{background:#fff;border:.1rem solid #a22600}.step .step-item.active~.step-item::before{background:#d9dce3}.step .step-item.active~.step-item a::before{background:#828ba1}.tab{align-items:center;border-bottom:.05rem solid #d9dce3;display:flex;display:-ms-flexbox;-ms-flex-align:center;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin:.2rem 0 .15rem 0}.tab .tab-item{margin-top:0}.tab .tab-item.tab-action{-ms-flex:1 0 auto;flex:1 0 auto;text-align:right}.tab .tab-item a{border-bottom:.1rem solid transparent;color:inherit;display:block;margin:0 .4rem 0 0;padding:.4rem .2rem .3rem .2rem;text-decoration:none}.tab .tab-item a:focus,.tab .tab-item a:hover{color:#a22600}.tab .tab-item a.active,.tab .tab-item.active a{border-bottom-color:#a22600;color:#a22600}.tab.tab-block .tab-item{-ms-flex:1 0 0;flex:1 0 0;text-align:center}.tab.tab-block .tab-item a{margin:0}.tab.tab-block .tab-item .badge[data-badge]::after{position:absolute;right:-4px;top:-4px;transform:translate(0,0)}.tab:not(.tab-block) .badge{padding-right:2px}.tile{align-content:space-between;align-items:flex-start;display:flex;display:-ms-flexbox;-ms-flex-align:start;-ms-flex-line-pack:justify}.tile .tile-action,.tile .tile-icon{-ms-flex:0 0 auto;flex:0 0 auto}.tile .tile-content{-ms-flex:1 1 auto;flex:1 1 auto}.tile .tile-content:not(:first-child){padding-left:.4rem}.tile .tile-content:not(:last-child){padding-right:.4rem}.tile .tile-subtitle,.tile .tile-title{line-height:1.2rem}.tile.tile-centered{align-items:center;-ms-flex-align:center}.tile.tile-centered .tile-content{overflow:hidden}.tile.tile-centered .tile-subtitle,.tile.tile-centered .tile-title{margin-bottom:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.toast{background:rgba(59,65,79,.9);border:.05rem solid #3b414f;border-color:#3b414f;border-radius:.1rem;color:#fff;display:block;padding:.4rem;width:100%}.toast.toast-primary{background:rgba(162,38,0,.9);border-color:#a22600}.toast.toast-success{background:rgba(50,182,67,.9);border-color:#32b643}.toast.toast-warning{background:rgba(255,183,0,.9);border-color:#ffb700}.toast.toast-error{background:rgba(232,86,0,.9);border-color:#e85600}.toast a{color:#fff;text-decoration:underline}.toast a.active,.toast a:active,.toast a:focus,.toast a:hover{opacity:.75}.toast .btn-clear{margin:2px -2px 2px 4px}.tooltip{position:relative}.tooltip::after{background:rgba(59,65,79,.9);border-radius:.1rem;bottom:100%;color:#fff;content:attr(data-tooltip);display:block;font-size:.8rem;left:50%;max-width:320px;opacity:0;overflow:hidden;padding:.2rem .4rem;pointer-events:none;position:absolute;text-overflow:ellipsis;transform:translate(-50%,.4rem);transition:all .2s ease;white-space:nowrap;z-index:300}.tooltip:focus::after,.tooltip:hover::after{opacity:1;transform:translate(-50%,-.2rem)}.tooltip.disabled,.tooltip[disabled]{pointer-events:auto}.tooltip.tooltip-right::after{bottom:50%;left:100%;transform:translate(-.2rem,50%)}.tooltip.tooltip-right:focus::after,.tooltip.tooltip-right:hover::after{transform:translate(.2rem,50%)}.tooltip.tooltip-bottom::after{bottom:auto;top:100%;transform:translate(-50%,-.4rem)}.tooltip.tooltip-bottom:focus::after,.tooltip.tooltip-bottom:hover::after{transform:translate(-50%,.2rem)}.tooltip.tooltip-left::after{bottom:50%;left:auto;right:100%;transform:translate(.4rem,50%)}.tooltip.tooltip-left:focus::after,.tooltip.tooltip-left:hover::after{transform:translate(-.2rem,50%)}@keyframes loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes slide-down{0%{opacity:0;transform:translateY(-1.6rem)}100%{opacity:1;transform:translateY(0)}}.text-primary{color:#a22600}a.text-primary:focus,a.text-primary:hover{color:#892000}.text-secondary{color:#ff8560}a.text-secondary:focus,a.text-secondary:hover{color:#ff7246}.text-gray{color:#51596c}a.text-gray:focus,a.text-gray:hover{color:#464d5e}.text-light{color:#fff}a.text-light:focus,a.text-light:hover{color:#f2f2f2}.text-success{color:#32b643}a.text-success:focus,a.text-success:hover{color:#2da23c}.text-warning{color:#ffb700}a.text-warning:focus,a.text-warning:hover{color:#e6a500}.text-error{color:#e85600}a.text-error:focus,a.text-error:hover{color:#cf4d00}.bg-primary{background:#a22600}.bg-secondary{background:#ff916f}.bg-dark{background:#3b414f}.bg-gray{background:#ebecf0}.bg-success{background:#32b643}.bg-warning{background:#ffb700}.bg-error{background:#e85600}.c-hand{cursor:pointer}.c-move{cursor:move}.c-zoom-in{cursor:zoom-in}.c-zoom-out{cursor:zoom-out}.c-not-allowed{cursor:not-allowed}.c-auto{cursor:auto}.d-block{display:block}.d-inline{display:inline}.d-inline-block{display:inline-block}.d-flex{display:flex;display:-ms-flexbox}.d-inline-flex{display:inline-flex;display:-ms-inline-flexbox}.d-hide,.d-none{display:none!important}.d-visible{visibility:visible}.d-invisible{visibility:hidden}.text-hide{background:0 0;border:0;color:transparent;font-size:0;line-height:0;text-shadow:none}.text-assistive{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.divider,.divider-vert{display:block;position:relative}.divider-vert[data-content]::after,.divider[data-content]::after{background:#fff;color:#51596c;content:attr(data-content);display:inline-block;font-size:.8rem;padding:0 .4rem;transform:translateY(-.75rem)}.divider{border-top:.05rem solid #d9dce3;height:.05rem;margin:.4rem 0}.divider[data-content]{margin:.8rem 0}.divider-vert{display:block;padding:.8rem}.divider-vert::before{border-left:.05rem solid #d9dce3;bottom:.4rem;content:"";display:block;left:50%;position:absolute;top:.4rem;transform:translateX(-50%)}.divider-vert[data-content]::after{left:50%;padding:.2rem 0;position:absolute;top:50%;transform:translate(-50%,-50%)}.loading{color:transparent!important;min-height:.8rem;pointer-events:none;position:relative}.loading::after{animation:loading .5s infinite linear;border:.1rem solid #a22600;border-radius:50%;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:.8rem;left:50%;margin-left:-.4rem;margin-top:-.4rem;position:absolute;top:50%;width:.8rem;z-index:1}.loading.loading-lg{min-height:2rem}.loading.loading-lg::after{height:1.6rem;margin-left:-.8rem;margin-top:-.8rem;width:1.6rem}.clearfix::after,.container::after{clear:both;content:"";display:table}.float-left{float:left!important}.float-right{float:right!important}.relative{position:relative}.absolute{position:absolute}.fixed{position:fixed}.centered{display:block;float:none;margin-left:auto;margin-right:auto}.flex-centered{align-items:center;display:flex;display:-ms-flexbox;-ms-flex-align:center;-ms-flex-pack:center;justify-content:center}.m-0{margin:0}.mb-0{margin-bottom:0}.ml-0{margin-left:0}.mr-0{margin-right:0}.mt-0{margin-top:0}.mx-0{margin-left:0;margin-right:0}.my-0{margin-bottom:0;margin-top:0}.m-1{margin:.2rem}.mb-1{margin-bottom:.2rem}.ml-1{margin-left:.2rem}.mr-1{margin-right:.2rem}.mt-1{margin-top:.2rem}.mx-1{margin-left:.2rem;margin-right:.2rem}.my-1{margin-bottom:.2rem;margin-top:.2rem}.m-2{margin:.4rem}.mb-2{margin-bottom:.4rem}.ml-2{margin-left:.4rem}.mr-2{margin-right:.4rem}.mt-2{margin-top:.4rem}.mx-2{margin-left:.4rem;margin-right:.4rem}.my-2{margin-bottom:.4rem;margin-top:.4rem}.p-0{padding:0}.pb-0{padding-bottom:0}.pl-0{padding-left:0}.pr-0{padding-right:0}.pt-0{padding-top:0}.px-0{padding-left:0;padding-right:0}.py-0{padding-bottom:0;padding-top:0}.p-1{padding:.2rem}.pb-1{padding-bottom:.2rem}.pl-1{padding-left:.2rem}.pr-1{padding-right:.2rem}.pt-1{padding-top:.2rem}.px-1{padding-left:.2rem;padding-right:.2rem}.py-1{padding-bottom:.2rem;padding-top:.2rem}.p-2{padding:.4rem}.pb-2{padding-bottom:.4rem}.pl-2{padding-left:.4rem}.pr-2{padding-right:.4rem}.pt-2{padding-top:.4rem}.px-2{padding-left:.4rem;padding-right:.4rem}.py-2{padding-bottom:.4rem;padding-top:.4rem}.rounded{border-radius:.1rem}.circle{border-radius:50%}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-normal{font-weight:400}.text-bold{font-weight:700}.text-italic{font-style:italic}.text-large{font-size:1.2em}.text-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-clip{overflow:hidden;text-overflow:clip;white-space:nowrap}.text-break{-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;word-break:break-word;word-wrap:break-word}
@@ -0,0 +1,205 @@
+ + +body { + font-family: 'Raleway', sans-serif; + -moz-font-feature-settings: "liga", "clig", "onum", "frac", "kern"; + -webkit-font-feature-settings: "liga", "clig", "onum", "frac", "kern"; + -ms-font-feature-settings: "liga", "clig", "onum", "frac", "kern"; + font-feature-settings: "liga", "clig", "onum", "frac", "kern"; + -moz-hyphens: auto; + -webkit-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + text-align: justify; + font-weight: normal; + font-size: 1rem; +} + +code, pre { + color: #333; + background-color: #f8f8f8; + font-family: 'Hack', monospace; + font-size: 0.8rem; + line-height: 1.2rem; +} + +b, strong, h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6, .panel-title { + font-weight: bold; +} + +i, em, .subtitle, .panel-header { + font-family: 'Raleway', sans-serif; + font-style: italic; + -moz-font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; + -webkit-font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; + -ms-font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; + font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; +} + +h1, h2, h3, h4, h5 { + font-family: 'Raleway', sans-serif; + font-style: normal; + -moz-font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; + -webkit-font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; + -ms-font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; + font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; +} + +.projects-page h3, +.body-text h3, +.body-text h4, +.body-text h5 { + padding-top: 1rem; +} + +a { + text-decoration-skip: ink; +} + +.subtitle { + font-style: italic; + font-size: 1rem; + line-height: 1.2rem; + margin-top: -0.3rem; +} + +.body-text p { + padding-bottom: 1rem; +} + +ol, ul { +} + +ol li, ul li { +} + +main.container { + padding: 1rem 2rem 1rem 2rem; +} + +article { +} + +article.article header h3, +article.project header h3 { + font-weight: normal; + font-style: italic; + font-size: 1.2em; +} + +footer.container { + font-size: 0.7rem; + padding: 1rem; +} + +footer p { + margin: 0; + line-height: 1rem; +} + +.navbar { + padding-top: 1rem; +} + +.navbar-link { + margin-top: -0.3rem; + font-size: 1.2rem; +} + +.navbar-right { +} + +.contact-list ul { +} +.contact-list li { + display: inline; +} + + +.v-spacer { + padding-top: 1rem; +} + +.featured .panel-header { + text-align: right; + font-style: italic; + padding-top: 0; + padding-right: 0.3rem; + font-size: 0.8rem; + color: #51596c; +} + +.date { + text-align: right; + font-size: 0.8rem; +} + +.timeline { + padding: 1rem 0; +} + +.timeline .timeline-item .timeline-icon.icon-lg { + font-size: 0.8rem; + line-height: 1.3rem; +} + +.timeline .timeline-item::before { + left: 9px; + top: 1.3rem; +} + +time { + float: right; + padding-bottom: 1rem; +} + +.body-text, h4 { + clear: right; +} + +.clearfix { + clear: both; +} + +img { + max-width: 100%; +} + +.archives-search { + float: right; + margin-bottom: 1em; +} + +.archives .card, .projects .card { + margin-bottom: 1em; +} + +.label { + font-variant: small-caps; + vertical-align: middle; +} + +.card-subtitle { + font-style: italic; +} + +a[href^=http]::after { + font-family: "entypo"; + content: "\e9ab"; + font-size: 0.8rem; + color: #aaa; + font-weight: normal; +} + +.project-card { + margin-bottom: 0.5rem; +} + +.project-card.card .card-footer { + text-align: center; + padding: 0.4rem; +} + +.project-card .card-footer a { + font-variant: small-caps; +}
@@ -1,30 +0,0 @@
---- -data_sources: -- items_root: / - layouts_root: / - type: filesystem_unified - identifier_type: legacy -text_extensions: -- css -- erb -- haml -- htm -- html -- js -- less -- markdown -- md -- php -- rb -- sass -- txt -- xml -- textile -- bbcode -- glyph -- scss -output_dir: output -base_url: "http://www.h3rald.com" -author_name: "Fabio Cevasco" -author_email: "h3rald@h3rald.com" -dev: false
@@ -1,6 +0,0 @@
------ -permalink: "403" -title: Forbidden -type: page ------ -There's obviously nothing to see here. Go "home":/!
@@ -1,6 +0,0 @@
------ -permalink: "404" -title: Page Not Found -type: page ------ -The page you're looking for cannot be found. Try searching the "archives":/archives/, maybe you'll have better luck!
@@ -1,6 +0,0 @@
------ -permalink: "500" -title: Internal Server Error -type: page ------ -Something went wrong. Try to go back "home":/ and if things improve. If not, send a "tweet":/ to _@h3rald_ and I'll try to sort it out.
@@ -1,20 +0,0 @@
------ -permalink: about -title: About -type: page ------ -H3RALD.com was created in 2004 by Fabio Cevasco, a system architect, technical writer, programmer and IT enthusiast. It features over a hundred "articles":/archives/ covering a wide range of topics, from programming to writing, productivity and traveling. - -As of version 8, H3RALD.com is a completely static web site, except for a few AJAX calls. All the files are generated automatically thanks to the "nanoc":http://nanoc.stoneship.org/ publishing system, an ingenious creation of "Denis Defreyne":http://www.stoneship.org/. Nanoc can be used to easily create static web sites using Ruby, as explained in "this article":http://www.h3rald.com/articles/take-back-your-site-with-nanoc/. - -The following ruby libraries (gems) are used to compile this web site: - -* "nanoc":https://rubygems.org/gems/nanoc, to generate the entire web site -* "Extlib":https://rubygems.org/gems/extlib, in some custom Rake tasks -* "BB-Ruby":https://rubygems.org/gems/bb-ruby, for BBCode support -* "Builder":https://rubygems.org/gems/builder/, to create RSS and ATOM feeds -* "Less":https://rubygems.org/gems/less/, for the SASS filter -* "The Ruby Racer":https://rubygems.org/gems/therubyracer, to execute Javascript code (needed by Less) -* "RedCloth":https://rubygems.org/gems/redcloth/, for Textile support -* "RDiscount":https://rubygems.org/gems/rdiscount, for Markdown support -* "Glyph":https://rubygems.org/gems/glyph, for Glyph support
@@ -1,16 +0,0 @@
------ -permalink: archives -filters_pre: -- erb -title: Archives -type: page ------ -<div class="container article-aggregation"> -<% c = 0 -articles_by_month.each do |m| - c = c+1 %> - <%= %{<div class="row">} if c%4 == 1 %> - <div class="col-md-3"><i class="h3-lb-book-01"></i> <%= month_link_with_count(m[0], m[1].length) %></div> - <%= "</div>" if c%4 == 0 %> -<% end %></div> -</div>
@@ -1,15 +0,0 @@
------ -:title: 'Archive: April 2006' -:type: page -:filters_pre: -- erb -:permalink: april-2006 ------ - -<p>14 articles were written in <em>April 2006</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "April 2006"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: April 2008' -:type: page -:filters_pre: -- erb -:permalink: april-2008 ------ - -<p>2 articles were written in <em>April 2008</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "April 2008"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: April 2009' -:type: page -:filters_pre: -- erb -:permalink: april-2009 ------ - -<p>3 articles were written in <em>April 2009</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "April 2009"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: April 2010' -:type: page -:filters_pre: -- erb -:permalink: april-2010 ------ - -<p>2 articles were written in <em>April 2010</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "April 2010"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: April 2013' -:type: page -:filters_pre: -- erb -:permalink: april-2013 ------ - -<p>1 article was written in <em>April 2013</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "April 2013"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: April 2014' -:type: page -:filters_pre: -- erb -:permalink: april-2014 ------ - -<p>1 article was written in <em>April 2014</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "April 2014"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: August 2006' -:type: page -:filters_pre: -- erb -:permalink: august-2006 ------ - -<p>3 articles were written in <em>August 2006</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "August 2006"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: August 2007' -:type: page -:filters_pre: -- erb -:permalink: august-2007 ------ - -<p>1 article was written in <em>August 2007</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "August 2007"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: August 2008' -:type: page -:filters_pre: -- erb -:permalink: august-2008 ------ - -<p>1 article was written in <em>August 2008</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "August 2008"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: August 2011' -:type: page -:filters_pre: -- erb -:permalink: august-2011 ------ - -<p>2 articles were written in <em>August 2011</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "August 2011"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: December 2005' -:type: page -:filters_pre: -- erb -:permalink: december-2005 ------ - -<p>9 articles were written in <em>December 2005</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "December 2005"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: December 2007' -:type: page -:filters_pre: -- erb -:permalink: december-2007 ------ - -<p>5 articles were written in <em>December 2007</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "December 2007"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: December 2008' -:type: page -:filters_pre: -- erb -:permalink: december-2008 ------ - -<p>1 article was written in <em>December 2008</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "December 2008"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: December 2010' -:type: page -:filters_pre: -- erb -:permalink: december-2010 ------ - -<p>1 article was written in <em>December 2010</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "December 2010"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: December 2012' -:type: page -:filters_pre: -- erb -:permalink: december-2012 ------ - -<p>1 article was written in <em>December 2012</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "December 2012"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: February 2006' -:type: page -:filters_pre: -- erb -:permalink: february-2006 ------ - -<p>2 articles were written in <em>February 2006</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "February 2006"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: February 2009' -:type: page -:filters_pre: -- erb -:permalink: february-2009 ------ - -<p>1 article was written in <em>February 2009</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "February 2009"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: February 2011' -:type: page -:filters_pre: -- erb -:permalink: february-2011 ------ - -<p>1 article was written in <em>February 2011</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "February 2011"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: January 2006' -:type: page -:filters_pre: -- erb -:permalink: january-2006 ------ - -<p>2 articles were written in <em>January 2006</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "January 2006"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: January 2007' -:type: page -:filters_pre: -- erb -:permalink: january-2007 ------ - -<p>1 article was written in <em>January 2007</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "January 2007"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: January 2008' -:type: page -:filters_pre: -- erb -:permalink: january-2008 ------ - -<p>1 article was written in <em>January 2008</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "January 2008"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: January 2009' -:type: page -:filters_pre: -- erb -:permalink: january-2009 ------ - -<p>2 articles were written in <em>January 2009</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "January 2009"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: January 2010' -:type: page -:filters_pre: -- erb -:permalink: january-2010 ------ - -<p>1 article was written in <em>January 2010</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "January 2010"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: January 2011' -:type: page -:filters_pre: -- erb -:permalink: january-2011 ------ - -<p>1 article was written in <em>January 2011</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "January 2011"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: July 2005' -:type: page -:filters_pre: -- erb -:permalink: july-2005 ------ - -<p>1 article was written in <em>July 2005</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "July 2005"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: July 2006' -:type: page -:filters_pre: -- erb -:permalink: july-2006 ------ - -<p>4 articles were written in <em>July 2006</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "July 2006"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: July 2007' -:type: page -:filters_pre: -- erb -:permalink: july-2007 ------ - -<p>5 articles were written in <em>July 2007</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "July 2007"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: July 2008' -:type: page -:filters_pre: -- erb -:permalink: july-2008 ------ - -<p>1 article was written in <em>July 2008</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "July 2008"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: July 2009' -:type: page -:filters_pre: -- erb -:permalink: july-2009 ------ - -<p>1 article was written in <em>July 2009</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "July 2009"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: July 2011' -:type: page -:filters_pre: -- erb -:permalink: july-2011 ------ - -<p>1 article was written in <em>July 2011</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "July 2011"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: July 2014' -:type: page -:filters_pre: -- erb -:permalink: july-2014 ------ - -<p>1 article was written in <em>July 2014</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "July 2014"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: June 2005' -:type: page -:filters_pre: -- erb -:permalink: june-2005 ------ - -<p>1 article was written in <em>June 2005</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "June 2005"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: June 2006' -:type: page -:filters_pre: -- erb -:permalink: june-2006 ------ - -<p>2 articles were written in <em>June 2006</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "June 2006"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: June 2007' -:type: page -:filters_pre: -- erb -:permalink: june-2007 ------ - -<p>3 articles were written in <em>June 2007</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "June 2007"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: June 2008' -:type: page -:filters_pre: -- erb -:permalink: june-2008 ------ - -<p>4 articles were written in <em>June 2008</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "June 2008"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: June 2009' -:type: page -:filters_pre: -- erb -:permalink: june-2009 ------ - -<p>2 articles were written in <em>June 2009</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "June 2009"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: June 2010' -:type: page -:filters_pre: -- erb -:permalink: june-2010 ------ - -<p>2 articles were written in <em>June 2010</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "June 2010"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: March 2006' -:type: page -:filters_pre: -- erb -:permalink: march-2006 ------ - -<p>1 article was written in <em>March 2006</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "March 2006"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: March 2007' -:type: page -:filters_pre: -- erb -:permalink: march-2007 ------ - -<p>2 articles were written in <em>March 2007</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "March 2007"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: March 2008' -:type: page -:filters_pre: -- erb -:permalink: march-2008 ------ - -<p>2 articles were written in <em>March 2008</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "March 2008"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: March 2009' -:type: page -:filters_pre: -- erb -:permalink: march-2009 ------ - -<p>4 articles were written in <em>March 2009</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "March 2009"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: March 2011' -:type: page -:filters_pre: -- erb -:permalink: march-2011 ------ - -<p>1 article was written in <em>March 2011</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "March 2011"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: May 2006' -:type: page -:filters_pre: -- erb -:permalink: may-2006 ------ - -<p>12 articles were written in <em>May 2006</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "May 2006"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: May 2008' -:type: page -:filters_pre: -- erb -:permalink: may-2008 ------ - -<p>1 article was written in <em>May 2008</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "May 2008"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: May 2009' -:type: page -:filters_pre: -- erb -:permalink: may-2009 ------ - -<p>1 article was written in <em>May 2009</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "May 2009"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: May 2010' -:type: page -:filters_pre: -- erb -:permalink: may-2010 ------ - -<p>1 article was written in <em>May 2010</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "May 2010"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: November 2005' -:type: page -:filters_pre: -- erb -:permalink: november-2005 ------ - -<p>4 articles were written in <em>November 2005</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "November 2005"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: November 2006' -:type: page -:filters_pre: -- erb -:permalink: november-2006 ------ - -<p>1 article was written in <em>November 2006</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "November 2006"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: November 2007' -:type: page -:filters_pre: -- erb -:permalink: november-2007 ------ - -<p>3 articles were written in <em>November 2007</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "November 2007"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: November 2008' -:type: page -:filters_pre: -- erb -:permalink: november-2008 ------ - -<p>3 articles were written in <em>November 2008</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "November 2008"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: November 2009' -:type: page -:filters_pre: -- erb -:permalink: november-2009 ------ - -<p>3 articles were written in <em>November 2009</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "November 2009"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: November 2010' -:type: page -:filters_pre: -- erb -:permalink: november-2010 ------ - -<p>1 article was written in <em>November 2010</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "November 2010"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: October 2007' -:type: page -:filters_pre: -- erb -:permalink: october-2007 ------ - -<p>3 articles were written in <em>October 2007</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "October 2007"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: October 2008' -:type: page -:filters_pre: -- erb -:permalink: october-2008 ------ - -<p>1 article was written in <em>October 2008</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "October 2008"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: October 2009' -:type: page -:filters_pre: -- erb -:permalink: october-2009 ------ - -<p>2 articles were written in <em>October 2009</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "October 2009"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: September 2006' -:type: page -:filters_pre: -- erb -:permalink: september-2006 ------ - -<p>1 article was written in <em>September 2006</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "September 2006"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: September 2007' -:type: page -:filters_pre: -- erb -:permalink: september-2007 ------ - -<p>6 articles were written in <em>September 2007</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "September 2007"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: September 2008' -:type: page -:filters_pre: -- erb -:permalink: september-2008 ------ - -<p>1 article was written in <em>September 2008</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "September 2008"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: September 2009' -:type: page -:filters_pre: -- erb -:permalink: september-2009 ------ - -<p>1 article was written in <em>September 2009</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "September 2009"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: September 2010' -:type: page -:filters_pre: -- erb -:permalink: september-2010 ------ - -<p>3 articles were written in <em>September 2010</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "September 2010"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,15 +0,0 @@
------ -:title: 'Archive: September 2015' -:type: page -:filters_pre: -- erb -:permalink: september-2015 ------ - -<p>1 article was written in <em>September 2015</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "September 2015"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,562 +0,0 @@
------ -popular: true -summary: "A quick comparison of 10 non-mainstream programming languages, highlighting their main features, pros and cons. Each section contains also a list of links to get you started with a particular language." -permalink: 10-programming-languages -filters_pre: -- redcloth -title: 10 programming languages worth checking out -subtitle: A quick comparison of 10 non-mainstream programming languages -comments: -- :date: - :author: Nikhil - :url: http://kodeclutz.blogspot.com - :id: 2593 - :body: Great list. It's good to see factor getting more and more publicity, although I haven't 'got' it yet. -- :date: - :author: Dmitriy Kopylenko - :url: http://grailscrowd.com/members/dima767 - :id: 2594 - :body: No mention of Groovy. Sad... :-( -- :date: - :author: Dmitriy Kopylenko - :url: http://grailscrowd.com/members/dima767 - :id: 2595 - :body: On the other hand one might consider Groovy 'mainstream' and not so 'esoteric' -- :date: - :author: James - :url: http://jamesconroyfinn.com - :id: 2596 - :body: Great article. I was hoping to see Brainfuck and Whitespace. ;) -- :date: - :author: Foo - :url: "" - :id: 2598 - :body: |- - I like to think of Groovy as "poorly conceived". The slowness of Ruby without the elegance. - - Here's the least smart piece of text in the piece: "Unlike other Lisps (and Schemes) you may have encountered before, Clojure comes with some interesting additions:" - - Um... Common Lisp has two of those (data types, multimethods), and the other two are trivially added with macros. Clojure's cute, sort of, but Common Lisp is where most of the momentum is. -- :date: - :author: Walter Bright - :url: http://www.digitalmars.com/d/ - :id: 2599 - :body: One can also consider the D programming language, http://www.digitalmars.com/d, which is a modern systems programming language. -- :date: - :author: Chris Papadopoulos - :url: http://informationrain.com/ - :id: 2600 - :body: |+ - I've had a lot of fun lately playing around with Processing and would mention it as an alternative to programmers who want something fun to escape their normal work. Also, learning to problem solve in a visual environment instead of working with things like databases can be very stimulating. - - http://processing.org/ - - -- :date: - :author: Mitch - :url: http://softwareindustrialization.com - :id: 2601 - :body: What do you think of F#? -- :date: - :author: Tim Locke - :url: "" - :id: 2602 - :body: "Another interesting project written in Smalltalk is Scratch: http://scratch.mit.edu/" -- :date: - :author: Michael - :url: http://videotree.blogspot.com - :id: 2603 - :body: "Have a look at newLisp -- Lisp as a lighter weight scripting language. " -- :date: - :author: Jeff - :url: "" - :id: 2604 - :body: | - REBOL should be on the list. http://www.rebol.com/ - - Otherwise, it is a great list. My only real disappointment is that the "newer" versions of old standby languages are there in place of the goodies. Factor vs. Forth, Clojure vs. Lisp. While those new incarnations might breath new life into the old, I can almost guarantee that Factor will fade away, but good ol' Forth will still be around. - - Also, if you were going to put a Forth language on the list that wasn't ANS Forth, I'd have put Colorforth up there (http://www.colorforth.com/cf.html) - as least that one is made by the inventor of Forth. ;-) - -- :date: - :author: Brian - :url: http://htdp.org/ - :id: 2607 - :body: |- - Another great resource for PLT Scheme is the book How to Design Programs. Its free online at http://htdp.org/ - - My Computer Science Fundamentals class at northeastern university used PLT Scheme and that was the book which was used to teach not just the language but good design practices. - - I definitely recommend you check it out. -- :date: - :author: mgroves - :url: http://www.mgroves.com - :id: 2608 - :body: Interesting that you mention C# 1 time, and never mention VB, even though those are two languages that "pay the bills" for many, many programmers. -- :date: - :author: WebGlad - :url: http://www.webglad.com/ - :id: 2610 - :body: "Really good article. I liked this statement:\n\n\ - \xE2\x80\x9CThe most obvious common \xE2\x80\x98personality\xE2\x80\x99 characteristics of hackers are high intelligence, consuming curiosity, and facility with intellectual abstractions.\"\n\n\ - While I don't consider myself to be a hacker, I have a curiosity that I can't hamper. Sometimes it works to the detriment of my productivity. Still, it does lead me to explore articles like yours." -- :date: - :author: chomotus - :url: http://www.google.com - :id: 2611 - :body: for me J has no competition as a functional language.. -- :date: - :author: Ed Borasky - :url: "" - :id: 2614 - :body: "Most of us programmers fall into the class \"specially if 500 developers in your company already develop in C# and you don\xE2\x80\x99t, as a matter of fact, have a saying on the matter.\" A programming language needs a *compelling* advantage over the more general and widely-used ones in order to be worth studying for most of us.\n\n\ - And I find the argument that learning another language makes you a better programmer somewhat flawed. It's more the other way around -- really good programmers find it easy to learn the semantics of programming languages." -- :date: - :author: Elmer - :url: "" - :id: 2617 - :body: |- - Revolution: Is a must on this list! http://www.runrev.com - - Revolution is a programming environment you can quickly understand. Achieve immediate results with a visual, drag-and-drop interface builder. Use English, the language you already know, to describe program logic. Deploy powerful cross-platform solutions without the huge learning curve of other development environments. - - http://www.runrev.com -- :date: - :author: Glad_if_I - :url: "" - :id: 2623 - :body: |- - When you wrote that Haskell's has "Speed that rivals C and <notextile>C++</notextile>" I looked at the link that you provided and it proved you wrong. That is to say it stated that in computer processing that both C and <notextile>C++</notextile> is processes faster. While it stated that in some instances it beat C++ it did suggest that if optimization was a factor you had better write the program in C. The speed it talked about in the article was how fast it was for the programmer to write the code in Haskell than in C and <notextile>C++</notextile>. - - Now if you had stated: - "The Speed at which it takes to program something in Haskell rivals that of C and <notextile>C++.</notextile>" - - I would be okay with that but the way you stated it was misleading. It was a lie. I am not trying to be mean but when you talk about programming speed that means how fast the computer processes. Each programmer creates and edits code at their own speed. It is a subjective property of each programmer. Maybe it is easier to program in Haskell and thus faster supposedly. But the way you wrote it was misleading. - - C is the fastest language for a reason. Because it is one step above assembler which in turn is faster than C. If you are going to make statements that are a lie. Do not link to a page that disagrees with you. -- :date: - :author: pRtkL xLr8r - :url: http://www.deadpumpkin.com - :id: 2624 - :body: Why on earth isn't QuickBasic on this list??? -- :date: - :author: Mark Stock - :url: http://machete-lang.blogspot.com/ - :id: 2625 - :body: |- - No mention of my _fill_in_the_blank_ language! :( - - ;) -- :date: - :author: sam - :url: http://www.skyfly-travels.com - :id: 2626 - :body: | - Really good article. I liked this. - -- :date: - :author: sam - :url: http://www.skyfly-travels.com - :id: 2627 - :body: | - Really good one - -- :date: - :author: Christian - :url: "" - :id: 2630 - :body: |- - You may want to take a look at PowerShell. Focused on Administration of IT, but able to do so much more. - - http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx - - http://blogs.msdn.com/powershell/ -- :date: - :author: BK - :url: http://puppylinux.com - :id: 2632 - :body: | - Here's another, Genie (and Vala): - - http://puppylinux.com/genie - -- :date: - :author: Oliver - :url: "" - :id: 2635 - :body: |- - I'd second the mention of J above. I'm only starting out on it, but it's very satisfying how your initial bewilderment of the program text turns into comprehension relatively quickly. - - My language <i>du jour</i> is Mozart/Oz (http://www.mozart-oz.org). Mozart made me get to grips with Emacs just to play with the Oz Programmer's Interface (Oz is a virtual machine Mozart runs on). -- :date: - :author: Andreas Schipplock - :url: http://schipplock.de - :id: 2636 - :body: And what about Ada 2005? Ada is breathing! :) -- :date: - :author: clj - :url: "" - :id: 2637 - :body: "Alright, you've just motivated me to write the critique of Clojure (+ the annoyance with the (background) FUD against Java that sometimes accompanies Clojure.) " -- :date: - :author: Dave - :url: http://www.davidrware.com - :id: 2640 - :body: Very awesome article! I'm on Christmas vacation and was bored, looking for something to occupy my time and now I think I found something to. Thanks for the great read and hours of amusement. -- :date: - :author: Ulf Wiger - :url: http://ulf.wiger.net/weblog - :id: 2641 - :body: | - Damien Katz' article is indeed an interesting read, but it mainly addresses those already sold on Erlang. Others might perhaps first want to read http://sdtimes.com/link/33124, in which Katz explains how he threw away his <notextile>C++</notextile> based CouchDB after having played around with Erlang for a week, and then rewrote in 1.5 months what had taken him 6 months to write in <notextile>C++</notextile>. Otherwise, one could easily get the impression that Katz isn't very fond of Erlang... ;-) - -- :date: - :author: Phil - :url: http://technomancy.us - :id: 2647 - :body: "> Foo: Um\xE2\x80\xA6 Common Lisp has two of those (data types, multimethods), and the other two are trivially added with macros. Clojure\xE2\x80\x99s cute, sort of, but Common Lisp is where most of the momentum is.\n\n\ - Common Lisp's non-list compound data types are crippled because they're not composable in the same way lists are. Furthermore, only vectors have syntax literals, making the rest a huge pain do deal with. Clojure's biggest innovation was making it so you could start writing your program with lists, then swap in a more appropriate data structure for perf later without modifying any of your code.\n\n\ - Common Lisp has a lot of things, but momentum is not one of them." -- :date: - :author: PatzZ - :url: http://tutorial-net.blogspot.com/ - :id: 2651 - :body: hey you changed my mind i'll look into those future thanks -- :date: - :author: JeGX - :url: http://www.geeks3d.com - :id: 2665 - :body: |- - Nice overview! - Another programming/scripting language is <a href="http://squirrel-lang.org">Squirrel</a>. And here is a tool to play with Lua: <a href="http://www.ozone3d.net/demoniak3d/">Demoniak3D</a>. -- :date: - :author: Dan - :url: http://mayerdan.com - :id: 2678 - :body: Learning a new language is on my list as well, good list keep it up. -- :date: - :author: Michael - :url: "" - :id: 2679 - :body: What about the greatest and most serious language out there? LOLcode was totaly forgotten in this article. -- :date: - :author: Napolux - :url: http://www.napolux.com - :id: 2680 - :body: Well. If squeak is here I want also LOLcode. -- :date: - :author: botchagalupe - :url: http://johnmwillis.com - :id: 2681 - :body: Great post... -- :date: - :author: w43L - :url: http://blog.w43l.com - :id: 2682 - :body: "nice article, but who have time for learning of these languages\n\n\ - :(" -- :date: - :author: e - :url: "" - :id: 2686 - :body: |+ - yeah, leaving off J? The J community is like a parallel universe where they are quietly going about their own thing . . . undaunted by the rest of the world. You download it. You get an IDE, training materials, tons of examples, tutorials . . .access to all kinds of free, whole, books. You can make GUIs and games and 3D stuff ... - - I want to freeze time and spend like two or three uninterrupted years on J. You don't even need parameters if you don't want. Want to operate on whole matrices? Go ahead. insanely beautiful plots? http://www.jsoftware.com/ - - Also get ready for something amazing and quite entertaining at the same time in Frink: http://futureboy.homeip.net/frinkdocs/ I won't spoil the surprise. - - Try Joy to see how simple it can get, especially to get a taste of the theory. - - Clean is supposed to be fast, fast fast. - - - -- :date: - :author: Bertrand - :url: "" - :id: 2687 - :body: <a href="http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/lua/">mod_lua</a> coming to an apache server near you. -- :date: - :author: Etienne - :url: http://madariaga.wordpress.com - :id: 2688 - :body: |- - Nice article. - - One of the things I find useful when looking for a new language to learn, is having a quick glance at its syntax. I know if I don't like how its code _looks_ I won't like the language. If I am interested by it, I might give some more insight to a particular language. -- :date: - :author: David - :url: http://www.autohotkey.com - :id: 2689 - :body: I think you missed Autohotkey.com which is excellent for its purpose. -- :date: - :author: Astor - :url: "" - :id: 2693 - :body: "Even if it's not really a \"functionnal paradigm oriented\" programming language, you should definitively take a look at \"the D programming language\" : http://www.digitalmars.com/d/ . It kind of tries to compell with C/C++ for system programming (yep inline assembly code is possible), but also offer some nice features as far as concurrency is concerned, like \"pure\" keyword for functions or shared/unshared global state for multithreaded operations." -- :date: - :author: MAK - :url: "" - :id: 2707 - :body: |- - Hello, I wanted to communicate with you via email, but the email link on your floating menu uses a mailto mechanism and since I'm under OpenBSD with no mailto link set in Firefox, I'm unable to get through to you (I even tried viewing source :-) - - Could you please write back to me on the email address mentioned in this post? - - Thanks. -date: 2008-12-21 15:01:15 +01:00 -tags: -- programming -type: article -toc: true -intro: | - If you program for fun or profit, chances are that you know C, C++, Java, PHP, Perl, Python or Ruby. These programming languages are all widely known, and, to a different degree, used in commercial applications. At least some of them can safely be considered _mainstream_, even if that word has become so overused and misused that has almost lost its original meaning, if it ever had one. - -extended_intro: | - If you are earning your living by coding, it's often one of these languages that pays the bills. Nevertheless, true hackers frequently meander in other directions, exploring and discovering different paradigms and methodologies, sometimes to the most "esoteric":http://esolangs.org/wiki/Main_Page extremes. ------ - -bq. — This article has been translated into <a href="http://science.webhostinggeeks.com/10-programskih-jezika">Serbo-Croatian</a> by ??<a href="http://webhostinggeeks.com/">Web Geeks</a>?? — - -bq. — This article has been translated into <a href="https://www.homeyou.com/~edu/10-linguagens-de-programacao">Portuguese</a> by ??<a href="https://www.homeyou.com/~edu/">Artur Weber</a>?? — - -If you program for fun or profit, chances are that you know C, C++, Java, PHP, Perl, Python or Ruby. These programming languages are all widely known, and, to a different degree, used in commercial applications. At least some of them can safely be considered _mainstream_, even if that word has become so overused and misused that has almost lost its original meaning, if it ever had one. - -If you are earning your living by coding, it's often one of these languages that pays the bills. Nevertheless, true hackers frequently meander in other directions, exploring and discovering different paradigms and methodologies, sometimes to the most "esoteric":http://esolangs.org/wiki/Main_Page extremes. - -bq. "The most obvious common 'personality' characteristics of hackers are high intelligence, consuming curiosity, and facility with intellectual abstractions. Also, most hackers are 'neophiles', stimulated by and appreciative of novelty (especially intellectual novelty). Most are also relatively individualistic and anti-conformist." - -p((((. – Eric S. Raymond, ??"The Jargon File":http://catb.org/jargon/html/personality.html?? - -Even if you're particularly devoted to one of the languages mentioned above, it is normal to be curious about what else is out there. As the end of the year approaches, I find myself thinking about learning – or at least become acquainted with – some less known, more experimental, programming languages. -I was originally planning on learning another programming language as a New Year's Resolution, which is quite common among programmers. The most difficult task turned out to be _choosing_ a particular language: there are so many out there which makes it very hard to decide. - -This article deals with ten possible candidates, and it's far from being an exhaustive list. The programming languages described henceforth are very different from each other, but they all have one thing in common: they all stimulate my curiosity in their own, very different ways. - -h3(#haskell). Haskell - -I tried to learn Haskell in the past. Quietly, I started diving into the multitude of articles, tutorials, overviews and even books about this fascinating academic language which claims to achieve functional purity though remaining extremely useful, practical and efficient. Sadly, I'm still not able to fully grasp some of its most crucial concepts, such as "monads":http://en.wikibooks.org/wiki/Programming:Haskell_monads, but this still doesn't put me off _wishing_ to learn the language. - -If you've never enountered Haskell before, I find "The Evolution of a Haskell Programmer":http://www.willamette.edu/~fruehr/haskell/evolution.html an amusing and informative read. Although aiming to be humorous in a way, it serves a very important didascalic purpose: it is one of the most complete collections of the different paradigms and programming approaches Haskell allows. - -Besides its very elegant, pragmatic and almost-magical syntax, what really intrigues me about this language is what it offers, in terms of features: - -* 9 different "implementations":http://www.haskell.org/haskellwiki/Implementations (multiple compilers _and_ interpreters) -* Countless "standard libraries":http://haskell.org/ghc/docs/latest/html/libraries/ "packages":http://hackage.haskell.org/packages/archive/pkg-list.html which can be used to solve _any_ programming challenge -* Abundant "learning material":http://www.haskell.org/haskellwiki/Books_and_tutorials -* "Speed":http://www.haskell.org/haskellwiki/Why_Haskell_matters#The_speed_of_Haskell that rivals C and C++ -* Very mature cross-platform compatibility - -The catch? It is likely to be very different from any other language you might have encountered before, and that's probably the reason why some people find it difficult to learn and master. That being said, if you are looking for a challenging (but very rewarding, I believe) New Year's Resolution, you should definitely go for this. - -h4. To get you started... - -* "Official Haskell Wiki":http://www.haskell.org/ -* "Haskell Wikibook":http://en.wikibooks.org/wiki/Haskell -* "Real World Haskell":http://book.realworldhaskell.org/read/index.html -* "37 Reasons to Love Haskell":http://cdsmith.wordpress.com/2007/07/29/37-reasons-to-love-haskell-playing-off-the-ruby-article/ -* "Haskell for the Ruby Guy":http://antoniocangiano.com/2007/03/13/haskell-eye-for-the-ruby-guy/ -* "A-Z of Programming Languages: Haskell":http://www.techworld.com.au/article/261007/-z_programming_languages_haskell -* "Learn you a Haskell for Great Good!":http://learnyouahaskell.com/ -* "Haskell Hacking":http://cgi.cse.unsw.edu.au/~dons/blog/2008/05/16 - -h3. Erlang - -"Erlang":http://erlang.org/ is a concurrent programming language originally developed by Ericsson for their real-time applications. It goes without saying that with these premise, Erlang seems the most natural answer to all concurrency problems you may encounter in your life as a programmer. -Developing with concurrency in mind feels natural and easy in Erlang, and the performance of Erlang-powered systems can be unmatched. - -Quite a few interesting applications have been developed in this language, such as: - -* "CouchDB":http://couchdb.apache.org/, a popular distributed, document-oriented database -* "Yaws":http://yaws.hyber.org/, a high-performance web server -* even "Facebook Chat":http://www.facebook.com/note.php?note_id=14218138919&id=9445547199 - -The price Erlang adepts have to pay, as Damien Katz (CouchDB creator and Erlang enthusiast) "points out":http://damienkatz.net/2008/03/what_sucks_abou.html, is: - -* Awkward syntax, inspired by Prolog -* Weird if expressions -* Difficult string operations -* No classes or namespaces - -...this list could go on. Damien's article is an interesting read, enough to put anyone off learning the language if read superficially. On the other hand, it provides an invaluable resource for newcomers who wish to be prepared before taking on the challenge of learning Erlang to build their next scalable, concurrent and industry-proof application. - -h4. To get you started... - -* "Official Erlang Web Site":http://www.erlang.org/ -* "An Introduction to Erlang":http://www.onlamp.com/pub/a/onlamp/2007/09/13/introduction-to-erlang.html -* "Erlang Style Concurrency":http://www.defmacro.org/ramblings/concurrency.html -* "PlanetErlang":http://www.planeterlang.org/ -* "Erlang Projects":http://www.erlang-projects.org/ - -h3(#io). Io - -"Io":http://iolanguage.com/ is a relatively new programming language by Steve Dekorte which recently surfaced from Google's oblivion (if you tried googling for it a few months ago, you couldn't event find its home page) thanks to a short vut stimulating "article":http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html by "_why":http://whytheluckystiff.net/. It doesn't have the best name for a programming language, that's for sure, but it's definitely a breath of fresh air in terms of the way it works. - -Its unusual, minimalist and yet elegant and powerful syntax reminds of Smalltalk, but the language goes far beyond that. Io is an object-oriented, prototype-based, message-based and fully-reflective programming language. This means that you use messages like in Smalltalk, you create objects like in Javascript and every bit of your code can be inspected and passed around as you see fit. - -If you think Ruby allows fancy (and potentially dirty) tricks like metaprogramming and monkey-patching, Io takes this to a whole different level, imposing virtually no limitation to the programmer. What's truly amazing is that its grammar and syntax are so minimal that you can learn them in literally 10 minutes. After that, you can start experimenting, first with its extremely small core and then with its extension libraries and bindings. - -Io has indeed a lot of potential. Granted, it's still young and under development, but also already quite efficient and suitable for real-world tasks demanding high speed and concurrency. It is implemented in C, but Ola Bini started to design a similar language called "Ioke":http://kenai.com/projects/ioke/ for the Java Virtual Machine. - -h4. To get you started... - -* "Official Io Web Site":http://iolanguage.com/ -* "Io Repository on Github":http://github.com/stevedekorte/io/tree/master -* "Io user group":http://tech.groups.yahoo.com/group/iolanguage/ -* "Io has a very clean mirror":http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html -* "Io Notes":http://iota.flowsnake.org/ -* "Io Language Notes":http://wiki.type-z.org/index.php/Io/IoLanguage -* "Blame it on Io! A slow-paced introduction to the Io language":http://ozone.wordpress.com/2006/03/15/blame-it-on-io/ -* "Io Wikibook":http://en.wikibooks.org/wiki/Programming:Io - -h3(#plt-scheme). PLT Scheme - -I stumbled upon the "PLT Scheme web site":http://plt-scheme.org/ while browsing for different Lisp flavors about a year ago. At the time, I was determined to learn the rudiments of Lisp and I started reading a few articles and books on this old and yet still popular language. -Although I was originally put off by certain Common Lisp literature, which dismissed Scheme as an almost-heretic attempt to revitalize an venerable language, I soon found out that Scheme – and PLT Scheme in particular – is definitely worthy of attention and interest. - -Being a technical writer, I immediately became fond of the "PLT Scheme Guide":http://docs.plt-scheme.org/guide/, one of the clearest and most well-organized examples of documentation available for a programming language I've ever come across. -The manual is exquisitely crafted as a Getting Started Manual and a Reference Book at the same time, though remaining pleasant to read sequentially: a rare trait in technical documentation. Best of all, it's free: you simply have no real excuse not to read it. - -Besides its excellent documentation, PLT Scheme feels like a fresh and modern implementation of one of the two most important dialects of Lisp. It's cross-platform, it has an extensive "collection of packages":http://planet.plt-scheme.org/ and a very active community behind it. -After my first attempt to learn Haskell, I felt compelled to try out PLT Scheme and it immediately felt much easier and more user friendly to learn, partly because of "DrScheme":http://download.plt-scheme.org/drscheme/ a dedicated IDE/learning tool optimized to get you started and feel comfortable with the language. -Caveats? None, unless you have an adversion for parenthesis, that is. - -h4. To get you started... - -* "Official PLT Scheme Web Site":http://plt-scheme.org/ -* "PLT Scheme Guide":http://docs.plt-scheme.org/guide/index.html -* "PLaneT":http://planet.plt-scheme.org/ -* "Quick: An Introduction to PLT Scheme with Pictures":http://docs.plt-scheme.org/quick/ -* "More: Systems Programming with PLT Scheme":http://docs.plt-scheme.org/more/ - -h3(#clojure). Clojure - -"Clojure":http://clojure.org/ is the most recent and notable attempt to bring Lisp back to life and ready to face the challenges posed to IT systems by the new century: concurrency and scalability. Because it runs on the Java Virtual Machine, you also get Java interoperability for free, in a more Lispy flavour. Although I'm a bit reluctant to deal with anything related to Java nowadays, Clojure's approach makes it more appealing. - -Unlike other Lisps (and Schemes) you may have encountered before, Clojure comes with some interesting additions: - -* "Multimethods":http://clojure.org/multimethods -* "Agents asynchronous actions":http://clojure.org/agents -* Some interestings "special forms":http://clojure.org/special_forms -* Many pre-built "data structures":http://clojure.org/data_structures, like Vectors, Maps, Sets, Collections, ... - -Despite all this, Rich Hickey became increasingly popular both in the Lisp and Java world for creating such an interesting and well-designed language. Unlike with many new (and old) programming languages, I have yet to find a single blog post or article which is seriously criticizing Clojure in any way. - -h4. To get you started... - -* "Official Clojure Web Site":http://clojure.org -* "Clojure User Group":http://groups.google.com/group/clojure -* "Clojure presentation on InfoQ":http://www.infoq.com/presentations/hickey-clojure -* "Trying Clojure":http://netzhansa.blogspot.com/2008/10/trying-clojure.html -* "My first look at Clojure":http://groups.google.com/group/clojure/msg/f038decc18c7da37 -* "Enclojure":http://enclojure.net/Index.html - -h3(#squeak). Squeak - -"Squeak":http://www.squeak.org/ has become one of the most popular Smalltalk implementations available. It has been used in some very interesting projects: - -* "EToys":http://wiki.laptop.org/go/Smalltalk_Development_on_XO, a kids-oriented but powerful development environment built in Squeak, was included as part of the educational sofware suite of the "OLPC":http://www.laptop.org. -* "Seaside":http://www.seaside.st/ is a modern and very productive web framework running on Squeak. -* "Croquet":http://www.croquetproject.org/index.php/Main_Page is a development solution to build complex, multi-user virtual worlds. - -If you ask "Randal Schwartz":http://www.stonehenge.com/merlyn/, he'll explain you "why":http://www.infoq.com/articles/smalltalk-comeback-schwartz Squeak and Smalltalk are at least worth a look. Personally, while I'm attracted by Smalltalk's unique approach to programming and its friendly syntax, I am still a bit overwhelmed by the way it works. -Squeak, and Smalltalk in general, runs inside (literally) a virtual machine written in Squeak itself. This means that: - -* You write your code inside Squeak -* You debug, inspect and interact your code inside squeak -* You run your code inside Squeak -* You can install Squeak on virtually any platform, including mobile phones, fairly easily - -Everything lives inside Squeak. It's very weird to picture this without actually trying it, so I suggest you "download it":http://www.squeak.org/Download/ and give it a try: it will definitely be an unusual but intriguing experience. - -Smalltalk takes programming to a whole different level, which is simply unimaginable for other languages. In return, it asks you to fully embrace the Smalltalk way of doing things, according to which external text editors, external version control systems and other common tools familiar to traditional programmers simply loose their purpose. - -h4. To get you started... - -* "Official Squeak Web Site":http://www.squeak.org/ -* "Squeak by Example":http://squeakbyexample.org/ -* "SqueakLand":http://www.squeakland.org/ -* "Ruby's Roots: Smalltalk Comeback and Randal Schwartz on Smalltalk":http://www.infoq.com/articles/smalltalk-comeback-schwartz -* "FLOSS Weekly 29: Dan Ingalls":http://twit.tv/floss29 - -h3(#ocaml). OCaml - -Like Smalltalk, "OCaml":http://caml.inria.fr/ has been getting more attention recently than in the past. Sure, not everyone is planning to learn is these days, but after reading "this article":http://enfranchisedmind.com/blog/2008/04/14/useful-things-about-static-typing/ I admit I was eager to give it a proper try. - -Despite being statically typed, OCaml offers some of the features which are common in dynamically typed languages like Ruby, such as duck typing, the possibility of creating Domain-Specific Languages and even extending the language syntax with custom operators and constructs. - -Additionally, the "OCaml Batteries Included":http://batteries.forge.ocamlcore.org/ project was created as an attempt to bundle a standard set of commonly-used library together with the language core. Even if this project is still in alpha stage, it definitely "looks promising":http://dutherenverseauborddelatable.wordpress.com/2008/11/07/a-taste-of-ocaml-batteries-included/. - -h4. To get you started... - -* "Official Caml Web Site":http://caml.inria.fr/ -* "Objective Caml Tutorial":http://www.ocaml-tutorial.org/ -* "A Concise Introduction to Objective Caml":http://www.csc.villanova.edu/~dmatusze/resources/ocaml/ocaml.html -* "The OCaml Alliance Network":http://wiki.cocan.org/ -* "OCaml News":http://ocamlnews.blogspot.com/ -* "OCaml Batteries Included":http://batteries.forge.ocamlcore.org/ - -h3. Factor - -"Factor":http://factorcode.org/ is to Forth what "Clojure":http://clojure.org is to Common Lisp: a reincarnation of an ancient language in a more modern and practical form. In the specific case, although it borrows from Lisp and Self as well, Factor retains the main characteristics of its ancestor: it's stack-based, concatenative and has postfix notation. -While this is enough to put some people off, if you digg deeper you'll discover that Factor offers all the most important features available in contemporary programming languages: garbage collection, dynamic typing, an object system, ... they're just presented in a very different way: - -bq. "Learning Factor is tough. One reason for this is that Factor is very different from other programming languages. Programmers today are used to imperative programming languages where data is stored and passed around in named variables (or function calls, which name their variables). Factor is the opposite of this. A lot of code tends to be written in a functional style, and even more jarringly, variables are rare, only referenced in a small fraction of words. Nobody intends to change any of this; it's a feature, not a bug!" - -p(((. – Daniel Ehrenberg, ??"Learning Factor":http://useless-factor.blogspot.com/2008/01/learning-factor.html?? - -Like Haskell, Factor demands a completely different programming approach to what you may be used to, but once you get past that, it can be as useful as any other language, if not more. The "Furnace":http://docs.factorcode.org/content/article-furnace.html web framework, which powers the "Concatenative":http://concatenative.org/ wiki, is entirely built in Factor and runs on top of a Factor web server. - -h4. To get you started... - -* "Official Factor Web Site":http://factorcode.org/ -* "Factor on the Concatenative Wiki":http://concatenative.org/wiki/view/Factor -* "Factor Documentation":http://docs.factorcode.org/ -* "Learn Factor":http://learnfactor.org/ -* "Planet Factor":http://planet.factorcode.org/ - -h3(#lua). Lua - -"Lua":http://www.lua.org/ ("Moon" in Portuguese), is a lightweight and fast scripting language which can be easily embedded in other systems. Compared to the other languages mentioned in this article, it is definitely the less alien of the lot: if you know a tiny bit of C or Java, you'll be able to understand (and possibly write) 80% of Lua code without reading a single line of its documentation. - -Despite its simplicity, Lua is considered a multi-paradigm language supporting imperative, functional and even object-oriented approaches. More specifically, Lua's _tables_ provide a simple but powerful way to create arrays, hashes and even classes (or better, prototypes). Simple (and multiple) inheritance is achieved through _metatables_, which allow calls to undefined functions to be _transferred_ to parent tables. - -Lua programs are not interpreted in the traditional way: they are compiled to bytecode and then executed in the Lua Virtual Machine. As a result, Lua code tends to be executed much faster than other interpreted languages, so fast that "as fast as Lua" has become a proverbial expression. -Lua found its niche in embedded applications and games development, basically everywhere there's the need to provide a fast scripting language which is also very easy to learn and extend with C or other languages. - -h4. To get you started... - -* "Official Lua Web Site":http://www.lua.org/ -* "Lua Manual":http://www.lua.org/manual/ -* "Lua-users":http://lua-users.org/ -* "Learning Lua":http://icculus.org/~theoddone33/lua/ -* "Lua for Beginners":http://lua.gts-stolberg.de/en/index.php?uml=1 - -h3(#scala). Scala - -You may not be happy to see "Scala":http://www.scala-lang.org/ in this list instead of other very valid and equally powerful languages for the Java Virtual Machine such as "Groovy":http://groovy.codehaus.org/. While there was no doubt on whether Clojure should have been included or not, I was a bit hesitant to include Scala. In the end, I chose to do so simply because Scala fits better in this list than other languages: as you should have noticed by now, I am somehow more inclined to learn functional languages as opposed to their object-oriented counterparts. - -Scala is both object oriented and functional. It offers the best of both worlds: classes, traits and mixins which may be familiar to OOP lovers but also anonymous functions, currying and pattern matching which may please Haskell enthusiasts. Additionally, it's also compatible with Java: so if you use Java for work, trying out Scala for pleasure is definitely the most logical next step, especially if you want to experiment with functional programming in the meantime. - -Compared to learning a fully-functional (no pun intended) language like Haskell, Clojure or PLT Scheme, learning Scala is definitely easier and will feel less alien. - -h4. To get you started... - -* "Official Scala Web Site":http://www.scala-lang.org/ -* "The Case for Scala":http://blogs.zdnet.com/Burnette/?p=690 -* "Scala Wiki":http://scala.sygneca.com/ -* "Learning Scala with Project Euler":http://grok-code.com/75/learning-scala-with-project-euler/ -* "Roundup: Scala for Java Refugees":http://www.codecommit.com/blog/scala/roundup-scala-for-java-refugees - -h3. Epilogue - -There are so many interesting programming language out there that it's very hard to keep track of all of them. I hope this list can aid you in the right direction, whichever it may be. -Some people may debate over the very essence of this article: why _choosing_ a programming language? Why spending time and energy in a task which may lead to a lot of confusion in your mind and lead you nowhere? What's the purpose of learning something which may feel totally alien to you? - -A programming language is ultimately just a tool to get your job done. If you have to write an end-user, desktop GUI application which will always run on Windows and which needs to inteface with Microsoft technologies, you'll choose C# over Haskell, there's no doubt about that. Especially if 500 developers in your company already develop in C# and you don't, as a matter of fact, have a saying on the matter. - -But what if you _could_ choose? What if you wanted to develop your own geeky command line application to automate a particular task for yourself, and not because someone else tells you to do so? Would you be willing to experiment with something totally different and potentially difficult just for the sake of learning new things? - -If the answer is yes, then you should take a look at this list again. Not now, maybe not this month or this year, but when you feel the time is right, and give one of these languages a shot. It may not end well (so far I attempted to learn Haskell twice, with no luck), but I promise you it will be worthwhile, in the long run. -If you already mastered some of these languages already, or even all of them, be assured that they're plenty out there ready to be discovered and open your mind even more. Or, if you prefer, there are a lot of minds out there which may need guidance in learning and discovery. Help them. Write articles, tutorials, books, educate and evangelize: ultimately, that will be your greatest reward.
@@ -1,496 +0,0 @@
------ -subtitle: "Ten possible reasons to learn the Ruby Programming Language" -popular: true -permalink: 10-reasons-to-learn-ruby -filters_pre: -- erb -- redcloth -title: "10 Reasons to Learn Ruby" -comments: -- :date: 2007-09-05 17:33:43 +02:00 - :author: Joel Moss - :url: http://joelmoss.info - :id: 48 - :body: "Great article! It just explains perfectly why Ruby is starting to take over my life. And why Rails makes CakePHP look like a very weak wannabe. But I don't blame Cake (I use it every day); it's PHP's fault. " -- :date: 2007-09-05 22:55:39 +02:00 - :author: paddy3118 - :url: http://paddy3118.blogspot.com - :id: 49 - :body: |- - No mention of maintenance or testing? - - Now you have learnt Ruby, would you defend being able to write code where the indentation is contrary to the code structure? - - - Paddy. -- :date: 2007-09-06 01:07:22 +02:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com/ - :id: 50 - :body: "@Joel: Glad you discovered Ruby! Good luck!\n\n\ - @Paddy: You're right. I should have mentioned at least testing. I updated the article (Reason #1) to at least mention Test::Unit. And yes, as a matter of fact since I've been using Ruby my code indentation definitely makes more sense. You seem to be a Python enthusiast, from your site at least: sorry about the silly remark about Python's indentation in my article... I just couldn't resist (but I did added an interesting note about Python's indentation in the notes too). " -- :date: 2007-09-06 07:57:41 +02:00 - :author: Chris - :url: "" - :id: 51 - :body: Thanks so much for this. I've been teaching myself to program for several months now with Ruby, and this very much helped me put things I've learned into context. -- :date: 2007-09-07 03:14:21 +02:00 - :author: Frank Spychalski - :url: http://amazing-development.com - :id: 53 - :body: |- - Very nice writeup. I totally agree. - - There's only one thing I really hate about Ruby: it made me realize how bad the other languages are and took a lot of fun out of the "normal" software development. - - Right now I have to code PHP (BTW, Joel is 100% correct, CakePHP is a pretty good framework and makes working with PHP bearable) and more than a few times every day I would like to puke because the language sucks. -- :date: 2007-09-07 05:17:27 +02:00 - :author: Masklinn - :url: "" - :id: 54 - :body: "> Interactive Shell: the Interactive Ruby Shell can be used to test Ruby code instantly, similar to the Python console. - Similar, but much much worse. The Python consoles (both CLI launched by typing \"python\" and the IDLE environment) are more flexible, more practical and much less annoying than IRB (I suppose that's what you were talking about) - > Unfortunately this means that you won't be able to write your whole program in a single line of code, like the C++ folks - that'ss too bad, isn't it? - In reality, you can. The statement terminator (in both Ruby and Python) is either a newline or \";\". - So you can write your whole Ruby program on a single line, I think (you'd need to use parens to define functions, but it can be done. - > Everything is an object, as it should be - I think you should use examples with things that aren't objects in \"popular\" languages, such as integers or booleans, or even 'nil'. Strings aren't object in PHP because PHP barely has objects, so it's not really fair. - > Everything has a value - You should emphasize that point by showing that e.g. if/else blocks return a value. - > the value of the last assignment will always be returned. - Didn't you mean \"the last value evaluated\" or \"the value of the last expression\"? Because you definitely aren't limited to assignments. - > You can do the same thing in PHP as well, but most people don't really use the function. - Because it's ugly, hackish, and since you create functions by providing strings there is no syntax checking before runtime itself." -- :date: 2007-09-07 05:44:24 +02:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 55 - :body: "@Masklinn: Thanks a lot for your comment. I updated the article where necessary!" -- :date: 2007-09-08 01:33:10 +02:00 - :author: Kookoolen - :url: "" - :id: 56 - :body: |- - Nice article. - - For feature #4, you should add that even nil is an object. Try nil.to_i for example. - - Moreover you can open NilClass and add your own methods ! Rails does so to add debugging information when you called a method on nil. -- :date: 2007-09-08 01:39:37 +02:00 - :author: IronRuby - :url: http://ironruby.blogspot.com - :id: 57 - :body: |- - - Hi, - - Nice and happy to see your 10 Reasons added to "10 another advantages":http://ironruby.blogspot.com/2007/09/many-reasons-to-fall-in-love-with.html on a blog that is based on IronRuby. - - The Author claims 10 + 10 Advantages as 100 rather tan 20. - - Happy Reading there. -- :date: 2007-09-08 10:35:28 +02:00 - :author: FlySwat - :url: "" - :id: 60 - :body: | - So ruby has all of the features that C# has, except that its slower. - - Cool! - -- :date: 2007-09-10 01:28:59 +02:00 - :author: Shantanu - :url: "" - :id: 61 - :body: Have you taken a look at Scala, or Erlang? -- :date: 2007-09-11 13:06:50 +02:00 - :author: Steffen - :url: http://www.ruzee.com - :id: 62 - :body: |- - Correction for #8: - - The syntax for hash initializers is - - { :key1 => value1, :key2 => value2, ... } - - ('=>' instead of just '=') - - ... -- :date: 2007-09-11 15:19:16 +02:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 63 - :body: |+ - @Shantanu: I am now, they sound interesting actually. - - @Steffen: You're 100% right. This was due to the fact that I accidentally stripped all the > symbols out of the article when I converted it from BBCode to Textile. Thanks! - -- :date: 2007-09-11 16:13:25 +02:00 - :author: Erik Ordway - :url: "" - :id: 64 - :body: |- - The thing that everyone always seems to forget about XML is that it was never meant to be read/written buy humans. It was and is meant to be a cross language/platform transport methodology. It is easy process on each end without having to dealt with things like big and small endingness , line feed and carriage returns in files, and crap like that. The core of it is that if you personally are reading or writing XML then you are doing something wrong. Ant on java being a classic exampl, it was not even valid xml. - All that said I love Ruby too. -- :date: 2007-09-11 23:47:36 +02:00 - :author: !binary | - 5pel - - :url: "" - :id: 66 - :body: !binary | - 5pel77yM5oiR6YO955yL5LiN5oeC - -- :date: 2007-09-12 04:19:26 +02:00 - :author: jim - :url: "" - :id: 67 - :body: And make sure to read through resources such as http://snippets.dzone.com/tag/ruby as well. A real time saver from time to time! -- :date: 2007-09-12 20:11:38 +02:00 - :author: wayne - :url: "" - :id: 68 - :body: !binary | - 5oiR5LqG6KejcnViee+8jOS9huaYr+eci+WujOWQjuaIkeWGs+WumuW8gOWn - i+WtpuS5oHJ1Ynk= - -- :date: 2007-09-14 07:24:57 +02:00 - :author: Josh S. - :url: http://www.fireandknowledge.org - :id: 70 - :body: |- - Very interesting -- makes me more interested in Ruby than I've ever been. - - BTW, your PHP number example is missing semicolons. -- :date: 2007-09-14 09:21:16 +02:00 - :author: wefwefwef - :url: "" - :id: 72 - :body: |- - 10 reasons to NOT learn ruby: - - 1. It's Shit - 2. It's Shit - 3. It's Shit - 4. It's Shit - 5. It's Shit - 6. It's Shit - 7. It's Shit - 8. It's Shit - 9. It's Shit - 10. It's Shit -- :date: 2007-09-14 12:15:41 +02:00 - :author: Anders Persson - :url: "" - :id: 73 - :body: | - Still Java and C# have nice built-in GUI handling, and i don't have to download a lot of package like TCL/TK. - Ok Ruby like other language is nice, but for people like me that have to develop GUI-apps from time to time Java and C# still is my choice. - - I was looking into Ruby, and it is nice but... - Maby the language expands in the future. - -- :date: 2007-09-15 01:06:37 +02:00 - :author: Anon - :url: "" - :id: 74 - :body: |+ - Do I smell Blub programmers in the previous two comments? - -- :date: 2007-09-16 12:23:53 +02:00 - :author: Anders Persson - :url: "" - :id: 83 - :body: | - Hmm start to get old, i don't know what a Blub is, - But i guess it some one don't like eg Ruby. - I can't talk for others, just for me. - I like the syntax, and the language - I have written a script to build my company software on Windows, looked a Perl as i have worked with before but thout that i could be nice to test Ruby, and it did a great jobb, easy to read etc. - But to start using it as regular no 1 language i still missing easy GUI stuff like in Java. - Maby you thing i am a "Blub" if so okej a put it on my card *smile* - // Anders - -- :date: 2007-09-17 15:13:43 +02:00 - :author: Fielding Feng - :url: "" - :id: 84 - :body: 10 reasons that describe in this article are either already exist in Java, or not very useful to me. Except the unless condition. -- :date: 2007-09-24 20:28:57 +02:00 - :author: toby - :url: "" - :id: 89 - :body: |- - Python, en, i like it. - Ruby, nothing -- :date: 2007-10-07 13:32:09 +02:00 - :author: riffraff - :url: http://www.goto10.it - :id: 100 - :body: | - good list, but a detail: lambda is a method, not a keyword :) - >> Kernel.method :lambda - => #<Method: Kernel.lambda> - -- :date: 2007-10-23 13:04:15 +02:00 - :author: el_vartauy - :url: "" - :id: 105 - :body: |- - good list, but... why if you don't like the python indentation problems, you prefer yaml over xml? - i think a handy built in method is not enough? - good luck! -- :date: 2008-04-07 08:44:15 +02:00 - :author: http://prayas.blogvis.com/ - :url: "" - :id: 228 - :body: |- - liked your article and visitors arguments. - Ruby rockssssss. -- :date: - :author: kraig - :url: "" - :id: 453 - :body: ruby is so cool, i love it as well! -- :date: - :author: "Arya A. " - :url: http://asemanfar.com - :id: 455 - :body: |- - To those bashing Ruby without giving real reasons: you're not really accomplishing anything by posting. - - @el_vartauy YAML is especially good for configuration files because it makes it really easy to edit/read. As for using XML or YAML for data transfer, you're actually probably better off using JSON because XML tends to be larger in byte size and YAML isn't as supported as JSON or XML. And you should note that even Google, software engineer giant, decided XML wasn't right for their usage and developed Protocol Buffers (and recently open sourced it). - - @Masklinn More of a question than anything: What are the annoyances of IRB that Python interactive console lacks? -- :date: - :author: alan - :url: "" - :id: 456 - :body: |- - @flyswat: so C# has all the features of C++, except that its slower. Since you're probably a microsharft fan, try ironruby and get essentially the same speed. - - @fabio: you can do ruby deployment as easily as php deployment with phusion passenger. -- :date: - :author: postmodern - :url: http://houseofpostmodern.wordpress.com/ - :id: 479 - :body: |- - Nice article, it summarizes many of the things that I use in everyday work. - - I'd suggest covering the Range class and the methods in Enumerable (such as each/map/select/inject/find/sort). Maybe talk about the other cool things you can do with blocks (aka closures). These tools have made solving projecteuler.net problems a cake walk. - - 5.times { puts "oooh yeah" } - - 5.downto(0) { |i| - puts "t - #{i} minutes, until launch" - sleep 60 - } - - (1..10).to_a - => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - - (1..10).map { |i| i * i } - => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] - - (1..10).select { |i| i % 2 == 0 } - => [2, 4, 6, 8, 10] - - (1..100).inject { |sum,i| sum + i } - => 5050 - - (1..1000).to_a.reverse.find { |i| i % 11 == 0} - => 990 - - Also, might want to give a shout-out to Ruby 1.9.1, which is due to be released in 1.5 months. I'm currently using Ruby 1.9.1-preview1 for projecteuler.net stuff, it's byte-code VM is quite fast. - - As for the other comments that I noticed, it appears that other languages have some angry trolls. Not a language/community feature I'm really interested in. -date: 2007-09-05 12:40:00 +02:00 -tags: -- ruby -type: article -toc: true -intro: | - I discovered Ruby fairly recently, through the excellent Ruby on Rails framework. Although I don't consider myself a Ruby expert by any means, I read the PickAxe[2], I've coded a few utilities for my personal use in Ruby and I'm currently developing with Rails during my free time. -extended_intro: | - Ruby is currently my programming language of choice; I started off with Turbo Pascal in high school, discovered C and C++ at university, did my thesis in Java and learned PHP from scratch because I wanted to learn how to make websites quickly and easily. I guess I feel compelled to code sometimes, more as a form of entertainment than anything else. Rather dissatisfied with what I tried language-wise, I was determined to start learning either Python or Ruby. I chose the latter because I didn't want incorrect indentation to break my code, and here I am, heaping praise upon it. ------ -h3. Preamble - -I discovered Ruby fairly recently, through the excellent Ruby on Rails framework[1]. Although I don't consider myself a Ruby expert by any means, I read the PickAxe[2], I've coded a few utilities for my personal use in Ruby and I'm currently developing with Rails during my free time. - -Ruby is currently my programming language of choice; I started off with Turbo Pascal in high school, discovered C and C++ at university, did my thesis in Java and learned PHP from scratch because I wanted to learn how to make websites quickly and easily. I guess I feel compelled to code sometimes, more as a form of entertainment than anything else. Rather dissatisfied with what I tried language-wise, I was determined to start learning either Python or Ruby. I chose the latter because I didn't want incorrect indentation to break my code[3], and here I am, heaping praise upon it. - -There are plenty[4] of introductions, tutorials, articles and essays of different sorts which aim to guide the novice and advise the guru on how to get the most out of Ruby. This article, however, is not one of them. - -It's more of a modest, humble, and incomplete list of a few reasons which may (or may not) entice you to use Ruby or at least play with it a bit. A word of caution: if you are using another programming language for work or whatever, don't complain to me if you don't want to use it anymore - that's exactly what happened to me, but luckily, it didn't matter. Ruby is a very beautiful and elegant language, but like all things of this sort, it may well poison your mind and corrupt your soul... - -You have been warned. -h3. Why learn Ruby? - -h4. #1 - You get all the treats without the tricks - -Ruby borrows from all the best programming languages out there, from smalltalk to Java, Perl to Python[5]. Basically, here's the features and functionalities Ruby gives you which you may have seen elsewhere: - -* _Exceptions:_ Believe it or not, exceptions are one of the most important things to master when developing any kind of application. PHP4 programmers probably won't know anything about them and they'll tell you to just print stuff on the screen or use their "extremely advanced" class for error handling. Please, ignore them. Fortunately for all of us, Ruby comes with try/catch (or better, begin/rescue) blocks and a series of predefined, extensible Exceptions to handle errors properly. -* _Namespaces:_ Ruby modules make excellent and easy-to-use namespaces, for the joy of Java and C++ enthusiasts. -* _Built-in Regular Expressions:_ For all the Perl monkeys, you can put something between slashes and it will become a regular expression, ready to be matched with a =~ operator. -* _Overloadable operators:_ Ruby lets you define operators like +, -, etc., for any of your classes. -* _Packages:_ Called "gems", they really are solid and precious indeed...and they work! Packages support dependencies, and they can be either cross-platform or platform-dependent. -* _Interactive Shell:_ the Interactive Ruby Shell can be used to test Ruby code instantly, similar to the Python console. -* _Unit Testing_: The @Test::Unit@ module makes things so easy that you really don't have any excuse not to test your code. - - -h4. #2 - You'll love the little things - -Ruby is elegant. Why's that? Because it doesn't focus on making code _concise_ so much as _readable and usable_. Here are some tips to help you out: - -* You can use both _if_ and _unless_ in condition statements. Of course you can just use _if_ and negate the condition, but _unless_ can be less error-prone at times. Furthermore, you can use both operators as conditional modifiers, after a statement rather than before: _order.new unless order.exists_. -* You can use question marks and exclamation marks at the end of your methods. Although no convention is enforced, ? is added if the method should return true or false, while ! is used to clarify that the method does something forcefully, like destroying a database record, chopping off the last character of a string, etc. -* You can use the _alias_ directives to create an alias for a method already defined. In this way you can have an _exist_ and an _exists_ method at no additional cost or repetition. -* You can use the _attr_reader_, _attr_writer_ or _attr_accessor_ directives to automatically generate getter and setter methods for specified class members. -* Some naming conventions are enforced for your own sanity: constants, classes and modules are capitalized, methods and members must start with a lowercase letter; global variables are prepended by a $, instance variables by <code>@</code> and class variables by <code>@@</code>; etc. -* Parentheses are optional in method calls. You can therefore write _File.open("/home/h3rald/test.txt")_ or simply _File.open "/home/h3rald/test.txt"_, which is particularly handy with methods that don't take parameters. - - -h4. #3 - You won't ever use a semicolon again - -You want to add another instruction? Just go on the next line. Hit <return> and you're done. In Ruby, like in Python, newlines matter and you don't have to remember to end your instructions with a semicolon. Unfortunately this means that you won't be able to write your whole program in a single line of code, like the C++ folks... that's too bad, isn't it? - -*UPDATE:* Indeed you CAN use semicolons as line delimiters in Ruby as well, the point, however, is that you don't have to. - -h4. #4 - Everything is an object, as it should be - -When I studied Java they taught me that everything is an object. - -_- "So 14 and 374346.678 are objects then?"_ -_- "No, silly, they are numbers!"_ - -In Ruby, numbers, strings, Boolean values _et al_ are objects. Really. This means you'll write things like: - -<% highlight :ruby do %> -"YOU SHOULDN'T ALWAYS USE CAPITALS".downcase #=> outputs "you shouldn't always use capitals" --12.abs #=> outputs 12 -<% end %> - -instead of something like: - -<% highlight :ruby do %> -# PHP Code - -strtolower("YOU SHOULDN'T ALWAYS USE CAPITALS"); -abs(-12); -<% end %> - -You save time, you save brackets, and it just makes more sense. - -h4. #5 - Everything has a value - -Or "you'll hardly ever use return to return values". In a nutshell, all Ruby instructions return a value, even variable assignments, so you don't really need to use the "return" keyword at the end of a method; the value of the last assignment or _any_ other expression will always be returned. - -h4. #6 - You can alter your environment in any way you like - -The first time I saw this, it really freaked me out. Imagine a typical programming situation: you start using a system class or a class written by someone else and you notice that you'd like to have an additional method. At this point you have a few ways to handle this in ordinary programming languages: -s -* You modify the developer's source code, if you have access to it. This is normally not a good idea, and you shouldn't do it. -* You derive a new class from the original one, and you implement the new method there. This is a good idea, but it could be overkill for just one method, and you may have to update some of your other code accordingly. -* You give up, and you just create the method outside the class, somewhere else. This can be done, but it is not very elegant and goes against Object Oriented Programming. - -In Ruby, you can simply add the method to the original class, without having to hack the original source code, and even for system classes! You want to have a method to automatically convert a measurement from meters to feet? You can simply extend the Numeric class as follows: - -<% highlight :ruby do %> -class Numeric - def feet - self*3.2808399 - end -end -<% end %> - -From now on, all your numbers will have a _feet_ method, which can be used just like any other method that was originally defined for the class: - -<% highlight :ruby do %> -5.feet #=> Returns 16.4041995 -<% end %> - -Basically, Ruby classes are never closed and can be modified at any time from anywhere. Use with care, of course. - -h4. #7 You won't get unicorns from birds and horses, but you'll still get donkeys if you want - -I distinctly remember my C++ professor at university using animals to illustrate key object-oriented concepts like classes and inheritance. Weird things came in when she tried to explain multiple inheritance to inherit a class Pegasus from a class Bird and a class Horse. It had methods like "fly" and "neigh"... crazy stuff, anyhow, Ruby does not offer multiple inheritance. -This seems to be the trend, after all, and of course it's up to tastes. I don't quite fancy multiple inheritances, as they may lead to unpredictable things. Nevertheless, it is possible to create "mix-ins" using Ruby modules, so that members and methods defined in a module will be added to a particular class if the module is included in it. - -h4. #8 You don't really need XML - -XML is a nice, general-purpose markup language which can be processed by every programming language and used everywhere. Unfortunately, it can also be quite verbose to write, very difficult to parse, and let's be honest, it's not really readable at first glance in many cases, unlike the following code snippet: - -<% highlight :yaml do %> -regexp: !ruby/regexp /a-zA-Z/ -number: 4.7 -string: a string -<% end %> - -This is definitely easier and more readable than XML, isn't it? Welcome to YAML, Ruby's favorite markup (but not really[6]) language, which can be used to represent any Ruby object in a simple, clear and yet complete way. -Ruby _can_ parse XML, but YAML's simplicity convinced a lot of developers to use it as an alternative to XML for configuration files, for example (Rails does this). -The code snipped presented before was obtained by executing the following line of Ruby code: - -<% highlight :ruby do %> -{"string" => "a string", "number" => 4.7, "regexp" => /a-zA-Z/}.to_yaml -<% end %> - -The _to_yaml_ method is defined for the Object class, which is the father of all of the other classes, and thus it is available in all Ruby objects. This means that you can convert anything into YAML _and_ re-convert anything back into Ruby objects, with total transparency for the developer. So much for parsing, huh? - -h4. #9 Lambda is much more than a Greek letter - -Ruby borrows some magic from Lisp and Perl with Proc objects and blocks. Procs are _"blocks of code that have been bound to a set of local variables. Once bound, the code may be called in different contexts and still access those variables." _[7] Consider the following: - -<% highlight :ruby do %> - def gen_times(factor) - return Proc.new {|n| n*factor } - end - - times3 = gen_times(3) - times5 = gen_times(5) - - times3.call(12) #=> 36 - times5.call(5) #=> 25 - times3.call(times5.call(4)) #=> 60 -<% end %> - -I could have used the _lambda_ method instead of _Proc.new_ and gotten the same result. This should ring a bell for people who know Perl and Python (or Lisp)[8]. You can do the same thing in PHP as well, but most people don't really use the function.[9] - -Additionally, Ruby makes extensive use of blocks, sort of "unborn Procs"[10], for example, to iterate the contents of an object and execute some code, like the _each_ method available for the Array class: - -<% highlight :ruby do %> -[1, 2, 4, 6, 8].each {|c| puts c*2} #=> outputs each element multiplied by 2 in a new line. -<% end %> - -Should the code in the block exceed one line, you're advised (but not required) to include the block within _do ... end_ instead of using braces. Ruby folks don't like braces much, really. - -h4. #10 - You can go on Rails - -Last but not least, you can always use Ruby on Rails for developing web applications. Deployment may not be as easy as it is with PHP, but Rails was built in Ruby because Ruby has features no other language can offer. - -h3. Conclusion - -Time's up. You've probably made up your mind about Ruby already, and you are either playing with it already, or you're totally ignoring it. However, the next time you're frustrated because your code looks ugly and you think you could have done the same thing with half the code you got, don't blame me! - -h3. Notes - -fn1. "Ruby on Rails":http://www.rubyonrails.org, MVC Web Development Framework. - -fn2. "Programming Ruby (2nd Ed.)":http://pragprog.com/book/ruby/programming-ruby/, by Dave Thomas & others, Pragmatic Programmers, 2004 - -fn3. Not entirely correct, but sort of. For more information on Python's indentation rules and myths, read "Python: Myths about Indentation":http://www.secnetix.de/~olli/Python/block_indentation.hawk. - -fn4. For a list of Ruby tutorials, refer to the "Documentation":http://www.ruby-lang.org/en/documentation/ section of the Official Ruby Website. - -fn5. For more information on Ruby, and in particular on the similarities and differences with other languages, refer to "Ruby from Other Languages":http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/. - -fn6. YAML is Not a Markup Language. - -fn7. Definition and example taken from the official Ruby documentation for class "Proc":http://www.ruby-doc.org/core/classes/Proc.html. - -fn8. For some example on lambda functions in Python, see "Python: Lambda Functions":http://www.secnetix.de/~olli/Python/lambda_functions.hawk. - -fn9. For examples of "lambda functions" in PHP using create_function(), see "this":http://www.webmasterworld.com/forum88/7414.htm. - -fn10. For more detailed information on Ruby's Procs, blocks etc. refer to "Understanding Ruby blocks, Procs and methods":http://eli.thegreenplace.net/2006/04/18/understanding-ruby-blocks-procs-and-methods.
@@ -1,147 +0,0 @@
------ -permalink: 10-reasons-why-i-didnt-update-my-blog -filters_pre: -- redcloth -title: 10 reasons why I didn't update my blog -comments: -- :date: 2008-10-09 01:44:25 +02:00 - :author: tcd - :url: "" - :id: 265 - :body: |- - Feeling guilty is stupid, IMHO. One should be free to do whatever s/he wishes to do with his/her OWN blog. - - Dammit, *you* are the owner of this blog. :) - - It is NOT the blog owning you! :p - - I have a blog that gets updated irregularly, with a lot of postponing behind the scenes, but I usually don't waste time in pondering about all those points you've highlighted in your post. - - I just write in it whenever I have something I _really_ want to write. :) - - Blogging should be a pleasure, not a via crucis :p - - (apologies about double or triple copies of this comment: had noscript activated LOL) -- :date: 2008-10-09 02:41:58 +02:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com/ - :id: 266 - :body: |- - Yep, you're definitely right, and if you notice, my blog is _still_ updated irregularly. - - It was a rant about not being able to keep up with "mainstream" blogs: my blog is not "optimized" for a particular audience interested on a specific subject. - - I gave up on that when I got upset with the whole CakePHP thing, and I noticed that the minute I stopped being a "CakePHP blog" the number of visitors significantly dropped. - - Nowadays... well, I'm just like you I guess: I write only when I have the time to write and when I have something _significant_ to write about almost any subject. - - Unfortunately sometimes I do end up feeling guilty about not writing though, but let's say I'm slowly improving... -date: 2008-06-12 03:30:00 +02:00 -tags: -- internet -- rant -- personal -- writing -type: article -toc: true ------ -_"It has been a while since my last post, sorry about that"_ -I read this sentence (or something along those lines) on many blogs on the Internet, including mine. As a matter of fact, I actually didn't write a meaningful post on my blog for a long time and no, probably this is not going to change that either. - -Yesterday I started thinking *why* this happens, not only to me but to a lot of other non-professional bloggers. A professional blogger &emdash; for what I can tell &emdash; is someone like Michael Arrington or Gina Trapani: someone who has the luck (or course) to be able to just blog for a living. - -I don't blog for a living: my site is self-sustaining via a few very unobtrusive ads, just that. I have a full time job, and I blog in my spare time about my interests, without even trying to make "proper" money from my site. There's nothing wrong with it: I believe there are some other people in my condition, and that's quite normal. - -That being said, let's examine the ten most common reasons why I (and you too, maybe) end up not updating my blog, _even when I have time to do so_.h3. Someone already blogged about it - -This is very irritating. I am obsessed with original content. I want to write about something other people _never_ (or hardly ever) wrote about. As a consequence, I often find myself googling the same topic I'm planning my blog post on, and I _obviously_ often get quite a few results, too! - -I actually wanted to title this very post "The Blogger's Block", but I immediately thought of putting that very title into Google, just to see if someone else already blogged about it. Sure they did! Not original at all, tough luck. -It also happened a few weeks ago: I wanted to write about the current state of tech news sites and Antonio Cangiano comes up with a similar "post":http://antoniocangiano.com/2008/05/29/random-thoughts-on-social-sites/. Very interesting indeed, but quite annoying as well! - -OK scrap that, think about something else... - -This can potentially go on for days, and the only solution is of course trying not to worry about it, and just write the damn thing (that's what I did to write this post). - -h3. I didn't research enough on the subject - -This happens tipically with reviews, round-ups, etc. Things I actually enjoy writing, but which may be easily subject to (harsh) criticism unless ou do them right. -I wanted to write a review of the new Treo 750 I bought. I've been using for a while, I learnt a few interesting hacks etc. etc. Unfortunately the 3G iPhone came out, so everyone is all hyped up about it. Too bad that I, being Italian and living in Italy, I never actually touched the damn thing! -What has that got to do with my Treo 750? Well, it would be nice to write a review of a Windows Mobile 6 phone comparing to the upcoming Apple wonder, wouldn't it? - -The solution to this would be trying to limit the scope of your post: screw Apple, let's just focus on my Treo 750 and on the amazing amount of programming languages I can use on it! - -h3. After researching for X days, I realized it was all a waste of time - -This happens with big articles. I once thought about writing a comprehensive article about all the possible ways to deploy a Ruby on Rails web site. Cool, isn't it? I started researching about all the most esoteric lightweight web servers, about JRuby, Glassfish, IronRuby, ... A lot of things. And new solutions kept coming up, and with them more and more posts, and then even entire books on the subjects. - -Very frustrating. I abandoned the whole thing, because there was simply no reason to go on researching: it was all a waste of time. - -How to fix this? Again, reduce the scope of your article so that you are able to reduce the time you spend researching about it. Or maybe try to get paid to write it, so that even if there's plenty of articles about the same subject, at least you have a concrete purpose to write yours. - -Erhm, yes, by the way, keep an eye on "SitePoint":http://www.sitepoint.com in the next few days/weeks, OK? - -h3. I only write when I'm inspired, and now I'm not - -Very, very common. I normally think about a very cool article to write in the evening, or early in the morning, or whenever I don't have access to a computer or the Internet. -Of course I don't forget about it, but by the time I have a chance to actually write it, I really don't fancy doing so. Oh, the irony! -It happened today, actually, during my lunch break: I was supposed to write this post but I didn't feel like it. I lost my inspiration and all my artistic verve, so no, it can't be done. Tough luck, wait until next time. - -How did I solve this? Well, I started writing the post in my coffee break: there was no way to finish it in time, of course, but at least I started it. -I also saved it to my PDA and continued writing it when I had a chance. Eventually, I managed to finish it during my lunch break, the next day. - -Try to write _whenever you are inspired_. If you are not inspired in your lunch break, do some work in your lunch break and then write when, in an hour or so, probably, you feel like writing again. - -h3. This won't make Digg's front page - -Digg, Reddit, DZone, you name it. They are all excellent free tools for promoting your content. Don't tell me you never wrote a post _for the sake of making the front page_ of one of those sites. I did, I confess. -I didn't make Digg's front page in a while, and I'm probably never going to make it again. The reason? When it comes to promoting the right content in a fair way Digg *sucks*. As a consequence, 80% of the articles which appear on Digg *suck*. I'm sure you'll be able to forgive my French when I say that *Digg utterly sucks*. - -No matter how clever your story may be, unless you're backed up by a swarm or an active community willing to Digg your story, you simply aren't going to make it. When is the last time a proper programming article made it to Digg? I don't remember, probably way before I unsubscribed to the Digg's Technology feed, about a year or so ago. - -Just write for the sake of writing. Don't even submit your story to Digg (unless you're writing about the iPhone, of course, then you may have a chance): post it to a less-known site, maybe, or to Reddit, instead. You won't get as much traffic, granted, but you also won't get tons of idiots writing pointless crap on your site and you won't risk a server crash. If it's destiny, then some good soul will post it to Digg, but nobody will digg it. That's just life, I'm afraid. - -h3. It has been too long since my last post: the next one will have to make up for it - -This happens when you start feeling guilty because you didn't post in a long time. - -_"My next post is going to be superb, long, interesting and everyone will start flocking back to my blog!"_ - -Wrong. First of all because statistically people just don't "flock back" because you bestowed them of one interesting post (you have to keep up, too), and second because by doing so your mind will automatically discard all those bits of things you wanted to write about, but you never did because you're waiting for that special _next post_ which will be _so much better_ and will bring your blob back to -spam- life. - -It happened, it happened... again, all you have to do is just post all the tidbits you need, while you're preparing your big shot: your blog will remain "fresh" and more people will enjoy your interesting posts, whenever they'll come. - -h3. Nobody gives a damn, anyway - -I didn't want to upset my younger audience by using a nasty f-word in the title, but that's exactly how it feels like it, sometimes. -I went to Rome last week, did you know? I twittered about it, you *ought* to know! And of course you'll all be waiting for the usual 10-page-long article on my awesome vacation. Like when I "went to London":http://www.h3rald.com/articles/incomplete-guide-to-london, remember? -No, sadly not everyone may be interested in this crap. So I probably won't post about it: who cares? When you start thinking like this, you may stop posting for weeks: not everyone may be interested in everything you post, and I believe that's normal. -Especially for a blog like mine, which is deliberately open to all my interests: programming, technology, travelling, etc. That's why most blogs try to be themed: they write about a particular subject, even a single programming project, and they (try to) do it well. The trade-off is that a themed blog may run out of posts amazingly quickly, if you're not carefula and if you're not 100% devoted to your blog's theme. -A themed blog will build up a faithful audience, like when I was writing almost exclusively about CakePHP: a lot of PHP programmers where flocking here daily. Then things "went wrong":http://www.h3rald.com/blog/42 and I really couldn't be bothered to write about the same crap. Which leads us to the next topic... - -h3. If I write about this, a large chunk of my audience is going to be upset - -This applies especially to themed blogs: if you're a well-known Firefox addict, you can't suddenly start writing about "Opera":http://www.h3rald.com/articles/firefox-lovers-guide-to-opera, praising its speed and the features it offers out-of-the box! -If you take a side, you'd better stick to it, if you want your audience to stick to you: the ten people who happen to read this blog are probably quite shocked by the amount of times I "changed side": from CakePHP and PHP to Rails and Ruby, from Firefox to Opera (well, wait until my next SitePoint article comes out, at least...). Probably they are not the same people who read this blog a year or so ago. - -In the end, it's entirely up to you: if you are prone to radically change our opinion (and this happen in technology, much more than in politics), which involves changing the whole theme of your blog, maybe you should consider not having a themed blog at all. -And if you don't feel 100% sure you want a themed blog, you definitely shouldn't go for a themed domain name, or you may end up abandoning it afterwards. And when that happens, unless you're writing damn cool posts like "Why":http://redhanded.hobix.com/, it's going to hurt your audience. On the other hand, if you're sure you'll get ten times more visitors, go for it. -No, h3rald.com stays... I may end up raving about Safari at some point within the next ten years though, don't be upset! - -h3. I'm not an expert on the subject, so I shouldn't blog about it - -This is a common problem I have when I try to write about something I don't know extensively enough. When I started to learn Ruby, I was eager to start writing about it: it seemed just too cool to be true! -I thought about writing a longish post on learning Ruby from scratch, but then I realized it wouldn't have been a great idea: I was just starting to learn a new language, I didn't know all the nitty-gritty and writing about it to teach others was going to be a bit presumptuous, maybe! -Instead, I opted for a lighted "10 reasons to learn Ruby":http://www.h3rald.com/articles/10-reasons-to-learn-ruby article, clearly stating in the first paragraph that I was just a noob getting excited about his new toy. It worked, actually: people seemed to enjoy it, and I was partially excused for the few mistakes I made here and there. -You don't have to be an expert to blog about something: you just have to be totally honest about what you know, and what you don't know. - -h3. There are a lot of professional bloggers out there, and I'm not one of them - -Finally, this can be summarized in two words: inferiority complex. "Proper" blogs fire out 10+ posts _per day_, and I don't even write ten points in _a month_! Again, those a professional bloggers: they live for blogging (and make an awful lot of money out of it), and they most likely have someone else blogging for them, too! -Think of TechCrunch or LifeHacker, for example: they have a small legion of talented writers working for them &emdash; even if Michael Harrington does rant about Twitter about three times a week himself, though. -At the end of the day, what matters is the _quality_ of your posts. Not the length minf, the Quality. I personally think that non-professionals (I said "non-professionals", not "amateurs"!) are _allowed_ to write about once a week, if they can provide good content, that is. - -But you still do have to write _at least_ once a week (OK, let's make it ten days), otherwise either you're justified (you genuinely don't have time) or you may be a victim of one of these common fears. Watch out, and happy blogging! - - -
@@ -1,77 +0,0 @@
------ -permalink: "10" -filters_pre: -- redcloth -title: Italian General Elections - 2006 -comments: [] - -date: 2006-04-09 07:33:00 +02:00 -tags: -- italy -- politics -type: article -toc: true ------ -!>http://www.berluscastop.it/v_imag/sodom1.gif! - -Another five years have passed and here we go again: General Elections time! -Today and tomorrow Italy -must- should vote for a new government, and the choice is _again_ between two main contenders to the Prime Minister's -throne- chair: - -- "Romano Prodi":http://news.bbc.co.uk/1/hi/world/europe/299254.stm -- "Silvio Berlusconi":http://news.bbc.co.uk/1/hi/world/europe/3034600.stm - -Just today I was reading an interesting article titled "_'The End of Silvio's Show?'_":http://service.spiegel.de/cache/international/spiegel/0,1518,409538,00.html in which the author examines the possibility that Berlusconi's five years of subtle pseudo-dictatorship may end in favour the former president of European Commission Romano Prodi. - -_Who are they?_ - -*Silvio Berlusconi* -!>http://www.consapevolezza.it/notizie/gen-mar-2002/imgs/berlusconi_corna_5.jpg! - -I can't imagine someone asking this question, at least I can't think of anyone who doesn't know Silvio Berlusconi as the icon of the latest _national oddity_. -Forthose who need their memory refreshed, here's a small collection of links featuring him: - -* "BBC NEWS Profile":http://news.bbc.co.uk/1/hi/world/europe/3034600.stm -* "Wikipedia Page":http://en.wikipedia.org/wiki/Silvio_Berlusconi about him -* "An Italian Story":http://www.economist.com/displaystory.cfm?story_id=587107 - An article written in 2001 published by the Economist, _before_ he was elected Prime Minister -* "Fit to run Italy?":http://www.economist.com/displaystory.cfm?story_id=593654 - Another article by the Economists explaining why Berlusconi should _not_ lead the Italian Government -* "Meglio coglioni che mafiosi":http://grabbyeducational.blogspot.com/ - Italian blog against Berlusconi (warning: profanity). -* "Basta 2006 - Geocities":http://www.geocities.com/basta2006/ - a comprehensive directory of websites dedicated to Berlusconi, a really good resource. - -There are millions more. In particular, I'd like to add one more: "The Empire of Silvio Berlusconi":http://www.consapevolezza.it/notizie/gen-mar-2002/impero_berlusconi.asp, which features an image taken from an Italian magazine listing (roughly) everything owned (the image is dated 2002) by our current (for now) Prime Minister, such as: - -* Mediaset Television (100%) - which includes three national channels -* Medusa Film (100%) - Movie productions -* Milan A.C. (99%) - Football team -* Edilnord (63%) - Real Estate -* Blockbuster (51%) - Video retal shops -* Mondadori Spa (48%) - Biggest Italian editorial company -* Mediolanum (35.5%) - Financial sociaty - banks, insurances etc. - -Nice, isn't it? Of course he had to give those societies to some trusted administrators before becoming Prime Minister... but let's not talk about this... - - -*Romano Prodi* -!>http://upload.wikimedia.org/wikipedia/en/thumb/0/04/Prodi.jpg/200px-Prodi.jpg! - -Perhaps not as well known abroad as Silvio, but was recently the President of the European Commission for a while. Here are some (more serious) links about him: - -* "European Commission Archives":http://europa.eu.int/comm/archives/commission_1999_2004/prodi/index_en.htm -* "eitb24's profile of Romano Prodi":http://www.eitb24.com/portal/eitb24/noticia/en/international-news/centre-left-candidate--profile-of-romano-prodi-?itemId=D23503&cl=%2Feitb24%2Finternacional&idioma=en -* "Answers.com on Romano Prodi":http://www.answers.com/topic/romano-prodi -* "New York Times archives about Romano Prodi":http://topics.nytimes.com/top/reference/timestopics/people/p/romano_prodi/index.html?inline=nyt-per - -Known as "The Professor" for his education... - -bq. _"He graduated in economics at Milan's Catholic University in 1961 and did postgraduate studies at the London School of Economics. He also spent a year as visiting professor at Harvard in 1974"_ -_("Prodi's BBC profile":http://news.bbc.co.uk/1/hi/world/europe/299254.stm)_ - -...Romano Prodi is the candidate proposed by the current Italian opposition, grouping roughly all the center-left parties. He's the one who pushed Italy - as President of the European Commission - to accept the Euro as new currency, back in the day, and also the one who was blamed for than after a few months when the _Euro effect_ occurred: prices went higher and didn't seem to be an _exact conversion_ from Lire to Euro. He was chubby enough ("mortadella" is one of his most recurring nicknames) to be quickly appointed as scapegoat for the unpleasant situation. - -!<http://www.dsmirandola.it/sg/img/berlusconi_corna.jpg! - -Besides that, if someone asks me what's the difference between the two candidates, I'll answer: one is a politician and devoted all his life to Politics, while the other partly devoted only the last 10-years-or-so to politics because it seemed to be _a cool and worthwhile investment_... - -_*Who am going to vote?*_ - -Well, one thing is sure: I don't want Silvio to win again, I don't want Italy to be publicly ridicolized abroad all the time that muppet opens his mouth or simply does something _he_ thinks is funny... -
@@ -1,209 +0,0 @@
------ -summary: "All you need to know about my wedding, from the arrival in Ireland 'till the departure from AbbeyGlen Castle. With official pictures and famous quotes." -permalink: 11-07-2009 -filters_pre: -- redcloth -title: 11th of July 2009 -comments: -- :date: - :author: Roxanne - :url: "" - :id: 2722 - :body: |- - Unfortunately, I can only fully comprehend a small number of your articles,this being one of them of course! and as are all the ones I can understand, it's very good. - the wife - Roxanne. -- :date: - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 2723 - :body: Look! The one above is the _first_ comment by my wife on this web site! I love you little one, thanks!! -- :date: - :author: Elora - :url: http://www.eloradaphne.wordpress.com - :id: 2726 - :body: How touching you guys! I wish I could have been there, you guys seem to have had a great time...I would love to see a video of you dancing Fabio, could be interesting...... -- :date: - :author: Roxanne - :url: "" - :id: 2727 - :body: |- - Eeek, I suppose I should be keeping a better eye on what you do in your spare time now! - I love you too. -date: 2009-07-26 12:54:00 +02:00 -tags: -- wedding -type: article -toc: true ------ -* "Prologue":#prologue -* "The wedding party":#party -* "The stag night":#stag -* "The preparations":#preparations -* "The ceremony":#ceremony -* "The reception":#reception -* "The honeymoon":#honeymoon -* "Photos":#photos -* "Trivia":#trivia -* "Famous quotes":#quotes - -h3(#prologue). Prologue - -Roxanne and I arrived in Ireland on the 3rd of July, just over a week before the wedding day. We thought a week would have been more than enough to finish organizing our big day, and we were right: we spent a few days enjoying our holiday with relatives and going around to meet the photographer, the florist and all the others. - -Slowly guests started arriving into the country from Italy, England, Romania etc. For some reason, everyone chose a different day to get to Killenaule, so we had people turning up right until the very day before. - -In a similar fashion, I was waiting for my waistcoat to arrive until the last minute: it turns out that the guy I bought it from decided to send it through normal post about 10 days before -- "They normally arrive in less than two weeks", he wrote to me in his last email. - -I ended up having to drive to Clonmel the afternoon before the wedding with half the wedding party in my car looking for a waistcoat. I eventually managed to rent one (with matching shirt and cravat) for _just_ 40 Euro. - -h3(#party). The wedding party - -The following table lists all the members of the wedding party, for your own reference. - -|_. Name |_. Role | -| Fabio Cevasco | Groom | -| Roxanne O'Mahoney | Bride | -| Matteo Lagomarsino | Best man | -| Simona Angheluta | Maid of Honor | -| Roberto Pischedda | Head Usher | -| Delia Angheluta | Bridesmaid | -| Zacharry O'Mahoney | Usher | -| Caspar O'Mahoney | Usher | - -h3(#stag). The stag night - -In Italy, England, US and in many other countries a "stag night" may end up in many different ways: dinner with friends, strip club, wild practical jokes to the groom, and so on. In Ireland, it generally means one thing: _drink_. It occasionally ends up badly (there are rumors a poor fellow who was thrown out in a river and got married with a broken nose), but generally everything turns out just fine: have a few pints, sing and dance, and have a couple of eggs in the morning. That normally does the trick -- if you're an Irishman. - -I was well aware of my in-laws drinking habits, so I decided to take uncle Felix's offer: "I'll have a taxi ready for you whenever you want to sneak out of the pub, and make sure you do" -- he said. - -The evening started with a few pints at Laffansbridge, an old country pub in the middle of nowhere, probably one of the best places for a pint of Guinnes in the whole Tipperary. The little smart guy who runs it has one simple rule: at midnight the light goes off and no more drinks are served, so all 16 of us got into a minibus by then, heading for the next pub. - -_Quinn's_ is the family pub, in the sense that it is owned by Felix Quinn Jr, son of Felix Quinn Sr, brother of Anastasia Quinn, mother of James O'Mahoney, father of Roxanne O'Mahoney, my wife (families are still very large and very close, in Ireland). Being the family pub, _Quinn's_ doesn't close at midnight; in fact, it often doesn't close at all for family and friends (i.e. the entire village of Killenaule). -As soon as we got in, Claire (wife of Felix, son of Felix, etc. etc.) greeted us with a full round of pints, and then another, and yet another... - -Around the third round someone asked me if I could sing a song -- a request I politely but firmly declined due to my total ignorance in Irish folk songs and my total inability to utter sounds in even the slightest musical way. Luckily, someone else volunteered and sang a beautiful ballad, perfectly in-tune, with no music backing at all: Irish people are amazingly musical when sober, imagine when drunk! - -When people started getting into _their_ fourth round (note the pronoun), I decided to try out an old trick to keep myself sober: I drank less than half a pint, and then pretended to drink the rest, leaving always something in my glass. In that way – I thought – I could pretend I didn't need yet another pint. Unfortunately the pub owner spotted me straight away and said "That pint is stale... here, have another one, on the house!". At that point I decided it was better for me & the rest of the Italians to quietly sneak out. - -I was at home (uncle Martin's house) and in bed at about 1:30 AM. I almost didn't sleep at all that night, as expected, so I wasn't too bothered when the rest of the drinking comrades came back, singing and shouting at 4:30 am. Simona [the Maid of Honor and girlfriend of my brother-in-law Zac], on the other hand, wasn't too amused when Zac turned up after drinking the (Irish) Nightly Guideline Drink Amount: approx. 10-11 pints of Guinness -- those he could count, that is. - -h3(#preparations). The preparations - -This part of the day is best reported in chronological tabular form: - -|_. Time |_. Event | -| 7:35 | The groom -wakes up- decides to stop pretending to sleep. | -| 8:00 | The bridesmaids are up and about, ready to go to the hairdresser | -| 9:00 | Uncle Martin and the rest of the gang slowly regain consciousness. The groom spends about half an hour trying to explain uncle Martin that he's his only hope to collect and bring back the flowers for the church (_"Ahhhh you want _me_ to do it... you could have said so since the beginning!"_). | -| 9:45 | The groom takes the bridesmaids into town, to the hairdresser | -| 10:00 | The groom attempts to gather his groomsmen for the first time | -| 10:15 | The groom starts having a chat with the best man and the head usher. The other ushers are _somewhere around_. | -| 10:30 | The groom realizes that one of the ushers (Zac) has the most terrible hangover on Earth and the other (Caspar) slept solidly from 3 am (while still in the pub) until now | -| 11:00 | The groom attempts to gather his groomsmen for the second time, this time telling them it's time to get ready (he's not taken seriously) | -| 11:30 | The groom attempts to gather his groomsmen for the third and final time, now everyone is starting to try out their suits | -| 11:45 | For some weird reason auntie Noelle decides to call the groom and tell him that the florist is not accepting checks, after 5 minuts of absolute panic, she says we're going to get the flowers anyway and there's nothing to worry about. | -| 12:00 | All groomsman are dressed. It starts raining. | -| 12:30 | Zac decides he needs some fresh air and takes a walk outside in his morning suit, regardless of the heavy rain and the groom's prayers | -| 13:10 | The groomsmen go to the church. | -| 14:00 | Guests start arriving | -| 14:20 | The brides arrives and the ceremony starts. | - -h3(#ceremony). The ceremony - -The wedding ceremony was very suggestive, almost magic. As soon as I looked at Roxanne in her wedding dress all worries faded away, and we both enjoyed the wedding rite. I must say I also don't remember much of the whole ceremony, but I'm told it's a common thing to happen. - -As the ceremony started, we sat down without looking at the audience, so I didn't feel paranoid and enjoyed listening to the priest's speech, the readings and the songs. Canon Liam Ryan embodies the typical Irish priest: about 70-year-old, tall, extremely talkative, cheerful and very charismatic. He shocked us all during the reharsal telling us what we'd have had to do the day after, and it felt like a lot of work. The groomsmen and the bridesmaids were terrified: _"So I have to help you sit down, move the chair... like that... then... go back... no, wait, what was that again?"_. Matteo and Roberto couldn't believe the whole choreography involved in the event: it's nothing like that in Italy, but they were glad they were part of it in the end. - -It all happened exactly like Father Ryan predicted, he even guessed almost all the few mistakes we made: "You have to walk slowly in front of the bride" – he said to Delia, the bridesmain – "and if you _think_ you're going slow while you're doing it, you're probably going _way too fast_". But nobody noticed, really, and nobody cared: they were all too excited to mind that, and everyone's eyes were on Roxanne, anyway. She was really, really gorgeous and her dress was fabulous. It felt unreal, at times: we both felt we were in one of those movies... - -The most peculiar thing about the whole ceremony was perhaps the different languages involved: English, Italian, Gaelic and Latin. I doubt there was a single person among us who could understand the entirety of the mass, but it was very evocatory. The whole mass was predominantly in English, with the following exceptions: - -* The First Reading was in Latin (my mum read it superbly -- she's a Latin teacher!) -* The Second Reading was in Italian -* _Our Father_ was sung in Gaelic - -By our own common decision, we didn't ask for a professional video of the ceremony, only "photos":#photos. Nevertheless, my uncle captured most of the ceremony (and the most embarassing bits of the dancing after the "reception":#reception) using my dad's video camera. - -h3(#reception). The reception - -When the ceremony ended it was still raining heavily, so after an endless amount of pictures taken we went straight into our Rolls. Technically, that was not _our_ Rolls of course: we rented it from a local car hirer, and it was worth every penny. A lot of people get married in a VW Beatle or in a Mercedes at most, but Roxanne and I really love old cars, so when we saw "Ruby":http://www.alleventslimos.com/Wedding/rolls_silver_cloud.html, a red 1961 Silver Cloud II, we just had to get it. Champagne and chauffeur included, of course. - -The chauffeur was a very jolly and chatty fellow from Waterford, and drove that beauty of a car for a very long time. Unfortunately though his sat nav decided to stop working and he wasn't really _local_, so erhm..., well, let's just say we were really lucky that at least _the bride_knew her way around. We made it safe and sound to Raheen House in no time: so fast that everyone else arrived about 10-15 minutes afterwards. - -"Raheen House":http://www.raheenhouse.ie/ is a very charming XIX century Georgian House. One of those places you normally see only in movies: tapestries on the walls, old armchairs, stuffed heads over the doors (an african buffalo, a huge deer, an antelope, and some more)... you get the picture. Unfortunately it can only accomodate 120 people, so it isn't a very popular location for wedding receptions in Ireland, because the number of people invited at Irish weddings ranges from 150 to 300. We were about 60 in total, nevertheless the dining hall looked quite full and lively, with 7 big tables covering all the room. - -As soon as we got there, my best man was informed by the staff that he _had to_ introduce the bride and groom. _"What? No, wait! What do I say... how... what? Fabio, come back!"_ he freaked out, but as soon as I wrote down the two lines he was supposed to say in English everything was OK. Not only did he introduce us properly, he also made a _terrific_ speech: he obviously gave it a lot of thought and it sounded just perfect. - -After he spoke, it was my dad's turn. Now, my dad speaks perfect French but never got a chance to learn and practice English (yet), so not only he had to write down his entire speech, he also had to annotate the pronunciation of _every_ word. He managed fine though. It felt a little bit long, but he said really wonderful and touching words about Roxanne and I, our respective families, and countries. I'll publish it soon on the Internet, for posterity's sake. - -The last three speeches were Jim's (the father of the bride), who did great as always, without reading anything, right on the spot. And so did Roxanne and I: we basically just said a few words thanking all the guests for coming, and half of them for helping us with the wedding as well. Every speech (except mine and Roxanne's) was characterized by subtle and very discreet exhortations to produce progeny (_"get on with it!"_), but other than that they were fine. - -After all the traditional obligations, we finally started our dinner. The food was delicious and extremely tasty: Raheen House is renown for that, as we were told, but we honestly weren't 100% sure until we started trying it. And there was also _plenty_ of it, so everyone felt really satisfied towards the end of the meal. So satisfied that we decided to postpone the cake till later (see below) and indulge with wine instead. - -Wine, right. They were going to charge us 20€ per bottle for some weird Chilean or Australian stuff. Silly and almost offending, especially considering that my family has been producing wine for family and friend's use for at least three generations! This was my dad's primary concern until we left for Ireland: "You sort the restaurant out, because I'm going to bring some bottles, no matter what". He shipped over _96_ special bottles of our 2005, 2006, 2007 and 2008 vintages. Ninety-six. We used about 25 of them for the meal and the rest of the evening, then we gave one to almost every guest, three to the staff of the restaurant, a few more to other hotel and B&B owners, six to each uncle of the bride, etc. etc. None came back to Italy, that's for sure. - -Right after the meal the band came in, and we got ready to dance. Roxanne and I had to start with our First Dance, of course, then everyone else slowly joined in. The group was playing a mixture of traditional Irish music, ballads and rock 'n' roll: they were amazing, and especially the Italian's were really impressed. - -Not as impressed as when they noticed uncle Martin dancing. I've never seen _anyone_ in my life dancing so vigorously and wildly in my life. He has his own special technique that cannot be described with words. I'll try to post a video of him soon. He really felt the rythm and never missed a step. Like a whirlwind he dragged everyone in, dancing with him: first his daughters and sons, then his brothers, the he thought he'd take my auntie for a spin, then the bride (well, mostly her dress), then even me! I don't remember much, I think I was in the air at one point, and then all over the place... - -Everyone of course joined in and started drinking and dancing for the whole evening. When the band performed the last two songs, I just remember a _huge_ circle of nearly all the guests holding hands dancing around Roxanne and I, then coming closer, then far, then closer again. It was definitely the wildest night in our whole life. - -h3(#honeymoon). The honeymoon - -The day after we slowly recovered. We didn't sleep much, but we managed to get up and have breakfast with some of the guests at the hotel, before they started heading back. Then we decided to go shopping in town: it was basically Roxanne and I, plus her brothers, her parents, and my parents. Not much of a honeymoon, as my mum pointed out, but we didn't mind. - -After spending the following day saying goodbye and thanks to all the relatives, we finally headed to Co. Galway, in Connemara. We booked three nights in the fabulous "Abbeyglen Castle":http://www.abbeyglen.ie/, highly recommended. Our superior room had a fireplace, a four-poster bed and jacuzzi bath: the bare essentials for a honeymoon really. Roxanne and I really enjoyed those three days, finally alone in the most breathtaking and romantic area of Ireland. Three days weren't enough, really, but we'll eventually go back there hopefully: maybe Sir Paul Hughes, proprietor of the castle, will still remember _"the bride and groom"_, as he kept calling us throughout our brief, but very pleasant stay. - -Exactly as auntie Noelle said, everything was over in a blink: the ceremony, the reception, the honeymoon... everything went back to normal, eventually. It took a while to get used to our normal life: we had to go on a shopping spree before we went back to work... let's say the money we got as present from most of the guest was well spent in a 42" LCD HD TV, surround sound system, etc. etc. - -...And we still have our other half of the honeymoon, too! Probably Miami Beach and Bahamas, next November. - -h3(#photos). Photos - -Our wedding photos were taken by "Pat McCoole":http://www.patmccoole.ie/, who did a truly amazing job portraying the magic of our special day. - -<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&hl=en_US&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fh3rald%2Falbumid%2F5359762418204291649%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_US" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed> - - -h3(#trivia). Trivia - -* On the wedding day, it rained non-stop from 12 am to 7 pm. -* The groom drove for a total of 1758.7 Km in 14 days. -* On his stag night, the groom only drank 2.5 pints of Guinness (almost everyone else had 10, on average). -* The night before the wedding, the groom slept only from 5:30 to 7:30. -* Only the middle tier of the wedding cake was eaten on the wedding day. The top tier was eaten during the following days by relatives and the bottom tier was shipped to Italy, together with the Bride's dress. -* The father of the bride decided to change into more comfortable clothes right after the ceremony. He borrowed a waistoat and a jacket for the speech. -* Uncle Martin danced with a lot of people after the meal, including the bride, her father, and the groom. -* When he arrived at the church, the groom immediately realized he left the mass booklets and the confetti in the back of his car, at home. They were eventually brought to the church by a cousin of the bride just a few minutes before she arrived. -* At the very start of the ceremony, the groom told the priest to tell the best man to get a mass booklet so that he and the bride can follow the mass properly. After 30 seconds of lip-reading and signalling, the best man understood and fetched one of the infamous booklets. -* The bride forgot her change of clothes in uncle John's car, who had to drive in early in the morning or she would have had her breakfast in her wedding dress. - -h3(#quotes). Famous quotes - -bq. "This journey feels like going to Lourdes: you come back and your life changed forever."<br /><br /> -- The best man, when he arrived in Killenaule. - -bq. "Is there a garage around?"<br /><br /> -- Auntie Isa while waving a car mirror, when she arrived in Killenaule - -bq. "Do I really have to do a speech? Are you sure?"<br /><br /> -- The best man, when he met the groom in Ireland. - -bq. "My preciousssss!"<br /><br /> -- The best man, when he was given the rings in custody. - -bq. "She's the most calm and organized bride in history."<br /><br /> -- Auntie Noelle, about the bride on the wedding day. - -bq. "You could tell he was panicking on the phone"<br /><br /> -- Auntie Noelle, about the groom on the wedding day. - -bq. "Potatoes, potatoes, potatoes..."<br /><br /> -- The father of the bride to the groom, during the traditional handshake of the wedding rehearsal. - -bq. "Potatoes, potatoes, potatoes..."<br /><br /> -- The groom to the father of the bride, during the traditional handshake of the wedding ceremony. - -<blockquote> - -*Best man:* "[...] this is the first time for me to speak in public, in front of an _English_ audience [...]"<br /> -*Audience:* "Irish! IRISH!!!"<br /> -*Best man:* "...oh, right, Irish! Sorry..."<br /> - -</blockquote> - -bq. "I need another shirt!"<br /><br /> -- Uncle Martin, after about 2 hours of continuous dancing with almost all the guests. -
@@ -1,52 +0,0 @@
------ -permalink: "11" -filters_pre: -- redcloth -title: Meet some Cake(PHP) bakers! -comments: [] - -date: 2006-04-11 17:03:00 +02:00 -tags: -- cakephp -type: article -toc: true ------ -I should write more. I noticed that I since I decided to take a break from "zZine Magazine":http:www.zzine.org I more or less stopped writing - and started _baking_ again with "CakePHP":http://www.cakephp.org/. As a result I finally recoded this website and _refreshed_ a little bit my almost-rusty baking skills. - -!<http://base--/img/pictures/cakephp.png! - -Why not taking advantage of this and write more about CakePHP then? After all, my last "article":http://base--/articles/view/cakephp/ turned out well enough and some people even bookmarked it online on del.icio.us and ma.gnolia... Now it's a bit out of date, I must admit: it was based on a pre-beta release of the framework, and we're (more or less) stable now. -A lot of things changed in the Bakers Community since then! At the time the "wiki":http://wiki.cakephp.org/ barely started and there was no "manual":http://manual.cakephp.org/ whatsoever, only my long and perhaps _slightly_ boring article describing Cake's functionalities. Now there things are much better for newcomers: they have a continuously growing community to rely upon, both on the Google user group and on IRC (#cakephp on FreeNode counted 63 members today, while back in the day 20 was a big number). There are also a few people who started blogging and starting websites about CakePHP: while I was the first to write an article about Cake I was _the last_ so far to start a blog :/ Oh well, nobody's perfect! - -The first site I came across - although not a blog really - is Graham Bird's "Cake for Beginners":http://grahambird.co.uk/cake/. When someone asks me some basic questions about CakePHP I send him there because first of all they'll find a short FAQ about the framework, i.e. something everybody should know before even start thinking about learning Cake. Similarly, the guy has a "Glossary":http://grahambird.co.uk/cake/glossary/ in progress to help those souls who feel lost in Cake's terminology. If you don't consider yourself a total beginner anymore, the "Tutorials":http://grahambird.co.uk/cake/tutorials/ section can be a very interesting read: I wanted to add some AJAX bits to my site, but the documentation about this seemed pretty scarce, so I headed to the "Ajax Task List":http://grahambird.co.uk/cake/tutorials/ajax.php tutorial and it really helped. - -On the blogs front, on the other hand, "Cake Baker":http://cakebaker.42dh.com/ seems to be the most active: I'm starting to check this one often (OK, I'd better subscribe to the RSS feeds, perhaps) because it seems to be THE best place to get the latest news about everything concerning CakePHP: The author seems to post quite frequently (there's always a new post every 1-3 days maximum) includes short code snippets when necessary and report news when there's anything to report. - -"Sentino":http://sentino.wordpress.com/ is also an interesting place to learn new things about CakePHP: the only problem is that the author seems to post less frequently... the blog seems to have some sort of "milestone" schedule, publishing something when there's something big enough to justify a post. If you want to subscribe to a less frequent blog with only the essentials about Cake, this is a good choice. - -"RosSoft":http://rossoft.wordpress.com/ unlike the others mentioned up to now has a much more technical approach: no news about Cake or anything, just some REALLY useful real-world example of Cake helpers, components etc. etc., with FULL source code to cut and paste. Really handy if you need something specific, truly excellent for beginners to have a look at how Cake classes should be written. -Among the most interesting fully working snippets: -"IP-to-country component":http://rossoft.wordpress.com/2006/03/29/ip-to-country-component-geo-location/ -"Poor man's cron component":http://rossoft.wordpress.com/2006/03/27/poor-mans-cron-component/ -"Image Auth - CAPTCHA component":http://rossoft.wordpress.com/2006/03/16/image-auth-component/ - -!>http://xcite-online.de/spliceit/themes/SpliceIt/logo.png! - -"ThinkingPHP":http://www.thinkingphp.org/ is another "technical" Cake blog, with interesting code snippets and thoughts about our favourite PHP framework. For those who don't know or don't remember him (yes, like me...), he's the author of "SpliceIt!":http://xcite-online.de/spliceit/... what? - -bq. SpliceIt!'s mission is to provide a clean and light-weight code base for people who want to create complex webapps faster then ever. The things we want to provide are: - - User/Right Managment - - Theming Support - - i18n - - Url Aliasing - - and most notabily: Modularization of often used Code Segments - -i.e. something I should have checked before recoding this website. I'll definitely keep this in mind for the next release of h3rald.com. - -!<http://rdos.rd11.com/img/rd11/rdlogo.gif! - -"Posts@ rd11":http://rd11.com/posts a.k.a. gwoo [and seth]'s blog. Moment of silence. Gwoo is CakePHP's project manager (respect+) and one of the lead developers of CakePHP and he also actually uses Cake for his website and blog instead of WordPress :) -What can I write about him. It's difficult. I'll avoid all possible pseudo-religious comparisons but when I say that _he created CakePHP_ I think I say it all. The code he used for his blog is part of a collection of open-source, Cake-powered tools all prefixed with rd- or Cake, available on "CakeForge":https://cakeforge.org/projects/rdos. I personally think that looking at his sample applications can be one of the best way to learn how to bake _properly_, and yes, I *did* check them out before coding this site for the second time. Demos are "online":http://rdos.rd11.com/. - -That's it. These are perhaps the most well-known bakers and/or Cake bloggers on the planet. There are certainly others, maybe even in other languages, but now I'd better stop writing now, because this is a rather long blog post. Sorry. I'm new to blogging and I just can't help myself: especially with Cake, I need to write lenghty texts! -More to come...
@@ -1,85 +0,0 @@
------ -permalink: "12" -filters_pre: -- redcloth -title: Choosing the right IT job -comments: [] - -date: 2006-04-13 13:47:08 +02:00 -tags: [] - -type: article -toc: true ------ -The time has come. The times when I used to meander around reading stuff on the Net and writing about whatever I wanted are over. Incidentally, the world may end, _your_ laptop could explode and I could knock at your door in a few minutes asking for money, imagine that! - -Nothing of the above, alright, bad joke, but sooner or later the time to _start doing something_ comes, at some point you ought to start making some real money. It's time to settle down, my fianceé are eager to get our own independence, move to our new house (which we're still doing up) etc. etc. Fair enough. I spent the last five months wasting my time looking for a job, a _proper_ job having something to do with IT(Information Technology) and finally something seems to be possible. - -_Either nothing or everything_ - I may even say that: now I have to face a difficult choice between two job proposals that seem both fairly interesting. -_"Go wherever you can get more bucks, you nutter!"_ - Well, there's more to it. -Let's examine now the two similar but yet different realities I have to choose from. Maybe you'll never be in my situation, but I hope this can help at least those who experienced or could experience something similar someday. - -_*Working under Uncle Bill's wing*_ -!>http://base--/img/pictures/genova.jpg! Not Microsoft. No, not directly at any rate. I've recently been contacted by a well known multi-national company which does almost anything ranging from computers, phones, electrical stuff to huge self-aware robots designed to conquer new worlds... Not quite, but let's just say that this image contributes to give an idea of a Corporate-type reality. - -_Preliminaries_ -I happen to be an Italian whose English skills go a bit beyond the _"Hello, me Italian and like to do friendship with you"_, I applied in the above (un)mentioned company as _Software Tester_ and got contacted twenty days afterwards about a possible position as _Technical Writer_. It makes perfect sense. Well, at any rate I was pleased and I went to the pre-selection which was something like a pre-GCSE English test with a bunch of "technical" questions ("What does HTTP mean?"...). -Thanks to our Merciful God I passed it (and thus avoided endless teasing by my British fianceé), and they wanted to have a proper interview with me today. -I went there and came back a few hours ago, and I think it wasn't too bad, let's say I may stand good chances but as normally happens in such companies in the end it was just something like _Thank you for coming, we'll call you by the end of April_. Although I mentioned that I recently had some other job offer obviously they couldn't give a damn: as any other big company, they need to interview all the possible candidates to be sure they pick the right one, and that's fair enough. - -_The job_ -In the remote eventuality they decide to take me on board, I'd be part of a Documentation Team in charge of writing technical documents, manuals and silly jokes - perhaps - about some semi-classified huge internal semi-intelligent corporate framework. -Now, although some people may already start to feel bored even at thinking about a job like that, I think this role would fit me perfectly. I love writing. I love researching. I love crating documentations, howtos, reports and any other boring (for other people) stuff! And they want me to write in English, not in Italian, which is - it may sound weird - a true relief for me. -At the interview I had a chance to talk about my "articles":http://base--/articles/ and they seemed interested in this activity of mine... I even mentioned my "CakePHP article":http://base--/articles/view/cakephp/ and they say they're gonna check it out. Oh well, this site's stats are always one Firefox tab away from my current main browsing tab, so you can bet I'll be tracking that. - -_The contract and the salary_ -_Classified_. They didn't say anything, as usual, but presumably it should be a permanent (or semi-permanent) contract with all the contributions, health insurance, taxes etc. paid. And free cookies. Yum! -Salary... well, it shouldn't be too bad, anyway. - -_PROs_ - -* I'll be doing something I really enjoy: writing in English -* Steady job, steady contract, more security -* Corporare Environment -* I can show off with my friends who are still studying pointless stuff and tell them I'm working for <company name removed> - -_CONs_ - -* There's a risk I'll lose my individuality -* The salary could be lower than expected - at least initially -* They'll get back to me at the end of this month, and I have to give an answer to someone else before that -* My friends and fianceé will probably hassle me to give them free goodies they think I'll get from the company - - -_*Working in a 'cool place', and fly high*_ -!>http://base--/img/pictures/lambruschini.jpg! Nope, sorry, the "Cake Software Foundation":http://www.cakefoundation.org/ unfortunately is not hiring. The alternative is a small company in my city, Genoa, which recently merged with a slightly bigger company based in Milan, which _might_ merge with a big national company involved in producing some successful (here in Italy and even abroad, a little bit) TV programs. Network involved are Italy's national channels, good ol' pal Berlusconi's channels, Sky Italy and (drums) MTV. -Cool, innit? What do they do? Well, interaction between mobile phones and TV through software and networks. Polls, SMS chat services, WAP application downloads, "take matey out of Big Brother's house", SMS/MMS blind dates related to some well known TV programs, tele-voting at Sanremo Festival etc. etc. - -_Preliminaries_ -Their first interview was the most unusual I've ever had, and I "already wrote":http://base--/blog/view/9/ about it: they even asked me to solve a riddle. Then they wanted to meet me again and showed me how they work in two different areas (see next section). They are really chilled out, friendly, they seem alright, even the main boss who deals with the company's financial side, which is always a plus. -By the way, they already offered me the job, and I'll have to give an answer next Tuesday - that's the bad part. - -_The Job_ -The Lead Developer of the company apparently seemed satisfied enough with my knowledge and Java skills. A first possibility for mewould be working for them as full-time Java Developer. Coding. Wake up, go to work, Code for eight hours, go home, sleep/other things, wake up, go to work... -It would be a good experience, and other people would choose this immediately over anything else. Coding what? Parsing algorythms for the SMS we receive, data manipulation, storage, re-formatting etc. etc. -The other possibility which they suggested after noticing my ability to write and research would be 2nd Level Help Desk. Get dozens of technical emails every day, file reports, notify developers when something goes wrong, propose solutions, implement solutions, monitor the systems and even execute queries on the production server on the fly, in real time (eeek!). -This could sound boring/annoying/scary but since I'm a freak I think it's an interesting prospective. Perhaps not as qualifying as being a Java Developer, perhaps not. - -_The contract and the salary_ -1200-1250 (or more) €/month, after tax. Which in my country is considered a more-than-reasonable pay, especially for a first job. Differnt form of contract, from consultant-with-VAT to renewable yearly projects, which is probably what I'd go for. Contributions/taxes paid, kind of, holidays and other vacancies included, kind of. - -_PROs_ - -* Perhaps better salary -* I know exactly what they offer, they told me their offer in detail -* Chilled out environment -* Perhaps I can sneak and read my desperate friends' SMS when they try to pull birds - -_CONs_ - -* Less steady contract, less security -* I'll hardly ever use my English skills, perhaps -* They NEED a yes or no by next tuesday -* My friends will probably hassle me to spy on other people's SMS traffic and/or make them win TV contests - -Here's where I stand. I can't complain, alright, but I must choose and act carefully. I'll sleep on it.
@@ -1,26 +0,0 @@
------ -permalink: "13" -filters_pre: -- redcloth -title: Baking a new CakeArticle -comments: [] - -date: 2006-04-13 16:21:00 +02:00 -tags: -- cakephp -- writing -type: article -toc: true ------ -Too right. Enough being a lazy writer, it's time to seriously produce something. I could sit here and pretend that long blog posts can make up for the lack of new articles, but I'd like to write something _proper_ and new. Judging by the latest stats people come here hoping to find either a blog _entirely_ devoted to CakePHP or some CakePHP related content. Well, actually they can "find":http://base--/tags/CakePHP/ quite a bit, but I'd like to be able to sport more Cake-related articles, bookmarks, and posts. My main problem is that I could add ten bookmarks about Cake right away, but the _latest addition_ showed on the front page would feature only bookmarks, which would be bad (yes, I do worry about silly things). At the moment this blog is the second easiest way to provide fresh content frequently enough to encourage visitors to come back, but articles could be even better. - -!<http://base--/img/pictures/baking_bear.png! - -Without further ado, I hereby announce that _I am working on some new articles on CakePHP_, at least one. I'd like to write something technical about CakePHP's advanced features, because that's where the current documentation is lacking, at the moment: associations, caching, some advanced components... they are topics which seem to interest those bakers who already baked their first cake and are now looking for some more icing. - -Interested? Good! Sadly, that's not what I'm going to write now, at least not the first article I'll be releasing. Please stop calling me names, there's no need to say that I'm just a lazy coward who doesn't want to get his hands dirty and write some tough stuff. And stop pulling those sad faces! Think about... new bakers. There are new people learning about Cake and I know there are, I just discovered "one":http://www.480x.com/2006/04/12/eureka/ yesterday almost by chance: he seems to be really enthusiastic about Cake, judging by his "latest post":http://www.480x.com/2006/04/13/eureka-part-deux/ (OK, nevermind the pic). -Those people are mostly more-or-less experienced PHP programmers who want to find an answer to all their development problems and annoyance. Well, my good friends, the answer lies in Cake. Cake can save us all and bestow powerful blessings of Good PHP Design and Well-structured Programming upon our messy spaghetti code! - -I almost considered writing a humorous article about Cake, but luckily I changed my mind. My old "CakePHP article":http://base--/articles/view/cakephp/ is already a few months old and was written when Cake was in pre-beta. I feel it's time for a more up-to-date howto and introduction to our framework, something maybe not as lenghty but easily readable by almost anyone interested in starting to learn about Cake. - -Baking lessons. Yes, that's it. I'm currently writing an article divided in ten lessons which could potentially turn casual cowboy coders into (apprentice) bakers. That could be easy for those already enlightened by OOP(Object Oriented Programming) and MVC(Model-View-Controller), and perhaps more difficult for others: at any rate, I'll try my best.
@@ -1,56 +0,0 @@
------ -permalink: "14" -filters_pre: -- redcloth -title: CakePHP hybrids -comments: [] - -date: 2006-04-14 09:55:00 +02:00 -tags: -- cakephp -- webdevelopment -- php -type: article -toc: true ------ -When I first talked to gwoo, CakePHP's project manager, I asked him if Cake had any potential _limitations_. I asked him - I was kidding actually - wether it would be possible to build an application like Gmail using the framework and he - very seriously - simply said _"yes, why not?"_. -I repeat myself when I say that CakePHP leaves plenty of freedom to developers within the bounds of its MVC structure: once you grasp the basic logic behind it, your possibilities are endless. I don't want to act as a Ruby on Rails fanatic and boast that _you can do anything with CakePHP_ and things like that, but I can certainly say that CakePHP can be _extended_ and _integrated_ with other collections of scripts, frameworks and projects. With limitations, of course: you probably don't want to force an integration between CakePHP and another MVC/Event Driven/Whatever framework, simply because it would be rather pointless and potential conflicts may occur. - -What I keep finding online is other open source projects adopting CakePHP as _backend_ and _structure_. I'm sure there are many examples which could be mentioned here, but I chose two in particular: one has been around for a few months and the other is just born. - -!<http://base--/img/pictures/amfphp.jpg! - -"AMFPHP":http://amfphp.org/ is quite an interesting project: - -bq. "[it] is an open-source Flash Remoting gateway. It's fast, reliable, 100% free and open-source. Flash Remoting is a technology built into the Flash player core that enables sending data between the server and the client seemlessly." - -In other words, it makes lifes much easier for developers who'd like to integrate their flash animations and script more tightly into their PHP application. If you are curious to see some results, head off to AMFPHP "showcase":http://amfphp.org/showcase.html. -Cool, but what has this project to do with CakePHP? Well, gwoo recently created "CakeAMFPHP":http://cakeforge.org/projects/cakeamfphp/, a CakeForge project which just yesterday reached its "0.4.0 release":http://rd11.com/posts/view/21, and it's fully compatible with AMFPHP 1.2.3 and CakePHP 0.10 final. -Here's an excerpt taken from CakeAMFPHP README.txt file: - -bq. "[...] -1) get CakePHP 0.10 final (http://cakephp.org) -2) get amfphp 1.2.3 (http://amfphp.org) -3) get the UFO js http://www.bobbyvandersluis.com/ufo/ -4) put amfphp into /app/vendors -5) put cakeamfphp into vendors -6) put the cake_gateway.php in /app/webroot -7) put the cakeamfphp.php in /app/views/helpers -8) put CakeMySqlAdpater.php in /app/vendors/amfphp-core/adapters -9) Voila: NetServices.setDefaultGatewayUrl( 'http://localhost/cake_install/cake_gateway.php'); -Access the service browser through -http://localhost/cake_install/vendors/cakeamfphp/cakebrowser/" - -The installation doesn't seem too painful at all. And - guess what - gwoo recently updated a very informative tutorial showing how to create a simple - but still impressive - bullettin board with CakeAMFPHP. - -_"Cool, but I never liked flash, what about AJAX?"_ - -!<http://base--/img/pictures/qooxdoo.gif! - -CakePHP has a nice AJAX helper to be used in conjunction with "prototype":http://prototype.conio.net/, but there are truly a lot of libraries, mini-frameworks, pre-built applications to create interactive desktop-like user interfaces. Some people may already know "qooxdoo":http://qooxdoo.oss.schlund.de/, - -bq. "[...] an advanced open-source JavaScript-based GUI toolkit. qooxdoo continues where simple HTML is not enough. This way qooxdoo can help you implement your AJAX-enhanced web 2.0 application - easier than ever before." - -In a recent "discussion":http://groups.google.com/group/cake-php/browse_thread/thread/ba219c64cd794764/1d77973293514618?lnk=raot on CakePHP user group someone suggested the possibility to integrate qooxdoo with CakePHP. Apparently qooxdoo people were "evaluating":http://www.nabble.com/Re%3A-qooxdoo-PHP-framework-project-p3799302.html various MVC frameworks, and Cake was obviously listed together with two other Rails clones for PHP. The good news is that "100rk":http://cakeforge.org/users/a100rk/ just started a new project called "CQX":http://cakeforge.org/projects/cqx, which - although still in pre-alpha a development demo is already available, and it _shows off_ most of qooxdoo's features... "Take a look":http://cqx.100rk.org/trunk/ - -Best of luck to 100rk and his brand new project, I really hope to see more of it soon!
@@ -1,81 +0,0 @@
------ -permalink: "15" -filters_pre: -- redcloth -title: I18n -comments: [] - -date: 2006-04-15 15:15:00 +02:00 -tags: -- cakephp -- webdevelopment -type: article -toc: true ------ -_"CakePHP will officially support Internationalization (i18n) from version 2.0"_. That is to say: not right now. That doesn't mean we have to wait, no chance! I'm Italian and there are plenty of bakers speaking a language other than English who might want to develop a multi-lingual website. - -I did, "once":http://v60.h3rald.com/, and the final result wasn't too bad in the end: every page of the site (except the articles) could be translated into Italian. Before examining my solution (which is far from optimal) I'd like to mention an excellent CakePHP package which allows basic (mostly statuc) i18n. -It looks like I missed an important baker in my recent "blog post":http://base--/blog/view/11: "Andy Dawson":http://www.noswad.me.uk/, creator - among other things - of the "Locale Package":http://cakeforge.org/snippet/detail.php?type=package&id=2, available at CakeForge. His solution actually came out after H3RALD.com v60 was already developed so I didn't use it for my own site. -At a first glance Andy's solution truly solves basic l18n problems in an elegant way: the most important code snippet is the "Locale Component":http://cakeforge.org/snippet/download.php?type=snippet&id=74 which provides the following functionalities: - -* automatic language detection based on browser's UserAgent string -* loading of locale files -* setting of customizeable (translated) messages - -The getString() method provided in the locale component is actually used through the double underscore function, which is already defined (but not yet implemented) in the standard CakePHP file @cake/basics.php@ (yes, this is a small core hack). Andy's double underscore function can take five parameters: - -bc. function __($msgId, $MessageArgs=NULL, $capitalize=1, $punctuate=0,$Code=NULL) -{ - require_once(COMPONENTS.'locale.php'); - $Locale = LocaleComponent::getInstance(); - return $Locale->getString( $msgId, $MessageArgs, $capitalize, $punctuate, $Code ); -} - - -These parameters are: - -* a "message id" or the message itself -* some parameters which can be passed to the message -* the message's capitalization: -** 0 = no change -** 1 = first letter of first word -** 2 = fist character of all words -* the message's punctuation: -** 0 = "" -** 1 = . -** 2 = ! -** 3 = ? -* the language code, if you need to override your page's language - -This is a convenient method which can be used everywhere, both in your controllers and in your views, to translate simple pre-stored messages. Where are those messages stored? In various locale files which must be placed in @app/controllers/components/messages/@ and look like this: - -bc. $messages = Array ( - 'LocaleSetTo'=>"Site locale set to UK English", - 'LocaleChangeTo'=>"Change site locale to UK English", - // Time related messages - 'ago' => "%s ago", - 'ages' => "a long time ago (%s)", -) - - -The locale package also comes with a _Language Controller_ you can use to handle language changes, and a useful rewrite of the _Time Helper_. Andy recently updated his "i18n tutorial":http://wiki.cakephp.org/tutorials:i18n available on CakePHP Wiki, a very interesting read on how to quickly add i18n support to yout first Cake blog (yes, the one described in the "Blog Tutorial":http://wiki.cakephp.org/tutorials:blog_tutorial_-_1). - -So far so good. The Locale Package provide some basic multi-lingual support in an efficient way, and I'd certainly use it if I decide to (re-)develop a multi-lingual site, but unfortunately this does not fully solve the problem. -If you want *full* i18n, for sure you'd like to have all the contents of your website translated, which is - normally - dynamic and maybe stored in a database. That was the case of my old website: all the pages are dynamic, not static, so I had to think about something else. -Since I only had plans to develop a _dual_ language site, I opted for a very lazy (but yet effective) solution: each table - more or less - had "duplicate" fields, something like this: - -* id -* title_en -* title_it -* text_en -* text_it -* created -* modified - -I basically defined a global $lang variable set to "en" by default and then I accessed the record's fields (for example in views) like this: - -@echo $data['Project']['text_'.$lang]@ - -Ugly, perhaps, but did the job. The good (or bad) thing about this technique was that I could modify the contents of a project, for example, regardless of the current language: in my add/edit view, I chose to generate _all_ the fields of a table and therefore modify all the fields of a project without switching to the other language. - -How will Cake support locales? Will we have "localized" database tables (and models?) Only time will tell...
@@ -1,40 +0,0 @@
------ -permalink: "16" -filters_pre: -- redcloth -title: Databases supported by CakePHP -comments: [] - -date: 2006-04-17 07:30:00 +02:00 -tags: -- cakephp -- webdevelopment -- databases -type: article -toc: true ------ -One of the most recurring questions on CakePHP User Group is probably _"Does Cake support X database?"_. Sure, most of us tend to use just MySQL for our websites and applications, but in certain situations some more _exotic_ database support makes the difference. A partial answer to the question above could be _"Yes, probably, at least partially"_: CakePHP offers support for some database "natively" (i.e. Cake folks made some _ad hoc_ database drivers), others through either "ADOdb":http://adodb.sourceforge.net/ or "PEAR::DB":http://pear.php.net/package/DB. - -CakePHP seems to use a _multiple level_ database abstraction: in other words, popular abstraction layers like ADOdb or PEAR::DB have been wrapped in a "driver" which basically extends the DboSource class (which is the most high level database abstraction). Some people don't like the idea, because this means that the could be some performance issues, for one, and also that inevitably not _all_ features offered by either ADOdb or PEAR::DB are used. In my very, very, very modest opinion (I'm not an expert on this matter), this solution focus on achieving good database compatibility leaving the doors open for further tinkering, if needed. - -!<http://base--/img/pictures/postgres.png! - -Having said this, yes, the possibilities are good that your favorite database is supported by CakePHP, more or less. Of course, as repeatedly pointed out by some CakePHP core developers, Cake dev team didn't and is not going to test _every_ database with Cake, using either of the two abstraction layers, but users are more than welcome to do so. - -Let's now have a look at what is _known to work_ with Cake: - -*MySQL* works fine, and is currently recommended as _preferred_ database solution. What about *MySQLi*? Well, thanks to mappleJoe there's a (PHP5 only!) "driver":http://cakephp.org/pastes/show/770e73e77e4d7a3d32c2f3de3f175512 ready to be used. - - *PostgreSQL*'s support is continuously improving. Something may work, something may not: the good news is that the folks who are using it are "sharing their thoughts":http://groups.google.com/group/cake-php/browse_thread/thread/85a29ab6ec6826a0/8eecea26ba53e1fd?q=postgres&rnum=1#8eecea26ba53e1fd with the rest of us. - -!>http://base--/img/pictures/sqlite.gif! - -*SQLite* is supported natively, or so it seems... what about the newest SQLite3? Yes, probably: there's a quick "howto":http://www.thompsonlife.net/index.php?section=9 on ThompsonLife.net to make it work through the dbo_pear driver. - -*Access* works through the ADOdb driver, as reported in CakePHP "wiki":http://wiki.cakephp.org/docs:databases (thanks ivanp). - -"FileMaker":http://www.filemaker.com/ is getting there: things aren't that easy, but bdb is doing "all his best":http://groups.google.com/group/cake-php/browse_thread/thread/572d8dd2ba4cbdf7/dca851c795247c0b?q=database&rnum=2#dca851c795247c0b to make it work, good luck! - -Neil Fincham was also trying to develop a custom driver to support "Pervasive":http://www.pervasive.com/ through a "unixODBC":http://www.unixodbc.org/ driver. Best of luck! - -For other databases, check ADOdb's "list of supported databases":http://phplens.com/adodb/supported.databases.html and use the @dbo-adodb@ driver, or use PEAR::DB (for fbsql, ibase, informix, msql, mssql, mysql, mysqli, oci8, odbc, pgsql,sqlite and sybase) using the @dbo-pear@ driver.
@@ -1,26 +0,0 @@
------ -permalink: "17" -filters_pre: -- redcloth -title: New CakePHP Manual (with associations!) -comments: [] - -date: 2006-04-18 08:47:00 +02:00 -tags: -- cakephp -type: article -toc: true ------ -Gustavo Carreno just "announced":http://groups.google.com/group/cake-php/browse_thread/thread/4e13231cc383b9bb/6414184c1058fadb#6414184c1058fadb a new release of the "CakePHP Offline Manual":http://cakeforge.org/frs/?group_id=53&release_id=82. Personally I was extremely happy to download this new release because it finally contains documentation and howtos related to CakePHP's Model Associations, which is perhaps one of the most used _advanced_ CakePHP features. -So I'll have no excuses not to learn how to use them, great... - -The manual is available in the following formats: - -* Windows compressed HTML (.chm) -* PDF -* HTML (multiple pages or single page) - -Furthermore, the CakePHP API is also available for download in .chm format, thanks to Mladen Mihajlovic. - -Well done guys. Really useful for people like me who are on dialup sometimes :) -
@@ -1,69 +0,0 @@
------ -permalink: "18" -filters_pre: -- redcloth -title: Textiling -comments: [] - -date: 2006-04-21 09:39:03 +02:00 -tags: [] - -type: article -toc: true ------ -Once upon a time I used "BBcode":http://en.wikipedia.org/wiki/BBCode. "CyberArmy":http://base--/bookmarks/view/cyberarmy and all its affiliated sites adopted it as _de-facto_ standard for forums and articles, so consequently more or less all my articles are bbcoded. -I could copy and paste the _BBcodeHelper_ I coded for this site, and it could be quite an interesting read for some people... well, tough luck: today I'd like to talk about "Textile":http://base--/bookmarks/view/textile-reference/ instead, which now I consider _the answer_ to all text formatting problems. - -If what I wrote up to here doesn't make sense to you, I'm rambling about the apparent necessity and the undeniable need of web developers, content managers, and writers to use something else other than HTML for adding style and formatting text. What's wrong with HTML? Nothing, it's just too "tiresome" to use: you have to remember to close all tags, break lines, use the @<strong>@ tag every time you want *bold text*, etc. etc. -Some people even freak out when you tell them that they have to use HTML in their text: "it's just _waaaaaay too difficult_ to learn and use" ...things like that. - -Whether you are scared to learn HTML, you don't want to, or you know it but you're too lazy to seriously thinking about manually use a markup language to write your article, I can say that you'll definitely become addicted to Textile. What? _"WYSIWYG(What You See is What You Get) HTML editors?"_ - C'mon, let's at least _try_ to be serious :) -Why BBcode doesn't help enough? Well, simply because I don't see why <code>[i]this[/i]</code> is easier than @<i>this</i>@: unless you have a particular phobia for angular brackets, it seems quite similar to me! - -What about @_this_@ instead? You use only two additional characters instead of seven. SEVEN. If I only want italcized text I honestly can't imagine myself using more than two extra characters. It's natural. It's human. - -!<http://base--/img/pictures/pear2.gif! - - Precisely. Textile is a _"Humane web text generator(TM)"_, it's simple, elegant and produces standard compliant XHTML code. "Dean Allen":http://www.textism.com/about/ should be worshipped by entire generations of web developers for inventing something so easy to use and so _elegant_ at the same time. Maybe not worshipped, but for sure respected. -I won't copy and paste the extremely useful "TextileHelper":http://cakeforge.org/projects/textilehelper/ for CakePHP either, simply because it's 4085 lines long and it would be pointless: you can just get it and use it. - -I'll just include some examples of textile formatting... - -| *Textile Code* | *Result* | -| @*text*@ | *bold* text | -| @_text_@ | _italicized_ text | -| <code>@text@</code> | @fixed width@ text| -| @"text":url@ | "linked":http://base--/ text | -| @!path/to/image!@ | image | - - -These are just some trivial examples. With textile you can also format text blocks, add custom CSS code and even float images or text! Tables? Sure, how do you think I created the table above? - -<pre><code> -| *Textile Code* | *Result* | -| @*text*@ | *bold* text | -| @_text_@ | _italicized_ text | -| <code>@text@<code>| @fixed width@ text| -| @"text":url@ | "linked":http://base--/ text | -| @!path/to/image!@ | image | -</code></pre> - -The simplest and most intuitive way possible! - -Regardless, Textile is not perfect and may have some quirks, at least the CakePHP helper: the_undefined pointed out in a "blog post":http://www.thinkingphp.org/2006/03/22/textile-a-personal-love-of-mine/ that external links are opened in the same window, so he provided a patch to the textile helper to handle this situation. -I also noticed that sometimes empty @style=""@ and @class=""@ attributed are generated, which don't do any particular harm, but they are not needed either... so here's a quick fix to improve your Textile experience in CakePHP: You can use this function ideally in your customized textile helper, @$data@ should be the return value of TextileHelper's @process()@ method. - -<pre><code> -function _fixTextile($data) -{ - $patterns = array( '/http://base--/', - '/style=""/', - '/class=""/', - '/ >/'); - $replaces = array($this->base, - '', - '', - '>'); - return preg_replace($patterns, $replaces, $data); -} -</code></pre>
@@ -1,93 +0,0 @@
------ -permalink: "20" -filters_pre: -- redcloth -title: In memory of Vittorio Cevasco (1916-2006) -comments: [] - -date: 2006-04-26 05:36:00 +02:00 -tags: -- personal -type: article -toc: true ------ -Yesterday my grandpa passed away, due to an aggravation of his health condition, breathing problems and various other complications. He died in hospital, on Liberation Day, the Italian national holiday celebrating the liberation of our country from the nazi-fascist regime by the Allied troops and partisans on April 25th 1945. He died exactly 61 years after that day. - -I'd like to remember my grandpa today, because he most certainly deserves it, as he was a really extraordinary person. - -_"Yes, I'm sure he was, isn't everybody extraordinary in some way?"_ - -Definitely: everybody is special, and people tend to say that especially when someone passes away. In my grandpa's case, actually I can say that in a slightly more absolute sense: his life was truly uncommon and very active. - -*A very active life* - -!<http://base--/img/pictures/grandpa.jpg! - -Vittorio Cevasco, my grandfather, was certainly the most active member of my family. We're talking about a man who was still able to drive a car up to last September (he was nearly 90 years old), and used to drive 500 Km on the motorway and mountain roads every year to go on vacation: he went to the same place, Mals Vinschgau, near the Italian-Austrian-Swiss border for over fifty years. He never had particular troubles to walk, and just in the past months started using a walking stick... before that he used to walk around the city by himself everyday, in his endless meanderings. He always had something to do: visit friends, go to public offices, go to our house in the countryside - he still used to cultivate the land with potatoes, tomatoes and basil as a hobby until a few months ago - and so on: he was really a busy man. -I can certainly say that I never though he was really old until after his wife, my grandma, died, about a year ago. Since then he really aged, and quickly, as she probably was one of the main reasons of his existance. - -When he was "young" (i.e. less than 80) he used to _compete_ with the lift in his flat running down the stairs. Everyone else was taking the lift, but he always chose to go on foot down the stairs, to keep in exercise. His other exercise was cultivating our land in Sessarego, near Bogliasco (Genoa, Italy), as a hobby more than anything, providing us with fresh _biological_ products like that extraordinary basil essential to make our very tasty local "pesto sauce":http://www.pesto.net/eng/index.php. -He always tried to convince me to do some work there, and he actually taught me various tips and secrets which will hopefully be useful in near future. Sadly, when he was alive I wasn't too keen on the idea of cultivating and maintain our land from time to time... but I kind of changed my mind recently, and I know he realized that just a few days before he died. - -After WWII he did various things, he even was erhm... somehow active in _certain international import/export activities_ of watches from Switzerland to Italy - quite a common thing back in the day, especially considering that the border was at just a few hours drive. -Later on he became an estate agent, working for a local office and then helping out some friends running their activity. In 2001 he hit his own personal record selling a fancy villa worth one billion of the old Italian Lire - which convert to approx. 500,000 Euro, but at the time it was much bigger money than that. With the commission generated by that sale he bought a brand new Ford Fiesta: he was 85 years old. - -But no, these are not the most extraordinary episodes of his life of course. He could fly - literally. - -He was one of the first man in Italy and the the first in Genoa area to get a flying license, back in 1934. A news which made the local papers at the time, and we still have that article somewhere. He wanted to become a civil pilot, but he never did: the Country needed him to protect our sky, when Italy joined the War in 1941. - -*The Aviator* - -!<http://base--/img/pictures/sessarego.jpg! - -My grandpa lived the early years of his youth in the village of Sessarego, where my great-grandfather bought an old house, after taking part in "Giuseppe Garibaldi":http://www.italian-american.com/garib-it.htm's expedition at Marsala (1860) fighting for the Italian independence (he's listed among "the ones":http://www.italian-american.com/garibal.htm who actually landed there). -There his parents used to have a few cows and produce milk, and one of his tasks was milking delivery... no scooters or cars, at the time, of course, and certainly not for a teenager like him: he often had to carry the milk barrels up and down the hill _on foot_, and I'm talking about 1-2 Km with at least 30-40 kilos on your shoulders! - -But my grandpa's plans were much different: he wanted to fly away, and high - literally. You can imagine the face of my grand-grandfather when he expressed his wish to become a pilot! Nobody ever did that, in the area, and becoming a pilot was, at the time, like becoming an astronaut in the seventies. -The price of the license was really high at the time, 1,200 Lire. That would be like at least 30,000 Euro now, especially considering that his parents weren't exactly rich. In the very end, my father supported him and provided as much money as he could afford: 1000 Lire. -But he still needed 200 Lire, so after hassling the flying instructors he signed an agreement stating that if they anticipated him the money he'd have paid them back once he started working: it was clear in fact that he'd have became a military pilot, as the Regime needed people for their brand new aircrafts, and the was felt imminent. -He paid them back, eventually, after passing both the civil and military tests. He became a sergeant for the _Regia Aviazione_ (Royal Airforce), with a salary of 20 Lire/month, ten of which went to the flying school, for many months, but he was still earning some very decent money. - -One of the most peculiar things about my grandpa was his memory: he was always able to tell you the story of his life, all the events, with the same details and _all the exact dates_, on every occasion. Even when we took him to the hospital, a few weeks ago, when we asked the nurse if he was self-conscious she said: _"Yes... well, he was talking a few hours ago, but I don't know if he was raving or what... he said he was a pilot, and that he used to fly at 350Km/h..."_ - -!>http://base--/img/pictures/r2002-main.jpg! - -Damn right. His old "Re 2002":http://www.comandosupremo.com/Re2002.html was able to fly at 350 Km/h if pushed, at a standard altitude of 35,000 m, while carrying a 500Kg bomb. It was _his_ plane, and he never forgot that, even a few days before he passed away. He'd tell you all the stats, the mechanics, the technical details and all the tricks to perform acrobatic maneuvers if you asked him... Not that actually anybody ever did, because _every_ time something reminded him of that, even slightly, he'd start talking about the old days when he was commanding his squad patrolling the Italian borders. - -Last year, after my grandma died and he didn't feel like driving 500Km to go to the mountains (for the first time in his life), I had to drive his _Fiesta_ myself in my first long driving journey. At first I wasn't too sure I'd have enjoyed the drive, partly because of the long distance and partly because I was going to be alone with my grandpa for about six hours, and I was afraid of not be able to find enough topics of conversation... - -That fear went away almost instantly right a few minutes after we started the journey. -When we got on the motorway, I started complaining that my dad was going slightly over the limit with his brand new Peugeot 307: _"Look, he's already going at 140km/h and we just started the journey!"_ - -_"Centûcäranta chilumetri l'ûa... û më aeruplannu pûeivä fâ ï trexëntusincûanta cûmme ninte!"_ -[140 kilometers per hour... my plane could easily do 350!] - -He normally used to speak in _zeneise_ ("Genovese"), Genoa's dialect, mixed with some Italian _if he really had to_. That was it: if you started talking about speed, technology, engines, history or any other topic which was _slightly_ related to his plane, the war, the regime etc. he always started off talking about his past and his plane, ignoring everything else. -My grandma used to get kinda annoyed about it... on every occasion, if he had a chance, he'd start talking about _that particular day in 193x/4x_ and so on: we all knew that, and actually I enjoyed listening to his stories, mostly because they were genuine and authentic relics of an old and glorious past. I think in his mind he wanted us all to remember him in that way, to always keep in mind that he was a pilot and how he enjoyed it, even when he went in jail for it, even when his plane was taken down... - -!<http://base--/img/pictures/Re2002.jpg! - -On that day right after he was assigned to a new base, they asked him to perform some exercises in the air, loops and all sort of acrobatics: _"ë sölite cöse che së dûviëiva fä in t'ë l'aviäsiûn"_ [the usual things you had to do in the airforce]. -He was just starting practicing the Re 2002 at the time, but he quickly found out that it was _extremely_ maneuvrable, at least to the standards of the time: the equivalent of a top range today's fighter. -He started off with some usual things, performing various twists in the air, loops, etc. etc. until he had to end his exhibition with a dive from an altitude of 10,000m down at maximum speed to a limit of 1500m... On that particular day a colonel from another base and some other high-ranking officer were down on the ground near the aircraft to enjoy the show, and check that everything was performed correctly. My grandpa was aware of that, so he decided to perform a great show especially for them that day: he went up to 10,000m, and then dove down accelerating, helped by gravity... he went down and down, faster and faster, people down on the ground were staring at him waiting for him to pull up the plane, but nothing, he still went down and down so that quickly the small crowd of captains and colonels got scared and run away in every direction: _"He'll crash, he'll crash!"_ -He did not crash, not that day... he went down up to slightly less than 100m and _then_ pulled up the plane: ar real wonderful _extreme_ performance. Now imagine this beast of a plane coming down at 300Km/h and accelerating, making a terrible noise typical of the engines of the time and then _pull up suddenly_ right above your head: one more second and he wouldn't have been able to tell that story. -He was called by the commander of the base who told him: _"Cevasco, you're hell of a skilled pilot, but now I have to put you in jail for a day for not obeying your orders of staying above 1500m"_ - That, I reckon, was one of the best days of my grandpa's life. - -He was never captured, but his plane was taken down by an English _Spitfire_ in the South of Italy. The war was nearly finished, and there were just those little air fights from time to time. He really risked a lot that day, and managed to attempt an emergency "landing" completely destroying his plane along as part of his jaw, which was alright after a few months. -Since then he never flew again, and managed to escape to be re-called in duty. But he did like flying back with his memories to those glorious days. - -A few years ago my dad showed him Microsoft's _"Flight Simulator 98"_, and some other flying games. He was amazed at the graphic, but not so satisfied with the whole _simulation_ thing: not even close to reality, too damn easy. - -_"Cäu më, te vûeive vedde tïe a fä vûlá û më aeruplannu"_ -[My dear, I'd have liked to see you trying to fly _my_ plane] - -...and that was it: the beginning of another journey back in time. - -He always had a very practical view of life and especially of technology. He wouldn't take you seriously and would not be interested in knowing about programming and the Internet, unless it could produce some concrete result: - -_"Ti che ti stûddi da insegnë e che ti stë sempre davanti a-û cumputer, nun te puriësci truvä ûn sistemmä de anä in t'ë a banca e piggië qualche miliûn the Euro?"_ -[You that you're studying to become an engineer and that spend so long in front of the computer, couldn't you find a way to get into a bank and get out some million of Euro?] - -He'd have loved me to become a [rich] hacker, probably... But the last time I saw him, last Friday, he seemed happy enough to hear that I was just about to start working. - -He realized that I finally found a good job after my studies, and then my dad told him Roxanne and I would have moved to the countryside, in Sessarego... He made a big effort to move the muscles of his mouth in a large smile: he was happy.
@@ -1,127 +0,0 @@
------ -permalink: "21" -filters_pre: -- redcloth -title: Birthday present? Web space, please... -comments: [] - -date: 2006-04-27 14:47:00 +02:00 -tags: -- website -- review -type: article -toc: true ------ -Today is my birthday! "Not too happy":http://base--/blog/view/20/, but still my birthday after all. What presents did I get from my relatives and friends? Well, various things, but I told my parents and uncles I actually needed some web space... _"What? Didn't you have the hosting sorted out?"_ -Well, I had, up to a few days ago when my friends and hosting provider, DeWayne Lehman, decided to close down his "company":http://www.block-house.com. The reason being, to cut a long story short, that he can't keep up with competition: he doesn't have enough customers, and he can't afford server upgrades, while other companies are literally giving space away. -That was a pity, not only because Block House used to host various non-profit orgs and initiatives, but also because the guy who run it was an excellent admin, always offering excellent support. - -Anyhow, in the end I'll have to transfer all five of my sites to a new host, so here we go again: _what's the best hosting company?_ -Obviously it depends a lot on what you're looking for, and here's what I need: - -* At least 4GB of space -* At least 30GB/month bandwidth -* PHP of course, but also other languages like Perl, Python and Ruby (+ Rails support) -* MySQL databases... at least 10-20 -* Be able to host 5-6 sites minimum -* Subdomains allowed (10 in total?) -* FTP _and SSH_ access -* Subversion, if possible - -All this for less than 10$/month, ideally 5$, on shared hosting. I already made my choice and if you're reading this post it means everything worked fine, but anyway, let's have a look at what the market can offer for my needs. I only went for US-based hosts: Italian hosts are terrible and US hosts are normally more reliable and cheaper. - -!<http://base--/img/pictures/dreamhost.gif! - -The first hosting company I was tempted by was "DreamHost":http://www.dreamhost.com. They can literally sell you anything but their mother, at stupidly cheap rates for what you get (apparently): - -* 20GB of space -* 1TB (!) bandwidth -* PHP4, PHP5 Perl, Python and Ruby + RoR support -* Unlimited databases -* Unlimited hosted domains -* Unlimited hosted subdomains -* FTP and SSH access -* Subversion and CVS -* ...and more - -For 7.95 if you pay two years in advance. And the first time you can get up to 97$ off by using one of the thousands referrer's coupons available on the net. OK, where's the catch? Well, there's a "bad review":http://futurosity.com/231/why-dreamhost-sucks about them which points out that their reliability is not too great, for example, and that the seem to be rather dodgy in general. "They are overselling, they'll soon enforce CPU restrictions" etc. etc. -_...let's move along_ - -!>http://base--/img/pictures/rails.gif! - -I might try out Ruby on Rails someday, so perhaps I thought it would be wise to choose a host supporting it, for a change. The first Rails friendly I thought about was "RailsPlayground":http://www.railsplayground.org, which started off as FREE Rails host and then ended up offering interesting commercial hosting plans. They are not bad, and I'd have probably gone with them if I had only one site to manage: for 60$ a year you get: - -* 3GB of space -* 30GB bandwidth -* PHP4, PHP5 Perl, Python and Ruby + RoR support -* Unlimited databases -* Unlimited add-on domains -* Unlimited hosted subdomains -* FTP and SSH access -* Subversion and CVS -* ...and more - -Well, the only reason why I didn't go with them was that I did slightly more space, only that. The plan for 5GB of space costs 11$/month, which was too expensive for my liking. - -!<http://base--/img/pictures/textdrive.gif! - -Since we're talking about Rails, why not "Textdrive":http://www.textdrive.com? Founded by 200 IT professional, hosts high quality sites, it's the official Rails host... An "elite" solution, here's what you get: - -* Use Apache and Lighttpd web servers side-by-side -* Host PHP4 and PHP5 web pages and applications -* Host a weblog using Textpattern, Wordpress, MovableType, Typo, etc -* Host Ruby and Ruby on Rails applications (including FCGI and hundreds of gems) -* Host Perl applications (including 100's of Perl modules) -* Host Python applications like Django -* Manage your code base with version control (Subversion, SVK, Darcs, Monotone & Arch) -* Share iCal files over WebDAV -* Mount a WebDAV drive on your desktop (like iDisk) -* Easily create free subdomains with wildcard DNS -* Store your Basecamp file uploads over SFTP -* Access your account via SFTP and SSH -* Add domains, unlimited IMAP and POP mail boxes and mail aliases through a control panel -* Check your email through Webmail -* Host Mailman mailing lists complete with archives -* Use MySQL (default), PostgreSQL, SQLite and Berkeley databases - -Plans start at 12$/month for 1GB of space and one website... The 3GB one is 40$/month, for 20 sites in total. Too bad it's too expensive for me as they are truly the top for shared hosting - I think. - - -"Host Gator":http://www.hostgator.com/, which seems to be one of the most frequently recommended at SitePoint.com forums, is not bad either. They have a "hatchling" plan for 3,5GB at 6.95, which wasn't bad, but it only allows one domain to be hosted. The "Baby" plan allows unlimited domains and is 9.95$/month, which is kinda dear. You get: - -* 5GB of space -* 75GB bandwidth -* PHP4, PHP5 Perl and Python -* Unlimited databases -* Unlimited add-on domains -* Unlimited hosted subdomains -* FTP access -* ...and more - -No SSH, no SVN and no Rails: out. - -"Site5":http://www.site5.com/ is also one of SitePoint's favourite, but still has limitations on the number of sites. I would have got the SuperHosting XTREME, for 7,77$/month: - -* 11GB of space -* 400GB bandwidth -* PHP4, PHP5 Perl, Python, Ruby + RoR support -* Unlimited databases -* 5 domains hosted -* Unlimited hosted subdomains -* FTP and SSH access -* ...and more - - Not bad, a little bit too much for only 5 sites... I needed 6, too bad :/ - -<div style="float:right; padding:3px;"><script src="http://www.bluehost.com/src/js/h3rald/CODE2/488x160/1.jpg"></script> </div> This site is currently hosted on "BlueHost":http://www.bluehost.com, a hosting company established in 1996, which seems to be reliable enough (not many complaints on the net) and seems serious enough. They don't offer subversion and WebDAV for "security reasons" and in order to get a shell account you have to send them a copy of an ID card. Annoying? Well, perhaps for some: this made me understand that they don't allow just anybody to get SSH access unconditionally, and I didn't mind. I sent them a scansion of my ID card and I got a friendly support email after a few minutes, confirming that it was activated. Here's what I got: - -* 15GB of space -* 400GB bandwidth -* PHP4, PHP5 Perl, Python, Ruby + RoR support -* 20 MySQL databases + 10 PostgreSQL databases -* 6 domains hosted in one account (easier for me!) -* 20 subdomains + 20 parked domains -* FTP and SSH access -* ...and more - -For 6,65$/month, 2 years pre-payment. One of the good things is that they are not fussy about giving the money back if you cancel. Anyhow... let's hope for the best, so far, so good.
@@ -1,141 +0,0 @@
------ -permalink: "22" -filters_pre: -- redcloth -title: Ten minutes on Rails (while eating Cake) -comments: [] - -date: 2006-04-29 15:29:00 +02:00 -tags: -- cakephp -- rails -- webdevelopment -type: article -toc: true ------ -Today I decided to do something different, something I've been dying to do since before coming across CakePHP: give Rails a _proper_ try. Like many other PHP developers out there, when "Ruby on Rails":http://www.rubyonrails.org came out I felt damn jealous and terribly tempted to learn Ruby _only_ to start using such an amazing web development framework. At the time I actually even started reading various tutorials about it, and I was literally amazed at how RoR revolutioned the way of developing web applications. - -!<http://base--/img/pictures/rails.gif! - -One of the main problems which made me - sadly - abandon Rails was Ruby itself: personally I've never seen a programming language with a cleaner and more elegant syntax, but also - at least at the time - there weren't many hosts supporting it. LuckilyI found CakePHP quickly after that... -Now however, more and more hosting companies boast full Rails support, and so when recently I "had to move":http://base--/blog/view/21/ to a new host, I made sure it was Rails-friendly, _just in case I wanted to give Rails another try, someday_. -Oh well, the temptation was so strong that today, only a two days after switching to my new host, I felt I _had_ to try it, I _had_ to taste something different than the usual Cake. - -I decided to (re-)read and follow the "OnLamp tutorial":http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html about RoR, step by step, once again. I quickly typed @rails cookbook@ from my shell and voilá, rails silently creates the skeleton of my application: - -README -Rakefile -app/ -components/ -config/ -db/ -doc/ -favicon.ico -index.html -lib/ -log/ -public/ -script/ -structure.txt -test/ -tmp/ -vendor/ - -That's familiar: it's very similar to what CakePHP's directory structure used to look like. Now Cake _evolved_ and adopted its own schema, which - I must say - seems more functional than RoR's, at least at a first glance: - -* app/ -** config/ -** controllers/ -** models/ -** plugins/ -** tmp/ -** vendors/ -** views/ -** webroot/ -* cake/ -** config/ -** docs/ -** libs/ -* vendors/ - -!>http://base--/img/pictures/cakephp.png! - -Cake felt the necessity to divide what you can mess with (@app/@, @vendors/@) from what you'd better not touch (@cake/@). Rails just left everything on the same level. - -After creating my database and the necessary tables I have to edit @config/database.yml@, which corresponds to Cake's @app/config/database.php@. Then things start to become a bit different from Cake, as Rails offers some very handy built in scripts which can be used to automatically create your application's files, i.e. executing @ruby script/generate controller Recipe@ creates the controller and other bits: - -bc. exists app/controllers/ -exists app/helpers/ -create app/views/recipe -exists test/functional/ -create app/controllers/recipe_controller.rb -create test/functional/recipe_controller_test.rb -create app/helpers/recipe_helper.rb - - -And so on. Anyhow... I followed the tutorial and yes, it was a nice read. CakePHP borrowed a lot from Rails but not everything. Inevitably Ruby's syntax is less verbose and looks very very clean: - -<% highlight :ruby do %> -class RecipeController < ApplicationController - scaffold :recipe - - def list - @recipes = Recipe.find_all - end - - def edit - @recipe = Recipe.find(@params["id"]) - @categories = Category.find_all - end -end -<% end %> - -While CakePHP's, simply because it uses PHP and not Ruby, looks less pretty: - -<% highlight :php do %> -class RecipesController extends AppController -{ - var $scaffold; - - function list() - { - $this->set('recipes', $this->Recipe->findAll()); - } - - function edit($id) - { - $this->set('recipe', $this->Recipe->find("id = $id")); - $this->set('categories', $this->Category->findAll()); - } - -} -<% end %> - -CakePHP Development Team did a great job translating some of Rails functionalities into PHP, and the while CakePHP's syntax is *much* cleaner if compared to PHP's standard spaghetti-code approach, Ruby just looks much more clear, sorry. _Imagine a world without funny unnecessary brackets, pointless semicolons and where everything just looks better_: that's Ruby. - -Sigh. Now I do understand why Rails was built in Ruby and not in PHP: simply because a PHP's Rails would have been outscored by its "Ruby port"! - -One thing I liked about Rails which has not been ported in Cake (yet) is a somehow smarter way of scaffolding. While the Ruby code above actually works, the CakePHP's edit method doesn't, or better, it does but not as expected: when you remove @var $scaffold@ the scaffold is just plain gone, and you have to code everything yourself, while in Ruby you can leave the scaffold and then develop methods one by one, and still be able to use scaffolded methods if you didn't define the custom ones. - -The other thing I noticed about RoR is that it definitely handles errors better! This is probably another language issue. I basically forgot to set a category for the recipes, and when executing my custom list of recipes I got a very, very well structured error page showing something like: - -<% highlight :ruby do %> -NoMethodError in Recipe#index - -Showing app/views/recipe/index.rhtml where line #18 raised: - -You have a nil object when you didn't expect it! -The error occured while evaluating nil.name - -Extracted source (around line #18): - -15: <% @recipes.each do |recipe| %> -16: <tr> -17: <td><%= link_to recipe.title, :action => "show", :id => recipe.id %></td> -18: <td><%= recipe.category.name %></td> -19: <td><%= recipe.date %></td> -20: </tr> -21: <% end %> -<% end %> - -I took a screenshot of the page, because it was too nice: "check it out":http://base--/img/pictures/rails_error.jpg. This error page really tells you what's wrong, and even prints the lines of code around the error! It also lets the developer check the full backtrace and every sort of information... Can we have this in CakePHP please? I actually started to develop something like this, but seemed quite hard to do in PHP.
@@ -1,85 +0,0 @@
------ -permalink: "23" -filters_pre: -- redcloth -title: A look at Symfony -comments: [] - -date: 2006-05-01 13:42:46 +02:00 -tags: [] - -type: article -toc: true ------ -CakePHP is THE perfect PHP framework, so _we_ don't need anything else. Oh well, no. I personally love CakePHP, but I do believe other PHP frameworks can be interesting and maybe even useful, so today I thought I'd have a look at the "Simfony Project":http://base--/bookmarks/view/simfony/. This framework seems to be mentioned here and there on the Net in many different ways, someone said it can do wonders, some said it's more advanced, others said something like _"qcodo sucks.. cake stinks.. symfony rocks!!!!!"_, so it OUGHT TO be pretty cool, definitely. - -!<http://base--/img/pictures/symfony.gif! _Know thy enemy_ someone said (OK, bad joke), so let's have a look at this interesting alternative to CakePHP. _No dude, not another MVC-like, pseudo-Rails, AJAX-worshipping framework!_ Yes, another one. Actually Symfony is more than that: while people _can_ say CakePHP is similar to RoR for some features and for the strong MVC architecture, Symfony chose another road. Yes, MVC is still there, but the first thing I noticed after reading their "beginners' tutorial":http://www.symfony-project.com/tutorial/my_first_project.html was that one of the things which Symfony seems to use quite regularly (and Cake doesn't)is code generators. Things like executing @symfony propel-build-sql@ or even @symfony propel-generate-crud frontend post Post@ from command line to generate your code automagically, which CakePHP - except for our little _bake_ script - doesn't use. -_See? Simfony is MUCH better and MUCH more advanced than Cake!_ No, hang on a minute... I just listed one thing which Symfony has more than Cake, is there any more? Yes, there is, for now: i18n - internationalization. Symfony comes with native multi-lingual support and Cake doesn't - yet - although there are rumors that i18n for Cake 2.0 is _almost done_. This is not speculation, re-read the sentence: First off I'm referring to Cake _2.0_ (which means it will take a while) and also I read it in the "Cake 2.0 ToDo List":https://trac.cakephp.org/wiki/Proposals/2.0ToDoList. - -One of the most recurring and yet pointless critiques to CakePHP from Symfony enthusiasts is that the sites developed with CakePHP look terrible. I perfectly agree, look at "this":http://www.h3rald.com/ and tell me if the developer is not a complete and hopeless idiot when it comes to design and look 'n' feel! -I do agree that some CakePHP sites (mine, mainly) don't look too good, and probably the Cake Software Foundation should pay me to put it offline. I also agree that the Symfony website looks nice and is more pleasant to the eye than CakePHP's, but I do hope that the old "design contest" doesn't get forgotten... - -!>http://base--/img/pictures/askeet.gif! The Symfony team also did something truly remarkable: a comprehensive tutorial, an advent calendar, some great free source code to download and a fully functional Web 2.0-compliant online application _all in one_. I'm referring to "Askeet":http://base--/bookmarks/view/askeet/, a Symfony-powered website which has been built from scratch using the framework and its development is well documented in "twenty-four tutorials":http://www.symfony-project.com/askeet. In one move these guys made an interesting website, some useful documentation and self promotion... what can I say: for next Christmas we'd better chain PHPnut, gwoo, nate & the others to their chairs, close them in a small room and force them to code something like that in twenty-four days. -If I were to mention something which Symfony did well I'd certainly say the "documentation":http://www.symfony-project.com/content/documentation.html. Screencasts, tutorials, advent calendars, a book, a wiki, API etc. etc. All done, and all good, I must admit that. The good news is that CakePHP is slowly catching up, and now the "manual":http://manual.cakephp.org looks pretty decent. - -OK, enough flattering and let's talk about something I didn't like about Symfony. I downloaded the thing and it turns out it's 1.2MB in size, _a hell of a framework!_ After extracting the beast I had a look inside and found three directories: @data@, @lib@ and @bin@. Not bad. I opened @bin@ and found the three magic symfony scripts, alright; I opened @data@ and found nine directories, I opened @lib@ (the real deal) and found 25 directories! These guys maybe never heard of something called _"an organized directory structure"_, or perhaps I'm just too used to Cake's logic and essentiality. -Browsing around I found something like 247 .dat files defining country names and currencies in all the languages of the world, script.aculo.us and prototype libraries, javascript calendars and other wonders... Weeeeheee! -The good thing is that Symfony seems to include pretty much everything you'd ever need, the bad thing is that _personally_ I will never use any of the thirteen Chinese-related .dat files in th i18n directory. This philosophy is exactly the opposite to Cake: at first i got pissed off when I noticed that CakePHP doesn't include prototype by default, but then I realized that if they started include _everything_ you _might_ need _someday_ we'd end up like... like Symfony, with 1.2MB of stuff 500KB of which - at least - will most likely not be of any use for the average developers. - -The other dangerous consequence of including more and more stuff is the so called _widget-temptation_: If you include script.aculo.us you MUST show off and offer some weird toy someone _may_ use... well, Symfony seems to go in that direction, and someone compared it to component-driven frameworks like eZ Publish rather than more general-purposes projects. I'm sure the "admin generator":http://www.symfony-project.com/content/book/page/generator.html can be damn handy, but what happens if I'm a terribly annoying guy who'd like to tweak it and change it so that it fits _my_ needs? In Cake... well, there's nothing "official" included in the core, and when you find a third-party helper or component you feel you can take a look and poke around, extend it, or change it totally. It's all up to the developers and their needs: personally think that widgets are useful, but some times people like a bit more flexibility. - -So the overall impression of Symfony is that - regardless its arguable, self-proclaimed, _enterprise-ready_ status - it is rather complex, with a steep(er) learning scheme which doesn't justify the extra features. - -From the "My first Symfony project":http://www.symfony-project.com/tutorial/my_first_project.html tutorial: - -bq. So, the weblog will handle posts, and you will enable comments on them. Edit the file sf_sandbox/config/schema.xml and paste the following configuration: -<small> -<pre><code> -<?xml version="1.0" encoding="UTF-8"?> -<database name="propel" defaultIdMethod="native" noxsd="true"> - <table name="weblog_post" phpName="Post"> - <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" /> - <column name="title" type="varchar" size="255" /> - <column name="excerpt" type="longvarchar" /> - <column name="body" type="longvarchar" /> - <column name="created_at" type="timestamp" /> - </table> - - <table name="weblog_comment" phpName="Comment"> - <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" /> - <column name="post_id" type="integer" required="true" /> - <foreign-key foreignTable="weblog_post"> - <reference local="post_id" foreign="id"/> - </foreign-key> - <column name="author" type="varchar" size="255" /> - <column name="email" type="varchar" size="255" /> - <column name="body" type="longvarchar" /> - <column name="created_at" type="timestamp" /> - </table> -</database> -</code></pre> -</small> -This code is longer to read than to explain: It describes two tables Post and Comment. - -NO! Sorry, no. This is NOT simple. It is logic, clear and makes perfect sense, it's not that I'm retarded and I can't write or read XML files, it's just unnecessary. You create this and then call the slave-script to create the model and the corresponding database table... This is exactly the _enterprise_ way of doing things CakePHP made me forget. _Convention over configuration_. Not hundreds of configuration files. - -But there's more: you can even configure your views with some simple @.yml@ (!) file: -<pre><code> -default: - http_metas: - content-type: text/html; charset=utf-8 - metas: - title: The best weblog ever - robots: index, follow - description: symfony project - keywords: symfony, project - language: en -</code></pre> - -Sure, it's good. It helps, and it's certainly useful, but I'd rather code a custom component to do the same thing with a few arrays. Again, this is arguable. -Validation is done through .yml files, and you can configure your administrator backend through a .yml file too! Cake has .ini-based ACL, and that's about it: if I don't want to use them I don't use them. -Clearly you probably don't have to edit all settings in the configuration files, but I just don't like the approach, personally. - -Oddly enough, Symfony's slogan seems to be "professional web tools for lazy folks"... - -It all depends on what you need. For _my_ needs I chose CakePHP, and "here's why":https://trac.cakephp.org/wiki/Cake/About.
@@ -1,65 +0,0 @@
------ -permalink: "24" -filters_pre: -- redcloth -title: CakePHP 1.0 released -comments: [] - -date: 2006-05-03 05:06:00 +02:00 -tags: -- cakephp -- webdevelopment -type: article -toc: true ------ -As "Digg":http://digg.com/programming/CakePHP_1.0_has_been_released_ points out, the first _stable_ version of CakePHP was released, yesterday. I should have posted yesterday about it, and no, I didn't forget: I was just busy downloading the new version, have a look at the new site, talk to people etc. - -Anyhow, it's ready, just baked and smells damn good. Go get it if you didn't already, it's available at "the usual place":http://cakeforge.org/frs/?group_id=23, even this time you won't be disappointed. CakePHP now reached the 1.0 milestone, in a way which reminds me a lot about Mozilla Firefox: a lot of people were already using it _before_ it went stable officially! - -!<http://base--/img/pictures/CakePHP_1.0.png! - -The CakePHP Team has been humble enough not to declare their product _stable_ before the time. I personally considered CakePHP stable _enough_ since RC2... and considering that this site and many others have been built on alpha, beta and RC version, I think people can get an idea of Cake's reliability. -Nothing (too) new came out the oven this time: CakePHP 1.0 is mainly a bugfix release, with all the features we've learnt to love. It's just _better_: a lot of things have been fixed, model associations work better, etc. etc. You can read the "changelog/announcement":http://cakeforge.org/frs/shownotes.php?group_id=23&release_id=85 or have a look below for a quick summary of the new features and most interesting fixes: - -<pre><code> -Revision: [2420] -Added fix for Ticket #320. -Fixed Model::save() so it will only allow a model to save itself. -Fixed Model::save() when saving a HABTM association - -Revision: [2437] -Adding fix for Model::findNeighbours(). -Was returning all associations and fields. Now recursive -is set to 0 and only returns the prev and next keys array - -Revision: [2456] -"Enables use of Controller::$data in addition to Controller::$params['data']" - -Revision: [2490] -Fixing a bug that occurs when connecting to two different -databases on the same server, and enabling cross-database -model associations - -Revision: [2491] -Adding Microsoft SQL Server driver [EXPERIMENTAL] - -Revision: [2577] -Adding $alias property to enable future Oracle support - -Revision: [2625] -Bringing all DB drivers up to date - -Revision: [2653] -Adding check for custom error class in app/. -Added check for AppController::appError(); will be called if this method -is in AppController. -</code></pre> - -!>http://base--/img/pictures/cakesite.png! - -If you're not too excited about this new release, maybe you should have a look at "www.cakephp.org":http://www.cakephp.org. Different? Damn right it is: it looks like someone listened to our prayers for a new website design. The merciful soul is "Armando Sosa":http://www.nolimit-studio.com/, the winner of CakePHP's design contest. He's a latin-american web designer who had the GREAT idea of thinking about an _innovative_ design for the Cake site... Actually my dad didn't think that way: _"That's not new, that way of advertising was all over the place when I was a kid!"_ And he's right, Armando thought that a fifties-like template would have been perfect for Cake. Forget all the smooth, roundy-and-chubby, toons-like "official" Web 2.0 designs (beta), the new Cake site needs to stand out of the crowd... - -!<http://base--/img/pictures/fonz.jpg! - -<br /><br /> -_Heyyy! Well done guys..._
@@ -1,38 +0,0 @@
------ -permalink: "25" -filters_pre: -- redcloth -title: Digg Effect - the day after -comments: [] - -date: 2006-05-05 03:59:00 +02:00 -tags: -- web20 -- webdevelopment -- internet -type: article -toc: true ------ -...So it turns out that my "last article":http://www.h3rald.com/articles/view/rails-inspired-php-frameworks/ appeared on "Digg":http://www.digg.com homepage. -This was quite a pleasant surprise: I didn't expect that an article submitted to _my own site_ could make it that far! I thought you'd need a relatively well-known website, mafia's support, some divine intervention and a terrific amount of luck, but it seems that sometimes an interesting article about an interesting subject can be enough. I'll probably write a more detailed report of what happened soon, in another article rather than a blog post, but for now I just wanted to post a short summary here. - -Two days ago I decided to write a roundup of the six Rails-inspired PHP frameworks, CakePHP, Symfony, PHP on Trax, Code Igniter, Biscuit and Pipeline. The reason for this was that I couldn't find anything comparing all of them and such comparison could have been useful for some new _bakers_. OK, I confess, when I started writing the article I thought I'd submit it to Digg and see what happens: I saw that another "roundup":http://www.phpit.net/article/ten-different-php-frameworks/ made it to the first page and people were quoting it everywhere on the net. It's a nice article, but - in my humble opinion - not too exhaustive. -Then I read a comment by someone to the "digg":http://digg.com/programming/CakePHP_1.0_has_been_released_ of the latest Cake release stating: - -bq. Yes, they are similar - both were inspired by Rails, but Cake has gone further to differentiate themselves. Here's a decent (but not great) overview of some frameworks: http://www.phpit.net/article/ten-different-php-frameworks/ - -At that point, I thought that another round up, perhaps more Cake-centric, was in order. The other reason was that in one of my recent "blog posts":http://www.h3rald.com/blog/view/23/ I tried to compare CakePHP and Symfony, but obviously my emotions got in the way and in the end I noticed I was kinda _attacking_ Symfony. That was a blog post though, and that's half-allowed, but I felt that I should have written a slightly more objective _article_ mentioning also all the other competitors. - -Anyhow, right when I went to submit my article to Digg, it turns out that another guy wrote "a similar round up":http://digg.com/programming/5_Next_Generation_PHP_Frameworks, which made it to Digg's homepage. That was an annoying cohincidence, but in the end things didn't go too bad: his roundup was more generic, while mine was more specific and detailed. - -!<http://base--/img/pictures/dugg_detail.png! - -After submitting my article the reaction wasn't instantaneous... 5, 7, 10, 13 diggs in the first two hours. Then shortly I made it to 30 and when the 40th visitor dugg it my article was moved to the first page! -I immediately noticed it when I refreshed my stats page: a minute before my girlfriend was here telling me "oh look, over 400 visitors... not too bad". Then I refreshed the page and it said _539_, I refreshed again and said 600-something... eeep... Digg effect! - -A special praise goes to my new hosting company, "BlueHost":http://www.bluehost.com/track/h3rald/CODE5: the server didn't go down and it managed the extra traffic fine! A good test for CakePHP as well, since I built this site with it. - -So here I am... over 5000 visitors read my article, about 600 people dugg it, nearly 40 people commented it on digg.com and 20 directly on my site. And - except for the usual _Rails-is-better-than-anything-else_ comments - they were generally positive. Over 250 people bookmarked on del.icio.us and many blogs mentioned it in many different countries. - -Money? Didn't make much with adsense at all: programmers _don't_ click on ads! -Bandwidth? About 1GB was gone in the first five hours, now is obviously slowing down: oh well, I still have another 398GB available till the end of the month :P
@@ -1,136 +0,0 @@
------ -permalink: "26" -filters_pre: -- redcloth -title: bake.php - Easy baking for lazy folks -comments: [] - -date: 2006-05-06 15:43:00 +02:00 -tags: -- cakephp -- frameworks -type: article -toc: true ------ -When I first tried Ruby on Rails I was literally amazed by the _generator_ script. Yes, I was young and inexperienced then (six/seven months ago), but you must admit that getting a controller, a model, all the basic views generated automatically by - -@rails script/generator scaffold Posts@ - -is not a bad thing. Especially if the same script allows you to create model, views and controller separately and other things. "Symfony":http://www.symfony-project.com/ and PHP on Trax already tried to port this functionalities, with mixed results. What about Cake? Oh well, yes, we do have something like that... something rather different, but still something: the @bake.php@ script. -This cute little thing is located in the @cake/scripts/@ folder and can be used - hear, hear - from command line. You can run Ruby and Perl scripts, so yes, you can actually run PHP from command line, although it's not its primary purpose. - -!http://base--/img/pictures/bake.jpg! - -Cool then, let's open a *nix shell, Windows command prompt, etc. etc., go into the @cake/scripts/@ folder and run: - -@php bake.php@ - -Assuming that the php executable is in your _PATH_ environment variable - if not, either you add it or you'll have to type something like: - -@D:SERVERphpphp.exe bake.php@ - -depending on where your php executable is. You'll be be greeted by a "CAKEPHP BAKE" text, and then you'll be asked a few questions. One thing to realize before proceeding any further: bake.php is _not_ a generator, not in the traditional "Rails" sense, anyway. It's rather a handy but more verbose dialogue-based configuration script - which will also generate _something_ eventually if you provide all the necessary details. -A different approach, which may be good or bad according to your taste: personally I think we should also have something faster to use, like a Rails generator, and I opened a "ticket":https://trac.cakephp.org/ticket/768 about it, but let's see what bake.php can do, for now. - -The answer is... nearly anything. It annoying enough to please, but if you follow its directions it can do a prettu decent job in the end, it's far from being sentient, but let's say it's smart enough for a script. First of all if you try it out on a fresh Cake install it will notice that you haven't configured your database yet, so it will ask for a hostname, username, password, database name etc. etc. and generate your @app/config/database.php@ for you, not a bad start. - -Once that's done - and it won't go on unless you configure a (MySQL only?) database - you can proceed with the rest. You can start creating either a controller, model or view; I tried a @Posts@ controller, for example. The script then asks quite a few questions: - -* The controller's name -* Whether it will use other models besides posts -* Whether you want to include any helper -* Whether you want to include any component -* Whether you want to generate the base CRUD methods - -Then finally it generates the damn thing. The result is good enough: - -<small> -<pre><code> -<?php -class PostsController extends AppController -{ - //var $scaffold; - var $name = 'Posts'; - - function index() - { - $this->set('data', $this->Post->findAll()); - } - - function add() - { - if(empty($this->params['data'])) - { - $this->render(); - } - else - { - if($this->Post->save($this->params['data'])) - { - $this->flash('Post saved.', '/posts/index'); - } - else - { - $this->render(); - } - } - } - - function edit($id) - { - if(empty($this->params['data'])) - { - $this->set('data', $this->Post->find('Post.id = ' . $id)); - } - else - { - if($this->Post->save($this->params['data'])) - { - $this->flash('Post saved.', '/posts/index'); - } - else - { - $this->set('data', $this->params['data']); - $this->validateErrors($this->Post); - $this->render(); - } - } - } - - function view($id) - { - $this->set('data', $this->Post->find('Post.id = ' . $id)); - } - - function delete($id) - { - $this->Post->del($id); - $this->redirect('/posts/index'); - } - - function postList() - { - $vars = $this->Post->findAll(); - foreach($vars as $var) - { - $list[$var['Post']['id']] = $var['Post']['name']; - } - - return $list; - } -} -?> -</code></pre> -</small> - -It's more or less the same with models and views: it will still ask a lot of questions and in the end generate the thing. -This behaviour is more advanced than a standard generator, you can include helpers and components already, if you want, but do you _really_ want that? For models it even asks if you want to include particular associations and validation rules! Personally, I'd rather a generator script which generates something _immediately_ and accepts maybe some parameters to further customization, like: - -@php bake.php scaffold Posts@ -@php bake.php controller Posts@ -@php bake.php model Posts@ -@php bake.php model Posts@ -@php bake.php controller Posts helper +Html -Time,Javascript@ -@php bake.php model Posts assoc +hasMany comments,tags@ - -Bah... just some random thoughts. How about custom-made generators ("Rails-inspired":http://wiki.rubyonrails.org/rails/pages/AvailableGenerators)?
@@ -1,67 +0,0 @@
------ -permalink: "27" -filters_pre: -- redcloth -title: "rdBaker: Bake your CakePHP application online" -comments: [] - -date: 2006-05-08 11:50:00 +02:00 -tags: -- cakephp -type: article -toc: true ------ -Right after my "last blog post":http://base--/blog/view/26 I decided to log on #cakephp on irc.freenode.org as usual, and gwoo pops in and says "h3raLd, you didn't review rdBaker yet!" -That's right, I didn't yet, so I may as well do it today. - -I remember hearing about rdBaker months ago, waaay before CakePHP 1.0, way before the RCs, I remember someone mentioning it on CakePHP user group in right after the bake.php script was created. _"How about having an online baking utility?"_ - and that's precisely what rdBaker is, a more PHP-ish version of bake.php, which runs like any other PHP scripts: in your browser. - -This cute little thing is obviously available for free on "CakeForge":http://cakeforge.org/frs/?group_id=13&release_id=74 and is part of "gwoo":http://www.rd11.com 's "rdOpenSource":http://cakeforge.org/projects/rdos/ project which includes various other Cake-powered applications. -I personally recommend new (and old) bakers to download them and play with them, try to understand how they were coded, because they can really teach you _a lot_ on how to code a CakePHP application or website properly. - -So anyway, get your copy of rdBaker, unzip it and have a look at the @README.txt@ file for the installation instructions: - -<quote> -1. Place rdBaker in the root along side /cake_install/app. -2. chmod /cake_install/rdBaker/tmp to 0777 -3. launch http://localhost/cake_install/rdBaker/ -</quote> - -Not too hard, innit? - -!http://base--/img/pictures/rdbaker.jpg! - -Good. So you try accessing something like @http://localhost/php/test/cakephp/cake_test/rdBaker/@ (that's on my own local WAMP server) and you'll get a nice page asking you to "supply your ingredients" via a simple form. -Unlike its command line cousin, rdBaker doesn't require you to fill in _all_ the fields, but just the full path to the save directory (which is normally already filled in) and of course the name of the model (Post, User, Comment). -Then you can select the type of output and choose whether you want to generate an empty controller, a scaffolded one or the _full_ option including all the most common CRUD(Create, Retrieve, Update, Delete) methods. -Finally - if you like - you can enter any association or valitation rules for your model, then press the _Bake it!_ button and voilá, in you'll find three directories (controllers, models and views) in your save directory containing all the MVC(Model View Controller) entities you need regarding a particular model: - -<pre><code> - rdBaker Result Array -( - [0] => notes_controller.php created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpcontrollers - [1] => note.php created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpmodels - [2] => index.thtml created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpviews/notes - [3] => add.thtml created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpviews/notes - [4] => edit.thtml created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpviews/notes - [5] => view.thtml created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpviews/notes -) -</code></pre> - -But there's more! By checking the appropriate checkbox, you can get all the stuff packed in a zip file! - -Not bad at all, and fast as well. - -Now the bad things... -The script works fine, but there's something which could be improved, perhaps: - -* If you choose to put everything in a zip file, the file will be named "baked_by_rdBaker.zip" - not a big deal, but maybe it could be personalized according to the model name entered. -* Regardless you want to add validation rules to your model or not, you'll _always_ find some validation rules for a _title_ and _body_ field. I checked and they are hardcoded in the template file (rdBaker/views/helpers/templates/full/model.txt): -<pre><code> - var $validate = array( - 'title'=>VALID_NOT_EMPTY, - 'body'=>VALID_NOT_EMPTY); -</code></pre> -* In the baked index.thtml view, there will always be a column named "Title". This, again, is hardcoded in the template. - -Other than these things, everything seems to work fine. A really nice script!
@@ -1,23 +0,0 @@
------ -permalink: "29" -filters_pre: -- redcloth -title: Writing more articles... -comments: [] - -date: 2006-05-14 06:26:00 +02:00 -tags: -- website -- writing -type: article -toc: true ------ -Yes, I know, I've been slaking a little bit, and haven't posted on my blog in a while. Well, I actually _didn't_ slack at all in these days getting ready to start my job, looking for a damn fitted kitchen for my house and... writing more articles. - -Nothing special, and nothing too technical, to be honest, but equally interesting. First of all I updated my "An IE Lover's Guide to Firefox":http://base--/articles/view/ie-lovers-guide-to-firefox/ a little bit and people at SpreadFirefox.com and "FirefoxFacts":http://www.firefoxfacts.com/ liked it. Glad to hear that, unfortunately some guy who wrote about "Firefox Myths":http://mywebpages.comcast.net/SupportCD/FirefoxMyths.html wasn't too impressed, but at any rate he read it anyway. - -OK, this wasn't a new article at all, but "this one":http://base--/articles/view/the-internet-philosopher/ is fresh, at least. It's about a Swedish guy who decided to emigrate to India pursuing an ideal: writing for his own opinions and ideas. And he gets paid for that too! After reading more about him on his "website":http://base--/bookmarks/view/ropix I decided to write something about him. An interesting and rather unusual read. Pity that some sections of his homepage are in Swedish only. - -Finally, yesterday I felt inspired and decided to write "another roundup":http://base--/articles/view/social-bookmarking-services featuring ten popular social bookmarking websites. Trying all those services was fun, with a few exceptions of course. The bad news is that there are already various reviews about social bookmarking sites and thus the Digg folk doesn't seem to be particularly interested in "reading another one":http://digg.com/software/Ten_popular_social_bookmarking_services_reviewed, but hey! After all I can't expect of getting dugg for every roundup I write, can't I? - -That's about it. And what about the CakePHP article I promised "long ago":http://base--/blog/view/13/ to CakePHP beginners? It's done, written and ready to be published! Unfortunately the magazine I submitted it to is taking quite a bit to review it and - most important - to tell me whether they'll publish it or not. Let's hope for the best.
@@ -1,95 +0,0 @@
------ -permalink: "31" -filters_pre: -- redcloth -title: "Watch out: CakePHP screencasts" -comments: [] - -date: 2006-05-20 15:47:00 +02:00 -tags: -- cakephp -- tutorial -type: article -toc: true ------ -Tutorials are great, articles are helpful, manuals are essential and the API is your best friend, but there's still something missing there... Unfortunately podcasts are not yet available, but the CakePHP team is proud to announce the creation of two "screencasts":http://cakephp.org/pages/screencasts in an effort to help new bakers familiarizing with CakePHP's concepts. -This is old news now, the screencasts section came together with the "site overhaul":http://base--/blog/view/24 but I only got a chance to take a look at them (one of them only, to be totally honest) recently, and so here's a spoil... erhm, a _detailed_ description of John Anderson's screencast about the "Blog Tutorial":http://manual.cakephp.org/chapter/18. - -!<http://base--/img/pictures/CakePHP_1.0.png! - -There's something I'll never do: a screencast. Recording every mouse movement, every word or piece of code typed in half an hour? No way! And what happens if I mistype something? People will keep pointing out the fact that I was starting to type @</h2>@ to close a @</h1>@ tag, or that I waited an eternity like five full seconds before deciding what to do. I guess I'm quite paranoid... John did it, and he did it well. Using just bash, vim and Safari he was able to record an excellent 30-minutes screencast featuring the blog tutorial. -Before people start complaining that the blog tutorial should be completed in fifteen minutes, keep in mind that John's screencast is meant to show everything clearly to new users, via a trial and error approach if necessary. - -Here's what happens in the screencast, nothing new if your read the blog tutorial, but still interesting, especially if you're new to Cake. Unfortunately there's no audio, but the video talks by itself and John will occasionally write some comments here and there. - -_*0:01 - 5:00*_ - -* SVN checkout to get the latest CakePHP version -* make app/tmp writeable -* execute queries (table posts) -* insert some test posts -* create database config file: modify 3 lines of database.php -* CakePHP is now able to connect to database -* create app/models/post.php model -* create posts_controller.php [John uses Vim as preferred PHP editor] -* try to access /posts/, error: missing method index() -* create function index() in postscontroller.php able to fetch posts -* refresh, missing index view -* create index.thtml displaying the raw posts array - -_*5:01 - 10:00*_ - -* index.thtml: display posts with table and foreach iteration -* add hyperlink in index.thtml to view posts -* access /posts/view/1 -> missing method view() -* add view() method in postscontroller.php -* create view.thtml to display -* Raw view post with pre tags and print_r() - -_*10:01 - 15:00*_ - -* display post properly with @<p>@ tags -* add link in index.thtml to add a post -* missing method -> add() -* add add() in controller -* missing view [trial and error, trial and error...] -* create add.thtml, using the Html Helper to create input tags easily - -_*15:01 - 20:00*_ - -* add.thtml (continued) -* testing add form -* view added post -* start adding another (for validation purposes) [stop before submitting] -* modify post.php model, valid_not_empty for title and body -* modify view to trigger validation @$html->tagErrorMsg()@ -* test: no body, message displayed -* test: no title, message displayed -* add another post, everything works -* [pause: five seconds] -* back to the controller, create delete() function - -_*20:01 - 25:00*_ - -* delete function (continued) -* add "Actions" table column in index.thtml, with link delete post -* delete two posts -* take a breath -* add link in index.thtml to edit post -* refresh page, mouse over edit links... -* back to controller, add edit function [we learnt abour CakePHP errors alright] - -_*25:01 - 27:38*_ - -* pause, 5 sec [should I write edit.thtml from scratch] -* copy add.thtml as edit.thtml -* change just the title and form action -* [pause: 3 sec] -* test edit link -* edit a post -* move around, switch views -* edit config/routes.php -* set default route to posts/index -* refresh - all done! - -That's it. All in a 40MB .mov file. Download it from "here":http://www.archive.org/download/CakePHP_BlogTutorialJohn/BlogTutorial.mov.
@@ -1,41 +0,0 @@
------ -permalink: "32" -filters_pre: -- redcloth -title: Writing Tools -comments: [] - -date: 2006-05-25 14:57:00 +02:00 -tags: -- writing -- tools -type: article -toc: true ------ -Since in these days (and even more in near future) I'm really writing a lot I thought it would be good to share my thoughts on some writing programs and tools I started using for writing these blog posts, articles, and more. - -I'm going to examine a few applications which I find useful for different tasks, since I recently came to the conclusion that I cannot use the same editor for everything I write: some magazines require a .doc document, others want just plain text, my site uses the truly excellent "textile":http://http://www.textism.com/ markup, zZine Magazine used BBcode, other site use their own "proprietary" styles and so on. One could just give up and use Notepad - or better, "Notepad++":http://notepad-plus.sourceforge.net/uk/site.htm - for everything, while someone else like me might opt for various applications according to the task. - -One of the few essential requirements for a _writer_ is some spell checking functionality. Sad but true, this is enough to leave the most popular multi-purpose programming editor out: programmers don't need a spell checker, a highlighter for their favourite language is more than enough. -I will not mention all the applications I tried to find the Perfect Editor, and I'll just focus on the programs I ended up using in the end. Some may be well known, others may not, anyway, here we go. - -!<http://base--/img/pictures/wp/bill.jpg! - -"Word 2007 Beta 2":http://www.microsoft.com/office/preview/default.mspx - Yes, I know that OpenOffice is free and OO Writer works great, but perhaps at work you'll be asked to use MS Word. Some editors may require that as well, and their templates may not be correctly rendered by OpenOffice, so in the end you'll still have to use Redmond's most popular Word Processor - _if you have it_. If you got it with your laptop (I didn't) or your auntie gave you 300$ to buy it you're all set, but if you don't? -Oh well, yes, OpenOffice is the right choice perhaps, but at least until February 2007 uncle Bill lets you try the bleeding (quite literally) edge of all the commercial word processors: Word 2007 beta 2. You can download the whole Office Suite (and more) for free, "run":http://www.microsoft.com/office/preview/beta/overview.mspx. I did it yesterday and well, it's nice to try this brand-new piece of eye candy. the interface is completely new, you won't find the usual drop down menu but with some imagination you'll manage to save/create/open a new document by clicking on the big roundy Office logo on the top left corner. More user friendly? Perhaps, once you get used to it. It STILL doesn't have a tabbed interface, so you STILL have to clutter your taskbar if you want to keep more than one document open. -At any rate, it does the job, exactly in the same way as it did in the previous versions. -I use it if people ask me to, and for writing stuff which doesn't need to be formatted with a particular markup or style but rather look nice and have pictures embedded. - -!>http://base--/img/pictures/wp/writely.gif! - -"Writely":http://base--/bookmarks/view/writely/ - Now this is much more fun. A _online_, AJAX-powered word processor recently acquired by Google. IT's currently in closed beta, but I was lucky enough to get an account before they closed registrations and I can invite people to use it. -It's nice. It's nice if you have to work with MS Word documents or create PDF files, and it supports the most essential features offered by desktop word processors, plus some more, really convenient functionalities. -It can import MS Word documents pretty well and also any kind of text file, so that you can edit it online anytime and anywhere. You can star, tag, archive, edit and delete your documents in a really easy way and - which is one of its killer features - you can grant access to certain documents to collaborators for editing or viewing. Other word processors out there offer similar features, but Writely is by far the nicest to use and perhaps even the more advanced. I recently wrote a couple of articles about CakePHP (coming soon-ish to some online magazines near you) and then gave access to gwoo and PhpNut for editing, so that they could check the code snippets, in particular: it was a success. Magazine editors were happy and impressed as well. -Another really wonderful feature is _version support_. I discovered this recently: when you edit a document and save it, Writely automatically creates a new version of it, storing the old ones as well, so that you can even compare them to highlight differences if you wish: a great feature to keep track of the editing process and know exactly who edited which. When I noticed it that was it, Writely has become my online _repository_ for my articles and writings. - -!<http://base--/img/pictures/wp/cream.png! - -"Cream":http://base--/bookmarks/view/cream-editor - I discovered this a while ago, and it's perhaps the most multi-purpose editor out there. It's built on top of Vim (respect+) but it has a friendlier interface by default, and that's exactly what I'm using right now for typing this post. The reasons are simple: it supports ANY kind of file format and any character encoding. There's an highlighter for everything, including BBcode and textile, and of course you can make your own. It also includes spell checking on-the-fly which is missing in many simple editors. -Whenever I have to write something which requires some particular formatting or markup I use Cream, it does the job pretty well, and whenever I feel brave I can always switch to "expert" view and challenge my vi skills ;) - -That's pretty much what I use for writing articles, posts, and other documents... I tried other alternatives like RoughDraft or similar programs but I'm now really happy with these three applications. Commercial "writer's programs"? There are some out there, but who wants to spend 40$ or more for something which offer less than MS Word when you can use OpenOffice and Writely for free?
@@ -1,77 +0,0 @@
------ -permalink: "33" -filters_pre: -- redcloth -title: Information Mapping -comments: [] - -date: 2006-06-02 06:10:00 +02:00 -tags: -- productivity -- writing -type: article -toc: true ------ -As I thought, my job also represents a great opportunity to learn new things. I don't mean only new technical stuff, but also a great deal of tips, best practices and methods to efficiently write documentation material in proper English. Some theory about "Information Mapping":http://www.infomap.com/ was by far the most interesting topic I learnt about this week. - -h3. What is Information Mapping? - -*Definition[1]* -<blockquote>The Information Mapping method is a research-based approach to the analysis, organization, and visual presentation of information.</blockquote> - -*Information Mapping is media independent* -<blockquote>The method is both subject matter and media independent; that is, it can be applied to the subject matter of any industry, and it can be presented on paper, on a computer screen, verbally, or in a multimedia presentation. </blockquote> - -*Key Concepts* -<blockquote>Information Mapping is an integrated set of easy-to-learn principles, techniques, and standards. It enables authors to break complex information into its most basic elements and then present those elements optimally for readers. The result is a set of precisely defined information modules that are consistent from author to author and document to document.</blockquote> - - -*Purpose* -<blockquote> -The method helps writers analyze, organize, and present information with clarity focus and impact. Information That Works. The goal of the analysis component is to determine the - -* purpose -* audience needs, and -* information types. - -The goal of the organization is to create an overall structure for the information, based on the results of your analysis. Finally, the goal of the presentation component is to format the information to make it clear and accessible to your audience. -</blockquote> - -fn1. Contents were taken from "InfoMap.com":http://www.infomap.com/index.cfm/TheMethod/ and were re-formatted and re-organized into an information map. - - -h3. Key Concepts - -*Introduction* -<blockquote>The Information Mapping method relies on some important principles according to which information should be organized. This method also defines new units of information to replace paragraphs, sections and chapters and tries to divide information into a few main set types, each with its own rules and structures.</blockquote> - -*Principles* -<blockquote> - -| *Name* | *Explanation* | -| Chuncking | Writers should group information into small, manageable units. | -| Relevance | Writers should make sure that al information in a chunck relates to one main point (function or purpose). | -| Labeling | Writers should provide a label for every unit of information. | -| Consistency | Writers should use similar labels, word, formats for similar subject matters. | -| Integrated Graphics | The use of tables, images, diagrams and lists is encouraged. | -| Accessible Detail | Documents should provide sufficient details where necessary, to make the information more accessible for the readers. | -| Hierarchy | Small, relevant units of information should be organized into a hierarchy. | - -</blockquote> - -*Information Types* -<blockquote> - -| *Name* | *Definition* | -| Procedure | Set of steps to obtain a specified outcome | -| Process | A series of changes through the time for some purpose | -| Structure | Something which can be defined into multiple parts | -| Concept | Group of physical objects, conditions, relations, ... | -| Principle | Statement of what should be done, assumptions | -| Fact | Statement presented with no supporting evidence | -| Classification | The sorting of a group of specimen into classes | - -</blockquote> - -*Conclusion* -<blockquote>Although it may initially seem too schematic, Information Mapping is a valid method to organize and present information to those readers who just need "facts" without any unnecessary distraction. This method it is used with some modifications in many technical manuals and documentation written by many companies.</blockquote>
@@ -1,85 +0,0 @@
------ -permalink: "34" -filters_pre: -- redcloth -title: "Akelos Framework: too good to be true?" -comments: [] - -date: 2006-06-10 11:26:00 +02:00 -tags: -- frameworks -- php -- webdevelopment -- review -type: article -toc: true ------ -Someone recently added a comment to my article about "Rails-inspired PHP frameworks":http://base--/articles/rails-inspired-php-frameworks/ pointing out that I forgot another Rails-like framework, in my round-up. He obviously posted a link to this rather mysterious Rails port in PHP and spam or not, I'd like to thank this guy for letting me know of the existance of "Akelos":http://base--/bookmarks/view/akelos-framework, a new PHP framework which seems simply too good to be true. - -!<http://base--/img/pictures/frameworks/akelos_framework.png! - -Let me just spend a few words more before writing more about it though. First off, it's not available yet. OR at least it doesn't seem to be: the author is planning to release his work to the Open Source community but... well, he's a bit concerned about the current "PHP Framework War": he wouldn't like to end up like "Subway":http://subway.python-hosting.com/ or just be slagged off by those merciless reviewers who enjoy write round-ups and comparisons about frameworks. "Bermi Ferrer":http://www.bermi.org/page/about_me is "just" a talented PHP developer who decided to create his own framework and he really enjoyed doing so, nothing more, nothing less. - -_"I considered other PHP ports of Ruby on Rails, but we could not find all we needed on them. One feature that I needed on the core was internationalization and Unicode support, so I decided to roll my own framework trying to keep most of the original rails interface so most of its documentation could work for it."_ - -Where did I hear that? Nothing new: it's always the same story of frameworks not being as we want them to be etc., it's human. And yes, it's _*another*_ attempt to port Ruby on Rails to PHP, and a damn good one -- or so it seems. - -<small>Before proceeding any further, I'd like to write a short warning for a few people who may or may not want to pop in and start commenting about the Rails-is-better-than-any-PHP-clone issue: *If I see a single comment slagging off this framework (or any other) only because it's a port of Rails to PHP, it will be deleted, may it be David Heinemeier Hansson himself*. Stop it, no seriously, I think it will be counter productive for Rails in the end: I really like RoR and I love the way it works, and yes, I think Ruby is definitely the best language to do that sort of things, EVERYBODY KNOWS THAT. Please, please, save us poor PHP developers the usual preaching.</small> - -!>http://base--/img/pictures/frameworks/bermi_ferrer.png! - -Right, back to Akelos now. Curious as I am I immediately checked out the official page and all i found was a pretty long list of features which made me dribble, literally... ooops! - -Let's just quote the most juicy ones, shall we? - -Active Record ["Model"] - -* Associations -* Callbacks -* *Transactions* -* *Finders* [ @$Project->findFirstBy('language AND start_year:greater', 'PHP', '2004');@ ] -* Versioning -* ... - -Action Controller ["Controller"] - -* Filters -* Pagination -* Mime Type -* Mime Response -* *Code Generation* -* Response handler -* ... - -Action View ["View"] - -* *Templates (using Sintags)* -* Web 2.0 javascript using prototype and script.aculo.us -* Helpers -* Partials -* *Template Compilers* -* ... - -And then more Akelos-only goodies: - -* *Multilingual Models and Views* -* *Locale alias integrated on URLS (example.com/spanish will load the es_ES locale)* -* Database migrations using DB Designer files -* *Pure PHP support for Unicode (no extensions required)* -* *Unit Tested source code* -* Code Generators -* Built in XHTML validator -* Automated locale management -* *Clean separation from HTML and Javascript using CSS event selectors.* -* Ajax file uploads -* *AFLAX integration* -* Dojo Rich Text Editor -* Format converters -* File handling using SFTP for shared host running Apache as user nobody (as most CPanel server do) -* *Distributed sessions using databases* - -Impressed? I was, honest. And I'm talking as a CakePHP fanatic here, and I must say that if this framework can really offer all this _and_ -- and this is what really matters -- is also as simple as Cake to learn and well performing... well, this is definitely going to be quite a promising player in the "PHP Framework War" (but is not a real war, is it?), although the author is quite worried about that: - -_"I'm also concerned about the PHP Framework war, I don't want to play that game. Building this Framework was a great experience, it works great for me and it has helped me to become a better programmer so I don't want to spend my time discussing about if this is better or not than other solutions. That's the reason I'll first look for great developers interested in the Framework to help me releasing it."_ - -Really, this will be an interesting project to check out, once it goes open source, and yes, I really wish Bermi all the best. Good luck, "Akelos Framework":http://www.bermi.org/projects/akelos_framework.
@@ -1,36 +0,0 @@
------ -permalink: "36" -filters_pre: -- redcloth -title: "ITALIA: CAMPIONE DEL MONDO!" -comments: [] - -date: 2006-07-12 09:19:00 +02:00 -tags: -- italy -type: article -toc: true ------ -_*Italy has won the World Cup!*_ - -It doesn't matter if Zidane first scored on a totally unfair penalty kick at the 7th minute and then, totally out of his mind, headbutted Materazzi... WE WON, AND WE KICKED THEIR ASS, end of story :) - -<div align="center"> -!http://base--/img/italy/worldcup.jpg! </div> - -<blockquote> -!<http://base--/img/italy/grosso.jpg! - -"Italy beat France 5-3 in a penalty shoot-out to win the World Cup after an absorbing 1-1 draw in Berlin. - -!>http://base--/img/italy/italy1.jpg! - -Fabio Grosso scored the winning goal after France's David Trezeguet missed. - -Playing his last game before retiring, Zinedine Zidane's career ended in disgrace after he was sent off for crazily headbutting Marco Materazzi. - -Zidane had put France ahead early on with a coolly-taken chipped penalty, before Materazzi levelled with a header from an Andrea Pirlo corner. -The result caps an incredible period for Italian football, with the domestic game embroiled in a corruption scandal similar to 1982 when they last won the World Cup. " -</blockquote> - -"Read More":http://news.bbc.co.uk/sport2/hi/football/world_cup_2006/4991652.stm
@@ -1,44 +0,0 @@
------ -permalink: "37" -filters_pre: -- redcloth -title: Some updates -comments: [] - -date: 2006-07-25 03:07:00 +02:00 -tags: -- website -- cakephp -type: article -toc: true ------ -Quite a bit of time passed since the last blog post, and I'm actually sorry about that, but as I thought, I don't have as much free time as I used to be. Work is work, after all! -This post will be multipurpose as actually I bluid up a few things to write about in the last few days... erhm, ok, _weeks_. - -h3. New Website Design - -Something different eh? Yep, definitely! Some time ago I started a small project called "h3raLd.com Re-design":http://base--/projects/view/h3rald-redesign hoping that some GFX guru could provide a new template for this website, and actually in the end I decided to accept the work of _*Bartus F. Teipel*_ a Brazilian CakePHP enthusiast. -Bartus is obviously (MUCH) more talented than me when it comes to design, and I was amazed at the quality of the template he provided, in a really short time. -Unfortunately he didn't yet provide a link to his main website/portfolio, but for now all I can show you is his website for party pics, "CircusCircus":http://www.circuscircus.com.br/. - -The new template sports a more contemporary Web2.0-ish look which I like a lot, and Bartus used libraries like "prototype":http://prototype.conio.net/, "moo.fx":http://moofx.mad4milk.net/ and "Nifty Corners Cube":http://www.html.it/articoli/niftycube/index.html for the AJAX effects and functionalities. -A really outstanding work, thanks Bartus! - -h3. The CakePHP Herald project has been completed - -With my "latest article":http://www.h3rald.com/articles/view/cakephp-first-bite/ about CakePHP published on SitePoint, the "CakePHP Herald":http://base--/projects/view/cakephp-herald/ project was completed. -I must say that I really enjoyed writing all those articles about CakePHP, and the only thing I regret is not to have written anything (yet) about some more advanced topic about CakePHP. This was mostly due to - again - lack of time to focus on advanced topic and produce some quality examples. - -However, judging by the positive feedback I received about the articles, I am really happy of the final result: even more people discovered the power of CakePHP and became _bakers_. Happy baking to all of you! - -_So... no more articles about Cake?_ Maybe not for a while, I think I'll be rather busy in the following months. Curious? Read on :-) - -h3. My biggest and most important project - -I actually got really pissed off with Larry, Garret & the other Master Bakers because of what they wrote on the "announcement":http://cakeforge.org/forum/forum.php?forum_id=244 for the latest CakePHP release: - -bq. "[...]In other news, some new articles were published on Sitepoint [3] and in the International PHP magazine [4]. Fabio Cevasco [5] is the man behind these articles. Together with Fabio, we will be writing a book that will be published [...]" - -After all this time I spent _trying desperately not to say a word about it_ they came out and heralded it out of nowhere. Sigh... they ruined the surprise effect! Oh well, it's too late now, isn't it? - -So yes, when I say that I'm spending at least 60% of my time (at work and at home) writing I really mean it. The rest? Well, I do have a lovely girlfriend after all!!!
@@ -1,118 +0,0 @@
------ -permalink: "38" -filters_pre: -- redcloth -title: Akelos is real, after all... -comments: -- :date: 2007-09-06 22:57:09 +02:00 - :author: jervis - :url: "" - :id: 52 - :body: nice -- :date: 2008-05-23 09:05:07 +02:00 - :author: ": ]" - :url: "" - :id: 234 - :body: shit happens. . . -date: 2006-08-02 01:33:00 +02:00 -tags: -- frameworks -- php -- webdevelopment -- review -type: article -toc: true ------ -Bermi Ferrer kept his promise, and even if a few were skeptic on the "pre-announced":http://base--/blog/view/34/ features of his upcoming Akelos framework, last week he sent me a "development preview" and a few days ago he opened the development SVN repository to the public: - -<a href="svn://akelos.org/trunk" target="_blank">svn://akelos.org/trunk</a> - -Go, get it: it's worthwhile (see below). - -"[...] The Akelos Framework is an open-source port of Ruby on Rails to the PHP programming language. -The main goal of the Akelos Framework is to help programmers to build multilingual database-backed web applications according to the Model-View-Control pattern. It lets you write less code by favoring conventions over configuration." - -At the Akelos Framework Features page you can find detailed information about what has been already implemented into the framework. -</blockquote> - -I think it says it all, well almost. Some people will undoubtedly be disgusted by yet-another-hopeless-Rails-clone: _not again!_ I hear them crying... - -Well, yeah, I think this - to be honest - should be the last attempt someone makes to port Rails to PHP or at least port _some features and the overall philosophy_, like "CakePHP":http://base--/bookmarks/view/cakephp did: there are honestly too many for one single language. Look at Python, "Django":http://www.djangoproject.com/ seems to be the only "Rails-inspired" framework available and everyone is happy with it, while as a general rule PHP folks are never happy with what they already got. - -Bermi is undoubtedly one of them, and that's the reason he decided to code his very own Rails-inspired framework for PHP, which is, to date, the most remarkable of the ones I left out (it wasn't available at the time) in my "article":http://base--/articles/rails-inspired-php-frameworks/. - -h3. Confirmed Features & Contents - -So well, although I didn't really have a proper chance to play with Akelos I can certainly herald some of its - verified, this time - features. - -For one, it's huge. Take Cake, add _every excellent, useful third party library or class you can possibly thing of_ and you'll get Akelos. No kidding. The unzipped source of the whole framework is a massive 16MB, 8.5 of which constitute the @vendors@ folder. What's in it? Well, all this: - -* ADOdb -* Domit -* FPDF -* Excel (reader library) -* Hyper Estraier full-text search system -* Inutio XML-RPC Library -* _Many_ PEAR packages -* PHPCodeAnalyzer -* PHPmailer -* SimpleTest -* A Simple PHP YAML Class -* Textile - -Then, similarly, all the state-of-the-art Javascript/AJAX hyper-hyped libraries are included: - -* AFLAX -* Behaviour -* Builder -* various Scriptaculous packages -* Prototype -* FileUploader (by the author, using prototype) -* Window -* EventSelectors - -!<http://base--/img/pictures/frameworks/akelos_framework_logo.gif! - -Good, well, kind of: that's just what _others_ did, but it's worth noting that it's all there and - apparently - integrated with the framework, hopefully not too tightly. But people are fussy, and do not get excited easily anymore, long gone are the early days of Rails, when the whole Internet shake at hearing about _code generators_... Aye, there are in Akelos as well, of course! - -Coming to the more juicy stuff, _lo' and behold, ye contents of /lib folder (with comments):_ - -* AkActionController (controller) -* AkActionView (view) -* AkActionWebservice (Web services) -* AkActiveRecord (model) -* AkAdodbCache (content caching) -* AkCharset (utf8 support, includes _all_ mappings) -* AkConfig (load config settings) -* AkConverters (conversions!) -** DBDesigner > AkelosDatabaseDesign -** Excel > Array (bi-dimensional) -** Excel > CSV -** HTML > RTF -** HTML > Text -** Word > Unicode -** PDF > Text -** Xdoc > Text -* AkHeaders (HTTP headers, redirections) -* AkImages (Image operations, resizing) -* AkLocalize (Localization, countries and timezones) -* AkInflector -* AkLogger -* AkFtp -* AkInstaller -* AkRouter -* AkZip -* ... - -Well, it's all there, at any rate. The best way to know if it all works, and _how_ it works, is simply to try it out: "www.akelos.org":http://www.akelos.org/. - -h3. Remarks - -As I said earlier, Akelos looks like _CakePHP on steroids_: agreed, the Cake philosophy of "no we-may-use-it code in the trunk" has been _completely_ (and intentionally) ignored, but this is our chance to peek at what CakePHP could have become if such philosophy didn't become a lifestyle for the Cake Dev Team. -Akelos code is Rails-inspired, so yes, it's _very_ similar to Cake, although with some rough edges and some re-used parts, but it's the work of ONE person with no community support (yet), don't forget. Remarkable. - -And he needs co-developers, by the looks of it, so there you are then: there's _your_ chance! - -My personal opinion about it? Well, I think Akelos can learn from CakePHP and vice-versa: a merge? Well, at least it would reduce the number of Rails-inspired framework for PHP and _possibly_ meet the needs of more people: those who want just the essentials, as a framework, and those who like to be _virtually almighty_ and be able to do anything, _if they wanted to_. - -Two flavours of the same framework? _CakePHP_ and _cAkePHP_ (note the case)? Bah, let's stop raving now, shall we?
@@ -1,34 +0,0 @@
------ -permalink: "39" -filters_pre: -- redcloth -title: Why I like Netvibes -comments: [] - -date: 2006-09-18 05:51:00 +02:00 -tags: -- web20 -- ajax -- review -type: article -toc: true ------ -The so-called "AJAX Start Pages" are not a new concept anymore, and like for almost any other offspring of Web 2.0 there is more than one to chose from. Hence the increasing number of comparative reviews on the Web nowadays (Yes, I'm guilty of that too). I soon learnt that for any "good and useful thing" on the web there are at least _n_ clones: consider for example social bookmarking, community-powered news sites, php frameworks... -And no, you can't use the word clone because it has a strong negative connotation nowadays so let's just say that whenever someone comes up with a new idea, others examine it, process it and in a few weeks (days?) some _very, very similar application_ comes out, and it's _better_ than the previous one. -Now, I don't know exactly whether "NetVibes":http://www.netvibes.com/ was one of the first AJAX Start Pages created or not, but at any rate - in my very, very, very humble opinion, is the most advanced and the most usable of "the lot":http://www.techcrunch.com/2005/12/07/ajax-desktops-wont-stop/, and an essential tool for lazy folks like me who want to keep up-to-date with what's going on without having to visit dozen of websites everyday. - -!<http://base--/img/pictures/netvibes.jpg! - -I can see people jumping up and down shouting "Pageflakes is better", "Protopage kicks a$$" etc. etc. Well, yes, probably, as you like: different people like different things, and when it comes to AJAX Start Pages there's really a lot to choose from: 3spots has an excellent (and complete, I believe) "list":http://3spots.blogspot.com/2006/03/ajax-or-flash-startpages-or-homepages.html of all the start pages currently available on the Net, so yes, you can try them out yourself and make out your mind :) - -I made up my mind long ago after experimenting a few of those. Why Netvibes? OK, let's see: - -# *Fast to load*: Netvibes is fast. Relatively fast, of course, for sure is not as fast as a plain, old-style html page, but I think it's perhaps one of the fastest AJAX start pages ever created. As they "pointed out":http://blog.netvibes.com/?2006/08/17/75-the-future-of-netvibes, with a 15 million investment performance can only get better... -# *Tabbed pages*: After tabbed browsing, tabs within a single page seem to gain popularity. Netvibes allows you to create more than one page to prevent cluttering and general chaos: you can create a tab for CakePHP feeds, one for some cute AJAX widgets you'll never use, another for al that Web 2.0 rubbish you'll never read -- that's what I do at least. -# *Smart Google Module*: Finally Netvibes has a _proper_ Google search module, which enable users to search with Google and view results _on Netvibes_ instead of opening up a browser tab. -# *RSS done right*: Their RSS reader is nice: by clicking on a feed title it opens up a _virtual window_ inside the page with the whole story and a menu with links to the other stories included in the feed. This is the most convenient way to read whole articles like TechCrunch's ones without leaving the page (and without loading the heavy TechCrunch UI). -# *Public API for modules*: For those who - unlike me - has some proper free time and would like to develop their own module, the "Netvibes Mini Module API":http://eco.netvibes.com/developers/ is public... -# *Ecosystem* : Netvibes "Ecosystem":http://eco.netvibes.com/ includes hundreds of modules and podcasts and thousands of feeds and tabs which can be integrated into any Netvibes page with a single click. Some of my favourites: "XE":http://eco.netvibes.com/modules/3492/xe.com-currency-converter Currency Converter, "Quick Translator":http://eco.netvibes.com/modules/3709/quick-translator, "Google Map":http://eco.netvibes.com/modules/6776/google-map "Daily Cartoons":http://eco.netvibes.com/modules/91/daily-cartoons and "Bitty Browser":http://eco.netvibes.com/modules/6/bitty-browser. -CakePHP feeds? "Loads":http://eco.netvibes.com/?type=all&q=cakephp! - -Enough?
@@ -1,78 +0,0 @@
------ -permalink: "40" -filters_pre: -- redcloth -title: "Introducing: \"CakePHP Recipes\"" -comments: -- :date: 2007-11-05 02:43:33 +01:00 - :author: naxis - :url: "" - :id: 108 - :body: can you give a date about when the book will on stores physically? -- :date: 2007-11-16 09:45:10 +01:00 - :author: Sam - :url: http://www.samoliver.com - :id: 124 - :body: |- - Just got this from Amazon after 6 months back order: - - Dear Customer, - - We wanted to give you an update on the status of your order [***]. - - We are sorry to inform you that we have been unable to obtain the - following item: - - Fabio Cevasco (Author) "CakePHP Recipes" [Perfect Paperback] - - We apologise for the length of time it has taken us to reach this - conclusion. Until recently, we had still hoped to obtain this item for - you. - - This item has now been cancelled from your order and we can confirm that - you have not been charged for it. - - Please accept our apologies for any disappointment or inconvenience - caused. - - Any ideas when the book will be out? -- :date: 2007-11-16 11:36:08 +01:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 125 - :body: |- - This book has been canceled, so it will never be available. - - For more information on the reasons for this, see: - - -- "http://www.h3rald.com/blog/42":http://www.h3rald.com/blog/42 - - -- "http://www.h3rald.com/blog/too-many-cooks-take-2":http://www.h3rald.com/blog/too-many-cooks-take-2 -date: 2006-11-02 05:25:00 +01:00 -tags: -- cakephp -- writing -type: article -toc: true ------ -Despite all my efforts to keep the whole thing quiet for the time being, a few days ago I entered the words "CakePHP Recipes" in Google and discovered - to my astonishment - that my new book about the CakePHP framework is already for (pre)sale in many popular online bookstores. - -Up to now I never made any formal announcement myself (although the Cake Software Foundation already did, months ago), nor gave out any juicy details about it, but maybe now the time has come to post something more about it. Yes, I am indeed writing a book about the CakePHP framework, and yes, you can already buy it but no, you can't phisically get it simply because it's still in progress (miracles of the modern publishing industry!). - -!<http://base--/img/cakephp-recipes/cover.jpg! - -I'd like to point out that I'm not the _only_ author of the book: all the code examples and snippets included in the book is provided by the Cake Software Foundation staff, in the person of Larry E. Masters and Garrett J. Woodworth mainly, who will also act as technical editors and first reviewers of the book, together with other trusthworthy CakePHP core developers. -It is our intent to produce an enjoyable and yet very useful book which will hopefully help CakePHP enthusiasts to use the framework in real-world situations: the book will not focus on theory but on practice, by providing a lot of interesting "recipes" on how to implement a particular functionality in a CakePHP web application. - -Why should you get it? Here are some reasons: - -* It is a book written _by_ programmers _for_ programmers -* All the code included in the book has been created and tested by the creators of the framework -* Part of all the revenues generated by the book (including royalties) will go to the Cake Software Foundation, and hopefully contribute to improve our already excellent framework. - -Very special thanks to "Peachpit Press":http://www.peachpit.com/ for giving me and the Cake Software Foundation this chance to - -More to come... - - -bq. *UPDATE*: This book "has been canceled":http://www.h3rald.com/blog/42 and therefore will NEVER be available in bookshops or online stores.
@@ -1,16 +0,0 @@
------ -permalink: "41" -filters_pre: -- redcloth -title: Comments temporarily disabled -comments: [] - -date: 2007-01-07 06:53:00 +01:00 -tags: -- website -type: article -toc: true ------ -As a few of you might have noticed, I decided to disable comments on all the sections of this site, as a temporary measure against spam. - -Hopefully I'll try implementing something more effective and less drastic soon, but meanwhile this seems the quickest way to get rid of approx 600-800 spam comments per week.
@@ -1,147 +0,0 @@
------ -permalink: "42" -filters_pre: -- redcloth -title: Too many cooks spoil the Cake book -comments: -- :date: 2007-06-25 14:19:09 +02:00 - :author: anon - :url: "" - :id: 7 - :body: where did all the comments go? -- :date: 2007-06-25 14:35:50 +02:00 - :author: Fabio Cevasco - :url: "" - :id: 8 - :body: |- - All the comments of the old version of the site were not migrated due to the high volume of spam (last time I counted 9000+ records in the database, just in the comments table) and the impossibility of filtering the real comments. - - Feel free to re-start the whole thing all over again, _if you must_. I'd rather move on. -- :date: 2007-07-07 16:40:01 +02:00 - :author: needish - :url: "" - :id: 13 - :body: Why don't you publish the book online? You could even charge a few bucks for a PDF version. I think that probably most people wouldn't care about Cake foundation sponsorship. -- :date: 2007-07-07 23:08:59 +02:00 - :author: Nate Todd - :url: http://natetodd.com - :id: 14 - :body: |- - I agree with needish. - - I would gladly fork over some cash for a resource that provides well-commented and thought-out code examples. The one gripe I have with Cake is the dearth of applicable and up-to-date resources. -- :date: 2007-07-08 02:43:29 +02:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 16 - :body: "Thanks a lot for your suggestions and offers, but no.\n\ - Although I still think CakePHP is a great framework for PHP, I totally lost interest in it. \n\n\ - And besides, the book was never finished simply because nearly all the code examples where never provided by the Cake Software Foundation, so the few chapters I wrote would be kinda useless to the community now. " -- :date: 2007-07-08 11:33:27 +02:00 - :author: Tom - :url: http://www.concepthue.com/blog - :id: 17 - :body: |- - I agree as well, I would like to see a PDF version available online -- even if it isn't complete. - - There is such little documentation for CakePHP that I feel it turns many folks away and I find myself asking way too many questions in the irc channel lol to gwoo's dismay sometimes. - - I would love to get as many perspectives, examples, and thoughts as possible because I believe CakePHP is really good and should be promoted. Especially if it's ever gonna "make it" -- :date: 2007-07-08 12:06:41 +02:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 18 - :body: |- - Believe me, if you asked me months ago I would have contributed to expand Cake's documentation and write more articles about it quite willingly. - - But as I said, at the moment I'd like to contribute to other projects where I'm actually appreciated. - - I know Cake lacks of documentation, but the Cake Team lost a writer and contributor four months ago, and I'm sure things won't improve if they keep dealing with people in the same way. - - I know I keep going on about this, and I know I sound quite offensive sometimes, but I'm sure at least some of you can understand how this can be a "hot topic" for me. - I'd be glad to see Cake moving forward and "make it", although I will *not* do anything anymore to make that happen. -- :date: 2007-07-08 23:56:34 +02:00 - :author: anon - :url: "" - :id: 19 - :body: |- - Good thing the Internet Archive still has a copy of the lost comments - - http://web.archive.org/web/20070309125512/www.h3rald.com/blog/view/42/ -- :date: 2007-07-09 00:16:34 +02:00 - :author: Dan - :url: "" - :id: 20 - :body: |- - What a shame... I was really looking forward to that book! - - Btw, the new site design looks good... -- :date: 2007-07-09 05:26:37 +02:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com/ - :id: 21 - :body: |- - @anon: Thanks. Now I hope you are not going to copy and paste them all back here, at least! - Sorry for the delay in showing your comment on the site btw, Askimet marked it as spam - posts with a link and nearly no meaningful content normally end up that way, I suspect :P -- :date: 2007-07-25 10:15:55 +02:00 - :author: Manny - :url: "" - :id: 32 - :body: | - I just came across your post. - - That totally sucks because cake's doc's SUCK huge. I would have considered using cake since people have been going on about how good it is because it's based on Rails. - - BTW, I don't have time to spend shifting through their API or searching newsgroup or dealing with some of the unfriendly "bakers". There's a huge difference between 1.1 and 1.2. - - I'm going to checkout Symfony. - - -- :date: 2007-08-11 04:35:14 +02:00 - :author: Joan Piedra - :url: "" - :id: 44 - :body: |- - Hello Fabio, - - It looks like I'm kinda late in this discussion, I remember I saw your book cover once, and was looking forward to buy it. - - After reading your comments, it seems you have lost all your interest in this project. Still I'd like to recommend you two ideas. - - 1. Look for another publisher that is more interested in open source software like Packt, they have done a nice job with the new jQuery book. - - 2. If it doesn't interest you anymore, you could 'free' the book, make it open source as an 'open book'. Then see how the cakephp community and open source magic works. - - Hope this book can get some light at last. - - My best regards, - Joan Piedra -- :date: 2007-09-14 08:13:51 +02:00 - :author: dustman - :url: "" - :id: 71 - :body: i myself knew that feeling yo got with cakephp core dev team, at least one or two persons... too sad man... but the happiest of it that now i'm converted to python :) -- :date: 2007-11-10 01:54:12 +01:00 - :author: Fred Jones - :url: "" - :id: 119 - :body: I don't know if I agree with posting a blog post like this. Sue them for damages. -date: 2007-03-07 02:45:00 +01:00 -tags: -- cakephp -- writing -type: article -toc: true ------ -I am sorry to announce that my upcoming book, CakePHP Recipes, will not be published anymore. As a matter of fact, it wasn't finished because some of the people involved failed to comply with the terms of their contract in delivering material which was suitable for publication. - -To quote an email I received from my publisher a few days ago, - -_"[...] The Cake Software Foundation has informed us they are withdrawing from the CakePHP Recipes project, and returning the advances they've received. This means we can no longer count on them for support, nor can we package the book as an official title._ - -_After careful consideration, we have determined that this renders the book no longer viable for us. So, regrettably we must cancel your contract as well. Please understand that we have no quarrel with your performance; you have been responsive and communicative for the entire time. [...]"_ - -This is a huge disappointment to me, in particular because I am not responsible for the cancellation. It was going to be my very first book to be published, and due to someone else's misjudgement and lack of motivation it will never be available to the readers. -I do not want to put the blame the whole Cake Software Foundation for this: nearly every person involved in the project did his best in reviewing parts of the book or offering me support. Regrettably this wasn't enough: unfortunately it seems that someone didn't like the idea of me writing the book and kept doubting not only my coding skills but also my ability as a writer all along. - -It is sad to see how certain individuals fail to understand the importance of marketing and public relations not only when working on a team project but also in ordinary life, but it is truly disappointing to see how the thoughts and opinions of a single individual affect the work of a whole team.
@@ -1,37 +0,0 @@
------ -permalink: "43" -filters_pre: -- redcloth -title: Time for a diet... -comments: [] - -date: 2007-03-09 11:59:00 +01:00 -tags: -- cakephp -- rant -- writing -type: article -toc: true ------ -My fiancée keeps telling me that too many cakes are not good for me, and I never listen: I always liked cakes! I *did* like the CakePHP(TM)[1] framework too, once, and I *did* write "some articles":http://www.h3rald.com/projects/view/cakephp-herald about it in the past, and I believe at least a bunch of Bakers found them useful, especially at the time. -I do believe the Cake(TM) Software Foundation[1] quite liked having their framework featured on popular websites like php|architect and SitePoint, and I believe that I contributed - to some extent - to make it one of the most popular frameworks available for the PHP programming language. - -Unfortunately though someone decided that two of such articles and my personal website were no longer worth a mention on CakePHP official website frontpage. To me, this makes sense since the two CakePHP-related series which are being published by IBM are much more up-to-date than my articles, and thus deserve such a mention instead. - -Oddly enough, I took a screenshot of the CakePHP website just yesterday _"by chance"_ and my articles were still there: - -!http://www.h3rald.com/img/pictures/cake-promo/cakephp-08032007.png! - -...while this morning they weren't anymore: - -!http://www.h3rald.com/img/pictures/cake-promo/cakephp-09032007.png! - -Of course I can't provide any proof that I took the screenshot yesterday, and of course I don't have any proof of the fact that someone in CSF may have thought that due to my recent "bad behavior":http://www.h3rald.com/blog/view/42/ my articles didn't deserve to be publicized anymore. I am confident that the Cake Software Foundation always does its best in keeping its site up-to-date, and I am glad that yesterday's accident reminded them that there were far better articles which needed to be featured on their site. At least I _finally_ did something good for the community! - - -Sarcasm apart, I feel I owe an apology for blowing this whole thing out of proportions: I disclosed embarassing details about our past project which - for the sake of the framework - should have never been made public, perhaps. -I want all of you to know that I still think that CakePHP is the best PHP framework ever made and I genuinely think that Larry E. Master did outstanding work in all this time, along with the rest of CSF members and contributors. Best of luck for your future editorial and development projects. - -Since now my contributions are no longer "officially recognized", I think I'd better to move on devoting my attention to something else. - -fn1. "CakePHP" and "Cake" _seems_ to be registered trademarks of the Cake Software Foundation Inc. I'm not sure if I'm allowed to use them in this blog -- If anyone has any problem with it, please let me know.
@@ -1,19 +0,0 @@
------ -permalink: "8" -filters_pre: -- redcloth -title: New site operative -comments: [] - -date: 2006-04-06 16:57:00 +02:00 -tags: -- website -- webdevelopment -- cakephp -type: article -toc: true ------ -Yes, it works. Perhaps it's a tiny bit slower than expected but the new h3raLd.com seems to work. -I'll probably find some new exciting bugs to fix in the next few hours, as usual - that will be annoying but perfectly normal. - --The good thing is that the new template seems to load faster, mostly due to the fact that I hardly used images- <- [not true, te new site appears to be slower, maybe not due to the images], at any rate, let's see how it goes. I can imagine I'll have to implement some sort of caching system for the tagging system in particular, but fortunately "CakePHP":http://www.cakephp.org/ apparently comes with a built-in caching mechanism for views, models etc. etc. although the documentation available seems to be "scarce":http://groups.google.com/group/cake-php/browse_thread/thread/f0f96751bb61bc7b/bcb43c97e91923c7?q=caching&rnum=1#bcb43c97e91923c7 at the moment, and I've been to lazy to investigate any further.
@@ -1,25 +0,0 @@
------ -permalink: "9" -filters_pre: -- redcloth -title: Riddle me this... and you'll get the job! -comments: [] - -date: 2006-04-07 16:13:58 +02:00 -tags: [] - -type: article -toc: true ------ -Today I had my _n^th^_ job interview. Yes, I'm getting used to them by now, and it's becoming quite entertaining: if they _paid_ me for just take interviews I'd do that for all my life quite happily! -But since that's not going to happen I'd better get a move on and find a so called _real job_. Actually this time it wasn't the usual complete waste of time and this company _nearly_ made me a proper offer: they're gonna see me again next week, so let's hope for the best. - -The interview was one of the best ever, no doubts. They were friendly enough, they seemed to like me enough and they were even entertaining enough... one thing which actually _never_ happened to me before: they asked me to solve a sort of pseudo-IQ-test(an annoying semi-pointless riddle, in other words), and here's a rough translation from Italian, the comments within square brackets are mine: - -bq. _You're alone in a pitch black room [...nice intro, eh?] and the only thing you have are two fuses of different length and a lighter [thank God for that, now it's all much better]. You know that both the fuses can burn in exactly one hour each, although there's no proportional law which bonds the lenght of the fuses to the time necessary to burn them; how can you measure 45 minutes, exactly?_ - -I solved that, eventually, and I got the job! Weheee! - -No, more or less, but not quite... I'm gonna see them again, and evaluate their offer along with the other(s). - -The solution of the riddle? NO CHANCE! Go and figure it out, it's not hard.
@@ -1,199 +0,0 @@
------ -permalink: a-look-at-drupal -filters_pre: -- bbcode -title: A look at Drupal -comments: [] - -date: 2006-01-12 07:42:44 +01:00 -tags: -- php -- webdevelopment -- review -type: article -toc: true ------ -[i][b]Important Notice:[/b] This article is about changes occurring to zZine Magazine's site[1]. At the time of writing, www.zzine.org uses the old site, and not the Drupal-based one presented in this article, which is currently under construction[18].[/i] - -"Why can't we log who edits the articles?" -"Can we send newsletters?" -"We should really have a members' area..." - -zZine.org[1] is a scratch-built site, coded from the ground up to offer zZine journalists, editors and readers all the functionalities and features they wanted. I'm not totally against sites being coded from scratch, but what happens if something needs to be fixed, or new functionalities have to be implemented and you realize that the code cannot be extended or patched easily? - -[b]Case Study: zZine Magazine[/b] - -zZine Magazine is an online magazine which publishes not only IT-related and other articles on a weekly basis, but also monthly publications containing CyberArmy[2] digests, special columns, and featured articles. A team of journalists, researchers, editors, publishers and outside contributors has access to the zZine site to write, submit, and edit articles, manage publications and perform various other tasks through a password-protected administration area. This is common to approximately 75% of the websites on the Internet: they have a front-end to present content to the general public and a semi-hidden administration backend which is normally more difficult and tedious to code. That's why someone started developing [i]Content Management Systems[/i][3]: ready-made, fully-featured administrative back-ends for creating and managing almost any kind of website, from blogs to eCommerce portals. - -Could a CMS be used for zZine Magazine? Probably - zZine doesn't need any innovative or advanced features, just a bunch of commonly-used functionalities like: -[list] - [*]Add, delete, edit and publish articles - [*]Customizable user permissions, ideally role-based (writer, editor, publisher, etc.) - [*]Creating and managing monthly publications - [*]Editor's tests - [*]User signups, notifications, etc. - [*]RSS feed generation - [*]Sending newsletters to subscribers - [*]Logging user actions -[/list] -Some members of my team raised some concerns regarding the usage of a CMS, which were mostly based on our past experience with just a particular product and not CMSes in general. Everybody agreed that if we were to go back to a CMS, we [i]had[/i] to choose the [i]best[/i] this time: something flexible, easy to use, fast, search-engine friendly, and extensible. I spent some time researching CMSes, because while I knew that there's no such thing as the best CMS, there was certainly a CMS that was best for our needs. - - -[b]Making the right choice[/b] - -In the past, I had played around with Xoops[4] when I first thought about creating websites, and I used Mambo[5] for some other sites. I admit that I never actually spent time creating complex Mambo components and modules, but I must say that in the end I felt somehow tied to third-party modules and unable to understand how they really worked: Mambo seemed to give developers too much freedom, and had neither a solid API nor conventions to follow, at least when I used it. - -So I decided to have a look around again, starting from the two most important sites people should look at when choosing the most suitable CMS for their work. -The first site is CMS Matrix[6] which - as the name implies - provides a really handy [i]matrix[/i], or chart, to compare the various features offered by nearly all CMS available, both proprietary and open-source. - -I remember choosing Mambo last time I used the matrix simply because it appeared to be one of the most feature-rich. This is actually something [i]not[/i] to do when choosing a CMS: always concentrate on what your site needs rather than what the CMS is able to offer. Otherwise, you run the risk of having too much to work with. - -The other important website to visit when choosing a Content Management System is OpenSourceCMS[7], which basically allows you to try a demo of every open source CMS online. This is perhaps more useful, but also much more time-consuming: it's better to narrow down the list of possible CMSes after checking CMS Matrix and then try each one rather than just picking one at random. - -At this point, an experienced CyberArmy staff member[8] suggested Drupal[9]. I asked her why, and she simply said that it seemed to be the best choice according to zZine's needs, as it basically offered all the features we were looking for, either natively or through modules. She also admitted to be biased, as she's actually [i]part of Drupal's documentation team[/i] and involved with Drupal development[10]. - -Before making any kind of commitment, I checked out Drupal's website to see how they organized things, and I was quite impressed. I immediately noticed the Handbooks section[11], which contains all the official Drupal documentation and it seemed pretty much complete. No "under construction", "please write content here" or "we're a new project, help us write the documentation" notes, just a load of good-quality documentation, including a fully documented and [i]stable[/i] API![12] - -This surprised me, because some projects I came across, even really good ones, lacked a proper documentation section. I think this is a common problem with new open source projects, and Drupal for this reason gave me the impression to be quite mature and useable already. After visiting the very clear and organized Downloads Section[13], I downloaded the CMS and a few modules and installed it on my laptop. - - -[b]Installation[/b] - -Drupal needs three things to run: -[list] - [*]A web server - Apache is fine, and ISS is reported to be working - [*]PHP - Either version 4 or 5, Drupal started supporting PHP5 since 4.6.0 release - [*]A PHP-compatible database - MySQL or PostgreSQL is recommended -[/list] -I used a WAMP[14] installation to test Drupal. First of all, I created a MySQL database, granting ALL privileges to the database user accessing the Drupal database. When I uploaded the site to the remote server, later on, I had some problems because the LOCK TABLES privilege wasn't granted by the host. Drupal requires this, so I had to contact my host to solve the problem. I then imported the database scheme located in the [i]database[/i] directory under the installation directory and modified the configuration settings (sites/default/settings.php) to allow Drupal to access the database. Installation complete. - -Drupal was now up and running with the default configuration settings, with a minimum of fuss. For all the details concerning the installation process, consult the exhaustive documentation.[15] I didn't read it when I installed it, but it can really be useful in some situations. - - There are actually two non-critical things to consider if you're planning to use Drupal for a medium-sized project: the first involves changing a few settings on php.ini, in particular increasing the amount of memory allocated to PHP from 8MB to 16MB, especially if you're planning to use either a lot of simple modules or a few complex ones, and the second is setting up your crontab to execute [i]http://www.yoursite.com/cron.php[/i] every hour or so. This is required by some semi-essential modules like the site-wide search, but a common alternative (if you don't want to setup the [i]cron[/i] task manually) is the poorman's [i]cron[/i] module[15], which I used myself and found to be workable. - - -[b]Keeping your site under control[/b] - -Perhaps one of the best things Drupal has to offer is a rock-solid general-purpose administrative backend. The first thing I found in the backend which really impressed me (and that also I never found in another CMS) is the ability to create [i]custom[/i] role-based user accounts and access permissions for [i]everything[/i]: every module can be configured so that, for example, not all people can see its output and just a few can administer and modify it. - -For zZine, I created four types of accounts: -[list] - [*][i]Administrator[/i] - Able to access everything and change every setting of the site - [*][i]Publisher[/i] - Able to write, edit and publish every kind of content on the site, but not able to administer user accounts, permissions and similar administrator-only tasks. - [*][i]Editor[/i] - Able to write and edit anything on the site, but not to publish it. - [*][i]Writer[/i] - Able to write articles, blogs and similar content, but in some cases not allowed to edit it. -[/list] -These were precisely the account types I was looking for in a CMS. Granted, other products offer them by default, but having pre-defined account types is one thing, and being able to customize them completely is another. - -User accounts are great, but sometimes it's good to know what the users of your sites are doing as well. On our old site we had user accounts for editors and administrators, and even if only a few people had access we had no way to determine who edited an article or who published something unless that person told us. Drupal comes with a radical solution to this: Almost every action is automatically logged by the [i]watchdog[/i] core module. Every website error, every page not found, and every PHP or MySQL error is logged, as well as every content submission or modification. Page accesses, meanwhile, can be logged through the statistics module. - -Themes & Templates - -"We shouldn't use a CMS: I don't want zZine to have the overly used *nuke-style look." I've heard this too many times. Sometimes people associate the word "CMS" with "lack of original design", and that's not true by any means, especially for Drupal. Of course, there are plenty of ready made themes[16] which can be freely used or modified for any Drupal-based site. - -I must confess that when I first saw the themes section I feared that Drupal "themes" used their own template engine, like some CMSes do nowadays, but I was wrong: currently Drupal supports some template engines[17] but also pure PHP-based ones. Theme engines do their job wonderfully and can offer some interesting features, but templates written natively in PHP tend to perform better, simply because there's no extra parsing or additional overhead involved. - -I decided to have a look at a standard PHP theme. Basically, it's nothing more than a PHP-enriched xHTML file and its corresponding stylesheet. There are a few functions which must be used to perform particular tasks, like showing the main navigation links, but nothing too hard to understand. It's also [i]very[/i] customizable. In fact, we're already working on a custom zZine theme, which doesn't seem any harder than coding a standard xHTML template. As design should always be the last thing to worry about, I decided to use a temporary template I created by slightly modifying an existing one.[18] - - -[b]To switch or not to switch?[/b] - -When creating a new site for an organization which already has one, there's something very important to consider: [i]what happens to the old data[/i]? -Assuming the old site was dynamic and using a database of some sort, there are three possibilities: -[list] - [*]Don't bother doing anything: any data on the old site will not be transferred to the new one. - [*]Make the old website available somewhere else as an [i]archive[/i] of old documents. - [*]Import all the data from the old site to the new one. -[/list] -Obviously we went straight for the third one, which is the most difficult to implement, but it was necessary: there were over 1000 articles on the old site- - -Of course, in reality, I didn't even mention the possibility of using Drupal until I figured out a way to import the old data into the new database structure. Never praise features or convince people to switch unless you're 100% sure you can handle the situation. Luckily for me, it turned out that everything could be imported easily enough. - -The first difference I found between Drupal and zZine was that we didn't really have proper user accounts. Every article had an author, but it was stored as a field in the article's record, and that was all. Drupal, on the other hand, supports (and perhaps requires) user accounts - everything present on the site must be written or edited by an existing user. - -The solution I cam eup with was rather drastic: I created about 120 user accounts, retrieving usernames from the articles and inserting them through a custom PHP script into Drupal's user table. Of course, those users never registered on the new site[18], so I didn't personalize the accounts at all: I simply put a notice on the first page asking everyone who contributed to zZine before to contact me in some way to enable their account with a valid email address. - -After this initial difficulty, importing articles was relatively easy. Pretty much every type of content in Drupal is, in its simplest form, a [i]node[/i]. Nodes have a title, which is a teaser generated automatically from the body text, and an author (the node table in the database has more fields, but these are the key ones for us). Essentially, Drupal's two default models for writing [i]stories[/i] and [i]pages[/i] write data to this table only. The most important thing to understand about Drupal is that almost every module used to create [i]something[/i] on the site - an article, a blog entry, even songs - will use the node table, and add everything else on other tables. This makes the whole system much easier to administer: every node can potentially be extended [i]in any way[/i] by third party modules! - -What about categories? Well, Drupal has become famous for its taxonomy module: whereas most CMSes only support, or in fact [i]impose[/i], a one- or two-level hierarchy for categories, Drupal's taxonomy module supports the creation of as many different terms to describe data as you can think of. Each piece of content (categorization can be applied to [i]any[/i] node, and since almost everything is a node-) can belong to none or [i]n[/i] different categories, which can be nested in a [i]n[/i]-level hierarchy. Since the zZine articles were already divided into categories, I imported all of them directly into Drupal. On the old zZine site, every article could have at most one category, which is fine, but it's good to know that we can now configure the system to support a more advanced categorizing system. - -After importing the articles, the last important thing to transfer to the new site were the zZine Publications. Publications are what we call the article collections that we release as an issue every month. I could have created a new module for this, and it wouldn't have been that hard, but there was already an excellent module for that. This was pure luck, but the [i]epublish[/i][19] module seemed like it was tailored specifically for our needs. - - -[b]Drupal API and Modules[/b] - -We were lucky enough to be able to use existing modules for the main functionalities of our site, but in some cases you might not be able to find [i]exactly[/i] what you're looking for. - -In our case, even if we could have used the [i]story[/i] module, which is part of the default installation, for zZine articles (stories have a body, a teaser, a title and an author, exactly like our articles) we decided not to. I wanted our editors and writers to know what to use when submitting articles, and the name "stories" sounds a bit too ambiguous for my liking. So, I decided to have a look at the standard story module to see how modules work, and create something similar. - -[i]Note: I'm curious by nature and I didn't read anything in the Drupal API[12], or about developing custom modules; I looked at the story module without any prior knowledge of Drupal's conventions.[/i] - -All I found in the story module was a bunch of functions like: -[code] -/** - * Implementation of hook_node_name(). - */ -function story_node_name($node) { - return t('story'); -} -[/code] - - which seemed to be enough to tell the Drupal core what to do. I was used to Mambo components, where developers have more liberty to do what they want, including outputting HTML code anywhere. Drupal is nothing like that; on the contrary, it has its own structure and coding conventions that developers have to follow when creating custom modules. Even if a simple function like the one above is fully commented, it has to have a standard indentation (two spaces) and an obviously standardized name. I noticed that all the functions similar to this one started with "[i]story_[/i]", so I created a new file named [i]zzarticle.module[/i], copied and pasted the story module code into it, and changed every function accordingly, like this: -[code] -/** - * Implementation of hook_node_name(). - */ -function zzarticle_node_name($node) { - return t('zZine Article'); -} -[/code] -Trivial enough, and it worked fine! I put my shamefully copied module in the /modules directory and I was able to create "zZine Articles" (which were nothing but stories with a different name). - -At this point I decided to have a proper look at the API, and read about hooks: - -[quote][i]"Drupal's module system is based on the concept of "hooks". A hook is a PHP function that is named foo_bar(), where "foo" is the name of the module (whose filename is thus foo.module) and "bar" is the name of the hook. Each hook has a defined set of parameters and a specified result type. - To extend Drupal, a module need simply implement a hook. When Drupal wishes to allow intervention from modules, it determines which modules implement a hook and call that hook in all enabled modules that implement it. [-]"[/i][/quote] -A [i]hook[/i] was used for the previously mentioned function, and this was diligently commented: - -[code] -/** - * Implementation of hook_node_name(). - */ -[/code] - -This made me understand how Drupal is actually geared towards developers and at the same time suitable for non-technical users. Wait a minute, what if someone is not familiar with PHP and still needs custom modules and features? Is there any way to extend Drupal without having to physically code new things? Yes, there is, and two modules come to mind: -[list] - - [*][i]Webform[/i] - allows the creation of any kind of web form. Users can customize field types, values, labels and messages. The module also provides ways to process forms by either saving data to the database or emailing it, which we can use for things like the Editor's Test and surveys. - [*][i]Flexynode[/i] - This module is simple and powerful - it allows users to create their own content types without coding a single line. In my example, I cloned the story module to create the zZine Article content type. This is easy to do, and functional, but what happens if someone wants to include an additional field to the article submission form? I can probably do this using hooks, but if I was lazy I could do the same thing with the [i]flexynode[/i] module. I actually used this module for our podcast section[20], and it did an excellent job. -[/list] - -[b]Conclusions[/b] - -For now I must say I'm very happy with what Drupal has to offer, and if there's something we need for the site, we can code it ourselves and then integrate it into Drupal. -One of the major strengths of this CMS is definitely its developer-friendliness: while other CMSes mainly focus on users at the price of limiting extensibility and trapping developers into predefined modules, Drupal even encourages developers to integrate their code into the existing structure, opening virtually unlimited possibilities. Granted, it may seem difficult to understand at first, some people I talked to told me that 'Drupal is too complex' or has a rather steep learning curve, but I just think everything becomes clearer after reading parts of the vast documentation section: this is the only price to pay, and believe me, it is definitely worthwhile. - - -[b]Notes[/b] -[small] -[1] zZine Magazine: [url]http://www.zzine.org[/url] -[2] CyberArmy Community: [url]http://www.cyberarmy.net[/url] -[3] Content Management System, Wikipedia page: [url]http://en.wikipedia.org/wiki/Content_management_system[/url] -[4] Xoops - Official Page [url]http://www.xoops.org/[/url] -[5] Mambo - Official Page: [url]http://www.mamboserver.com[/url] -[6]CMS Matrix: [url]http://cmsmatrix.org/[/url] -[7] Open Source CMS: [url]http://opensourcecms.com/[/url] -[8] Snarkles's CyberArmy Profile: [url]http://www.cyberarmy.net/~snarkles[/url] -[9] Drupal - Official Page: [url]http://www.drupal.org[/url] -[10]Webchick's Drupal Profile: [url]http://drupal.org/user/24967[/url] -[11] Drupal - Handbooks: [url]http://www.drupal.org/handbooks/[/url] -[12] Drupal API: [url]http://drupaldocs.org/api/head[/url] -[13] Drupal Downloads: [url]http://www.drupal.org/project/[/url] -[14] WAMP Server Package: [url]http://www.wampserver.com[/url] -[15] Drupal - Installing and Upgrading documentation: [url]http://drupal.org/node/258[/url] -[16] Drupal - Themes: [url]http://drupal.org/project/Themes[/url] -[17] Drupal - Theme Engines: [url]http://drupal.org/node/509[/url] -[18] zZine Beta site: [url]http://beta.zzine.org[/url] -[19] Drupal - ePublish module: [url]http://drupal.org/project/epublish[/url] -[20] zZine Podcasts: [url]http://beta.zzine.org/podcasts[/url] -[/small]
@@ -1,173 +0,0 @@
------ -:type: article -:tags: -- italy -- personal -- rant -:permalink: academic -:title: "Thoughts about the Italian Academic Education" -:summary: "An article written by a 22-year-old IT Engineering student, out of frustration for not passing his final exam. A rather emotional, but fairly accurate piece on the absurdities of the Italian Education System." -:toc: true -:pdf: true -:date: 2005-07-07 22:30:00.099000 +02:00 ------ -textile[ -I found this article today, buried in my mailbox. I wrote it just over five years ago, the evening after failing the last, insignificant exam necessary to get my degree in IT Engineering. - -I eventually passed the damn thing, got my B.Sc., and found a great job right afterwards, while all my former fellow students were still studying pointless crap. Maybe some of them are still studying pointless crap right now, and they're still living with their parents. - -I was very lucky. If I didn't fail that exam perhaps I would have kept studying for my master's degree for years, and maybe today I wouldn't even have a job, or be married! - -I decided to re-publish this article because it's part of what I am, and I'm not ashamed of it. I corrected a few of the most obvious spelling and grammar mistakes, but I didn't edit it or censor it otherwise. - -It may be a senseless rant, but my opinion of the Italian Education System is still the same: If I'll have a child who wants to study anything technical someday, I'll tell him/her to get the hell out of Italy and go abroad to study in a _real_ university. - -p(((((((((((((((. *Fabio Cevasco* -- _Saturday, July 31st 2010_ -] -section[ - @title[The Pre-computer Age] - textile[ -Who am I? I'm just an Italian student taking the last exams to obtain my B.Sc. in IT Engineering. Obviously I'm quite interested in Information Technology and everything concerning computers or the Internet, and - believe it or not - this probably came from my parents' original dislike of computers themselves. - -in Italy, unlike in most of the other capitalistic countries of the world, kids tends to listen to their parents until they reach their "full maturity", i.e. 25 years of age at least (by the way, I'm 22), so, to cut a long story short, I was allowed to have a computer at home when I was 16 years old. I couldn't believe it when the technician brought it at home: sure I'd seen a computer before in my life, but that was mine, and I could use it to do something amazing, as I dreamt many times. - -The point is, from another point of view, that I felt behind already compared to my friends who were already boasting their records at various computer games. Fools. -On another note, I was a bit different from other Italian kids: I always liked writing and reading in English since I was 6, because I found the language to be quite amazing or even magic for the way it sounded, as I used to say to my friends. Friends - the Italian ones, that is - who never really understood me totally, and in particular my -passion for the Anglo-Saxon cultures: for them, writing and reading in English were just boring and difficult things you had to do at school, while I enjoyed reading The Tempest by Shakespeare when my English teacher didn't even teach me the past tense, yet. A fool? - -My passion for the English language was soon noticed by my parents, who let me go to England a few times, to college: basically a fashonable way for english schools and travel agencies to rob honest families, promising them that their kids would have learnt a new language enjoying themselves. Result: the kids enjoyed their holiday a lot, but basically always spoke Italian to each other (and even to English people over there) and the families were happy when they came back because after spending so much money they must have learnt something... - ] -] -section[ - @title[Using the Computer and the Internet] - textile[ -Back to that amazing and weird magic box called computer: I immediately enjoyed experimenting new stuff, playing with Windows (for me the word "Linux" at the time would have sounded not too different from some names of medicines my grandparents were taking), and even playing games, why not, but in English of course, because I never -really liked Italian translations (yes, we even dub video games!). -I remember my biggest fear was not being able to catch up with my friends who had a computer for years: I was so obsessed with that that I often stayed on the PC more than the 2-3 hours allowed by my parents, when they were away. Some time later, and relatively recently, I discovered that I catched up relatively soon, without even noticing it. - -I've been allowed to access the Internet when I turned 18, because my parents were scared it could be just another bad thing, and still I found myself behind if compared to my friends, who've been surfing the web long before. - -Only now I notice that perhaps my parents made me discover new things about PCs which my friends never bother learning, even now that they're graduating. I remember my mum calling me for a silly pseudo-scientific divulgative program where they were describing this new, totally free operating system different from Windows who was supposed to work much better. "It said the name before... it's Luxi... lixi... lunis..." - Linux. - -When I had access to the Internet my life really changed. I do believe that unlike my friends I used the Internet for its very purpose: sharing knowledge, or, in my case, just learning. I also made a vow to myself: to surf ONLY (unless I had to) English/International websites; a vow which I'm keeping still nowadays, which seemed utterly illogic -to my friends and Italians in general. - -Immediately a whole new universe opened to my eyes: I quickly learnt how to keep up-to-date on the recent events regarding computers, I learnt some rudiments of Internet and Hacking Culture (thanks ESR for all your papers) and the Open Source movement, and linux, etc. and I noticed two things: -* I was definetely catching up with my friends' "knowledge" in computing -* I would have NEVER ever managed to learn even 1/10 of all you need to know about computers: the same as in life, and I was happy with it. - ] -] -section[ - @title[The Pre-academic Period] - textile[ -In the meantime I was studying in a Liceo Scientifico, a kind of scientific high school where basically they make you study all sort of subjects (from geography, to maths to phylosopy, to Latin) mainly focusing - they say - on Science-related disciplines. For those who don't know, in Italy you don't get to choose what you want to study: in -High School and University they let you choose basically a type of school, but subjects and courses cannot be changed, apart from a few exceptions. -I "chose" a particular type of scientific school (...the exception!) where basically I agreed to study an additional subject - Computer Science - in addition to all the rest, for a total of more than 30 hours per week. I studied a lot then, because my parents taught me that Culture was important, and that "if you're ignorant you can't do anything nowadays". No, my parents weren't ignorant themselves, my dad is a Mechanical Engineer and my mum a Latin/History/Italian professor ...and yes, that helped my forma mentis a lot. - -I studied a wide range of subjects, including something totally irrelevant with my favourite ones: English and Computing (note: I say "Computing", not Maths), and I did quite well in the end, graduating from High School with a mark of 100/100. While I was studying Latin, Phylosophy and alikes I was thinking that at least at University I'd have studied something really more specific. -Until the end I was undecided on which faculty to choose, whether IT Engineering or Foreign Languages. I was very fond of English and languages in general, but I primarly liked computers, so I thought that if I studied IT Engineering I'd have learnt more about computers and my already half-decent knowledge of the English language would -have helped me in my studies ("Now they REQUIRE a good knowledge of English, at university") and in my future, when I'd have started working. FOOL. - ] -] -section[ - @title[Alice in Wonderland] - textile[ -That was it, I remember exactly when I went to sign my pre-enrollment papers: IT Engineering. I was so happy to have made it! Now finally I would have studied what I was meant to. - -On a side note, I was never too good at Maths, I don't know why. I just didn't like it because it felt too theorethical for me, and not as useful as I thought, -especially for programming. In High School I was taught a bit of the Pascal 3 programming language, and that turned out to be perhaps one of the most useful things I've ever studied. - -The first disappointment came from the courses that they setup for the first year: two BIG Maths-oriented exams in particular, and Chemistry(!). What Chemistry has to do with Computer Science remained a mystery to me, people claimed that we might be asked in the future to do some programs to help studying the structure of matter and doing -chemical analysis... yes, and following the same logic I should have been studying the structure of languages, because AI programs and translators would certainly become key applications in the future. - -Oddly enough, they made us just study Chemistry. - -"But next year will be better" -- I was thinking, after getting fairly poor results in the Maths exams -- "next year we'll study something more exciting". - -Economics. - -They made us study Economics because they think that it's useful to know something about finance and salaries, especially when you start working. That makes sense, to an extent, of course, and it was kind of interesting even. But still I didn't study anything really useful. - -This is a little lie, actually, because we actually had two programming exams (out of 17) in which they taught us a bit of C++, and THAT was interesting, and I even managed to get 30/30 out of the last one: I liked it. - -I actually remember when the teacher came in, and insisted for us to use a unix emulator (Cygwin) to compile our C++ programs: people thought that "emulators" were used for running games released for a gaming console on the PC, and what the hell was unix? It looks like - they said - a bad copy of DOS with more difficult commands. (No comment) - -I lived my years at University (three, counting this one which will be the last one) feeling superior to my friends for knowing more about computers but at the same time inferior to them when it came to exams: I didn't really like most of the subjects, especially some rather abstract mathematical models which COULD BE useful, but - let's -say it all - most people outside Italy don't really give a sh...illing about. What's the point in learning the demonstration of Cauchy theorem? Just use it maybe, and it would have a sense... No, they wanted you to study the demonstration and tell them about it, without missing a passage, which normally - for 2/3 of people at least - meant -"learn it by heart". - -Also, unlike in other countries, professors are more similar to Gods than clever people, apart from a few exceptions. Every professor decides how the students have to take the exams, some of them opt for having some _compitini_ (little tests) during the semester and then the average mark on all of them (normally two or three) represents the -exam's final mark: that's the best, probably, but it could also mean that people can cheat trying to copy from their collegues, etc. - -Normal, get on, it's Italy! - -Some professors might allow you to use the notes you took during classes, but that's often considered a bad thing because people can potentially copy from one another ("What's that piece of paper, is it your friend's?" - "No, it's part of my notes"), and they often do. On the other hand, if a professor doesn't allow notes to be used, students -normally do their best to sneak and use them anyway. - -This is Italy, after all, the place where everything can be sorted out if you're cunning enough. - -But why do some people cheat? Oh well, simply because either you devote 3 full years of your life to studying pointless crap and forgetting that you're wasting the best years of your existence, or you have to do something to pass 10 exams a year. Because we REALLY do take 10 exams a year. - -My girlfriend (who's English and living in Italy, by the way) told me that her brother wanted to study Computing at University but switched to Politics & Journalism because they wanted him to learn Java on the very first year. I've never been taught Java -- I had to learn it all by myself for my final thesis (see below) -- but instead I learnt a ton of demonstrations of theorems and mathematical models. Great, isn't it? - -_"But you knew you were going to take those exams, because they are publicly available before enrolling"._ - -That's true and it makes sense, and I probably should have chosen Computer Science instead of IT Engineering if only it was considered equally important. In Italy if you study Engineering you can (after taking yet another exam) become an Engineer, which -- unlike other countries -- is not a competent person who knows how to fix stuff and can solve problems. Rather, he's someone who got an important academic title who is treated like a demi-god because he knows (or should know) what's a differential system and how can be solved but -- sometimes -- doesn't know how to use it. - -But he's an Engineer, and he can find work when others can't. - -To explain this concept to non-Italian, I can summarize all this with the following: - -In Italy Academic (Skool) Titles rulez - You ain't got none? You ain't nothin' coz I got one and I own you. - -And that's that. In Italy knowledge is dead. (This is an exaggeration, but please try to get my point). - -If you need to be competent in something, when you're working you'll have to do a practical course (even paying for it yourself) if some "knowledge" is needed. If there's no risk that things can blow up, you can remain ignorant. - ] -] -section[ - @title[The Vanishing Cheshire Cat] - textile[ -Up to today I could leave with it, I knew that abroad the situation was hopefully different, but I started to cope with the fact that I would have got my B. Sc. and in addition I knew more stuff than some of the others who got the degree at the same time. A few months ago I had just a few exams left and I started going to the lab for my thesis project, with a friend of mine. - -At that point -- oddly enough -- I was told to develop an application in Java, using some libraries, and actually make something fully functional and (somewhat) useful. I couldn't believe it! I was happy on one side, and angry on the other, because NOBODY ever taught us about Java or about creating an useful application. - -The Ph.D. Student who was appointed to help us with the project told us: "That's the way it works, it's normal that you don't know Java, but you know a bit of C++, and now it's time to research". That was again very shocking: it was the first time that someone ever told me something like this, and in the end we agreed on the project. - -Despite the fact we had to implement some new features and test them relatively at the last minute, we succeeded in developing the program. In particular, I actually played an important part being the one who actually researched something on Java already, and knew more about programming. - -Oddly enough, my collegue would have graduated with a higher mark than me, even if he originally thought that "SSH" was nothing but a sound used to shut people up and that HTML was a proprietary standard introduced by Microsoft having something to do with web pages. If you're reading all this mate, don't get angry at me: I have nothing against you, I just hate the System, as usual. - -He still probabally thinks that POP3 is something like the name of a band and that a shell can be found only at the sea. Mate, it's not your fault, don't blame me if I say this, blame the System! - -I mean, I don't consider myself an expert, but at least I'm better than that. I met students, at uni, who haven't the faintest idea of what a sever was. And that's pretty sad, if you ask me. - -Let's now come to the end of this apparently endless flow of thoughts: I still had an exam to pass in order to get the degree. Such exam counts 3/180 of the whole stuff we had to study in these three years (it is literally quantified like this on paper), and it's about Digital Controls. Cool, you may think, but it actually means MORE mathematical models to solve complex(?) situations, more theorems and other crap, even if -- I admit -- I had to take exams worse than this one. - -I admit I constantly underestimated the exam and took it various times without passing it: "it's so small, I'll have to pass it eventually". - -This was just the way of thinking they made us adopt, nothing more, nothing less. - -I was quite busy testing my program and writing the thesis in this period, although we were literally told not to worry too much about it: "just google a bit on the net, copy and paste, and change some words if you feel guilty..." - -To the guy who told me to do so: it's just an example that is bad to read, but it's true, you can't deny it. I don't blame you, because you've really taught me a lot about working on "proper" projects (and this is NOT sarcastic, really), I blame the System. - -In the meantime I spent days running around here and there trying to sort out all the bureaucracy necessary to have all the papers ready for my degree, and I also talked to the professor who commissioned the project: he's by far the most helpful and altruistic professor I've ever met, and obviously offered his complete availability for helping -us for the preparation of the degree. - -I just needed to pass my last exam. It was the last one, not as complex as others I took, and this time I studied more than the previous times... - -I didn't pass it. - -I don't blame the professor, because probably he's the only one who's normal in the whole lot: he's like me, I think, because I suspect he's aware that abroad students don't cheat and professors are not "flexible" on marks. I got 12/30, and I didn't pass, that was it, I didn't know his subject enough and he didn't feel he had to help me to get the degree at all. And he's right. I can't blame him, but I DO blame such a "flexible" system which in the end is totally absurd. I learnt the hard way that I shouldn't have "trusted" the Italian Way, because it has flaws. - -Oddly enough, people who can't even connect a network cable get their B.Sc., and all I get after spending months learning useful things and developing is just a load of B.S. - -I learnt my lesson and I'll probably re-take the exam, pass it, and maybe get the degree: my collegue and friend just emailed me telling me that I HAVE to help him doing the missing chapters of the thesis because he can't write them, he's not good at writing stuff, and doesn't know what to write either. He'll get his B.Sc. on September 23rd, provided that I actually decide to help him. - -I hope people who read this can understand my frustration apart from blaming me for being "lazy" when it came to exams and expecting help when technically I didn't deserve it. I probably won't win the nobel prize or get rich like those two american students who own the most profitable Internet business ever conceivable. I'm not as special, and I don't deserve anything special, and I never dreamt about it. - -All I dreamt was being able to learn, and do something useful. It looks like it will remain just a dream, here in Italy. - ] -] -
@@ -1,118 +0,0 @@
------ -permalink: akelos-interview -filters_pre: -- redcloth -title: An Interview with the creator of the Akelos Framework -comments: [] - -date: 2007-07-19 05:02:00 +02:00 -tags: -- php -- rails -- cakephp -- frameworks -type: article -toc: true ------ -I "already":http://www.h3rald.com/blog/34 "covered":http://www.h3rald.com/blog/38 the Akelos PHP framework in the past, but for those who don't know it, Akelos seems to be one of the few "Rails-inspired PHP frameworks":http://www.h3rald.com/articles/rails-inspired-php-frameworks still worth mentioning, besides CakePHP and Symphony of course. - -I recently has a look at their recently-relaunched <a href="http://www.akelos.org/">community website</a> and I noticed this phrase: - -bq. "Being port of Ruby on Rails to PHP Akelos is also optimized for programmer happiness and sustainable productivity" - -Bermi Ferrer, Akelos creator, openly admits the framework is a port of Ruby on Rails to PHP, an attempt to help _"Ruby on Rails developers who need to code in PHP"_, among others. Of course Akelos is not Rails, simply because Ruby is (thank God for that!) not PHP, however I decided to find out more, and I asked Bermi a few questions, which he promptly answered.<h4><em>There are a lot of frameworks for PHP, perhaps too many: why did you decide to create Akelos rather than using one of the existing ones?</em></h4> - -<p>I started coding <a href="http://www.akelos.org/">Akelos</a> back in 2004 for our internal developments. At that time I only found very few frameworks out there like <a href="http://www.mojavi.org/">Mojavi</a> and <a href="http://ez.no/">eZ Publish</a>. These frameworks were not my ideal of an <a href="http://en.wikipedia.org/wiki/Agile_software_development">Agile development</a> environment, so I decided to brew my own solution.</p> - -<p>After reading <a href="http://www.martinfowler.com/books.html">Patterns of Enterprise Application Architecture</a> it was clear to me the kind of framework I wanted <a href="http://www.akelos.org/">Akelos</a> to become, so I started to implement some of the design patterns from the book into Akelos.</p> - -<p>During the summer of 2005 I had a look into other PHP frameworks like <a href="http://www.cakephp.org/">CakePHP</a>, <a href="http://phpontrax.com/">PHP on Trax</a>, and <a href="http://www.bennolan.com/biscuit/">Biscuit</a> but none of them was more complete or easier to use than what Akelos was already at that time.</p> - -<p>Then I used <a href="http://www.rubyonrails.org/">Rails</a> for one small personal project and immediately found that <a href="http://www.akelos.org/">Akelos</a> interfaces, conventions and philosophy were close to the Rails approach. <a href="http://api.rubyonrails.org/files/vendor/rails/activerecord/README.html">Rails ActiveRecord</a> implementation was impressive, better than mine and much much better than other existing PHP implementations, so I first ported the ActiveRecord code using <a href="http://adodb.sourceforge.net/">PHP AdoDB</a> as the database abstraction layer.</p> - -<p>After that point, whenever I had a problem to solve while coding my customers applications I turned to Rails and they usually had the most elegant solution available. So I did like the idea of digging into Rails code to learn more Ruby and bringing Rails magic to the PHP world. It also helped the fact that Rails inline documentation is excellent so it could be easily adapted for Akelos.</p> - - -<h4><em>What’s new since last time I posted about Akelos?</em></h4> - -<p>The biggest change is the direction that the project has taken. Until now we have not dedicated time to promote Akelos, we just used it for our internal projects and we have been adding features as needed without a fixed roadmap or advocacy.</p> - -<p>Now this has changed. More and more developers are using Akelos and contributing functionalities they miss from Rails. After some serious contribution proposals and many developers telling us how much they like Akelos, we decided to take the time to build a nice community site which includes <a href="http://forum.akelos.org/">forums</a>, a <a href="http://wiki.akelos.org/">wiki</a>, a new <a href="http://www.akelos.org/docs/tutorials/booklink">tutorial</a> and <a href="http://www.akelos.org/screencasts">a screen-cast</a>.</p> - -<p>There are also some improvements like:</p> - -<ul> -<li>Sintags, now accepts ruby-like calls to helper methods from the views.</li> -<li>Action Webservice, a component for creating and consuming Web Services easily.</li> -<li>Action Mailer, which allows you to receive and send (directly or in delayed mode) emails from within your application. (this is almost ready to ship)</li> -<li>Acts as tree behavior for Models.</li> -<li>Many performance improvements.</li> -<li>Many small contributions and bug fixes.</li> -<li>Code base reduced from 16MB to 9MB.</li> -</ul> - -<h4><em>From the new site, it seems that Akelos is - or aims to be - a port of Rails for PHP. Is that true? Do you aim to target Rails developers as possible users of the framework in situations in which “they have no choice” but to use PHP instead of Ruby?</em></h4> - -<p>Akelos has ported many Ruby on Rails components keeping their interfaces and functionality whenever it was feasible to port the Ruby code to PHP. It might be considered a port in the sense of functionality, but there are some Rails strengths that rely on the Ruby language and that are impossible to port to PHP. However, Ruby developers will find that Akelos is the PHP framework with is the closest to Rails.</p> - -<p>On the other hand, many PHP developers have moved to Ruby because PHP lacked a hyper-productive and fun-to-use framework like Rails for building complex applications. That is no longer the case, and those who excel at PHP can start being productive from day one by using Akelos. In this way, Akelos target users are those who already know PHP and need to build complex applications that can run on almost any cheap shared hosting using a solid foundation based on good coding practices and widely accepted conventions.</p> - -<h4><em>What Rails features are missing in Akelos?</em></h4> - -<p>A standalone webserver like WebBrick, RJS, has and belongs to many through associations, string/number/date extensions and Active Resource.</p> - -<p>Ruby-powered features like modules, runtime class overriding and blocks will never be available in Akelos.</p> - -<p>Scaffolds in Akelos work by generating code, I found quite useless to enable $scaffold = true; and have magic functionality that you can’t modify, so I decided not to invest my time on that one.</p> - -<h4><em>I noticed quite a few generators available for Akelos, do they work as a Rails developer may expect them to work?</em></h4> - -<p>The ones that are available do pretty much the same as in RoR.</p> - -<h4><em>How does Akelos compare to other similar PHP frameworks like, say, CakePHP? What features does Akelos offer which Cake doesn’t offer and vice-versa?</em></h4> - -<p>I’m not aware of Cake’s functionalities. At the time I started porting Rails my feelings about CakePHP were that they missed the simplicity point in favor of architectural discussions that lead to confusing code, but that was long ago.</p> - -<p>Akelos (and Rails) do not implement ACL like Cake does, as that is a business logic component that varies too much from one case to other, it has no place inside the framework.</p> - -<p>Akelos is built with internationalization in its core. You can even internationalize your Models by prefixing the column name with the locale.</p> - -<p>I think that Cake only has an act_as_tree behavior on models while Akelos has Tree, Nested Set, and List. Akelos also implements handy features from Rails like <a href="http://en.wikipedia.org/wiki/Optimistic_concurrency_control">optimistic locking</a>, <a href="http://www.martinfowler.com/eaaCatalog/lazyLoad.html">lazy loading</a>, <a href="http://www.martinfowler.com/eaaCatalog/singleTableInheritance.html">table inheritance</a>, counters, automatic transactions, really powerful validations, calculations…, and I think most of these advanced features are still missing on Cake, but maybe I'm wrong.</p> - -<h4><em>Did you include unit tests for all the framework classes?</em></h4> - -<p>The main components are fully unit tested, and no new code or patch gets into the trunk without unit tests.</p> - -<h4><em>Did you or someone do any performance test or benchmarks on Akelos already?</em></h4> - -<p>During the last month a lot of code was refactored to improve performance with the help of <a href="http://xdebug.org/">Xdebug</a>, <a href="http://kcachegrind.sourceforge.net/">Kcachegrind</a> and <a href="http://httpd.apache.org/docs/2.0/programs/ab.html">ab</a>. We significantly improved the performance in one of our most complex intranet applications, a <a href="http://www.basecamphq.com/">basecamp</a>-like system.</p> - -<p>Akelos also implements caching at many levels, so it’s very easy to increase performance as we did with a new CMS that can handle +200 requests per second using <a href="http://www.apache.org/">Apache</a> in a cheap shared server environment.</p> - -<h4><em>Why should a PHP developer choose Akelos over another PHP framework?</em></h4> - -<p><a href="http://www.akelos.org/docs/tutorials/booklink#mvc">Akelos MVC implementation</a> and <a href="http://www.akelos.org/docs/tutorials/booklink#workflow">workflow</a> are really easy to understand.</p> - -<p>In Akelos all the methods and interfaces are thoroughly selected, so whenever you need to do something you just need to type what you think. Default options are selected with care so you don’t need to set any configuration unless you want to modify the default behavior.</p> - -<p>Coding multilingual applications, building complex relationships within models, distributing databases changes within your development team, building Ajax interfaces, unit testing your code and many other common tasks for PHP developers are really simple to accomplish when using Akelos.</p> - -<p>Akelos is designed to work on PHP4 and PHP5 and it comes with an easy web installer you can adapt for your application. It has functions for working with files and directories in common situations when the web server runs as a different user.</p> - -<p>And one of the main reasons for choosing Akelos is that it makes coding fun and lets you focus on solving user problems rather than wasting your time in repetitive technical annoyances. When coding with other developers the <em>convention over configuration philosophy</em> helps everybody to understand exactly how everything works and where to find things.</p> - -<h4><em>Is there any website using Akelos already?</em></h4> - -<p>The <a href="http://www.thechemicalbrothers.com/">Chemical Brothers</a> new website which has been developed by <a href="http://www.3ev.com/">3rd Eye Vision (3ev)</a> is using Akelos. </p> - -<p>The <a href="http://www.akelos.org/">Akelos.org</a> site is running a CMS named Editam which we will release as Open Source in a near future.</p> - -<p>Some small websites like <a href="http://www.fundaciocaixacarlet.com/">Fundacio Caixa Carlet</a> and many intranet/extranet sites that we’ve been coding during the last 2 years.</p> - -<h4><em>What are your future plans for Akelos? Anything new on the way?</em></h4> - -<p>A new manual, and a better API interface are the main priorities right now.</p> - -<p>Continuing bringing Rails functionality as needed.</p> - -<p>Releasing our sister project Editam CMS which will help developers who need to add functionality on the top of a CMS using a solid MVC framework like Akelos.</p>
@@ -1,85 +0,0 @@
------ -permalink: apache2-upgrade -filters_pre: -- erb -- redcloth -title: Beware of sudden upgrades! -comments: -- :date: 2007-12-29 15:30:21 +01:00 - :author: Teju - :url: "" - :id: 179 - :body: "Your post saved my site....thanks! Bluehost generally rocks, but they've disappointed this time.\n\n\ - You're luckier than I am - my live chat guy (Dave) told me that the addhandler problem was my 'website design issue' and he couldn't help me. " -- :date: 2008-01-02 12:28:34 +01:00 - :author: t12345 - :url: "" - :id: 192 - :body: |- - My Live chat session was not that helpful. I have checked everything the support guy asked me to but instead of providing any suggestion he dumped a long message explaining how pointless was talking to me and closed the session. - I moved to VPS, no more Bluehost for me. -- :date: 2008-01-02 13:38:36 +01:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com/ - :id: 193 - :body: |- - Wow, looks like I was lucky! The guy I spoke to was smart enough to figure out the problem in less than 3 minutes, I must say. - - @t12345: Out of curiosity, which VPS host are you going for? -- :date: 2008-01-02 13:55:41 +01:00 - :author: t12345 - :url: "" - :id: 194 - :body: "slicehost.com\n\ - VPS is much better but it takes long time to install everything by yourself. Bluehost completely ignored my cries for help so I had no other choice. " -- :date: 2008-01-10 11:53:52 +01:00 - :author: J Cooper - :url: "" - :id: 197 - :body: Thank you! This saved me too! Stupid bluehost :( -- :date: 2008-02-27 08:16:07 +01:00 - :author: dfavre - :url: "" - :id: 210 - :body: |- - Thanks! This solved a long-standing problem that I've had with my site. - - My only problem with BH is the way they handle upgrades on their shared hosts. I've had my RoR app go offline several times due to upgrading the Rails version on my server without notice. -date: 2007-12-20 07:41:00 +01:00 -tags: -- website -- rails -type: article -toc: true ------ -Yesterday I got a rather annoying early Christmas present: when visiting my site, I noticed that the raw source code of my dispatch.fcgi file (yes, I'm on shared hosting with FastCGI, for now) was displayed "as it is" instead of being interpreted. - -After the initial moment of anger and stress (I immediately realized it was BlueHost's fault, not mine), I opened two tickets and went to bed, hoping to see everything solved in the morning. - -Unluckily it wasn't the case, so I posted on BlueHost forum trying to be as polite as possible complaining because the issue wasn't being dealt with. It turns out that for such issues you're supposed to use the "Live Chat" feature instead of the tickets, so that's what I did. - -After a quick chat with "Christian", it turns out that BlueHost decided to perform a server upgrade "silently" upgrading to Apache2, PHP5, MySQL4.1, etc. etc. -Cool, pity that nobody told me that! - -I was expecting some sort of PHP upgrade (not that I care like that), which was supposed to happen according to the last BlueHost newsletter: - -<blockquote> -<em>"To alleviate any issues in the future with certain scripts that only run on one -version of PHP we have developed the ability to run PHP4 and PHP5 on the same server -simultaneously. This will be rolled out to all users in the next couple of weeks. Some -servers already have this ability while most will see it in the next two weeks."</em> -</blockquote> - -But... hang on? Does it say anything about migrating to Apache2? I don't think so! What's worse, is that quite a few things changed with Apache2, in particular the way FastCGI handlers are declared: - -<% highlight :text do %> -# Apache 1.3: -AddHandler fastcgi-script .fcgi - -# Apache 2: -AddHandler fcgid-script .fcgi -<% end %> - -See? Different. This is due to the fact that "@mod_fcgid@ is used instead of @mod_fastcgi@ on Apache 2":http://wiki.rubyonrails.org/rails/pages/Debian+mod_fastcgi+Notes. - -The fix was easy, of course, and now my site is up and running again (and actually running faster)... but, I wonder, why the hell wasn't I informed? Is it acceptable? It sounds like I might end up on a VPS sooner than expected, unless BlueHost doesn't roll out some new exciting feature soon, as I think it might...
@@ -1,22 +0,0 @@
------ -permalink: back-from-holiday -filters_pre: -- redcloth -title: Back from holiday -comments: [] - -date: 2007-08-30 04:59:00 +02:00 -tags: -- personal -- website -- writing -type: article -toc: true ------ -I'm back. I was so eager to go on holiday that I didn't even bother writing a post about it, too bad. I actually when on holiday for a week but I thought I'd take three weeks off from my blog duties in favor of laziness and relax, but unfortunately my laptop decided to go wrong as well, so I didn't actually manage to relax that much. - -Now everything is fine. I still have to send in my laptop for assistance but it's usable at least, and I finally found the time (and the money) to buy a desktop PC. I always wanted to build my own, actually, but in the end I decided to opt for a pre-made Fujitsu Siemens, mainly for economic reasons and time constraints. I won't publish the specs, but it's alright for me and my fiancée. - -So what now? Well... the usual: more posts will soon be added to the "Simply On Rails":/tags/simplyonrails series, a Ruby-related article is on the way (it will be edited by the excellent "CyberArmy":http://www.cyberarmy.net Publication Editing Staff this time), I may venture in a site upgrade whenever they decide to release version 4.2 of Typo which is supposed to be imminent and I'll eventually complete another pet project of mine, but that will take more time... - -Stay tuned.
@@ -1,17 +1,9 @@
----- -:permalink: best-practices-tech-writers-editors-review -:title: "Book Review: Best Practices for Technical Writers and Editors" -:subtitle: Simply all the books your Documentation Team needs -:type: article -:intro: | - I've been working in Technical Communications for nearly seven years now, first and foremost Technical Writer and more recently as Documentation Manager. In other words, my work revolves around manuals and online helps, authoring tools and guidelines, documentation standards and… you get the picture. - - And yet, although I write articles and develop documentation tools in my free time as well, I rarely write about my job on this site. But when I was offered the opportunity to read and review Best Practices for Technical Writers and Editors, I just couldn't resist. -:tags: -- books -- review -- techcomm -:date: 2013-04-21 05:43:45.000000000 +01:00 +title: "Book Review: Best Practices for Technical Writers and Editors" +content-type: article +subtitle: "Simply all the books your Documentation Team needs" +timestamp: 1366519425 +tags: "books|review|techcomm" ----- I've been working in Technical Communications for nearly seven years now, first and foremost Technical Writer and more recently as Documentation Manager. In other words, my work revolves around manuals and online helps, authoring tools and guidelines, documentation standards and… you get the picture.@@ -87,6 +79,7 @@
In my case, my company adopted the Microsoft Style Guide long ago, and our documentation has been written following *their* best practices and *their* stylistic conventions. Surely consulting another style guide doesn't hurt, but it may potentially generate some confusion especially with neophite writers. Furthermore, if your company does not plan to adopt DITA or uses another standard like [DocBook](http://www.docbook.org/), you won't really need *DITA Best Practices* either… In short, this is a great bundle if you really need all the three books, but if only need one or two, it obviously makes more sense to just get what you need separately. +
@@ -1,115 +0,0 @@
------ -permalink: boolean-search -filters_pre: -- bbcode -title: Understanding Boolean Search -comments: [] - -date: 2005-12-10 12:57:16 +01:00 -tags: -- internet -- google -type: article -toc: true ------ -These days, it is necessary to use a search engines to find the information you want. When the World Wide Web was smaller, search engines weren't an essential websurfing tool, but once the Web started growing exponentially, and hosting literally billions of documents and files, even normal searches aren't enough to find important information, especially when it is not readily available. So, I'm going to show you a more powerful way to search.[b]Learning how to search[/b] - -Imagine yourself in the shoes of someone who has never used the Internet before. That's pretty rare nowadays, but it does happen. Take my dad, for example, who recently asked me something like "Where can I find a map of the Internet?". I explained that there wasn't any such thing because the Web is too dynamic to be mappable, and that's why we use search engines. - -I introduced him to Google [1], and he has since started to use search engines regularly. He didn't have much luck on his first few tries, but eventually he learned how to search properly. - -Searching the web is easy (just type in a word and hit enter), but finding stuff can be tricky, especially if you don't know enough about a subject to narrow your search down. Most people (including myself) tend to find what they're looking for only after multiple searches: we start with a general item, check the results, and restrict the next search based on what we learned from the previous one. While this is generally successful, every once in a while you will find yourself oging in circles. - -Let's look at a sample situation: I want to learn Ruby on Rails [2] and I want a free host to try it out. So, I go on Google and type something like: - -[i]ruby on rails free hosting[/i] - -I immediately find various blog entries referring to a project that aims to offer free hosting to try out the Ruby-based framework "Rails Playground". [3] It seems to be the perfect solution - they offer, completely free, enough space to try out Rails. It's a pity they recently decided to close new account registration, so now the whole thing is useless. - -Variants of the search query mentioned above bring up stuff related to Rails Playground. The project became so well-known that almost every Rails-related blog mentioned it at some point as the only place offering free hosting supporting Rails. Since it is useless now, is there a way to prevent Google (or other search engines) from displaying Rails Playground related results? Yes! - -You would need something like this: - -[i]rails free hosting -playground -railsplayground[/i] - -In this new query I excluded the words "playground" and "railsplayground" using a minus sign before them so I would find other results that didn't refer to the project. In the end, I didn't actually find any other free hosting that supported rails, but I did find the following: - -- a company which offers free rails hosting for testing purposes (until they officially launch their service) -- a guy who offered some space on his private server for testing rails (no longer available) - -Although I didn't find anything equivalent to Rails Playground, I didn't waste time either going in circles or scrolling through tons of pages trying to find something else. Actually, most people know how to exclude (or include) words in Google searches but they rarely do it. Furthermorte, most people don't know that there are many more search functions available on almost all the popular search engines. These functions, like the minus sign, are called Boolean operators. - - -[b]A few words about Boolean algebra: [/b] - -Boolean searches get their name from George Bool[4], the inventor of Boolean algebra[5], which is a particular algebraic structure involving three fundamental operators: AND, OR and NOT. If you attended any math class or course you should be already familiar with it. If not, here is a short summary of some of the concepts I will discuss in upcoming sections. - -Using Boolean searches (rather than Boolean algebra), the expressions A, B, C, etc. can be considered words, and "A <Boolean operator B" can be considered search queries. - -- A AND B: pages must contain both words A and B. -- A OR B: pages must contain either the word A or the word B -- NOT A: pages must not contain the word A - -Trivial. Now let's see some more examples: - -- (A OR B) AND (NOT C): here I used brackets to create nesting, which causes expressions within brackets to be carried out before the rest, so the query means: "search for pages containing either A or B but which do not contain C". - -- (A OR (C AND D)) AND (NOT (F OR G)): similar but more complex than the previous: "search for pages containing either A or both C and D. Additionally, only F or G can be present, or neither of them". - -In some applications, like electrical circuits, NOR, NAND and XOR operators are also used to express Not OR, Not AND and eXclusive OR. As for search engines, only some of them support the XOR operator. A XOR B means that pages can contain either A but not B or B but not B. - - -[b]Boolean search and Google[/b] - -After reading this you might want to try typing Boolean expressions like "(food AND for) AND (cats OR DOGS) AND (NOT birds)" into a search engine, but that won't work. A Boolean expression typed "as is" rarely works on a search engine (it isn't supported because it's considered to be not user friendly enough). Google in particular adopted a more intuitive way[6] of performing Boolean searches. - -For starters, you almost always perform a Boolean search when searching something on Google simply because they decided (like most major search engines have) to automatically include the AND operator unless OR is specified. - -Searching the phrase "food for dogs" actually corresponds to "food AND for AND dogs" (using the proper Boolean expression). Presumably, this was done to prevent the search engine from delivering too many (and usually inconsistent) results. The other possibility (the default in MySQL's FULLTEXT boolean search[7]) would be to use the OR operator by default. Thus, searching for "food for dogs" might deliver results about food for cats, other pets, or even food in general. - -To improve the precision of their searches, Google also implements automatic exclusion for common words (like "for" in the example below). However, on occasion, a common word needs to be included in a search. To be fair,usually you will find what you are looking for, even with common words excluded. Nevertheless, to force Google to include a word, just add a plus symbol before it, like "+for". - -Similarly, a minus in front of a word (rails free hosting -playground -railsplayground) forces Google to exclude a word from the search query: in other words, the minus sign is Google's version of the Boolean NOT operator. -In order to transform the Boolean expression that I used at the start of this chapter - (food AND for) AND (cats OR DOGS) AND (NOT birds) - into a proper query accepted by Google, I have to write: "food for" "cats OR dogs" -birds. The OR operator [i]must[/i] be specified, and anything in parentheses roughly corresponds to quotation marks because Google searches for the exact phrase enclosed in the quotation marks (also evaluating an OR operator, if present). - -The biggest limitation of Google when it comes to Boolean searches is the lack of support for nested expressions. Something like (food AND (NOT for)) AND (cats OR dogs) AND (NOT birds) cannot be translated into something like [i]"food -for" "cats OR dogs" -birds[/i] because Google will not evaluate the "-" operator if it is enclosed in quotation marks. Something more complex like: - -[i]((food AND for) AND (cats OR DOGS) AND (NOT birds)) OR ((stuff AND for) AND (goats OR horses) AND (NOT (cows OR bulls)))[/i] - -cannot be translated into a Google-friendly query. Normal people probably won't ever do that complicated a search, but you never know... - - -[b]All the other search engines, strategies and conclusions[/b] - -There are various articles (see [8][9][10]) about how Boolean search has been implemented in various major search engines and AltaVista[11], AlltheWeb[12] and MSN Search[13] seem to support Boolean search features better than Google. All of them support the standard Boolean operators, as well as the "+" and "-" symbols, but apparently only MSN Search[13] seems to support full Boolean search queries with nesting: I actually managed to execute my previous complex example: - -[i]((food AND for) AND (cats OR DOGS) AND (NOT birds)) OR ((stuff AND for) AND (goats OR horses) AND (NOT (cows OR bulls)))[/i] - -and I got some decent results. The only (understandable) exception is that I had to specify +for to have the word "for" included. - -Although Boolean search is useful, it is not the only way to get relevant results as quickly as possible. Additional thinking is required to prepare a query properly. In everyday life, you won't really use heavily nested queries, simply because other methods are more effective. If you're interested in learning how to search I'd recommend a very informative article available at Waikato University[14]. - -I found out that a mix between making multiple search attempts and using basic Boolean queries (word exclusion in particular) can deliver pertinent results fairly readily. Suppose you've heard something regarding a person named Halley who contributes to an IT-related community and that someone mentioned the word "kernel" when talking about him, and you remember that it wasn't referring to Linux. You could come up with something like: - -Halley kernel -Linux - -Et voila': Halley's CyberArmy Profile[15] appears as the first search result in Google! If you typed just [i]Halley[/i] you wouldn't have found the right one right away; you would probably get more information about the Halley's Comet or the astronomer Sir Edmund Halley. If you typed [i]kernel Halley[/i] you'd have found something about Kernel Halley on zZine first and then on CyberArmy lower down in the search results. - -Boolean search can be useful, but it must not be abused. Google's decision to implement only partial Boolean support without standard Boolean operation was probably the best choice to achieve both pertinent results and user-friendliness. - -[b]Notes and further resources[/b] -[1] Google Inc.: [url]http://www.google.com/[/url] -[2] Ruby on Rails framework: [url]http://www.rubyonrails.org/[/url] -[3] Ruby Playground: [url]http://www.railsplayground.com/[/url] -[4] George Bool, Wikipedia Page: [url]http://en.wikipedia.org/wiki/George_Boole[/url] -[5] Boolean Algebra, Wikipedia Page: [url]http://en.wikipedia.org/wiki/Boolean_algebra[/url] -[6] Google Help on Advanced Search: [url]http://www.google.com/help/refinesearch.html[/url] -[7] MySQL FULLTEXT boolean search: [url]http://dev.mysql.com/doc/mysql/en/fulltext-boolean.html[/url] -[8] Search engines that implement boolean search (outdated): [url]http://searchenginewatch.com/facts/article.php/2155991[/url] -[9] Boolean Searching on the Internet: [url]http://library.albany.edu/internet/boolean.html[/url] -[10] How to choose a search engine or directory: [url]http://library.albany.edu/internet/choose.html#logic[/url] -[11] AltaVista Special Search Terms: [url]http://www.altavista.com/help/search/syntax[/url] -[12] AlltheWeb Query Language: [url]http://alltheweb.com/help/faqs/query_language#2[/url] -[13] MSN Search: [url]http://search.msn.com/[/url] -[14] "The Assignment Process: Search Strategies": [url]http://www.waikato.ac.nz/library/learning/g_strategies.shtml[/url] -[15] Halley's CyberArmy Profile: [url]http://www.cyberarmy.net/~Halley/[/url]
@@ -1,16 +0,0 @@
------ -permalink: cakephp-first-bite -filters_pre: -- redcloth -title: "The CakePHP Framework: Your First Bite" -comments: [] - -date: 2006-07-14 04:03:00 +02:00 -tags: -- cakephp -- tutorial -- review -type: article -toc: true ------ -According to a recent study, PHP is one of the most popular programming languages in the world. In spite of this, PHP is often criticized for its inconsistent naming conventions, its lack of important features as compared to other languages (like namespaces) and its inherent disorganization. Furthermore, PHP is very easy to learn, and this has often led to the common misconception that most PHP developers are inexperienced and that their code is therefore prone to security vulnerabilities and exploits."Read the full article":http://www.sitepoint.com/article/application-development-cakephp on "SitePoint.com":http://www.sitepoint.com/
@@ -1,18 +0,0 @@
------ -permalink: cakephp-overview -filters_pre: -- redcloth -title: An overview of the CakePHP framework -comments: [] - -date: 2006-05-30 15:50:20 +02:00 -tags: -- cakephp -- review -- tutorial -type: article -toc: true ------ -_"There are many frameworks available for the PHP programming language nowadays, and especially a lot of RAD (Rapid Application Development) frameworks which aim to make web development faster, less tedious and more organized. CakePHP was one of the first frameworks to port the RAD philosophy - which became so popular after Ruby on Rails - to the PHP programming language. CakePHP v1.0 is now one of the most popular and intuitive solutions for PHP programming, let's discover why..."_ - -"Read the full article":http://hades.phparch.com/ceres/public/article/index.php/art::cakephp::overview on "php|architect article repository":http://hades.phparch.com/artemis/main/
@@ -1,443 +0,0 @@
------ -permalink: cakephp -filters_pre: -- bbcode -title: CakePHP - A 'tasty' solution for PHP programming -comments: -- :date: 2008-03-06 20:21:35 +01:00 - :author: Robin - :url: "" - :id: 213 - :body: |- - Wow that means me feel like using it. - - Thanks for such a detailed explanation. -date: 2005-12-08 17:03:39 +01:00 -tags: -- cakephp -- review -- frameworks -- webdevelopment -type: article -toc: true ------ -Web developers can either love or hate PHP, and one of the criticisms of this easy-to-use programming language which is repeated over and over on IRC, forums and blogs is that "PHP is disorganized". -Is this really true? If so, is there any possible way to write a PHP application in a logical and clean way? Read on...Every web developer has certainly heard of PHP. Some people like it and consider it a powerful and easy-to-use way to create complex websites or web applications, while others are convinced that it is merely a bad copy of Perl. Opinions are certainly mixed on the matter. - -One thing to keep in mind when reading criticisms of PHP is its origins, as therein lies the crux of the matter. PHP was created as a form interpreter, initially offering only a [i]very limited[/i] range of functionality. Its main purpose was to make life easier for web developers who wanted to do simple tasks, like manipulating form data. - -People liked the concept - PHP was free and it quickly became popular among developers. More functionality was added and continues to be added with each new release, and PHP is now one of the most popular and powerful programming languages available for web development.It is relatively easy to learn, compared to Perl, ASP, or JSP, and it can be used for almost anything[1]. - -The sheer simplicity of the language was most likely the cause of the enormous amount of exploits discovered through the years which earned PHP the label "[i]too dangerous to use in 'proper' applications[/i]". The danger, however, lies not in the language itself, but rather in the [i]way[/i] developers make use of the language: PHP's simplicity makes writing bad or exploitable code extremely easy. Furthermore, PHP's ability to be placed within any HTML page with the greatest of ease tempted developers to write ever-increasing amounts of 'spaghetti code', which by its very nature is neither organized nor clean code, and certainly does not help a developer learn how to write organized or clean code. - -These problems, however, can be solved. There are many ways to go about doing this, but the easiest, most effective way is to create a framework[2]. - - -[b]Bringing Order to Chaos[/b] - -After learning some PHP myself, I remember noticing that my applications were growing in a disorganized and uncontrollable manner. Things tended to be added at the last minute, and bugs were fixed and patched 'on the fly' wherever they occurred. PHP lacked the structure that is present in most other programming languages. I remember reading the word [i]framework[/i] for the first time not too long ago while I was downloading a Windows Update of the .NET framework[3]. That inspired me to start searching the Internet for a 'PHP framework'. That led me to an interesting blog entry[4] where a solution was proposed - a solution to [i]bring order to chaos[/i]: - -[quote] -[...] The answer is simple: create our own class library, some kind of framework, the PHP framework. The similar in many ways to that one which is already well known to Java or .NET programmers. We could set the standards, structure and main guidelines. [...] -[/quote] - -That blog post made me think about developing my own framework, until I noticed that there were many projects already in progress, and some in fact completed; the end result being a fully functional PHP framework. I read a lot about some of them[5], and abandoned the idea of developing my own, because as a good developer, I believe I should never re-invent the wheel. So I kept looking. I found Pear[6], although that's more a repository of PHP classes with a common standard than a framework, while I was looking for THE solution to developing many types of applications, not merely how to do one thing in particular. - -I came across a very promising project named Prado[7], which won the latest Zend contest, and was considered the best PHP5 application of the year. It is a masterpiece of coding and PHP5 usage, so I tried to learn it. I even developed a website with it. - -Prado lets the developer design the application without imposing any ready-made components, but I found its event-driven[8] approach neither easy to learn nor suitable for everyday web applications. I did not like the idea of having to code a reaction to every event (like a click on a button or different phases of page rendering): that is the approach that ASP takes, and at least in that respect, Prado seems to be inspired by the .NET framework. Event-driven programming is suitable for GUI development and desktop-based interfaces, but not for web applications. - -After trying Prado, I was still unsatisfied, so I once again began my search for a solution to improve my programming. My meanderings took me to Ruby on Rails[9], one of the most recent examples of technology hype on the Net. At the same time,to a certain extent, it is also a successful tool. - - -[b]The Rails Phenomenon[/b] - -[quote] -"Rails is a full-stack, open-source web framework in Ruby for writing real-world applications with joy and less code than most frameworks spend doing XML sit-ups." -[/quote] - -That sounded like what I was looking for, and I started reading more about it in the vast and varied help sections[10] available both on and off of the official site. The Rails team did an outstanding job promoting and marketing the framework, and also in providing comprehensive textual documentation (and even video tutorials) to help both beginners as well as experienced programmers get started with it. - -Briefly, Rails uses Ruby's object oriented programming, in conjunction with the MVC pattern and various automated scripts (generators), to help developers program their applications quickly and in a solid and organized way. However, as that is neither clear nor convincing, let's spend a few moments on the MVC Pattern[11], which will also be useful to understanding the following sections. - -MVC stands for [b]M[/b]odel [b]V[/b]iew [b]C[/b]ontroller: these three words enclose - and this is just a personal opinion - all the wisdom and philosophy of web development, describing - once again, in my opinion - the three most logical parts a web application [i]should[/i] be divided into to achieve code robustness, order and power, all at the same time. Let's look at what each of the component parts mean in detail: - -[list] -[*]Model: The model represents the very essence of the [i]information[/i] and [i]content[/i] of a web application. Imagine this as an object able to gather the information and content of your webpages from a particular resource, such as a database. The model is the only entity able to access resources. -[*]View: The view is an attempt to separate the most unstable part of an application: the user front-end. A view is only responsible for presenting the information that the Model gathered. A view does nothing but format the output, and can be compared to a template or report. In all MVC frameworks for web applications, only view files contain (X)HTML code, and mostly only that. They can therefore be changed [i]at any time[/i] without having to touch a single line of the business logic of your application. -[*]Controller: The controller is the 'brain' of the application. Consider it to be the only part of your program that can 'think' and manage the other parts. Controller files are the only ones able to [i]order[/i] the Model to gather information and then pass the information obtained to the view for display. -[/list] - -Although the MVC seems to make things more complicated, that is part of the objective. Since one of the advantages (and weaknesses) of PHP was its simplicity, the MVC adds complexity to bring more order and logic to the design process. The three entities are separated for just that reason, and trying to put them together can result in potential disasters, since it causes the whole pattern to fail. - -Coming back to Rails, I was quite impressed by the features it offered, but there was a small problem: the Ruby programming language itself. I experienced some difficulties in setting up the environment properly, and I also discovered that most standard hosting companies do not offer Ruby hosting plans as standard. Hosting issues aside, I would have had to learn Ruby in order to master Rails, and I really did not have the time for that: I had to develop a website quickly and easily, preferably with languages I already knew. - -After deciding to abandon Rails (for the moment, anyway), I was amazed by the number of projects in other programming languages that try to emulate the famous Ruby framework, to the point of being considered [i]clones[/i] or ports of it to another language. To my knowledge, the [i]Rails disease[/i] contaminated the following programming languages: - -[list] -[*]PHP[12] -[*]Python[13] -[*]Java [14] -[*]Perl [15] -[/list] - -I said [i]disease[/i] because Rails developers think that Ruby on Rails was made in Ruby for a reason, namely that Ruby offered some unique features that were not available in other languages. I will not delve into that topic here; more information is available[16] for those who are interested. However, suffice it to say that there are some Rails ports in PHP that were immediately attacked because of the fact or legend that the creator of Rails originally wanted to develop his framework in PHP and then switched to Ruby. Let's examine one of those PHP frameworks in detail. - - -[b]CakePHP: Just Another Rails Clone?[/b] - -I chose to learn CakePHP (or "Cake")[17] mainly because it offered more features than the other two PHP alternatives. It also seemed to be a more original and actively developed project. In particular, I'd like to quote one of CakePHP's developers, from when he introduced the framework in a comment to a blog post[16]: - -[quote] -"While it's difficult to copy Rails in PHP, it's quite possible to write an equivalent system. I like the terseness of Ruby code, but I need the structure that Rails provides, how it makes me organize my code into something sustainable. That's why I'm ripping off Rails in Cake." -[/quote] - -Cake's developers (bakers?) are developing their own framework which uses many principles of Ruby on Rails, revisited and re-proposed in an extremely flexible and easy to use PHP tool, rather than simply trying to port Rails to PHP. I also liked the fact that they bothered to choose an original name for their project, unlike others: there are too many "<insert language here>-on-Rails" frameworks, and while the whole "Rails" thing is innovative and catchy the first time, it loses its appeal quickly when people use the word everywhere just because it is "fashionable". - -Quoting from CakePHP's website: - -[quote] -"Cake is a rapid development framework for PHP which uses commonly known design patterns like ActiveRecord, Association Data Mapping, Front Controller and MVC. Our primary goal is to provide a structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss to flexibility." -[/quote] - -That sounds like the Holy Grail for PHP developers, and I must admit I'm quite impressed myself after using it on various little projects, but is it really all true? What are Cake's features? Are there any limitations? - - -[b]The Ingredients[/b] - -So what is Cake? In the previous sections, I introduced some general concepts and ideas common to Ruby on Rails and CakePHP, but nothing in particular was said about the structure of the framework itself. Let's now turn to that and discuss it in some detail, particularly as it pertains to Cake. - -The first thing to understand about Cake (and Rails as well) is that one of their aims was to avoid editing long and complex configuration files in order to run the environment. The approach in this sense is to use [i]conventions[/i] over [i]configuration[/i]. This may sound terribly restrictive, but in reality it proved to make things much simpler. After all, I said I wanted to use a framework because I needed a solid structure to base my applications on, not that I needed to be able to create and personalize my own structure and system. Cake uses some simple rules in order to run properly, and the easiest way to explain them is through Cake's directory structure, which represents the skeleton of every CakePHP application. - -/ ----app/ -------config/ -------controllers/ ----------components/ -------models/ -------plugins/ -------views/ ----------elements/ ----------errors/ ----------helpers/ ----------layouts/ ----------pages/ -------webroot/ ----------css/ ----------files/ ----------img/ ----------js/ ----cake/ -------config/ ----------inflections/ -------docs/ -------libs/ ----------controller/ ----------generator/ ----------model/ ----------view/ -------scripts/ ----tmp/ -------cache/ -------distro/ -------logs/ -------tests/ ----vendors/ - -I expanded only the first three levels of the tree, although there are more levels in the [i]/cake/[/i] directory. They won't be considered here simply because the [i]/cake/[/i] directory contains CakePHP's internal libraries, which normally will not be modified when developing an application. The [i]/tmp/[/i] directory also will not be elaborated upon either, because it is only used to store temporary files. However, the [i]/vendor/[/i] directory should contain third party scripts and libraries that you may want to use in your application, but they are not normally integrated with Cake's framework. 95% of your application will reside within the [i]/app/[/i] directory, which we therefore need to examine in greater detail. - -[u][i]/config/[/i][/u] -When I said that Cake strives to use conventions over configuration, I really meant it. This directory does not contain thousands of configuration files, only five very small ones. They represent the only items which [i]might[/i] need to be configured. - -[list] -[*]acl.ini.php: This file must be edited only if you plan to use Cake's default ACL (access control list) system for your application. It sets permissions for the application, so it should be used to list every group, user, and their respective rights. This can be useful for small sites with a few well known users, but for anything else, you should develop your own ACL or authentication system that relies on a database. -[*]core.php: This file can be edited to change some default options, such as the level of the error messages and notices that the application will output. This comes in very handy while developing an application. -[*]database.php.default: This should be renamed to database.php and edited if you plan to use any databases with Cake. The settings are fairly straightforward, and include the type of database used (mysql, postrgres, sqlite, or any other supported by the AdoDB library[18]), username, password and database name. -[*]paths.php: Unless you are very particular, you should leave this file alone. It tells Cake where to look for CSS files, images, controllers, etc. If you are planning to adopt Cake's directory structure - which is the most logical option - you can ignore this. -[*]routes.php: Following Rails' example, CakePHP features a "routing system" for user-friendly URLs. By default, your URLs will look like this: [i]http://sitename/controller-name/action-name/eventual/action/parameters[/i], which is a really nice way to organize a site, but you may want to change something if you have particular requirements. -[/list] - - -[u][i]Controllers[/i][/u] -As mentioned previously, a controller represents the "brain" of the MVC pattern, the part which controls what the other parts are doing. Imagine a controller like a section of your site: its name will be present on the address bar, and each of these sections will have a file named <something>_controller.php, and will also contain a class named SomethingController that extends the AppController class. This class will have some methods that correspond to some standard actions like [i]index[/i] (the default action called when you access the http://sitename/controller/ page) or other user-defined ones like [i]add[/i] or [i]list[/i] or [i]admin[/i], depending on the application. As a general rule, you want to add any 'business logic' you want to implement in your application in controllers - for example, calculations or a database query that produces a result. [i]Then[/i] once all the mess is done, the result (usually an array or a variable) is passed to the view (see [i]views[/i] below). - -If this is starting to sound too technical for you, I recommend reading a tutorial[19] available on the CakePHP website about creating a simple blog application. The tutorial will explain most of Cake's basics, including how to pass a variable from a Controller to the corresponding view [i]($this-set('variableNameInView', $variable))[/i] and other useful things. - -Recently [i]Components[/i] have been added to CakePHP, and quoting from the corresponding wiki page[20]: -[quote] -"Components are the preferred way to provide additional functionality to your controller. To make a component available you would add var $component = array('myComponent') inside of your controller's definition, add your file to the /app/controllers/components, name your class MyComponent, and create your methods." -[/quote] - - -[u][i]Models[/i][/u] -A model is an object able to access the database. In Cake's terms, that is any class extending the AppModel class. That class is directly under the [i]/cake/[/i] directory (along with the previously mentioned AppController class), and can be moved to the [i]/app/[/i] directory and modified if you want to add some particular site-wide behavior to it which will be inherited by all models extending it. - -In even simpler terms, you need to create a Model class for every table you're planning to use in your database. A convention in Cake says that database table names should be plural and that the corresponding model should be singular. If you use a table named 'mice', your model should be named 'mouse': Cake is smart enough to understand irregular plurals through an [i]Inflector[/i] class. - -Creating a model class for basic use is trivial: - - -class Post extends AppModel -{ - var $name = 'Post'; -} - - -Then you'll be able to access the model (and therefore the database) from a controller via simple instructions like $this->Post->findAll(). This instruction will query the database and return all records within the Posts table in your database. You can also perform more complex operations, and also specify SQL queries to execute, if you need to, but remeber that models can only be accessed through controllers! If you need some information stored in your database to be displayed on a view, execute the query from the controller and pass it to the view as per the MVC pattern. It can prevent you from cluttering views with business logic and thereby making code updates much harder. - - -[u][i]Views[/i][/u] -Views are used to present information gathered with a model and a controller to the public. They are mostly HTML pages with some PHP tags in them, prints of variables and maybe some [i]foreach[/i] loops. Nothing more than that should be used in a view! - -Views must be placed in this directory and obey the following conventions: - -1. They must be named after a controller's action to allow the controller to refer to a particular view automatically. The same view can be used by multiple controllers, but it must be either set manually or through a layout (see below). -2. Views referring to an action of a particular controller must be placed under a subfolder named after the controller. -3. All views must have a .thtml extension. - -Any site-wide view, like the site's template, must be placed under the [i]layouts[/i] subfolder. In particular, the default.thtml file in the folder represents the global template for your application: page titles and specific pages (views) will be invoked automatically by using $title_for_layout and $content_for_layout respectively. - -Similarly to what was said about components, [i]helpers[/i] can be used to extend views functionalities[20]: - -[quote] -"Helpers are all about the view. You know about the helpers in Cake, but you need a little bit more. You want to have your own methods to display formatted info. To achieve this, you need to add var $helpers = array('myHelper'). - -Now, throw your myhelper.php file into the /app/views/helpers/, create the class MyHelper, and $myHelper is available in the view." -[/quote] - -Cake comes with some very useful default helpers to create links and HTML tags, import JavaScript, create forms, and use AJAX code easily. Unlike most other frameworks, Cake neither has nor uses a third party template engine (like Smarty[21]) for views, but helpers can be used to achieve similar results more quickly than an engine can. - - -[u][i]Plugins[/i][/u] - -Plugins are user-developed enhancements for Cake. Unlike the files placed under the [i]vendor[/i] directory, a plugin is an application specifically made to be used within the CakePHP environment. At the moment this feature is still under development. - -[u][i]Webroot[/i][/u] - -If you read carefully what I wrote above about routes, you might be wondering if [i]every[/i] page must have a controller and a view in order to be displayed properly. What about images, JavaScript and CSS files? The answer is this directory: everything you place here will not be seen as part of the MVC-based environment; CSS files can be stored in the [i]/css[/i] folder, Javascript under [i]/js[/i], and so on. Additionally, some helpers can provide a easier way to access or display images, scripts, CSS, etc. - - -[u][i]Other Features[/i][/u] -Cake offers even more than this; the latest releases have introduced a few more Rails-inspired features: - -[list] -[*]Scaffolding: Do you want to test your application without spending time writing all the CRUD (Create, Read, Update, Delete) code? That's where the concept of scaffolding comes in: by setting a few variables in the right places[22], Cake will generate basic mechanisms to add, edit, list, and delete records in your database, along with all the associated view files. You won't have to code a single form, as everything will be generated automatically by the framework according to SQL field types. -[*]Bake: Another Rails-inspired feature revisited in PHP. Rails uses a set of scripts and in particular the [i]rake[/i] utility to instantaneously create the foundation for a Rails application with scaffolds already in place. CakePHP offers the same functionality through the [i]bake[/i] utility, which is currently available as either a batch file or a PHP script. -[*]ACL: As previously mentioned, Cake comes with a ready-made Access Control List (ACL) system, which can be extended and used to restrict particular areas of a Cake application to certain users or user groups. -[*]Compatibility: CakePHP is fully compatible with both PHP and PHP5. -[/list] - - -[b]Meet the Bakers[/b] - -After reading all these things about CakePHP and its framework, you may have some questions, or be curious about some aspect of the project. PHPNut and gwoo, two of CakePHP's creators and lead developers, offered to answer some questions exclusively for zZine readers. This interview took place on Oct. 26th, 2005, in #dev-cakephp on irc.freenode.org. - -[i][u]h3rald[/u]:[/i] Thanks to both of you for allowing me to interview you about your project, CakePHP. Where did the name come from, anyway? - -[i]PHPnut:[/i] The original project was started by Michal Tatarynowicz aka Pies (hence the name), and when I saw his release, last March, I decided to contact him. I told him that the company I own supports projects like Cake, and also that I was in the process of developing something along the same lines. - -[i][u]h3raLd[/u]:[/i] Is Cake released under the GPL? How many developers are helping out? - -[i]gwoo:[/i] Cake is released under the MIT license, and the development team is composed of me and PHPnut, plus four other contributors. Then there's the Documentation Team, currently 3-5 people. Documentation has to follow the releases, so it usually lags behind a bit: we made so many modifications in the recent release that the Doc Team has a lot to catch up on, but it's getting there. - -[i]PHPnut:[/i] With this release you will see that the docs are going to be much better. The code is very stable now, and hopefully very little changes on that. - -[i][u]h3raLd[/u]:[/i] Some people, at first glance, may think that Cake is a PHP port of Ruby on Rails. How true is that? What are the differences and similarities between these two frameworks? - -[i]PHPnut:[/i] Cake started as a port, but has evolved into something more: we discussed using the concepts that RoR offered and including them in a framework for users of PHP. I have used PHP for a number of years, and I am comfortable with it; this is where my passion is, and I think people who use Cake have those same passions as we developers do. - -[i][u]h3raLd[/u]:[/i] I read once that Rails was developed in Ruby because only Ruby can offer certain functionalities and features... - -[i]gwoo:[/i] I would disagree, and I think that is proven in what we have done: sure RoR has a built in server and some other nice things, but PHP is everywhere. - -[i][u]h3raLd[/u]:[/i] Some developers, especially Perl programmers, tend to consider PHP an "inferior" language sometimes. What do you think of that? - -[i]PHPnut:[/i] My name says what I think about them all. - -[i]gwoo:[/i] PHP is a web programming language; that's what it was designed for, and that's what it does best: It all boils down to what you are comfortable with. - -[i][u]h3raLd[/u]:[/i] Did you try any other PHP frameworks, MVC-based (Mojavi, for example), or event-driven, like Prado? What do you think about them? In what ways can Cake be better or worse? - -[i]gwoo:[/i] They are all so complex, in my opinion, and I tried nearly all of them. Cake breaks apart the MVC and handle the CRUD in a logical way, and Cake syntax is super easy to learn. - -[i][u]h3raLd[/u]:[/i] Ruby on Rails has been ported to various languages, including Java and Python. There are three PHP frameworks inspired by the famous Ruby project: Biscuit, PHP on Tracks and CakePHP. What do you think of that? Any chance of a merge? Did you have a look at them? - -[i]gwoo:[/i] You forgot Symfony[27], a PHP5-only port: I tried it but it seems much harder to learn than Cake. - -[i]PHPnut:[/i] I could be wrong, but I think these other projects are behind us in ease of use, in what the framework is capable of doing, and in features, not to mention community support. - -[i]gwoo:[/i] I tried all of the PHP ports of Ruby on Rails and none of them has the features, the community,or a lexicon as good as Cake's. - -[i][u]h3raLd[/u]:[/i] Why don't you consider CakePHP a port? In what way is it evolving from Rails? - -[i]PHPnut:[/i] Rails and CakePHP share a lot: MVC pattern, Active Record pattern...but we're not strictly following Rails, and we're able to think by ourselves. Recently we changed the directory structure, and in my opinion our is more functional than the Ruby on Rails one. - -[i][u]h3raLd[/u]:[/i] What can Cake be used for? What kind of projects? Are there any limitations? - -[i]gwoo:[/i] Personally I think that Cake is the most extensible framework out there for PHP: with components, helpers and vendor access you can do anything you want! - -[i]PHPnut:[/i] We are limited only by what a web server (generally Apache, but IIS seems to work as well) and a database can do. We may be limited by PHP itself, but we twist that in our own little sick ways sometimes. - -[i][u]h3raLd[/u]:[/i] Any thought about AJAX? I saw some nice demos made with Cake. What do you think of this new trend in web development? Some people consider it the future, while others are concerned about compatibility, and still others are relatively indifferent to it. What about you? - -[i]gwoo:[/i] AJAX can be very useful in creating an application, but should not be overused. People have become very comfortable with how the Web works:i f you start doing tons of drag and drop and no refreshes, users will feel lost in how to operate the site. - -[i][u]h3raLd[/u]:[/i] Thank you very much for your time, both of you. Is there anything you'd like to add to this interview? Something you'd like to say to users interested in trying out Cake? - -[i]PHPnut:[/i] Come and enjoy: we are here to help... - -[i]gwoo:[/i] ...And plan to be here for a very long time! - - -[b]Let's cook...[/b] - -One of the most positive things about CakePHP is that even though it is a fairly new project (most of the code is 100% useable already,but they still consider the projectto be in the 'alpha' stage), it's maintained by many dedicated developers and PHP enthusiasts. I was amazed to see how the whole documentation evolves and is quite literally updatedon a daily basis. -Anybody can contribute to the framework or simply test it and share their experiences. - -[u][i]CakePHP Wiki[/i][/u] - -Anybody can register an account for free and contribute tutorials and documentation to the new CakePHP Wiki[23]. This is currently the most up-to-date source for documentation files and tutorials. - -[u][i]CakePHP User Group[/i][/u] - -If you need assistance or you want to contact the Cake developers or other Cake users, you can post a message on their Google User Group[24]: people will reply with useful comments, usually on the same day, and the developers [i]do[/i] listen to user suggestions. - -[u][i]CakePHP IRC Channel[/i][/u] - -If you want to offer (or receive) real-time assistance, feel free to join #cakephp on FreeNode (irc.freenode.org). I went there disguised as a total newbie (it wasn't much of a stretch) and they helped me a lot, explaining basic concepts of the framework and pointing me to the right documentation files. - -[u][i]CakePHP Development[/i][/u] - -Experienced PHP developers are more than welcome to contribute to the project. People may be accepted to the core development team if they have sufficient knowledge and spare time, or alternatively,components or code can be submitted through the newly created CakeForge[24]. - - -[b]...Or Just Eat[/b] [small][i] by Marc Abramowitz[/i][/small] - -If you don't feel ready to contribute and you'd like to try out the framework first, it can be downloaded directly from the CakePHP site[25] as either a [i]release[/i] or a [i]nightly[/i] build: the zip file is less than 300KB. - -I wanted to include a [i]success story[/i] written by Marc Abramowitz, an experienced PHP programmer who decided to adopt CakePHP as a framework to use in a production environment: he persuaded his colleagues to use it and they all seem happy with it. He writes: - -[i]For the past few years, I've done quite a bit of work in PHP, working on production code that runs on a very high traffic web site. PHP has served us well, as it is easy to write and read, quite efficient, and easy to integrate with existing C++ code as the site grew. - -Lately, there has been a lot of buzz in the web development community about Ruby on Rails. Like many others, I took some interest in Ruby on Rails because I was intrigued by the apparent power and elegance of Ruby and because I wondered if a Model/View/Controller (MVC) framework like Rails would help enforce a more consistent code structure that would make the code easier to understand and maintain. Additionally, I wondered if an MVC framework would enable very rapid prototyping. - -Some people are very wary of frameworks that impose structure, as they like to have the freedom to do things however they want. However, there is a tradeoff between structure and flexibility. If you're working on a small team or a relatively small project, then you may not find structure to be very helpful; you may even find that it gets in your way. - -However, as teams and projects get larger, structure becomes more and more valuable, as it enforces consistent patterns of how to do things and rather than being something that limits, it in fact liberates, because it abstracts away the small details and allows us to therefore concentrate on the larger problem. Think of the lines that are painted on our roadways - although they add structure, we don't find them to be limiting. On the contrary, they help us to drive without worrying about crashing into each other at every moment - they free us from being concerned with small details so that we can concentrate on getting where we're going. - -Rapid prototyping appeals to me, because I find it helps me to better present my ideas for new apps and features. A mockup can only go so far - there is no substitute for a working prototype. When clients get their hands on a functional prototype, they get a better idea of what is possible and it forces them to clarify their requirements for the product. This results in a better dialogue between the developer and the client, which leads to better upfront decisions, more stable requirements, less stress, and a better product. - -So, Rails appealed to me not only because of the potentially valuable structure that it could add, but also because it could enable rapid prototyping. However, I knew that there was no chance of Rails being used for production code in my organization, because we run some very high traffic web sites that require the utmost in efficiency. We are also by and large a PHP shop. - -However, when my manager approached me and asked me to develop a database-backed internal tool, I thought of Rails again. I then considered the fact that I would probably someday have to hand this app off to someone else, and that someone would probably know PHP but not Ruby. Heck, even I had several years of experience with PHP (including writing some PHP extensions) but I had only done a little bit of reading about Ruby, and I also had no practical experience with it. - -Furthermore, with PHP I had access to a large number of PHP extensions that wrapped various internal libraries. So PHP was the natural choice. Ideally, I wanted to use PHP with a Rails-like MVC framework that would facilitate rapid development, and this is what led me to CakePHP. - -I began by downloading CakePHP 0.9.2 and following the sample tutorial that walks you through creating a simple blog application (note that at the time of this writing, the current version of Cake is now 0.10.0.1076, so some of the details of using Cake have changed). I was pleased to find that the process was quite similar to the process for Rails. One difference that I noted was that Rails tutorials always emphasize using scripts to generate models, controller, and scaffolds, whereas the Cake tutorial walked me through explicitly writing out all the code. I noticed that the Cake download came with a script called "bake" which looked like something that could potentially do some of the code generation, but since it wasn't mentioned in the tutorial, I chose not to use it. - -The process of creating a first application using the tutorial was quite easy. Here are the steps in brief (consult the tutorial for more details): - -1. Create the database table. Cake requires tables to have some extra -fields: - - id, an auto_increment primary key - - created, a datetime - - updated, a datetime -2. Configure Cake to access the database by editing the config/database.php file -3. Create a model class which extends AppModel (a Cake provided class) -4. Create a controller class which extends AppController (a Cake provided class) and write one or more controller methods -5. Create a view which is a PHP file with a .thtml extension and is meant to be mostly HTML with very little embedded PHP - typically just echoing of variables and some simple control structures like [i]foreach[/i]. -Cake also provides some simple convenience methods that write out certain HTML constructs for you. - -That's it! That alone is enough to create a basic but functional application. The tutorial goes on to show you how to add additional functionality to the blogging app. After that there's a shorter, more advanced tutorial that shows you how to add a few more things to the blogging app. - -Once I had gotten comfortable with Cake by following the tutorial, I proceeded to write my own application. Getting started was easy - I followed the same steps as in the tutorial to create my first table, model, controller, and views, then my second table, model, controller, and views. Then my app got a bit more complicated. I needed to have many-to-many relations and more elaborate queries than the default ones that Cake provides. I began to worry that Cake would break down here. I had heard people grumble that MVC frameworks like Rails and Cake were great for little toy apps that only do CRUD (Create, Read, Update, Delete), but that they couldn't handle complex queries using joins and the like. I poked around in the Cake source code and was pleased to find that there were nice lower level methods that allowed me to bypass the Cake defaults and do whatever custom queries I liked. For example, I wrote something like this in one of my models: - -function index(){ - return $this-findBySql( - "SELECT id, title, AVG(rating) avg_rating, MIN(rating) min_rating, MAX(rating) max_rating, COUNT(rating) num_ratings " . - "FROM ideas LEFT JOIN ratings ON ideas.id = -ratings.skill_id " . - "GROUP BY id " . - "ORDER BY title"); - } - - -So what I have is a model that does [i]not[/i] have a one-to-one mapping with a single table. It actually retrieves data from more than one table. - -Over time, I picked up a few more Cake concepts. For example, at some point we decided that every page of the app would have a similar look and feel with a particular masthead and logo, and all the pages in one section of the site would show tabs for all of the various views with the currently selected tab highlighted. At first, I just used the same code at the top of each of my views to display the masthead, logo, and tabs. This, of course, became a pain when I needed to change the layout, since I needed to make the same change in several different views. - -Then one day I realized that Cake had a concept of layouts, which are high level templates in [i]app/views/layouts[/i] that define the basic structure of pages. The individual views are just content that gets embedded in these high level layout templates. So I took the common masthead and logo, put it in my default layout, and removed it from the individual views. Now when I wanted to change the look of the masthead, I only had to do it in one place. For the tabs, I discovered the concept of elements. I placed the code for my tabs in [i]apps/views/elements/tabs.thtml[/i]. Then the tabs could be displayed in any template using: - -<?php echo $this-renderElement('tabs') ? - -Rather than stick the above statement in all of the many pages that were supposed to display tabs, I created a new layout in [i]apps/views/layouts/tabbed.thtml[/i] (which uses renderElement to render the tabs). Then I used - -$this-layout = "tabbed" - -in the controller to tell it to use the tabbed layout rather than the default (non-tabbed) layout. - -After a couple of days of work on this application, it was time to demo it to the VP, who was very impressed with what I was able to accomplish in such a short period of time. It was brought up that before I took on the project they had asked some other folks how long it would take them to build it in Java and they had said that it would take on the order of months what I had built in a couple of days. Morals of the story: - -1. Cake is very lightweight and productive -2. Cake might be very beneficial to your career - -Eventually, I was assigned to another project and my manager wanted me to transition my Cake project to another engineer, who was experienced with PHP but not with Cake. I sat down with the new engineer and in about 20 or 30 minutes of explanation and walking him through the code, -he felt ready to code. Not only did he feel that he knew enough to start working with the application, I could tell from the smile on his face that he was very impressed by the power and succinctness of Cake, which was the same reaction that I initially had. After a couple of days, I checked back with him and he had made a remarkable amount of progress on the application - there were a ton of new pages and features. - -So you see, Cake is a very productive environment. For a very small investment in the initial learning curve, you can get a significant increase in productivity. -[/i] - -[b]...And the icing?[/b] - -So that's what CakePHP is about. The project may only have just entered alpha stage, but the code is already very stable and useable, as PHPnut, gwoo and Marc said. So what's going to be included in the beta and stable releases? I researched a bit and asked the developers, and here's how Cake will probably evolve in the following months: - -[list] -[*]Cake's built-in [b]data-validation[/b] capabilities will be extended. A validator class - which already exists, by the way - will be extended to include more data types and expressions to be validated before being stored in a database. -[*]A new default [b]ACL system[/b] will be included and will support database access and .ini files as well. -[*]The [b]AJAX[/b] helper class and AJAX support will be enhanced, featuring unobtrusive JavaScript and ALA behavior[28]. -[*]Multiple applications with the same core files. In the future developers will be able to create their own Cake application which could be placed in the app/plugins directory and be seamlessly integrated and auto-linked to other Cake applications. -[/list] - -After learning all this about Cake and after trying it out myself, I really think that I have found the solution to all of my PHP web development problems. CakePHP can really help PHP developers a lot if properly used and understood. Still not convinced? Just try it out then, will you?[17] - - -[b]Notes and Related Resources[/b] - -Special thanks to: - -[list] -[*]Larry E. Masters aka PhpNut and Garrett J. Woodworth [b]gwoo[/b] for providing all the answers to my questions and contributing to create such a wonderful tool for the PHP community. -[*]Marc Abramowitz for sharing his experiences with the CakePHP framework and providing the content for the '...let's eat' section. -[/list] - -[small] -[1] PHP functions reference, [url]http://www.php.net/manual/en/funcref.php[/url] -[2] Framework, Wikipedia Page - [url]http://en.wikipedia.org/wiki/Framework[/url] -[3] .NET framework overview - [url]http://msdn.microsoft.com/netframework/technologyinfo/default.aspx[/url] -[4] "PHP Framework", delorian's blog, PHP Community - [url]http://www.phpcommunity.org/node/100[/url] -[5]Some popular PHP frameworks: Mojavi ([url]http://www.mojavi.org/[/url]), phpMVC ([url]http://www.phpmvc.net/[/url]), BlueShoes ([url]http://www.blueshoes.org/[/url]), Seagull ([url]http://seagull.phpkitchen.com/[/url]). -[6] PEAR - [url]http://pear.php.net/[/url] -[7] Prado - PHP Rapid Application Development Object-Oriented, [url]http://www.xisc.com/[/url] -[8] Event Driven Programming, Wikipedia Page - [url]http://en.wikipedia.org/w/index.php?title=Event_driven_programming[/url] -[9] Ruby on Rails, Official Page - [url]http://www.rubyonrails.org/[/url] -[10] Ruby on Rails, Doumentation - [url]http://documentation.rubyonrails.com/[/url] -[11] Model View Controller, Wikipedia Page - [url]http://en.wikipedia.org/w/index.php?title=Model-View-Controller[/url] -[12] PHP frameworks inspired by Rails: [url]http://phpontrax.com/[/url], [url]http://flinn.activeintra.net/biscuit/[/url], [url]http://www.cakephp.org/[/url] -[13]Python frameworks inspired by Rails: [url]http://fanery.sourceforge.net/[/url], [url]http://fanery.sourceforge.net/[/url], [url]http://subway.python-hosting.com/[/url] -[14]Java framework inspired by Rails: [url]https://trails.dev.java.net/[/url] -[15]Perl frameworks inspired by Rails: -[url]http://search.cpan.org/dist/Catalyst/lib/Catalyst/Manual/Intro.pod[/url], [url]http://perlonrails.org/index.php/Main_Page[/url] -[16] "Rails Clones: Blood suckers or useful drones?", RedHanded - [url]http://redhanded.hobix.com/cult/railsClonesBloodsuckersOrUsefulDrones.html[/url] -[17] CakePHP - Rails-inpired PHP framework, [url]http://www.cakephp.org/[/url] -[18] AdoDB, PHP Database Abstraction Layer - [url]http://adodb.sourceforge.net/[/url] -[19] CakePHP blog tutorial - [url]http://wiki.cakephp.org/tutorials:blog_tutorial_-_1[/url] -[20] Extending CakePHP - [url]http://wiki.cakephp.org/tutorials:extending_cake[/url] -[21] Smarty, PHP Template Engine - [url]http://smarty.php.net/[/url] -[22] Scaffolding a Blog, CakePHP Wiki - [url]http://wiki.cakephp.org/tutorials:scaffolding_a_blog[/url] -[23] CakePHP Wiki - [url]http://wiki.cakephp.org/[/url] -[24] CakePHP Google User Group - [url]http://groups.google.com/group/cake-php[/url] -[25] CakeForge - [url]http://cakeforge.org/[/url] -[26] CakePHP Downloads Page - [url]http://cakephp.org/downloads/[/url] -[27] Simfony, PHP5 framework - [url]http://www.symfony-project.com/[/url] -[28] ALA behavior - [url]http://bennolan.com/behaviour/[/url] -[/small]
@@ -1,17 +1,9 @@
----- -:permalink: choosing-the-right-blogging-platform -:title: Choosing the Right Blogging Platform -:subtitle: Or why I am still going to use Nanoc for the foreseeable future -:type: article -:intro: | - Every so often I wonder whether I should ditch my current blogging platform and try something new and shiny that just came out. Luckily, normally I come back to the same conclusion: I don't need to change anything, I just need to find the time and the will to write about something. - - This time is no different, but I thought I'd write a roundup of platforms, services, and tools that you can use for blogging or managing your personal sites. Note that this roundup is by no means exhaustive (like most roundups) -- it's just a quick overview of the pros and cons of a few systems that I've been researching on lately. Maybe it will be useful to someone. -:tags: -- writing -- internet -- webdevelopment -:date: 2014-04-27 15:03:46.000000000 +01:00 +title: "Choosing the Right Blogging Platform" +content-type: article +subtitle: "Or why I am still going to use Nanoc for the foreseeable future" +timestamp: 1398607426 +tags: "writing|internet|webdevelopment" ----- Every so often I wonder whether I should ditch my current blogging platform and try something new and shiny that just came out. Luckily, normally I come back to the same conclusion: I don't need to change anything, I just need to find the time and the will to write about something.@@ -303,3 +295,4 @@ [middleman]:http://middlemanapp.com/
[pelican]:http://blog.getpelican.com/ [disqus]:http://disqus.com/ [h3rald-nanoc]:/articles/take-back-your-site-with-nanoc/ +
@@ -1,46 +0,0 @@
------ -permalink: concatenative-020 -filters_pre: -- erb -- redcloth -title: Concatenative 0.2.0 released -comments: [] - -date: 2009-04-19 09:42:00 +02:00 -tags: -- ruby -- concatenative -type: article -toc: true ------ -Version 0.2.0. of the "Concatenative":/concatenative DSL has been "released":http://rubyforge.org/frs/?group_id=8068&release_id=33575. - -Here are some highlights from the changelog: - -* Implemented new combinators: -** binrec -** split -** twodip -** threedip -* Performance improvements: -** Stack is never copied. -** No symbol/string conversion when processing words. -* Pseudo-namespace support (e.g. :kernel/:while and :math/:factorial) -* ~ and <= operators to unquote and define words, respectively. -* No more uppercase words! - -Oddly enough, I realized that it is possible to defined methods named after reserved words like "while" or "if", so now all the concatenative words (combinators) in @kernel.rb@ are now defined _without_ a leading undersore. Similarly, there's no real need to use UPPERCASE symbols, so as a result, method lookup is significantly faster and will use less resources. - -Here's how the lookup works. Say you have the following program: - -<% highlight :ruby do %> -[[1,2,3], [4.5.6], :concat] -<% end %> - -If @:concat@ has been defined by the user (@:concat <= [...]@), that definition will be used, otherwise the @Concatenative::Kernel@ combinator @concat@ will be called. If you want to use the corresponding Ruby method, all you have to do is specifying the arity explicitly using the @|@ operator. - -To remove any ambiguity, it is now possible to specify the _namespace_ of a word explicitly, e.g. :kernel/:concat or :ruby/concat. The @/@ operator simply concatenates the two symbols together (@:"kernel/concat"@) and sets the namespace (@:kernel@) and name (@:concat@) of the new symbol. @:kernel@ and @:ruby@ are not meant to be used when defining new words, but you can use anything else you like, for example :math/:factorial or :local/:a, etc. - -As I pointed out in the "first article":/articles/concatenative-programming-in-ruby about concatenative, even with the new performance improvement a concatenative program still runs slower than a standard Ruby program, but at least now you won't run out of stack space (the _Ruby_ stack, in this case) too soon. - -If you have any issues to report, feature requests, etc., feel free to use "GitHub":http://github.com/h3rald/concatenative/issues to do so.
@@ -1,177 +0,0 @@
------ -permalink: concatenative-programming-in-ruby -filters_pre: -- erb -- redcloth -title: Concatenative programming in Ruby -comments: -- :date: - :author: Nick - :url: http://nruth.tumblr.com - :id: 2695 - :body: |- - This looks a lot like reverse polish notation, or similar ideas you'd see in SMC and SECD abstract machines. As for minimalism you might like to look at the pure lambda calculus as a 'minimal' programming language, it is to software what the Turing machine is to hardware. - - I have to say it struck me as counter-productive looking for a way to do such low level coding in a high level language like Ruby, but from a hobbyists point of view, or as a learning exercise, who cares :) - - Thanks for the links. -- :date: - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 2696 - :body: |- - It _is_ Reverse Polish Notation. Yes, normally concatenative languages are fairly low level, but not always: Factor is an example of modern, higher level concatenative language, for instance. - - Obviously you won't start using Concatenative for your next web application, but it could be a good way to look into concatenative programming. I'll try to improve performance a little bit, but unfortunately certain optimization won't be possible due to the very nature of Ruby (especially for what concerns recursion). -date: 2009-03-28 07:24:00 +01:00 -tags: -- ruby -- concatenative -- programming -type: article -toc: true ------ -A while ago, I sat down examining a few "alternative programming languages":http://www.h3rald.com/articles/10-programming-languages I might decide to learn someday. Each of those languages has its own peculiarities, and I didn't choose them randomly, I chose them based on their popularity, power, paradigm and how actively they are developed. - -I included "Factor":http://factorcode.org/ as the only representative for _concatenative programming_, an interesting way to write programs, but seldom used in "recent" languages (except for Factor and a few others). - -h3. The Joy of concatenative programming - -If you have absolutely no clue on what I'm talking about, you should consider looking at the home page for the "Joy Programming Language":http://www.latrobe.edu.au/philosophy/phimvt/joy.html, or maybe just the "overview":http://www.latrobe.edu.au/philosophy/phimvt/joy/j00ovr.html: it should be enough to tikle your curiosity. - -Joy is often considered the _canonical_ concatenative programming language: a basic —but working— implementation of a simple programming language to illustrate the fundamentals of concatenative programming. Joy looks like this: - -@2 3 + dup *@ - -This simple programs computes the sum of 2 and 3, pushes it on the stack, duplicates it (using the @dup@ combinator) and then multiplies the two values, obtaining 25 as a result. - -Let's slow down a second. Here's what happens, exactly: - -|_. Element entered |_. Stack contents| -| 2 | [2] | -| 3 | [2 3] | -| + | [5] | -| dup | [5 5] | -| * | [25] | - -Got it? Let's take it one step further. When you enter @dup@ and then @*@, you are effectively computing the square of a number, so we can define the function @square@ simply as: - -@square == dup *@ - -In Ruby, this would be: - -<% highlight :ruby do %> -def square(x) - x*x -end -<% end %> - -What's unusual here? — Simple, there are no _variables_ involved. Joy doesn't need any explicit variable or _formal parameters_ of any sort. - -There's more. Take the following code: - -@[1 2 3 4] [dup *] map@ - -The @map@ combinator expects a list and a _quoted program_ (the same one used to compute the square) and produces a new list containing the result of that program applied to each element of the original list. Basically the equivalent of: - -<% highlight :ruby do %> -[1,2,3,4].map { |e| e*e } -<% end %> - -Do you notice anything different? — Yes, Joy doesn't need blocks or lambdas either, it uses _quoted programs_ instead, which are nothing but slightly fancier lists (or arrays, as you like). - -Let's recap then, Joy doesn't need of: - -* lambda functions or blocks (quotation does the trick) -* explicit parameters (everything you need is on the stack) -* variable assignments (same as above) -* explicit recursion (provided you can use combinators like linrec, primrec, binrec, etc.) - -I would consider this one of the best examples of _programming minimalism_: an incredibly simple syntax, a very small set of rules, but a good deal of power. - -h3. Ruby objects on the stack - -After reading about Joy, I realized that implementing something similar in Ruby would be an interesting mini-project (let's say a week of lunch breaks) to understand more about concatenative programming. It would also be pointless, too: a stack-based programming language implemented on top of one of the most high-level programming languages you can find isn't going to be fast, is it? Nevertheless, it would still be interesting. - -Ruby offers everything you need to build a Joy-like DSL: - -* You can use arrays as ...arrays, but also as quoted programs, and to model the stack itself. -* You can use integers, strings, etc. as themselves -* You can use Symbols as functions (we'll get to this in a minute) - -If you think about the following expression in postfix notation: - -@2 2 +@ - -We _could_ translate it into infix notation (@2 + 2@), because Ruby supports it, but it's not general enough. What you could do is this though: - -<% highlight :ruby do %>2.send(:+, 2)<% end %> - -Message sending. I can see all the SmallTalk sympathizers drooling already. Well yes, In Ruby, _everything_ is an object, so _everything_ has a receiver and maybe some parameters. In other words, every method call can be reduced to the following syntax: - -<% highlight :ruby do %>receiver.send(method, *params)<% end %> - -In this way, it is safe to assume that everything has a receiver, which could be understood as a function parameter, and may have 0 or more parameters. Take the following then: - -<% highlight :ruby do %>[2, 2, :+]<% end %> - -It's not too different from Joy, and it's still Ruby code. All you have to do is use something to do the following: - -* Take an array, and examine each item: -** If it's an object (non-Symbol), then push it on top of the stack. -** If it's a Symbol, then do something different, i.e.: -*** Find its receiver and its parameters and call a method. -*** Manipulate something on the stack. - -In this case, we have to find :+'s receiver and its parameter and we're sorted. - -Unfortunately Ruby's @arity@ method isn't that reliable. For example: @"test".instance_method(:sub).arity@ returns -1, while it should return "2" to be useful. So we have no choice but find a way to pass the method's arity explicitly, in some cases. - -For example like this: - -<% highlight :ruby do %> -["Ciao, Fabio", /Ciao/, "Hello", :sub|2] -<% end %> - -If we define a | operator for the Symbol class, it's not too bad after all. It's heavy, but in this way we can use _any_ Ruby method in postfix notation. - -h3. Introducing the Concatenative Ruby DSL - -"Concatenative":/concatenative is a simple Ruby DSL for concatenative programming. You can write concatenative programs inside ordinary Ruby arrays and execute them by calling either @Array#execute@ or @Kernel#concatenate@, like this: - -<% highlight :ruby do %> -require 'concatenative' - -concatenate( - 10, - [0, :==], - [1, :+], - [:dup, 1, :-], - [:*], - :linrec - ) -<% end %> - -This simple program calculates the factorial of 10. As you can see, no matter how unusual it may look, it is perfectly valid Ruby code and it is equivalent to the following Joy code: - -<code> -10 [0 =] [1 +] [dup 1 -] [*] linrec -</code> - -Granted, Joy looks better, but that's the tradeoff for not writing a parser for Joy syntax, after all. -Looking at the code above, there are a few things to keep in mind when programming with Concatenative: - -* You are using Ruby arrays, so you have to use commas, at least -* functions, operators and combinators (let's just call them _words_) are available as Ruby symbols -* The arity of all Ruby infix operators has been already set to "1" by concatenative using the @set_arity@ method (which simply stores the arity of a particular symbol in a constant hash) -* You can specify explicit arities using the | operator (@:gsub|2@, or @:join|1@) -* Unless the arity has been specified, an arity of 0 is assumed. -* You can define your own concatenative functions using the @Symbol#<=@ method, which expects a quoted concatenative program. - -h3. Performance issues - -In its current form, Concatenative can be very slow, as show the "benchmarks" provided in the /examples folder, especially if you use recursive combinators. This is understandable because everything is implemented in pure Ruby, which is totally unsuitable for low level stuff. - -If you are interested, you are more than welcome to submit patches and suggestions to improve Concatenative's performance, or, if you feel brave enough, you could help me create a C extension instead: things would become much faster then. - -At any rate, feel free to play with it. You can get the source from "GitHub":http://github.com/h3rald/concatenative/tree/master, you can get the gem from "RubyForge":http://rubyforge.org/projects/concatenative/ and you can submit ticket through "GitHub":http://github.com/h3rald/concatenative/issues as well.
@@ -1,175 +0,0 @@
------ -permalink: design-patterns-in-ruby-review -filters_pre: -- redcloth -title: "Book Review: Design Patterns in Ruby" -comments: -- :date: 2008-04-16 02:54:41 +02:00 - :author: kint1@libero.it - :url: "" - :id: 231 - :body: "ASSOLUTAMENTE OT: se solo fossero arrivati prima a questo: http://logs.cakephp.nu/cakephp/chat.log.2008-04-16 forse cakephp sarebbe da un'altra parte. Ciao e buon lavoro" -date: 2008-04-11 05:41:00 +02:00 -tags: -- ruby -- review -- books -type: article -toc: true ------ - -I finally got my hands on a shiny new copy of _Design Patterns in Ruby[1]_. The book itself is not brand new and it was already widely praised by many different people online, so I wanted to take a look for myself. - -To my surprise, the book is a hardcover edition, which makes it look more professional and more durable than the average programming book[2]. It's also smaller and shorter than the average programming book[2] (340 pages), which makes it much easier to carry around and less intimidating to read. It's also _not_ meant to be a reference book, so it is actually pleasant an easy to read all in one go, as you'll soon find out. - -What is it about? — well, design patters in the Ruby language of course. But it's not the usual brainwash of programming theory you would expect by a typical book on patters, it has _plenty_ of examples of real code. When I say _real code_ I don't mean the usual Dog/Cat/Horse/<insert animal here> classes or juke-box simulations which don't work at all etc. etc., I mean actual snippets from well known Ruby applications, like RubyGems, FXRuby and, of course, Rails. -OK well, there's an exception perhaps: Russ _did_ include a few wild life simulations (ponds with frogs and similar), but it's only for your own good, and for the sake of tradition. - -Anyhow, let's start from the beginning... - -h3. Part I: Patters and Ruby - -The first part of the book serves as a general introduction to the other two parts. If you know the basics of both design patterns and Ruby, you can safely skip this as you won't find anything of overwhelming interest here. - -Personally I really liked *Chapter 1* though, "Building better Programs with Patterns", in which Russ does a great job in summarizing the original GoF book[3] into four points: - -!>/files/design_patterns_in_ruby.jpg! - -* _Separate our the things that change from those that stay the same._ -* _Program to an interface, not an implementation._ -* _Prefer composition over inheritance._ -* _Delegate, delegate, delegate._ - -Also, although it does not come from the Design Patterns book but from building real systems, the author adds the YAGNI (You Ain't Gonna Need It) principle[4] as a reminder to resist the temptation of implementing things which _may_ be needed _later on_, even if they are not needed right now. -The chapter ends with an outline of the patterns which will be presented throughout the book: 14 out of the original 23 patterns by the Gand of Four will be discussed in Part II and 3 bonus "Ruby-only" patterns will be examined in Part III, as a special treat. - -*Chapter 2* (_Getting started with Ruby_) feels perhaps a bit out of place. As others pointed out[5], why does a book on advanced Ruby programming techniques include a 35-page-long introduction on the Ruby language? The answer was given by Russ himself in an interview[6]: - -<blockquote> -"The reason that I included the introductory chapter about Ruby in there was to make the book accessible to folks with little or no Ruby background. -Now honestly, I don’t think that you could come to my book with no background in Ruby and walk away from it an expert Ruby programmer — it’s not really that kind of introductory book. -But I do think that someone with experience in other languages could read my book and come away knowing about Ruby, understanding what all the shouting is about." -</blockquote> - -I admit, I skipped this chapter during my first reading because I was eager to move on to the main part of the book, but I did read it afterwards (I had to write this review after all!). It's quite a nice introduction aimed at the average .NET/Java developer: Russ provides a step-by-step presentation of the main features of the language while holding the reader by hand when something weird or scary comes about: - -<blockquote> -The slightly strange-looking syntax in this code is actually a tip-off something deep and important: In Ruby, everythng — and I mean _everything_ — is an object. -</blockquote> - -Of course Chapter 2 won't turn you into a Ruby guru, but it definitely fulfills one of the author's goals: bringing developers of other languages closer to Ruby, and give them a tiny taste of how Ruby can be _wickedly powerful_. - -h3. Part II: Patterns in Ruby - -Part II constitutes the bulk of the book, describing 14 GoF patterns in 220 pages. The patterns covered are the following: - -* Template Method -* Strategy -* Observer -* Composite -* Iterator -* Command -* Adapter -* Proxy -* Decorator -* Singleton -* Factory Method -* Abstract Factory Method -* Builder -* Interpreter - -Why not covering all 23? Well, because to be honest, they are rarely used in Ruby. Furthermore, in some cases some of the ones examined in the book may feel a bit _unnatural_ to the average Rubyist: how many times did you ever think about using an External Iterator when @each@ is normally available as default internal iterator for any Array-like class? - -Each chapter in this part is devoted to a particular pattern and it is organized in more or less the same way, as outlined in the following sections. - -h4. Introduction and Personal Anecdotes - -Most chapters start with a personal anecdote involving the author: it may be a memory related to his first job at the local grocery store (Chapter 8), or about the day he decided to buy his son a bike (Chapter 14): - -<blockquote> -"I remember the day we bought my son his first bike." [...] I spent hours trying to pull together a minor junkiard of parts according to instructions that would have baffled the entire National Security Agency. As it turned out, picking the bike was the easy part: putting it together was the real challenge. -</blockquote> - -This was used to introduce the Builder pattern, and how to use it to configure objects which include different logical parts. -Personally I find this technique particularly useful to introduce a particular problem from a different, more mundane prospective instead of starting off with an abstract theorethical description of the pattern itself. -The anecdote is then followed by the description of the actual programming problem for which the specific pattern will be used. - -h4. Description of the Pattern and Initial Implementation - -An initial implementation of the pattern in Ruby will be provided more or less immediately after the introduction of each chapter, often accompanied by a simple UML diagram. -This implementation normally has quite a few conceptual flaws, which are then examined and corrected step-by-step the chapter to obtain a more "Ruby-friendly" solution. - -h4. A More Rubyfied Version of the Pattern - -The final implementation of each pattern is often very different from the initial attempt, and it may contain quite a lot of Ruby-specific code. The author does an excellent job in suggesting pattern implementations which often use blocks, @Proc@ objects or method redefinitions when needed, to make the code more succint and more readable at the same time, as all Ruby code should be. - -By doing so, even people who are still learning Ruby will understand how to use some very useful Ruby idioms which can be a bit difficult to grasp otherwise. - -h4. Using and Abusing <Pattern> - -Patterns are often overused and misused, and some people normally end up wondering if they should be used at all, after all. This section (present as a matter of fact in _every_ chapter of part II an III) examines the pitfalls of the pattern and the most common mistakes developer make when applying it. -It is by far the most useful section of each chapter, and that's what I'll be reading and re-reading every time I'm thinking about using a particular pattern in my code. As a matter of fact, these sections make you realize that _every_ pattern has its own inherent flaws and dangers, and that it is far from being a Silver Bullet. Even when you're _supposed_ to use a pattern to accomplish something, be aware that _something nasty_ can happen unless you're extra careful: this, perhaps, is the true Golden Rule conveyed throughout the whole book. - -h4. <Pattern>s in the Wild - -This is another very interesting section which is included in every chapter of part II and III. After describing what a pattern does, how it _can_ be used and how it _should_ be used, you'll finally find some interesting examples taken from real world applications. -By "real world application" I mean something like ActiveRecord[7] (Observer, Command, Adapter, ...), DRb[8] (Proxy) or FXRuby[9] (Composite), for example, i.e. important programs and libraries which are used in production environments. -Personally, I was really glad to find such examples in this book: it definitely helps you feeling design patterns as something more practical and useful than pure software architecture theories. - -h4. Wrapping it Up - -"Wrapping it Up" is the title of the last section of each chapter of Part II and III. It's basically a summary of the whole chapter and thus a useful way to recap the most important concepts. I found this section particularly useful when using the book as a design pattern reference, after reading it for the first time: this section provides a quick and essential overview of each pattern -- and the most important DOs and DON'Ts, too. - -h3. Part III: Patterns for Ruby - -By the time you get to Part III you'll definitely feel that Ruby can do _more_. Some of the Ruby implementation of certain patterns described in the book make extensive use of blocks and Proc objects, and the @method_missing@ method (although potentially dangerous unless extra care is taken) gives us a more immediate way to obtain delegation, for example when creating Proxies. -Also the fact that objects can be modified at runtime by adding and removing methods "as needed" seems quite an underused feature in traditional patterns, simply because those patterns were first conceived for languages which are very different from Ruby and are perhaps less _liberal_ than Ruby when it comes to dynamic features[10]. - -These particular Ruby features can be used (and abused, of course) to implement more Ruby-esque patterns, such as the ones included in this part of the book: - -* Internal Domain-Specific Languages -* Meta-Programming -* Convention Over Configuration - -These are just examples, of course some may complain because the Active Record or ORM pattern are missing, but this is understandable as it may be considered too specific compared to the others. -Each pattern is examined in detail, and I particularly like way the DSL pattern was described: Chapter 16 explains how to develop a simple but effective Ruby DSL from scratch for creating file backups. This can be particularly useful for people who never tried creating DSLs before, but also for developers who tried, but want to improve their skills. - -Chapter 18 (Convention Over Configuration) is sufficiently clear and detailed, perhaps even too much if you already know how Rails was developed (and all the hype which follwed). - -On the other hand, I was a bit disappointed by Chapter 17 (Meta-Programming). Maybe it's because I built up extremely high expectations about it while reading the rest of the book, but it just felt too short and not detailed enough for my liking. If I had to write such a chapter (which would have been actually very hard), I would have started from an excellent post by Ola Bini[11] which introduces _eleven_ meta-programming techniques, and built up content and examples from there. The only reason why -- I think -- Russ didn't do it in his book was length/balance constraint: a _properly detailed_ chapter about meta-programming in Ruby could easily take up over forty pages! - -h3. The Verdict - -As I said in the beginning: this is not meant to be a complete, in-depth, reference book on everything you may want to know about design patterns in Ruby. That's why, as a matter of fact, you can actually read this book all the way through without getting utterly bored. Russ uses an informal, yet appropriate style to turn potentially complex, theorethical computer science principles into easy-to-understand, _useful_ tools which can truly improve the way you code. - -The whole book flows very very nicely. I actually recommend reading this book in sequence, without skipping chapters, because each pattern is described in a way that is somehow linked to the following ones, so that you can understand and learn about the pros and cons of each one in a more natural and useful way. - -OK, I would have loved to see Part III as long as Part II, probably, but overall I'm very, very satisfied of what the book taught me. The only problem is that it also made me suddenly realize all the naive design mistakes I've been making when coding in Ruby, so I'll now feel compelled to fix at least some of them... - -Definitely a worthwhile read, I just hope to see more books like this, or even a second edition of this one soon! - -h3. Notes - -fn1. "Design Patterns in Ruby":http://www.informit.com/store/product.aspx?isbn=0321490452 by Russ Olsen, Addison Wesley Professional, 2007. - -fn2. Think of "Programming Ruby: The Pragmatic Programmer's Guide, 2nd Ed.":http://www.pragprog.com/titles/ruby by Dave Thomas with Chad Fowler and Andy Hunt, Pragmatic Programmers, 2004. - -fn3. "Design Patterns: Elements of Reusable Object-Oriented Software":http://www.informit.com/store/product.aspx?isbn=0201633612, by By Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides (a.k.a. the _Gang of Four_), Addison Wesley Professional, 1994. - -fn4. For more information on the YAGNI principle, visit "You're NOT gonna need it":http://www.xprogramming.com/Practices/PracNotNeed.html, Ronald E Jeffries. - -fn5. See "Design Patterns in Ruby, a review":http://on-ruby.blogspot.com/2007/12/design-patterns-in-ruby-review.html, _On Ruby_blog. - -fn6. See "Russ Olsen Interview":http://on-ruby.blogspot.com/2008/01/russ-olsen-interview.html, _On Ruby_blog. - -fn7. "ActiveRecord":http://ar.rubyonrails.com/ is an implementation of the Object-Relational Mapping (ORM) pattern used by the Ruby on Rails framework. - -fn8. Distributed Ruby, see "Intro to DRb":http://chadfowler.com/ruby/drb.html by Chad Fowler. - -fn9. "FXRuby":http://www.fxruby.org/, a graphical toolkit written in Ruby. - -fn10. This can be a good or bad thing depending on the way you look at it, and what you want to use the language for. The fact that Ruby is dynamically typed makes it easier to do things which are totally impossible in C++ or Java, but it also introduces a whole new set of potential dangers. - -fn11. "Ruby Metaprogramming Techniques":http://ola-bini.blogspot.com/2006/09/ruby-metaprogramming-techniques.html, Ola Bini: Programming Language Synchronicity. - -
@@ -1,120 +0,0 @@
------ -type: article -tags: -- review -- books -- ruby -permalink: distributed-programming-with-ruby-review -title: "Book Review: Distributed Programming with Ruby" -subtitle: Just what you need to get started with the right tools to build large and scalable applications in Ruby -toc: true -pdf: true -date: 2010-06-22 13:30:00.000000 +02:00 -intro: | - Back when I read <em>"Programming Ruby":http://www.pragprog.com/titles/ruby/programming-ruby</em> for the first time, I distinctly remember a short reference to "dRb":http://ruby-doc.org/stdlib/libdoc/drb/rdoc/index.html, the <strong>D</strong>istributed <strong>R</strong>u<strong>b</strong>y library included in the Standard Library. - - _"Cool!"_ -- I thought - - ...and that was pretty much it. The documentation for DRb was pretty much nonexistent (at the time), I didn't need it, so I pretty much forgot about it altogether until this book came out. ------ -&:[book|_Distributed Programming with Ruby_] -&:[author|Mark Bates] -&:[url|http://www.informit.com/store/product.aspx?isbn=0321638360] -&:[linkedbook|=>[&[url]|&[book]]] -&:[image|$[site.root]/img/pictures/distributed-programming-with-ruby.jpg] -&:[drb|=>[http://ruby-doc.org/stdlib/libdoc/drb/rdoc/index.html|DRb]] -&:[rinda|=>[http://ruby-doc.org/stdlib/libdoc/rinda/rdoc/index.html|Rinda]] -&:[pickaxe|=>[http://www.pragprog.com/titles/ruby/programming-ruby|_Programming Ruby_]] ---[--------------------------------------------------] -$[document.intro] -txt[ -<em>"Distributed Programming with Ruby":http://www.informit.com/store/product.aspx?isbn=0321638360</em> fills a very particular niche of the Ruby programming world: _distributed_ programming. Moreover, this book is somehow _justified_ by the scarce documentation on the subject: - -bq. Although these libraries \[DRb and rinda\] have been included with Ruby for many years now, they have received little or no attention (or documentation). This has led to a lot of FUD (fear, uncertainty, and doubt) about what these libraries can and cannot do, and when they are appropriate to use (if at all). - -p((((. -- Mark Bates, <em>"Distributed Programming with Ruby":http://www.informit.com/store/product.aspx?isbn=0321638360</em> - -But there's more. This book gives the reader a complete overview of what's out there, in the Ruby world, to support distributed programming. This includes quite a few gems and libraries besides the ones provided in the standard library. -] -section[ - @title[Overview] - - image[@style[float:right;]&[image]] - txt[ -The book is organized into four parts, each dealing with a particular set of Ruby libraries related to distributed programming. - -The author, "Mark Bates":http://www.metabates.com/, does a good job maintaining a sort of continuity in the examples throughout the book: you'll get accustomed to a _Logger_ class of some kind being punctually re-implemented more or less once per chapter, using a different library. - -Additionally, the libraries described in the book are ordered by "reverse preference" in each part of the book, so normally the libraries described later on in a part fix some of the shortcomings of the preceding ones. - ] - - - pt[I|Standard Library| -This part is the most important of all: it gives you the very basics about Distributed Programming and it describes the "building blocks" (\/&[drb] and &[rinda]) used in nearly all the other libraries described in the book. If you want you can skip some chapters in the other parts of the book, but make sure this part is crystal clear in your head before proceeding any further. - ] - pt[II|Third-Party Frameworks and Libraries| -If you read part I, you're probably a bit disappointed by DRb and Rinda and the amount of code you have to write to make simple things work in a distributed environment. The good news is that there are some Ruby gems out there that can make life simpler: -* =>[http://seattlerb.rubyforge.org/RingyDingy/|RingyDingy] -* =>[http://rufy.com/starfish/doc/|Starfish] -* =>[http://github.com/markbates/distribunaut|Distribunaut] -* =>[http://github.com/mperham/politics|Politics] - ] - pt[III|Distributed Message Queues| -In this part, the author introduces more in detail the concept of distribute message queues, and also the technologies and protocols available not only in the Ruby world but elsewhere. It focuses on two libraries: -* =>[http://rubyforge.org/projects/starling/|Starling], originally used by Twitter. -* =>[http://github.com/tmm1/amqp|AMQP], an implementation of the =>[http://www.amqp.org/|AMQP] protocol in Ruby, that can be used in conjunction with =>[http://www.rabbitmq.com/|RabbitMQ], an Erlang-based messaging system. - ] - pt[IV|Distributed Programming with Ruby on Rails| -The book ends somewhat abruptly with this last part that deals with distributed programming in the Rails world. It feels a bit like a last-minute addendum that I would have left for an appendix, nevertheless it briefly introduces =>[http://backgroundrb.rubyforge.org/|BackgrounDRb] and =>[http://github.com/tobi/delayed_job|Delayed Job]. - ] -] - -section[ - @title[Technical Analysis] - txt[ -Unlike other technical books, this one can (must?) be read sequentially. Generally each chapter focuses on a library, describes how to install it and use it, and highlights its pros and cons. Typically, the "cons" are solved in the following chapter by another library, and so on... - -The book is not meant to contain a full technical reference of each library, and it's quite short (256 pages), so you really get the most out of it if you read it all, from start to finish. I didn't realize there were so many different libraries in this particular niche of Ruby programming, and Mark does a good job demistifying some of them. - -One thing that really struck me out of this book is the focus on gems. We're not talking about _mainstream_ frameworks like Rails or Merb here, but rather of some rather specialized, smaller libraries that fullfill very specific tasks. Personally, I don't remember any other Ruby book doing this in the same way, and I was quite happy about it. - -On the other hand, gems are a double-edged sword: while some of them are really cool and well-maintained, others may disappear tomorrow with no prior notice. I was actually very surprised to see even some of the _quirks_ of these gems documented in the book: - -*p91*: _"Notice that we added client { } to the bottom of the server file. The reason for this appears to be a bug or flaw in the Starfish architecture."_ - -Really? Hasn't it be fixed now? Apparently not, that's the way it works, so no, you can't blame the author of the book for this. - ] - - section[ - @title[Formatting and Readability] - txt[ -As I pointed out earlier, this book is somehow meant to be read sequentially, and Mark does a good job making sure you don't get bored. Chapters and sections are quite short and there's a good text/code ratio: the examples are short and clear, and you don't have to try them out yourself, because most of the time the author does it for you. It's not infrequent for the author to tell you to run "wrong" code, but that's a great way to show you how to do the right thing right afterwards. - -Sidebars and boxes are used properly and they do provide actual value-added content: some information on a non-Ruby technology, some tips and tricks on how to run things smoothly, etc. On the other hand, one thing I couldn't stand were the _endnotes_. I must say I don't like endnotes at the best of times, but when they are pointless I just can't suffer them. Each chapter has its own fair share of endnotes, but unfortunately most of them are just URLs to Wikipedia pages or RubyForce/GitHub projects: I would have preferred the URLs inline with the rest of the text, but that's just me. - ] - ] - section[ - @title[Style and Contents] - txt[ -Mark has a nice, informal writing style. Exactly what you expect from a programming book nowadays, even if sometimes it feels a bit too informal: - -*p86*: _"I think I understand what Eric means by all that. However, that is as deep as the documentation goes on the subject. I have not been able to test what I think he means, so I won't make any grand promises about what the library can and cannot do in regards to expiring/renewing registrations."_ - -Although this is not something you'd see in a professional book everyday, it definitely helps to connect with the reader: Mark is one of us after all, even if he happens to have created quite a few "interesting projects":http://github.com/markbates, like the Mack framework, the Distribunaut library (which is also mentioned in his book, but in a very impartial way) and Configatron. From his book you understand that he's neither one of those rockstar developers nor one of those famous authors who just writes books for a living: he's a competent programmer who knows quite a bit about a particular, but relevant, niche of Ruby programming. - ] - ] -] - -section[ - @title[Final Thoughts] - txt[ -This is one of those books I'd like to see a second edition of. Partly because there are some relatively new gems which have been left out (\/=>[http://github.com/kwi/BrB|BrB], for example), partly because this is a rather hot topic at the moment, and different solutions are popping out at a rather extreme rate. - -The decision to write about mainly about gems was bold but necessary, and I'd really like to see more authors doing that, but with extra care. From reading this book, you understand that there's no _silver bullet_ when it comes to Distributed Programming, but rather different tools to do different jobs. - -The thing I missed the most? A proper conclusion to the book. You're left with two chapter about Rails-specific libraries which could have easily become appendixes, and nothing else. I would have liked a sort of "summing up" end chapter (re-)highlighting the pros and cons of each library and a sort of feature matrix. - -Nevertheless, it was well worth my time and it proved to be a very good resource to get started in writing distributed Ruby programs. - ] -] -
@@ -1,81 +0,0 @@
------ -permalink: efficient-ruby-code-shortcut-review -filters_pre: -- redcloth -title: "Book Review: Writing Efficient Ruby Code" -comments: -- :date: 2008-01-21 07:49:29 +01:00 - :author: Matthew Williams - :url: "" - :id: 204 - :body: Thanks for the review, I immediately headed over to the InformIT page and purchased the PDF but it still hasn't shown up in my account for download. Any idea how long I should be waiting for my copy? InformIT has the day off and I'm getting anxious. Especially compared to the Peepcode.com PDF's that get customized with your name in the footer on every page of the PDF and are delivered immediately. But it's been over an hour now and I'm starting to get anxious. Hopefully InformIT will pull through the PDF will show up in my account! -- :date: 2008-01-22 23:28:01 +01:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com/ - :id: 205 - :body: | - Matthew: if you can give me your email address (e.g. via your next comment, it won't be displayed publicly) I'll put you in contact with one of AW editor, and she'll try sorting out your problem. I'm sure you'll get your PDF pretty fast... - - -date: 2008-01-21 05:47:00 +01:00 -tags: -- ruby -- review -- books -type: article -toc: true ------ -!>/files/efficient_ruby_shortcut.jpeg! - -The second shortcut from Addison-Wesley Professional series I'm going to review is called "Writing Efficient Ruby Code":http://www.informit.com/store/product.aspx?isbn=0321540034. A very promising title, especially considering that this book is only 50 pages long. - -As usual, this shortcut can be intended as a sort of programmer-friendly detailed cheatsheet: like the other ones in this series it sports a monitor-friendly landscape layout and does not go to deep into the details unless strictly necessary to understand a particular concept. - - -h3. The Author - -"Dr. Stefan Kaes":http://railsexpress.de/blog/, the author, contributed a lot to improve Ruby on Rails' performance by refactoring portions of its core and try to "get maximum speed out of performance-critical sections of code". This short but interesting shortcut groups together a lot of performance tweaks, tips and tricks but also some "anti-patterns" Kaes was able to identify through his career as programming teacher Ruby software consultant and key Rails contributor. - -h3. The Contents - -Like with the previously-covered "Mongrel shortcut":/articles/mongrel-shortcut-review, _Writing Efficient Ruby Code_ always goes straight to the point when it comes to identify problems. The first one mentioned is of course that the _Ruby Interpreter is Slow_, most people are aware of that, due to their direct experience or because this argument is normally used by non-Rubyists to argue the language's usability in commercial projects. What you may not know is why that is so, and that's where the first part of this book comes into play. - -bq. _"Ruby is a highly dynamic language: Almost all language entities are first-class citizens in that they can be created, changed, and destroyed at runtime. This comprises classes, modules, methods, constants, and class and instance variables. Only local variables are second-class citizens in Ruby: Whether a name refers to a local variable is determined at parse time._ - -This makes Ruby extremely flexible, but also more complex. Whever you use a name to refer to an object, Ruby has to search for the object it refers to, and this costs in terms of processing time. - -As a matter of fact, one of the most recurring tips in the book to improve code performance is the following: - -p=. *Method calls are expensive, use variables directly when possible.* - -Keep this in mind: @self.something@ is _not_ the same as @@something@. The end result is the same, but the first way costs more in terms of performance because Ruby has to look up the method name. -Similarly, *local variables _should_ be introduced as a way to "cache" the result of method calls*. Often you may feel "guilty" to introduce a new variable and keep calling the same method over and over: this should definitely be avoided. - -Other useful tips include, for example: - -* Use syntax constructs (e.g. assignments) as expressinons. Use evaluation precedences. -* Use interpolated strings @"... #{string_variable}"@ (there's also no performance difference if constant strings are used between @"@ or @'@) -* Use operators which update the data structure without copying it (when possible). Use @update@ or @merge@ to update hashes. -* Iterating using @for a in A@ is slightly faster than performing the same iteration using @each@, (it is the opposite in Ruby 1.9 though) -* do not use @return@ unless you have to -* test in order of expected case frequency -* Use parallel assignment (@a, b = 5, 6@) where applicable -* If a module gets included in only one other class (or module), it’s preferable to open the class instead. - -I deliberately chose not to elaborate any further on the tips listed above because otherwise I'll give a big chunk of the contents of the book itself. If you know Ruby enough, you may already know why such reccommendations make sense, but if you don't, _Writing Efficient Ruby Code_ can be a short but very interesting read. - -h3. The Good - -For each of the 30 "coding patterns" (and consequent anti-patterns) described in the book, the author does a great job explaining the reasons of doing something in a particular way, also through examples and benchmarks, where possible. - -Furthermore, this _shortcut_ can really be useful to grasp a few difference between Ruby 1.8.5, 1.8.6 and 1.9 in terms of performance: not all the patters apply to all Ruby implementations, and when that's the case it is clearly stated. - -h3. The Bad - -My only complaint about the book is probably the lack of details and more "specialized" patterns. Everything (except for a few Rails-specific tips) normally apply to Ruby _as a whole_, without going deeply to analyze specific libraries or third-party gems. As a result, once you get the general idea, some of the patters may seem pretty obvious or a logic consequence of others. - -It is also true that this is meant to be a _shortcut_, not a comprehensive analysis on code optimization techniques which can be applied to specific cases: something like this would require much more than 50 pages! - -h3. The Bottom Line - -Read it, re-read a few bits of it to make sure you grasp the most important concepts, and keep its table of contents in front of you as a reminder when refactoring your code!
@@ -1,456 +0,0 @@
------ -subtitle: "An in-depth review of the Opera browser, with the eyes of a Firefox enthusiast" -popular: true -permalink: firefox-lovers-guide-to-opera -filters_pre: -- redcloth -title: A Firefox Lover's Guide to Opera -comments: -- :date: 2007-12-28 15:35:26 +01:00 - :author: cvm - :url: "" - :id: 173 - :body: "bq. \"No find as you type \xE2\x80\x93 Another big disappointment for who comes from Firefox or Safari: Opera still uses a dialog box to perform page searches.\"\r\n\ - \r\n\ - Try pressing \".\" - DOT and write word or try stable Opera (search ASyouTYPE field in View bar).\r\n\ - \r\n\ - UserJS: http://my.opera.com/community/forums/topic.dml?id=149014\r\n\ - \r\n\ - bq. \"No spell clecking \xE2\x80\x93 Again, both Firefox and Safari now offer text fields spell checking. Opera doesn\xE2\x80\x99t yet.\"\r\n\ - \r\n\ - Standard: http://www.opera.com/support/tutorials/opera/spellcheck/\r\n\ - \r\n\ - UserJS: http://my.opera.com/community/forums/topic.dml?id=182282\r\n" -- :date: 2007-12-28 15:46:11 +01:00 - :author: Fabio Cevasco - :url: "" - :id: 174 - :body: |- - Thanks cvm for pointing out two fixes to two of my "annoyances"! I updated the article accordingly. - - P.S.: The find as you type looks fantastic! I didn't know that, thanks! -- :date: 2007-12-28 16:36:12 +01:00 - :author: Ameer - :url: http://ameer1234567890.blogspot.com - :id: 175 - :body: "<blockquote>Auto-start widget? \xE2\x80\x93 This is a feature enhancement Opera Dev Team should consider: allow users to configure certain widgets to start automatically when Opera starts.</blockquote>\r\n\ - You can do that by keeping the required widgets open, when you close Opera and then using the \"Continue from last time\" start up option." -- :date: 2007-12-28 16:44:52 +01:00 - :author: Ameer - :url: http://ameer1234567890.blogspot.com - :id: 176 - :body: |- - Opera has a couple of ruler widgets which are equal to and sometimes even better than the firefox "Measure It" extension. - Have a look at <a href="http://widgets.opera.com/search/?order=name&q=ruler" target="_blank">here</a>. - - <blockquote>SearchStatus gives me Alexa Rank and Google Pagerank:</blockquote> - Does <a href="http://www.puzzleclub.ru/files/seobar/" target="_blank">this</a> serve the purpose? -- :date: 2007-12-29 02:35:47 +01:00 - :author: cvm - :url: "" - :id: 177 - :body: "\"Use keyboard shortcuts \xE2\x80\x93 Believe it or not, you can literally use Opera without a mouse.\"\r\n\ - Try PASTE&GO feature. Select and copy (CTRL+C) part of text or link and use PASTE&GO (CTRL+B). " -- :date: 2007-12-29 06:39:29 +01:00 - :author: cvm - :url: "" - :id: 178 - :body: Ops, Opera 9.5 PASTE&GO feature = CTRL+SHIFT+V but in keyboard preferences is possible select NEW (Opera 9.50.) keyboard setup or Opera 9.2 compatible setup. -- :date: 2007-12-29 19:36:16 +01:00 - :author: Ed - :url: "" - :id: 181 - :body: |- - I'm surprised that you knew about Sleipnir. - How did you know that? -- :date: 2007-12-30 01:05:27 +01:00 - :author: Ayush - :url: http://my.opera.com/AyushJ/blog/ - :id: 183 - :body: "bq. OK, I won\xE2\x80\x99t be able to access my favorite tags as quickly [...]\r\n\ - \r\n\ - You can add http://files.myopera.com/gcampos/files/delicious_panel/index.html to panel or your main del.icio.us page and turn on view>small screen\r\n\ - \r\n\ - bq. Additionally, Opera tabs [\xE2\x80\xA6]\r\n\ - \r\n\ - You can also arrange tabs (minimize/restore/cascade/tile etc.)\r\n\ - \r\n\ - bq. Default Browser Problems \xE2\x80\x93 Setting Opera as default browser on Windows doesn\xE2\x80\x99t seem to set the file icons accordingly (or worse, it resets them to the default file icon).\r\n\ - \r\n\ - That was a known bug in 9.5b (and is fixed in latest snapshots - http://my.opera.com/desktopteam/ )\r\n" -- :date: 2007-12-30 02:59:20 +01:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com/ - :id: 184 - :body: |- - @Ed: I've spent _a lot_ of time looking around for alternative Windows browsers. Sleipnir is very popular in Japan and actively developed, but not too stable. I also tried all the variants of K-Meleon and then I finally decided to give Opera another shot! - - @Ayush: Thanks but... I can't access the link for the del.icio.us panel (403 forbidden). Thanks for the other tips too! -- :date: 2007-12-30 03:51:12 +01:00 - :author: Ed - :url: "" - :id: 185 - :body: | - @Fabio - right, that's why I knew of Sleipnir. Though I didn't like it much for the idea of using Trident as it's HTML rendering engine. - I also have tried Opera a while back but it was kind of hard to get yourself used to the new way. I'm using Firefox now and I'm a heavy user of keyboard shortcut :P - -- :date: 2007-12-30 11:29:44 +01:00 - :author: Ayush - :url: http://my.opera.com/AyushJ/blog/ - :id: 186 - :body: "@Fabio: Copy the url and paste it in a new tab" -- :date: 2007-12-30 11:32:51 +01:00 - :author: Ayush - :url: http://my.opera.com/AyushJ/blog/ - :id: 187 - :body: Oh and my name is Ayush not Ajush -- :date: 2007-12-31 15:29:59 +01:00 - :author: alex - :url: "" - :id: 188 - :body: | - if you want to get some of the functionality of your firefox extensions in opera you should check this - - http://files.myopera.com/Rijk/blog/extensions.html - - - - -- :date: 2007-12-31 16:28:50 +01:00 - :author: bpm - :url: "" - :id: 189 - :body: "can also do inline search only on link anchors: comma instead of period." -- :date: 2008-01-01 08:45:22 +01:00 - :author: Nilotpal - :url: http://freewebsoftwarereviews.blogspot.com - :id: 190 - :body: "For me, Opera is better because it is more stable, faster, more standards compliant and more secure than any of the other browsers. Somehow, I think these basic features are neglected by other browsers for additional features. I do hope you will have a good time with Opera. You will feel irritated sometimes with web pages not displaying properly (though most times that is a problem with the web page and not the browser), and I think you will find the \"Open with\" option on right click useful. \r\n\ - And I think you missed one of the main uses of syncing, it synces with your Opera Mini on your mobile. This is a very useful feature for people like me who spend their commuting time reading feeds from their favorite sites and newspapers. " -- :date: 2008-01-01 14:07:25 +01:00 - :author: mabdul - :url: "" - :id: 191 - :body: "Hi,\r\n\ - was reading this block because your entry on operawatch!\r\n\ - \r\n\ - at first: Opera can't handle gopher / wais. that is imo a big problem (see http://my.opera.com/mabdul/blog/show.dml/1180506 )\r\n\ - \r\n\ - 2.) Opera has an built in html-\"notepad\" --> klick on source-code and edit it your way ;) --> click on \"apply changes\" and then voil\xC3\xA0 ;)\r\n\ - \r\n\ - ok, thats all for the first ;)\r\n\ - \r\n\ - after any changes send me an mail opera [ at ] mabdul [ dot ] de" -- :date: 2008-01-07 13:48:25 +01:00 - :author: DrLaunch - :url: http://my.opera.com/drlaunch/blog/ - :id: 196 - :body: |- - I couldn't find any eyedropper tools for Opera but I found one for Windows. I haven't tried it my self yet. Get it from http://www.tucows.com/preview/194554 - - There is a Web Developer Toolbar for Opera but I don't know how it compares to the Firefox one. Get it from http://operawiki.info/WebDevToolbar - - As for Gmail manager, you could use the built in Opera mail client or you could set up forwarding from one Gmail account to another. You can also send from several mail addresses in one Gmail account. - - You can use del.icio.us as fast as and as easily as in Firefox with Pocket. Pocket can import your bookmarks and post them to del.icio.us, all without leaving the page you're browsing. Skip the unsupported browser nonsense on the front page and just install the bookmarklet from http://thinkpocket.com/admin/jump/get_bookmarklet - - There have been ways to synchronise opera before Opera Link too. Opera's settings are stored in one folder, and a lot of these settings can be copied to other Opera installations. Osync can sync your Opera profile. Get it from http://sourceforge.net/projects/osync - - To fix the Google Reader plugin problems in Opera switch to list view and press Space to scroll and go to the next story. - - You can use some incompatible sites in Opera with Meadco's Neptune plugin or open the page in another browser. Check out the following buttons: http://operawiki.info/CustomButtons#webdev -- :date: 2008-01-10 17:08:45 +01:00 - :author: Doug - :url: "" - :id: 198 - :body: |- - Hi from Canada, - I'm looking for a replacement for dogear which I used in Firfox,it marks the spot you stopped reading so you can pick up the again later.I might have missed it,Opera has a lot of Widgets etc, any ideas? thanks. - flipper1@eastlink.ca -- :date: 2008-01-15 21:27:43 +01:00 - :author: GT500 - :url: http://www.gt500.org/ - :id: 201 - :body: You need to edit your spell check description. It doesn't make a whole lot of sense, and it doesn't link to OSpell ( http://opera.gt500.org/ospell/ ) -- :date: 2008-01-18 22:54:28 +01:00 - :author: anon - :url: "" - :id: 203 - :body: I'm not sure that Opera not being Open Source is such a bad thing. Sure we all want to see more great software become Open Source, but Opera has done a fantastic job of maintaining the position of being the most secure web browser as they are. You have to respect that. I'm not saying that it's not something I would like to see, but I'm also not wishing for it anytime soon. I'd rather see them continue their work as is and making the best web browser availible. -- :date: 2008-02-10 22:31:02 +01:00 - :author: social media helps improving alexa ranking? - :url: http://www.alexa.com/data/details/main?url=www.fortunehotels.in - :id: 209 - :body: Facebook.com is the online social networking site. Here people come into contact with each other and build up relations whether personal or http://www.alexa.com/data/details/main?url=www.fortunehotels.in business. -- :date: 2008-04-10 04:31:41 +02:00 - :author: martinlock - :url: "" - :id: 229 - :body: If you depend on link or site selling as a form of monetization you will definitely want to increase your http://www.alexa.com/data/details/main?url=www.fortunehotels.in Alexa rank, because it will increase your bargaining power when it comes to ad pricing. -- :date: 2008-06-27 17:47:46 +02:00 - :author: EroSan - :url: http://my.opera.com/erosan - :id: 244 - :body: |- - I'm using Opera 9.5, and i wanted to add a few things... - - There is a widget called multiGmail, that lets you monitor more than one gmail account, and easily access their inboxes (in case your girlfriend decides to switch to opera) ;) - - Also, the thing about not wanting to synch in your friends computer is cool. You can still access your bookmarks in html form if you log into my.opera.com - - Regards. -- :date: 2008-10-08 01:13:55 +02:00 - :author: murphy83@gmx.net - :url: "" - :id: 263 - :body: | - Hi, - - Great article - Indeed I've been using Opera since version 3.x in a time where "Netscape Navigator" was not activly developed anymore, IE coming up with many security problems and slow speed as well as non-standard conformance. - I got to it by an article in the ct magazine (see www.heise.de/ct/) as they listed the current status of browser development at this time - well I soon got kind of addicted to using it everyday - secure, fast, standard compliant and one big point - very open to feature-requests by the users. Customized search was discussed in forums already back in 2000 if I remember correctly. - -- :date: - :author: udkl_12_98 - :url: "" - :id: 1889 - :body: Firefox is a BIG hypeBox .... Opera rocks ... I've been an ardent Opera user and propogator since I took to the Internet.... -date: 2007-12-28 14:19:00 +01:00 -tags: -- browsers -- review -- opera -- firefox -type: article -toc: true -intro: | - I am a Firefox fan. I've been using Firefox since it was named "Firebird" and calling it "stable" was a big overstatement. Firefox dragged me out of Internet Explorer, and that was definitely one of its biggest achievements. - - Because I'm addicted to trying out new tools, however, I always kept testing new browsers I discovered here and there. K-Meleon, Flock, Sleipnir... When Safari came out for Windows I immediately installed it and used it for about 2 hours, only to realize that it wasn't – and it still isn't – usable at all, mainly due to sporadic crashes. ------ -bq. *Note:* This article can be considered a sequel for "An IE Lover's Guide to Firefox":http://www.h3rald.com/articles/ie-lovers-guide-to-firefox, which described Firefox through the eyes of an Internet Explorer fan. Similarly, this article describes Opera's features from the point of view of a user – myself – who has been using Firefox for years and is now considering another browser switch. - -I am a Firefox fan. I've been using Firefox since it was named "Firebird" and calling it "stable" was a big overstatement. Firefox dragged me out of Internet Explorer, and that was definitely one of its biggest achievements. - -Because I'm addicted to trying out new tools, however, I always kept testing new browsers I discovered here and there. K-Meleon, Flock, Sleipnir... When Safari came out for Windows I immediately installed it and used it for about 2 hours, only to realize that it wasn't – and it still isn't – usable at all, mainly due to sporadic crashes. - -!>/files/opera/fast.jpg! - -Similarly, I've been trying out "Opera":http://www.opera.com/ periodically, as new releases came out, but again it didn't seem to work for me. The biggest complaint I had was its inability to render heavily-ajaxified web sites properly. However, now it seems that the Opera Development Team made a big effort to improve the browser, and I was pleased to notice that "Opera 9.5b":http://www.opera.com/products/desktop/next/ ("Kestrel") doesn't seem to have this sort of problems at all.h3. Planning the Switch - -Firefox has extensions. Plenty of them actually. Some are useful, like the newish Del.icio.us one made by Yahoo, and also crappy ones you'll never use unless you want to have a fancy button on one of your over-cluttered toolbars which enables you to interface more easily with X or Y web services you hardly ever use. - -By contrast, Opera never attempted to add full-blown extension support to its venerable and yet very powerful browser. Instead, they kept building more and more features right into its core, being careful not to undermine the browser's two proverbial qualities: _speed_ and _stability_. What seemed a doomed philosophy at first turned out to be a good thingin the long run. More and more people are getting more and more worried about Firefox's memory issues and begin to _wander off_ to explore new things, exactly like I did. - -The first step to switch from Firefox to Opera is to reduce the number of Firefox extensions to the bare minimum you need: - -* Colorzilla -* Web Developer -* MeasureIt -* Search Status -* Gmail Manager -* Secure Login -* Del.icio.us - - How many extensions do you _actually_ use? Here's a short analysis for the ones above: - -* The first three are related to Web Development only, which means that I don't need them unless I'm doing some web-development tests during which I'm always going to have more than one browser open anyway. *UPDATE:* there are a few "Ruler":http://widgets.opera.com/search/?order=name&q=ruler widget which can be used instead of MeasureIt _(thanks *Ameer*)_. -* SearchStatus gives me Alexa Rank and Google Pagerank: I think I can survive without those for a while. *UPDATE:* if not, there's always "SEObar":http://www.puzzleclub.ru/files/seobar/ _(thanks *Ameer*)_. -* I use Gmail Manager because my girlfriend uses Gmail on the same computer. I'm switching to Opera and she'll stick with Firefox, so no problem there... -* Secure Login? It's called _Wand_ and it has been built-in into Opera for the last decade or so. -* Del.icio.us – OK, I won't be able to access my favorite tags as quickly, but "someone":http://erlang.no/2005/10/06/delicious-opera-buttons-2/ already came out with a few handy buttons for a better integration with the popular social bookmarking service. - -bq. *UPDATE:* For a list of the features provided by Firefox extensions which are included in Opera, see Rijk's "Top 150 Popular Firefox Extensions and Opera":http://files.myopera.com/Rijk/blog/extensions.html - -!>/files/opera/opera_navigation.png! - -Because I'm addicted to betas, I immediately downloaded "Opera Kestrel":http://www.opera.com/products/desktop/next/, i.e. Opera 9.50 beta 1. I never actually liked Opera's default theme, so I started looking around for *"new skins":http://my.opera.com/community/customize/skins/* (yes, eye-candy matters sometimes) and came across the Ximple series by "serafins":http://my.opera.com/community/customize/skins/author/?id=serafins. In particular, "2nd thought - Jimple":http://my.opera.com/community/customize/skins/info/?id=3835 quickly became my favorite. - -h3. Tabs - -_"Opera is the Web pioneer that delivered tabbed browsing in 2000 [...]"_ - -Opera tabs _feel_ stable and mature. Why? Probably because tabs are used more consistently to open not only web pages but also: - -* Downloads ("Transfers") -* RSS feeds -* Notes -* Emails -* Bookmarks -* Widget Management -* Contacts -* History -* Page Links - -I think this is a great feature and Firefox should definitely consider it: v3.0 comes with new download and bookmark managers, but they're still dialogs. Yes, I know, there's probably some extension which allows you to display them in the sidebar, but that's not the point: Opera brings more consistency to the overall browsing experience by using tabs wherever they should be used. - -Additionally, Opera tabs... - -* Can be rearranged, exactly like Firefox tabs -* Can be restored, if closed accidently, by re-opening them from the Trash can -* Can be locked, meaning that they can't be closed accidently -* Can be duplicated -* Can be saved in groups (sessions) and re-opened later on -* Can be restored if Opera crashes - - -h3. Speed Dial - -When you open Opera for the first time, and _whenever you open a new empty tab_ the Speed Dial is displayed. What I originally thought it was one of the most annoying things introduced by Opera 9 turned out to be actually useful and very addictive. - -The idea behind it is simple: - -* Show a default page with 9 slots -* Allow users to drag links to those slots -* Display preview of each slot (which is cached and can be updated by refreshing the page) -* Allow users to quickly access pages saved in the Speed Dial via CTRL+1 .. CTRL+9 or simply by clicking them. - - Simple and effective. Once you get going with it, you'll overcome the initial feeling of imposition and you'll use it more and more: I literally can't live without it now! - -h3. Right-click goodies - -While I was testing Opera, my girlfriend came along and asked me to look something up on "IMDB":http://www.imdb.com/. I normally had IMDB as custom search engine in Firefox, but unfortunately Opera didn't seem to allow users to customize their search engines... - -Totally wrong. Not only Opera lets you add any search engine to the search bar, it also does it with style and in the easiest way possible: - -!>/files/opera/search_engines.png! - -# Go to your search engine or any website with a search form -# Right click the search field -# Click *Create Search...* -# Specify a name and a keyword for your search engine - -Done. You'll now be able to search that particular site directly from the search bar. As you can see, I added Wikipedia, IMDB and even the "Unofficial Elder Scrolls Pages":http://www.uesp.net/wiki/Main_Page in this way. - -Besides creating searches, Opera lets you do a lot by right-clicking anywhere on a page: - -* *Block Content*: Right-click an empty area of any webpage and select *Block Content* to select which ads, scripts and images will be blocked from now on. -* *Validate*: Validate the HTML source code of the current page. -* *Translate*: Translate the current page into a foreign language with just two clicks. -* *Open With*: Open the current page in another browser installed on your system. -* *Edit Site Preferences...*: Choose to block/allow cookies and popups, identify Opera as another browser, set a different encoding, enable/disable scripts, images, flash, etc. These setting apply to the _current web site only_. -* View source, reload page every X seconds/minutes, send by email, etc. - -h3. Widgets - -"Opera Widgets":http://widgets.opera.com/ must not be considered as Opera's counterpart to Firefox extensions. Instead, Opera Widgets can be used as _poor man's Vista Gadgets_ on Windows XP, and they do their job most remarkably. - -I'm personally very fond of these ones: - -* "The Free Dictionary":http://widgets.opera.com/widget/3683/ -* "Wikipedia":http://widgets.opera.com/widget/8461/ -* "Calendar":http://widgets.opera.com/widget/3687/ -* "Whois Widget":http://widgets.opera.com/widget/4513/ -* "Currency Converter":http://widgets.opera.com/widget/3689/ -* "HTML Entities":http://widgets.opera.com/widget/5118/ -* "Twitter":http://widgets.opera.com/widget/7206/ - -They all have a common trait: they all behave as standalone programs, as they should be. The Wikipedia one, for example, can display Wikipedia entries directly inside the widget, unlike some others which just take you to Wikipedia, which is rather pointless. - -Although widgets live within Opera, they can be displayed "always behind", which means they'll be glued to your desktop and therefore will be visible whenever Opera and other applications are minimized. - -Needless to say that anyone brave enough can make widgets for Opera by following a simple "Widget Specification":http://dev.opera.com/articles/view/opera-widgets-specification-1-0/. - - -h3. Everything you can do on the Internet - -The term _browser_ applied to Opera is somehow misleading. Personally I would have called it something like "Internet Suite", because that would be a better choice due to the features it offers and the things it can do. - -Traditionally speaking, a web browser can be used to browse web pages, read feeds (sometimes) and navigate through FTP directories. Here's what Opera can handle: - -!>/files/opera/files.png! - -* Web Pages – No need of explanations here. -* FTP – FTP directories are listed very clearly, overriding server's settings with a more user-friendly layout. -* Local Files – This was a surprise for me. Typing @file://@ will automatically load a list of the drives currently available on your machine. Similarly, auto-completion for directory and file names is supported! I almost started using Opera as my everyday's file manager (almost). -* Feeds – An embedded feed reader can be used to subscribe to RSS/Atom feeds and view them... in a tab, of course. -* E-mails – Opera _is_ also a pretty decent email client. As of version 9.5 full IMAP support has been added, which definitely makes the difference. -* IRC – Opera can be used as an client, which works pretty well. Who needs ChatZilla anymore? -* News – Opera can be used to signup and retrieve news from newsgroups. -* Gopher/WAIS – Although not used everyday, Opera can handle these old protocols as well. -* BitTorrent Files – By default, Opera can act as a BitTorrent client as well, so you can just open .torrent files through the program and then monitor the download progress in the Transfers window, like with any other normal download. While this feature is indeed useful, it is also possible to "disable it":http://www.opera.com/support/search/view/840/ and still use your favorite BitTorrent client. - -h3. Portability and Synchronization - -Let's spend some words about _portability_. Sure, there are two "Portable Opera" apps out there, and they work well enough, but one thing I'd like about a web browser is the ability to synchronize my preferences, customizations, themes, passwords etc. etc. across multiple computers. -Firefox is "getting there":http://labs.mozilla.com/2007/12/introducing-weave/, although the technology is still at a very early stage. -Opera is doing something similar through "Opera Link":http://link.opera.com/, which allows you to synchronize automatically your Bookmarks, your Personal Bar and your Speed Dial. All you need is to get a (free) Opera account, login to Opera Link and enable the synchronization feature from the _File_ menu. From now on every time you'll modify your Speed Dial or Bookmarks, the changes will be sent to your Opera Link page. Similarly, whenever you start using opera somewhere else, if you login to your Opera Account you should be able to synchronize your Bookmarks and Speed Dial. - -Here are some thoughts on this type of technology: - -* It's not totally private yet. While it's great to be able to sync bookmarks and speed dial, the problems arise when you finish using your friend's computer for example... what happens to the bookmarks you just sync'ed? The only way to delete them would be to have your friend to log in to his Opera account and re-sync them. Not enough privacy for my liking. -* Your passwords, notes, widgets, etc. etc. cannot be synchronized yet, but that will hopefully be possible in near future. -* Sync'ing bookmarks is pointless for me. Although Opera still hopes to compete with Del.icio.us & Co., that will be very hard to achieve. I stopped using in-browser bookmarks long ago. -* Link seems and interesting feature considering that Opera is available on virtually _any operating system_ and a lot of different devices (mobile phones, Nintendo DS & Wii, ...). - -At any rate, it is still possible to "carry around" your personal opera settings by following the instructions provided on "this page":http://help.opera.com/Windows/9.50/en/backup.html which explains pretty much everything you need to know aboud Opera files and local storage. - -h3. Advanced Features - -Opera looks more "polished up" than Firefox in most cases. The superb usage of tabs for nearly everything is one example, and another one is the possibility to apply skins (themes) on-the-fly, without having to restart the browser. -Firefox _can_ do this via the "Personas":http://labs.mozilla.com/2007/12/personas-for-firefox/ extension, but Opera had this built-in for a long time. - -To apply a new skin: - -# Go to the "Skins Directory":http://my.opera.com/community/customize/skins/ -# Download a skin you like -# Opera will download and apply the skin immediately, *and it will ask you whether you want to keep it or not*. If you choose not to, it won't save it in your profile (very useful for quick previews). Neat. - -Another quality opera always excelled to is accessibility. Besides using the interface in the traditional way, it is also possible to: - -* *Use "mouse gestures":http://www.opera.com/products/desktop/mouse* – I wasn't a big fan of this until I bothered reading the excellent documentation Opera provided for them (which is significantly better than "the Firefox's equivalent":http://www.mousegestures.org/). It can be quite useful at times. -* *Use "keyboard shortcuts":http://www.opera.com/products/desktop/keyboard/* – Believe it or not, you can literally "use Opera without a mouse":http://www.opera.com/support/tutorials/nomouse/. -* *"Speak":http://www.opera.com/products/desktop/voice/ to it* – Opera's voice integration is getting better and better. Not only you can effectively "tell your browser what to do":http://www.opera.com/support/tutorials/voice/, you can also use the built-in text-to-speech function (Windows only) to have it read entire pages for you. It actually works quite well and it can parse punctuation well enough to apply the right intonation. Just for fun, I had it read it an Italian page... and it actually worked as expected: it was like listening to an American reading an Italian text using US pronuntiation! - -Finally, power users will be delighted of the way opera lets you hack the program settings, as you can: - -* Use *Tools > Quick Preferences* to block/unblock popups, cookies, Java applets, images, etc. -* Use *Tools > Advanced* to access detailed information concerning cookies, cache (it lists every image/object cached!), plug-ins, Wand passwords, etc. -* Use *Tools > Appearence...* to access and manage appearance-related settings, like skins, toolbars, buttons and panels -* Use *Tools > Preferences...* to access general preferences (all the rest) -* Type in *opera:config* to view and tweak Opera's internal settings, somehow like Firefox's about:config, but much cleaner and easier to use. -* Download the *"Developer Console":http://dev.opera.com/tools/* to have a simpler alternative to Firefox's Web Developer Toolbar extension, to view DOM elements, CSS and Javascript information. - -h3. Annoyances - -After using as main browser for a few weeks now, I can say that it's great but not perfect yet. It's very advanced, faster and more mature than any other browser, of course,but there are a few things which should be fixed or improved. - -In particular: - -* *It's not open source* – This may not matter to someone, but some people consider this an essential requirement for their browser, and that's why Firefox is their most obvious choice. Although Opera is free, it is proprietary software after all, which means is definitely not as open as you may want it to be. Personally I'm not too bothered, as I'm starting to think that too much openness may lead to too many unuseful and bloated extensions and make the program somehow "unpredictable" and heavy. -* -*No address bar search* – Amazingly, only Firefox seems to have this feature built-in. I'm referring to the ability to type whatever in the address bar to be redirected to the site returned by a Google's _I'm feeling lucky_ search. It is possible to emulate this feature in Opera by creating a custom search for _I'm Feeling Lucky_ and assign it a short keyword like "l". In this way, for example, typing in @l h3rald@ should lead you to this website. Not quite as immediate as in Firefox though.- -* -*No find as you type* – Another big disappointment for who comes from Firefox or Safari: Opera still uses a dialog box to perform page searches.- -* -*No spell clecking* – Again, both Firefox and Safari now offer text fields spell checking. Opera doesn't yet.- -* -*No HTML mail composer* – Opera's built-in mail client can display HTML emails but doesn't yet allow users to create them.- -* -*Auto-start widgets?* – This is a feature enhancement Opera Dev Team should consider: allow users to configure certain widgets to start automatically when Opera starts.- -* -*Google Reader + Flash problems* – Sometimes I experiences some scrolling problems when reading news which contain embedded flash movies on Google Reader.- -* *Corporate Sites* – Unfortunately some corporate web site do not support Opera or are not displayed correctly in Opera. Unfortunately there's nothing much we can do about it but trying to "mask" Opera as another browser (via *right-click > Edit Site Preferences...*) -* -*Default Browser Problems* – Setting Opera as default browser on Windows doesn't seem to set the file icons accordingly (or worse, it resets them to the default file icon).- - -*ERRATA:* - -* It is possible to have Opera to redirect you to the right after typing a few words in thr address bar by setting Google's "I'm feeling lucky" as default search engine _(thanks *EJ902*)_. -* Spell Checking is "supported":http://www.opera.com/support/tutorials/opera/spellcheck/ via GNU Aspell _(thanks *cvm*)_ or by using "Ospell":http://opera.gt500.org/ospell/ for inline spell checking _(thanks *Dava*)_. -* Find as you type can be triggered by pressing @.@ and typing _(thanks *cvm*)_. -* It is possible to auto-start widgets by saving a session with all your widget open and reloading it at every startup [CTRL+F12 > General > Startup > Continue saved sessions] _(thanks *Tamil* & *Ameer*)_. -* As of the "latest snapshot":http://my.opera.com/desktopteam/blog/, setting Opera as default browser and handler for HTML files doesn't cause any problems _thanks *Ayush*)_. - -h3. Conclusion - -Despite the few annoyances listed in the previous section, Opera 9.5 beta 1 truly impressed me. I was waiting for Opera to get better before switching and now I've not been using Firefox for a few weeks. -Although Opera offers a lot of features, there's still room for improvements, especially for what concerns integration with third party services: I would really like to see some sort of integration with del.icio.us, and that could be possible via widgets at least. -Regarding the new Opera Link feature, it looks very promising and a potential competitor for Mozilla Weave even though it will be used mainly to get more and more users to register to the Opera community (I did, at least), which is indeed very active any way. - -To conclude this article, which still barely scratches the surface of this very powerful application, I'd like to praise two more things about Opera: - -<span style="float:right; margin:3px;"> -<script type="text/javascript"> -digg_url = 'http://digg.com/software/A_Firefox_Lover_s_Guide_to_Opera'; -</script> -<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script> -</span> - -* Their website network, and in particular their truly excellent documentation knowledge base, which is very comprehensive of references, tutorials and interesting articles. I am a full time technical writer myself, and I've hardly ever come across better documentation. -* Their extensive "support and compliance to web standards":http://www.opera.com/docs/specs/, which makes Opera the most advanced browser ever made. - -If you've not tried Opera before, or if you've always dismissed it because "X browser is better", you may want to "give it another shot":http://www.opera.com/products/desktop/: for me it was definitely worthwhile!
@@ -1,41 +0,0 @@
------ -permalink: firefox3-revealed -filters_pre: -- redcloth -title: Firefox 3 Revealed -comments: [] - -date: 2008-06-17 04:46:00 +02:00 -tags: -- firefox -- browsers -- writing -- review -- books -type: article -toc: true ------ -When the SitePoint staff asked me to write an article summing up all the new features of Firefox 3, I gladly accepted: I wrote about Firefox before, and I thought it was just going to be a 2-3 hours job maximum. -After diving deeper into Firefox 3 development, reading dozens of different blogs and scouting Mozilla's web sites, I realized I was wrong: Firefox 3 introduced _a lot_ of new things, and keeping track of all of them, I admit, was quite a hard task. - -Nevertheless, I wrote the article and delivered it to SitePoint in time fore the release, but my editor "complained" that 8,300+ words was about 3 times over the minimum requirements for a feature article! -_"I don't really think that people can read the whole thing online"_ —, he said, and I somehow agreed. - -In the end, they decided to pack my "article" into a 30-pages PDF eBook which can be downloaded _absolutely free of charge_ from SitePoint web site as well, so here it is: - - -!</files/ff3-revealed.png! - -<br /><br /> -<span style="font-size: 1.5em;"> *"Firefox 3 Revealed":http://firefox.s3.sitepoint.com/ff3-revealed.zip* </span> - -If you prefer though, you can still read the article directly on SitePoint, "here":http://www.sitepoint.com/article/firefox-3-whats-new-whats-hot. - -This guide aims to give you a comprehensive overview of virtually _all_ the new features and improvements introduced by Firefox 3. - -<br /><br /> - -I would like to thank the whole SitePoint staff for giving me the opportunity to write this eBook, and in particular *"Matthew Magain":http://magain.com/blog/* for his help and support (and for creating the PDF on a Sunday evening!). -Additionally, I would also like to thank the Mozilla Development Team for their awesome job with Firefox 3 and everyone else who made this eBook possible. - -*Update:* Feel free to *"digg":http://digg.com/software/FireFox_3_Revealed_Free_ebook_from_SitePoint* this eBook!
@@ -1,48 +0,0 @@
------ -permalink: from-firefox-to-deer-park -filters_pre: -- bbcode -title: From Firefox to... Deer Park? -comments: [] - -date: 2005-11-20 19:05:30 +01:00 -tags: -- firefox -- browsers -- review -type: article -toc: true ------ -On May 31st 2005 the Mozilla Foundation silently released the Deer Park browser... no, it's not another name change for Firefox, but the codename they gave to the long-awaited 1.1 release of the free, famous, award-winning browser. Actually what we have for now is just a non-feature complete developer preview release of the new milestone, the first alpha release, in other words. The alpha release nevertheless seems to be fully functional and already useable.ETAs for the actual stable version are not given as usual, but we should expect another alpha candidate soon hopefully (They wrote "June" on the [url=http://www.mozilla.org/projects/firefox/]roadmap[/url], and we're already in July). Anyhow, this developer-oriented preview release can be [url=http://www.mozilla.org/projects/firefox/]downloaded[/url] and installed on Windows, Linux, and Mac OS X systems plus eventually, [url=http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/deerpark/alpha1/contrib/]Solaris and others[/url]. The decision of using the codename Deer Park instead of naming the release Firefox 1.1 alpha 1 or something of the like was made to avoid the havoc which occurred before the official release of Firefox 1.0 (which was codenamed "Phoenix" by the way,) when some websites offered a late preview release as the actual new version to download. -This time when you install and run the program the Firefox name has been substituted with Deer Park Alpha 1, so for example Deer Park is used in the browser's title bar and in the "About Deer Park Alpha 1" menu under "Help". The icon they used for this testing release is not even the usual firefox icon - it represents a plain blueish globe with no fox whatsoever. They have definitely put in effort this time to avoid confusion. - -Furthermore, when the browser is installed it does not overwrite your existing firefox installation, simply because (on windows) it's installed under a directory named "Deer Park Alpha 1". As a side note, the process is "firefox.exe", so you cannot run Firefox and Deer Park at the same time: you'll just open another window of the browser which is already running. Having said this, let us now examine what is new in this developer's release. - -[b]Fixed bugs[/b] -Like any other Firefox Release, Deer Park comes with several [url=http://www.squarefree.com/burningedge/releases/1.1a1.html]Bug Fixes[/url]. On the official changelog there are many bugs reported to be fixed, sometimes they are hardly noticeable but I experienced some of them when browsing some websites and also when creating applications myself: - -- [url=https://bugzilla.mozilla.org/show_bug.cgi?id=103638]103638[/url] - Targets with same name in different windows open in wrong window with javascript. -- [url=https://bugzilla.mozilla.org/show_bug.cgi?id=97283]97283[/url] - Mouse wheel scrolling does not work for elements such as div using overflow - auto or scroll. -- [url=https://bugzilla.mozilla.org/show_bug.cgi?id=251986]251986[/url] - Keyboard scrolling does not work for elements such as div using overflow - auto or scroll. -- [url=https://bugzilla.mozilla.org/show_bug.cgi?id=245829]245829[/url] - Download manager progress and title do not update correctly, wrong number of files and percentage after finishing or cancelling a download. - -These are in my opinion the most notable of the notable bugs which have been fixed in this release. I was particularly relieved when I noticed that all the issues regarding scrolling divs or similar elements had been resolved. Also, it must be noted that Deer Park seems overall slightly faster than Firefox 1.0.4 (Note: I also have a Pentium II, that is why I could notice that probably). The speed increase is most probably caused by the base for Deer Park being the Mozilla 1.8 Beta 2 code, which is almost 1 year newer than what used for Firefox 1.0. - - -[b]New Features[/b] -Although announced as a non-feature complete release, it comes with some new and useful features. The new feature list includes nothing too extraordinary for now and they are all somehow minor changes but they really do represent some improvements. Perhaps the two most obvious features introduced with this release are the [i][b]Sanitize Deer Park[/b][/i] and the [i][b]Report Broken Sites[/b][/i] functions. The first one is accessible through the Tools menu and basically allows you to delete the Browsing History, Saved Form Information, Saved Passwords, Download History, Cookies and Cache. Actually you can accomplish the same feat via Options->privacy, but with Sanitize you need just one click. Convenience I suppose? - -The Report Broken Sites feature is reachable via the Help menu and basically starts a short wizard that you can use when you notice something wrong with a website. You just have to provide the url of the website, the problem you experienced (Browser not supported, cannot login, plugin not installed, other content missing, odd behaviou, odd appearence, etc.) and an optional description and email and then the report will be submitted to the Mozilla Deleopers. - -Additional features included are also [i]Image thumbnails as Tab icons[/i], used when viewing a single image with firefox, not a shocking feature really but it's just a little (tiny) bit of eyecandy I guess. Furthermore, when you try accessing an FTP server anonymously and that server doesn't allow anonymous access, you are prompted to provide appropriate credentials (before it just didn't let you in)... another little improvement, which probably will not change your life, but it's nice to know that it's there. - -Another more notable feature only for linux and mac users though allows changes made in the Preferences menu to be applied immediately without restarting your system. Using Windows on the other hand, they improved the option interface with a more extensive use of tabbed interfaces, and also additional options concerning tabbed browsing (BUT in my opinion the [url=https://addons.mozilla.org/extensions/moreinfo.php?id=158&application=firefox]tabbrowser preferences[/url] extension is still necessary to achieve certain behaviours). - -Regarding something more technical, among the so-called developers features there are various improvements regarding CSS support, in particular CSS2's [url=http://www.w3.org/TR/CSS21/generate.html#quotes-specify]quotes nesting[/url] and even some new CSS3 (!) features, like [url=http://www.w3.org/TR/css3-multicol/]Multi-column layouts[/url] the :only-child selector, overflow-x and overflow-y properties and even various new [url=http://www.w3.org/TR/css3-ui/#cursor]cursors names[/url]. -Even more news from Mozilla suggests that Deer Park already supports some functions for resolution-independent scalable vector graphics (SVG 1.1), but it's obviously just experimental, and even scriptable bitmap drawing surface ([url=http://developer-test.mozilla.org/docs/Drawing_Graphics_with_Canvas]Canvas[/url]). Last but not least, even support for [url=http://www.w3.org/MarkUp/Forms/]Xforms[/url] is already possible in Deer Park through a [url=http://www.mozilla.org/projects/xforms/]related project/extension[/url]. - - -[b]Final Thoughs[/b] -Again the Mozilla Foundation - with this fully functional but yet incomplete preview release,- seem to be always improving their foundations, and always offering support for new technologies and features before others. This release has certainly seen some great improvements, on the other hand hardly anything changes for website developers with this release. It is without a doube that websites are viewed better with Deer Park than with Firefox 1.0.4 or IE or any other browser for that matter. But it is impossible to even start planning at this stage for the development of a publicly accessible site using for example SVG graphics and Xforms, as visitors using other browsers will not be able to see any "magic" in them, or perhaps even view them at all. - -It's always the same paradox of web-development: where on one side of the coin there are new and better products are available, a website/online application should be accessible by at least 90-95% of visitors. Unfortunately, for now though 90-95% of all internet users seem to use [i]some other product[/i] instead of Firefox or Deer Park... But that's another story!
@@ -1,120 +0,0 @@
------ -permalink: getting-started-with-lithium -filters_pre: -- erb -- redcloth -title: Getting Started with Lithium -date: 2009-10-27 15:48:00 +01:00 -tags: -- li3 -- php -- tutorial -type: article -toc: true -summary: A quick tutorial on how to get Lithium up and running, in five minutes or less. ------ - -So "Lithium":http://li3.rad-dev.org/ is now officially out, and its 0.1 release can be freely "downloaded":http://rad-dev.org/lithium/versions from the official web site or by cloning the Lithium git repository. The good news is that although not many web hosts offer PHP 5.3, you can try it out youself, locally and with minimum effort. - -h3. Requirements - -According to the "Lithium Wiki":http://rad-dev.org/wiki/guides/setup, to develop applications with Lithium you need: -* A web server, like Apache or IIS -* PHP 5.3.0 or higher -* Git (not required, but all example projects are on git repos, so you may as well have it) - -For this tutorial, more specifically, you need to download (just download, don't install anything!): -* "mongoose":http://code.google.com/p/mongoose/, a tiny, standalone (as _in one single file_), cross-platform web server. -* "PHP 5.3.0":http://www.php.net/downloads.php#v5, not the installer, the zip package. -* "Lithium":http://rad-dev.org/lithium/versions (version 0.1, at the time of writing) -* The "li3_docs plugin":http://rad-dev.org/li3_docs. - -To get the li3_docs plugin you need to "register":http://rad-dev.org/users/add on rad-dev.org, and clone the li3_docs git repository. If you don't have git installed or you don't want to read "another awesome tutorial":http://spheredev.org/wiki/Git_for_the_lazy to install it and learn how to use it, I'll save you the hassle and let you download the plugin from "here":/files/li3_docs.zip, for this time ony. - -**Note:** This tutorial assumes that you are on Windows. If you are not, some things may be a bit different depending on your platform. - -h3. Setting up the environment - -Choose a directory on your sistem (let's call it **D:\lithium_test** from now on). We'll do everything in here, and you can move it anywhere you like afterwards, even on a USB stick, without breaking anything. - -# Unzip Lithium in **D:\lithium_test**, so that it contains the following files and directories: -** app/ -** libraries/ -** .htaccess (it won't actually be used in this tutorial) -# Unzip PHP 5.3.0 somewhere and copy the following files to the **D:\lithium_test** folder: -** php5.dll -** php-cgi.exe -** php.ini (just get php.ini-development from the PHP package and rename it) -# Copy the mongoose-2.8.exe executable in **D:\lithium_test** and rename it to **mongoose.exe** for convenience. -# Create a **mongoose.conf** file containing the following lines: - -<% highlight :text do %> -cgi_interp php-cgi.exe -cgi_ext php -<% end %> - -If you did everything correctly, your **D:\lithium_test** directory should contain the following: -* app\ -* libraries\ -* .htaccess -* mongoose.exe -* mongoose.conf -* php-cgi.exe -* php.ini -* php5.dll - -h3. Running Lithium - -Double click **mongoose.exe** and point your browser of choice to "http://localhost:8080/app/webroot/index.php":http://localhost:8080/app/webroot/index.php. You should see the Lithium temporary homepage (yes, I expected something fancier too): - -!/img/pictures/lithium/temp_homepage.png! - -Now, let's see if we can get the li3_docs plugin running as well: - -# Unzip **li3_docs.zip** and copy the **li3_docs** folder in **D:\lithium_test\app\libraries\plugins**. -# Open **D:\lithium_test\app\config\bootstrap.php** and add the line: @Libraries::add('plugin', 'li3_docs');@ at the end. I actually found this commented out already (line 80). - -Go to "http://localhost:8080/app/webroot/index.php?url=docs":http://localhost:8080/app/webroot/index.php?url=docs, you should see something like this: - -!/img/pictures/lithium/li3_docs.png! - -Congratulation, you're now running your first Lithium application! - -h3. Fixing URLs - -Once the initial excitement wears off you'll notice that none of the links on the docs page works. - -That's because the mongoose web server does not support URL rewriting (and Lithium needs it badly right now), so we have to change the way URLs are created. "@nateabele":http://twitter.com/nateabele gave me "some tips":http://pastium.org/view/3a966c1446fcbd1d4f5a94d882256987 on how to do this; it's very simple: - -# Create a directory called **action** in **D:\lithium_test\app\extensions**. -# Create a file called **Request.php**, containing the following: - -<% highlight :php do %> -<?php -namespace app\extensions\action; - -class Request extends \lithium\action\Request { - - protected function _base() { - return '?url='; - } -} -?> -<% end %> - -We're basically extending the @\lithium\action\Request@ with a custom class, telling Lithium how to create the base URL. - -After doing so, open **D:\lithium_test\app\webroot\index.php** and change: - -@echo lithium\action\Dispatcher::run();@ - -into: - - @echo lithium\action\Dispatcher::run(new app\extensions\action\Request());@ - -In this case, we're instructing the dispatcher to use our custom Request class instead of the default one. - -Now everything should work as expected. Reload the docs page ("http://localhost:8080/app/webroot/index.php?url=docs":http://localhost:8080/app/webroot/index.php?url=docs) and verify that the links work by navigating to @Lithium@, then @action@ and finally @Controller@. - -Now you can use Lithium to display its own API locally (if things didn't work out, there's always "http://li3.rad-dev.org/docs":http://li3.rad-dev.org/docs). -
@@ -1,117 +0,0 @@
------ -permalink: git-for-the-locals -filters_pre: -- erb -- redcloth -title: Git for the Locals -comments: -- :date: 2008-07-15 07:14:31 +02:00 - :author: Daniel Hofstetter - :url: http://cakebaker.42dh.com - :id: 246 - :body: Do you have any experience with the Eclipse plugin for Git? -- :date: 2008-07-15 10:12:48 +02:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 247 - :body: |- - @Daniel - - No, not really. I don't use Eclipse, it's not for _local_ people: we only use Vim around here :P - - I was literally amazed at how Git is easy to use right from the command line! -- :date: 2008-07-15 14:43:23 +02:00 - :author: Ronen - :url: http://javadevelopmentforthemasses.blogspot.com - :id: 248 - :body: | - You can actually add your usb drive as a remote repo and push pull from it without the need for a sync tool, small google search lead me to this entry (not mine): - http://timwise.blogspot.com/2008/05/sharing-work-between-computers-with-usb.html - -- :date: 2008-07-16 08:07:03 +02:00 - :author: Paolo Bonzini - :url: "" - :id: 249 - :body: Yes, your points about not needing a server, being able to move the repo as you wish, and so on, is exactly what I meant when I wrote "if Subversion is CVS done right, git is RCS done right" in my own git tutorial -- http://smalltalk.gnu.org/blog/bonzinip/using-git-without-feeling-stupid-part-1 if you care. -- :date: 2008-07-24 12:52:13 +02:00 - :author: LurkingPixel - :url: http://is.gd/Fo2?357621748 - :id: 251 - :body: Subversion supports local repositories as well. Maybe not the same form as Git, but you certainly don't need to run a server to have an SVN repo. -date: 2008-07-15 06:18:00 +02:00 -tags: -- programming -type: article -toc: true ------ -_"This is a *local* shop for *local* people, we want no trouble here!"_ - -— Edward, "The League of Gentlemen":http://en.wikipedia.org/wiki/League_of_gentlemen - -I'm normally quite cautious when it comes to IT novelties like new frameworks, new methodologies and similar, especially when it feels like they're over-hyped. Especially nowadays, it is sometimes very hard to tell whether something new is over-hyped or really a Good Thing(TM) without spending some time looking into it. And especially nowadays, finding the time to look into something new can be a real challange. - -I deliberately didn't look into Git properly since it went "mainstream" (maybe I shouldn't use this word), but when "this tutorial":http://www.spheredev.org/wiki/Git_for_the_lazy came out I couldn't resist. Sure, I knew Git was an amazingly fast distributed version control system, that "GitHub":http://github.com/ offered free accounts, that all the cool guys were slowly starting to use it in place of Subversion, etc. etc. - -What I didn't realize though, that the most obvious advantage of this DVCS was the fact that it was *distributed*, i.e., it _didn't need_ a centralized server. - -Let me repeat this: *Git _doesn't need_ a centralized server.* - -Really.h3. ...But it's not user-friendly! - -If you're a Windows user and you used Subversion before, chances are that you got accustomed to "TortoiseSVN":http://tortoisesvn.tigris.org/, too. TortoiseSVN is — in a way — a nice graphical fron-end to SVN which provides seamless Windows Explorer integration. -Git doesn't have anything like that yet. There's something in the works, sure, but nothing really comparable to TortoiseSVN. Therefore, you are _kindly suggested_ to get on and use the command line for all your git stuff. - -Oh well, I personally love using command line interfaces for certain tasks, event if I spend more time on Windows than on any other OS and well, the DOS prompt is no way near to bash & Co. - -For the -lazy gits- Windows users, "MSysGit":http://code.google.com/p/msysgit/ is the answer to all your problems. _Officially_ you have to install Cygwin and all its crap to be able to use Git on Windows. Not that Cygwin is bad, but I personally don't like the extra layer it creates between you and an OS symulation which is not really what's on your machine.It would be great if you could get all the Bash goodies natively, without the hassle. - -that's basically what you get for free when you install MSysGit: the best (to date) version of Bash you could possibly dream of for Windows, along with a few handy Gnu tools and of course all git commands. -In a few click, you'll be able to use Git (and Bash!) right away: no tricks, no hassle, no kidding. - -And stop moaning about the command line not being user friendly. You want a new repository _anywhere_? Just type in the following: - -<% highlight :text do %> -git init -git add . -git commit -<% end %> - -This will create your new repository in the current directory, add all your files and filders recursively, and perform the initial commit. What's so hard in this? Nothing. And it's faster than SVN, for sure. - -h3. Are you local? - -"Being local" has its own advantages: you know where you stand, you know what to expect, you don't depend on other people. What I didn't fully realize about Git is that it can be a 100% _local_ repository. - -The three Git commands I mentioned earlier can be used to create a repository _there_, exactly where you are: not on a server far, far away. -Let's see what this means: - -# You don't need an Internet connection anymore to use a VCS -# You don't get a .svn folder in _every_ damn directory of your project, with a load of crappy files in it. -# You get only a .git folder _at top level_, and that's where your repository actually is. Granted, there are going to be quite a few files in there, but they're not going to be scattered all over the place -# You can physically copy your repository anywhere and still use it -# You don't need to signup to GitHub for an account, if you only want your own VCS - -OK, this is an extreme scenario, but sometimes you may want your _own_ local repository for your stuff. You may want a place to version your documents, or a place to version your own little pet programming project nobody knows about. -With Git, you can get all the advantages of a VCS (and an _incredibly fast_ VCS) without having to setup any server infrastructure: just install Git on your machine, and you're done. No server processes, no hassle. - - -h3. Don't connect, synchronize - -All the information your repository needs is stored in that little .git folder, nowhere else. You can copy your files and that folder, and you'll still get your repository back wherever you are. Maybe you can zip it before copying it, and then unzip it where you need a VCS, event. - -I tried using some synchronization utilities like SyncToy or RoboCopy on Windows to keep my files synchronized on multiple computers: it all started off from the fact that I can't use SSH at work, so I wouldn't be able to push my commits back to a central repository online like GitHub. - -So here's what I did: - -# I setup a local repository for my project on a local folder at work. -# I started working on my project, did a few commits. -# After performing the last commit for the day (you are encouraged to commit often by Git, really), I synchronized that folder with my USB key, via SyncToy. -# Back at home, I used SyncToy again to synchronize my files (including the repository) between the USB key and my home computer. -# Performing a @git status@ showed that some files have been modified (all of them, actually): that's because Git detected that they weren't the same files which were committed, presumably because of different timestamps etc. -# All I did was a @git reset --hard@ to get _exactly_ the same files I committed at work, with absolutely no information loss. - -Isn't it a bad thing to move your git folder back and forth and let another program to synchronize files within it? Maybe, but it seems to work so far. A safer option, in this case, may be zipping the folder before synchronizing it, just to be sure. - -h3. Conclusion - -Git can do much more than this. Git offers some really interesting branching features, for example, which I didn't mention in this article, of course, like several dozens of other commands. What I tried to point out was that Git can be used by _anyone_, as a fast, simple and very effective private _local_ repository. In case you need one, that is (if you are really _local_).
@@ -1,87 +0,0 @@
------ -:type: article -:tags: -- glyph -- ruby -- opensource -:permalink: glyph-020-released -:title: "Glyph 0.2.0 Released" -:subtitle: Featuring single-file compilation, programmatic usage and auto-regeneration, and more -:toc: true -:date: 2010-05-09 17:00:00.099000 +02:00 -:intro: | - I am very pleased to announce the second release of the "Glyph Document Authoring Framework":/glyph/. For those who don't know, Glyph is a pure-Ruby, extensible solution to author documents like books or articles using a simple, fully-customizable markup language. - - Since the "first release":/articles/introducing-glyph/, came out, last month, a lot happened. Plenty of bugs were fixed and new features implemented, as shown by the "changelog":http://github.com/h3rald/glyph/blob/master/CHANGELOG.textile. Here's a brief rundown of the most notable changes. ------ -&:[G|Glyph] -textile[ -I am very pleased to announce the second release of the =>[$[site.root]/glyph/|&[G] Document Authoring Framework]. For those who don't know, &[G] is a pure-Ruby, extensible solution to author documents like books or articles using a simple, fully-customizable markup language. - -Since the =>[$[site.root]/articles/introducing-glyph/|first release], came out, last month, a lot happened. Plenty of bugs were fixed and new features implemented, as shown by the =>[http://github.com/h3rald/glyph/blob/master/CHANGELOG.textile|changelog]. Here's a brief rundown of the most notable changes. - - section[@title[What &[G] code looks like] -Earlier this week I =>[http://blog.h3rald.com/making-a-custom-vim-syntax-file|blogged] about my new =>[http://github.com/h3rald/stash/blob/master/.vim/syntax/glyph.vim|&[G] vim syntax file]. I've been using it for a while, and all I can say is that it really helps! Here's what it looks like: - -image[\/$[site.root]/img/pictures/glyph_syntax.png] - -I'm sorry for the Emacs and TextMate folks, but I only use Vim, so I only made a Vim syntax file. Anyhow, &[G] grammar is very simple, so rolling out your own syntax file for your favorite editor shouldn't be too hard. - ] - - section[@title[Notable features] - - section[@title[Single-file compilation] -Perhaps the most life-changing feature in this release is the possibility of compiling a single &[G] source file into an HTML or PDF file. This means you no longer need to create a full-blown project for writing a short article: just create a file anywhere and run @glyph compile filename.glyph@on it! - -The good thing is that with this new release you can also define snippets, configuration settings, and even macros right into your &[G] files, so you can do almost anything without having to create a project or fiddle with YAML files. - ] - - section[@title[Programmatic usage] -The second most notable feature is the possibility to use &[G] as a Ruby library, i.e. as you'd use a filter like RedCloth or MarkDown. Additionally, it is also possible to compile single files programmatically, so you can, for example, create PDF files for your articles from the same source file. Don't believe me? Feel free to click the _Download PDF_ and _View Source_ links on this very page to see for yourself... - -For those of you using the awesome =>[http://nanoc.stoneship.org|nanoc] static site generator, here's a few source files you may want to take a look at: -* =>[http://github.com/h3rald/h3rald/blob/master/lib/glyph-data.rb|lib/glyph-data.rb] -- How to update configuration settings. -* =>[http://github.com/h3rald/h3rald/blob/master/lib/glyph-filter.rb|lib/glyph-data.rb] -- a simple &[G] filter. -* =>[http://github.com/h3rald/h3rald/blob/master/Rules|Rules] -- a rule using the @\/&[G]#compile@ method to generate PDF files. - ] - - section[@title[Auto-regeneration] -Another very interesting feature is the possibility to auto-regenerate your output files automatically whenever a source file is changed. Just run @glyph compile --auto@ and you're away. I'd like to thank =>[http://koraktor.github.com|Sebastian Staudt] for proposing, implementing, and testing this feature. - ] - - section[@title[Conditional macros] -Finally, although it may worry some, I added the possibility to evaluate conditional expressions directly in Glyph. The syntax is a bit verbose due to the extreme simplicity of &[G] parser, but it does the job: - -code[= -?[and[ - eq[$[document.output]\|pdf]\| - eq[$[tools.pdf_generator]\|prince] - ]\| - style[pagination.css]] -=] - -The snippet above can be used to include the @pagination.css@ stylesheet only when generating a PDF file with Prince XML. - ] - ] - - section[@title[What's next?] -Release 0.3.0 is currently being planned, and so are its =>[http://github.com/h3rald/glyph/issues|features]. For now, I'd like to thank the following individuals for contributing to Glyph: -* =>[http://www.jabbslad.com|Jamie Atkinson] (Jabbslad), for spotting and fixing some bugs and providing feedback. -* =>[http://koraktor.github.com|Sebastian Staudt] (koraktor), for spotting and fixing some bugs, proposing and implementing new features. - -In particular, Sebastian is working on =>[http://wiki.github.com/h3rald/glyph/feature-bibliography-support|bibliogaphy support] for Glyph, looking forward to it! - -Although still in its infancy, Glyph is becoming more and more usable everyday. If you are interested, you can contribute in many different ways to the project, such as: -* By participating to discussions on the =>[http://groups.google.com/group/glyph-framework|user group] (it's a bit quiet of there for now...) -* By spreading the word on Twitter, on your blog, or wherever you like. -* By installing it, using it, reporting bugs and proposing new features (it's just a @gem install glyph@ away!). -* By actually contributing to its development (it's =>[http://wiki.github.com/h3rald/glyph/contribution-guidelines|easy]!). - -Additionally, if you don't like coding: -* feedback on the current documentation and on the =>[http://github.com/h3rald/glyph/raw/master/book/output/pdf/glyph.pdf|Glyph book] is appreciated -* if you are good with CSS, I'm looking for some nice new CSS styles to include in the standard Glyph distribution. -* if you're good with graphics, Glyph needs a good-looking logo... - -Any form of contribution will be credited in some way, e.g. by links and tweets. - ] -]
@@ -1,92 +0,0 @@
------ -:type: article -:tags: -- glyph -- ruby -- opensource -:permalink: glyph-030-released -:title: "Glyph 0.3.0 Released" -:subtitle: The third release of the Glyph Authoring Framework features dramatic speed improvements, and much more -:toc: true -:date: 2010-06-13 14:10:00.000000 +02:00 -:intro: | - The third release of "Glyph":/glyph/ is out! - - For those checking it out for the first time, Glyph is a _Rapid Document Authoring Framework_ focused on extensibility and content reuse. For an example of what Glyph can do, have a look at Glyph's "free PDF book":http://github.com/downloads/h3rald/glyph/glyph.pdf. - - This release brings more stability to Glyph, more speed, and features affecting Glyph's core functionality. As a consequence, some "incompatibilities":http://github.com/h3rald/glyph/issues/closed#issue/121 had to be introduced – but after all, better now than later. ------ -&:[yardoc|http://yardoc.org/docs/h3rald-glyph] -&:[book|http://github.com/downloads/h3rald/glyph/glyph.pdf] - -p[The third release of =>[$[site.root]/glyph/|Glyph] is out!] - -p[For those checking it out for the first time, Glyph is a em[Rapid Document Authoring Framework] focused on extensibility and content reuse. For an example of what Glyph can do, have a look at Glyph's =>[&[book]|free PDF book].] - -p[This release brings more stability to Glyph, more speed, and features affecting Glyph's core functionality. As a consequence, some =>[http://github.com/h3rald/glyph/issues/closed#issue/121|incompatibilities] had to be introduced – but after all, better now than later.] - -section[ - @title[New parser and performance improvements] - - p[This release's big news is the brand new =>[&[yardoc]/glyph/parser|Glyph Parser]. Until this release, Glyph relied on the awesome =>[http://treetop.rubyforge.org/|Treetop] library for parsing Glyph language. Treetop is great when it comes to creating language parsers effortlessly, but it can add quite a bit of an overhead especially when using =>[http://groups.google.com/group/treetop-dev/browse_thread/thread/15ff7659b2efbeed|dot star] patterns.] - - p[So I ran a few benchmarks and in the end decided to write my very own (first!) parser from scratch using just the =>[http://ruby-doc.org/core/classes/StringScanner.html|StringScanner] class, which is part of Ruby Standard Library. It took me a bit to get used to it, but in the end I managed to create something able to produce an Abstract Syntax Tree exactly the way I wanted.] - - p[After adding the new parser, Glyph became significantly faster. This doesn't mean it's as fast as, say, RedCloth, but I it can be used to process long books in just a few em[seconds] rather than em[minutes].] -] - -section[ - @title[Macro Attributes] - - p[Glyph now supports named attributes as well as positional parameters. This is particularly handy when you want to create macros with a lot of optional arguments: in this case, positional parameters are not great. As a result, for example, the code[section] macro now takes an optional code[title] and code[id] attributes, rather than two parameters] - - p[Attributes look like macros, but they all start with a code[@] character. For example, see the the following image, showing this very section:] - - image[\/$[site.root]/img/pictures/updated_glyph_syntax.png] -] - -section[ - @title[Full XML support] - - p[Once macro attributes became available at parser level, having Glyph to produce arbitrary XML code became extremely easy. By default, now if Glyph doesn't find a macro it assumes you're inputting an XML tag of some kind, so you can write:] - - highlight[=html| -p[This is a paragraph with some em[emphasized] text.] -img[ - @alt[Glyph Code] - @width[50%] - @height[50%] - @src[glyph_code.png] -] - =] - - p[And get the following HTML code back:] - - highlight[=html| -<p>This is a paragraph with some <em>emphasized</em> text.</p> -<img - alt="Glyph Code" - width="50%" - height="60%" - src="glyph_code.png" -/> - =] - - p[...and none of the macros used in the previosu Glyph code snippet are actually defined in Glyph. Among other things, this means that em[you don't have to] use Textile or Markup within your Glyph code unless you absolutely need to (e.g. for lists, which would be a bit verbose to create using just Glyph markup).] -] - -section[ - @title[Improved code[include] macro and "safe mode"] - - p[The code[include] macro now em[must] take an path to a file relative to the code[text/] directory of your project, em[or] it can also be used to include (and em[evaluate]) ruby code within your code[lib/] directory. Moreover, you can now use the code[include] macro even when compiling single Glyph files.] - - p[Now, while evaluating Ruby code in an external file can be quite handy, is also quite insecure. For this reason, it is now possible to use Glyph programmatically in "safe mode", thereby forbidding the usage of certain em[unsafe] macros.] -] - -section[ - @title[What's next?] - - p[Sooner or later I'll have to implement support for generating multiple files in output. This would make it possible to make the =>[&[book]|Glyph book] available online as a collection of separate HTML file, for example, or, later on, maybe even compiled into a (ugh!) CHM file.] - - p[Additionally, HTML5 support is also on the horizon: given the current Glyph architecture, it will be relatively easy to have Glyph macros to produce HTML5 code instead of XHTML. LaTeX support, on the other hand, is a completely different game, mainly because I'm not familiar with it, so if anyone feels creative and would like an easier way to produce reusable LaTeX code, =>[http://github.com/h3rald/glyph/|get forking] and contact me!] -]
@@ -1,79 +0,0 @@
------ -:type: article -:tags: -- glyph -- ruby -- opensource -:permalink: glyph-040-released -:title: "Glyph 0.4.0 Released" -:subtitle: Featuring web output, HTML5 support, stats, wkhtmltopdf, and much more -:toc: true -:date: 2010-09-03 19:45:00.000000 +02:00 -:intro: This new release of Glyph introduces an unusually large number of features, improvements and bugfixes. Not so much in terms of new macros maybe (no index or bibliography support for now, but it will come, don't worry!), but rather... pretty much everything else! ------ -$[document.intro] - -section[ - @title[Web Output] - txt[ -By far the biggest feature of this release is support for multi-file output, i.e. the possibility to transform your book into a web site. You've asked for it, I needed it too, and now it's finally here. - -An example? Sure. Take the =>[http://github.com/downloads/h3rald/glyph/glyph.pdf|Glyph Book] (now a 98-page PDF file) for instance. My only regret was that a long PDF is quite heavy to digest and peruse, especially if you're in a hurry. It would be so much nice to have it available online, in chunks of more manageable size. - -Well, =>[/glyph/book/|here it is]. That's the very same document, split in several HTML files with a custom layout that matches this site's. The good news is that you can do it too: - ] - codeblock[= -section[ - @title[This title is compulsory] - @id[random_section] - @src[topic_file.glyph] -] - =] - txt[ -Note the code[@src] attribute? It basically includes the specified topic file. So by creating a @document.glyph@ file like =>[http://github.com/h3rald/glyph/blob/master/book/document.glyph|this], you can create a tidy table of contents (not a single @include@ macro) _and_ get a website for free. Glyph, as usual, takes care of anything for you, especially links between topics. Just link away like you did so far, nothing changes from previous versions, it will just work as expected (\/=>[/glyph/book/compiling/compiling.html#web_output|read more]). - ] -] -section[ - @title[HTML5 Output] - txt[ -Compared to Web output, HTML5 support was trivial and only took a few hours to implement and test. You can now produce single-file HTML5-compliant documents (@html5@ output format) or even HTML5-compliant web sites (@web5@ output). Just using @section@ tags instead of @div@ tags made it worth it. - -Of course, the default CSS files have been updated to be compatible with HTML5 output too. - ] -] -section[ - @title[Project Statistics] - txt[ -Anoher big thing was a shiny new command, @glyph stats@, which brings -- guess -- stats. No more chasing after bookmark references, just type @glyph stats --bookmark=#web_output@ and you'll know where the @#web_output@ bookmark was defined _and_ what links to it. Similar stats are available for: -* macros -* links -* files -* snippets - -@glyph stats -m@ tells me that I used 3236 macro instances throughout the Glyph book. Just so you know. - ] -] -section[ - @title[Custom tasks and commands] - txt[ -"Glyph is extensible", "Glyph lets you create your own macros", ...great, but kinda limited right? No more. Glyph now lets you create _custom Rake tasks_ and even _custom commands_. - -Have a look at =>[/glyph/book/extending/commands_tasks.html|this page] for more information on what you can do and how. You can now extend Glyph in any way you like (including adding custom output formats) without having to touch its core, just do it _within your own project_. - ] -] -section[ - @title[wkhtmltopdf] - txt[ -Last but not least, you no longer need Prince XML to produce PDF file. Granted, Prince is awesome and the PDF it produces are very, very nice... but if you want to produce PDFs commercially and want to same some money, you can now use =>[http://code.google.com/p/wkhtmltopdf/|wkhtmltopdf]: it's _free_ and _open source_, and it keeps getting better and better. - ] -] -section[ - @title[...and more to come!] - txt[ -After this release I'm going to take a small break from Glyph. Nothing major, I just want to redesign my site (again) and find the time to write a proper Glyph tutorial. This doesn't mean that development will be halted or anything, just that it will take a few months for Glyph 0.5.0 to come out. - -Meanwhile, there may be bugfix releases (depends how many bugs turn up). It would be a good time to come out of the closet and propose/vote on new =>[http://github.com/h3rald/glyph/issues|features]! - -Hope you enjoy using Glyph 0.4.0, and if you need anything or feel social, remember that the doors of the =>[http://groups.google.com/group/glyph-framework|Glyph User Group] are always open! - ] -]
@@ -1,116 +0,0 @@
------ -:type: article -:tags: -- glyph -- ruby -- opensource -:permalink: glyph-050-released -:title: "Glyph 0.5.0 Released" -:subtitle: Featuring Calibre integration, macro composition, Turing-completeness, and more -:pdf: false -:date: 2011-08-28 21:18:00.000000 +02:00 -:intro: | - Too much time passed since the last Glyph release. Way too much. Finally I found the time and will to tidy up the last few remaining bugs, update the docs, and release it! -:extended_intro: | - This new release was mainly focused on extending the features of Glyph as a _language_. Besides a few improvements that make writing Glyph code easier and more readable (e.g. macro composition), Glyph is now Turing-complete. It supports iterations, recursion, variable assignments, basic arithmetics... you can even write a program to compute the factorial of an integer, if you wanted to. - - Additionally, it also features enhanced content reuse through fragments and output-independent macros, and a few bugfixes. ------ -$[document.intro] - -section[ - @title[Calibre Integration] - txt[ -=>[https://github.com/tammycravit|Tammy Cravit] proposed (and more or less implemented) an interesting new feature: integrate =>[http://calibre-ebook.com/|Calibre] to generate ebooks in EPUB and MOBI format from Glyph's native standalone HTML output format. - -Although the support is still somewhat rough, you can, as a matter of fact, generate ebooks with Glyph, using Calibre. - ] -] -section[ - @title[Macro Composition] - txt[ -This release features an update at syntax-level: the possibility of "composing" macros, thereby eliminating nesting provided that containers take only one parameter and no attributes. What? This: - ] - highlight[=html| -?[ - not[output?[pdf]]\| - ... -] - =] - -p[Can be written like this:] - - highlight[=html| -?[ - not/output?[pdf]\| - ... -] - =] - -txt[ -In this case, the @not@ macro was composed with the @output?@ macro, thus removing one level of nesting. - -Additionally, I used this features to create an @xml@ macro dispatcher that can be used to render raw XML tags, and an @s@ macro dispatcher that basically is able to call nearly all the instance methods of the Ruby String class. So you can write things like code[=s/sub[This feature makes my life easier\|/my/\|your]=] and similar. - ] -] -section[ - @title[Turing-Completeness] - txt[ -As of this version, Glyph can be considered _Turing-complete_, as it satisfies the following =>[http://c2.com/cgi/wiki?LanguageRequirementsForTuringCompleteness|requirements for Turing-completeness]: -* A conditional construct, implemented via the @condition@ macro. -* Variable assignment, by setting the value of snippets using the @snippet:@ macro and of attributes using the @attribute:@ macro. -* (infinite) iteration implemented through the new @while@ macro or recursion, which is possible thanks to the new @define:@ macro. -* A memory model which emulates an infinite store: there are no enforced limits on attribute/snippets allocations and number of algorithms or parameters. - -Plus, Glyph now understand basic integer arithmetic: - ] - highlight[=html| -def:[factorial\| - ?[ - eq[{{0}}\|0]\|1\| - multiply[ - {{0}} \| factorial[subtract[{{0}}\|1]] - ] - ] -] - =] - txt[ -Not that you _need_ to be able to calculate factorials in your documents, but know that now you _can_. An you can also define lexically scoped variables, err... _attributes_, like this: - ] - highlight[=html| -let[ - @:[a\|bits] - @:[b\|bobs] - section[ - @title[Something more about attributes] -Attributes are like lexically scoped variables. You can use them to store @[a] and @[b]. - ] -] - =] - p[Handy enough.] -] -section[ - @title[Embeddable fragments] - txt[ -Too lazy to create snippets? Feel the urge to re-use something you already wrote somewhere? Use a _fragment_ and embed it, as follows: - ] - highlight[=html| -Snippets and fragments ##[good_way\|are a good way to reuse] small chunks of content, -while the include and load macros <=[good_way] entire files. - =] - txt[...And you can also use a new @load@ macro, to embed entire files without performing any evaluation (like @include@ does).] -] -§txt[ - @title[Incompatibilities with previous versions] -To sum up: -* @snippets.yml@ is no more, define all your snippets inside your document instead. -* New "invisible space separator": @\\/@ instead of @\\.@. Because it's slightly prettier, nothing else. -* The @rewrite:@ macro has been replaced by the @define:@ macro, which also allows recursion, so be careful! -* If you want to render raw XML tags, use @xml/tag_name@ instead of @=tag_name@. -* No more @match@ macro, use @s/match@ instead. - -For the full list of the issues fixed in this release, see the =>[http://www.h3rald.com/glyph/book/changelog.html|Changelog]. - -Hope you'll enjoy this new release of Glyph. If you want to contribute, go ahead and =>[https://github.com/h3rald/glyph|fork the repo]! -] -
@@ -1,102 +0,0 @@
------ -permalink: google-apps-for-your-domain -filters_pre: -- redcloth -title: "Google Apps for your domain: a shared hosting killer service?" -comments: [] - -date: 2006-08-28 05:51:00 +02:00 -tags: -- google -- internet -- ajax -- web20 -- review -type: article -toc: true ------ -A while ago Google started offering services like "Google Mail":http://mail.google.com/mail/ (Gmail) and "Google Calendar":http://www.google.com/calendar/ to domain owners. Sure everyone likes Gmail, but one of the few bad things about it is that it never feels "unique": your email address is always gonna be <something>@gmail.com or <something>@googlemail.com. Not a big deal? Well, sure, not really, but it really depends on the people using the service and how fussy they are: - -* small/medium business wouldn't like this: @gmail.com gives farless credibility than @domain.com -* When using Gmail with the Send As feature, messages will be sent "on behalf of", and this can potentially mess things up as some spam filters don't like it. - -Now it seems to be "official":http://seattlepi.nwsource.com/business/1700AP_Google_Business_Applications.html: Google is starting to offer customizable services to anyone who wish to sign up for it, not only as a restricted beta service. -What does this mean? Well, it can be the (free and easy) definitive web solution for small business, kids, grandmas and everyone who wants to establish a presence on the web by paying only the annual domain renewal fees... - -h3. Included applications - -Note the title: "Google Apps":https://www.google.com/a/ for your domain, not only Gmail. Here's what you get: - -* "Gmail":http://mail.google.com/ - You know what it offers: a state-of-the art AJAX interface, speed, reliability, very effective spam filter, loads of space, tagging (labels) stars and all the rest. -* "Google Calendar":http://www.google.com/calendar/ - One of the best online calendar available. Features and AJAX interface, full integration with Gmail, ability to create private and public calendars, reminders, -* _Google Chat_ - Google's instant messenger, available through "Google Talk":http://www.google.com/talk/ desktop application or online, seamlessly integrated in your Gmail interface. -* "Google Web Pages":http://pages.google.com/ - aka Google's page creator, easily create webpages using Google's WYSIWYG online editor. - -Now, try imagining these four services combined and (almost) fully customizable... Still no idea? Well, keep reading for a list of all the included features. - -h3. Included Features - -In order to use Google Apps for your domain, you must of course own a domain. The next step involves changing your domain's MX entry to "ASPMX.L.GOOGLE.COM", and follow the instructions to create an administration account for your Google applications, and after a while every email sent to your domain's accounts will be routed to your new Google-powered inbox. Similarly, in order to use Google Page Creator on your domain, you're required to change the CNAME record of your DNS to "ghs.google.com". - -<blockquote> -Note: in order to avoid inconveniences especially if a lot of users use your domain's email, it is recommended that you pay attention on Google's instructions on how to set the whole thing up. For further information refer to the official "FAQ":https://www.google.com/a/FAQ. In order to be able to use Google Page Creator on your domain, you must setup an URL to publish your webpages: of course do NOT set this to "www.yourdomain.com" or any subdomain currently in use or your visitors will access the pages you created with Google Page Creator. -</blockquote> - -Here's what you get: -!/img/pictures/gmail-hosted/gmail.png! -For a bigger image click "here":/img/pictures/gmail-hosted/gmail_full.png. Let's now have a look at what are the main differences from the standard Gmail. - -<u>_*Include your own logo*_</u> -!</img/pictures/gmail-hosted/logo.png! - -Your own logo will be displayed on the upper left corner of every page. And this is truly sweet. All you have to do to change it is uploading a 143x59 PNG or GIF image from your domain management panel (see below). - -<u>_*Use your company name instead of Google's*_</u> -!>/img/pictures/gmail-hosted/links.png! - -Besides a custom logo, it is possible to set a company name to be used instead of "Google" or "Gmail" in page titles and links. I chose "H3RALD.com Mail" and that's displayed everywhere, including on the sign-in page. - -<u>_*Control Panel*_</u> -All the custom settings can easily be managed through an easy-to use control panel: - -!/img/pictures/gmail-hosted/options_panel.png! - -It's really easy to use and has wizards to setup all the included services and options like setting up user accounts, settings etc. - -!/img/pictures/gmail-hosted/domain.png! - -<u>_*User Accounts*_</u> -Through the control panel you can add new users and modifying existing user accounts to access your services. You can create administrators who are able to access administrative domain-wide settings, and standard users. Every user gets 2048MB of space for their emails, and that's pretty generous considering that it seems that you're able to create around 25 user accounts. - -Already have a list of users you're like to import? Just save them in CSV format and upload them. - -Would you like to be able to contact all your users at once, e.g. via a newsletter? Google thought about this as well, and you can create your own personal newsletters which can be sent out automatically to your @yourdomain.com email accounts. - -<u>_*Internal Messaging System*_</u> -But there's more. We all know Google Talk: yes it's nice, but probably MSN has more features, smileys and all the rest but it still remains a perfectly usable instant manager, which also allows file transfer. Your users can use Google Talk to communicate with each other _or_ simply chat through their webmail interface, More features? Well, for example "you can setup Google Talk to work on federated networks":https://www.google.com/support/hosted/bin/answer.py?answer=34143. - -<u>_*Appointments/Projects management*_</u> -Google Calendar is an excellent online calendar, and now you can use it within your own domain as well. This means, for example, that it can be used to set your company's appointments, reminder, project deadlines by creating an unlimited number of custom calendars to share with your collaborators. - -<u>_*Design your own site*_</u> -I know a lot of restaurants, shops and people who would like to have a small site for their business or activity, but they can't develop web application themselves. So the most obvious solution is to hire some professional web developer to rip them off... erhm, to create a website for them. Now it is not necessary: by setting the correct DNS parameters, you can allow users to create their own webpages using a foolproof and advanced web editor powered by Google: "Google Page Creator":http://pages.google.com/. -I didn't set it up on my own domain, but a preview of what you can do with Google Page Creator is available "here":http://h3rald.googlepages.com/home. - -h3. Scenario - -After considering all this, I came to the conclusion that what Google did can help a lot of people and at the same time prevent some evil webmaster to charge them hundreds of Euro (they really get away with it!) for basic "websites" with "three or more static pages". -All you have to do is buy your own domain, and that can be as cheap as 8$ per year, the rest comes for free, from Google: - -* The best webmail interface you can possibly imagine -* Nearly unlimited space for everything -* A truly effective spam filter -* About 25 fully-featured user account, possibly more if you ask nicely -* Your own "corporate instant messenger" -* Your own calendar to manage appointments, meetings etc. -* An intuitive and advanced web page creator - not like Geocities - -All this for free. Yes, with ads (I'm not here to discuss "privacy concerns":http://www.gmail-is-too-creepy.com/), but after all they're not displayed on your main site. - -_What about Server Side technologies for my sites?_ - -OK kid, now that would be a little bit too much, even if I can foresee some possible "Google Web Widgets" at some point. "Create your _interactive and dinamic_ website within minutes, no programming knowledge required"... that would be great (for Google) and bad (for freelance web developers). One thing at a time, after all G(od|oogle) has the whole eternity to fulfill his Goals.
@@ -1,318 +0,0 @@
------ -permalink: google-chrome -filters_pre: -- redcloth -title: "Chrome: Google did it again!" -comments: -- :date: 2008-09-03 23:43:05 +02:00 - :author: roshan mehta - :url: "" - :id: 252 - :body: "i like your post bcoz it is not biased.Chrome doesn't have those awesome plugins that firefox have.It don't have download accelerator like \"down them all\".It also don't warn me visiting dangerous site as wot does in firefox.I love firefox and keep using that and what if i have to search article in wikipedia.here, first i have to visit wikipedia.org and about speed tune up utilities optimizes my firefox. " -- :date: 2008-09-04 16:08:24 +02:00 - :author: Andre - :url: http://andreagandino.com - :id: 253 - :body: |- - Nice post, Fabio. - - Chrome did it, yep. A fast, elegant browser with a neat UI. Oh, and with a great rendering engine too, like Webkit, even if they're using an older version of it (as of today, it doesn't has support for neither text-shadow nor anti-aliased border radius, while Safari's build does). - - I'm pretty sure they'll fix those things quickly. - - Plus, it comes with the DOM inspector pre-installed, which makes it good for developing too (it's not as good as Firebug in my opinion, but, hey, it's better than nothing). - - But it's the marketing side of the whole thing that impressed me the most. Everyone was talking about it even before the browser itself was released; and when it did, it was a choir of compliments. - - So, while I patiently wait for a Mac version to be released, I wonder if this will be the time that I change my browser of choice. -- :date: 2008-09-04 16:08:52 +02:00 - :author: Andre - :url: http://andreagandino.com - :id: 254 - :body: Oh, by the way, thanks for adding me to your Links sidebar! ;) -- :date: 2008-09-05 02:36:13 +02:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 255 - :body: |- - Google did an outstanding job as far as marketing goes: everyone was talking about Chrome immediately after the release, even non-tech newspapers! - - I'm currently trying it out as my default browser, and I'm satisfied so far. People started complaining about privacy and security issues, but they're likely to be fixed very soon, especially in the latest "Chromium Builds":http://build.chromium.org/buildbot/snapshots/chromium-rel-xp/ (that's what I'm using right now). -- :date: 2008-09-05 11:28:59 +02:00 - :author: AdamC - :url: "" - :id: 256 - :body: |+ - Google did it? Please.. - - JavaScript is the language in Silverlight 1.0. And guess what? It gets compiled (JIT) and then executed. - - IE8 (beta) already runs different tabs in different processes. - - So, yeah, Google did it. Did what exactly, again? - - I mean, let's just give some credit where credit is due, especially since it was Microsoft too that created XmlHttpReques object that is basis for Ajax. - -- :date: 2008-09-07 15:44:20 +02:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 257 - :body: |- - @AdamC - - If you read the whole article, you should understand I actually agree with you: Google didn't create anything new, they just got all the best features from IE8, Firefox 3.1, Safari 4 (all of which has still to come out) and bundled into an open source product. - - Google's secret is simple and yet amazing: "don't do anything new, just do it better than others". they built a fortune with that, and with clever marketing. -- :date: 2008-09-08 04:22:30 +02:00 - :author: Marius - :url: "" - :id: 258 - :body: |- - Good article. Covers most of what I would be interested in knowing about Chrome. - - One thing that I've seen in several places though, is that people attribute the things Google have borrowed (Speed Dial, etc.), but I've yet to see anyone attribute the Incognito mode to the Safari guys, who've had "Private browser" for quite some time now... I guess it's just because the Safari version is just a menu option, that isn't really advertised anywhere. -- :date: 2008-09-12 11:03:29 +02:00 - :author: Bill - :url: http://www.0092ff.com/software/google-chrome-beta-for-windows - :id: 260 - :body: "It\xE2\x80\x99s weird looking at first, but it seems pretty fast. I opened a few of my pages just to see if they rendered differently and for the most part, they were fine. As a web designer, all I need is another browser that I have to design my pages for. I\xE2\x80\x99m hoping that Chrome renders code the way it should (like Firefox). Just out of curiosity, I also checked the memory usage and needless to say, it was a lot less than my current Firefox session (6,656K compared to that of Firefox using 162,340K)." -- :date: - :author: Dagger1234 - :url: "" - :id: 2706 - :body: "Im currently using Google Chrome\xE2\x84\xA2 and i can find no substantial problems with the way it works, as a internet usage moderator, i rely on a fast connection, and this program really does offer this to me. I also love the fact that the entire program is open-sourced, so that i can really see what is going on. Although Google\xE2\x84\xA2 have just taken their ideas from other browsers which are openly available, they have to be credited for their genius of doing this first. I find it shocking that no-one else had thought to do this first... combining the best of the best to create a well made piece of software, BRAVO!\r\n\ - \r\n\ - \xE2\x80\xA01234" -date: 2008-09-03 02:31:00 +02:00 -tags: -- browsers -- review -- google -type: article -toc: true ------ -!</files/google-chrome/chrome-logo.jpg! - -It looks like there's a "new open source browser":http://www.google.com/chrome in town. As usual, nearly everything about it "leaked":http://blogoscoped.com/archive/2008-09-01-n47.html "before":http://www.techcrunch.com/2008/09/01/first-public-screen-captures-of-google-chrome/ its "release":http://www.google.com/chrome. Every blog that matters is talking about it, so if you didn't hear anything about it, you'd better take a look yourself. Don't be fooled by the usual "senseless ravings":http://www.techcrunch.com/2008/09/01/meet-chrome-googles-windows-killer/ of some weird, overly-hyped blogger though: a _browser_ just came out, nothing more and nothing less. It's not the end of Windows, it's not the end of the Internet, it's not the end of the world as we know it. It's just a new player in the Browser Wars. - -I particularly recommend reading the official "Google Comic Book":http://books.google.com/books?id=8UsqHohwwVYC&printsec=frontcover#PPP1,M1 about Chrome, however I included some of the most interesting parts of it in this article. It's a nice 40-page comic booklet explaining how the browser works in a friendly way... I found it quite amusing and an interesting way to -leak- distribute info on a new project. - -h3. Getting the damn thing - -You can freely download Google Chromm from "here":http://www.google.com/chrome. You'll get a tiny 474KB setup file which installs the browser automatically. When I say automatically I mean automatically: you double click it, and it won't ask _anything_: it will just install it in Program Files by itself. Idiot proof. Clever. Some people may like it, I damn hated it. - -I downloaded it and installed it fine from home, on Vista, and it was blazing fast (on _Vista_, imagine!). I tried to do the same thing from work and I couldn't. The damn installer is supposed to pick up the proxy settings from your default browser, but if the proxy uses authentication (like 99% of corporate proxies) it simply won't work. As far as I know, there's "no way around this":http://groups.google.com/group/google-chrome-help-troubleshooting/browse_thread/thread/4c07ec5124f2eebc. - -This is the reason why this article won't have any chrome screenshots... to protest against Google's stupid way of doing things "too user-friendly". - -*Update 1:* Actually, it is now possible to download the full Chrome setup from "here":http://cache.pack.google.com/chrome/install/149.27/chrome_installer.exe (Thanks "Crazy Australian":http://www.thecrazyaustralian.com/installing-google-chrome-behind-a-proxy/). - -*Update 2:* After installing Chrome, if your company uses an automatic proxy script you won't be able to browser web sites using Chrome. If that's your case, make sure you change IE's proxy settings by specifying your proxy address and port explicitly. - - -h3. How Google "re-invented" the browser - -Why did Google bother? Officially because... - -_"[...] we believe we can add value for users and, at the same time, help drive innovation on the web."_ -(from "Google Blog":http://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html) - -In practice, a Google-branded browser makes sense especially because of the services offered by the search giant right now: nearly _every kind_ of web application, from mail clients to RSS readers. - -The philosophy of Google Chrome is fairly simple: the Web has changed since the nineties, we now have full-fledged applications instead of crappy hypertexts with animated GIFs, therefore browsers must change, too. - -Every major browser has a fairly long development history. Think of Firefox: version 3? Not really: try adding up at least 7 versions of Netscape before that. Internet Explorer *8*, Opera *9.5*, ... -Safari is probably the newest of the lot, but still not quite right. - -All major browsers _evolved_ through the years, but they never really changed: so why not to start from scratch? - -Starting from scratch has a lot of advantages: - -* You can learn from other people's mistakes, and try to fix them -* You can _get things right_ from the very start -* You do not have to worry about breaking compatibility with previous versions -* People won't have extremely high expectations, and they'll be prepared for a relatively unstable product - -Obviously building a browser from the ground up is not a weekend project, but things changed since the nineties and starting fresh does not necessarily means re-inventing the wheel! - -h3. An "old" Rendering Engine - -Let's just say that the main work was already done for Google by the "WebKit":http://webkit.org guys. The rendering engine which now powers Safari, the Nokia Series 60 browser, Gnome's Epiphany, Adobe AIR has been picked by the Google guys for Chrome. - -!>/files/google-chrome/chrome-javascript.gif! - -This is a fairly obvious choice, if you ask me. Why? - -* Presto (Opera's engine) is proprietary -* Trident (IE's engine) is proprietary, and it sucks -* Gecko (Mozilla's engine) is open source, but a bit bulky -* WebKit is open source, and arguably the fastest rendering engine to date - -The rendering engine, after all, may be considered one of the most important parts of the browser: it's responsible of what users see, after all. -Google made the right choice, in my opinion: WebKit is also the most "embeddable" and lightweight engine available, and it is also used on the Android platform for this very reason. - -h3. A "new" Javascript - -Mozilla has a "fast":http:http://www.mozilla.org/js/spidermonkey/Javascript engine, which will soon become "much faster":http://ejohn.org/blog/tracemonkey/. WebKit has a "blazing fast":http://webkit.org/projects/javascript/ Javascript engine too, don't forget. So why Google didn't just use that? - -...Because they wanted something _much_ faster than that, in their own way (as someone already "pointed out":http://null-logic.net/blog/2008/09/02/javascript-performance-comparison-with-chrome/). - -Meet *V8*, Chrome's very own Javascript Virtual Machine. When reading the Chrome Comic, I was particularly impressed of two improvements introduced by this new javascript VM: - -!>/files/google-chrome/chrome-javascript-gc.gif! - -* It actually compiles Javascript to machine code via a Just-In-Time compiler (JIT). This means that whenever you refresh a page containing Javascript the browser won't re-interpret the whole script, but it will simply run the compiled version of it which was generated the first time the page was loaded. New concept? Not really, Mozilla is going _exactly_ in the same direction with their own engine, and JIT compilation will be added as of Firefox 3.1. -* V8's incremental garbage collection looks like a much better alternative to the current conservative garbage collection methods used for Javascript. Because of V8's new concept of Hidden Class Transitions, V8 knows _exactly_ when something is no longer needed and thus it is able to garbace-collect it more effectively. - -While there has been some initial "skepticism":http://nexus.zteo.com/2008/09/01/google-chrome-an-index-of-what-developers-need-to-know-good-and-bad/ on this new Javascript implementation, it looks like Google did it right. If you don't believe it you can "download":http://code.google.com/apis/v8/intro.html V8's C++ code and try it out yourself. - -h3. One Process per Tab - -Google Chrome is the first multi-process browser. The idea is that _each tab_ (because you can't do browsers without tabs, these days, right?) has its own phisical process and it is therefore independent from each other. - -!>/files/google-chrome/chrome-processes.gif! - -Hang on, isn't that what IE 5 did? A new instance of the browser for each window? No, not quite: there's a single instance of the browser and _multiple_ tab instances. Each tab is independent in the sense that it has its own address bar, but it's just a tab, at the end of the day. - -This is what Internet Explorer could have done, _before_ Internet Explorer 7, as an answer to the traditional concept of tabs promoted by Mozilla and Opera. - -Actually, it turns out that "this is _exactly_ what's planned for Internet Explorer 8":http://blogs.msdn.com/ie/archive/2008/03/11/ie8-and-loosely-coupled-ie-lcie.aspx, as "someone":http://www.sriramkrishnan.com/blog/2008/09/thoughts-on-new-browser-wars.html already pointed out! - -Additionally, Google thought of building in a mini task manager to let users monitor the CPU and memory usage of each tab. This is interesting, but it has a few implications discussed later on in this article. - -What's truly remarkable about this is that each tab seems to have an initial overhead of 1-2KB, which of course grows according to the site it loads. You can see all this in the task manager, which also picks up similar stats for any other browser running at the same time on your machine. -This was another clever move by Google: by looking at their own task manager, and running more than one browser together, you have everything you need to instantly compare browser performance (thus discovering that Chrome does an outstanding job, it seems). - -What's also remarkable about Chrome's tabs is the way you can interact with them: - -* You can move them around smoohtly, exactly like with Safari -* You can detach them by drag and drop -* You can re-attach them by drag and drop (which is truly awesome!) - -h3. -AwesomeBar- _OmniBox_ and -Speed Dial- _New Tab Page_ - -Did you like Mozilla's AwesomeBar? Well, I personally did, others didn't so much. Meet OmniBox(TM) Google's very own, semi-sentient address bar which really understands you. - -Here's what you can do with it: - -* Type in URLs and view web sites (it would be damn funny if it couldn't do that) -* Get -extra Google crap- useful suggestions while typing. This includes, but it is not limited to: -** Pages you visited -** Bookmarks -** Popular pages (guess who decides that...) -* Custom searches: search IMDB, Wikipedia, Amazon and google itself with a few clicks - -!/files/google-chrome/chrome-bar.gif! - -Unlike Firefox's AwesomeBar, Google's OmniBox seems more "evolved": it doesn't get too much in your way, it lets you go where you want to go, and it's smart about searching. Apparently Mozilla is already planning to remove the search bar completely and incorporate it in the AwesomeBar... but Google released it first, sorry guys. - -The other handy thing they -stole- kindly borrowed from Opera is the _New Tab Page_, basically like Opera's Speed Dial, but with two interesting things: - -* It displays the nine _most visited_ pages: you don't have to configure it! -* It displays search boxes for the most visited sites where you searched something on. - -While I really like how this works (it requires no configuration whatsoever), I kinda miss dragging my favorite pages in the New Tab Page. If you come from Opera, you'll miss this too: the pages I have in my speed dial are NOT necessarily the pages I visited the most! - -I guess I'll get used to it, though... - -h3. Relax, it's Google! - -Google is not Evil(TM). Google is good to everyone, from their own employees to developers and end users: and the funniest part of this whole thing is that everything they make _looks_ good for you. You have absolutely no reason to fear Google. - -They did it again: they apparently released a new browser which definitely looks inherently more secure than competitors. -Here's why: - -* It has an _Incognito_ mode, which lets you browse everything you want without logging anything anywhere. -* It confines popups to the tab they belong, minimized. You can then seletively decide to drag them out and promote them to their own window. -* Each tab is sandboxed: i.e., it has no rights to write anything to your PC. Absolutely no chance. When plugins for Java and Flash are used, however, this doesn't apply. -* Chrome continuously downloads lists of malicious sites, so that you're protected against phishing in real time. - -!</files/google-chrome/chrome-blame.gif! - -Now, if everything goes wrong, you know it's definitely _someone else who did it_. If you read the comic book between the lines, you'll notice a not-so-subtle message to the end users: - -* The browser is sandboxed, so if anything goes wrong, blame others (Adobe for Flash, Sun for Java, Microsoft for some other crap) -* You can monitor the resource consumption of each tab, _ergo_ what _each website_ uses. This means that if a site is slow is definitely the web developer's fault. - -This is basically what "John Resig":http://ejohn.org/blog/google-chrome-process-manager/ immediately pointed out when the comic came out. - -h3. How it feels - -Google Chrome is clearly a very nice product to use. It's as intuitive as IE for the average Windows user, it has the best of Firefox and Opera features and it's even more sleek than Safari. The UI, in my opinion, is a true masterpiece and feels well though out. - -Everything is aimed to be intuitive and does not get in your way: it just works. You want to download a file? You can just do it, without worrying about where to save it: it will appear in a "download bucket" at the bottom of your tabs, and you can just drag and drop what you downloaded anywhere you like, if you need to. -Why nobody thought of this before? - -Even the program settings are simple to understand. The Options dialog is divided in "Basics", "Minor Tweaks" and "Under the Hood". The idea is that anyone can understand the Basics, some people may tweak a bit more, and only geeks may want to go beyond that. This is particularly evident in the Italian translation (it comes bundled with 40 localizations, by the way), where they translated "Under the Hood" with "Roba da smanettoni" which means something like "Stuff for people who fiddle with PCs". I personally found this translation a bit irritating, but anyway... - -h3. Media Coverage and Target Audience - -The overall impression is that Google wanted to target end users with this browser, but also appeal geeks, too. This makes sense from a marketing point of view. While 90% of geeks switched from IE to another browser, ordinary people are still stuck with IE. Why? Because alternative browsers have gained a reputation of being geek-friendly (which, by popular belief, does not mean user-friendly). - -Google's marketing strategy is quite clear, and it doesn't seem to be failing on any point: - -* They targeted Windows first, because that's what the bulk of IE aficionados uses. -* They did their best to make it as user-friendly as possible: the sleek GUI, the comic book, etc. -* They spread the world like crazy: every blog is talking about it, but also major news sites like BBC and CNN. When I got to work, a collegue of mine asked me if I tried the new Google browser and if I read the comic. She heard it at the radio. Here _in Italy_! -* At the same time, they made the whole thing open source, released APIs and emphasized this, so that "computer fiddlers" couldn't resist. - -To me, it looks like Google Chrome stands a good chance to succeed where others have failed: drive most of the Internet population away from Internet Explorer. - -h3. Open Source, testing and quality - -Google is well known for its massive infrastructure. Moreover, Google is the only "entity" (let's call it that way, shall we) who _knows_ and _visited_ almost every web page on the Internet. If something is not "on Google", it may well not exist at all: this is not strictly true, but it's the user perspective and ad the end of the day that's all that matters. -Google, as a consequence, has virtually unlimited resources (compared to any other possible competitor) and virtually unlimited knowledge of the Internet, which makes automated testing no more than a joke. - -From the Google Chrome Comic: - -_"Within 20-30 minutres of each new browser build, we can teswt it on tens of thousands of different web pages"_ - -...and that's certainly not an understatemend: you can believe that. - -!/files/google-chrome/chrome-tests.gif! - -Google seems very concerned of building a "rock-solid" browser rather than being the coolest guy in town, and that's a good sign. Google is _smart_, remember? - -As if it weren't enough, the entire thing (the rendering engine, the javascript implementation and the whole code of the broswer) is 100% open source which means, in a nutshell: - -* Free testers -* Free developers -* Good publicity - -!/files/google-chrome/chrome-os.gif! - -If things go as planned, Chrome may become the most widely tested piece of software in the world. Let's just see how the community takes this. - -h3. Why it matters - -Everyone seems to have gone crazy about Chrome, even long before it was made available. Why does it matter, anyway? Isn't it just a browser, at the end of the day? Well, yes, but: - -* It's 100% open source. If you like something of it, you can get it, modify it, bundle it in another project and redistribute it. Give it a few weeks and extensions which use some of Google's new API will flock to the 'fox like crazy. -* It's small, fast and very promising. Sure, it's not perfect, but YOU can help improving it. Get it? -* It's on Windows, so it will reach the majority of Internet users... in theory. - -Last but not least, it comes bundled with "Gears":http://gears.google.com/, i.e. what Google would like you to use for RIAs. That's perhaps the only "subliminal" message they are trying to send to their users (for now, at least). -As a matter of fact, nothing prevents them from using Chrome as a way to promote their technology and products. But at the same time nothing prevents a random developer to just fork the project and distribute a _neutral_ and unbranded version of Chrome. - -See? Google is not evil at all, it's just smarter than others. - -h3. The Bottom Line - -Google showed us once more that their "innovation" can be summarized with the following: - -_*"Do not invent new things, just make them better"*_ - -They didn't invent Internet search: they just made it better and smarted. The same philosophy applies to Chrome, too. Some examples? Sure: - -* They didn't create a new rendering engine, they used an existing one -* They analyzed Safari's neat GUI tricks and implemented something even better. -* They added an IE8-like domain highlight in the URL. -* They got the Firefox's AwesomeBar and improved it. -* They got Opera's Speed Dial and improved it. -* They got IE8's one-process-per-tab architecture and improved it. -* They didn't think of a Javascript JIT first, they just made it widely-available first. -* They didn't think about merging the address bar with the search bar, Mozilla announced it first, but Google released it before they did. -* Safari 4 allows users to create shortcuts for their favorite web apps, but unfortunately it's only out for developers... - - -Google did it, again. Exactly as planned.
@@ -1,87 +0,0 @@
------ -permalink: google-earth -filters_pre: -- bbcode -title: "Software Review: Google Earth" -comments: [] - -date: 2005-12-10 12:48:59 +01:00 -tags: -- review -- google -type: article -toc: true ------ -Almost every person on Earth has seen an image taken from a satellite at least once in his or her life: now imagine putting all those images together to make a sort of "patchwork world"...this is unfortunately not as simple as gluing atlas maps together, because height, resolution and orientation must be considered. However, "A computer could do all that"...and so it happened![b]In the beginning...[/b] - - -[url=http://www.nasa.gov/home/index.html?skipIntro=1]Nasa.gov[/url] has always been one of the most famous and most visited websites in history, and among the resources you can find there, besides the pictures of space-related objects and phenomena that everyone flocks to, are satellite pictures of Earth. -Perhaps one of the most wonderful things NASA did software-wise was the realization of an open source software called [url=http://worldwind.arc.nasa.gov/index.html]WorldWind[/url]: [i]"World Wind lets you zoom from satellite altitude into any place on Earth. Leveraging Landsat satellite imagery and Shuttle Radar Topography Mission data, World Wind lets you experience Earth terrain in visually rich 3D, just as if you were really there."[/i] -A really cool thing indeed, if you ask me. So cool that people from all over the world started downloading and using it, causing problems on NASA's server for the project, which was extremely busy or even unreachable. The download is now mirrored on Sourceforge, download.com, and Wayne State University, but the server problem has to do with getting to the server to access the images. So why bother downloading if you know it doesn't actually work, regardless of the reason? - -The alternative, until a year or so ago, was a product created by "Keyhole Corp." - I won't bother posting a link to the site, you'll read why below. Guys from Keyhole basically created a similar program that was much faster, with no server timeouts and better image resolution. Of course, they thought they could charge for it, and I believe that back in the day some people actually paid $70 for what was seen afterwards as a piece of software with a great potential that was never tapped. - - -[b]Google enters the scene[/b] - -"Hey, look! It works! Now let's get it and do it better!" - This is, in a nutshell, Google's policy in the last 2 years or so: they find relatively small(er) companies that produced something with potential, buy it, and they either improve and resell the product, or give it away for free, getting income from advertising. It happened before, with Picasa and Blogger, for example, and now, with Keyhole as well (for a pretty complete list of Google's acquisitions and possible future targets, have a look [url=http://www.kuro5hin.org/story/2005/6/12/143721/743]here[/url]). -This is not a bad thing for the end user, because often new Google-branded products are free or discounted, and Google is happy because it can still make a huge profit from it: if you ask me, that's a much better policy than Microsoft's ("Create something which doesn't work, try to patch it eventually, force people to use it"), at least from a certain point of view. - -Anyhow, Google [url=http://www.google.com/press/pressrel/keyhole.html]purchased[/url] Keyhole Corp. on October 27th, 2004. The next day, Google said "let's drop Keyhole's price to 30 bucks" - And Google saw that it was good. - -Then everything went (almost) silent, until June 18th, 2005, seven months and one day since the acquisition of Keyhole, Google officially [url=http://slashdot.org/article.pl?sid=05/06/28/1733229&from=rss]released[/url] a new product, called [url=http://earth.google.com/]Google Earth[/url]. [i]"Thus the heavens and the earth were finished, and all the host of them" [Gen. 2:1][/i] - - -[b]Welcome to a brand new world[/b] -Pseudo-biblical jokes apart, Google's new Earth can be downloaded and installed FOR FREE! Go and [url=http://desktop.google.com/download/earth/index.html]get it[/url] because it's interesting, but please don't click on the link I provided before because you'll find out that Google won't let you download it, because they got too many requests, so... -So that's why, also thanks to Google, I found some [url=http://www.majorgeeks.com/download4659.html]Major Geeks[/url] mirrors and got it from there. The file is 10 MB, so if you have 56K dial-up don't bother, because it needs at least a 128Kbps connection to run correctly. Below are the minimal system requirements, the recommended ones, and what my PC has. As you can see, processor speed actually doesn't matter if you have a good video card and a good Internet connection. - -[i]Minimal Configuration[/i] - * Operating system: Windows 2000, Windows XP - * CPU speed: Intel? Pentium? PIII 500 MHz - * System memory (RAM): 128MB - * 200MB hard-disk space - * 3D graphics card: 3D-capable video card with 16MB VRAM - * 1024x768, 32-bit true color screen - * Network speed: 128 kbps ("Broadband/Cable Internet") - -[i]Recommended Configuration[/i] - * Operating system: Windows XP - * CPU speed: Intel? Pentium? P4 2.4GHz+ or AMD 2400xp+ - * System memory (RAM): 512MB - * 2GB hard-disk space - * 3D graphics card: 3D-capable video card with 32MB VRAM or greater - * 1280x1024, 32-bit true color screen - * Network speed: 128 kbps ("Broadband/Cable Internet") - -[i]h3raLd's crappy PC's Configuration[/i] - * Operating system: Windows XP - * CPU speed: Intel? Pentium? PII 350 MHz - * System memory (RAM): 256MB - * 30 GB hard-disk space - * 3D graphics card: nVidia GeForce II MX 32MB VRAM - * 1024x768, 32-bit true color screen - * Network speed: 1240 kbps - -I downloaded it, installed it, and it worked fine on my PC. Please note that Google has been pretty specific regarding the compatible OSes, basically only Windows 2000/XP are supported: very old systems (Windows 95/98/Me and alike) and very new systems (Windows Server 2003, X-x64) are not meant to be able to run it. Mac users shouldn't bother trying, while Linux users will be glad to read that it's supposed to work under [url=http://appdb.winehq.org/appview.php?versionId=3254]wine[/url] (rated "bronze"). - -Let's suppose you installed the program and you're running it. If you don't want to try it because you are still unsure if it's worth or not, you can have a look at this [url=http://newrecruit.org/archives/2005/may/googlekeyhole]article[/url], and in particular at the screenshots. -I found it quite easy to use, as are nearly all Google applications; the interface is quite pretty and does the job. You'll immediately notice the main panel where the world and images will be shown, then there's a bottom panel mainly used for navigation, while on the right the three main functions of the program are clearly presented in 3 tabs ("Fly to", "Local Search" and "Directions"), together with two other tabs below for adding/removing details from the map and managing your saved places and results. - -As it's a Google product, one of the most handy features is the search engine. You can put in a city, town, even street or building, restaurant, or place of interest, and the program should be smart enough to find it and take you there. With the "Fly Now" feature it's possible to just center the view on one place, for example. The resulting map will be at a certain height, depending on what term you searched for. You can now zoom in or out with your mouse wheel or with the buttons provided in the navigation panel, and you'll see the map updating. This is a gradual process and depends mainly on your connection speed, but also the available RAM, the video card, and the processor speed. - -As it's still a relatively new product, don't expect to find everything... or better, you can find (nearly) everything, but it might not be at the highest resolution, for example, and thus appear blurred on zoom. Currently the USA, the UK, and Western Europe are the places with the most details. In particular, in the major cities of the US you can also see a 3-D re-creation of the buildings which, even though in plain gray, actually reproduce the real shape of the element. -Furthermore, in the navigation panel you can also tilt up and tilt down the view! So the end result is a map which is half real and half virtual. -If you search for another place, you will not be taken there instantaneously, but instead Google Earth zooms out appropriately and moves around the globe to where the new place is and zooms in appropriately: a really nice effect. - -Also keep in mind that you can add or highlight details on the map, like grids, roads, names, places to see, restaurants, stadiums, railroads, boundaries and borders, different types of schools, earthquake areas, and - even if the satellite maps used can be up to three years old - statistical data about Cloud Coverage and a lot of other things. - -The other two functions, "Local Search" and "Directions" allow you, respectively, to perform a search restricted to the area (i.e. Trafalgar Square - London, UK) and get directions between two places, highlighting the suggested path. Also, all places you see can be saved, marked, and printed: wonderful. - - -[b]Limitations and Opinions[/b] - -As a Beta, Google Earth does come with limitations: as I wrote earlier, only USA, UK, and Western Europe are (almost) fully supported, but you can already get some pretty decent pictures from 200 miles up anywhere in the world. Another limitation is that since the images often come from different satellites, "patches" can be seen sometimes, where part of a picture of an area is darker or lighter than another. - -However, you can't really complain about this software, because it's free and obviously Google's server seems to be always available, unlike NASA's. f you want more, Google Earth is available as a Plus edition (20$) and Pro edition (400$), with more [url=http://earth.google.com/product_comparison.html]features[/url] and support. -What of Microsoft? Well, Microsoft is said to be planning to "strike back" during this summer, with [url=http://www.google.com/url?sa=U&start=1&q=http%3A//blog.searchenginewatch.com/blog/050523-125208&ei=hy3EQpqoGcmciALB8vinCw&sig2=ZNIj3_KWXuDMr4_2WmrCNA]MS Virtual Earth[/url], let's just wait and see...
@@ -1,28 +0,0 @@
------ -permalink: h3rald-71 -filters_pre: -- redcloth -title: Introducing H3RALD.com v7.1 -comments: [] - -date: 2008-10-27 05:29:00 +01:00 -tags: -- website -- rails -type: article -toc: true ------ -I finally decided to redesign my web site. About 2 years passed since last time and I think this was long overdue: a lot of people liked the black _Nitefall_ theme, but a lot of people found a bit too dark for their liking. - -I decided to go for something more -boring- traditional this time: white background and only black header and footer. I think the new design improves the overall readability of the site, also because this time I kept thing simple: - -* No more sidebars – Who needs them anyway? Who wants to see my "delicious bookmarks":http://www.delicious.com/h3rald on _every single page_? Who wants to see that annoying Web 2.0-ish tag cloud listing all the tags I've ever used from 2006 onwards? I suddently realized that the right column was nothing more than wasted space, so I removed it altogether. -* No more differentiation between _articles_ and _blog posts_ – As a matter of fact, I'm not posting little pointless tidbits everyday, it's more likely just once a week or even once a month. When I post though, I tend to make it worthwhile both for me and the readers by writing about something which may interest people, for a change. In short: this may not be a "traditional blog" anymore, just a publishing platform for my articles. -* No more "previews" – From now on, only the title of each articles is displayed in the home page, in the archives and even when searching. If you want to read an article, all you have to do is click on its title. No more "Read More" links. -* Just three main pages: "Home":/, "Archives":/archives, and "About":/about. Although there may be some more for special projects, at some point. -* Use the "Archives":/archives to find my articles. There you'll find a list of the 20 most used tags, a search form, and a timeline listing _all_ my articles from 2006 onwards. -* Use the tiny palette on the left side of each page to perform common actions like bookmarking, scroll up and down, etc. You can read more about it on the "About":/about page. - -I hope you like the new design, or at least I hope it makes my articles more readable. However, I'm open to suggestions, as usual. - -P.S.: I dropped with Internet Explorer 6 compatibility According to my stats, less than 5% of my visitors use it, so it's not worth the extra hassle.
@@ -1,61 +0,0 @@
------ -:title: H3RALD.com v8.1 Released -:subtitle: Featuring a a brand new newspaper-like design, powered by HTML5 and CSS3 -:type: article -:toc: true -:date: 2010-09-23 14:04:25.052000 +02:00 -:permalink: h3rald-81 -:tags: -- website -- webdevelopment -:intro: | - Just "over a year ago":/articles/take-back-your-site-with-nanoc I released the 8th version of this web site. The biggest change then was abandoning the Rails-powered "Typo":http://wiki.github.com/fdv/typo/ blogging platform in favor of "nanoc":http://nanoc.stoneship.org/, arguably the most versatile static site generator out there. - - A year later, I am still very happy with nanoc, hence there's no need for another major release. Nonetheless, I decided to improve the site's overall design and image, making it (hopefully) easier to use and more pleasant to the eye. -:extended_intro: | - I always had a problem finding the right theme for my web site. I always wanted to find something related to the word _herald_, so in the last release I went for a herandry-oriented theme. For this release, I decided to go for a newspaper-style layout: after all, the word _herald_ is often used in newspaper titles, and I picked the name "h3rald" after the "International Herald Tribune":http://global.nytimes.com/?iht. - - Also, I was desperate to try out the new features offered by HTML5 and CSS3, and a newspaper layout seemed a good excuse to use columns. ------ -$[document.intro] -section[ - @title[Browser Compatibility] - txt[ -Although I shouldn't really say this, the site is meant to be viewed with a WebKit-based browser, really. It works in other (modern) browsers (read: no IE6), and it degrades more or less gracefully if a particular feature is not supported. - -That being said: -* IE7 and IE8 just barely render it (Javascript is used to "patch" the DOM with the new HTML5 elements) -* Firefox 3+ renders pretty much everything right. -* Safari and Chrome render the site as it is actually meant to be rendered - -Nobody ever died from not being able to see CSS3 rounded corners anyhow. The most important thing about this site is its content, and I made sure that whatever browser you're using you can still read it. - ] -] -section[ - @title[Columns and hyphenation] - txt[ -As I previously stated, I couldn't wait to try out CSS3 columns so I kinda went crazy on the home page, but just there. Some may argue that they are not suitable for web use of course, but I think they contribute to give the site layout a unique feeling. - -The problem with having columns is of course text alignment: justified text looks good, but unless you hyphenate text properly it shows a lot of blank space. Luckily, I discovered "hyphenator.js":http://code.google.com/p/hyphenator/, which solved the problem nicely. - ] -] -section[ - @title[CSS and layout improvements] - txt[ -I made a point out of improving the old stylesheet to make the site easier to read and generally prettier. Beauty is in the eye of the beholder, but still, I think the new stylesheet brings some improvements, especially concerning text (the "Gentium":http://scripts.sil.org/gentium font is used throughout the site) and syntax highlighting. - -Moreover, I worked on streamlining navigations across different sections of the site, in particular on article pages: - -image[\/$[site.root]/img/pictures/h3rald_81_article.png] - ] -] -section[ - @title[Under the hood] - txt[ -Besides appearence, the new site also features some improvements in its underlying business logic. In particular: -* Better nanoc "Rules":http://github.com/h3rald/h3rald/blob/master/Rules -* Improved "Glyph":/glyph/ integration, by extending nanoc "RuleContext":http://github.com/h3rald/h3rald/blob/master/lib/glyph_context.rb -* Minor updates to the custom "Rake tasks":http://github.com/h3rald/h3rald/blob/master/tasks/site.rake -* "Disqus":http://disqus.com/overview/ comments - ] -]
@@ -1,122 +0,0 @@
------ -:permalink: h3rald-83 -:title: H3RALD.com v8.3 Released -:subtitle: A new minimalist design, powered by Twitter Bootstrap -:type: article -:intro: | - One of the many things that really bothered me about my web site was the fact that it didn't look good on my iPhone, or any small screen for that matter. - - Years ago I "read about":http://www.alistapart.com/articles/responsive-web-design/ responsive web design, media queries, etc., but I never had the will or the time to dive into the subject. Then "Twitter Bootstrap":http://twitter.github.com/bootstrap/ came out, and it changed _everything_. -:extended_intro: | - Not only Bootstrap provides a very solid HTML boilerplate and grid system, it also comes with some very nice and complete styles for every HTML element, a few Javascript-enhanced UI components, and best of all it is fully responsive. -:tags: -- website -- webdevelopment -:date: 2012-12-27 23:41:34.376991000 +01:00 -:pdf: false ------ -$[document.intro] - -§txt[ - @title[Getting to know Bootstrap & its CSS wizardry] - -Redesigning H3RALD.com using Twitter Bootstrap turned out to be fairly easy. I headed up to the "Customize and Download":http://twitter.github.com/bootstrap/customize.html page and set a few variables like the font to use (the beautiful "Crimson text":http://aldusleaf.org/crimson.php), the link color and so on, and downloaded the lot. - -I more or less completely forgot about my old CSS stylesheets and went with Bootstrap all the way. I was happy with a lot of the defaults, but I had to add a few rules and overrides for: -* headings -* line heights -* A few custom classes I use extensively, like add a @text-align: justify;@ for the @hyphenate@ class. - -Now, one of the cool things of Bootstrap is that it comes with smart defaults, and that it lets you add specific features to elements simply by adding a CSS class to them. Take a look at how "buttons":http://twitter.github.com/bootstrap/base-css.html#buttons are constructed, for instance. Normal button? Sure: - -table[ - tr[ - td[codeblock[<button class="btn">Click Me!</button>]]td[<button class="btn">Click Me!</button>] - ] -] - -That's grey with black text. Boring. Want it red? Sure, add the @.btn-danger@ class: - -table[ - tr[ - td[codeblock[<button class="btn btn-danger">Click Me!</button>]]td[<button class="btn btn-danger">Click Me!</button>] - ] -] - -Too big? No problem, make it smaller with @.btn-sm@, so we have: - -table[ - tr[ - td[codeblock[<button class="btn btn-danger btn-small">Click Me!</button>]]td[<button class="btn btn-danger btn-small">Click Me!</button>] - ] -] - - -Wouldn't it be nice to have a nice icon in it? Add an empty @<i>@ element with a suitable class and there you have a nice "Glyphicon":http://twitter.github.com/bootstrap/base-css.html#icons before the button text (or you can use other icon fonts, like "FontAwesome":http://fontawesome.io/). - -table[ - tr[ - td[codeblock[<button class="btn btn-danger btn-sm"><i class="fa fa-check"></i> Click Me!</button>]]td[<button class="btn btn-danger btn-sm"><i class="fa fa-check"></i> Click Me!</button>] - ] -] - -...You get the picture. And it works surprisingly well -- if you embrace its philosophy, that is. Just like Rails & Co.: an _opinionated_ framework. - -The only thing that bugged me about all this was that by adding smart CSS classes to elements you're actually specifying how something looks like by polluting HTML code. Granted, if your stylesheet doesn't include a @.btn-inverse@ your buttons won't automagically become black, but you know what I mean. Although in a very nice way, by following Bootstrap's way of doing things you are no longer separating content from presentation. And in the next six months, when I'll ditch Bootstrap for something better, all the previews of the code snippets above won't work unless I keep using the Bootstrap stylesheet or at least some of its button classes. - -The real problems arise for the stylesheets provided for general elements. By default, Bootstrap styles tables with no borders or colors. What if I wanted just ordinary tables to be striped and bordered? Sure, I can add the @.table-striped@ and @.table-bordered@ classes to all tables, and that's it. In EVERY table. Or of course undo bootstrap's magic by overriding the CSS rules for ordinary tables, to include the rules specified for @.table-striped@ and @.table-bordered@. Copy & paste someone else's code? Not nice. - -Luckily, using "SASS":http://sass-lang.com/ finally paid off, and here's how to do it in a nice and tidy way: - -<notextile> - codeblock[=@import "_bootstrap.scss"; -/* The bootstrap stylesheet - just changed its extension and prepended an underscore, nothing more */ - -table { - @extend .table; - @extend .table-striped; - @extend .table-bordered; -} - =] -</notextile> - -There you go. All tables (ordinary @<table>@ elements with no silly classes attached) are now bordered and striped. - -] - - -§txt[ - @title[Header & navigation bar] - -As far as the main site header goes, I decided to use the same one for all pages, containing: -* The site logo -* The search input box (powered by "Google Custom Search Engine":http://www.google.com/cse/ -* A _responsive_ navigation bar with links to all the main sections of the site - -As far as the navigation bar goes, that's pure Bootstrap goodness, nothing new there (except the serif font), "look it up":http://twitter.github.com/bootstrap/components.html#navbar. - -For the logo... Well, I had this nice plan of using just plain CSS and web fonts to make it (hell, it's basically the word "H3RALD", with the 3 slightly bigger and moved a bit). It worked mostly fine (in webkit browser and in Opera), but Firefox didn't like it much, and IE... well, some old versions of IE don't play nice with web fonts, so I decided to make a nice PNG image and stick it there instead. Less hassle, it works everywhere, job done. - -The search input box was a bit more of a challenge. I read up on the new "Custom Search Element Control API":https://developers.google.com/custom-search/docs/element, discovered that Google decided that web designers don't know Javascript or CSS nowadays and proposed a new API that has numerous advantages like: - -blockquote[ -* Easy to use syntax—no JavaScript knowledge required. -* Custom Search elements (search boxes and results pages) are rendered based on settings stored on the CSE servers (along with any client-side customization). Server-side changes don't require you to copy and paste any new code into your site -] - -Thanks Google. Now every time I change my stylesheet I have to remember to go back to your page and change the link colors etc. And if I decide to hide the page URL underneath the link in the results? I can't. And that's why I decided to reverse engineer their CSS and provide my overrides. Nasty, but at least I have some control! They're all "here":https://github.com/h3rald/h3rald/blob/master/content/styles/_vendor.scss, if you are curious. -] - -§txt[ - @title[Other minor changes & tweaks] - -Other changes from the previous design were relatively minimal: -* No more newspaper-style home page with five columns, two will suffice. -* A brand new "Tags":/tags/ page, listing... well, all the site tags that were previously in the "Archives":/archives/ pages (now only listing articles by month of publication) -* No more Links page. No need for it. -* A new, minimalist "Contact":/contact/ page, featuring some of the nice "Zocial":http://zocial.smcllns.com/ font icons. -* No more social buttons on pages. If you use social networks like Twitter, Facebook or Google+ you already know how to share items using bookmarklets or browser extensions. No need to plague my web site with their nasty buttons, badges, ribbons & alike. -* No ads! I have a full-time job, my site uses free and open source technologies, and I write because I like to do so, not to make money. And I can afford the few bucks necessary to pay the hosting provider. That's why there are NO ADS on H3RALD.com anymore ^(*)^. - -^(*)^: For now, that is. Then I'll probably change my mind, but until then enjoy the true no-ads experience! -]
@@ -1,83 +0,0 @@
------ -permalink: h3rald-v7-overview -filters_pre: -- redcloth -title: Back on Track... -comments: -- :date: 2007-06-24 08:43:42 +02:00 - :author: kabturek - :url: http://kabturek.info - :id: 4 - :body: |- - please please allow a diffrent color scheme ( black on white) or whatever .. now i have to use a bookmarklet on every page that resets the styles :) - - greets, -- :date: 2007-06-24 09:06:44 +02:00 - :author: anon - :url: "" - :id: 5 - :body: I always suspected this was why Cake might eventually fail. Not because the code is weak, but because the core community drives people and possibilities away. Rails has always had a much better culture of openness and freedom. Interesting to see the first high-profile switch... -- :date: 2007-06-24 10:20:22 +02:00 - :author: Fabio Cevasco - :url: "" - :id: 6 - :body: |+ - lol @ kabturek... The new theme aims to be relaxing for the eyes, energy-saving and different from the previous one (not that there was anything wrong with it, I just wanted to try something completely different), however I can understand that it could be a bit disturbing for someone... I'll see about changing it or implementing a theme switcher... who knows! - - - -- :date: 2007-06-26 04:38:53 +02:00 - :author: AD7six - :url: http://www.noswad.me.uk - :id: 9 - :body: |- - Hi H3rald, - - I hope to still find your articles interesting, whichever MVC flavour they may be. - - I like the new site with the exception that I can read almost nothing of what is written in red :). Hypocritical though it may seem (I know that kabturek has his bookmarklet to hand when he visits my site, that he isn't alone, and that I also need to put that style switcher in place). Please choose a brighter red or something else a bit higher contrast :) - - Cheers, - - AD -- :date: 2007-06-26 04:49:43 +02:00 - :author: AD7six - :url: http://www.noswad.me.uk - :id: 10 - :body: |- - PS. The nav bar is completely invisible (at least to me) until I mouse over. I like black themes but atm it feels like my monitor has it's contrast set too low and brightness too high - except of course it hasn't. I wrote about "colour contrast":http://www.noswad.me.uk/MiBlog/Contrast before, you might want to test your colours out on "Snook's colour contrsat checker":http://snook.ca/technical/colour_contrast/colour.html - In any event good to see you writing again. - Cheers! - AD -date: 2007-06-22 14:38:00 +02:00 -tags: -- website -- rails -type: article -toc: true ------ -...or better, on "Rails":http://www.rubyonrails.org_. -Yep, this 7th (!) version of the H3RALD website is powered by the overly-popular Ruby web framework _and_ by the "Typo":http://www.typosphere.org blogging platform. - -Nope, I decided not to re-develop my website entirely from scratch this time, although I was tempted to, for three simple reasons: - -# My "coding time" is close to non-existent nowadays, and even with a framework like Rails re-developing a site from scratch would have taken at least _some_ time, which at the moment I don't have. -# Typo is a fairly robust and feature-rich blogging platform, and after learning a little bit of Rails I could customize it to my needs straight away. URLs didn't break thanks to Rails' routing system, migration was easy enough, and developing the missing bits (like a rudimentary BBCode parser and a TextLinkAds sidebar) wasn't hard at all. -# I wanted to take a break from my site, not code it again. -_Fair enough, but why the new site anyway?_ - -Again, there's more than one answer: - -* Lately I didn't feel comfortable sporting a Cake-powered website \- that makes sense, to an extent, right? Good. -* I got fed up with spam. I wanted to re-open comments but I didn't want to implement spam protection for the old site. -* To be totally honest, I got fed up with PHP itself as well, after trying out Ruby for a few days and ordering and reading the 2nd edition of the "PickAxe":http://www.pragmaticprogrammer.com/titles/ruby/, which I _highly_ recommend. - -...But let's say something about what's new in this new release, shall we? - -* A new, black (and red) theme. Something completely different. Probably not that good, but quite useful: Every day I check my site from my laptop at work, and if it looks like a big black blob I know that I have to regulate my monitor. I showed it to my parents on their old monitor, and they realized that perhaps it's time to buy an LCD one... -* Comments, trackbacks, desktop client support, theme support, a cool admin area and everything else Typo offers. -* Full RSS feeds. With no ads. So you don't need to see this black blob anymore, if you really don't like it. -* No projects or bookmarks, just my blog and my articles. Let's keep it simple. - -More to come... -
@@ -1,23 +1,9 @@
----- -:permalink: hastyscribe -:title: Introducing HastyScribe -:subtitle: A simple command-line application to generate self-contained HTML documents -:type: article -:intro: | - Did you ever have to write a document, but didn't want to (or couldn't) use MS Word or another WYSIWYG word processor? Yep, I agree: that's what "Markdown":https://daringfireball.net/projects/markdown/ is for. - - Luckily, there are a lot of editors that support Markdown out there (I just installed "MacDown":http://macdown.uranusjr.com/ myself), and they work great, most of the time. Unfortunately though, they often: - * Generate HTML _fragments_ instead of full documents - * Don't include a proper stylesheet - * Generate more than one file - - The last one on the list in particular, is true for all of them: the stylesheet may be embedded in the document, but if you want to use images, they are managed as separate files; and the same thing happens if you want to use custom fonts. That's how HTML works, after all... right? Nope. - -:tags: -- writing -- hastyscribe -- opensource -:date: 2014-07-20 19:31:32.000000000 +01:00 +title: "Introducing HastyScribe" +content-type: article +subtitle: "A simple command-line application to generate self-contained HTML documents" +timestamp: 1405881092 +tags: "writing|hastyscribe|opensource" ----- Did you ever have to write a document, but didn't want to (or couldn't) use MS Word or another WYSIWYG word processor? Yep, I agree: that's what [Markdown](https://daringfireball.net/projects/markdown/) is for.@@ -184,3 +170,4 @@
An example document? Sure, here's the official [HastyScribe User Guide](/hastyscribe/HastyScribe_UserGuide.htm) (and here's the corresponding [source file](https://raw.githubusercontent.com/h3rald/hastyscribe/master/doc/HastyScribe_UserGuide.md)). If you're interested in giving HastyScribe a try, head over to the [project page](/hastyscribe/) and grab it. The pre-compiled binaries are only for Windows and Mac, but I think Linux/BSD/\*nix enthusiasts won't have any trouble compiling Discount and HastyScribe from source anyway! +
@@ -1,22 +0,0 @@
------ -:type: article -:tags: ['programming', 'vim'] -:date: 2009-11-12 13:34:29.894000 +01:00 -:permalink: herald-vim-021 -:title: "herald.vim 0.2.1 released" -:toc: false -:summary: Minor changes to the herald color scheme for Vim. ------ - -!>/images/herald.vim/0.2.1_release.png! - -%(dropcap)I% just updated the "Herald Vim color scheme":/herald-vim-color-scheme/ to improve the readability of delimiters and search results. - -Delimiters are now red (the same color as operators) instead of yellow, so that you can tell the start and end of a string or regular expression more easily. Additionally, search results are no longer highlighted with black text on an orange background for two reasons: -* the orange background is a bit too strong -* the black foreground causes letters to become _completely hidden_ by the _cursorline_ and _cursorcolumn_ - -Search results now have a gray background and a yellow background, as shown in the screenshot on the right. - -If you have any constructive suggestion on how to improve this color scheme, don't hesitate to add a comment to this post! -
@@ -1,122 +0,0 @@
------ -subtitle: "My very own VIM color scheme. Featuring 256, 16 and 8 color support, high readability and... pretty colors!" -permalink: herald-vim-color-scheme -filters_pre: -- redcloth -title: Herald (Vim Color Scheme) -comments: -- :date: - :author: Wm Tanksley - :url: "" - :id: 2712 - :body: | - Very nice. - - I also appreciate a color scheme that degrades elegantly to low-color modes, so that I can use the essentially same scheme even when I'm remotely logged in. Degrading to 256 is good, but can you degrade to 16? I use baycomb for exactly this reason; it's honestly not as nice as your scheme (for example, it doesn't highlight the cursor row and column), but it does have a lot of features, and it smoothly degrades to lower numbers of colors. - - -Wm - -- :date: - :author: Mario - :url: "" - :id: 2713 - :body: I still find Desert to be the best universal color theme for VIM. It works for any language and it distinguishes between more text elements than any other theme I have tried. -- :date: - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 2714 - :body: |- - @Wm Tanksley: - I will make it degrade to 16 colors, even if it won't look great, obviously... I'll try my best. - - @Mario: - Thanks for pointing out desert: I personally don't like it much, but I can check it out to see what elements it highlights and how. -- :date: - :author: Oz - :url: "" - :id: 2715 - :body: Brilliant scheme - you are enabling my laziness by doing such a good job I can now cross off of my todo list the task of customizing my own further. Thanks. -- :date: - :author: Johannes - :url: http://johanneshoff.com - :id: 2716 - :body: |- - Nice color scheme. I tried using moria as well, and you've fixed the biggest downside (to me, at least), which is to intrusive comments. - - Your vimrc file also gave me a lot of inspiration, by the way :) -- :date: - :author: "Beno\xC3\xAEt" - :url: "" - :id: 2717 - :body: Looks good, but the visual mode lacks contrast (for me). -- :date: - :author: "Caio Rom\xC3\xA3o" - :url: http://blog.caioromao.com - :id: 2718 - :body: Hey, that's the first theme I see which doesn't seem to suck when using `cursorline` and `cursorcolumn`. Thanks! -- :date: - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 2719 - :body: |- - Version 0.2.0 released! - - See "the new project page":/herald-vim-color-scheme for more information. -- :date: - :author: iain - :url: http://iain.nl/ - :id: 2720 - :body: It does look incredibly colorful. I don't know if I'll like it, but I will give it a spin. I am using ir_black at the moment. -date: 2009-06-17 06:11:00 +02:00 -tags: -- programming -- vim -type: article -toc: true -popular: true -intro: | - I use "Vim":http://www.vim.org a lot. It's my editor of choice when I code (mainly in Ruby), and also when I write my blog post and articles (mainly in Textile). - - One thing I always liked about Vim was it powerful syntax highlighting: there's probably a syntax highlighting file for every programming language ever created, even the new ones ("Nimrod":http://force7.de/nimrod/index.html? Sure, "here":http://www.vim.org/scripts/script.php?script_id=2632!). -extended_intro: | - Furthermore, Vim allows you to create color schemes, and that's surprisingly easy to do. Everything you need to do is in the "docs":http://vimdoc.sourceforge.net/htmldoc/syntax.html, but that may put you off, so you can just start by editing an existing one -- that's what I did.h3. InfiniteRed Black - - I've been using the "ir_black":http://blog.infinitered.com/entries/show/8 color scheme for near enough a year. It's an excellent color scheme, recommended especially for writing Ruby code: ------ -I use "Vim":http://www.vim.org a lot. It's my editor of choice when I code (mainly in Ruby), and also when I write my blog post and articles (mainly in Textile). - -One thing I always liked about Vim was it powerful syntax highlighting: there's probably a syntax highlighting file for every programming language ever created, even the new ones ("Nimrod":http://force7.de/nimrod/index.html? Sure, "here":http://www.vim.org/scripts/script.php?script_id=2632!). - -Furthermore, Vim allows you to create color schemes, and that's surprisingly easy to do. Everything you need to do is in the "docs":http://vimdoc.sourceforge.net/htmldoc/syntax.html, but that may put you off, so you can just start by editing an existing one -- that's what I did.h3. InfiniteRed Black - -I've been using the "ir_black":http://blog.infinitered.com/entries/show/8 color scheme for near enough a year. It's an excellent color scheme, recommended especially for writing Ruby code: - -!=/images/herald.vim/ir_black_vim_example.png! - -I honestly thought this was the best Vim color scheme until I discovered Moria... - -h3. Moria - -Recently I switched to "moria":http://www.vim.org/scripts/script.php?script_id=1464, mainly because I find it easier on the eyes. It's a matter of taste, of course: - -!=/images/herald.vim/moria_vim_example.png! - -The trick is in the background: it's not completely black. Still, I didn't quite like the colors, so I decided to write my own... - -h3. Herald - -Meet <strong> "herald.vim":/files/herald.vim </strong> (this is a direct link to the raw file, but you may also want to check my "stash":http://github.com/h3rald/stash/tree/master on GitHub or the "script page":http://www.vim.org/scripts/script.php?script_id=2684 on Vim.org): - -!=/images/herald.vim/herald_vim_example.png! - -To sum up, here's the _features_ offered by this new color scheme: -* It's easier to differentiate syntax elements; in particular reserved words like @if@ or @end@, constants (symbols) and identifiers (instance variables). -* Operators are highlighted and easier to notice. -* Dark gray background and black column/row selectors. -* Added highlight for titles (useful for Textile) -* Comments do not stand out, unlike in most color schemes -* Support for 256 color terminal (special thanks to "Wolfgang Frisch":http://www.frexx.de/xterm-256-notes/ for providing all the info and tools required) - -So what do you think? Is it tool colorful perhaps? How would *you* improve it? - -
@@ -1,105 +0,0 @@
------ -permalink: hlrb-review -filters_pre: -- redcloth -title: "Book Review: Humble Little Ruby Book" -comments: [] - -date: 2007-10-03 05:53:00 +02:00 -tags: -- ruby -- review -- books -type: article -toc: true ------ -After reading the very first paragraph of Mr. Neighborly's "Humble Little Ruby Book":http://www.humblelittlerubybook.com/ (HLRB for short, from now on) it was very clear to me that it was going to be quite an unconventional read: - -<blockquote> -"Yes, there is a Chapter 0. There is a little bit of introductory stuff we need to talk about before -we set you loose on Ruby. You wouldn't want to get psyched about a new gadget, get it home, -and then figure out you need batteries, a grapefruit, and the ability to speak three languages to -even open the box would you?" -</blockquote> - -That reminded me immediately of "Why's Poignant Guide to Ruby":http://poignantguide.net/ruby/. without a doubt. I don't know how it is possible that two witty, crazy, and very inventive guys grew fond of the same programming language. Anyhow, to reassure a few of you, you won't find any foxes or chunky bacon cartoons in HLRB, just some very well made (although still pretty unconventional) diagrams like this one: - -!/files/hlrb_diagram.png! - -Got the picture? Good. Let's move on...h3. Chapter 0: What'chu talkin' 'bout, mister? - -Chapter 0 is like an introduction to the book _and_ a place to put all the boring stuff you have to talk about in a book about a programming language: - -* What is Ruby? -* Installation procedure (on Windows, Mac OS X and Linux) -* Hello, World! - -Yes, you can skip this one safely without losing too much, unless of course you still need to install Ruby on your machine. - -h3. Chapter 1: Welcome to Ruby. - -<blockquote> -"This section aims to introduce the syntactic sugar and linguistic misfortunes of Ruby in the -quickest manner that will still allow for a full education on the subject." -</blockquote> - -As the first two lines of this chapter say, it's time to learn the basics of Ruby. You'll be quickly guided through strings, numbers, collections and variables. Every section with tons of code examples for your to play with. You won't find a full list of all the 876 methods of the String class, but you'll certainly learn the 10 most common ones at least (numbers are random, so no, don't count them). -Sure, yes, right, whatever... _if you really want_ you can skip this chapter too, but if you are already a Ruby Guru there's probably no need for you to read books about Ruby, right? Beginners need to read this chapter. It's compulsory, really, and pretty enjoyable, too. - -h3. Chapter 2: Break it down now! - -Or "learn how to segment your code" using methods, and... blocks & @Proc@ objects! Gosh. Our poor newbies will probably have a heart attack if they never heard about blocks and closures before. I almost got scared myself, because this is normally regarded as a pretty tough topic. Despite, at page 25 of the book you'll have to face your fears and dive into it. You'll survive, anyway. - -*Purist Warning:* Please be aware that sometimes the author may decide to use certain terms and construct which may not sound 100% right to your ears. Just move on, beginners will understand more things like _"Think of Proc objects as blocks that are pushed into variables."_ than anything else, guaranteed. - -After this section you'll finally be introduced to Ruby classes. Now, this can piss someone off, no doubt. Ruby is a _fully OO language_, so people _must_ learn about classes before anything else. I must admit I was a bit confused by the ordering of the topics at first, but if someone comes from a non-OO background he'll probably find this particular order more suitable. -This section will cover class and object basics in Ruby like defining classes, instantiating objects, access control, methods, attributes, scope, duck typing. Finally, you'll briefly look into modules as well. - -h3. Chapter 3: Hustle and flow (control) - -Finally, the author will deal with flow control. So things like @if@, @case@, conditional operators, loops and statement modifiers. In my opinion this section is truly excellent: it introduces all the control structures in a very simple and crystal clear way, often using flowcharts. A great chance even for absolute beginners to understand these basic but powerful concepts. -Towards the end of the chapter, you'll also learn how exceptions work: a clever way to tell people "you have to learn how to use exceptions from the very beginning". Really nicely done. - -h3. Chapter 4: The system beneath... - -Here comes the juicy stuff. Up to now you learnt the usual boring things you need to know when learning a new programming language, now finally you learn how to do _real things_. The chapter is full of complete and meaningful code snippets which will answer nearly all the questions you may have (at this time): - -* How do I read and write to a file? -* How do I handle threads and processes? -* How do command-line parameters and environment variables work? -* How can I perform specific Windows-only operations, like reading and writing to the Registry? What about OLE automation? - -Some of the big books out there will not spend too much time talking about Windows-only libraries, but I found HLRB gives quite a comprehensive introduction about them. - -h3. Chapter 5: Looking beyond home - -More juicy stuff. If you are looking for a tutorial to learn the basics about networking, from from sockets to FTP to POP and web services, look no further: this chapter does a very remarkable job introducing various network-related libraries, with the usual well written code examples. -If that's still not enough, you'll also have a chance to explore the wonderful world of distributed Ruby and of databases. Granted, this chapter won't tell you about the 1567 methods available in ActiveRecord (buy a copy of "Agile Web Development with Rails":http://www.pragmaticprogrammer.com/title/rails/ for this), but will tell you enough to get started. - - -h3. Chapter 6: It's a Library! - -The final chapter will go more in depth on some more advanced topics, like: - -* Strings -* Regexp -* Date & Time -* Hashing and Cryptography -* Unit Testing - -Everything with more and more useful code snippets. - -h3. The Appendices - -Last but not least, a HUGE collection of links and resources to learn more about Ruby, and a quick digression on C/C++ extensions... not much, but enough to wet your appetite. - - -h3. The bottom line - -HLRB is not _the only_ book you need to read about Ruby. It's better to make this clear otherwise I'll be hunted forever by Dave Thomas, Chad Fowler, DHH and all the other excellent Ruby hackers who also wrote very successful books (which I bought as well). HLRB is LITTLE and HUMBLE, after all: it doesn't aim at becoming the official Ruby Bible anytime soon (although a bird told me it may get updated _someday_ and include more stuff), but it is still a worthwhile reading. - -And of course I came to the very end of this review without mentioning the most important thing: this little wonder is free. All you need is to register to InfoQ (for free) and grab your "free copy":http://www.infoq.com/minibooks/ruby/. If you want you can buy a printed copy for just $9.95, if you feel in a good mood (please do). - -The most obvious strengths of this book are the abundance of code examples and very useful working snippets, and the unconventional style which makes it very readable and not boring at all. If I were to name some of its weaknesses (but only if you force me to), I'd say some parts should be expanded and more info on other libraries should be provided... but you never know what the future will bring us! - -Well done, "Mr. Neighborly":http://www.jeremymcanally.com/!
@@ -1,23 +0,0 @@
------ -permalink: holiday-house-for-rent -filters_pre: -- redcloth -title: Holiday house for rent -comments: [] - -date: 2009-04-24 01:54:00 +02:00 -tags: -- personal -type: article -toc: true ------ -<img src="/images/sessarego/outside.jpg" style="float:left; border: 1px solid #B80000; margin-right: 10px;" /> - -Part of my family house in the countryside is now available for rent! It's located in the small village of "Sessarego":http://italia.indettaglio.it/eng/liguria/genova_bogliasco_sessarego.html, a few minutes away from the coast, on the Italian Riviera. -We've been living there recently for 6 months when I started working and then moved to the city in order to be nearer to my workplace, but we still go there on holidays or on the odd week end, sometimes. - -The house is fully furnished, it has been recently renovated, and offers all major comforts and services (utilities, TV, internet, phone, etc.). It can be ideal as a holiday house for writers, programmers, or anyone who would like to take a break from the chaotic city life without giving up all the commodities of modern life, such as the Internet. - -<div style="padding: 30px"></div> - -*For more information, see "this page":/holidays and feel free to "contact me":/about if you want to book your stay or you needmore details!*
@@ -1,191 +0,0 @@
------ -permalink: ie-lovers-guide-to-firefox -filters_pre: -- bbcode -title: An IE Lover's Guide to Firefox -comments: [] - -date: 2005-11-25 18:47:00 +01:00 -tags: -- ie -- firefox -- microsoft -- firefox -- browsers -type: article -toc: true ------ -This is an attempt to explain to Internet Explorer users what Mozilla Firefox is, what its features are and how it can be enhanced or customized. Although this article is written primarily for IE users, it will make interesting reading for any Firefox user who wants to try to convince even the most hopeless IE fan to adopt Firefox for everyday use. -[b][u]My Point of View[/u][/b] -After using Mozilla Firefox for at least 2 years, I must admit two things: I'm biased towards Firefox, and I just about forgot what IE is like. When you ask someone who's been using Firefox for a while why he likes it, he would probably say something like, "because Firefox is much better than IE." Then he would start boasting about Firefox's features, like tabbed browsing, security improvements, popup blocking, extensions and so on, without thinking that maybe an accustomed IE user would be overwhelmed by all these new things, and in the end, might become even more obstinate in using IE. - -From here on, I'll play the part - for teaching purposes only, of course - of an Internet Explorer lover: IE is the only browser I've ever tried, and it is the only thing you need to surf the Net. I also talked with some IE users I know and I actually opened the browser myself (once again, for teaching purposes), and visited some sites. - -Why not have a real IE Lover write this article? Well, I thought about it, actually, and the only answer I could come up with was: there's no such thing as an 'IE lover', only a lot of people who are too used to IE to want to switch to Firefox. So, I'd better write this all myself; after all, a long time ago, I was just like those people. - - -[b]IE: I've used it for years and it does the job[/b] - -When I bought my computer from my favourite retailer, I immediately asked him: "Can I go on the Internet with it? Do I need to buy any particular program to visit websites?" and I was told that I didn't need anything at all, because it was all included in [i]Windows XP[/i]. I just had to click on the start button and choose "Internet" from the pop-up menu. "Straightforward," I thought. "Anybody can do that!" -I soon noticed that to browse the Internet, Windows used a program called Internet Explorer 6, which was actually part of the whole Windows infrastructure, somehow: it's the same thing, more or less, that I use to view directories on my hard drive, just online. This is the way it should be - so tightly integrated with the operating system that you hardly notice its presence! - -After a while, I learned some more about Internet Explorer, and I noticed that a lot of other applications could be integrated into it, like download managers and [url=http://www.adobe.com/products/acrobat/readstep2.html]PDF viewers[/url]. I also discovered that I could even [url=http://www.microsoft.com/windows/windowsmedia/mp10/default.aspx]listen to music and watch videos[/url] through my browser, directly from webpages. - -Then I discovered toolbars - and I wasn't entirely happy about them. I installed [url=http://toolbar.google.com/index_2]Google Toolbar[/url], and I really enjoyed its features, but I noticed that some other toolbars seemed to be installed, even if I didn't want to: I think some other program asked me to install them or something; I don't really know. All I do now is just set Internet Explorer not to display them, and change my starting page back to what I want, because sometimes, for some reason, IE starts with a different page than what I want. - -All that aside, what I really like about IE is that I can use it for anything and everything, even updating Windows! Microsoft has another cool technology called ActiveX which allows me to download and install Windows security patches and upgrades automatically! - -I really don't understand how people can run an operating system other than Windows: the Web was [b]made[/b] for Internet Explorer! It's even [url=http://www.microsoft.com/mac/products/internetexplorer/internetexplorer.aspx?pid=internetexplorer]available for Macintosh[/url]. - -A friend of mine told me he started using another browser called "Firefox" or "Firebird" or something, and he really likes it! He said it can be used on Windows, Macintosh, Linux, Solaris, and Unix, but when I asked him why it was so good, he told me, "Because it's better, and IE sucks." - -I don't understand how he can say that, especially because everyone I know uses Internet Explorer, Bill Gates made loads of money out of it, so it can't be that bad! Anyhow, I decided to give this Fire-thingie a shot. - - -[b][u]Face to Face with a Fox[/u][/b] -My friend told me to download this thing from a [url=http://www.mozilla.org/products/firefox/]website[/url], because it's free. So what? IE is free, too, because it came with my PC. Anyhow, I figured I'd just go and download it so he'd leave me alone about it. I read that Firefox - that's its name - is a free browser developed by the [url=http://www.mozilla.org]Mozilla Foundation[/url] which has received a lot of [url=http://www.mozilla.org/press/awards.html]awards[/url] from various well-known computer-related websites and institutions. It also seem to have a promotional [url=http://www.spreadfirefox.com/]website[/url] that says it has been downloaded nearly seventy million times! All the geeks seem to use it, and they love it. Maybe it's really good, or maybe they just don't like Microsoft. - -When I ran Firefox for the first time, Internet Explorer warned me that it couldn't verify the authenticity of the download, or something like that, but it says that all the time when I download stuff. -The first thing that happened was that I was prompted to import my favourites from Internet Explorer. Great! I didn't want to lose all the sites I have had bookmarked for years. So far, so good. - -There were no XP-related icons at all, just some weird ones I didn't like, especially the "Home Page" icon. It sucks compared to the one in IE. It doesn't integrate with Windows; it's just another application for browsing websites, like that [url=http://www.netscape.com]Netscape[/url] thing my friend made me try a few years ago. That at least had an email client and other things included with it. - -Firefox isn't worth the hassle: my favourite websites look "broken" and the thing is continuously complaining about plugins to view some pages. Some websites even tell me off now because I'm not using IE, in particular Microsoft, which doesn't let me update [url=http://v4.windowsupdate.microsoft.com/en/thanks.asp?]anymore[/url]. I switched back to IE after a few minutes of pointless struggle. - - -[b]Here's What You Get[/b] -Firefox and IE are two very different things, and I didn't like that, but I admit I had some prejudices, maybe because of the fact that my friend told me to download something and said it was better, and it really wasn't. So I decided to give both him and Firefox a second chance, and I asked him to explain to me why Firefox is better than Internet Explorer. -The first thing he mentioned was the different terminology used by the two browsers, which can be summarized as follows: -[code] -| Internet Explorer | Firefox | -| Internet Options | Options | -| Temporary Internet Files | Cache | -| Favorites | Bookmarks | -| Address Bar | Location Bar | -| Refresh | Reload | -| Links Bar | Bookmarks Toolbar | -| Explorer Bar | Sidebar | -| Copy Shortcut | Copy Link Location | -| Save Target As | Save Link As | -[/code] -and that once you get used to the new terms, finding what you're looking for is easier than in Internet Explorer. - -My friend also said a new feature implemented by Firefox is [i]popup blocking[/i]. So I told him that as of Service Pack 2, even Internet Explorer blocks popups (and before that, so did my Google Toolbar) but apparently Firefox had this feature long before Microsoft did. Good to know, but not really impressive. -What was more interesting was that Firefox lets you type in whatever you want in the Location bar, even if it's not a Web address, and you will still get the most relevant page available: for example, typing "firefox" takes me to [url]http://www.mozilla.org/products/firefox/[/url]. This is accomplished through Google's "[url=http://www.google.com/help/features.html#lucky]I'm Feeling Lucky[/url]" feature. IE doesn't do this: it gives me a search page for what I typed, or it tries to 'guess' the domain by adding a .com or .net after the word. - -Firefox still didn't really impress me: some nice tricks, but nothing that would make me want to switch. What started to make the difference was the [b][i]Tabbed Browsing[/i][/b] feature: I knew about it already, because IE started implementing that through the [url=http://toolbar.msn.com/]MSN toolbar[/url], but it's a bit[url=http://weblogs.mozillazine.org/asa/archives/008312.html]buggy[/url], so I didn't even try it. Firefox has had this feature since its very first [url=http://www.mozilla.org/products/firefox/releases/0.1.html]release[/url], so I guess it they represents a fully-functional, stable, and key feature of the browser. Tabbed browsing introduces a new [i]philosophy[/i] for browsing the web: there is only one browser window, but it can have multiple [i]tabs[/i], each displaying a different page. You can switch from one tab to another by clicking on the title (tab titles appear horizontally under the location bar), "Open Link in New Tab" by right-clicking on a link, and open empty tabs with either CTRL+T or from the [i]File[/i] menu. It takes a while to get used to it, but after a while I couldn't really live without it! - -I then asked my friend why Firefox doesn't allow me to play music or videos or read pdf files, etc., and he said that I needed to install all the necessary [url=https://pfs.mozilla.org/plugins/]plugins[/url]. This is the most annoying thing about Firefox: you have to "feed" it and "teach" it things - a lot like a baby, really. If the analogy is truly valid, in the end it should be worth it, and I have the feeling that my Firefox will grow up well, if I'm careful. - -After learning about plugins, and teaching my little Firefox what to do with movies, songs and other types of files, I learnt that it had another really smart feature: outstanding, built-in [i]search capabilities[/i]. -I had already noticed the small search bar on the top right, next to the location bar: it's basically a shortcut to Google Search. Cool, but I already had this in IE. One thing I didn't like about IE though, was that if I wanted to use a different search engine, like Yahoo or MSN, I had to install [i]another toolbar[/i], and I ended up with something like three different toolbars under the address bar, so I could hardly see the webpages I was browsing! - -Firefox apparently knows that people might need to use more than one search engine, so you can select other search engines by clicking on the little icon on the left of the aforementioned search bar. Yahoo, MSN, Wikipedia, and others are available, and [url=http://mycroft.mozdev.org/download.html]others[/url] can be installed easily. If you need a plugin for a search engine, and it doesn't exist yet, you can even make it yourself quite [url=http://mycroft.mozdev.org/generator/]easily[/url]. - -But let's come back a bit to when I ran Firefox for the first time: where did my IE Favourites go? Under the [i]Bookmarks[/i] menu, obviously, and they even kept their folder structure. They can be organized through the [i]Manage Bookmarks[/i] option, and indeed Firefox's [i]Bookmarks Manager[/i]'s interface looks much cleaner and is easier to use than IE's. However, since all the imported bookmarks get dumped in a subfolder, it takes a little time to get them all up to the top level. - -Firefox also implements [i]Live Bookmarks[/i]: some sites, especially news-related ones like [url=http://news.yahoo.com/]Yahoo News[/url] and [url=http://news.bbc.co.uk/]BBC News[/url], and [url=http://slashdot.org/]Slashdot[/url] offer [url=http://en.wikipedia.org/wiki/RSS_%28file_format%29]RSS[/url] feeds which are updated several times a day. With Firefox, you can [i]subscribe[/i] to a particular site's RSS by clicking on the little square orange icon which appears on the status bar, and a [i]Live Bookmark[/i] will be saved. They appear under the [i]Bookmarks[/i] menu, in a specific folder, and also on your [i]Bookmarks Toolbar[/i] which is under the location bar: clicking on one of them will show the corresponding site's current headlines. You can click on any of the headlines to read the full story/article. - -Even if my friend realised he just created another Firefox fan, he insisted on telling me a few words about Downloads and Options. Regarding Downloads, there's not much to say: Firefox incorporates a [i]Download Manager[/i] that saves all files downloaded from the Net in a specific (selectable) folder, and keeps a history of all downloads. The download manager is opened automatically whenever a file is downloaded, and it also can be opened manually by selecting [i]Tools-Downloads[/i]. The really handy part is that you can easily open a downloaded file or the folder it's in, or clear your download history all in one place. The drawback is that it stays open until you close it, and you have to click a button to clear the already downloaded files from the queue. - -[i]Options[/i] is more complex to deal with, as Firefox does not rely on Windows' [i]Internet Options[/i]. Firefox's Options (under the [i]Tools[/i] menu) are more complete and better organized, as they are clearly divided into 5 main categories: - -[i]General[/i] -In this panel you can set up your starting page, fonts, colors, language, character encodings, whether or not Firefox is the default browser, and your connection settings. - -[i]Privacy[/i] -Here - and this is really much better than in IE, I must admit - you can clear and manage history items, saved form information, saved passwords, download manager history, cookies and the browser cache. You can clear everything with a single click, but you'll lose all your saved passwords and your history lists. - -[i]Web Features[/i] -This panel is for setting your preferences regarding popup blocking, software installation, images, Java and JavaScript. - -[i]Downloads[/i] -Here you can choose your download destinatination folder as well as set other download-related preferences, like setting particular file types to save to a particular folder. - -[i]Advanced[/i] -This panel is for - as the name implies - advanced preferences regarding accessibility, browsing, security, validation and certificates. You don't need to change anything here unless you've been told to or you know what you're doing. - -[i]Is That All?[/i] -That's what I thought, and although I was really impressed with Firefox, I was still missing some features that IE had, such as third party toolbars. My friend was about to go, but he quickly opened a pre-defined firefox bookmark: [url=https://addons.mozilla.org/]Mozilla Update[/url]. "Now you know how Firefox works: I'm sure you can work this out by yourself," he said, and left me with a door to another vast world to explore. The journey was far from over. - - -[b]Extensions and Themes[/b] -One aspect of Firefox that was a bit discouraging was the fact that once you install the browser you need to install this, download that, and configure the other thing. For any IE user (like me), this is a major hassle: before, I just wanted to browse the Net, and I didn't care what I was using or how I was using it. Now, I have to be aware of certain things, and more or less [b]create[/b] the browser I need! On the other hand, this is sort of exciting, in the sense that unlike IE, Firefox can became whatever you want it to be. - -Even after using Firefox for a while, and even after my friend had explained all its nice features, I still felt that it was somehow incomplete. Luckily, Firefox has [i]extensions[/i] and [i]themes[/i]. The numerous [url=https://addons.mozilla.org/extensions/?application=firefox]Extensions[/url] enhance Firefox by adding new features which - honestly - I never thought were even conceivable to be included in a browser. Furthermore, Firefox also has [url=https://addons.mozilla.org/themes/?application=firefox]Themes[/url], so you can change the browser into something completely different, with different icons, shapes and colors! - -It's worth it to mention some [i][b]Extensions[/b][/i] which really impressed me by the functionality or behaviours they added to Firefox: - -[url=https://addons.mozilla.org/extensions/moreinfo.php?id=10&application=firefox]Adblock[/url] -This extension blocks ads - if you don't want to see a banner on a certain site anymore, just right-click on it, select AdBlock, and it's gone! It also remembers your preferences for every URL or site. It's easily customizeable and useful. - -[url=https://addons.mozilla.org/extensions/moreinfo.php?id=158&application=firefox]Tabbrowser Preferences[/url] -This adds a new category in your Options called Tabbed Browsing, where you can customize particular behaviours concerning tabs, like opening all addresses typed in the location bar in a new tab (focused or unfocused), forcing links to open in new tabs instead of new windows, and so on. - -[url=https://addons.mozilla.org/extensions/moreinfo.php?id=220&application=firefox]FlashGot[/url] -I complained before that my download manager wasn't integrated with Firefox: this extension does that, and supports nearly every possible download manager and accelerators. It also has a built-in gallery to quickly see what file types you are downloading. - -[url=https://addons.mozilla.org/extensions/moreinfo.php?id=743&application=firefox]CustomizeGoogle[/url] -This personalises Google-related sites and services, such as using [url=http://www.google.com/webhp?complete=1&hl=en]Google Suggest[/url] in every search, filtering content and ads, anonymizing data transmitted to Google, and much more. - -[url=https://addons.mozilla.org/extensions/moreinfo.php?id=398&application=firefox]ForeCastFox[/url] -Get weather forecasts from all over the world displayed directly on your status bar or anywhere you want. - -[url=https://addons.mozilla.org/extensions/moreinfo.php?application=firefox&category=Developer%20Tools&numpg=10&id=60]Developer Tools[/url] -This is THE ultimate solution if you are a web developer or interested in knowing more about webpages. With this extension you can: -- Disable [b]anything[/b] with a single click (images, JavaScript, cookies, colors, animations, etc.) -- Get CSS information or modify a page's CSS -- Have fun with Forms (convert POSTs to GETs, show hidden fields, and so on) -- Perform image-related operations: show paths, attributes, outline particular images, etc. -- Get infos about various elements on a page -- Clear history, cookies, open java console, view document's source -- Outline particular elements (images, tables, etc.) -- Resize your browser to a custom or predefined resolution -- Validate a page (HTML, CSS, WAI accessibility, speed reports) - -[url=https://addons.mozilla.org/extensions/moreinfo.php?id=33]Googlebar[/url] -Clone of the IE Google Toolbar. - -[url=https://addons.mozilla.org/extensions/moreinfo.php?id=270]Yahoo Companion[/url] -Clone of the IE Yahoo toolbar. - -[url=https://addons.mozilla.org/extensions/moreinfo.php?id=219]FoxyTunes[/url] -Control your favourite media player (several programs supported) directly from Firefox! - -[url=https://addons.mozilla.org/extensions/moreinfo.php?id=16]ChatZilla[/url] -A complete, fully functional, easy-to-use IRC client which runs from Firefox. - -[url=https://addons.mozilla.org/extensions/moreinfo.php?id=684]FireFTP[/url] -Fully integrated FTP client. - -There are actually many more extensions available from either the Firefox website or other [url=http://www.extensionsmirror.nl/]portals[/url] which can be very useful, depending on your needs, but there are also [b]Themes[/b] which can change Firefox's look and feel completely, such as: - -[url=https://addons.mozilla.org/themes/moreinfo.php?id=7&application=firefox]Qute[/url] -This theme inspired Firefox default theme: "Icons designed to be modern, dynamic and fresh, with attention paid to usability and comfort over extended use". - -[url=https://addons.mozilla.org/themes/moreinfo.php?id=101&application=firefox]Silverskin[/url] -"Your favourite browser with a silver skin (With the Qute icons by Arvid Axelsson)" - -[url=https://addons.mozilla.org/themes/moreinfo.php?application=firefox&category=Popular&numpg=10&id=414]Saferfox Xpanded[/url] -"A full skin theme with a modern aqua design" - -[url=https://addons.mozilla.org/themes/moreinfo.php?application=firefox&category=Popular&numpg=10&id=213]Plastikfox Crystal SVG[/url] -"Plastik style from KDE with Crystal SVG icons" - -[url=https://addons.mozilla.org/themes/moreinfo.php?application=firefox&category=Popular&numpg=10&id=72]Noia (eXtreme)[/url] -"This theme is based on the Noia2.0 icon set by Carlitus." - -[url=https://addons.mozilla.org/themes/moreinfo.php?application=firefox&category=Popular&numpg=10&id=548]Brushed[/url] -"A Brushed and Polished Browser Interface." - -Again, many more themes are available. There's something for everyone, really! - - -[b]To switch or not to switch?[/b] - -Yes, OK, it's not one of those questions which will keep you up at night, but for sure it can be a quandary. Personally, I decided to switch to Firefox gradually, while still viewing some sites in IE, because I think this can be a good compromise. The biggest problem is that even if Firefox supports Web standards (my friend said IE doesn't) some sites do not. Especially before Firefox, web developers apparently had to create their sites to be viewed correctly with Microsoft's browser. That's why some sites still have things like "This site is best viewed in Internet Explorer 6", or even, in some cases, they'll suggest you download the latest IE version, because [i]your browser is incompatible[/i] when actually it's [i]the site[/i] which is not compatible with [url=http://www.w3c.org/]Web Standards[/url]. -Furthermore, [url=http://www.microsoft.com/com/default.mspx]ActiveX[/url] is a non-standardized proprietary technology which Microsoft uses to make software components communicate and also provide complex functionalities necessary for things like Windows Update. Firefox doesn't support ActiveX, which has been exploited many times in the past (and still now): tough luck. Nowadays, Microsoft wants you to have Automatic Updates turned on, so you don't need to visit the Windows Update site anymore. As far as I'm concerned, I'm not too bothered by that, but if someday I need ActiveX technology, there's already a [url=http://www.google.com/url?sa=U&start=1&q=http%3A//www.iol.ie/%7Elocka/mozilla/mozilla.htm&ei=cwnIQu_tBYqgiAKd9bGrCw&sig2=afi7r8Pa_YLozVo0JbGp9w]Mozilla Project[/url] on it. Final note: If you need to switch back to IE for some reason, the [url=https://addons.mozilla.org/extensions/moreinfo.php?id=35]IE View[/url] extension can quickly give you the opportunity to do so, opening IE to view the page you're visiting. - -It looks like the Browser Wars have started again, and as a matter of fact, Firefox is becoming known for its features, innovations and [url=http://www.mozillazine.org/]community support[/url]. Switching can be scary, and people can try forcing you to do it, but you shouldn't listen to them: don't start using Firefox just because "it's cool" or "everybody uses it"; try it first, understand how it works, and spend time learning it, because it just might be worth it. - -One thing is certain: The existence of IE lovers is debatable, but there are over [url=http://www.spreadfirefox.com]170 million[/url] Firefox lovers. Go [url=http://www.mozilla.org/products/firefox/]get it[/url]!
@@ -1,24 +0,0 @@
------ -permalink: im-on-twitter-anyway -filters_pre: -- redcloth -title: I'm on Twitter, anyway... -comments: [] - -date: 2008-05-18 11:04:00 +02:00 -tags: -- personal -- review -- programming -type: article -toc: true ------ -I've been neglecting my blog, I know. The truth is that I'm quite busy in this period: I have more responsibilities in my daily full-time jobs, my lunch breaks are getting shorter and I don't have much free time. At any rate, here's what's going on: - -* I'm writing a new article for an online magazine (assuming I'm gonna finish it) -* I signed up for a freelance technical reviewing job, for a new Ruby book which will come out soon-ish -* I'm getting ready to finally visit Rome (again), this time with my fiancée, for our fifth anniversary. -* I'm slowly preparing a version 1.0 of "RedBook":http://code.google.com/p/redbook/, which involves quite a lot of refactoring (and hopefully better documentation and tests). -* I'm trying to learn a little bit of Haskell: it seems to be one of the few non .NET languages able to produce standalone .exe files, nowadays... - -Last but not least, I now decided to use "Twitter":http://twitter.com regularly, so you can follow me "there":http://twitter.com/h3rald/, if you wish!
@@ -1,239 +0,0 @@
------ -permalink: incomplete-guide-to-london -popular: true -filters_pre: -- redcloth -title: Fabio's (In)complete Guide to London -subtitle: Some (non-)essential tips on getting around, eating, and enjouing yourself -comments: [] - -date: 2006-08-23 06:23:24 +02:00 -tags: -- travelling -type: article -toc: true ------ -This summer I finally had a chance to spend _a whole week_ in London. The city itself was not new to me, since I visited it 6 times before this one, but this summer was different, in a word: Roxy (my fiancee)'s brother Caspar was happy to host us at his place, for free.<a name="top"></a> - -h3. Table of Contents - -* "Preamble":#pre -* "Transportation":#trans -** "Planes":#planes -** "Trains, coaches and cabs":#trains -** "The tube and buses":#tube -* "Food":#food -** "Rubbish Food":#rubbish -** "Healthy Food":#healthy -** "Brick Lane":#brick -* "Entertainment":#enter -** "Clubbing":#club -** "Museums":#museums -** "Theatres":#theatres -** "Shopping":#shop - -<a name="pre"></a> "[Back to Top]":#top - -h3. Preamble - -This summer I finally had a chance to spend _a whole week_ in London. The city itself was not new to me, since I visited it 6 times before this one, but this summer was different, in a word: Roxy (my fiancee)'s brother Caspar was happy to host us at his place, for free. - -Although we obviously had to pay for our flight, transport, food, etc. etc., we didn't have to pay for accommodation, which was indeed quite an achievement, considering the prices of hotels and flats in London. The bad news is that this Guide, although already lacking a lot of information (try describing everything you can do in London in a single, not-too-boring article), will not contain any particular hints and tips on how to find accommodation in one of the most interesting cities in Europe - unless of course you get to stay at Caspar's place. - -<a name="trans"></a> "[Back to Top]":#top - -h3. Transportation - -Getting there is relatively easy and if you come from Europe there's a quick answer to the universal traveller's question: - -_"Is there any cheap, reliable and on-time airline?"_ - -<a name="planes"></a> "[Back to Top]":#top - -h4. Planes - -Yes, there is. Apparently some Irish man thought he could make millions by buying loads of Boeing 737-800 and selling cheap flight tickets to everyone going to or from London, and he actually did. "RyanAir":http://www.ryanair.com is the answer: a cheap-but-reliable airline which will make you arrive even early than you expected by paying tickets as low as 1p (plus 20-30 Euro airport taxes). Unfortunately they don't provide full meals aboard, they don't have any cutlery on board for you to steal, unlike "BA":http://www.britishairways.com/travel/globalgateway.jsp/global/public/en_, and flight attendants are not hot either, unlike "BA":http://www.britishairways.com/travel/globalgateway.jsp/global/public/en_, but since I'm happily engaged and Roxanne doesn't fancy me stealing BA cutlery it's better this way indeed. -Unfortunately we booked only a month before and thus the flight for both of us (return) was about 80 Euro in the end, but still not bad. - -Luggage check? Not bad, unless you plan to arrive or depart right after an unfoiled bomb plot like I did: I had to take off my shoes, got checked everywhere, they emptied out my hand luggage, turned on and off my laptop and confiscated my gel-ink pen. Way to go! - -<a name="trains"></a> "[Back to Top]":#top - -h4. Trains, coaches and cabs - -!</img/pictures/london/cab.jpg! - -The next question of the London newbie arriving in Stansted airport is: - -_"Cool, now I'm in the middle of nowhere in England, where's London then?"_ - -Nice innit? They sell you a cheap flight and then it seems you still have a 45-minutes journey to get to the actual city, and this is possible - apparently - only through the Stansted Express, the _fastest_ way to get to London from Stansted. Dear as hell (about 25 ENGLISH POUNDS return, per head!). -Luckily there's an alternative in the form of an endless amount coaches going from Stansted to London and vice-versa every now and then. I went with "Terravision":http://www.terravision.it/ but there are many others. Significantly cheaper (34 Euro for two people return!). -The Stansted Express is the first example of how trains in the UK can be a lot dearer than you expect, especially if you come from Italy where you can go from Genoa to the Cinque Terre for as low as five Euro (for 100Km that is). Considering that Roxy and I spent about two pounds for about 15 Km to get from Victoria Station to Bromley South one way, well, yes, it is more expensive! - -Once we got to Liverpool Street Station from Stansted with a load of (empty) suitcases, a weird pakistani guy in a a black leather jacket turns up out of nowhere and heads towards us. Damn airport regulations: unfortunately my almighty Victorinox pocket knife was in my suitcase. Luckily the guy approaches and simply asks: - -Him: "Hey mate, need a taxi? ...A taxi mate? A taxi?" -Me: "How much" -Him: "Where to?" -Me: "[Somewhere in Hackney]" -Him: "20 pounds" -Me: "Bye" - -Just an unregistered cab driver. There are apparently millions around and they can spot a foreigner (especially Italians, it seems) from miles. Be prepared, and be aware that a cab from Liverpool Street for a 5-minutes drive in the night should not cost more than 6 pounds... - -<a name="tube"></a> "[Back to Top]":#top - -h4. The tube and buses - -Here are some tips for smooth travalling via the underground or buses: -1. Do not use a bus unless you can't use the Tube for some particular reason (e.g. you need to go to Zone 3 or 4 and your Oyster card can be used only in zone 1 and 2) -2. Do not catch the Circle Line, always try a combination of two or more (e.g. District and Central) instead, because delays are frequent -3. Get down at Leicester Square if you're going to Covent Garden: it's just 300 metres away and Covent Garden station is small and packed -4. Always check whether the line you're catching is marked with "Good Service", try another route if there delays are expected -5. Keep right on escalators - there's always some lunatic running up/down on the left side, from time to time, and trust me, he WILL mind being stopped for no valid reason -6. Mind the gap! (Especially at Bank station) -7. Mind the sweaty guys wearing suite and holding a briefcase, at peek hours, they can be deadly especially on escalators (See 5.). - -<a name="food"></a> "> Back to Top <":#top - -h3. Food - -I already noticed this during the previous visits: in London you can eat everywhere. Quite literally, both in the city centre and surrounding areas. If you can - and also if you feel brave enough to try at random - the areas surrounding the city centre are probably cheaper than the 4-million different food chains providing any kind of meal near Oxford Street & Co. and possibly - arguably - more tasty. - -If you dare to venture in the land of the Turkish/Bangladesh/Indian food shops you're more than welcome to do so, but be prepared to a potentially long trial-and-error process: in the end you'll eventually find the right one. Caspar recommended a particular one, and the "humus sandwitch":http://www.astray.com/recipes/?show=Humus%20sandwich%20spread was really great. Doner Kebab? Roxy insisted with the rumors they use roadkill for those (she's vegetarian anyway) so she didn't let me have one, aww. - -<a name="rubbish"></a> "[Back to Top]":#top - -h4. Rubbish Food - -I recently came across an interesting "image":http://www.princeton.edu/%7Eina/infographics/starbucks.html which gave me a better picture of how horrendously sick the world has become when it comes to rubbish food. -Yes, "McDonald's":http://www.mcdonalds.com/, "Starbucks":http://www.starbucks.com/ & their nasty friends ("Pizza Hut":http://www.pizzahut.com/, "KFC":http://www.kfc.com/, "Burger King":http://www.bk.com/...) are still there making millions at every corner, in London as well. Well, not quite: I noticed they were less last time, and apart from a few kids fretting for their _Happy Meal_, they weren't so packed. I was pleased to notice that a load of new-ish healthier alternative are now available (see next section). - -<a name="healthy"></a> "[Back to Top]":#top - -h4. Healthy Food - -!>/img/pictures/london/pret.png! - -This was the relatively new surprise. Relatively new because I already noticed some of them last year, but this time I had a chance to try them all: they _healthy food gang_! This is the REAL food trend for London, it seems, and I was very glad about it. -The first one seems to have been "Pret a Manger":http://www.pret.com/ a London-established company which is now spreading - apparently - in the US as well. They "preach and believe":http://www.pret.com/about/ in the importance of healthy food and fight a silent - but effective - quest against aforementioned Rubbish Food Giants. - -bq. -"Pret operates a bit like a restaurant. Every Pret has its own kitchen (except for one or two of the tiny ones). You won't find 'sell by' dates on our fresh sandwiches and salads. We don't sell 'factory' stuff. We offer our food to charity at the end of each day rather than keep it over." - -Sounds like a good plan. The food is indeed very nice and tasty and they even _apologize_ for charging VAT when eating in. A carefully-thought marketing campaign or the just plain simple truth (Wot!)? Only time will tell, let's hope for the best. -Another example of healthy food around London? Well, real, tasty "Cornish pasties":http://www.westcornwallpasty.co.uk/flash.html can be bought for a few quid around in the biggest stations and streets, for example. Freshly baked in Cornwall, and brought all over England the same day - or so they make out. - -_"Hey, what the hell is a pasty man?"_ -"Go back where you belong, you "emmit":http://www.urbandictionary.com/define.php?term=emmet!" - -Roxanne and Caspar both lived in (West!) Cornwall for years, and they really appreciated their fellow pirates trying to take over the world. - -<a name="brick"></a> "[Back to Top]":#top - -h4. Brick Lane - -_"Come in my restaurant... good food, cheap..."_ -"No." -_"C'mon, I make a discount for you"_ -"How much?" -_"15% off"_ -"No way mate, last time it was 25% with a free round of drinks!" -_"You came here before? Impossible, we don't do 25% off, we do 20% off maximum"_ -"No, 25% off, it was 25% off, but doesn't matter, I'll go somewhere else..." -_"No wait, 20% off and free drinks, ok?"_ -"25%" -_"OK, 25% and free drinks, but you come in OK? Good food!"_ - -This is just an example of conversation between a guy working for a restaurant in "Brick Lane":http://www.visitbricklane.com/ and a "potential customer". Brick Lane (aka Banglatown) is a street in London which became popular for the moltitude of Indian/Bangladesh restaurants. There are literally dozens of them, and this fierce competition causes the owner to repeteadly offer "deals" to potential customers: getting 25% off the bill is not unusual, and sometimes if you can argue it well you can even get free drinks. Caspar took us to a really good place he went before, and the curry and rice and other typical dishes were absolutely fabulous. Price? 11 pounds per head for a filling (and spicy!) dinner. - -<a name="enter"></a> "[Back to Top]":#top - -h3. Entertainment - -So what can you do in London, other than meandering with the underground to get the most out of your Oyster card and eat out every day? Well, you can have fun of course! There's loads to do for every taste. This is an _incomplete_ guide, so I'll just mention a few possibilities, but be aware that there's much, much more than this. - -<a name="club"></a> "[Back to Top]":#top - -h4. Clubbing - -Each weekend, the following equation holds, for the average Londoner aged 20-30 at least: - -@100 pounds + Club + Friends = Loads of booze + Fun + Terrible hangover and amnesia the day after@ - -That's basically what the traditional Londoners (or maybe we shall generalise to all of England...) do every saturday night: they get trashed. Why? It's not clever, it's not good... but it's bloody good fun! -Clubs, pubs and bars are the best place for this kind of activity: they are comfortable, there's normally cool music on, air conditioning, totally hyper staff, and a huge bouncer too! -We went to "The Ditch":http://www.ditchbar.com/, a recently renovated place in Shoreditch (obviously). I must say I really liked the environment more than any club in Italy: - -* Good music and deejay -* Enough people inside, but not too crowded -* Good drinks -* Small & comfy VIP room, obviously for us (no kidding) -* A competent bouncer who kindly reminded us to "watch over" one of our friends, after she suddenly ordered four Vodka-RedBull at once... - -No wonders why Caspar & his friends carefully picked this place as their ideal candidate for their own upcoming DJ mini-event in November: it's an ideal place to spend your night. - -Pity that English blokes (and birds too!) get way too trashed in the end: I reckon if you could place a single half-sober, decent-looking Italian guy in a club like that, he'd have pulled almost all the (decent-looking) girls available by the end of the night. I'll definetely recommend some of my _free_ (not as in software) friends to go over to London next summer. - -<a name="museums"></a> "[Back to Top]":#top - -h4. Museums - -Enough clubbing and equally shallow activities, let's focus on culture, at once! -London is the best city in Europe (OK, _followed_ by Paris) for museums, and the best thing is that they are (nearly) all free. This time we didn't go to the "National Gallery":http://www.thebritishmuseum.ac.uk/, which hosts one of the most outstanding painting galleries in all over the world, because we already visited it too many times, so we went straight for the "British Museum":http://www.thebritishmuseum.ac.uk/. I originally went there a few years ago, and I forgot what was in it, exactly, and yes, I was amazed and perplexed at the same time: - -!</img/pictures/london/rosetta.jpg! - -I was amazed at the amount of stuff those British folks _nicked_ from all over the world: I'm not talking about a few mummies from Egypt like we did in for our mini Egyptian museum in Turin, but rather stuff like the original sarcophagus of Cleopatra (& others), the Rosetta Stone, the Ur Standard, whole monuments from Greece, gargantuan gateways from some Assirian city, and _ALL THE SCULPTURE DECORATIONS OF ATHEN'S PARTHENON!_ That was shocking really, but after all it was Napoleon who stole the Monna Lisa from us. Damn the French. (No discrimination intended, please mind the sarcasm) - -The "Tate Modern":http://www.tate.org.uk/modern/ was impressive as well for a few Dali's and Kandinski's paintings etc. etc., but I don't think it can ever be as breath-taking as the other ones. I certainly don't understand certain kinds of modern art, but I can't understand how a random guy could get loads of money and ovation for the critics for putting a few basket-balls in a glass box. Clever. - -!>/img/pictures/london/nh.jpg! - -To conclude this brief and silly overview of London's most remarkable museums, let's say something about the "National History Museum":http://www.nhm.ac.uk/. -First of all it must be noted that we have a decent equivalent in Genoa, so Roxy and I visited it not long prior to our departure for England. She liked it, and was impressed by the amount of stuffed animals on display, but she told me that the National History Museum in London was supposed to be _way better_. -We both expected, especially judging from outside this enourmous building which was built for the purpose, big halls full of taxidermist's masterpieces, but alas, nothing like this at all. Yes, sure, there were a few stuffed animals here and there, and the minerals section was truly outstanding for completeness. The rest - in my very, very humble opinion - was a real insult to Science and to the dignity of the visitors over five years old. -They insisted in "renovating" the interior of a marvellous building, making almost every room pitch black only to allow a kid in a million to press a button to highlight a five-lines explanation for a absolutely pointless diagram. Well done. That was a real achievement, wasn't it? I really don't understand who could ever conceive such an abomination: a formerly very respected museum turned into a poorly-designed theme park. -OK, they probably wanted to involve younger generations into scientifical subjects through "interactivity", and that's understandable - in theory. In practice though, there are a few elements which weren't obviously considered when developing such a subtly cunning marketing strategy: - -* The average kid up to 5 years old enjoys pushing buttons, listening to sounds and looking at easy-to-understand (but ARE THEY?) pictures, but alas, can't really bother to read, right? -* The average kid over 5 years old would probably like reading some explanation about some weird phenomena, but alas, he really can't be bothered to push button, move levers, etc. etc. only to highlight some text. Wake up dude, we never heard of Computer Graphics? Animation? even Educational Software, maybe with things like touchscreens etc. These kids are from the XXI century, not from the seventies ffs! Grow up (the museum's managers, not the kids of course)! -* Instead of ruining an historical building, they could have devoted just a few rooms to kids, investing in something slightly more amazing than out-of-fashin "interactive" toys. - -_"Yes, but hey, we still have a huge queue of kids & families at the entrance!"_ - -And you know why? You know what are all these people queueing for? For a damn cheesy T-rex "animatronic":http://science.howstuffworks.com/animatronic.htm! Yes, really! And no, not the one from Jurassic Park, but only its rather shitty English-made cousin. -The funniest thing of the whole visit? They tell you to donate "at least" three quid for their wonders, same as for the British Museum and the National Gallery. You know what? I'd rather give _thirty_ quid to a random kid if he promise not to visit such "museum"... - -<a name="theatres"></a> "[Back to Top]":#top - -h4. Theatres - -Luckily London theatres are still great. Unfortunately I didn't have a chance to go to a musical this time, but I'll definitely try to make it for one during my next visit. Adverts for the shows are all over the place, from streets to underground stations, and there are truly a lot of places where it is possible to buy tickets at discounted price while apparently buying full price tickets doesn't seem to be possible... -Anyhow, not only we didn't manage to go to a musical, but we also missed another theatrical performance by "Patrick Stewart":http://www.imdb.com/name/nm0001772/, who, for those who don't know, happens to be one of the best Shakespearean actors alive... when he doesn't "fight against the Borg":http://en.wikipedia.org/wiki/Star_Trek:_First_Contact or "plays funny tricks on a wheelchair":http://en.wikipedia.org/wiki/X-Men_(film), of course (cheesy, cheesy joke). - -Nevertheless we _did_ manage to go and see a play, namely Shakespeare's Antony and Cleopatra at the "Globe":http://www.shakespeares-globe.org/navigation/framesetNS.htm. The Globe Theatre is an almost-perfect reconstruction of the famous London Theatre where Shakespeare's plays used to be acted. Like in the XVII century, you have two choices: - -a. Book your seat (26 pounds) -b. Stand up on the ground, near the stage (5 pounds) - -!</img/pictures/london/globe.jpg! - -We obviously went for option b, of course, since we didn't fancy the idea of paying that much - although it can be worthwhile. Only one thing to keep in mind: _always check the duration of the play you're going to see beforehand_ - if you don't like standing up for a long time, you have to go for option a. -We obviously _didn't_ check how long the play was going to be - although we could have imagined it - so we ended up standing up for approx three hours (with a 15 minutes break). And you _have_ to stand up, you can't sit on the stairs and neither on the floor, and the staff is ready to enforce this rule at all costs: a 70-year-old lady brought a folded chair and decided to sit on it, only to be _kindly reminded_ by the staff that it wasn't allowed to do so. Go figure. -Anyhow, after all I must say it was the cheapest and the very best Shakespeare play I've ever been to so far, although I must also say that most of the ones I've been to before were acted in (yikes!) Italian (yes, we do dub theatrical works, _as well_). A really, really good idea for students and half-broke youth who shouldn't be denied of the pleasure of watching Shakespeare's masterpieces at the theatre. Please, keep it up. - -<a name="shop"></a> "[Back to Top]":#top - -h4. Shopping - -Last but not least, I felt compelled to include a short section about _shopping_ in London. The universal answer to the question "Where can I find [insert random item here]" is normally "Oxford Street":http://www.oxfordstreet.co.uk/. When I visited it for the first time (I was about 14 years old, I believe) it all seemed huge... those never-ending malls et al, but now it just seems "normal". Probably because now going to malls and megastores is just the plain normality, while in the nineties (in Italy) it was rather unusual. -Oxford Street has them all: computer shops, endless fashion shops, gargantuan bookshops etc. etc. -Biggest and most expensive shop in Oxford Street? Probably "Selfridges":http://www.selfridges.com/ -Biggest bookshop? Definitely "Waterstone":http://www.amazon.co.uk/exec/obidos/tg/stores/static/-/waterstones/waterstones-info/202-4070483-1661418 although the biggest bookshop in London (and in Europe) is the Waterstone one in Piccadilly, just round the corner. -"Harrods":http://www.harrods.com/Cultures/en-GB/homepageindex.htm? - it's not far from there. - -What if you like more traditional and less glamorous shopping? "Covent Garden":http://www.coventgardenlife.com/ and its whereabouts is probably the best choice, also for souvenirs. - -Had enough yet? Well, yes, let's call it a day for this article, but be aware that there's much, MUCH more to see and do in London than you can ever imagine. Unless you're from the US, of course.
@@ -1,319 +0,0 @@
------ -permalink: inline-introduction -filters_pre: -- erb -- redcloth -title: RawLine - a 100% Ruby solution for console inline editing -comments: -- :date: 2008-03-10 08:19:47 +01:00 - :author: Vidar Hokstad - :url: http://www.hokstad.com/ - :id: 214 - :body: |+ - For moving right (or any other direction), your best bet is probably to look at VT100 escape sequences. They're pretty straightforward, and supported on a wide range of terminals. If you want truly portable terminal handling, though, you really, really want to read up on Terminfo, but using VT100 works on most modern systems. - -- :date: 2008-03-10 09:05:06 +01:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com/ - :id: 215 - :body: |- - Yes, I tried using output escape sequences for moving the cursor, and on Linux works fine. The problem is that VT*** escape sequences don't work on "modern" Windows Systems! - So I left the original, "naive but cross-platform" implementation for now, at least until I find a way to do the same thing on Windows too (and also a proper way to delete characters). - - Thanks a lot! -- :date: 2008-03-14 16:46:30 +01:00 - :author: gthiesfeld - :url: http://blog.robustlunchbox.com - :id: 217 - :body: The win32console gem handles escape sequences. Take a look. -- :date: 2008-03-15 04:37:34 +01:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com/ - :id: 218 - :body: |- - @gthiesfeld - - Win32Console is a very cool gem, and for now I only got it working for text coloring, and that's quite cool. By the way, InLine is compatible with Win32Console, unlike Readline (that's one of the reasons why I made it in the first place!). - - Actually it seems to be able to do much more, now that I took a closer look, but unfortunately it's not too well documented. I should spend some time digging through its code. The problem though is that it seems to be a port of a Perl module, and the "coding standards" followed may not be too familiar. - - Thanks! -- :date: 2008-03-15 08:48:29 +01:00 - :author: j - :url: "" - :id: 219 - :body: I don't get an 'examples' folder? -- :date: 2008-03-15 13:05:06 +01:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com/ - :id: 220 - :body: |- - @j - - You're right... I just noticed that they're not shipped with the gem due to a silly mistake in the Rakefile... aww, my fault! Anyhow: - - - The source of both the examples is in this article - - - The _examples_ folder should be in the .zip and .tar.gz packages. -- :date: 2008-03-17 12:38:18 +01:00 - :author: Gordon Thiesfeld - :url: http://blog.robustlunchbox.com - :id: 221 - :body: "I've submitted a large patch to Justin Bailey, the maintainer of the win32console gem that fixes a few bugs and makes the code more idiomatic. It should be released any time now. It also adds a redefined putc, so that it will buffer escape sequences and pass other characters straight through. You might find that useful for InLine. " -- :date: 2008-03-17 14:44:15 +01:00 - :author: Matt S. - :url: "" - :id: 222 - :body: |+ - This looks interesting... and helpful. - - The test files are missing from the gem as well. - $ ruby test/test_all.rb - test/test_all.rb:7:in `require': no such file to load -- test_history_buffer (LoadError) - from test/test_all.rb:7 - -- :date: 2008-03-21 10:50:18 +01:00 - :author: Christian P - :url: "" - :id: 223 - :body: |- - I would love to integrate inline as I am a WinXP user. How may get the benefits of this gem when using rail script/console or irb? - - Thanks for you work! -date: 2008-03-10 06:59:00 +01:00 -tags: -- ruby -- programming -- opensource -- rawline -type: article -toc: true ------ -One of the many things I like about Ruby is its cross-platform nature: as a general rule, Ruby code runs on everything which supports Ruby, regardless of its architecture and platform (yes, there are quite a few exceptions, but let's accept this generalization for now). - -More specifically, I liked the fact that I could use the "GNU Readline library":http://tiswww.case.edu/php/chet/readline/rltop.html with Ruby seamlessly on both Windows and Linux. -Readline offers quite a lot of features which are useful for those people like me who enjoy creating command-line scripts, in a nutshell, it provides: - -* File/Word completion -* History support -* Custom key bindings which can be modified via .inputrc -* Emacs and Vi edit modes - -Basically it makes your command-line interface fast and powerful, and that's not an overstatement. Ruby's own IRB can be enhanced by enabling readline and completion, and it works great -- at least on <notextile>*nix</notextile> systems. - -For some weird reason, some people had problems with Readline on Windows: in particular, things get nasty when you start editing long lines. Text gets garbled, the cursor goes up one or two lines and doesn't come back, and other similar leprechaun's tricks, which are not that funny after a while. - -Apparently there's no alternative to Readline in the Ruby world. If you wan't tab completion that's it, you're stuck. Would it be difficult to implement _some_ of Readline functionality natively in Ruby? Maybe, but the problem is that for some reason the Ruby Standard Library doesn't have low level methods to operate on keystrokes... - -...but luckily, the "HighLine":http://highline.rubyforge.org/ gem does! James Edward Gray II keeps pointing out here and here that HighLine's own @get_character@ method does just that: it returns the corresponding character code(s) right when a key is pressed, unlike @IO#gets()@ which waits for the user to press ENTER. - -Believe it or not, that tiny method can do wonders...h2. Reverse-engineering escape codes - -So here's a little script which uses @get_character()@ in an endless loop, diligently printing the character codes corresponding to a keystroke: - -<% highlight :ruby do %> -#!/usr/local/bin/ruby -w - -require 'rubygems' -require 'highline/system_extensions' - -include HighLine::SystemExtensions - -puts "Press a key to view the corresponding ASCII code(s) (or CTRL-X to exit)." - -loop do - - print "=> " - char = get_character - case char - when ?\C-x: print "Exiting..."; exit; - else puts "#{char.chr} [#{char}] (hex: #{char.to_s(16)})"; - end - -end -<% end %> - -A pretty harmless little thing. Try to run it and press some keys, and see what you get: - -<div style="font-family: Monospace"> -Press a key to view the corresponding ASCII code(s) (or CTRL-X to exit). - -=> a [96] (hex: 61) - -=> 1 [49] (hex: 31) - -=> Q [81] (hex: 51) - -=> α [224] (hex: e0) - -=> K [75] (hex: 4b) - -</div> - -Hang on, what are the last two codes? _A left arrow key on Windows_, apparently. - -*Welcome to the wonderful world of input escape sequences!* - -To cut a long story short, both Windows and *nix system "terminals" translate special keystrokes into sequences of two or more codes. This applies to things like DEL, INSERT, arrows, etc. etc. -For some ideas, check out: - -* "Windows Scancodes":http://www.microsoft.com/whdc/device/input/Scancode.mspx (Thanks "Huff":http://64.223.189.234/node/92) -* "VT220 Terminal Input Sequences":http://www.connectrf.com/Documents/vt220.html (Thanks "James":http://www.grayproductions.net/) - -Let's now assume that we're smart and we can write a program which can parse keystroke properly, including handling different input escape sequences according to the OS, what can it be used for? -Well: - -* For normal characters, just print them back to the screen (@get_character@ doesn't print anything, it "steals" the keystroke) -* For special characters, do something nice! - -We could setup TAB to auto-complete the current word according to an array of matches, or bind the up arrow to load the last line typed in by the user, for example, that's basically something Readline does, right? - -h2. RawLine: how it works and what it does - -I created a small project on RubyForge called "RawLine":http://rubyforge.org/projects/rawline/ (not to be confused with RubyInline, a completely different thing altogether, sorry about that) to play around with the possibilities offered by the @get_character@ method. The library is just a preview of things which can be done, but it's already usable, provided that you're brave enough to try it out, that is. - -The basic idea behind RawLine is to be able to parse keystrokes properly on different platforms and re-bind them to a set of predefined, cross-platform actions or a user-defined code block. - -h3. Basic line-editing operations - -The first challenge was to re-invent the wheel, i.e. re-bind keystrokes to their typical actions: a left arrow moves the cursor left, a backspace deletes the character at the left of the cursor and so on. Yes, because @get_characters@ gives you the right character codes at the price of _cancelling their normal effects_, which is a great thing, as you'll soon find out. - -Printing a character on the screen was one of the easiest tasks (at first). @IO#putc@ does the job pretty well: it prints a character out. -What about moving left? Easy: print a non-descructive backspace (\b) and hope it is really not destructive. I did some tests and it seems to do as it's told and move the cursor back by one position. - -Moving right was a little trickier: the easiest thing I found was to re-print the character under the cursor, which will then move the cursor forward (as naive as it may seem, it does the job!). If there's nothing under the cursor, then we must be at the end of the line and it shouldn't move anywhere, so there we go. - -What if I move left a bit and then start typing normal characters? Well, everything is rewritten of course: this will be our "character replace mode". Unfortunately users don't like this behavior that much, so what I did was this: - -# Copy all characters from the one at the left of the cursor till the end of the line -# Print the character to be inserted -# Re-print the previously-copied characters -# Move the cursor back at the right place - -Again, a primitive solution which works seamlessly on all platforms, and yes, it's fast enough that you don't notice the difference. - -As you may have guessed, this of course means that I always had to keep track of: - -* The cursor position within the line -* The text currently printed to the screen - -Backspace and delete were implemented in a similar way, you can figure it out yourself or look at the source code: I won't bore you any further! - -h3. History management - -The next step was to implement a history for both the characters inputted by the user (to allow undoing and redoing operations) and for the whole lines. This was just an ordinary programming exercise: a simple buffer with some extra controls here and there, nothing too scary. - -So every "modification" to the current line being typed is saved in a line history buffer and all the lines entered are saved in another history buffer. All is left is to allow users to navigate through these buffers back and forth. -Nothing impossible: all I had to do was keeping track of the current element of the history being retrieved and then overwrite the current line with a new line stored in the buffer? How's this line overwriting done? Same old: - -# Move the cursor to the beginnig of the line -# Print X spaces, where X is the line length, so that the characters are no longer displayed in the console -# Move the cursor back to the beginning of the line -# Print the new line. - -Easy and naive, as usual. But again, it works well enough. - -h3. Word completion - -The other challange was word completion. The current implementation can be summarized as follows: - -* If TAB (or another character, if you wish) is pressed, call a user-defined @completion_proc@ method which returns an array and show the first element of the array (in this case I actually used a cyclic RawLine::HistoryBuffer, not an array) -* If the user presses TAB again, show another match, and so _ad infinitum_ if the user keeps pressing TAB. -* If the user presses another key, accept the default completion and move on. - -Obviously this means that: -* RawLine has to keep track of the current "word". A word is everything separated by a user defined @word_separator@, which can obviously modified at runtime, with care. -* Regarding the @completion_proc@, typically you may want to return only the elements matching the word which is currently being written, so that's given as default parameter for your proc. Exactly like with ReadLine, the only difference is that you can access other things like _the whole line_ and _the whole history_ in real time, which can be really handy at times! - -Here's a simple example: - -<% highlight :ruby do %> -editor.completion_proc = lambda do |word| - if word - ['select', 'update', 'delete', 'debug', 'destroy'].find_all { |e| e.match(/^#{Regexp.escape(word)}/) } - end -end -<% end %> - -h3. Custom key bindings - -All these pretty things are obviously bound to some keystrokes. If the key corresponds to only one code, everything is fine, but because special keys typically aren't so it was necessary to implement a mechanism to track an escape key (e.g. 0xE0 and 0 on Windows and \e on Linux) and listen to further characters, in case a known sequence is found. Anyhow, the final result of the method used for character binding is the following: - -@bind(key, &block)@ - -Where key can be: - -* A @Fixnum@ corresponding to a single character code -* An @Array@ of one or more character codes -* A @String@ corresponding to an escape sequence -* A @Symbol@ corresponding to a known escape sequence or key -* A @Hash@ to define a new key or escape sequences - -So, in the end you can do things like this: - -<% highlight :ruby do %> -editor.bind(:left_arrow) { editor.move_left } -editor.bind("\etest") { editor.overwrite_line("Test!!") } -editor.bind(?\C-z) { editor.undo } -editor.bind([24]) { exit } -<% end %> - -Which, for Rubyists, it's far sexier and more flexible than editing an .inputrc file. - -h3. How do I use it, anyway? - -A code example is better than a thousand words, right? So here you are: - -<% highlight :ruby do %> -#!/usr/local/bin/ruby -w - -require 'rubygems' -require 'rawline' - -puts "*** Inline Editor Test Shell ***" -puts " * Press CTRL+X to exit" -puts " * Press CTRL+C to clear command history" -puts " * Press CTRL+D for line-related information" -puts " * Press CTRL+E to view command history" - -editor = RawLine::Editor.new - -editor.bind(:ctrl_c) { editor.clear_history } -editor.bind(:ctrl_d) { editor.debug_line } -editor.bind(:ctrl_e) { editor.show_history } -editor.bind(:ctrl_x) { puts; puts "Exiting..."; exit } - -editor.completion_proc = lambda do |word| - if word - ['select', 'update', 'delete', 'debug', 'destroy'].find_all { |e| e.match(/^#{Regexp.escape(word)}/) } - end -end - -loop do - puts "You typed: [#{editor.read("=> ").chomp!}]" -end -<% end %> - -This example can be found in examples/rawline_shell.rb within the RawLine source code or gem package. - - -h2. Current status and availability - -I currently "released":http://rubyforge.org/forum/forum.php?forum_id=22543 RawLine 0.1.0 on "SourceForge":http://rubyforge.org/projects/rawline, and it can be installed via: - -@gem install -r rawline@ - -The RDoc documentation is available "here":http://rawline.rubyforge.org/. - -Feel free to try it out. First of all try the @rawline_shell.rb@ example, and see if it works on your machine. If it doesn't than maybe you try re-binding some keys (use @key_tester.rb@ to "reverse-engineer" your terminal's input escape sequences), and let me know! - -Status information and limitations: - -* It has been tested on Windows (XP, using the usual command prompt) and on Linux (ZenWalk, using XFCE Terminal). -* It can handle lines no longer than the maximum terminal width - 2. This is to ensure that the cursor never "falls down" to the next line. -* On Windows, the cursor doesn't blink immedialy when moving left, but it moves, don't worry. -* On Linux, you should really consider installing the "Termios":http://raa.ruby-lang.org/project/ruby-termios/ library for a faster experience (otherwise @get_character@ won't parse characters correctly if you press and hold a key, and that, trust me, is a real mess!). -* RawLine is very far from being a complete replacement for the ReadLine library, and it is currently in alpha stage. -* Release 0.1.0 has been created after 2 weeks of sporadic coding during lunch breaks and week-ends. - -For any ideas on where to go from here, comments and feedback, just reply below or send an email to my usual email address.
@@ -1,48 +0,0 @@
------ -permalink: inline-name-change -filters_pre: -- redcloth -title: "InLine name change: what's your opinion?" -comments: -- :date: 2008-03-27 14:35:10 +01:00 - :author: Thom Parkin - :url: "" - :id: 224 - :body: | - InLine is really a very descriptive name. - How about RubyRedLine? - -- :date: 2008-03-27 18:15:40 +01:00 - :author: brentf@gto.net - :url: "" - :id: 225 - :body: how about RollerBlade? (both "inline" and "RB") -- :date: 2008-03-28 12:39:22 +01:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com/ - :id: 226 - :body: Hmm... just a bit too long for my liking! Any other ideas? -date: 2008-03-27 06:30:00 +01:00 -tags: -- ruby -- programming -- opensource -- rawline -type: article -toc: true ------ -I've been kindly asked by the lead developer of "RubyInLine":http://www.zenspider.com/ZSS/Products/RubyInline/ to change the name of my "InLine":http://rubyforge.org/projects/inline/ project, due to potential confusion and conflicts. - -This makes sense, and I'm ready to change the name of my project, although I'm not that good at choosing original and _smart_ names, so well, any suggestion is more than welcome! - -I was thinking of something like: - -* RawLine -* EditLine -* RawInput -* RubyInput -* RubyLine - -I personally think that *RawLine* is probably the best option, but please, if have any better idea just speak up! - -P.S.: "RedLine" is taken, unfortunately, otherwise it would have been my first choice since the beginning.
@@ -1,109 +0,0 @@
------ -:type: article -:tags: [glyph, ruby, frameworks, writing] -:title: "Introducing Glyph" -:summary: "Glyph is an extensible Rapid Document Authoring Framework written in Ruby, that can be used to create ebooks effortlessly." -:toc: false -:date: 2010-04-09 19:30:39.644000 +02:00 -:permalink: introducing-glyph -filters_pre: -- erb -- redcloth ------ - -I've been writing technical documents for a living for the past four years, and I can tell you: there is no easy way to go about it. - -For example, you can use: -* *a Word Processor* like MS Word, for example -- anyone can do that, right? Sure, but no, thanks: I strongly believe that Word Processors should not be used for writing technical documents as I firmly don't believe GUIs are suitable for doing this at a professional level. -* *a Document Authoring Software* like Adobe Framemaker, Robohelp, etc. Still GUIs, only more complicated to use. -* *XML, like DITA or DocBook, or other markups*, like ReStructuredText. Better, but still not easily extensible and flexible enough. -* *your company's tools*, if you have them. That's great if they are usable enough and the result makes your boss happy. -* *LaTeX*, and that's probably your best option, if you know what you're doing. -* *XHTML and CSS3*, in conjunction with a PDF renderer like "Prince XML":http://www.princexml.com/ -- that's great if you know HTML and CSS, and you don't mind hand-crafting the structure of the document. - -h3. Lightweight markups - -I love Textile and Markdown. When people aren't looking, I even use them at work to generate HTML code, because it's just so much faster. Textile in particular can be used as a drop-in replacement for HTML (and a bit of LaTeX, too), as it can produce most inline HTML tags effortlessly and some block-level tags, too. - -For things like @<div>@ tags and @<tables>@ though, Textile is not the best thing in the world, so you normally end up falling back to HTML. - -Another "problem" is that *Textile* or other similar lightweight markups cannot be extended easily, simply because they were not meant to be extended in the first place. - -Moreover, if you are producing a book, Textile can't help you if you want to generate things like a Table of Contents automatically or validate links: those things are simply not part of Textile's job. - -h3. How Glyph can help - -!>/img/pictures/glyph.png! - -There are a few projects on the Internet that tackle structured document generation. One of them is "Kitabu":http://github.com/fnando/kitabu, which looks promising and is able to produce pretty documents using Textile and Prince for PDF rendering... but again, it's not extensible because it relies too much on Textile and Markdown. - -"Glyph":/glyph/ is different. For one, it is much younger than any other, therefore it is most likely full of bugs. - -Jokes aside, Glyph follows a much more radical approach, which consists in using a _macro language_ on top of Textile or Markdown. The good thing about it is that this macro language is very simple to learn and -- most importantly -- very easy to extend. - -Here's an example: - -<% highlight :text do %> -section[header[Something about Glyph] -You can use Glyph macros in conjunction - with _Textile_ or _Markdown_ to -produce HTML files effortlessly. - section[header[What about PDFs?|pdf] -Once you have a single, well-formatted HTML -file, converting it to PDF is -extremely easy with a 3rd-party -renderer like =>[http://www.princexml.com|Prince]. - ] -] -<% end %> - -Which translates to: - -<% highlight :html do %> -<div class="section"> - <h2 id="h_1">Something about Glyph</h2> - <p>You can use Glyph macros in conjunction with - <em>Textile</em> or <em>Markdown</em> to - produce HTML files effortlessly.</p> - <div class="section"> - <h3 id="pdf">What about PDFs?</h3> - <p>Once you have a single, well-formatted HTML - file, converting it to PDF is - extremely easy with a 3rd-party renderer - like <a href="http://www.princexml.com">Prince</a>.</p> - </div> -</div> -<% end %> - -Glyph macros can be used to: -* Generate block-level HTML tags not commonly managed by lightweight markups, like @head@, @body@, @div@ and @table@. -* Create and validate internal and external links. -* Include and validate images and figures. -* Automatically determine header levels based on the document structure. -* Automatically generate a Table of Contents based on the document structure. -* Store common snippets of text in a single YAML file and use them anywhere in your document, as many times as you need. -* Store configuration settings in a YAML file and use them anywhere in your document, as many times as you need. -* Evaluate Ruby code within your document. -* Call macros from other macros (including snippets), carefully avoiding mutual calls. -* Include text files in other text files. -* Include the contents of configuration settings (author, title) in the document. -* Filter input explicitly or implicitly, based on file extensions when including files. -* Manage comments and todo items. - -An example Glyph project? Sure, Glyph's own guide ("source":https://github.com/h3rald/glyph/tree/master/book/ -- "PDF output":http://cloud.github.com/downloads/h3rald/glyph/glyph.pdf). - -h3. Technical Details - -Glyph is built on top of the following Ruby Gems: -* "gli":http://github.com/davetron5000/gli -- For the high-level command line interface. -* "rake":http://rake.rubyforge.org/ -- For the mid-level interdependent task layer. -* "treetop":http://treetop.rubyforge.org/ -- For parsing Glyph Language, whose grammar is "ridiculously simple":http://github.com/h3rald/glyph/blob/master/lib/glyph/glyph_language.treetop, but it seems to work so far. -* "extlib":http://rubyforge.org/projects/extlib/ -- Because I can't leave without it. - -h3. Disclaimer - -Glyph is *alpha software* (hence the 0.1.0 version number) -- handle with care and be aware that _everything_ could change tomorrow. If you want to keep up-to-date and/or provide feedback, feel free to join "Glyph's User Group":http://groups.google.com/group/glyph-framework. - -h3. For more information... - -...head over to "Glyph's homepage":/glyph/.
@@ -1,50 +0,0 @@
------ -permalink: introducing-redbook -filters_pre: -- redcloth -title: Introducing RedBook (and the new Code section) -comments: [] - -date: 2007-09-29 02:12:00 +02:00 -tags: -- ruby -- productivity -- software -- tools -- redbook -type: article -toc: true ------ -I'm somehow pleased to announce the opening of a new section on this site. Nothing too big actually, it's just a "page":/code/ with a few (one for now) brief descriptions of open source programs and scripts I made and I'd like to share with my readers. - -Don't expect fancy stuff: (luckily) I don't code for a living, I code for pleasure and I code small things. Lately I've been trying to write a small Ruby program able to log my daily activities and also display them in a pleasant enough way, so I started using my lunch breaks at work more constructively and I came up with "RedBook":/code/ an interactive command-line program written in Ruby. - -Main features: - -* Log timestamped and _tagged_ messages to a single YAML file -* Load and display messages containing a certain string, or certain tags or within a time frame. -* Calculate the time elapsed between two or more tasks. -* Export loaded messages to YAML, TXT or CSV format. - -All done via command line via simple commands: - -*:log* This is a test message *:tags* test - -*:load* *:last* 30 *:from* last week - -*:timecalc* 2 5 - -*:save* test.txt - -Thanks to the wonderful "Chronic":http://chronic.rubyforge.org/ library, you can specify your time frames using natural language expressions like "8 in the morning", "this tuesday", "last month" and so on... - -Here's a screenshot showing RedBook in action: - -!/files/redbook.png! - -RedBook is of course free, open source software licensed under the terms of the BSD license. It can be installed on any machine able to run Ruby and there's also an EXE version for the lazy windows folks who don't want to install Ruby, packed with "RubyScript2Exe":http://www.erikveenstra.nl/rubyscript2exe/index.html. A more in-depth article explaining how RedBook works -will hopefully be completed soon- is available ":here":http://www.h3rald.com/articles/redbook - - - - -
@@ -1,21 +0,0 @@
------ -:title: "Introducing the Ruby Compendium" -:subtitle: "An Essential Guide to the Ruby Ecosystem" -:image: /img/pictures/ruby.png -:type: article -:date: 2011-01-23 19:02:15.355674 +02:00 -:tags: ["ruby-compendium", "books", "ruby"] -:permalink: introducing-ruby-compendium -:intro: | - Learning a programming language can be hard and time consuming. You normally have to go through a bunch of tutorials, ask questions, read books... Ruby is no exception: there are plenty of resources out there about it, but it is often hard to find what you're looking for. So, as a weekend project, I decided to create a _Ruby Compendium_, a short book about the Ruby Ecosystem. -:extended_intro: | - I guarantee that you _will not_ be able to code in Ruby after reading this book. Yes, you read it right, this book is not about coding, it's about learning what's out there for you that can help you to learn how to program in Ruby. Information on Ruby implementations, versions, web sites, books, podcasts, a handful of Ruby gems to solve common problems... it's all in there. ------ -$[document.intro] - -textile[ -The _Ruby Compendium_ is available free of charge, under the terms of the "Creative Commons Attribution-ShareAlike 3.0 Unported License":http://creativecommons.org/licenses/by-sa/3.0/, and you can help improving it! It was written using my very own "Glyph Framework":http://www.h3rald.com/glyph, and the entire source code is available on "GitHub":https://github.com/h3rald/ruby-compendium, for anyone to fork. - -div{text-align:center;margin:20px; auto;font-size: 18px; font-weight:bold;}. =>[https://github.com/downloads/h3rald/ruby-compendium/ruby-compendium.pdf|Download (PDF)] -] -
@@ -1,171 +0,0 @@
------ -:type: article -:tags: -- review -- web20 -- internet -- software -:date: 2009-11-05 17:19:17.607000 +02:00 -:permalink: journotwit-review -:title: "JournoTwit - The best way to organize your tweets" -:toc: true -:summary: A review of _JournoTwit_, a minimalist but feature-packed Twitter client able to help you organizing your tweets. ------ -Since I started using "Twitter":http://www.twitter.com on a regular basis, I felt overwhelmed by the endless stream of data generated by the people I was following. - -The official Twitter page quickly became inadequate to manage my tweets, so I began to search for an alternative through the myriad of Twitter clients available out there, both web and desktop based. After trying out a few desktop clients, I decided to restrict the search to web clients only: between work and home, I may use up to 4 different computers and 3 different operating system, and I really didn't fancy the idea of keeping the _same_ client up-to-date everywhere -- even if such client existed. - -Over the past months I tried dozens of different web-based Twitter clients, and narrowed the list of _must-have_ features to the following: -* The interface should be simple to use and not too cluttered. -* I should be able to categorize tweets in columns (à la TweetDeck). -* I should be able to know, when visiting the site, how many _new_ tweets I have to go through. -* I should be able to mark tweets as read. -* It should display media files (at least pictures) inline with the tweets. -* The interface should provide all the most common twitter actions like reply, retweet, follow/unfollow, shorten url, upload pictures etc. etc. - -The good news is that I found at least _one_ web-based client able to do all this: "JournoTwit":http://www.journotwit.com. - -h3. Introducing JournoTwit - -JournoTwit was born – as many software projects – to scratch an itch: - -bq. Probably the last thing anyone was expecting me to do — even myself, was to create my own twitter client. However, I've been a little fed up with not having the features I wanted and running 5 or 6 accounts, I was getting annoyed at using several different applications just to have them logged in concurrently. [...] In under 24 hours I put together a twitter client that functioned enough for me to call it my one and only. A few more days and I added in enough features that I felt it was good enough for public consumption. It is however, not perfect and I have plenty of improvements on my to do list for it. - -p(((. ??"JournoTwit's introductory post":http://www.spodesabode.com/discussion/280/journotwit-the-twitter-client-thats-not-just-for-journalists/?? by Andrew Spode Miller ("@spode":http://twitter.com/spode) - -After months of _public consumption_, JournoTwit became a feature-packed Twitter client able to compete with a lot of mainstream alternatives – albeit remaining always relatively unknown to the masses. You can call it a _niche_ Twitter client, able to satisfy a few basic needs: -* The ability to manage multiple Twitter accounts at once. -* The ability to categorize all incoming tweets automatically, according to the type of information within them. -* The ability to keep track of unread tweets. - -These three features alone were enough to make JournoTwit my one and only Twitter client. And no, it's not only for journalists and writers. - -h3. Interface overview - -After logging in, JournoTwit looks like this: - -!=/img/pictures/journotwit/interface.png! - -**Note:** I am using the <em> "edge":http://www.journotwit.com/edge/ </em> version of JournoTwit, a sort of development snapshot with the latest features. - - -At the top, some more-or-less intuitive icons allow you to perform all the most common _global_ actions: -* Tweet -* Manual refresh -* Mark all columns as read -* Add new columns -* Quick search -* Edit settings -* Logout - -Next to this global toolbar, there's a list of links, each corresponding to a column. Clicking a link toggles the visibility of the corresponding column. - -In each column, tweets are displayed in different column according to their state: -* Read -* Unread -* Selected - -You can select one tweet at a time by clicking the *+* icon. This toggles the tweet-specific actions: -* Reply -* Send a direct message -* Save as favorite -* Retweet -* Translate - -Pretty intuitive and easy to use, so far. - -h3. Default columns - -When you login, you'll notice that all your tweets are _not_ presented in the traditional, disorganized single-column stream layout. Instead, they are _sorted automatically_ into different columns, according to their type: - -- My Feed := All the tweets _you_ sent. By default, this column is minimized. -- No-Mention := All tweets containing your username without the "@", i.e. every time someone mentions you sneakily, without sending you a reply. -- Messages := All the direct messages you sent and received. -- Mentions := All the tweets containing your twitter username (with "@"), such as replies to your tweets. -- Statuses := All the tweets posted by people you follow that do not contain any link or cannot be categorized through other columns. -- News := All the tweets posted by people you follow containing links to articles or non-multimedia web pages. -- Retweets := All the retweets posted by people you follow. -- Visual := All the tweets posted by people you follow containing links to pictures or videos. Where possible, media is displayed inside the tweet. -- Audio := Same as above, but for audio items. -- Chatter := Attempts to collect all conversations involving you or people you follow. - -Surprisingly, these default columns are enough to make your Twitter experience easier and more manageable, without configure a single setting. They're obviously not perfect: some images are not resolved automatically, for example, but it works well otherwise. - -Still this may not be enough for your needs or maybe simply not the right thing. No problem: JournoTwit is extremely flexible when it comes to organizing and sorting out your tweets. - -h3. Adding new columns - -All columns except for _Mentions_ and _Messages_ can be modified as you see fit. These two columns cannot be modified simply because there's nothing you _need_ to modify it, if you think about it. But they can be deleted, of course (and re-created in a blink, if you delete them by mistake). - -Let's go through the slightly geeky process of creating a column. - -When you click the **Add New Columns** icon on the top-left corner you'll be prompted to further clarify whether you want to add a... -* Set of Columns: i.e. the default columns provided by journotwit _or_ a single column containing all the tweets. Useful if you mess things up and you want to start over again. -* Preset Column: choose from many different columns according to your needs, from different tweet types to memes (#followfriday, #musicmonday, etc.). -* Custom Column: create your own personal column, according to your specific needs. - -Because the overwhelming majority of my readers is composed by geeks, I'll just describe how to create a custom column, so that you can fully understand the power of this tool, in the right hands. - -h3. Adding a custom column - -!>/img/pictures/journotwit/custom_column.png! - -The creation of a custom column doesn't take long, but there are quite a few things you can configure. First off, you have to specify whether you want the column to collect _local_ or _global_ tweets: local means the people you follow, while global means everyone on the planet. Simple enough. - -Then comes the juicy geeky part: search terms and tags. Simply type a valid "Twitter Search query":http://search.twitter.com/operators in the textbox, so something like this: - -@from:jonobacon OR #ubuntu -jaunty@ - -...will hopefully fetch all tweets posted by "@jonobacon":http://www.twitter.com/jonobacon or tweets about Ubuntu, but not related to the Jaunty Jackalope release. You can also add more text box and thus perform more search queries within the same column. - -Then you can filter by tweet type, enabling or disabling Statuses, Visual, Links, Audio, ReTweets and Chatter. Useful to remove the noise (if you follow "@brentspiner":http://www.twitter.com/brentspiner, make sure you disable _ReTweets_...). - -Finally, you only have to configure a few more settings: -* Whether you want to be alerted with a _beep_ when there are new tweets in this column. -* Whether you want the column to display tweets, a tag cloud or even an image slideshow. -* The name of the column. - -That's all. Simple enough. As a side note, the "No-Mention" column is nothing but a custom column in disguise: if you try to edit it, you'll see it's nothing but a search for "_username_ -_@username_ -from:_username_". - -h3. Other features and advanced settings - -For the tweakers, JournoTwit also exposes the a set of global settings you can modify to enhance your experience or disable annoying behaviors (depends how you look at it): - -h4. Behavior - -* Unhide column when new tweets arrive? (default: yes) -* Hide columns on Mark as Read? (default: yes) -* Play alert sounds? (default: yes) -* Animate when new items arrive? (default: yes) -* Default #hashtags and search bar to a local search? (default: no) -* Ignore Tag Coulds when marking all as read? (default: yes) -* Ignore Slide Shows when marking all as read? (default: yes) -* Warn when deleting columns? (default: yes) -* Automatically translate tweets using Google Translate? (default: no) -* Show "Did You Know?" messages on refresh? (default: yes) -* Slide show transition time(s) (default: 5) - -h4. Display Adjustment - -If you are unsatisfied by JournoTwit's default look and feel, you can change the fond size, the color theme (there are 18 possible choices) and even match the color of the icons with the current theme. - -h4. Black Listing - -Straight from the contextual help: - -bq. "Here you globally black list a #hashtag, such as #microsoft, or a search phrase such as "Windows 7". Remember to separate them with a space and that you can block on a per column basis too." - -This is just what you need when you want to filter out pointless tweets. Use with care though! - -h3. Conclusion - -Maybe it's just me being a geek, but I think JournoTwit nailed it when it comes to making Twitter more productive: everything _just works, and fast_, unlike some of its more feature-boasting competitors. I have been using it on a daily basis for weeks, and I've never missed a single tweet since (unless _I explicitly wanted to do so_). - -That being said, there are a few small features I'd like to see: -* I'd like to be able to mark _single tweets_, not entire columns, as read. In this way, when I go on vacation and come back, I can catch up with unread tweets more gradually, like I do with Google Reader. -* I'd like to use shortcut keys to navigate the interface, like with Google Reader. -* I'd like to configure tweets so that they only show up in one column, not in more than one (for example in Chatter, My Feed, and Mentions at the same time). -* Support for Twitter Lists... - -I already told "@spode":http://twitter.com/spode about some of these, and he said he'll look into it, we'll see what happens. Anyhow, just "give it a try":http://www.journotwit.com, and see if you like it! -
@@ -1,280 +0,0 @@
------ -subtitle: "A comprehensive review of the free editor from ActiveState" -permalink: komodo-edit-review -filters_pre: -- redcloth -title: A closer look at Komodo Edit -comments: -- :date: 2007-11-25 11:23:02 +01:00 - :author: dafi - :url: http://dafizilla.wordpress.com/ - :id: 126 - :body: |- - I like Komodo, too ;-) - - Consider macros are a powerful tool, they are very sophisticated. - Komodo macros have the power of VBA on Microsoft world. - - I've totally replaced UltraEdit the killer application on Windows Editor. - To cover all missing UltraEdit features I've written the MoreKomodo extension -- :date: 2007-11-25 18:37:12 +01:00 - :author: Bernard - :url: "" - :id: 127 - :body: |- - Komodo Edit also has syntax completion for the most known javascript libraries such as JQuery, Dojo, YUI or ExtJs. The CSS completion is also very handy. - - I've been using it extensively for the last 4 months on Windows XP and on Ubuntu and I can say that I'll never use anything else now for Python, HTML, CSS & javascript. -- :date: 2007-11-26 05:29:34 +01:00 - :author: JGiles - :url: "" - :id: 128 - :body: Why not just save the dollars and use Scite? It seems to have most of what you're talking about. -- :date: 2007-11-26 05:37:23 +01:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com/ - :id: 130 - :body: |- - @JGiles - - Komodo _Edit_ is FREE, unlike Komodo _IDE_. That's why I reviewed it in the first place: I don't like spending money on Editors and IDEs either! - Scite is good, and I use it sometimes, but Komodo offers much more features and has less "rough edges", for what I could see. -- :date: 2007-11-26 07:28:46 +01:00 - :author: Stavros - :url: "" - :id: 131 - :body: |- - Intype is only free for now, since it's an alpha, afterwards it'll cost something like $25 which is WAY too much for what I saw. I installed it, looked at it for a minute and uninstalled it, since I didn't see any good features that free editors don't have. - - I still mourn the loss of AnyEdit. It was by far the best editor, but it's not actively supported any more, and has many bugs :/ I wish someone would pick up its development. -- :date: 2007-11-26 12:15:42 +01:00 - :author: Nikhil - :url: "" - :id: 132 - :body: "You missed out another important point: it is extensible. Komodo Edit is built on the Mozilla XUL framework and you can create plugins much like you write extensions in Firefox. For eg, it doesnt display the list of open files like Notepad++ or Textpad, but you can quite easily create a plugin which does this." -- :date: 2007-11-26 19:20:40 +01:00 - :author: MorknMindy - :url: "" - :id: 133 - :body: |- - jEdit still blows it out of the water. For an 'editor' its severely lacking. I also take an instant dislike to anything using the scintilla control. I am _SO_ over the scintilla control. Every man + dog has written a wrapper around it and called it the next super programmer editor. - - Last time I tried komodo edit it was slow and a tad buggy regarding auto complete and tags. -- :date: 2007-11-27 05:44:44 +01:00 - :author: Korayem - :url: http://korayem.net - :id: 134 - :body: Komodo is the best IDE for Pythoneers -- :date: 2008-01-04 03:16:18 +01:00 - :author: Xscratch - :url: "" - :id: 195 - :body: "Fabio, thanks for great article, I love Komodo Edit too.\n\ - I noticed however you made some typos in the first part of it:\n\ - 1) \"Their commercial IDE, Komodo Edit, which I personally tried quite a long time ago\"\n\ - I think you meant Komodo IDE\n\n\ - 2) \"It costs money \xE2\x80\x93 this is not great in a world where Eclipse and Netvibes are free\"\n\ - Netvibes or NetBean?\n\n\ - See you!\n\n\ - PS: Is strange for an italian to write in (dummy) english in a blog of a compatriot :-)\n\n" -- :date: 2008-04-22 15:19:58 +02:00 - :author: Ruk - :url: "" - :id: 232 - :body: "Komodo is very nice but you make a mistake to say that is using 60K memory when is using 57,720K so looks you are missing some 3 digits :d " -- :date: 2008-04-22 16:05:53 +02:00 - :author: vioan - :url: http://www.vioan.ro - :id: 233 - :body: thank you for a really nice article. Yesterday I started to play with Komodo Edit and today I found your article, which is great. I am sure that Komodo will be my main tool, beside vim/gvim :). -- :date: 2008-05-27 11:14:13 +02:00 - :author: Todd - :url: "" - :id: 235 - :body: | - For those missing the code browser feature, you might like to try out the Source Tree extension, which gets you most of the same features: - http://community.activestate.com/komodo-extension/source-tree - -- :date: - :author: Rahul - :url: "" - :id: 2582 - :body: Guys have you tried Netbeans EA (Early Accesss) for Python, works great also supports debugging, code assisting and pylint support in built. Also Eclipse (Pydev) is equally cool -date: 2007-11-25 07:23:00 +01:00 -tags: -- review -- programming -- software -type: article -toc: true -intro: | - _What's your favorite code editor?_ - - This is a common question which still keeps popping up on community boards, mailing lists, comments, etc. Every programmer who writes code in some programming language normally has an editor of choice. Being realistic, most of the times it's not only one program but several, depending on the language and on the features needed at the time. - - Yes, great, but how do you choose your favorite editor? ------ -<a href="http://digg.com/programming/A_closer_look_at_Komodo_Edit"> -<img src="http://digg.com/img/badges/180x35-digg-button.png" width="180" height="35" alt="Digg!" /> -</a> - -_What's your favorite code editor?_ - -This is a common question which still keeps popping up on community boards, mailing lists, comments, etc. Every programmer who writes code in some programming language normally has an editor of choice. Being realistic, most of the times it's not only one program but several, depending on the language and on the features needed at the time. -Yes, great, but how do you choose your favorite editor? -By trying a lot of them of course: that's what I've been doing since I started programming. Lately I've become fond of "Vim":http://www.vim.org (or better, gVim), although I have a few other editors I may recommend, e.g.: - -* "Notepad++":http://notepad-plus.sourceforge.net/uk/site.htm -* "Intype":http://intype.info/home/index.php -* "SciTE":http://scintilla.sourceforge.net/SciTE.html - -Recently, however, I came across my _n^th^_ "what's your favorite editor" thread and someone mentioned "Komodo Edit":http://www.activestate.com/Products/komodo_edit/. I knew of it already, actually, but I never had a chance to give it a _proper_ try. -ActiveState is well known mainly for two things: - -* Their effort in offering a lot of commercial, windows-based Perl libraries -* Their commercial IDE, Komodo IDE, which I personally tried quite a long time ago - -The problems of Komodo IDE are foundamentally two: - -* It costs money – this is not great in a world where Eclipse and Netbeans are free -* It is an IDE – which normally means _'heavy as hell'_. - -It's a matter of taste and needs: some people feel more confortable with using an editor for certain tasks, while sometimes an IDE may be the best solution, despite its potential slowness and bulk. - -Komodo Edit solves the above-mentioned problems because: - -* It's free -* It's an editor - -Actually I wouldn't call it an editor, because it offers quite a lot of features which are normally absent in editors -- it's something in-between, which definitely deserves a try. - - -h2. User interface - -Komodo Edit's interface is one of the most clear I've ever come across. It is organized in four main areas plus the top menu and toolbar (which only has the buttons you REALLY need, unlike Notepad++'s 31-button-bar). - -!=/files/komodo_main.png! - -The central area is for editing, the left pane is for the Project browser, the right one is for the Toolbox and the bottom pane is for command output. Luckily enough, a set of handy little buttons is provided in the toolbar to show and hide each pane. I normally only use the Project Browser and the main editing area, leaving the Toolbox and Command Output panes hidden, but that's up to you really. - -!</files/komodo_show-hide_pane.png! - -Komodo Edit allows symultaneous editing of multiple documents, which means that it has tabs like most of the best editors out there. Furthermore, it is possible to have Komodo re-open the files edited in the last editing session, saving you a lot of time. Granted, a lot of IDE do, but this is *NOT* an IDE, remember? It's an _editor_, or at least it is advertised as such. - -In reality it has _most_ of the power of a full-blown IDE though normally remaining under the 60K memory usage (out of 2GB of total RAM) -- which is not that bad, considering what Eclipse and NetBeans need. -Out of all the "extra features":http://www.activestate.com/Products/komodo_edit/edit_vs_ide.plex offered by Komodo IDE, the only one I truly miss is the Code Browser. Other than that, it quickly became my editor/IDE of choice (when gVim isn't looking, of course...) - -Lets find out why... - -h2. Editing features - -Komodo Edit comes with all the editing features of ever average editor, so _"[...] Code commenting, auto-indent and outdent, block selection, incremental search, reflow paragraph, join lines, enter next character as raw literal, repeat next keystroke and clean line endings on "save"."_, it uses Scintilla as main editing component, which makes it a close relative of Notepad++, Notepad2 and of course SciTE when it comes to understanding languages and syntax highlighting. - -This is good, of course, as Scintilla is an excellent editing component, but – I have to say this – not as good as Vim when it comes to syntax highlighting (nothing is as good as Vim though, so I can't really complain!). -As you can see from the screenshot I included earlier on, it is possible to change the default black-on-white color scheme to something more stimulating and energy-saving. This doesn't mean I have to manually re-set the color of each element, it actually comes with a black-background scheme, which is handy. - -h3. Supported Languages & Syntax Highlighting - -Komodo Edit supports quite a few programming languages, which means it can recognize the most common ones (C, C++, Java, PHP, Python, Ruby, Perl) but it also smart enough to notice framework-specific syntaxes like Smarty, Django or RHTML. -Like every scintilla-based editors, it sports a nice HTML multi-highlighter which allows you to keep putting all the Javascript, CSS and server-side scripting into the same file, GREAT! No, you probably wouldn't want to do that, but it's a good thing to have. - -h3. Auto-completion - -What makes this editor a really handy tool is its auto-completion capabilities. Why? well, because it supports: - -* Ruby: require, class modules (on . and ::), class variables and methods, method calltips. -* Python -* Perl -* PHP -* XSLT -* XML -* Tcl - -Why is this so special? Well, because if you want this you normally need an IDE, and if you want it for Ruby AND Python AND Perl your choices are very limited. -I played with the Ruby auto-completion features quite a bit, and I'm actually really impressed. - -!>/files/komodo_auto-completion.png! - -It can suggest what to write through calltips after a @require@ directive, after a . and a ::, and hitting CTRL+SPACE (or just tab if you configure the right option) will auto-complete what you're writing, be it a language keyword, a variable of any kind or a method. Additionally, it comes with "soft characters support", which means it will try to match ( [ { when possible, allowing you to _write over_ the completed character if you want to. - -h3. Syntax Checking, Vi/Emacs key bindings and code folding - -The heading is almost self-explanatory here: Komodo Edit supports code folding (you can even chose the folding chracters!) for all its supported languages, syntax checking (it can detect and display errors before running the script, very useful in Ruby, and hard to find in other editors) and Vi/Emacs key bindings. -It also offers "vi emulation", which is constantly improving through every release – so you won't forget Vim's keys when I don't use it: very nice, and again, hard to find in other editors, nevermind IDEs! - -h2. Projects and Tools - -!>/files/komodo_toolbox.png! - -The Project Browser and Toolbox are two features which are normally presents in IDEs and which are normally not found in editors. Granted, some editors like "PSPad":http://www.pspad.com/en/ do indeed have "projects", but most of the others don't. A _project_ in Komodo Edit is normally composed by: - -* Some _Live Folders_ including all the source files of the application you're developing -* An optional set of tools, commands, snippets and other goodies which may help you coding that particular application. - -It is possible to create these tools by clicking the *Add Item to current project* button in the Projects toolbar or by clicking the *Add Item to Toolbox* button just over the toolbox. -Either way, you can choose among the following: - -h4. File/Remote File - -Add a file on your local machine or a remote file hosted on a server you configured via *Edit > Preferences > Servers*. Supported protocols are: FTP,FTPS, SFTP, SCP. - -h4. Folder - -This will _not_ link to a folder and import local files in Komodo, instead, it will create a container for other tools, not for local files. - -h4. Live Folder - -On the contrary, a live folder links to an actual folder on your machines, and all files and directories inside it are automatically imported. Note that it is possible to choose to include or exclude certain files or directories from being imported by right-clicking the folder and editing its properties. - -h4. Command - -This will create a shortcut to a command to execute. It is possible to specify its parameters, the directory where it will be run, whether its output will be displayed in the Command Output or in a newly-spawned console window, etc. etc. - -h4. Snippet - -TextMate fans will love this. Komodo will let you create a code snippet for later use. Furthermore, it is possible to specify "tabstops" to automatically select certain words when tab is pressed (so you can effectively fill in only particular fields of the snippet). - -h4. Template - -A simple but effective way to create code templates. - -h4. Url - -A link which will open a given url. - -h4. Open... Shortcut - -This will popup an *Open File* dialog in a direcxtory of your choice. - -h4. Macro - -For those who require even more customization, it is also possible to record or code macros in Python or javascript, and then configure their key bindings and triggers. - -h4. Custom Menu/Custom toolbar - -This was really impressive. Sure you can group all your tools in folders in your current project or you can create them in the toolbox to make them available all the time, but it would be cool if _the editor itself_ could make those tools available by default in a toolbar or a menu. Well, that's possible: all you need to do is create a new custom menu or toolbar and populate it with your tools by drag and drop. Very, very nice! - -This mini-framework to create custom tools can be used to create project templates in a blink. To show this concept, Komodo Edit comes with a Rails template with almost all the tools you need when coding a Ruby on Rails application: - -* Create/delete database -* Generators -* Migrations -* Run server -* Example view snippets - -h2. Conclusion - -Komodo Edit is an interesting editor which offers a lot of features which are normally only available in IDEs at a smaller memory footprint. Granted, when I want to jot something down I still prefer to fire up gVim, but for a serious coding session, Komodo is the right choice. -Its close attention to details and its ease of use make developing an even more pleasant experience, although perhaps there's still room for improvement, if you're really fussy. - -Sometimes when you start getting used of its advanced features, the lack of a code browser seems a real shame, but after all, ActiveState must sell their IDE to someone at some point! - -Another thing which I would have liked is the ability to create new syntax highlighting schemes, which Notepad++ and VIM both offer. Whydoes it bothers me so much? Well, because I'd like a "Textile":http://textism.com/tools/textile/ syntax highlighting scheme for writing blogs and articles. VIM and Intype seem to be the only ones which offer it out-of-the-box, but there's no trace of it in Komodo Edit. - -Actually it is possible to create new syntax highlighting schemes and extend Komodo Edit via "XUL extensions":http://community.activestate.com/addons, exactly like Firefox. After a closer look, the Django syntax was added in this way. - -Unfortunately there aren't that many extensions available for Komodo Edit, yet, but the "Activestate Community":http://community.activestate.com/ seems very active, so you never know. Additionally, the recently-started "OpenKomodo":http://www.openkomodo.com/ is a new project created by ActiveState to "[...] create an open source platform for building developer environments. ActiveState has open-sourced elements of Komodo Edit, a free multi-language editor for dynamic languages based on Komodo IDE, to create the Open Komodo code base". A new competitor for Eclipse and Netbeans will be available soon? - -<a href="http://digg.com/programming/A_closer_look_at_Komodo_Edit"> -<img src="http://digg.com/img/badges/180x35-digg-button.png" width="180" height="35" alt="Digg!" /> -</a>
@@ -1,101 +0,0 @@
------ -:title: "Book Review: Leading Lean Software Development" -:subtitle: "A lean leadership framework" -:image: /img/pictures/books/leadingleanswdev.jpg -:type: article -:date: 2010-12-27 15:15:45.785674 +02:00 -:toc: true -:tags: ["review", "books", "software"] -:permalink: leading-lean-software-development -:pdf: true -:intro: | - If you already heard the names Mary and Tom Poppendieck, chances are that you already know what _Lean Software Development_ is. If you don't, start from "this Wikipedia page":http://en.wikipedia.org/wiki/Lean_software_development. Mary and Tom coined this term with their first book on the subject "Lean Software Development: An Agile Toolkit":http://www.amazon.com/exec/obidos/ASIN/0321150783/poppendieckco-20, that was followed three years later by "Implementing Lean Software Development: From Concept to Cash":http://www.informit.com/store/product.aspx?isbn=0321437381, and finally by this book: "Leading Lean Software Development: Results Are not the Point":http://www.informit.com/store/product.aspx?isbn=0321620704. -:extended_intro: | - Unlike the two other books, this one is focused about making lean software practices succeed. In some way, it can be compared to "Succeeding with Agile":http://www.h3rald.com/articles/succeeding-with-agile-review/, but while Mike Cohn's book focuses entirely on Scrum, this book has a much broader scope. Moreover, the book contains a lot of digressions and stories —even not directly related to software development— aimed at understanding particular aspects of Lean Software Development and the Lean movement in general. - - The focus is, as the title suggests, on leadership: how can you be a good leader in these difficult, ever-changing times? How can you be agile without loosing your team? How can you improve the existing processes so that they can help you achieve your goals? If you ever asked yourself these questions, this is the right book for you... ------ -$[document.intro] - -textile_section[ - @title[Structure and Organization] -This book is extremely well-structured. Its Table of Contents follows some very rigid rules which make this book one of the most organized texts I've ever come across. It is divided into six chapters, each organized as follows: -* A _snapshot_ or an introductory story for the chapter's main topic -* Four _frames_, each describing a lean practice or personal quality -* A _portrait_ of a leader -* _Your Shot_, i.e. some questions and exercises for the readers - -image[@style[float:right]?[output?[pdf]|$[site.root]]/img/pictures/books/leadingleanswdev.jpg] - -In total, the book contains 24 frames constituting the "Big Picture", which is actually a very powerful framework for lean software leadership. You can read the book's TOC =>[http://www.poppendieck.com/llsd.htm|online] on the Poppendieck website and read the book's Introduction (\/=>[http://www.poppendieck.com/pdfs/LLSD_intro.pdf|PDF link]) on the whole concept of _framing_ (yes, both the authors do love photography!). - -When I started my career as a technical writer I used to love carefully-structured, simmetrical manuals. After a while, however, I understood that such rigorous structuring can even be dangerous if it becomes an obsession: you end up adding extra "padding writing" to make sections roughly match in length, or you start cutting down some other parts, for the same reason. Writing well-balanced books is hard, but I must say that the authors do a very good job with this book: it flows very naturally while keeping to its rigorous structure. -] -textile_section[ - @title[Chapter 1: Systems Thinking] -The first chapter is about customers, what they want and the goals of your system. It describes some interesting high level concepts like _failure demand_ and _policy-driven waste_, and how to spot opportunities to improve the process. - -What I found particularly interesting was the usage of "process maps":http://www.cps.gov.uk/publications/finance/process_mapping.html to analyze an existing process and find bottlenecks or leaks (in terms of time). I was instantly sold on this practice after reading the success story of how a company manage to reduce the overall time to process and solve customer issues simply by connecting customers directly to developers instead of tech support engineers. This is something you can't apply everywhere, but after creating a process map for that specific case, the solution was evident. - -More generally speaking, this chapter provides a recipe/checklist outlining the sequence of the phases of process improvement and problem solving: -# _Understand_ -# _Observe_ -# _Visualize_ -# _Evaluate_ -# _Implement_ -] -textile_section[ - @title[Chapter 2: Technical Excellence] -This is the only chapter focusing primarily on technical topics and knowledge. It starts with a very lengthy digression on the history of programming methodologies, aimed at understanding _what works and what doesn't_. Some examples of IT stuff that worked include the Internet, PCs and ...Open Source Software. - -This chapter provides a general overview on Software Development as a whole. It contains some interesting information on software complexity and dealing with architectural dependencies, comprehensive sections on testing and continuous integration, and just a half page on refactoring (understandable, seeing that there are already plenty of excellent books on the subject). -] -textile_section[ - @title[Chapter 3: Reliable Delivery] -The _Race to the Sky_ section at the beginning of Chapter 3 is by far the most fascinating of the non-IT stories included in this book. It describes the construction of the Empire State Building in 1930, how it was planned out, what strategies were followed, and why it succeeded (why _the construction_ succeeded: the building itself remained totally unprofitable for quite some time). - -There are "plenty":http://en.wikipedia.org/wiki/Empire_State_Building#Further_reading of books on the subject, but Tom and Mary Poppendieck well summarize the key points of this modern-day epic achievement: how to build the tallest skyscraper in the world in a single year. This story teaches us how to work under very tight deadlines, by designing a system to fit constraints, rather than estimating up-front. - -This story was perfect to introduce, in the same chapter, concepts like =>[http://en.wikipedia.org/wiki/Kanban|Kanban], _pull scheduling_ and _adaptive control_, which only recently have been seriously considered in the world of Software Development but they are becoming more and more relevant. -] -textile_section[ - @title[Chapter 4: Relentless Improvement] -Chapter 4 starts with a brief history of the checklist, which was invented in 1935, to be used by airplane pilots. It then moves on to its usage in hospitals, describing how checklists helped dropping infections caused by inserting central venous catheters incorrectly. Why all this? To focus on the concept of _process standards_, or better, how _we_ can improve processes to accomplish our goals. - -Basically, this us what Toyota does: regulations should not be written on stone, but they should reviewed and updated frequently for continuous improvement or =>[http://en.wikipedia.org/wiki/Kaizen|Kaizen]. - -Finally, this chapter also briefly introduces a few different ways to perform root-cause analysis, such as using =>[http://en.wikipedia.org/wiki/Ishikawa_diagram|fishbone diagrams]. -] -textile_section[ - @title[Chapter 5: Great People] -This chapter and the last one are actually focused on people and management. In this chapter, an unusual (for this kind of books, that is) but intriguing analysis on different countries using the following dimensions: -* power distance -* individualism -* masculinity -* uncertainty avoidance -* long-term orientation - -Turns out that individualism is abundant in the Western world but not so much in the Far East (who would have thought!), but the opposite applies to power distance. A bit stereotypical, if I may, but not too much: the results are not surprising, especially when it comes to considering different cultures as a whole. Once more, the focus is again on Toyota's Kaizen and their culture of _respect for the people_. - -On page 198, the meaning of the subtitle of the book (Results Are not the Point) is revealed: q[developing the people and the system so that together they are capable to achieve successful results is the point]. Agile is precisely about this: focusing on the people. - -But what about leaders? This is an aspect of the whole Agile philosophy that I keep stumbling upon: if you want _The Team_ to be in charge, what happens to leadership? As I found out myself working in and with Agile Teams, often there's a serious lack of strong leaders. q[Leadership needs to be gently refactored into Agile], that's what Mary and Tom recommend. How? It depends on each specific case, but it must always be done _gently_. -] -textile_section[ - @title[Chapter 6: Aligned Leaders] -The final chapter begins with the history of _Agile@IBM_, or how to turn the biggest software company in the world into a massive agile machine. It wasn't a top-down decision, the CEO didn't just wake up one morning and decided that everyone should go Agile. Quite the opposite: it was something that was _pulled_ by developers rather than _pushed_ at them. - -In cases like this, companies should be focusing on developing people, including good leaders, instead of particular initiatives and processes. Leaders in turn should shift their focus from details to more high-level decisions. When it comes to facing changes, leaders should look at the "12 principles":http://www.bbrt.org/beyond-budgeting/bbprinc.html of the "BBRT":http://www.bbrt.org/ leadership model. - -The final portrait, _Leaders at all Levels_, well summarizes the key to successful leadership: q[leadership is about example, coaching and helping others to achieve their goals]. -] -textile_section[ - @title[Final Thoughts] -If you're looking for a manual on implementing Lean Software Development in detail, this is probably not the best book on the subject. If you're a developer at the start of your career, with no management responsibilities, you'd want more technical juice, so probably you should read the other two books by the Poppendiecks on the subject first. - -On the other hand, if you have been working in IT for a few years, and maybe you already started to climb up the corporate ladder, reading this book could make the difference between being successful leader or not. This book does not go very in-depth with any particular methodology or process, but it does provide an excellent overview of a lot of them. - -To get the best out of _Leading Lean Software Development_, you should read it a least once sequentially, skipping the parts that are not relevant to you (right now), taking notes on the more interesting frames, and then go back over them to digest them properly. Do _not_ skip the introduction of each chapter though, for one because they are always pleasant to read between frames, and also because they do teach some very important values or strategies that you _must_ assimilate. - -The general message that stands out when reading this book is _focus on people_. Customers, of course, but also employees: every single successful company mentioned in this book, from Toyota to Southwest Airlines, became successful because they always focused on developing people _first_, and _then_ products. -]
@@ -1,31 +1,9 @@
----- -:permalink: litestore -:title: Introducing LiteStore -:subtitle: A tiny, lightweight, self-contained, RESTful document store -:type: article -:intro: | - Lately I have become more and more interested in client-side single-page applications. Nowadays you can write your web apps in Javascript using your favorite framework, without any server-side logic, but you obviously still need: - - * some web service to retrieve and persist your application data. - * a web server to serve the source code and the static assets of your web application. - - NodeJS is probably one of the easiest backend to setup for prototyping SPAs. It is very easy to create a simple web server in Node and to implement a simple REST API using Express or a similar framework, but you still need to install node and write some code to wire up your backend. - - I wanted something even more lazy then that. I wanted a fully _self-contained_ program able to: - - * Serve static files - * Act as a simple JSON document store - * Provide a simple REST API to work with - * (bonus!) provide a way to pack web apps for easy distribution - - ...and that's how I ended up developing _LiteStore_. - -:tags: -- webdevelopment -- databases -- litestore -- opensource -:date: 2015-09-20 21:01:45.000000000 +01:00 +title: "Introducing LiteStore" +content-type: article +subtitle: "A tiny, lightweight, self-contained, RESTful document store" +timestamp: 1442779305 +tags: "webdevelopment|databases|litestore|opensource" ----- Lately I have become more and more interested in client-side single-page applications. Nowadays you can write your web apps in Javascript using your favorite framework, without any server-side logic, but you obviously still need:@@ -42,6 +20,8 @@ * Provide a simple REST API to work with
* (bonus!) provide a way to pack web apps for easy distribution ...and that's how I ended up developing _LiteStore_. + +<hr class="sep" /> [LiteStore](/litestore) is a lightweight, self-contained, RESTful, searchable, multi-format, NoSQL document store and web server. That sounds pretentious, but it is essentially an accurate description of what LiteStore is and does.@@ -296,3 +276,4 @@ * The creators and contributors to the [Bootstrap](http://getbootstrap.com/) CSS and Javascript framework, used by the LiteStore Administration App.
* The creators and contributors to the [Ace Editor](http://ace.c9.io/), used by the LiteStore Administration App. * Cristopher Jeffrey and all the contributors to the [Marked Javascript Library](https://github.com/chjj/marked) used by the LiteStore Administration App. +
@@ -1,61 +0,0 @@
------ -summary: "Featuring this month: wedding planning, easter in London, XBox gaming and more." -permalink: log-apr-2009 -filters_pre: -- redcloth -title: Personal Log - April 2009 -comments: -- :date: - :author: Elora - :url: "" - :id: 2701 - :body: May 8 here we come!!! -date: 2009-04-28 06:11:00 +02:00 -tags: -- personal_log -- ruby -- books -- wedding -type: article -toc: true ------ -April is tratidionally a rather busy month: Easter, public holidays, and — always — some deadline to meet at work. Moreover, my birthday is also in April which makes it even more busy! Let's see what happened this year...h3. Using Ruby in a corporate environment - -I've been using Ruby at work for a while now. I started off writing some automation script for my own needs, then someone noticed it and asked me if by chance I could develop some scripts for them, for automating part of their own job, and so on. My boss ultimately noticed it, and she liked the idea of me investing a small portion of my time to make other people save huge amount of _their_ time, so now I am _officially_ in charge of workflow improvements and automation (it's even in my job description!). - -This month a colleague of mine and I had to figure out a way to write some documents *once* in XML format and then produce different kind of outputs (other XML files, PDFs, etc.) using the "DITA Open Toolkit":http://dita-ot.sourceforge.net/. Originally we thought the toolkit would do most of the job, but we soon realized we needed to tweak and change a lot more than what we usually expected. - -We ended up hacking together a _system_ using: - -* "Microsoft Infopath":http://office.microsoft.com/en-us/infopath/default.aspx as XML editor for the end users (the company buys it by default, so no worries there) -* A Ruby program to parse and manipulate the original XML and produce DITA-compatible XML files. -* Some "Apache Ant":http://ant.apache.org/ tasks available in the open toolkit to produce an XSL-FO file -* "Apache FOP":http://xmlgraphics.apache.org/fop/ to produce the PDF from the XSL-FO file... - -The thing seems to work fine (after a lot of tweaking), and I really enjoyed creating the Ruby program to _glue_ everything together. I even got a chance to introduce my colleagues to the wonderful world of "Textile":http://hobix.com/textile/ (they are so happy that they don't want to use WYSIWYG editors anymore!). - -h3. Easter in London - -As usual, Roxanne and I spent our Easter holidays in London, at her brother's place. This year we actually had 9 days to go around -squandering money- spending _wisely_ in food, books, clothes and entertainment. - -Most notably, I managed to drag Roxanne to "Foyles":http://www.foyles.co.uk/ and I got myself a copy of "The Pragmatic Programmer":http://www.pragprog.com/the-pragmatic-programmer, which I'm reading avidly. If it was up to me I was going to buy half of the computing section, but Roxanne _kindly pointed out_ that I could get all of them from Amazon for half the price. -And she was right: for my birthday I preordered a copy of "Programming Language Pragmatics, 3rd Ed.":http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144, which should be shipped soon. - -h3. Wedding planning - -My spreadsheets for the wedding guests, wedding expenses (!) and ...suit sizes are getting bigger and bigger. We managed to book a lot of flights to Ireland to my parents, us, relatives etc., but there are still quite a few things to do for the wedding. The most urgent thing to do right now is sending the invites: we had them printed with the words _RSVP within May_ on them, so they _have_ to be out in one or two weeks at most. - -The other thing which must be sorted soon are the suits. According to English (and Irish) tradition, the groom, the bestman, the father of the groom, the father of the bride and the ushers have to wear the same type of suit, with minor differences (the color of the waistcoats?). In my case, this means getting 7 (SEVEN) _morning suits_ off eBay, in the right sizes! Hopefully I'll be able to get them by the end of next week (if my bestman manages to let me know his sizes). - -h3. XBox 360 Gaming - -Now that our new XBox 360 finally came through, Roxanne and I have a lot of hours of hard core week end gaming ahead of us! This, added to the physiological increase of stress due to the wedding, may result in a temporary slowdown of my coding and writing activities. -Right now we're playing "Mirror's Edge":http://xbox360.ign.com/objects/949/949455.html, "Mass Effect":http://xbox360.ign.com/objects/718/718963.html, and "Unreal Tournment III":http://xbox360.ign.com/objects/746/746631.html. The last one was a special surprise present from Roxanne (_"...so we can kill each other!"_ — she's really lovely at times!). - -h3. Other tech-related tidbits - -* I can't wait to go to the cinema to watch "Star Trek XI":http://www.imdb.com/title/tt0796366/ -* I started using "Shelfari":http://www.shelfari.com/ -* I started using "Star.io":http://start.io as my personal, bare-bones start page. -* I recently "released Concatenative 0.2.0":http://www.h3rald.com/articles/concatenative-020. -* I'm currently evaluating the possibility to create a Ruby-based _Document Authoring Framework_. Stay tuned.
@@ -1,116 +0,0 @@
------ -permalink: log-feb-2009 -filters_pre: -- redcloth -title: Personal Log - February 2009 -comments: -- :date: - :author: Dana - :url: "" - :id: 2691 - :body: I like the "Recession time!" article, very honest. -- :date: - :author: Marko - :url: http://www.solidnybank.com/ - :id: 2692 - :body: Nice article! -date: 2009-02-27 13:09:00 +01:00 -tags: -- personal_log -- ruby -type: article -toc: true ------ -This has been a rather busy month, hence the lack of general Internet activity. I really wanted to post some more articles to my site, but for one reason or another I had to procrastinate more and more, and here we are at the end of the month again. - -h3. Recession time! - -I've always considered the current economic downturn as something happening _somewhere else_: USA, England, Ireland... but not in Italy, really: our country never boomed, we don't go mental with loans and mortgages (or at least we didn't use to), so there's no real reason for a full-on recession period. - -It turns out I was wrong. Other than the fact that our industries are more or less non-existant or already in debt, I didn't consider that: - -* Italians tend to panic a lot. -* We have an awful lot of foreign business going on, a lot of multi-national companies opened up through the years lured by cheap workers and acceptable craftmanship. -* Our government already -wastes- invests a lot of money regularly, every year, to fuel a colossal, "nepotistic":http://dictionary.reference.com/browse/nepotistic, pointless bureaucratic machine they insist on calling "State". - -Result: the recession is starting to hit properly over here too. People are saving money, they don't go out buying pointless crap, they are scared to ask for a raise at work... the usual. I work for a foreign company which has been, as were most, forced to save some money to compensate some not-so-good First Quarter's revenues. This means less unnecessary expenses, less training, less travelling and less outsourcing, which didn't help improving the daily work experiece. Personally, I'm not that affected by all this, nevertheless it made me bless the day my fiancée persuaded me to stop uni after my Bachelor's Degree to get a very rewarding, not-so-stressful job. - -h3. No 'Net @ Home - -The most annoying thing of the month was (and still is) the lack of Internet access at our house. Let's do a quick recap: - -# After spending one year with Telecom Italia, Roxanne and I decided to change provider to save a bit of money and get more speed. -# On _December 24th_ we requested a contract with "Wind":http://www.wind.it, after they assured that we'd have the Internet back on in _just a few days, tops_. -# On _January 5th_ Telecom disconnected us. -# On _January 12th_ Wind sent me a mail telling me that there was going to be a _15-day delay_ in the activation — well, at least they told us so! We waited. -# On _February 2nd_ I call Wind Customer Care hassling them to get a move on — just some minor delays, _it will only take a few days, tops_. We waited. - -Our new Internet line has been _in the process of being activated_ ever since January 5th. Why? Because being a customer sucks, in Italy, and you can't do much about it. -Let me quote one of the 13 phone calls I made: - -* ... 5 minutes on hold, stupid music in the background ... -* [Operator]: Good Evening Sir, I'm <random name>, how can I help you? -* [Me]: Hello, I'm enquiring about the status of my Internet connection: I've been disconnected since the 5th of January... -* [Operator]: Phone Number please? -* [Me]: <notextile>*** ******</notextile> -* ... 2 minutes on old ... -* [Operator]: Name plase? -* [Me]: Fabio Cevasco -* [Operator]: Let me check... -* ... 6 minutes on hold, stupid music in the background ... -* [Me]: Any luck? -* [Operator]: One moment please... -* ... 2 minutes on hold, stupid music in the background ... -* [Operator]: Sir, it says here that you are _in the process of being activated_ -* [Me]: (you stupid idiot, I can check that on the Net in less than a minute) Yes, I know what, but why, exactly? It has been over a month... -* [Operator]: Let me check... -* ... 3 minutes on hold, stupid music in the background ... -* [Operator]: There are some technical difficulties. -* [Me]: What kind of technical difficulties? -* [Operator]: I... I don't think you can understand Sir, it's technical... -* [Me]: (!!!) I have a degree in IT Engineering, so yes, I think I can understand enough. -* [Operator]: ...well, there's nothing I can do... it says we're in the process of connecting you, it should be just... -* [Me]: ...a matter of a couple of days, yes, I know: it has been over a month though! -* [Operator]: Sir, really, I can't really do much about it, you'll just have to wait -* [Me]: Can you let me speak with the Technical Department? -* [Operator]: No, sir, I can't: you see, your ADSL line is not yet activated, they can't do anything about it. -* [Me]: Excuse me, but I'd like to know what the problem is, and how long it will take to activate the line. -* [Operator]: Sorry sir, we don't have this information, and we can't commit to a specific date. -* [Me]: (!!!) May I speak to someone who knows this? May I speak to your superior? -* [Operator] No, you can't speak to my superior. You'll just have to wait, I'm sorry. -* [Me]: Well, it has been over a month, and I don't know if you realize that you were supposed to connect me in just a few days and... -* [Operator]: Thank you for calling sir, have a good day. - -That barely conveys the frustration I felt and I'm still feeling now. I can't even sue them: I could get 100 Euro at most after spending at least a couple of thousands in lawyer. So much for the land of sunshine huh? - -h3. Programming in Ruby, again - -Some of you may be pleased to know I'm back coding in Ruby after slacking for months. It's just the time of the year, I guess. -I'm also evangelizing the language quite a bit at work: after I wrote a few scripts on demand, I slowly lured one of my colleagues to Vim, the Texile markup and then finally the Ruby language. He's going through the "Humble Little Ruby Book":http://www.h3rald.com/articles/hlrb-review and he's loving it, so far. He'll hopefully be fully assimilated in a few weeks at most, and after that there will be no going back! - -This inspired me to start a full rewrite of "RedBook":http://www.h3rald.com/tags/redbook/, my little Ruby daily logger. It will feature a SQLite backend and Merb's Datamapper to take care of the dirty work. -Unfortunately, even if the new sources are already available on "GitHub":http://github.com/h3rald/redbook/tree/master, it will take me approximately a few more weeks to complete all the plugins and more to finish the RDoc documentation and — hopefully — a fully-fledged user manual. It's *the* pet project, after all... - -On the other hand, it will take me considerably less time (a few days?) to release the next version of my "RawLine":http://www.h3rald.com/tags/rawline library, featuring: - -* Ruby 1.9 support -* A handy little function for filename completion -* Readline emulation, i.e. just @include Rawline@ and use it as if it was GNU Readline - -Of course this doesn't mean RawLine is a complete, 100% Ruby port of the GNU Readline library, but it is definitely more Ruby-ish, more cross platform (try using Readline with Ruby on Windows...), and usable enough for most of the normal things, like: - -* tab completion -* line editing (but no vi or emacs mode yet, sorry) -* history -* quick and easy key bindings - -Once this comes out, I'll be implementing features on-demand, as GNU Readline is huge and offers way too many things anyone would ever need. Patches and contributions are of course more than welcome, though. - -For all my open source Ruby projects, after "pondering the alternatives":http://www.h3rald.com/articles/where-does-your-ruby-code-live, I decided to go with the following setup: - -* My own site for the home pages of the projects -* RubyForge for gem support and for RDoc documentation -* GitHub as source code repository -* LightHouse for issue tracking - -I hope it works out...
@@ -1,14 +1,8 @@
------ -permalink: log-jan-2009 -title: Personal Log - January 2009 -comments: [] - -date: 2009-01-25 11:51:00 +01:00 -tags: -- personal_log -- wedding -type: article -toc: true +----- +title: "Personal Log - January 2009" +content-type: article +timestamp: 1232880660 +tags: "personal_log|wedding" ----- Those who read my blog regularly may have noticed how I normally refrain from posting articles concerning my own life. I used to have a more blog-like web site, but things changed: _"Who would want to read about my life, anyway?"_ — That's what I always thought. Hence, I focused on writing general-interest, computer-related articles about programming in Ruby, about some IT book which came out, or about the latest chapter in the Browser Wars. You'll find all this in the [archives](/archives/).@@ -56,3 +50,4 @@ To make the whole thing more fun, I'll try (_try_ I said, I may change my mind) to write the RedBook Manual using [LaTeX](http://www.latex-project.org/). It shouldn't be too complicated as I'll need only 10% of its features, and hopefully the result will be pleasant enough to read.
That's it for this month, I think. For those who think this is just a long note on my Facebook profile, check out [the real deal](http://www.h3rald.com/articles/log-jan-2009) on my [web site](http://www.h3rald.com) (did I say Facebook is _totally useless_ for web promotion?). +
@@ -1,76 +0,0 @@
------ -summary: "Featuring this month: open source develoment plan, the 8th release of this very web site, and the usual wedding updates." -permalink: log-jun-2009 -filters_pre: -- redcloth -title: Personal Log - June 2009 -comments: [] - -date: 2009-06-29 02:24:00 +02:00 -tags: -- personal_log -- vim -- ruby -- wedding -type: article -toc: true ------ -Welcome to yet another of my extremely boring, excessively fragmented "personal log":/tags/personal_log posts. I'm seriously thinking of dropping the whole series in favor of more frequent (and shorter) blog posts, starting from next year. This means you'll probably have to read _another six_ of these priceless gems, until december 2009. -As usual, feel free to skim through as each of the following _sections_ is almost completely unrelated to the others. - -h3. H3RALD Web Site v8.0 - -It's the time of the year, again. It doesn't happen _every_ year but it's definitely a trend (hence the high version number): I'm going to redesign & redevelop my web site. - -This time is not the usual "Let's pick another language and another framework and start from scratch", but a rather more radical shift, and yet at the same time less painful. The idea is to transform H3RALD.com into a 100% static web site, without losing anything in functionality (gaining, if anything!). - -"Tom Preston-Werner":/http://tom.preston-werner.com/ is definitely _not_ the first person to "blog like a hacker":http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html, and his very own "Jekyll":http://www.jekyllrb.com/ is definitely not the first static web site generator our there, nevertheless, he inspired me to embrace what seems to be one of the latest trend in developer's blogs. - -The idea is simple: turn all the blog posts and pages into static content, and rely on third party web services for things like comments, search etc. For a rather extreme by very interesting example, see "Tagaholic":http://tagaholic.me/. - -The advantages of this approach are many: -* Free yourself from a database. -* Free yourself from a resource-hungry, server-side app ("Typo":http://wiki.github.com/fdv/typo/, in this case). -* Increase speed and reliability, without using caching or similar artifacts. -* Keep everything under version control. -* Don't worry about breaking things when upgrading (even if the static content generator changes, it shouldn't really break things). -* Unleash the power of client-side scripting (namely, JQuery). - -For now, I'm just brainstorming a little bit on "GitHub":http://github.com/h3rald/h3rald-website/issues, feel free to participate. The first step is obviously choosing a static content generator, and atm Jekyll seems to be slightly ahead of Webby. Opinions? - -h3. Glyph - -Did you ever want to write a short manual or a book, or even a long article? If so, chances are you gave LaTeX a shot and either fully embraced its philosophy or totally refused it. Sadly, I belong to the second category: I believe sequential documents like manuals or books should be easier to create simply by using HTML. - -Whever I have a chance to actually start working on it, Glyph will become a _document authoring framework_, i.e. a way to create visually appealing documents in a simple way. All the ingredients are there, it's only necessary to glue them together in a pretty form: -* Textile (and "RedCloth":http://redcloth.org/) to produce clean HTML code from a human-readable markup -* CSS3 to specify page rules -* A few rake scripts to produce a standalone HTML file, TOC, Index etc. -* An internal DSL for the document structure and metadata -* "Liquid":http://www.liquidmarkup.org/ for control flow, snippets and filters -* "PrinceXML":http://www.princexml.com/ to generate a PDF from HTML - -This project is still in planning stage, feel free to have a look at the "issues/features page":http://github.com/h3rald/glyph/issues on GitHub. Feedback is appreciated, as usual. - - -h3. Vim files & _the Stash_ - -If you read the previous two sections of this post, you may have noticed that I'm growing more and more fond of git (and GitHub). Besides the repositories I already mentioned earlier on, I also created a personal "stash":http://github.com/h3rald/stash, which I'm using mainly to store some of my Linux dotfiles, article drafts and ...Vim customizations. - -If you're looking for a color scheme for Vim, check out my very own "herald.vim":/herald-vim-color-scheme, and tell me what you think. - -h3. Getting ready for the Big Step - -This will probably be my last post as a free man, as I'm getting married (civilly) on July 2nd and (religiously) on July 11th. -Luckily the photographer agreed to give us a CD with all the pictures taken on the big day, with no copyright restrictions attached to it (believe it or not, some photographers don't allow you to republish _your own_ photos unless you ask them first), so I'll probably write a long post with pictures when we come back from our (half) honeymoon. - -Everything is pretty much organized. We had troubles with the waistcoats we got from eBay: they were cut almost randomly to _resamble_ waistcoats, but they weren't so we had to re-order another lot of 7 sets (waistcoat, cravat _and_ shirt this time) from another seller, this time UK-based. I seriously hope to get them in time. - -On the 24th we're having a party at our house. If you were invited, feel free to drop by, otherwise be prepared to be thrown out of the window (4th floor) by one of our ushers (Roxanne's _big_ brother). It's probalby going to be about 30-40 people in the end, mainly because most of my office can't come due to holidays they booked in advance. - -What's left to do now? Well: -* Send the bomboniere over to Ireland -* Make sure my dad actually ships the 96 specially-bottled bottles of our own wine to uncle John, in Ireland. -* Make sure uncle John doesn't drink all the 96 bottles of wine before the wedding reception. -* Make sure my best man understood that the speech he has do make _must_ be in English, at least 3 minutes long and not too offensive to the groom. -* Pay a huge, colossal heap of money for the whole thing. It's going to cost us (and my dad) quite a bit, in the end. But it's a once-in-a-lifetime experience, after all (getting totally trashed in a fancy hotel with all your family, including 2nd and 3rd grade cousins).
@@ -1,52 +0,0 @@
------ -permalink: log-mar-2009 -filters_pre: -- redcloth -title: Personal Log - March 2009 -comments: -- :date: - :author: Magrabi - :url: http://magrabi.wordpress.com - :id: 2694 - :body: |- - congratulation . - hope to married soon and live a wonderful life . -date: 2009-03-30 06:04:00 +02:00 -tags: -- personal_log -- wedding -- ruby -type: article -toc: true ------ -Another month _without_ the Internet at home. This is getting really annoying, and I decided to change provider, *again*, hoping that I'll eventually get my broadband back, someday. Luckily I can still go online at work, but of course it's not the same thing: my time on Twitter and Facebook is now basically limited to weekends only, when Roxanne and I go down to Tuscany to stay with her parents. - -h3. Concatenative programming - -For some weird reason I became fond of the "Concatenative programming paradigm":http://en.wikipedia.org/wiki/Concatenative_programming_language. I started reading about "Joy":http://www.latrobe.edu.au/philosophy/phimvt/joy/j00rat.html and then started to work on a Ruby DSL able to do the similar things: "Concatenative":/concatenative/. Another pet project — as if I didn't have enough things to do already! - -Some people seemed pleased about it, especially on "Reddit":http://www.reddit.com/r/ruby/comments/887kn/concatenative_programming_in_ruby and "dzone":http://dzone.com/links/concatenative_programming_in_ruby.html. The downside of it is that it's still fairly slow if compared to Ruby code (which is not exactly fast, either!), so if I had some spare time I should really try to implement it as a C extension, maybe. - -h3. Learning new programming languages? - -Incidentally, I'm still fighting with myself on whether to learn another programming language or not. At this point, learning "Factor":http://www.factorcode.org could turn out to be more natural than months ago. However, I would only learn new programming languages as a hobby, as I don't need to do so for profit: luckily I'm still a happy technical writer and I enjoy my job. - -I admit, I'm still looking for _the_ perfect programming language which is fun to learn (not easy: fun), elegant, minimalist, fast, general purpose and cross platform (meaning Linux, Windows, and Windows Mobile as well). Of course there is no such thing out there and there will never be, so I'm still evaluating the current alternatives. Possible candidates are Haskell, Factor, some dialect of Lisp or C. -Why C? Well, because I didn't do much with it since my first year at uni, and it could still be useful to write Ruby extensions or implement something at a lower level. After so much time getting spoiled by high level languages, I kinda miss the low level stuff. Ahhh where are all the pointers gone?! - -On the other hand, I'm getting married soon, and I should use these months to help my wife-to-be a bit more with wedding planning (see next section). After all, I can always learn a new programming language _after_ getting married, right? ..._right?!_ - -h3. Wedding planning - -Roxanne and I are slowly getting more and more things done for the wedding. Every attempt I made to introduce her to "GTD":http://en.wikipedia.org/wiki/Getting_things_done failed miserably so far, or better, it worked too well: she is now getting used to make lists and deciding on our _next actions_ for the weekend. -This weekend we booked our flights to Ireland, looked at cottages and hotels for the three days after the wedding (not the honeymoon yet, we'll have a late honeymoon in autumn), chose the waistcoats for me, my bestman and the ushers, and ...booked the wedding car! -Now, this turned out to be good fun! Take a look at "Ruby":http://www.alleventslimos.com/Wedding/rolls_silver_cloud.html (yes, yes, I know... ), a Silver Cloud II 1961 Rolls Royce which will be ours for (less than) one day! - -h3. Other tech-related tidbits - -* I successfully migrated to Ubuntu 9.0.4 Jaunty. Everything works, except the flash plugin for Firefox. -* I'm now using TweetDeck as my main Twitter client on both Windows and Linux. -* I'm thinking of buying (after the wedding) an Eee PC (no Macs: Ubuntu is sleek and powerful enough &emdash;and free, too). -* We finally got an XBox 360 from eBay, this time it came through the post. -* Roxanne is thinking of buying a big LCD TV to go with it &emdash; I'm politely (and sadly) postponing till after the wedding. -* After listening a FLOSS Weekly episode featuring it, I think I'll get myself an "Arduino Board":http://arduino.cc/ for my birthday.
@@ -1,95 +0,0 @@
------ -summary: "Featuring this month: Wedding planning, impression on the Star Trek premiere in Genoa, some comments on the Nimrod programming language, and more." -permalink: log-may-2009 -filters_pre: -- redcloth -title: Personal Log - May 2009 -comments: [] - -date: 2009-05-31 06:35:00 +02:00 -tags: -- personal_log -- programming -- wedding -type: article -toc: true ------ -Yet another extremely busy month, as you can see from the total absence of blog posts and lack of tweets even. Things are getting pretty hectic at work now I guess: less people, more work, more responsibility, same money. They call it ??contingency??; it's the latest trend in the Western World, didn't you know? I'm really not impressed. I can't complain though I guess: I still enjoy my job very much and I know it could be much worse, so it's just a matter of enduring until autumn -- or so they say. - -h3. Star Trek Premiere - -The month started with an event I'd been looking for for months: the _premiere_ of Star Trek XI, aka "Star Trek". It's not that J.J. Abrahms couldn't come up with a more original name (_Star Trek: Academy_ used to be the working title, at one point), he simply wanted to tell the world that this movie was a new beginning, an elaborate way to start from scratch, to reboot what was more than once dubbed _a dying franchise_. - -The movie was enjoyable - daring and a bit flamboyant - but still enjoyable nonetheless. I consider myself a Star Trek fan, and although it was _not_ the usual Star Trek movie, I somehow liked Abrahms' bold revisitation of Roddenberry's universe. Take a bunch of unknowns (Chris Pine) or semi-unknowns (Zachary Quinto), then add some spicy British humor (Simon Pegg) and some old friend (Leonard Nimoy) and throw in an awful lot of XXI century special effects: what you get is not the usual, let's-all-rock-because-we're-hit traditional Star Trek, of course, it's an _alternate_ version of it. - -That's precisely what the movie is meant to be: what Star Trek would have look like if it had been created in the XXI century. The timeline feels disrupted since the very first minute (nevermind the end!), with a Jim Kirk stealing his stepfather's car. Chris Pine is an ["alternate":http://memory-alpha.org/en/wiki/James_T._Kirk_(alternate_reality)] Kirk, quite different from the original one, but not that bad. Zachary Quinto, on the other hand, is a true revelation: he definitely is the new Spock, and he couldn't have been cast better. So is Simon Pegg as Scotty, but unfortunately he's not involved enough. - -The baddies were a bit of a letdown. Nero is a bit too flat, and his ship is way too fancy, no matter where it comes from. Clearly some Hollywood junkie wanted a big, invulnerable dark ship to bring havoc in the galaxy, but that is NOT a Romulan ship, period. - -At any rate, I enjoyed the movie and I'm looking forward to the second one, which I hope it will be followed by many others. - -Unfortunately in Italy Star Trek is not worshiped in Italy as in it is the US, which is very unfortunate... Roxanne and I decided to play along and go to the cinema half-dressed-up, but our friends Elora and Michelle came with a full-blown Uhura uniform! The whole cinema kept staring at us. It was a bit freaky, but fun (check out the pics on Facebook -- if you can, that is, I won't post them here!). - -h3. Wedding Planning - -Just over a month to my wedding. Scared? You bet. Stressed out? Indeed. Roxanne and I managed to get most of the things organized in the end, luckily. In particular, this month: -* We went to the British Consulate in Milan, and applied to get Roxanne's legal documents. -* I bought and had the 7 vest sets delivered to Roxanne's brother's (Caspar) place, in London. -* I ended up buying 8 (buy three, get one free) morning suits from "Marks and Spencer":http://www.marksandspencer.com/gp/product/B000N65ELG?extid=pg_msf&247SEM, and had them delivered to Caspar's place. He'll be sending all the stuff over soon, hopefully. -* Roxanne got the dresses for the maids of honor, and apparently we have to collect them on monday. -* We sent all the invites we needed to send, but we're still waiting for confirmations. It looks like it won't be a big wedding, probably around to 60-70 people mark. -* We ordered the "bomboniere":http://weddings.about.com/cs/glossary/g/Bomboniere.htm, they should come through soon. -* Uncle John told us he had the music for the church and the reception sorted out. -* We got the rings! - -We _still_ have to organize a few things, namely: -* Write and print the prayer books -* Book the flight for one of my ushers -* Get some fancy gifts for the bestman and the rest of the people involved in the ceremony -* Get married civilly here in Genoa -* Organize a party at our place for the people who can't come to the wedding -* Do something else I can't remember right now - -Yes, we are still busy as hell. I'm looking forward to it all, but I'll definitely be much more relaxed when it's all over! - -h3. Home Internet: Epilogue? - -I got broadband at home, finally, after five months. Let's do a quick recap: -# Last December I signed up to Libero Infostrada, and told them I wanted to disconnect from Telecom -# In January I actually got disconnected from Telecom, got a new phone line contract, but the Internet was never activated. -# I kept calling clueless operators on both ends pointlessly for 2-3 months. -# I got pissed off with Libero, so in April I signed up to Tele2, telling them to disconnect me from Libero. They told me it would take at least 4 weeks. -# Meanwhile, I signed up to 3g, and got an Internet USB key. At least I can go online, even if with a crappy UMTS connection. -# After a month, Telecom rings me asking if I want to come back to them, promising I'll have the Internet back on _soon enough_. Out of desperation, I accept and tell them to disconnect me from Tele2. - -Just when I was about to write a long post cursing Telecom and their perverted schemes to force their customers to stay with them, I receive a call from Libero and they tell me that the Internet is now activated! Unbelievable. Now all I have to do is send letters to all the other ISPs (they don't do these things on the phone -- clueless operators, remember?) telling them I don't want anything to do with them anymore. - -This is how broadband Internet works in Italy. Jealous? - -h3. Nimrod - -Last month I decided I would stop programming until after the wedding and so I did (at least at home). Nevertheless, I still keep strive to keep up-to-date with everything concerning technology and in particular programming. - -Out of all the tech news I came across throughout this month, the "Nimrod":http://force7.de/nimrod/ programming language definitely struck me the most. A German guy came up with a new language -- that's not a big news, new programming languages are born every week, if not every day. - -I believe Nimrod is different though. Basically, here's why: -* It's a mixture of Lisp, Python and C. It looks a bit like Python and it behaves like it (indentation matters), it allows the creation of macros, like in Lisp, and - this is what _really_ matters to me - it compiles to plain C (which can then be compiled using GCC or whatever). -* It is open source and can be used to produce commercially distributed executables. -* The "manual":http://force7.de/nimrod/manual.html is simple to read (but with a few rough edges), and the language looks simple to learn. -* The language is not yet complete, but it's getting close to a 1.0 release. It works as advertised, nonetheless. -* It offers a comprehensive standard library, and a _huge_ amount of libraries and wrappers from everything from Windows API to GTK and Cairo. -* It is cross platform, the Windows version even comes with a one-click installer. -* It has garbage collection _and_ it supports manual memory management, if you need it. -* It's statically typed, with type inference -* It can generate standalone executables, with very little overhead (90KB for an hello world program). - -A language like this has been my secret dream for a long time. I thought no one would ever come up like this. I am really looking forward to give it a proper try someday. What's wrong with it? For now, a few bits are missing (like native serialization), other than that someone pointed out the weird, rather extreme case insensitiveness of the language. Basically, case _and underscores_ are ignored to ??allow programmers to use their own programming conventions??. -Personally I don't think this is that bad. After all, if you name your variables "a_thing" and "aThing" and you want them to mean different things, that's bad programming style anyway. Nevertheless, as far as I know it's the only language I know which offers such an extreme degree of flexibility in this sense. - -h3. Learning new things - -This month I also found myself to be extremely eager to learn about new things. I'm still faithful to Ruby and all that, but I'm opening up to new possibility, for different things: -* I decided to start listening to slightly more technical podcasts, which are _not_related to tech news. In this way, I don't have the pressure of having to listen to them on a regular basis. Other than "FLOSS Weekly":http://twit.tv/FLOSS, which is probably the best show about Open Source Software out there, I'm going to try out "Software Engineering Radio":http://www.se-radio.net/ and "The Command Line":http://thecommandline.net/, both slightly more technical. -* Because I decided to put my personal programming projects on hold, I'm having all sort of new ideas about even _more_ projects I could start as soon as I can. No anticipations until after my wedding, of course. -* I'm using Vim all the time now, both at work and at home. I feel confident with it, but I feel I still have a lot to learn, especially when it comes to marks, registers, etc. And I'm not yet ready to write an article about it -- not the kind of article I'd like to write, anyway. -* I'd like to learn more about Javascript and JQuery. I played around with it and _loved it_, but I really never used it for anything serious yet. This, however, may change in the future.
@@ -1,120 +0,0 @@
------ -permalink: ma.gnolia -filters_pre: -- bbcode -title: Ma.gnolia - Social bookmarking made (extremely) easy -comments: [] - -date: 2006-03-04 13:53:33 +01:00 -tags: -- internet -- review -- web20 -type: article -toc: true ------ -Social Bookmarking[1] is not something [i]new[/i] anymore; in fact, some people say they've seen too much of it already (imagine that!). One of the worst things - or best, depending on your point of view - of the whole Web 2.0[2] hype is that everything evolves at least ten times faster than it did in good ol' Web 1.0 (if you let me use the term): there are [i]many, many more[/i] web pages created everyday by literally [i]anyone[/i], from web developers to total newcomers to the Web, to amateurs who just want to share their content because it's 'cool'. -However, this is not a rant. Web 2.0 is inevitably going to become more and more user friendly, and you can't do anything about it. Why? Because it pays. Who's most likely to click on the flashy banner on page X featuring product Y not knowing that by doing so company Z will get a penny: your grandmother who is just now learning how to use the Internet or your brother who's majoring in computer science? -However, this is not necessarily a bad thing. I strongly believe that the Internet becomes a much more user-friendly place everyday, and, to put it bluntly, the web developers and companies who understand this will become popular and make money. - -I remember when I first read about social bookmarking: people were screaming here and there that you [i]had to[/i] share your bookmarks on the Net, and this 'delicious'[3] thing was getting more and more popular. Then it became 'delirious'[4], and it was [i]better[/i], because it also meant [i]free[/i]...then the shadows[5] came... -I was never a big fan of the whole concept, I admit, but an old friend of mine from a community[6] turned up and asked me to try a new website he coded in [i]Rails[/i][7]: a new social bookmarking service, simple to use and free: ma.gnolia[8]. -I immediately felt the impulse to reply (as this happened on IRC[9])[i]"i.dont.give.a.sh.**"[/i]. I really didn't want to try [i]yet another[/i] social bookmarking thing, as I had had enough of it even before I started to grasp the whole concept properly. Hoever, since the guy is a friend of mine whom I respect a lot, especially for his skills and knowledge, I decided to give ma.gnolia a try, and here's what happened. - -[b]A website which [i]smells good[/i][/b] -One of the things any Web 2.0 business cannot afford to overlook is the design and user interface of their product. It [i]does[/i] matter! If you want to please your customers, make something that looks good. This is not a new idea at all[10], and it has been shown to work in many situations. -The first impression I had about the ma.gnolia website was similar to the one I had when visiting CSSZenGarden[11] for the first time: [i]code is poetry[/i]. I particularly like the latest trend in web design, which preaches simplicity, functionality, clean-looking pages, xHMTL+CSS instead of other assorted bloat, pastel colors, rounded corners, and so on, and there are no rounded corners in ma.gnolia. -The ma.gnolia website succeeds in making the visitor feel comfortable: it doesn't clutter the page with pointless images or weird widgets, but limits itself to only the essential items needed for usability - logo, banner, essential navigation (bookmarks, tags, people, groups, messages, profile, support and tools), content, a few well placed and unobtrusive images and icons, and a footer with the same usual boring-but-necessary links (copyright, about, terms of service, privacy policy, contact us), nothing more. What else do you need? -People might disagree, of course, and it's certainly not the answer for all tastes: there are some people who really can't stand 'plain' websites, and they think that the whole philosophy is pointless: [i]De gustibus non est disputandum[/i] (There is no accounting for taste). We had the same concerns two thousand years ago and the Romans got it right. Even the Romans would have agreed that ma.gnolia is easy to use, too plain or not. - -[b]Quick features overview[/b] -The obvious first step before starting to use ma.gnolia is signing up for a (free) account. Right? Wrong. For non-committers, or casual, let's-try-it-and-see-what-happens users there's a (free) trial account. You can start using fully functional ma.gnolia right away, but unless you register, nothing you do will be permanent. This seems to be a new Web 2.0 trend as well; before, you needed to make everything free to get people's attention, now it must be free [i]and[/i] not require registration. Makes perfect sense. - -[i][u]Adding bookmarks[/u][/i] -Trial or not, you can start adding bookmarks right away through the form on the front page, which is simple enough. As long as you didn't discover bookmarks (or [i]favorites[/i] for the browser-impaired) the day before yesterday, you probably already have your little collection of bookmarks meticulously catalogued in many different folders. Well, you can import them into ma.gnolia in a few very easy steps, and that, believe me, will save time. Some people may think I'm wasting my time stating the obvious here, but when I tried del.icio.us the import feature wasn't available, and this was enough to make me walk away. - -'Casual user', 'non-web-savvy', 'non-geeks': ma.gnolia obviously targets these types of people. Everything on the site is well-documented and easy to use. Ma.gnolia's project manager said in a recent interview[13]: - -[quote] -[i][...] The rest of us muddle along for about 30 seconds, and if we still don't get it and aren't enjoying the experience, we leave, never to return. To avoid that fate -- to make the complex simple -- our lead IA Tanya Rabourn put in the hours and the iterations needed to make Ma.gnolia comprehensible to the non- expert. [/i] -[/quote] - -This makes sense to me: Web 2.0 seems to be more user friendly, simply because a lot of non-geeks are browsing the web everyday and clicking on adverts. - -Once you import all your bookmarks, you'll have an almost exact copy of your bookmarks collection, now available online! If you don't want to share them, because you believe in anti-social bookmarking or you just want to have a backup, you can import all your bookmarks as "private", and you can toggle the status by clicking [img]http://ma.gnolia.com/images/icons/privacy-on.gif[/img] or [img]http://ma.gnolia.com/images/icons/privacy-off.gif[/img], whenever you like: the magic of Ajax[14] will do the rest. -You can also rate your bookmarks from one to five stars, but [i]only[/i] yours: ma.gnolia is not a pointless competition to be the one who links the most and best websites. - -[i]What if I want to delete a bookmark?[/i] Quick hint: [img]http://ma.gnolia.com/images/icons/delete.gif[/img] - -[i][u]Yes, you can tag as much as you like[/u][/i] -No, there are no folders. Forget it. For me it started with Gmail[15] and it was shocking enough: there are no folders, but you can tag your messages. This can be disorienting for some, but once you have overcome the initial trauma, you will realize that tags can be better than folders in some cases. At any rate, Web 2.0 uses tags everywhere, so you'd better get used to it. A tag is basically a virtual label you can put on something - here, a bookmark - to make it belong to a defined group. Tags normally don't have a hierarchy like folders, and each item can have more than one tag. Simple. - -Unfortunately, you can't directly tag (or rate) bookmarks that you add from the main page, but since you'll normally be using some sort of [i]bookmarklet[/i] for Ma.gnolia, it doesn't really matter. Also, at the moment, once you create a tag you can't rename it, but this feature will be added soon. - - -[i][u]Connecting people[/u][/i] -If you tried some other social bookmarking services before and you really enjoy the philosophy behind it, you'll be pleased to know that Ma.gnolia is even more social than others. When you register an account you can optionally disclose your real name, age, and gender, add an avatar, a webpage and so on, and you can create your own profile, just like anywhere else on the Internet. -Furthermore, Ma.gnolia allows [i]groups[/i]: you can create, join, and leave a group of bookmarkers who share the same interests as you. Why would you want to do this? The answer to that question is simple and self-evident: because what is enjoyed by one person will likely be enjoyed by other people who share the same interests. Once you are part of a group you can send a bookmark to that particular group ([img]http://ma.gnolia.com/images/icons/send-to-group.gif[/img]), or at least that's that ideal; if you just want to send a particular address to only one person you can do so ([img]http://ma.gnolia.com/images/icons/send-to-contact.gif[/img]), provided that that person is already in your contact list, and to do so there's a specific button (not icon this time) in everyone's profile. -You'll notice a [i]Messages[/i] link in the main navigation panel, and that's exactly where the bookmark (and only the bookmark) will go once you send it to your friend. At the moment you [i]cannot[/i] send a traditional message to someone, unless you send it along with a bookmark. This might change in the future, depending on user feedback, as well as the addition of some place to actually have some sort of discussion and comments - or so I've been told. -I'd be happy to see more community-specific functionalities being implemented, but there are some inevitable risks if Ma.gnolia decides to take this road. I'll let them decide, but for now, Ma.gnolia is more social than other services, but less social than, say, a discussion board. - -[i][u]Pages, stats and search[/u][/i] -Perhaps one of the coolest features Ma.gnolia offers is the possibility of saving pages online. When you bookmark a web page, Ma.gnolia attempts to save an exact copy of that page on its server, so that you can access that resource even if it is deleted at the source, like an improved personal version of the WayBack Machine! -Two things need to be said - and yes, they might be obvious for some people: -1) Pages which require some sort of authentication cannot be saved; and -2) Saved copies cannot be viewed by people other than yourself. - -Another feature is the ability to access basic statistics regarding bookmarks and people: most viewed or most recent bookmarks, hot groups, hot tags, as well as featured linkers, i.e., people who Ma.gnolia chooses to be displayed in some pages. They are generally well-known members or institutions that use the service. -However, the search function disappointed me a little bit. There is a very entertaining story on their About page[17] on how Social Bookmarking is supposed to help people to find things on the Web, and the last part in particular is pretty informative: -[quote][...]In Ma.gnolia, people can save website addresses (or the 'url') and "tag" them with that words they think people need to find them in a search. That way, when somebody else searches a term, the websites that show up are only the ones that are good enough for real people to want to find them. -With Ma.gnolia, that's really all the work you have to do. Organizing is a thing of the past, since tags do the organizing for you. Magnolia will even suggest when to give certain tags to bookmarks based on how you tag other bookmarks, to keep things consistent and up to date. And since it's a website, your Ma.gnolia bookmark collection can be reached by you and your friends from anywhere, any time. -If searching was the first day of the web, finding what you want must be the second. Ready to discover how Found is the New Search? Give Ma.gnolia a try, and see what we mean.[/quote] - -It seemed logical, so I tried it myself. I searched for "ajax framework", and nine of the ten results on the first page led to this document: - -ASP.NET AJAX framework comparison [18] - -This is undoubtedly an interesting document, but not what I was looking for, and I certainly didn't expect almost the entire first page to consist of the same document. I asked for an explanation of this apparently odd behaviour, and it appears that the developer is aware of this, and explained me why this [i]must[/i] happen: if someone saved www.zzine.org as "zZine Magazine" and another person saved it as "Microsoft", someone searching for Microsoft - provided that we don't show duplicate links anymore, will find a link to zZine Magazine as one of the first results, and it would not be relevant. This is due to the fact that the system searches tags, titles, and descriptions even if the URL is the same, or known. Still, I'd try to limit the number of identical results, at least by grouping together entries which have the same URL and title, or something along these lines. - - -[i][u]Tools to play with[/u][/i] -There's a whole section of the site devoted to [i]Support and Tools[/i], to make the whole thing even more user friendly. Regarding the support part, even the greenest of visitors to a social bookmarking site will have no problems, as everything is explained in very simple terms, and full of examples and tutorials. This can be an annoying read if you already know how social bookmarking works and if you're used to similar services, so my advice is: [i]geeks stay out of this section[/i] - it will save pointless rants. -The upside of this is that if I send someone who has [i]never[/i] used something like this before, he'll like it and definitely start using it; if you try this with del.icio.us, you'll have one less non-geek friend. - -Regarding the tools subsection, I already mentioned the excellent bookmark importer (which worked perfectly, but should probably warn in case a page cannot be imported due to a 404 error). Ma.gnolia also offers: - -- a del.icio.us importer -- del.icio.us to ma.gnolia GreaseMonkey script - to keep your del.icio.us and ma.gnolia synchronized -- a link roll generator, to share your bookmarks on your blog or page -- a universal bookmark exporter - -Additionally, and most importantly, various bookmarklets[19] which allow you to instantly add a bookmark to your ma.gnolia collection with a single click, just like adding an ordinary bookmark. Not new, but useful and essential. - - -[b]Conclusions[/b] -Ma.gnolia is definitely the best social bookmarking solution currently available for non-web savvy users. If you don't like having to spend more than five minutes figuring out how social bookmarking works, Ma.gnolia will become your new home, and you'll get addicted to it. I don't consider myself a total geek, and I honestly started using Ma.gnolia because it's simple and does the job... - -...or perhaps the website is just so easy to use and nice to navigate that makes it harder to browse away! - - -[b]Notes[/b] -[1]Social Bookmarking, Wkipedia: http://en.wikipedia.org/wiki/Social_bookmarking -[2]Web 2.0, Wikipedia: http://en.wikipedia.org/wiki/Web_2.0 -[3]del.icio.us Social bookmarking: http://del.icio.us -[4]de.lirio.us Social bookmarking: http://de.lirio.us -[5]Shadows Social Bookmarking: http://www.shadows.com -[6]CyberArmy Community: http://www.cyberarmy.net -[7]Ruby on Rails framework: http://www.rubyonrails.org -[8]Ma.gnolia Social Bookmarking: http://ma.gnolia.com -[9]Internet Relay Chat, wikipedia: http://en.wikipedia.org/wiki/Internet_Relay_Chat -[11]Windows XP Official Page: http://www.microsoft.com/windowsxp/default.mspx -[12]CSSZenGarden: http://www.csszengarden.com/ -[13]Darren Barefoot's Blog, Sugar Ma.gnolia, Blossoms Blooming: - http://www.darrenbarefoot.com/archives/2006/02/sugar-magnolia-blossoms-blooming.html -[14]Ajax, Wikipedia: http://en.wikipedia.org/wiki/Ajax_%28programming%29 -[15]Google Mail: http://mail.google.com/ -[16]Archive.org: http://www.archive.org/ -[17]Ma.gnolia - About: http://ma.gnolia.com/about -[18] Daniel Zeiss, "ASP.NET AJAX framework comparison": -http://www.daniel-zeiss.de/AJAXComparison/Results.htm -[19]Ma.gnolia - Bookmarkles directory: http://ma.gnolia.com/support/bookmarklets
@@ -1,115 +0,0 @@
------ -:type: article -:date: 2010-09-25 11:21:41.985674 +02:00 -:subtitle: "A handbook for (almost) guaranteed success in IT" -:image: /img/pictures/books/making-it-big.jpg -:intro: | - When this book came out, it was immediately followed by a lot of buzz. Positive reviews started popping up almost instantly, a lot of people blogged about it, it was surrended by a lot of... what's that word again? Oh yes, _hype_. The title pissed me off really: who on Earth wants to title his book ["Making it Big in Software":http://bit.ly/b08auR]? Steve Jobs? Bill Gates? - - No, just a guy named "Sam Lightstone":http://lightstone.x10hosting.com/. When I was offered a review copy, I was a bit reluctant to even bother: I thought it was one of those overly-hyped titles that claim to make you famous and successful, but all they do stating the obvious: work hard, be innovative, use your money wisely, etc. Well, this book is not one of them. -:extended_intro: | - When I got my copy, I immediately read the author's bio on the second-last page of the book: Sam Lightstone runs a site called "Making it Big Careers":http://makingitbigcareers.com/ (again, I got instantly worried by this), _but_ also happens to be one of the brightest minds in IBM, a "IBM Master Inventor":http://en.wikipedia.org/wiki/IBM_Master_Inventor, author and co-author of 30+ patents. -:toc: true -:tags: ["review", "books", "software"] -:permalink: making-it-big-in-software -:pdf: true -:title: "Book Review: Making it Big in Software" ------ -$[document.intro] -&:[img-path|$[site.root]/img/pictures/books] -txt[ -image[@class[right]&[img-path]/making-it-big.jpg] -The 17 exclusive interviews with software gurus, visionaries, minor and major deities of the IT world are definitely worth the 24.99$ this book costs _on their own_. This was one of the major selling points of the book itself (as the merry-looking pictures of Marissa Mayer, James Gosling, Steve Wozniak and John Schwarz on the cover suggest), but far from being the only one. The interviews are strategically placed throughout the book, as supporting material for the author's advice: if you don't believe him, you will believe those who _made it_. Anyhow, let's say something about the book itself, shall we? - -_Making it Big with Software_ is divided into three parts: -* *Part I: Fundamentals* -- all you need to know to get hired. Finish school, learn new things, and get a job in the Software industry. -* *Part II: Leadership* -- tips on what to do to start climbing the corporate ladder, from junior to senior manager. -* *Part III: Greatness* -- go beyond a successful career and become a luminary in IT, an example for future generations (and earn the big bucks). -] -pt[I|Fundamentals| -After two introductory chapters, aimed at answering questions like "Why bother?" or "What do big shots in software do?", the book starts analyzing what graduates get when they get out of school. I was really taken by the following paragraph, outlining the main difference between school and work: - -bq. \[...\] although schools encourage students to do their own work, on penalty of expulsion or severe reprimand, professional work is saturated with the ubiquitous mantra of "teamwork." In school, your success depends on individual effort, whereas professional life depends frequently on your ability to work in teams. - -So true. I never thought about it until I read it in this book. And this is a common causes of failure in the workplace: not being able to work in a team. It's understandable: after years of striving to be the best, to do things for yourself, you're suddenly asked to work for and with others. - -The author gives junior graduates some useful tips to get a job in software development (or the software industry in general), with some useful tips on how to create a proper résumé, how to survive interviews, the usual. Hell I wish I had this book when I started! - -Readers like me who already have a job should not dismiss this part. Maybe skim through the first few chapters, but towards the end there are some useful suggestions on how to build essential interpersonal skills and a nicely-written chapter about _career killers_. -] -pt[II|Leadership| -The second part of the book opens with *Chapter 9*, Working the Org, which I found most amusing for the funny, but insightful, _Negotiating 101_ section. Again, particular emphasis is put on non-technical skills, which are however essential for success. I particularly enjoyed reading this part of the book, because I could relate to it, being a Technical Leader myself. - -*Chapter 12* is a must-read, as the author himself says: - -bq. If you read only one chapter in this book, this should probably be the one. - -If you never read anything about time management, you rhave to read this, as it helps you realize how much time you waste, why, and what you can do to improve the situation. I attended a course on the subject at work, a while ago, and I was shocked to read most of the stuff I learned at that course so tidily organized in no-nonsense prose in this chapter. Granted, it doesn't substitute a time management course or practical experience with managing your priorities, but it is a good starting point. - -*Chapter 14* deals with _Zen and the critical art of balance \[between work and personal life\]_. The diagram on page 249 scared the hell out of me. Here it is, transposed in tabular form: - -table[ - tr[ - th[Desired State] - th[Current State] - ] - tr[ - td[Work: 9 hours] - td[Work: 13 hours] - ] - tr[ - td[Sleep: 8 hours] - td[Sleep: 6 hours] - ] - tr[ - td[Travel: 1 hour] - td[Travel: 2 hours] - ] - tr[ - td[Family & Leisure: 4 hours] - td[Family & Leisure: 1 hours] - ] - tr[ - td[Chores & Hygiene: 2 hours] - td[Chores & Hygiene: 2 hours] - ] -] - -_Thirtheen hours_? Really? If _you_ work 13-hour days then you have to read this chapter _and put it into practice_ instantly or you'll regret it. Luckily _I_ manage to work most of the time for 8 hours a day (as everyone should, by law). - -Another chapter I particularly enjoyed (and will re-read periodically) is *Chapter16*, which contains the best definition of leadership I ever came across: - -quote["Leadership is communicating to people their worth and potential so clearly that they come to see it in themselves."|Stephen Covey] - -Again, this chapter teaches you the basics on leadership and management. If you didn't take a course on the subject yet, it's definitely worth a read. -] -pt[III|Greatness| -I particularly enjoyed the first two chapters of this last part: *Chapter 17* and *Chapter 18* are about _innovation_, which I found to be the fastest and best way to get noticed in a company. - -These two chapters won't teach you to become a genius or an inventor, but they do provide help on the subject: why innovating is important, how to innovate and what to do once your idea gets a shape. The _Patenting_, _Publishing_ and _Public Speaking_ sections in chapter 8 are useful and practical, and deserve a good read. Again, the book does not go too in-depth, but the author provides just enough information to make you aware of the main issues. - -The final chapters of the book felt a bit distant from my current work reality. Business talk, stock options, startups, acquisitions... They may interest some readers with an enterpreneurial mindset, but not me, at least not now. Nonetheless, business and politics pay a very important role in any IT job, so it's wise to be aware of them. -] -section[ - @title[The Interviews] - txt[ -The 17 interviews with software gurus, miracle workers and other extremely successful chaps make up for about the 20% of the book. They are carefully placed by the author in specific places of the book where they make the most sense (well, most of the time). Every person had to answer a similar set of questions, like "How did you get started in software", "How do you stay on top of technology trends and innovation?" or "Technical leaders and executives are famous for being time-strapped. What strategies do you use to stay sane and use your time effectively?". - -Every interviews has at least one personal anecdotes. Some feel almost legendary, like the following: - -quote[In 1967, at the age of 12, I dreamed of making a difference in the field of computer science. I went off to the local IBM office, literally knocked on their door, and said, "I will do anything for the summer-empty trash cans, you name it." They said, "Go away kid." But there was a sales guy who took pity upon me and threw me a nice Fortran IV \[IBM Mathematical Formula Translating System\] manual, with the expectation that I'd probably read it and get bored and never come back. But much to his surprise, I came back the following Monday and said, "Hey, this is cool! I just wrote a program and I want to run it." The sales guy was so impressed that he found me an open computer to work on where I could teach myself how to keypunch, program, and debug for what I still recall as a delightful summer.|Grady Booch, IBM Fellow and Chief Scientist for Software Engineering, IBM Research] - -Every interview provides at least a good piece of advice for newcomers to the field. The last chapter of the book summarizes the interviews attempting to draw the profile of the successful IT professional: some founded their own companies, other climbed up the corporate ladder, a few contributed with key inventions (email, the Internet, ...) that changed society as we know it. Different levels of greatness, and different ways to reach it: this is what this book is really about. - ] -] -section[ - @title[Final Thoughts] - txt[ -_Making it Big in Software_ is very well organized, in its three main parts. Unless you're already the CEO of a multi-million-dollar company, you can learn something from this book, and even if you are, learning how other people _made it_ is always beneficial. - -It is not a specialized book, and as such it does not go in depth on anything specific. This is a good thing though, because after you read some of the chapters you feel motivated to learn more about this or that particular topic, skill or problem. In a way, it can be a good surrogate for more specialized books about résumé creation, job interviews, time management, leadership etc. - -Overall, I recommend this book to everyone who wants to become successful in the software industry. Success can come to different degrees of course (or not come at all), but if you're motivated enough and interested in your work, it is definitely within your grasp. _Be goal oriented_. It's not enough, but it's a good start. - ] -] -
@@ -1,163 +0,0 @@
------ -permalink: mongrel-shortcut-review -filters_pre: -- redcloth -title: "Book Review: Mongrel Digital Shortcut" -comments: [] - -date: 2007-12-15 03:42:00 +01:00 -tags: -- review -- books -- rails -- ruby -type: article -toc: true ------ -If you ever considered about developing an deploying a Rails application in the last year or so, you must have heard of "Mongrel":http://mongrel.rubyforge.org/index.html before. If you didn't, I'd recommend you learn more about it because up to now it proved to be one of the few essential ingredients for deploying _scalable_ Rails applications. - -Mongrel is a creation of "Zed Shaw":http://www.zedshaw.com/ who started writing a replacement for FastCGI to use with Rails, and ended up creating a brand new, HTTP web server who turned out to be one of the best things the Rails community ever saw happening. - -It was created to be simple to use and configure, nevertheless it _does_ require some skill to set it up and tune it. Documentation is there, along with plenty of blog posts, but there's also an interesting "book":http://www.informit.com/store/product.aspx?isbn=0321483502&rl=1 from "Addison Wesley Professional":http://www.awprofessional.com/ which is definetely worth a read. - -!>/files/mongrel_shortcut.jpeg! - -"Mongrel: Serving, Deploying, and Extending Your Ruby Applications" – that's the title of the book. A _Digital Shortcut_, 100-odd pages long, in _landscape_ format to make it easier to read on a computer, straight to the point with no added sugar for just 15$ (PDF only). I must say Addison Wesley got it right: the book's format is, as a matter of fact, _optimized for web developers_, especially those who can't afford to read a 500-pages book covering everything about a subject just to find that one thing they don't know about. -This _shortcut_ can be seen, essentially, as an expanded cheatsheet which will teach you the basics about Mongrel and also give you plenty of advice on how to learn more about it. - -Let's have a closer look at it. - - - -h3. Overview, Introduction & Getting Started - -The first three -chapters- sections (there are no chapters, just _sections_) of the book are meant to be a gentle introduction to Mongrel and its world. The main author is "Matt Pelletier":http://www.informit.com/authors/bio.aspx?a=0260912e-6ed8-4ed1-882a-c357e644feec, but Zed Show's contributions are definitely one of the book's best selling points. -Zed's thoughts are scattered here and there in many _sidebars_ throughout the book (there's at least one in each section): you'll see an odd-looking face (Zed's self-caricature) with some text next to it; when you read it, you'll notice that they are _actually_ Zed's own thoughts, straight from his mind, with no editorial filter whatsoever in-between. -Be warned: the text included within the *Zed Sez* sidebars is highly opinionated, that's precisely what Zed _feels_ to say about something, and he'll just say it: just the plain, simple thoughts of an experienced programmer. As the author explains in *Section 1*: _"[...] You may not agree with everything he says, but you probably should."_ - -*Section 2* is a general introduction about Mongrel. It explains _what_ it is, _when_ and _why_ it was made, and _how_ it works. There's nothing new to learn if you already used Mongrel before, probably, but it's definitely the first thing to show to someone who's new to Mongrel and its world, and possibly a bit skeptical about it. -The last subsection _"What can Mongrel do for me"_ is an attempt to -brainwash- persuade you to fully embrace Mongrel and its philosophy, whether you are a developer, a sysadmin or even a manager: assertions like _"Mongrel is pretty damned secure."_ and _"Mongrel's license is capitalist-friendly."_ will definitaly make some of you (managers) happy. - -*Section 3* is slightly more juicy than the previous one, as it explains how to install and use Mongrel. Basically that's what everyone who ever used it already knows, but it's still necessary for the book's consistency, after all. After reading this section, you'll probably have your first Mongrel up and running and serving your little Rails application's pages, and you'll begin to wonder why the hell you need to keep reading this book now that everything seems to work already... - - -h3. Section 4: Configurations - -...aka "a truly useful Mongrel cheatsheet". This section dives deep(er) into Mongrel's configuration by explaining what each start parameter does in detail. The parameters are presented in tabular form in a very well-organized way. As you would expect from an high-quality cheatsheet. - -Then the author will explore a few commonly used deployment scenarios, in particular: - -* *Standalone* – The simplest configuration possible, with just one Mongrel instance serving both static and dynamic pages. -* *mongrel_cluster* – How to use _"a pack of mongrels"_ together to handle more traffic. -* *Behind a static web server* – The most common (and most scalable) option, used to serve static content faster using a front-end server and use Mongrel only to handle Ruby pages. - -Towards the end of the section, for the developer's delight, the author will discuss two common, useful scenarios where Mongrel can be used: - -* *Apache 2 + mod_proxy_balancer + mongrel_cluster* -* *Nginx + mongrel_cluster* - -The difference here is that detailed instructions are provided on how to setup and configure each server, including example file sources. This can be particularly useful for the Nginx example, as most of the documentation for this fantastic, lightweight Mongrel fron-end is scattered around the web (or written in Russian in a "well known place":http://sysoev.ru/nginx/). - - -h3. Section 5: Production Deployment - -This section introduces one of the most important part of the life cycle of a Rails application: the deployment on a production server. The author is pretty honest about the whole subject: - -<blockquote> -<em>"You will not do this in a day. If you are expecting to code until 1 minute before your deadline and then simply point and click and have an instant server then you need to take some kind of -medication because you are violently hallucinating. You will need at least a week of 8 hours days to make sure your first deployment works and to have the time to do it right."</em> -</blockquote> - -Sounds terribly true. Especially for larger projects demanding good performance under heavy traffic. Scared? Probably, if you never deployed a Rails application "properly" before, but at least the book comes to the rescue by providing an overview of what you need to perform a deployment and why it is such a complex and delicate process. - -Not only this, but also a "Best Practices Rubric" is also provided for the developer's own private enjoyement. It's written as a list of questions like: - -_11. Do you have a shared location where you can document the deployment, such as a Wiki or CMS?_ -_12. Do you know how to use httperf or ab and know what the statistics mean?_ - -After these 13 questions, the author provides the key to give a meaning to your answers: - -<blockquote> -<em>"For each question you answer with "NO", add 10 hours to your time estimate for completion. This may seem unrealistic, since saying "NO" to everything means it'll take 190 hours (about one -month), but this estimate is actually low according to most first deployment experiences."</em> -</blockquote> - -If you answered "NO" too many times to these questions, you may want to read on through the next subsection which states 17 "worst practices": an invaluable read for beginners! - -But after all this section is not only about stating the obvious (...right?): a full example scenario is describedand examined throughly to give you an idea of how a deployment _should_ be made, using three different machines: - -* One for Apache (as a front-end to Mongrel) -* One for the Mongrel cluster and the Rails application -* One for the database - -Maybe something you'll never do if you just want to run your grandma's site on Rails, but certainly something you may want to start looking at if your grandma becomes really popular and your small server gets grounded by several thousands of visitors per day. - -The last part of the section will give you a brief introduction on monitoring your applications and on which tools you should be using, although it does not discuss the subject in detail at all, it's just meant to point you to the right direction. - - -h3. Section 6: Extending Mongrel - -This section digs deeper into the software code internals and describes _how to teach new tricks to your Mongrel_, i.e. how to extend its functionality. - -Before you begin, though, don't forget what Zed himself has to say about Mongrel's simplicity: - -<blockquote> -_"I've always had a different aesthetic sense when I write my software. I value simplicity and directness and try to write software that follows this approach. I jokingly call it the Shibumi School of Software Structure. All I do is apply this rule: When given two possible designs with equal end results, pick the simpler one. I then ruthlessly strip the solution down to its finest elements, but no more."_ -</blockquote> - -Mongrel's architecture is not that complex, and this section is sufficient to get you started by providing an overview of the main classes involved (HttpServer, HttpRequest, HttpResponse, HttpHandler, URIClassifier), and how they work together. -Note that the book won't describe anything about the APIs of these classes. but after all, the project's "RDoc documentation":http://mongrel.rubyforge.org/rdoc/files/README.html should cover all the details you need. - -The rest of the section focuses on how to extend Mongrel, by: - -* Writing custom handlers in Ruby -* Creating custom filters to perform security checks, clean up requests and preliminary file processing -* Creating plugins and distributing them as rubygems - -Two working examples are also provided: - -* An example handler to deflate content (if the browser supports deflate) -* An example "duck" plugin, to make Mongrel quack like a duck when it's started (not the most useful thing in the world, but serves the purpose) - - -h3. Debugging, Performance & Security - -The last three sections deals with other important aspects concerning the deployment of your application, how to debug, how to improve performance and how to secure your application. - -*Section 7* introduces two debugging modes: - -* Dash-Bee logging (-B) -* USR1 logging (lighter) - -And also gives you an idea on what to look for when debugging an application. Nothing too detailed, granted, but enough to make sure you are pointed in the right direction. - -Again, Zed's wisdom and wit are remarkable: - -<blockquote> -<em>"These people's problem is they suffer from Potpourri Turd Syndrome—a belief that their you-know-what don't stink and smells like fine dew on freshly cut grass. Whenever there's a bug, they go -running like kids in a candy store to other people's code trying to find fault and just assume that it's nothing they wrote. -[...] -When you run into a problem with your application, always assume it's your fault first. Mongrel's not perfect, but its code is minuscule compared to the size of Rails and most likely even your own appli-cation code. Mongrel also powers many large and medium deployments without any problems. If there's an error, the evidence already says it's in your code, so bite the bullet and start investigating it as if it's your problem."</em> -</blockquote> - -Similarly, *Section 8* is a short but useful overview on performance tips and tricks and deployment tuning. The most useful thing is probably the checklist of the "tuning process", which illustrates the simple steps to take to tune your application. - -Finally, *Section 9* addresses some common security concerns and clarifies how Mongrel deals with them. The answer is normally "Mongrel strictly does this" or "Mongrel doesn't support this feature". After all, you should have understood by now that Mongrel is an example of simplicity and that it deliberately does not aim to offer all the feature you'd expect by a server like Apache: - -<blockquote> -<em>"As you probably see, Mongrel say, "No" in many places where most Web servers say, "Yes, OK." Sometimes this is because no one using Mongrel has needed it yet, sometimes it's because there's a -better, simpler way to accomplish the same goal. Mongrel is a different kind of Web server, and frequently you can solve your problem with a different solution."</em> -</blockquote> - - -h3. Conclusion - -If Mongrel is opinionated software, this is definitely an opinionated book which fully embraces the project's philosopy of simplicity above everything else. It's an interesting read and it won't bore you to death by deliberately skipping long and potentially tedious subjects and adding interesting insights instead (like the Zed Sez sidebars). Perhaps it is a bit too direct towards certain people, who may get even get offended (as planned) by some of the author's assertions. - -Despite being a 100-pages book, this _shortcut_ covers pretty much everything you need to know *about Mongrel*. It will _not_ teach you everything about deployment, security, performance tweaks and debugging though: as the authors often state throughout the book, a lot of (big) books are available on those subject, and it wouldn't make sense to even attempt to discuss them in this shortcut. - -Similarly, you won't find complex examples either, but that's acceptable because simple examples are often the only thing you need to grasp the basics of a concept or feature, and then use them as a "scaffold" for your own code. - -Globally, the book is well balanced and _optimized_ for its size: lightweight introductory sections at first, then the "real juice" in the middle, and a few overview sections on advanced topics towards the end. You can read it easily in a few hours, perhaps less, and whenever you need to look something up in a hurry it will be fairly easy to locate. - -A good read, and a _must_ for everyone who wants to learn more about Mongrel or Rails deployment.
@@ -1,141 +0,0 @@
------ -permalink: next-generation-dvds -filters_pre: -- bbcode -title: Next generation DVDs -comments: [] - -date: 2005-12-10 12:53:46 +01:00 -tags: -- review -type: article -toc: true ------ -Get a full comparative and analytical view of the HD-DVD and Blu-Ray disc formats. Why do we need them? Are they the perfect answer? Which one of them (if any...) will eventually take the throne? The answers to all these questions (and more) are inside! -[b]The endless quest for space[/b] -I remember when I showed a 3.5" floppy disk to my dad and he said, "That's so small, and it can store 1.44MB of information! That's over a million bytes!" He was used to working with big tapes of data that probably held much less, so I guess a floppy disk a big shock for him, at the time. - -When I got my first computer, it had a CD-ROM drive, and the CDs were supposed to hold 500MB of data. They eventually started supporting more, and got up to 900 in the end. Finally, we got DVDs, which are able to store up to 4.7GB of data, and once people noticed they could write another layer of data, the capacity doubled. - -Over the years, storage devices have evolve, and it seems now more than ever that mankind is on an endless "quest for space" - not with NASA (which nowadays is being much more careful before sending out a shuttle), trying to go where no one has gone before, but with a bunch of leading OEM companies, IT industries and Hollywood studios trying to write unbelievable amounts of information on a 12cm disk made out of plastic and other lesser known materials. - -Furthermore, despite me persuading my family to buy a "new" DVD player, the industry now claims that this relatively new commercial technology is going to be dead: apparently we'll soon have disks capable of holding 15-25 GB of data [i]per layer[/i], which will come to the aid of High Definition TeleVision ([url=http://en.wikipedia.org/wiki/HDTV]HDTV[/url]) which will deliver images at 1920x1080 pixels (versus 640x480 pixels on a normal DVD). This means that you'll be able to see - with your brand new HDTV-capable home theater - the imperfections of Jessica Alba's skin when she's dancing in [i][url=http://www.imdb.com/title/tt0401792/]Sin City[/url][/i] if you look close enough, which brings up another question: "who wants this kind of technology?" - if nothing else, you'll have to pay a lot for it! - -As I previously stated, the evolution in storage media is unstoppable and yet necessary at the same time: having more storage space available proved to be a key factor for computer development. - - -[b]A New War has Begun[/b] -As the history of the computer industry has shown us, when the possibility of innovation arises, there's never just one group who tries it out. In the past, this led to the determination of two or more [i]de facto[/i] standards by competitors promoting similar solutions. Perhaps the most familiar cases in the recent past were the introduction of the VHS and DVD formats. The first standard - for VHS - was adopted after a "war" against Sony's Betamax format - which was supposedly technologically superior - and the determining factor (or one of the main ones, anyway) was that Sony, "jealous" of its proprietary format, didn't want to license support for it to all the Original Equipment Manufactors (OEMs), while JVC and Matsushita [Panasonic]'s VHS licenses were basically given to anyone who even remotely suggested adopting the format. - -Sony was involved in another "war", for the successor of the CD format: they pushed for their Multimedia CD (MMCD), while Toshiba had their Super Density CD (SD). Perhaps because Sony was wary of another defeat, history didn't repeat itself this time, and the two manufacturers agreed to develop a hybrid format which is now widely known as the Digital Versatile (previously "Video") Disk, or more commonly, the DVD. - -However, once again, Sony is proposing its own format for next generation DVDs, called [url=http://en.wikipedia.org/wiki/Blu-ray_Disc]Blu-Ray Disc[/url] (BD) and once again, it's opposed by Toshiba (and others) with the High Density Digital Versatile Disk (HD-DVD). Both formats aim to increase space by using a blue laser for writing instead of the traditional red one used for DVDs. Other than that, the two formats are (for now) quite incompatible with each other as they use two different approaches to this same technology. Most of the following technical information is taken from an [url=http://www.cdfreaks.com/article/186/]article[/url] that appeared on CDfreaks.com. - - -[b]The Contenders: HD-DVD[/b] -Let's now examine the first of the two contenders to the "throne": High Density Digital Versatile Disk ([url=http://www.hddvd.org/hddvd/]HD-DVD[/url]). This format was the one that appeared first and is mainly promoted by Toshiba, along with NEC and Sanyo. The capacity is around 15GB per layer and it could be defined - for its structure mainly - as an application of newer laser technology to the older DVD format. - -[i][u]Disk structure[/u][/i] -As the diameter of the disk is the same and the information is coded roughly in the same way, the areas of improvement obviously reside in optimizing the physical space of the disk to hold more information. As with CDs and DVDs, data on a disk is written in tracks following a spiral path, from the center to the border of the support: in a CD, the gap between the two rows of the track (the [i]Track Pitch[/i]) was 780nm; then it was reduced for DVDs (650nm), and again for HD-DVDs (400nm), so that we can store more information in the same space (because there are more rows). In order to achieve this, the laser must be more sensitive to be able to detect tracks correctly (that's why the laser is now blue; blue has a smaller wavelength), and the lens that gathers and concentrates the light needs to be changed. The measure that defines the shape (convexity) of the lens is called [i]Numerical Amplitude[/i]: for CDs, it is 0.45, 0.6 for DVDs and 0.65 for HD-DVDs. These "tweaks" made more space available on the disk, and HD-DVDs, as previously stated, can store up to 15GB single layer and 30GB in double layer. - -Another characteristic that makes HD-DVDs similar to DVDs is the amount of the disk which is used for actual data storage and the amount which is used as "protective coating": HD-DVDs are 1.2mm thick, with 0.6mm used to store information and 0.6mm for protection. - - -[i][u]Information processing and error correction[/u][/i] -Data sent through a channel is subjected to "noise" of various kinds, and a similar phenomena occurs when writing information on a support, so various ways of preserving the data and correcting possible errors were developed. HD-DVD, in particular, uses a particular type of modulation called ETM (Eight to Twelve Modulation), which is once again similar to the technique used in CDs and DVDs: each byte of data is converted into twelve bits, and all bits set to 1 must satisfy an RLL(1,10) code (all '1' bits must be separated by at least 1 and at most 10 zeros). -Furthermore, disks must be able to bear scratches and other damage which could potentially corrupt bytes. Personally, I found that CDs are much more scratch-proof than DVDs, partly due to the fact that when you scratch a DVD (don't do it, just trust me!) more bytes get corrupted because of a higher data concentration: imagine what will happen now with 3-5x more data in the same space! -HD-DVD has the same correction techniques and data containers as the DVD format, the only exception being that the [url=http://en.wikipedia.org/wiki/Error-correcting_code]ECC[/url] blocks on HD-DVDs are twice as large, resulting in a longer correctable burst error length (7.1mm, where DVD is about 6mm). - - -[i][u]Writing formats and copy protection[/u][/i] -Even though HD-DVD has so far been quite similar to DVD (except for the obvious differences in laser, lens, and track pitch caused by the technology), there's an exception concerning the Rewritable format: it can hold more data than the ROM format (20GB instead of 15). This has been achieved by employing some technologies used in DVD-RAM. Despite the improvement, it might represent a problem for OEMs, because it makes HD-DVD RW handling totally different from the read-only format. - -For protection against piracy and illegal copying in general, HD-DVD format abandons the Content Scrambling System (CSS) used in DVDs (which has been shown to be unsuccessful) in favour of AACS (Advanced Access Content System), which uses a completely different key scheme. - -AACS has been introduced for both HD-DVD and Blu Ray formats, and it involves the so-called "device keys": a unique key is assigned to each player's model, and before playing a protected disk, the player will have to retrieve its key (encoded in a three-way tree on the disk). Obviously, if a particular key is cracked, the manufacturers will be informed and will update the key in newer disks (which won't play in the cracked player at all). The technology is quite controversial at the moment, because "protection" is achieved at a high price: if someone cracks the key of your player, it simply won't play newer HD-DVDs, even if you weren't actually involved in any illegal activity. Solutions are currently being debated. - - - -[b]The Contenders: Blu-Ray Disks[/b] - -Where Toshiba's HD-DVD adopted a somewhat conservative strategy, basing itself more or less on the DVD standard, Sony decided to use a much more experimental approach for its [url=http://www.bluraydisc.com/]Blu-Ray[/url] (BD) format, which appears to be more technologically advanced and offer even more space. -Blu-Ray disks can hold up to 25GB of data per layer, and this represents a great leap over HD-DVD's 15GB, but this has been achieved at the price of compatibility. - - -[i][u]Disk structure[/u][/i] -In order to reach the capacity it does BD uses the same type of blue/violet laser of HD-DVD but - as a necessity - the [i]Numeric Amplitude[/i] of the lens has been increased to 0.85 (vs. 0.65 on HD-DVD), and the [i]Track Pitch[/i] has been decreased to 320nm, so the additional space is explained by noting that the distance between the spiral rows is even smaller! - -Furthermore, BD can vary the length of the "pits" where data is written; by reducing it, more space on the disk can be obtained. Currently BD has 3 sub-formats, corresponding to 3 different capacities (23.3, 25 and 27GB), and associated to three different pit lengths (160, 149, and 138nm respectively) while HD-DVD has a fixed pit length of 204nm. - -Another innovation was introduced regarding the amount of disk used for data and for protection: disks are still 1.2mm thick, but 1.1mm are used for data storage and only 0.1mm for the protective coating! - -This was necessary in order to achieve the improved values for NA and Track Pitch, because the laser goes through only 0.1mm of protection before reading the data, meaning it can be more sensitive, but this also means that BDs are MUCH more vulnerable to scratches than HD-DVDs. Luckily, TDK immediately announced a new hyper-resistant protective coating which can offer improved protection from scratches and still be 0.1mm thick. - - -[i][u]Information processing and error correction[/u][/i] -BD decided to adopt its own modulation system (instead of using ETM like HD-DVD), called "17PP". The acronym basically means that each "1" must be separated by 1-7 "0" bits [RLL(1,7)] and also that the modulated sequence must have the same parity as the original data plus additional rules. -Error correction is then achieved using two codes similar to the [url=http://en.wikipedia.org/wiki/Reed-Solomon_code]Reed-Solomon[/url] code: LDC (Long Distance Code) and BIS (Burst Indication Subcode). Without going into too much detail, these two proprietary techniques can achieve almost the same result as HD-DVD's ECC, being able to correct corrupted data up to more than 7mm, which is quite remarkable considering the particularly delicate disk structure. - - -Blu-Ray also introduces two new modulation methods: the first one is called ?MSK-cos? (Minimum Shift Keying ? cosine variant), which is a special frequency modulation, and the second one is called ?HMW? (Harmonic Modulated Wave), which consists of replacing parts of the sine wave with sawtooths. - -[i][u]Copy protection[/u][/i] - -BD originally proposed its own control system, BD-CPS, for copy protection, but recently seems to have opted for AACS. This means that the same situation arises for both formats: they are both planning on implementing an advanced exchange key-based system to fight piracy. - -As another anti-piracy method, both formats also introduce a sort of "signature" called a [i]Volume Identifier[/i] which will be very difficult to duplicate on a cloned disk. - - -[b]The World Takes Sides[/b] - -After discussing the two formats sufficiently in depth, it's now possible to itemize the pros and cons of each format: - -[i][u]HD-DVD[/u][/i] -Pros: -[list] -[*]Backward compatibility with CD/DVD will be available soon -[*]Reduced production costs, both for disks and players - cheaper to buy -[*]Improved durability -[*]Available relatively soon on the market -[/list] -Cons: -[list] -[*]Incompatible with the competitor's format -[*]Less space than competitor's format -[/list] - -[i][u]Blu-Ray[/u][/i] -Pros: -[list] -[*]Backward compatibility with CD/DVD will be available soon -[*]More space than competitor's format -[*]Technologically more advanced, longer life-span -[*]Higher recording speed -[/list] -Cons: -[list] -[*]Incompatible with the competitor's format -[*]More expensive to produce and to buy -[*]More vulnerable to scratches (the TDK solution notwithstanding) -[*]Still relatively experimental -[/list] - -At this point, HD-DVD seems to be the "natural" successor to the DVD format: it inherits already-tested technologies and offers acceptable improvements regarding capacity. On the other hand, Blu-Ray is an innovative alternative, which, while more technologically advanced, needs to be tested more fully and is more expensive because of its innovation. Manufacturers will have to have separate machinery to produce Blu-Ray disks, while it appears that only some tweaks in existing structures will be necessary to support HD-DVD production on a mass scale at contained prices. - -Obviously, all the industries with interests in these new magnetic supports took sides with one or the other format: - -[i]HD-DVD:[/i]Toshiba, Sanyo, NEC, Paramount Pictures, Universal Pictures, New Line Cinema, Warner Bros Studios, Time Warner, and, apparently, [i][b]Microsoft[/b][/i]. - -[i]Blu-Ray:[/i] DELL, HP, Hitachi, LG-Electronics, Mitsubishi Electric, Panasonic, Pioneer, Philips, Samsung, Sharp, Sony, TDK, Thomson, 20th Century Fox, Walt Disney, Texas Instruments, Sun Microsystems, Electronic Arts, and Vivendi Universal Games. - -HD-DVD is supported mainly by film studios (Paramount and Universal) and multimedia companies (Time Warner). This is expected, since these industries advocate a product which is cheap, tested, and reliable. On the other hand, Blu-Ray is supported by IT industries that see a new technology for improved capacity and high recording speed. However, Walt Disney and 20th Century Fox seem to support this format, and they represent a sizable share of the family entertainment movie business. - -Microsoft recently seemed to [url=http://news.softpedia.com/news/Microsoft-Sides-With-Toshiba-Against-Sony-s-Blu-ray-3798.shtml]support HD-DVD[/url] technology. This was predictable, at least to a certain extent: Microsoft and Toshiba have always had a strong and productive working relationship, and Microsoft is probably trying to oppose Sony, who will probably use Blu-Ray for its upcoming PlayStation 3. Microsoft will probably opt for HD-DVD for the XBox, but it's too soon to say, especially since the big names of video games (like EA) seem to support Blu-Ray. - - - -[b]The End of the War[/b] -So a new [i]Standards War[/i] has begun, and it's still too soon to know how it will end. Recently, the possibility of a hybrid standard has seemed more plausible, even if Toshiba's format arrives on the market much sooner than Blu-Ray. Toshiba itself advocates a [url=http://www.pcpro.co.uk/news/73241/hddvd-bluray-marriage-back-on.html]single standard[/url], but seems also keen on [i]seeing how it goes[/i] first, when both the two products are on the market. - -Actually there's [url=http://news.softpedia.com/news/The-chronicles-of-a-futile-battle-Blu-Ray-vs-HD-DVD-631.shtml]someone[/url] who predicts a different ending for this war: no one format will win, especially if the "conflict" lasts for too long. There's a chance that [url=http://www.techtree.com/techtree/jsp/article.jsp?article_id=57500]Holographic Versatile Disks[/url] (HVD) will eventually destroy both contenders by offering, on the same disk, 1TB of space at 1Gbps transfer speed! -As a matter of fact, Japan's [url=http://www.optware.co.jp/english/what_040823.htm]Optware Corp.[/url] might be the revelation that [i]saves the world[/i]...
@@ -1,33 +0,0 @@
------ -permalink: obama-may-come-to-genoa -filters_pre: -- redcloth -title: Barack Obama may visit Genoa (Italy) on October 12th -comments: [] - -date: 2008-08-11 04:09:00 +02:00 -tags: -- politics -type: article -toc: true ------ -Barack Obama may visit Columbus' birthplace on October 12th 2008, and take part in the city's celebration of the discovery of America, which is held in the city every year. As reported by *Il Secolo XIX*, Genova's local newspaper. - -Although the invitation has not been officially accepted by the American Presidential Candidate, Genoa's mayor *Marta Vincenzi* is working very hard to make it happen. - -*Kerry Kennedy* (Bob Kennedy's daughter), is said to be in charge of liaising with Obama on the US side. - -<blockquote> -"[...] Kerry Kennedy and her family – among the first and most unexpected of Obama's supporters in his challange against Hillary Clinton – are said to be organising his visit to Genoa. It all started when Kerry came to the city at the beginning of July, for the Week of Human Rights initiative promoted by the city's council. Kerry was introduced to Nando Dalla Chiesa's 'Columbus Day' program plan by Vincenzi . -<br /><br /> -The proposal of inviting Obama to Christopher Columbus' birthplace was immediate, and a significant move. -That could have important consequences, because Genoa has been involved in battles for civil rights in the last few months while also trying to restore its relationship with the United States, which have often been identified as a symbol of evil globalization since the G8 summit [held in the city in 2001]." -<br /><br /> -After Bush – the "king" president among the other 8 powers protected by the Red Zone [the restricted area of the city where the G8 summit was held] – a black presidential candidate who speaks of dialog and integration to the people of Genova (and obviously also tens of thousands of Italians), from De Ferrari Square [the city's main square]. [...]" -</blockquote> -_– Translated from "Indovina chi viene a Genova":http://ilsecoloxix.ilsole24ore.com/genova/2008/08/11/1101689125257-indovina-chi-viene-genova.shtm, Giovanna Mari, August 11th 2008._ - -This could be a truly important occasion for Genova (and Italy) to re-establish dialog with the United States after the G8 summit (which cost the city a death and millions of Euro of damage caused by vandalism). -However, there is still no official confirmation that the event will take place at all, especially due to the upcoming Presidential Elections in the same period. - -If he comes, I'll definitely be there!
@@ -1,104 +0,0 @@
------ -permalink: pagerank -filters_pre: -- bbcode -title: The Green Bar -comments: [] - -date: 2005-12-09 14:03:54 +01:00 -tags: -- google -- internet -type: article -toc: true ------ -Since 1998 SEO experts, webmasters, and even casual users spent ages trying to figure out the magic within that small green bar... but what's really behind Google's most famous invention?If you never experienced the sensation of looking at such a [i]green bar[/i] before, then maybe you don't know what I'm referring to; I suggest downloading and installing the Google Toolbar[1]. This IE add-on (now available for the Firefox browser) was developed by Google years ago and still remains the most common way to view a website's [b]PageRank[/b] through a simple bar with a variable length, according to a 10 point scale. - -I quietly mentioned the infamous word [i]PageRank[/i] earlier, but what is it? -Some people think the idea of the word might come from a pun involving one of Google's co-founders (Larry [i]Page[/i]), while others simply think it was the most obvious choice for a system which was supposed to [i]rank[/i] pages according to importance and popularity. Anyhow, the only certain thing is that two (insert appropriate adjective here) students of Stanford University wrote a paper, in 1998, called "The Anatomy of a Large-Scale Hypertextual Web Search Engine"[3], in which, they discussed some interesting ideas for developing a large scale search engine using a particular algorithm they invented, which was supposed to help delivering the most relevant results for any search query provided by a user of the service. - -It is also certain that these two guys, Larry Page and Sergey Brin, eventually made an awful lot of money in the following years, developing and expanding an initially simple-looking website/web application with a funny name[4] and turning it into one of the biggest and most profitable businesses in the history of Computer Science. But let's now examine how PageRank works. - - -[b]Deus ex machina[/b] - Google's co-founders kindly provided a short text summing up their innovative (and perhaps secret) technology[5]. In particular, one paragraph seems to offer a brief and simple explanation of how PageRank works: -[quote] -[i]PageRank relies on the uniquely democratic nature of the web by using its vast link structure as an indicator of an individual page's value. In essence, Google interprets a link from page A to page B as a vote, by page A, for page B. But, Google looks at more than the sheer volume of votes, or links a page receives; it also analyzes the page that casts the vote. Votes cast by pages that are themselves "important", weigh more heavily and help to make other pages "important." -[/i][/quote] - - The first time I read this paragraph, I really experienced a feeling of admiration and ecstasy for these two enlightened minds who decided to bestow their priceless gift on the World Wide Web: a system which gives every page the due importance through a democratic system. Isn't it wonderful? - - Of course there's (much) more to it than a short paragraph, and obviously this [i]explanation[/i] wasn?t enough for those people (webmasters, SEO experts, kids creating their online family albums, etc.), who gradually became more and more interested in knowing further details about the system, hoping that it would have improved their placement in Google's search results. - - Indeed, PageRank contributed to label some sites as [i]important[/i] and gradually the number of ?PageRank 10? websites[6] began to rise, but generally remaining a prerogative of important names of the IT industry (Microsoft, Apple and obviously Google itself, for example). But how did such sites achieve that? How did the green toolbar grow so much for them and not as much for your grandma's personal webpage? - - Soon enough, theories and speculations produced an approximation of the algorithm[7], which is generally thought to be an acceptable model to understand how the system works. - -Take the following equation: - -[i]PR(A) = (1-d) + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn))[/i] - -Where: - -[i]PR(A)[/i] - The PageRank value of a certain page -[i]PR(Tn)[/i] - The PageRank value of all pages linking to A -[i]C(Tn)[/i] - The number of links present on page Tn -[i]d[/i](... - "damp factor", thought to be 0.85 - - It now appears clear that the PageRank of page A depends on the number of pages linking to it. Furthermore, important factors taken into consideration are the [i]quality[/i] of such pages (i.e. whether they have a high PageRank themselves or not) and the number of links present on each page, which causes the vote to be [i]divided[/i] equally among them. - - This is, in a nutshell, how PageRank is supposed to work. This is obviously a simple model, and there's actually a more mathematical/probabilistic approach[8] which goes beyond the scope of this article and requires some notions of probability theory. - - -[b]Considerations and opinions[/b] -With this model in mind, it's now possible to understand how (in a very simplified way) Google works: each month Google spiders search the web, and follow links from a page to another, keeping track of the "votes". PageRank is then calculated for every page and updated. This process normally takes a lot of time and, as a matter of fact, PageRank seems to be updated only every 4 months nowadays: these trimester updates normally causes a page to increase its rank by one (or more if you're lucky) level on the bar, or in some cases, lower it in the same way. - - By taking a closer look at the formula proposed above, you'll notice that the maximum value of PR(A) is by no means equal to 10, as it depends on how many pages link to A and how many outbound links there are on such pages. As a matter of fact, people started speculating on the nature of the scale used for PageRank: on the toolbar it ranges from 0 to 10, while in reality a PageRank 10 (take Microsoft.com for example) should correspond to [i]some millions[/i] in practice. - - The most accredited theory is that the PageRank displayed on the green bar is the result of a sort of correspondence between real values and such 0 to 10 scale. Also, people suggested that such scale is in fact a base 5 (or 6) logarithmic scale. This would explain for example why it takes much longer to acquire PageRank 7 from PageRank 6 than acquiring PageRank 3 from PageRank 2. -For the non-mathematical minds, a [i]logarithmic scale[/i] is a succession of numbers NOT incremented by "1" or a fixed quantity, but by an always-growing exponential factor: taking a base-10 logarithmic scale, values of 1,2,3 would correspond respectively to 10^1, 10^2 and 10^3 (10, 100, 1000). - - For a long time Google seemed to use PageRank as an important factor for getting first places in search results, and it's still partly true: if you search for the keyword "Italy" you're likely to find some high PR sites as first results. - - This resulted in all the possible forms of speculations: webmasters started asking money for publishing links on high PR pages, and similarly SEO experts started adopting various infamous tactics to obtain a high PageRank for their customers: this includes, for example, [i]link farms[/i][9]. - -It's now clear that what is was believed to be a solution relying on the [i]uniquely democratic nature of the web[/i] turned out to be a complete failure in that sense, because the very basis of the concept is wrong. Sad, but true, the WWW is by no means democratic at all. - - Another complaint against PageRank was that new sites took ages to acquire [i]respectable[/i] PageRank and therefore appear on the top of search results, no matter how wonderfully they were written. This is still partly true, as anyone can notice by searching Google, but the algorithm itself is continuously being tweaked both for stopping spammers and link farms, and also to favour those sites which provide relevant and appropriate content and are not up to some dodgy trick; I must admit that the situation is gradually getting better. - - -[b]Case Study: ItalySimply.com and h3raLd.com[/b] -I'm now going to discuss my own personal experience with PageRank applied to my two websites, ItalySimply[10] and h3raLd Labs[11]. While the second one is not currently advertised or promoted, because at the moment I don't have enough time for other web developing projects, with the first one I tried to follow a [i]SEO Strategy[/i] trying to acquire PageRank and good placement in search engines. -You can see the result yourself: ItalySimply acquired PageRank 5 and h3raLd PageRank 4: not bad at all considering they are both two relatively new websites, ItalySimply being officially born in August 2004 and h3raLd Labs actually had some serious content from April 2005 on. - - For ItalySimply, I even experienced a period of [i]PageRank 0[/i] which lasted about 2 months: although according to Google all websites should have at least PR1, PR0 is used to penalize some [i]unusual[/i] behaviour which in my case was a [i]302 - Temporarily Moved[/i] redirect which was necessary to redirect users to a subfolder of the server. Later on I learned how this can be interpreted as a dodgy redirection by search engines[12], and why I was penalized by Google for this with a PR0. After noticing the mistakes, I immediately started a strategic link campaign; obtaining links from some good sites (also with high PR) related to mine, and PageRank for ItalySimply began to grow, from 0 to 3, then 4, and just recently 5. - - At the same time, I re-designed h3raLd.com and noticed that it acquired PR1, because it was already listed in Google and didn't get any [i]vote[/i] from other sites. I then decided to put a link to h3raLd Labs on [i]every[/i] page of ItalySimply, which are now ranging from PR5 to PR2. - - The result was an immediate growth of h3raLd.com in terms of PR, which reached an acceptable 4 without [i]any[/i] link swapped, banner displayed on behalf of other sites, or anything as such. - - The difference between the two sites though is much bigger than 1 point on PR, in terms of placement in search results: ItalySimply has some relatively interesting content and various pages, and it ranks good enough on MSN and Yahoo, and even Google, to an extent; h3raLd.com has just 4 pages and doesn't seem to appear at all in search engines, unless you search for something like "h3raLd". Again, this is a proof that nowadays PR doesn't mean immediate placement on the top of search results. - - -[b]Final Considerations[/b] - Although PR is by no means the unique factor to determine search engine placements, it's still certainly important as a [i]co-factor[/i]. As I said, it's still extremely difficult for a new page with low PageRank to place before a high-ranked one. Surely, if I decided to put something more interesting on h3raLd.com I would get better results than buying a new domain and creating a new site: old sites with high PR are still [i]naturally[/i] inclined to rank better than new ones. Got that? Now, all you need to do is buy a really stupid domain name and create some pages for it, then think about it like a bottle of whisky; let it age for a while making it get some respectable rank: when you have a clever idea you'll have your ready-made place to promote it! - -[i]In Google we trust![/i] - - - -[b]Sources and related links:[/b] - -[1] Google Toolbar, [url]http://toolbar.google.com/[/url] -[2] Stanford University, [url]http://www.stanford.edu/[/url] -[3] Lawrence Page and Sergey Brin, "The Anatomy of a Large-Scale Hypertextual Web Search Engine", Computer Science Department, Stanford University, [url]http://www-db.stanford.edu/~backrub/google.html[/url] -[4] Google, [url]http://www.google.com/[/url] -[5] Google Technology, [url]http://www.google.com/technology/[/url] -[6] List of PageRank 10 sites, [url]http://www.searchenginegenie.com/pagerank-10-sites.htm[/url] -[7] Ian Rogers, "The Google Pagerank Algorithm and How It Works", IPR Computing Ltd. [url]http://www.iprcom.com/papers/pagerank/index.html[/url] -[8] Pagerank, Wikipedia page, [url]http://en.wikipedia.org/wiki/Pagerank[/url] -[9] Link Farm, Wikipedia Page, [url]http://en.wikipedia.org/wiki/Link_farm[/url] -[10] ItalySimply - Italy Real Estate Services and Relocation Help, [url]http://www.italysimply.com/[/url] -[11] h3raLd Labs - Freelance Web Development, [url]http://www.h3rald.com/[/url] -[12] "The Rundown on 301 and 302 redirects", September 10th, 2004, -[url]http://www.rankforsales.com/seo-articles/301-and-302-domain-name-redirects.html[/url]
@@ -1,199 +0,0 @@
------ -permalink: perfect-browser -filters_pre: -- bbcode -title: The Perfect Browser -comments: [] - -date: 2005-12-09 14:31:01 +01:00 -tags: [] - -type: article -toc: true ------ -So you finally decided to say goodbye to Internet Explorer, but now you feel lost in a multitude of browsers that all claim to be faster, more customizable, safer, or simply better than IE. Are they telling the truth? If so, which one is the perfect browser?[b]Point of view, clarifications and scope of this article[/b] - -So you're reading this article hoping to find out which is the [i]best[/i] browser ever made? Well, you're wasting your time. There's no such thing as [i]The Perfect Browser[/i], despite the various attempts made by Mozilla Foundation, Opera, Microsoft and others. After trying out nearly all of the major browsers currently available, I came to this conclusion: the perfect browser is a relative term, dependent on the particular person you ask, if it exists at all. Contrary to popular belief, I myself am not a 100% Firefox freak, and I do not consider myself biased to the point of going around shouting that Firefox is the [i]"best browser ever made."[/i] Granted, I do do that sometimes, but let's put my personal bias into some sort of perspective: - -Mozilla Firefox represents the most remarkable effort to create a [i]perfect browser[/i], but in some cases, and for some particular tasks, it may not be considered optimal by [i]some people[/i]. - -Having said this, I hope I can convince you that I'm not [i]that[/i] biased toward Mozilla's leading product, even if, as a matter of fact, nearly all the programs mentioned in this article are based on the Mozilla ('Gecko'? No, not quite... [1]) engine or a derivative. - -Originally, I was going to write a comparative review of Opera and Firefox, but in the end, I chose to broaden the scope a bit to include other products as well. There are already many articles and blog posts which have compared the two, either favoring Opera [2] or Firefox [3]. I also decided not to review browsers for platforms other than Windows, so there won't be any mention of Konqueror, Galeon, Safari, Camino, etc., which, although they are all interesting alternatives, go beyond the purpose of this article, which is to offer [i]Windows users[/i] a small selection of alternative browsers. - - -[b]Alternative Browsers[/b] - -There are literally dozens of [i]alternative[/i] browsers around. There are lists available online, and perhaps the most famous one is on Evolt.org [4], which can be considered comprehensive and accurate. Various statistics are available for objective comparisons of all the major browsers, for regarding for example speed [5] and overall performance and functionality [6], but even if such analyses are accurate, they are often not enough to fully evaluate a browser. - -In the following sections, we'll examine the following four free browsers, which are considered to be the most obvious alternatives to Internet Explorer. - -- Firefox -- Opera -- K-meleon -- Netscape - -I deliberately chose not to spend time on Slim Browser [7], Maxthon [8] (previously known as MyIE), or AvantBrowser [9], which are basically extensions built on top of Internet Explorer to add functionality to it. I also left out Mozilla's SeaMonkey [10], partly because of its alpha status, and partly because it is being marketed as an Internet Suite rather than just a web browser. - - -[b]Why IE is 'bad'[/b] - -'IE is crap', 'you MUST NOT use Internet Explorer', 'Internet Explorer is for n00bs'... how many times have you heard or read this? Some people tend to degrade Internet Explorer all the time, and the funny thing is, if one were to ask 'Why so?', approximately 40% would be unable to give a reply any more concrete than 'because Firefox is simply better' or 'because Opera owns!' or '[insert browser name here] simply can't be compared to IE!'. - -Now, all this may be true to a certain extent, but it certainly will not convince a person to switch browsers, and may even have the opposite effect: people will keep using IE no matter what! This is bad for the alternative browser market in general. It still looks like IE is used by 90% of people on the Internet and this will not change simply by telling all those people that they are "dumb" for using IE. There are sites whose only purpose is to make people abandon IE [11], but they discuss objective fact instead of opinionated propaganda. - -Personally, I decided not to use IE anymore because: - -- It's slow on my computer (which is old, as some of you may know) -- It's less secure than other browsers, and more vulnerable to malicious software and attacks, simply because it's used by the most people - that makes the BEST option for those who actually enjoy exploiting vulnerabilities, because it's not frequently patched [12]. -- It's not very customizable -- It doesn't have (or support) additional features -- It deliberately breaks web standards or creates its own, which makes things difficult for web developers -- It's normally behind the supported technologies -- I hate the idea of using a proprietary browser imposed by Microsoft - -I could discuss each one of these reasons in more detail, but that would be an article in and of itself. - - -[b]Firefox[/b] - -The famous and multi-awarded Firefox [13] browser is now approaching the 1.5 release, and it's constantly improving both in security and features. Firefox quickly became Mozilla's leading product, ahead of the Mozilla Suite (which includes a browser, HTML editor, email client and address book), which is now being rebranded as [i]SeaMonkey[/i] [10]. - -On the other hand, Firefox is simply a web browser, and doesn't offer an email client or html editor anymore, which was obviously a choice made to improve the performance of the application and engine, which was normally quite bulky, especially on old hardware. This was a wise decision, and Mozilla/Netscape enthusiasts quite liked the idea of having a lightweight browser rather than a slow-performing suite of applications. However, someone who uses both Firefox and ThunderBird (Mozilla's standalone email client) will end up using nearly twice the amount of memory used by SeaMonkey alone: this is because you now have two separate applications, so you have to load the rendering engine [i]twice[/i]. - -With Firefox, the Mozilla Foundation aimed to create a browser which would satisfy web developers by supporting the latest web standards and technologies, while at the same time offering new and interesting functionalities to end users. - -The Fox is not ideal for all types of users, but a constantly growing community of enthusiasts [14] is trying literally every way possible to promote it by targeting virtually all kind of audiences. - -In addition, its design makes it mostly secure; even if a few bugs slip by, they are not design flaws, merely implementation issues. When a bug is found, the Firefox development community works quickly to fix it, and usually has an excellent track record regarding that. However, the most important aspect of Firefox's security (on Windows, that is), is that it is not integrated into the system like IE is. Remote attacks on a Windows PC are mostly executed through IE, and the insecure design causes it to have unfixed critical bugs after five years of non-development, because Microsoft tends to shove bugs under the carpet whenever possible; half year, one year or even older unfixed bugs are not unheard of. - -To make it more readily apparent, statistics [12] [15] say that the maximum time IE is [i]not[/i] in danger from to an unpatched vulnerability is 7 days, while for Firefox, it is well over 200. - -Another of Firefox's strong points is the ability to add various [i]extensions[/i] and [i]themes[/i] for all kind of necessities: improving web searches, getting localized weather forecasts, playing music, blocking adverts, tweaking webpages, composing webpages, etc. -Firefox is [i]extremely[/i] customizable, and extensions don't affect the overall browser performance, as the actual overhead is minimal - this has been tested on a Pentium 2, so you can believe me. - -This is all very well and good, but the ability to customize a browser is not considered a good thing by all. This is because it tends to become a necessity - if Firefox didn't have extensions, it would still be better than IE for security and some features, but not amazingly so. Opera users found that Firefox without extensions could not match up to the features in Opera. - -After asking some IE users, it seems that Firefox can appear too [i]geeky[/i] for the average user who only wants to surf the Net and doesn't really care about web standards and browser customization. After all, a lot of people may decide that they don't want to spend their time tweaking and personalizing a program to make it fit their needs, as they find it annoying. - -Finally, a slightly unpleasant thing about extensions is that almost every time a major update to the browser comes out, some of the installed extensions become unusable until their developers update them. In order to solve this problem, Mozilla Development Team is releasing public alphas and betas of every major milestone, to allow third party extension developers update their extensions in time for the stable release. As a consequence, to avoid trouble with extensions, I suggest non-developers stick with the stable releases and avoid updating to alpha or beta versions. - -Anyhow, all those people who don't like having to play around with extensions should just use Opera. - - -[b]Opera[/b] - -A few years ago I came across Opera's site [16], and I downloaded their [i]free[/i] browser to try it out. At the time, Firefox wasn't a big thing, and the Mozilla/Netscape suites were too bulky for my liking, so I was looking for something lightweight and fast. That's the reason why the Opera team has always used the slogan [i]'the fastest browser on Earth'[/i] to describe their product, and they seem to be right[5]. - -I actually didn't like it at first, because - at the time - it didn't offer anything better than IE [i]and[/i] the company was more or less silently asking people to [i]pay[/i] them to get rid of the annoying ads the browser displayed on the interface. Browsers are nothing but software, however, and I think the reason why they are (nearly) all free is because IE comes free with every Windows installation. - -Finally, Opera agreed with that same philosophy: while celebrating their 10 years of existence, Opera Software ASA decided initially to give away license codes to get rid of the ads, and then to finally stop annoying their users with ad banners and cut their licensing fee altogether [17]. Obviously, at that point, I was really tempted to give Opera another chance. - -I was impressed, indeed. Opera is actually a nice piece of software. It's really fast in rendering pages, it displays them correctly, respects web standards (they improved this quite a bit over the years), and it's fast even when pressing the Back and Forward buttons. Its interface is probably the best and cleanest ever made; it's easy to use even for novices even if some things (like keyboard shortcuts) are different. - -Speaking of features, it offers: - -- Tabbed browsing and integrated search like Firefox (and IE7) -- A truly remarkable technology able to make [i]any webpage[/i] fit a window by zooming images in and out automatically -- A complete and fully working mail client -- An address book -- The ability to save browsing sessions -- Easily re-open closed tabs -- Skins -- A [i]magic wand[/i] to fill in forms and logins automatically -- A built-in scratchpad/notepad -- Voice integration (yes, you can even speak to your browser now, imagine that!) -- SVG support - not that it really matters for now, but it's a cool thing to say nowadays - -All of this is included in an application which is - to my eyes - more lightweight than Firefox. But it's not perfect yet. Why? The reason is simple. It allows a certain degree of customization, but doesn't have 'extensions'. One thing is true though, as someone pointed out [18]: in most cases, for 'average use', Opera doesn't need extensions, because it already offers quite a lot of functionality that doesn't need to be extended. - -It also happens that the features listed above are the most commonly requested by the majority of users, and that was, in my opinion, a clever marketing move. - -There are still two things about Opera that put me off from using it, however. One is the lack of a built in [i]"I'm feeling lucky"[/i] feature in the taskbar - even though there is a workaround [19]. The other is more serious, and it concerns compatibility. Even though the people at Opera Software are struggling more than ever to make it compatible with every site and technology - full Gmail support has recently been added - Opera cannot render some sites correctly. The most blatant example is Writely.com [20], which is a site offering a free ajax-based online word processor. It seems that Opera doesn't like Ajax too much for now. - - -[b]K-meleon[/b] - -Now let's talk about a piece of software which appears to have been forgotten by the majority of people in the world: K-meleon [21], a Windows-only, Mozilla-based browser. It is a prime example of how good software can be ignored by the masses, for three main reasons: - -- It wasn't conceived with the [i]average user[/i] in mind -- There's another browser using the same technology which is considered to be better -- It apparently doesn't offer anything new or stimulating - -I would define it as a browser for true geeks. To unlock its secrets you need to play around with configuration files, hundreds of hidden settings, macros, and menus. However, it can be very gratifying for people who enjoy this sort of thing. There's just one little problem with it: people who enjoy tweaking an application as much as K-meleon needs to be tweaked normally prefer a more customizable operating system altogether, but the browser is strictly [i]Windows only[/i]. - -I like it even if I don't have the time to play around with it as much as I would like to, and I think it is useful for some specific tasks. In particular, I found myself using it to upload pictures when updating one of my sites, and similarly repetitive jobs where all you need is a browser able to render a page quickly without using too much memory or CPU cycles. -K-meleon is built for Windows, and is therefore optimized for it, perhaps even more so than Firefox, and it's arguably nearly as fast as Opera. As far as I'm concerned, it's more lightweight than Opera and this makes it ideal as a [i]secondary browser[/i] to run together with Firefox or Opera. Why would you want to do that? Well, suppose you have to check two different GMail accounts and reply to emails here and there: using a secondary browser to keep you logged in to another Google account is better than having to login and logout repeatedly. - -Something amusing (or maybe not) about K-meleon: it seems to have no security advisories [22] on Secunia as only one was submitted and quickly patched in 2004, and that was all. The impression is that the browser is just not very popular. - - -[b]Netscape[/b] - -Netscape [23] is perhaps one of the oldest browsers that is still alive. It used to be a full-on web suite (basically a rebrand of the Mozilla Suite), and thus featured a web browser (Netscape Navigator), a WYSIWYG HTML editor, a mail client, and an address book. It was never lightweight (due to all the applications bundled together), but it was a true all-in-one Internet suite, at the time. - -Nowadays people prefer having a separate email client or check their email online. They rarely need an address book, since email addresses and contact details are normally stored automatically by the mail client/web application. The average user probably won't use the HTML editor, and the web developer will choose a more professional/optimal solution than Netscape/Mozilla Composer. - -Furthermore, Mozilla [i]suddenly[/i] started changing its roadmap, heavily marketing a standalone browser rather than an application suite, so people at Netscape thought it was the right time to do the same. Netscape now offers only a browser. It is based on Firefox, but has a lot of additional features. - -When the Netscape browser was launched in May 2005, it was supposed to represent a [i]new standard[/i] for online security, but various vulnerabilities[24] were found just after release, which caused it to gain the totally opposite reputation. Everything was fixed quickly enough, but people weren't impressed by that (myself included). Furthermore, another incident occurred a few days later. Microsoft advised its customers to uninstall Netscape 8 from their system [25], because after installing it on Windows, Internet Explorer inexplicably became unable to render XML pages, displaying a blank page instead! - -Apart from these odd events - which indeed half ruined Netscape's reputation - the application itself isn't that bad; it's based on Firefox, after all. - -Differences from Mozilla's browser are obvious immediately after installation: Netscape opted for a sort of online install, in the sense that the installer, which is downloadable from the official site, starts the download of the actual components and then installs them. In the meantime, slides specially tailored for end users appear on the screen, introducing the main browser features. These slides provide entertaining and informative viewing for the user. - -The browser is shipped with two default themes, and the interface itself is rearranged: search bar on the left, four weird buttons on the right, and a magic [i]multibar[/i] underneath. The multibar addresses a common issue with Firefox and IE - if you keep installing extensions and toolbars, the window used to display the page eventually becomes smaller. This new feature allows users to choose up to 10 different bars which can be selected in rotation with a single click. - -The real innovation, however, is the Security Center. It seems that these two magic words are now heavily used everywhere, as if they have some mystical power to reassure users and make them feel protected. In reality, the security center only tells you whether or not you can trust a site, based on Netscape's list of trusted sites or your preferences, and it automatically adjusts the browser security settings accordingly. - -[i]But isn't Netscape a Firefox based browser?[/i] - -Yes and no. Netscape can render using either Mozilla's engine or Internet Explorer's! Good or bad? Well, probably good in some cases, but rather annoying sometimes as it's [i]too smart[/i]: I tried visiting Microsoft.com and without doing anything the rendering engine switched to IE automatically! It basically tries to guess which browser is better to render certain pages, and this can be problematic, especially if it renders as IE any page which uses ActiveX technology. This short term gain - [i]total[/i] compatibility - is achieved by surrendering to IE flaws and maybe even giving no incentive for developers to abandon an IE-oriented web development: [i]'If Netscape can use an IE engine, why should I code using web standards?'[/i] - -Fortunately, despite the effort made by the developers and marketing experts at Netscape Corp., the new browser is not convincing enough. It is also clearly heavier on resources than Firefox; while I was just surfing it started claiming more than 70MB of RAM, while Firefox normally uses half the amount. Personally, I think it's an interesting attempt to create a [i]perfect[/i] browser, and it enriches Firefox with some new features which either are normally not available or require extensions, but it's not for me. - - -[b]Summing up[/b] - -As I said at the beginning (ruining all the suspense), there's no perfect browser; there's nothing universally accepted by everyone because everyone does different things. Personally, I'd advise using Firefox for general use, because it offers excellent compatibility, security and features. - -On the other hand, if you don't like extensions and you just need something to browse the Internet quickly, without the hassle of having to download additional components, go for Opera, although there are still some compatibility issues with it that need to be fixed. - -For Windows-based geeks, I'd recommend K-meleon: it's fast, simple, effective, and gives you plenty of things to play with to tweak almost every part of the browser. The project is not dead; a community of people are using it and providing patches, even if the leading developer is not able to do so. - -Netscape still needs some work, but it could be useful for quickly viewing a site on Firefox and IE, for example. It's also a little more user-friendly than Firefox. Those who are already accustomed to Firefox, however, are more likely to stick with it. - -Again, depending on what you do, what your needs are, and even your mood, one browser can be better than others. Personally, I use a variety of browsers: Firefox mostly, but K-meleon and Opera as well, and I like this combination as my [i]perfect browser[/i]. What about you? - - -[b]Credits[/b] -Thanks to comet for providing appropriate thoughts and opinions regarding the browsers' security. - -[b]Notes and Resources[/b] -[small] -[1] Clarification about the 'Gecko' engine: [url]http://www.mozilla.org/newlayout/gecko.html[/url] -[2] 'One Week with Firefox, its Extensions and Opera', OsNews.com, by Mart'n Marconcini [url]http://www.osnews.com/story.php?news_id=7562[/url] -[3] 'Firefox 1.5 vs Opera 8.5', SonSpring Journal, 09/22/2005 - [url]http://sonspring.com/journal/firefox-15-vs-opera-85[/url] -[4] Evolt.com, Browser list - [url]http://browsers.evolt.org/[/url] -[5] HowToCreate.com - Browser Speed Analysis -[url]http://www.howtocreate.co.uk/browserSpeed.html#winspeed[/url] -[6] 'Comparison of web browsers', Wikipedia page - [url]http://en.wikipedia.org/wiki/Comparison_of_web_browsers[/url] -[7] Slim Browser, Home Page - [url]http://www.flashpeak.com/sbrowser/[/url] -[8] Maxthon, Home Page - [url]http://www.maxthon.com/[/url] -[9] AvantBrowser, Home Page - [url]http://www.avantbrowser.com/[/url] -[10] SeaMonkey Project, Hope Page - [url]http://www.mozilla.org/projects/seamonkey/[/url] -[11] StopIE.com - [url]http://www.stopie.com/[/url], BrowseHappy.com - [url]http://browsehappy.com/[/url] -[12] Secunia vulnerabilities, Internet Explorer - [url]http://secunia.com/product/11/[/url] -[13] Firefox Home Page - [url]http://www.mozilla.org/products/firefox/[/url] -[14] Spread Firefox website - [url]http://www.spreadfirefox.com/[/url] -[15] Secunia vulnerabilities, Mozilla Firefox - [url]http://secunia.com/product/4227/[/url] -[16] Opera Browser, Official Website - [url]http://www.opera.com/[/url] -[17] Opera becomes free, webpage - [url]http://www.opera.com/free[/url] -[18] Opera and Firefox extensions - [url]http://virtuelvis.com/archives/2005/01/opera-and-firefox-extensions[/url] -[19] How to add 'I'm feeling lucky' to Opera - [url]http://my.opera.com/community/forums/topic.dml?id=63620[/url] -[20] Writely.com, free online word processor - [url]http://www.writely.com/[/url] -[21] K-meleon Project, Sourceforge - [url]http://kmeleon.sourceforge.net/[/url] -[22] Secunia vulnerabilities, K-meleon - [url]http://secunia.com/product/3684/[/url] -[23] Netscape Browser, Home Page - [url]http://browser.netscape.com/ns8/[/url] -[24] 'Netscape fixes holes in 'security' browser', Zdnet - [url]http://www.zdnet.com.au/news/security/0,2000061744,39192767,00.htm[/url] -[25] Netscape 8 'breaks' IE, Zdnet - [url]http://news.zdnet.co.uk/software/applications/0,39020384,39200178,00.htm[/url] -[/small]
@@ -1,86 +0,0 @@
------ -permalink: pre-review-of-ie7 -filters_pre: -- bbcode -title: Pre-review of Internet Explorer 7 -comments: [] - -date: 2005-11-25 18:16:46 +01:00 -tags: -- browsers -- microsoft -- ie -type: article -toc: true ------ -Internet Explorer 6.0 was officially released on August 27th 2001, and it still runs on millions of computers across the world: it's probably the browser release which has lasted the longest in the entire history of the Internet! While I'm not sure if this is an "achievement" so much as it is an "imposition", Uncle Bill admitted that his latest baby, Internet Explorer 7, is due soon...[b]In the Beginning[/b] -Recently (5 months ago, that is) the aforementioned [i]"Microsoft Chairman and Chief Software Architect Bill Gates announced Internet Explorer 7.0, designed to add new levels of security to Windows XP Service Pack 2"[/i]. This happened at the RSA Conference in San Francisco, and although I wasn't there, I can imagine that amongst the oohs and ahhs of the crowd, someone must have whispered "It's about time". - -Firefox, on the other hand, keeps its fans alive with pseudo-releases every so often, 1.0.4, 1.0.5 and so forth, which at least makes you [i]feel[/i] like some progress is going on, be it a security fix or a new feature. Firefox will hopefully release version 1.1 [i]at any time[/i] now, with various new [url=http://www.zzine.org/read.php?op=view&item=1321]features[/url] that Microsoft can only dream about. I think that when Bill created Internet Explorer 6, he probably commanded that it should be called "version 6.0" for ever and ever: fixes, service packs, and new features (popup blocking, etc.) have been added, but after 4 years I'm [i]still[/i] running "Internet Explorer version 6.0". - -Version 7.0 is supposedly due soon, and - guess what - not only for Longhorn users (but where's Longhorn anyway?), but also for Windows XP SP2 users, there's great news: beta testing! If you run Windows 2000 it looks like you'll have to keep using IE6 until you get a "more advanced" version of your OS, but[url=http://www.microsoft.com/windows/IE/ie7/default.mspx]Internet Explorer 7[/url] is supposed to be "[i]freely downloadable, as always[/i]" this summer. - -So what's new in IE7? - - -[b]Discovering (and guessing) further details[/b] -Although nothing was supposed to be known until the first beta release, according to what seems to be Microsoft's official procedure in these cases, after Bill's announcement, speculations on IE7's new features and improvements (and quirks?) began to spread across the Internet in various forms. [url=http://blogs.msdn.com/ie/default.aspx]IEBlog[/url] seems to be the most authoritative (and biased?) source to get information, simply because the folks there are those who ( supposedly) are planning and developing IE7. - -When the announcement was made, those guys wrote something like: -[quote] -[i] -First, some basics: we?re committing to deliver a new version of Internet Explorer for Windows XP customers. Betas of IE7 will be available this summer. This new release will build on the work we did in Windows XP SP2 and (among other things) go further to defend users from phishing as well as deceptive or malicious software. - -Why? Because we listened to customers, analysts, and business partners. We heard a clear message: ?Yes, XP SP2 makes the situation better. We want more, sooner. We want security on top of the compatibility and extensibility IE gives us, and we want it on XP. Microsoft, show us your commitment.? -[/i] -[/quote] - -That's so sweet! They are doing this for us, and they are listening to us... - -Sarcasm aside, it was clear from the beginning that Microsoft wanted to focus more on security: maybe because of the stereotype of IE which has emerged through the years (IE = An easy way for bad people to do bad things to you), maybe because it was time to do it, or maybe because they got bored. The most likely reason, though, is commercial: Firefox's popularity has surged recently, and Microsoft felt an urge to open (Fire)fox-hunting season as soon as possible. - -Back in March, more details about this new amazing product began to [url=http://www.microsoft-watch.com/article2/0,1995,1776290,00.asp]leak[/url], inevitably, and here are the new features that IE7 is supposed to have: -[list] -[*]Tabs -[*]International domain name (IDN) support -[*]Transparent Portable Network Graphics (PNG) support (finally!) -[*]Simplified printing from inside IE 7.0 -[*]A built-in news aggregator. -[*]Somewhat extended support to CSS2 (but not the whole standard) -[/list] - -Wonderful and incredible at the same time: is IE7 trying to emulate Firefox? - -[i]So, what will this wonder look like?[/i] - Someone might wonder... And here are some leaked [url=http://neowin.net/comments.php?id=29131&category=main]screenshots[/url] that could be real enough. Impressive. - - -[b]New support for old stuff[/b] -Any Firefox user reading the features list above probably wasn't terribly impressed: everything mentioned there has been supported in Firefox for ages, but personally, I'm truly pleased to see that Microsoft finally decided to try to catch up with more advanced browsers (not just Firefox, but Opera as well) and web developers can relax a bit (maybe). - -There's a nice post on IEBlog regarding [url=http://blogs.msdn.com/ie/archive/2005/04/26/412263.aspx]PNG Support[/url], where the guy who made the thing possible, Sam Fortiner, explains what he had to do and why. -It's widely known that PNG images currently aren't handled correctly in Internet Explorer: if they are transparent, in particular, they will show a grey-ish background instead of being transparent. I guess that's not a good thing to see, after trying to overlay PNG images, for example. As a result, web developers currently don't use the PNG format, nor its transparency support. With IE7's transparent PNG support, sites which seemed to only display properly in Firefox will appear equally beautiful in the new Internet Explorer. - -Tony Schreiner, on the same blog, provides a detailed explanation on his work concerning [url=http://blogs.msdn.com/ie/archive/2005/05/26/422103.aspx]Tab Support[/url]: tabs are a new thing for Microsoft, and for long it was feared that they could cause "confusion" among end users accustomed to the tabless policy of IE6 and of the whole Windows interface. Regarding this, I think that people at Redmond should thank firefox a million times for "pioneering" into the unexplored land of Tabbed Browsing: firefox has been using tabs since the very first release, and it was highly acclaimed for this. Eventually then, Microsoft folks released that people are not as stupid as they hoped they'd be, and [i]aren't[/i] confused by tabs at all, so they decided to implement them in IE7. - -Tony gives away some technical details regarding IE7's implementation of tabs, which essentially consists of [i]"pushing a large part of what you see in IE6 into a tab"[/i], and let's hope it works. IE was born and evolved as a single-window browser, so this addition represents quite a challenge to Microsoft's way of thinking about User Interfaces... what's next then? Maybe Tabs in Windows Explorer as well? Maybe... - -Little is known about the other "new features", apart from CSS2 support, which will be described in the next paragraph. A built-in RSS aggregator? It's now acknowledged that Longhorn will have an extensive [url=http://msdn.microsoft.com/longhorn/understanding/rss/default.aspx?pull=/library/en-us/dnlong/html/rsssupportinlonghorn.asp]RSS support[/url] itself, so this seemed a logical addition to IE7. - - - -[b]The fear of uncertainty[/b] -IE support for web standards, in particular CSS, has always been a hot topic for developers. - -[quote][i]When we shipped IE 6.0, we finally fully supported CSS 1, and had some pieces of CSS2 implemented as well.[/i][/quote] - -That's honest, at least. Microsoft - so far - does not support CSS2, but at least offers full CSS1 support. As a personal note, I'd reword the previous as [i]"Microsoft does not want to fully support web standards because 90% of Internet users use IE, hence, they can make the laws"[/i]. Cruel, but basically true: Microsoft does not care about web standards, and IE's lack of support can be used as a way to force developers to create websites which are IE-compatible rather than standards compatible. There's more information [url=http://www.alttags.org/archives/2004/04/29/33/]here[/url]. - -Words in an official [url=http://blogs.msdn.com/ie/archive/2005/03/09/391362.aspx]post[/url] don't bode well for the future either: -[quote][i] -Given the strong usage of IE in the corporate space as well as embedded in applications, we have a strong requirement for backwards compatibility with our previous behavior, compliant or not; that requirement does not mean ?don?t touch anything?, it is just a recognition that keeping our engine in sync across strict and quirks modes is challenging when quirks mode has to work nearly exactly the same as it always has. We will continue to improve our compliance under strict mode even when it breaks compatibility, and under quirks mode when it?s not damaging to our backwards compatibility. -[/i][/quote] - -Basically, this provides an excuse to not fully adopt web standards, which can be seen as legitimate or not, according to your browser preferences, so I'm not going to comment on that... - -In another article, [url=http://www.microsoft-watch.com/article2/0,2180,1776935,00.asp]MicrosoftWatch[/url], reports that [i]"One partner said that Microsoft considers CSS2 to be a "flawed" standard and that the company is waiting for a later point release, such as CSS2.1 or CSS3, before throwing its complete support behind it".[/i] -Although this cannot be regarded as a 100% authoritative source, people started [url=http://dean.edwards.name/weblog/2005/03/the-reason/]speculating[/url] that IE7 could potentially become a dictator for other browsers (like its predecessor), because so many people still use the MS browser. It could help Microsoft, as it did in the past, so why shouldn't Bill take advantage of it?
@@ -1,132 +0,0 @@
------ -permalink: project-gutenberg -filters_pre: -- bbcode -title: "Project Gutenberg: The What, When and Why" -comments: [] - -date: 2005-12-10 12:55:28 +01:00 -tags: -- writing -- internet -type: article -toc: true ------ -I always liked reading Shakespeare, and I always wanted to have a copy of every one of his plays, tragedies and sonnets on my bookshelf ready for consultation, but such things always seemed unrealistic because I had neither the space for them nor the time to find them all nor the money to spend on them when I did find them. -Now I can store the complete works of William Shakespeare directly on my mobile phone, and they take up as little as 1.4 MB compressed... -[b]Origins[/b] - -Even if you never heard the word ?e-book?[1] before, you can probably guess its meaning: [i]electronic book[/i], or a book in digital format. What you probably don't knoe is that people started copying books into digital format nearly as soon as computers were available to the public, and maybe even before: the first [i]e-book[/i] was created in 1971. - -That year, a student at the University of Illinois named Michael Hart was given the equivalent of $100,000,000 (or $100,000, or $1,000,000 - there is no official estimation) in [i]computer time[/i]. Basically, since he was friends with some of the operators at the Materials Research Lab, he was given an operator account on the Xerox Sigma V mainframe, which later became one of the 15 nodes that developed into the global network that eventually became the Internet. At that time, having that much computer time at your disposal was indeed a great privilege, and Hart felt that he had to use that time for something useful that could in theory generate a profit - not an easy task when you consider that only a limited amount of people in the world had access to a computer, and that those computers weren?t even connected together. - -Foreseeing an era where computers where interconnected and regular people had access to them, Michael Hart thought that virtually all texts and books could be made available in digital format, for free, to anyone who wanted to read them. Certainly, such a [i]project[/i] seemed quite unrealistic and excessively time consuming at the time; nevertheless, he decided to start copying the first book himself, the Declaration of Independence of the United States, which he was carrying in his backpack. - -Project Gutenberg[2] was born with that one single text, and it has grown through the years. Today, there are more than 16,000 e-books available to download and read. - - -[b]What is Project Gutenberg?[/b] - -By that name, Michael Hart probably wanted to define the project?s scope and vision: an idea as revolutionary for the diffusion of literature as the invention of moveable type printing[3] in the 1450s. - -The mission of the project can be summarized as follows[4]: - -[center][i] "To encourage the creation and distribution of eBooks." - [/i][/center] - -In order to achieve this, Project Gutenberg is set up such that [i]anyone[/i] can contribute to it, in many different ways. It is run completely by volunteers, hundreds of people around the world who share the same ideals and believe that literature should be freely available to everyone at virtually no cost. - -The Internet serves this purpose magnificently: it is possible to download all of the over 16,000 free e-books from the Project Gutenberg website[5] in different formats and many different languages[6]! - -However, having such a large amount of books available within a few clicks can make people forget about how time consuming the process of making one single e-book is: originally, after acquiring a paper copy of the book, Gutenberg?s volunteers had to transcribe it themselves, typing every word from the beginning to the end. Then the book had to be checked for mistakes before it was accepted into the Project. - -Producing a single e-book can therefore take many people and many hours from beginning to end, and presumably this was one of the reasons why Project Gutenberg was criticized for being more of an utopian ideal than a tangible reality: every year since its creation people have doubted the project, accusing Hart of pursuing an impossible dream, and prophesying that fewer and fewer people would join the team and that there was no future for Project Gutenberg. - -Oddly enough, they were all wrong: not only is the Project still active today, but the number of books released every year has grown consistently over time, from a few dozen in the early days to thousands per year now. - - More and more people became involved, partially because they share the same ideals and partially because it has always been easy to get involved[7]: Project Gutenberg strives to remove all the institutional barriers which could potentially interfere with members? motivation; they try not to impose any restrictions, and they don't support perfectionism. It is believed[8] that there shouldn?t be any [i]proper[/i] or [i]standard[/i] way to release e-books, but instead many different ways, to appeal to many tastes: the Project doesn?t support any particular standard for releasing ebooks, although it normally takes the simplest path. Therefore, the majority of the books are available in [i]Plain Vanilla ASCII[/i], i.e., texts are written using only ASCII characters, and bold, italicized or underlined words are capitalized instead. While this format has the most limitations, it is also the most portable. - -At this point, you might wonder why they don't just scan the original books, and make them available as image files or PDF files. While it would be much faster, it also has disadvantages, such as large file size and an inability to be displayed at particular resolutions; a scanned book probably wouldn't be readable on a PDA, mobile phone, or other equally small device. - -Nonetheless, scanners do play an important part nowadays in the process of making an e-book: texts are no longer copied manually if a printed edition already exists. Instead, they are scanned with OCR[9] and then proofread twice before being accepted. The (un)official procedure recommends scanning at least one page a day, having it proofread once by someone in charge of doing so (a ?junior? proofread), and then again by a more experienced member. This has undoubtedly sped up the process. - - -[b]Not All Books Are Equal (for now)[/b] - -By looking at some of the titles available on Project Gutenberg, you?ll notice that most of them are [i]classics[/i] or relatively old works: for example, you won?t find the latest [i]Harry Potter[/i][10] available for download. - -Since [i]all[/i] of the books at Project Gutenberg are free to download (more details of the license will be given later on), and therefore not subject to fees or copyrights, only books in the public domain[11] can generally be included in the Project. - -Public domain includes all those works of art whose intellectual property cannot be legally claimed or exploited by any person, institution or legal entity, and therefore belong to all mankind. In the case of books, copyright can expire [i]only if[/i] some particular conditions subsist: - -[list] -[*]The work was created and first published before January 1, 1923, or at least 95 years before January 1 of the current year, whichever is later. -[*]The last surviving author died at least 70 years before January 1 of the current year. -[*]Neither a [i]perpetual copyright[/i] is granted by the Berne Convention nor has a particular government (US or EU) passed a copyright term extension. -[/list] - -Now we can see why there are not very many [i]new[/i] publications available in the project, and that?s really frustrating for Michael Hart and other volunteers: - -[i] "In the USA, no copyrights will expire from now to 2019!!! It is even much worse in many other countries, where they actually removed 20 years from the public domain. Books that had been legal to publish all of a sudden were not. Friends told me that in Italy, for example, all the great Italian operas that had entered the public domain are no longer there... Same goes for the United Kingdom. Germany increased their copyright term to more than 70 years back in the 1960's. It is a domino effect. Australia is the only country I know of that has officially stated they will not extend the copyright term by 20 years to more than 70."[/i][12] - -After all these considerations, we can take a closer look at Gutenberg?s license[13] which comes in two different versions: [i]informative[/i] and normative (?legalese?, as they call it), the latter of which is the real document. Luckily, the non-legalese version is simple and complete enough: basically PG releases books which are either in the public domain or ? if copyrighted ? the author gave express permission to re-distribute them. The difference lies in the fact that if you remove PG?s trademark and license from a book which is in the public domain, you can re-distribute it freely on your own, but if the book is copyrighted and permission to distribute was given [i]only[/i] to PG, you?ll have to contact the author to obtain permission. - -Furthermore, anybody can use the PG trademark when distributing [i]verbatim[/i] copies of a book, with no changes (re-formatting is allowed); if you want to charge money for the copies you distribute, you have to pay royalties to PG. - - -[b]Satellite Sites and Similar Projects[/b] - -Michael Hart was ? and still is ? an authentic pioneer in his field: he had the idea to create the largest free library on the Internet to [i]?Break Down the Bars of Ignorance and Illiteracy?[/i]. A lot of people thought he wouldn?t achieve anything, but his dedication and perseverance were simply so exemplary that more and more people got involved, a few satellite sites were created and similar projects were started in all over the world sharing the same goals. - -Hart is obviously aware of the fact that there are also some sites [i]selling[/i] e-books, but he explains that neither those sites nor any other free online library should be considered a competitor to Project Gutenberg: they all contribute to the diffusion of e-books. - -One of the most important [i]satellite site[/i] of PG is ?Distributed Proofreading?[14] which is now considered the main source of PG books: every month more than 100 books are proofread by hundreds of volunteers who can register on the site for free and then get added to the project. The key concept of this parallel organization is that a single book can be proofread by more than one person at the same time, and thereby speeding up a project which would be otherwise very difficult to coordinate. - -Another site which helps the main project is HWG, the HTML Writers Guild[15]. It aims to convert PG?s plain text ebooks into more feature-rich HTML documents: by using a mark-up language it is possible to add footnotes and it can be analyzed easily by automatic tools. - -Although Project Gutenberg releases well-known books in many languages, a few sites officially affiliated with the project were created to focus particularly on their regional literature and works. That?s the case for both Australia[16] and Germany[17], for example; they both focus on their own national heritage. Regarding the latter, they recently claimed their own copyright for their e-books, and thus a new foundation is in the process of being created: Project Gutenberg Europe[18] which aims, among other things, to address the myriad copyright issues and laws of the EU. - -Last but not least, there?s an interesting discussion[19] about similarities and differences between Project Gutenberg and Wikisource[20] a Wikipedia[21]?s sister project aiming to create a free repository of texts which are either in the public domain or licensed under the GFDL[22]. - -Wikisource people obviously noticed that their project was quite similar to PG, but with an important difference: their texts were formatted and freely editable by any user who was able to spot a mistake or inaccuracy; PG doesn?t offer this. In this context, Project Gutenberg was sometimes blamed for allowing inaccurate material to be included in the project: this was due to the fact that even if PG uses Distributed Proofreading website to proofread e-books, this is often not comparable to a wiki system. However, in PG's defense, wiki articles, being much more open, are subject to much more vandalism, and therefore must be more closely watched. One can imagine a high school student changing [i]Hamlet[/i] to read "To be or not to be, who gives a crap." - -However, the members of Project Gutenberg have proposed a sort of mutual cooperation between PG and wikisource: wikisource should maintain a broader scope, focusing not only on literary works but also on quotations and other kind of texts, and at the same time provide some revised edition of some book to Project Gutenberg. - - -[b]The Future of Project Gutenberg[/b] - -Project Gutenberg demonstrated the ability to grow considerably during its over 30-year existence. During that same time, copyright laws were extended, and some new technologies tried to [i]intimidate[/i] the Project, which seems to remain relatively unchanged. However, last year a long-awaited DVD containing all the Project's e-books was released, showing the world that PG can keep up with the progress of technology to a certain extent. - -One aspect that makes PG a successful project even today is its ability to adapt: CD-ROMs and a DVD were released, OCR was almost immediately taken into consideration, and since last year, all e-books have been released in both plain text and HTML format: there are still no fixed standards or rigid guidelines, but common sense seems to prevail over chaos, and for now, the system works. - -So far, Michael Hart showed the entire world that a single person can do [i]a lot[/i] when pursuing a noble goal. Call him an idealist, call him a dreamer, but he surely created something able to gratify and motivate him and his fellow volunteers forever: - -[i]?I can't think of anything more rewarding to do as a career than Project Gutenberg. It is something that will reach more people than any other project in all of history. It is as powerful as The Bomb, but everyone can benefit from it.?[/i][12] - - - - -[b]Notes & Further Readings[/b] - -[1] Ebook, Wikipedia page ? [url]http://en.wikipedia.org/wiki/Ebook[/url] -[2] Project Gutenberg, Wikipedia page - [url]http://en.wikipedia.org/wiki/Project_Gutenberg[/url] -[3] Movable type, Wikipedia page - [url]http://en.wikipedia.org/wiki/Printing_press[/url] -[4] Project Gutenberg FAQ0 - [url]http://www.gutenberg.org/about/faq0[/url] -[5] Project Gutenberg Official Website - [url]http://www.gutenberg.org[/url] -[6] Project Gutenberg?s catalog - [url]http://www.gutenberg.org/catalog/[/url] -[7] Project Gutenberg?s volunteering page - [url]http://www.gutenberg.org/info/volunteer[/url] -[8] Project Gutenberg FAQ3 ? [url]http://www.gutenberg.org/about/faq3[/url] -[9] Optical Character Recognition, Wikipedia Page ? [url]http://en.wikipedia.org/wiki/Optical_character_recognition[/url] -[10] ?Harry Potter and the half-blood prince?, Scholastic Inc. website - [url]http://www.scholastic.com/harrypotter/books/prince/index.htm[/url] -[11] Public Domain, Wikipedia Page - [url]http://en.wikipedia.org/wiki/Public_domain[/url] -[12] ?The Second Gutenberg Interview with Michael Hart?, Sam Vaknin, Ph.D. - [url]http://samvak.tripod.com/busiweb29.html[/url] -[13] Gutenberg Project license ? [url]http://www.gutenberg.org/license[/url] -[14] Project Gutenberg?s Distributed Proofreading - [url]http://www.pgdp.net/c/default.php [/url] -[15] HTML Writers Guild Project Gutenberg ? [url]http://gutenberg.hwg.org/[/url] -[16] Project Gutenberg Australia ? [url]http://gutenberg.net.au/[/url] -[17] Project Gutenberg Germany ? [url]http://gutenberg.spiegel.de/[/url] -[18] Project Gutenberg Europe ? [url]http://gutenberg.nl/[/url] -[19] Wikisource and Project Gutenberg, Wikisource page ? [url]http://wikisource.org/wiki/Wikisource:Wikisource_and_Project_Gutenberg[/url] -[20] Wikisource main page ? [url]http://wikisource.org/wiki/Main_Page[/url] -[21] Wikipedia main page ? [url]http://www.wikipedia.org/[/url] -[22] GNU Free Documentation License ? [url]http://en.wikipedia.org/wiki/Wikipedia:Text_of_the_GNU_Free_Documentation_License [/url]
@@ -1,119 +0,0 @@
------ -permalink: project-windstone -filters_pre: -- bbcode -title: "CyberArmy Presents: Project WindStone" -comments: [] - -date: 2005-12-10 12:59:23 +01:00 -tags: -- internet -- opensource -type: article -toc: true ------ -I think most of the people who currently use the Internet have tried Microsoft Hotmail[1] at least once. Many of you probably don't use it anymore because you found something better, but the point is that Hotmail has been around for a long time, and so has its authentication method, MSN Passport, which is a universal login system used not only for Hotmail but also for many other non-Microsoft websites and services. -If you don't like the idea of using Microsoft-owned technology as an authentication system, we have an alternative for you... [b]Show me your Passport[/b] -[quote]"Create your sign-in credentials (e-mail and password) once, then use them everywhere on the Microsoft Passport Network. You can even set the site to remember your credentials for you!"[/quote] - -This is what the MSN Passport does, in a nutshell: it provides a [i]universal[/i] login system so that members only need to remember their email address and one password in order to be authenticated on every site that uses the Passport technology. It has been adopted quite happily by some websites and portals[3], and particularly by merchant sites, who liked the idea of making life easier for their users. So far, so good. - -Like nearly every Microsoft technology seems to at one point or another, the MSN Passport became an object of criticism and concern, as shown in a 2002 MIT document[4]. The main problem is this: among the data collected by Microsoft upon a user's registration is a significant amount of personal information (such as age, date of birth, and addresses) which is stored on the Microsoft servers. What if someone gains access to that information? Who guarantees that that information will not be used by third parties? - -Aside from the privacy issues, some people are concerned about the system's internal security and by the fact that the system is entirely dependent on Microsoft servers to work: - -[quote]"As more services and components depend on remote servers, functionality can grind to a halt if there is a failure on the centralized Passport system."[5][/quote] - -People have concerns, but what has been done? Are there any alternatives? Well, yes and no. Apparently the [i]Liberty Alliance Project[/i][6] was created to offer a valid and perhaps more democratic alternative to the Microsoft Passport: - -[quote]"The Liberty Alliance Project was formed in September 2001 to serve as the premier open standards organization for federated identity and identity-based services. The Alliance is delivering specifications and guidelines to enable a complete network identity infrastructure that will resolve many of the technology and business issues hindering the deployment of identity-based Web services."[7][/quote] - -The project's founders (160 IT organizations, including Sun Microsystems and VeriSign) aim to create a [i]distributed[/i] authentication system, as opposed to the [i]centralized[/i] MSN Passport. This will undoubtedly solve some of the problems, but the system is still under development. - -[b]Introducing Project Windstone[/b] -CyberArmy[8] is obviously like neither Microsoft or Sun Microsystems; it's a community of volunteers whose aim is sharing their knowledge and making the Internet a better place. Volunteers don't get paid, but sometimes something gets done, and some projects are released to the general public. Among these is a system for (if you haven't guessed already)a system for universal user authentication, called Project Windstone[9]. - -Project Windstone was developed by SoundWave on behalf of Special Operations and Security[10] to provide a universal authentication system that is easy to use and deploy on websites and in applications. Furthermore, the Windstone protocol is language-independent and functions via HTTP POST transactions between clients and the Windstone server, so virtually any website coded in any language or any application able to communicate with a web server can implement it. - -It seems great so far, but what can Windstone be used for? As previously said, it is a system to allow users to authenticate themselves with the same credentials on many different websites and share profiles and information between those websites at the same time. Furthermore, users can send each other private messages that can be retrieved on any website that implements Windstone, with the added benefit of all transactions taking place in a secure and private environment. - -On second thought, Windstone features seem to lead to some perplexity, especially among users who are particularly concerned about their own privacy: apparently a single centralized server is involved, and users can share their profile and send messages with each other, so what warranties does Windstone offers as far as privacy/security goes? Here's something which should reassure most of us: - -[list] -[*]The information provided by users in their public profiles is entirely up to their discretion: in other words, it's up to the user if they want to list their credit card numbers on their profile or talk about their cat, as the Windstone server itself does not require any specific personal information in order to create a profile. -[*]The username can be any valid email address submitted by the user. -[*]User profiles are available only after authentication with the Windstone server, and only if the person requesting the profile already knows the email address used by another user for Windstone services. Currently, Windstone does not implement any form of listing of existing users among the standard commands. -[*]The password chosen for user authentication is NEVER saved in any form; not within the client applications, not on the central server, and not in cookies. -[*] Data sent from client to server and vice-versa is encrypted. -[/list] - -[b]Some more technical details[/b] -I am actually planning to implement the system on one of my sites, so I started reading the short but straightforward documentation[11] available on the Windstone site to learn more about how the system works, and it seems quite simple and able to do what it does in a logical way; the Windstone "standard" contains a bunch of commands[12] which are used by the clients (agents) and the server to request information exchange such as requests for initialization, possible server replies, and so on. Commands and data are sent using the following format (excerpt from the official documentation): - -[i] -The format of this command string is as follows: - -AAAA.*BBBBBBBBBB.*CCCC::DDDDDDDDDDDDDDDDDDDD::EEEE::FFFFFFFFFF - -A. This is the command. Commands tell us what kind of request or response is being made with the command string. It also lets us know how many elements of data to expect (see F). - -B. This is the agent system identifier. Each website or IEP receives a unique alphanumeric ten (10) character identifier upon registration, which is used to identify this system within the network. - -C. This is the protocol version number. Generally, the version number will not change much, if at all, but it must be present. The protocol version goes with all command strings to let other systems and the Windstone server know what version of the protocol you are using. If certain versions are incompatible with each other, or if there is an upgrade or change to the protocol you are using, the version number will be used to determine that. - -D. This is the transaction identifier. Usually, this is not used, so the default information that should go here is six zeros ("000000"). The transaction identifier helps to link command strings into groups for processing and is most often used during the user login process. - -E. This is the sequence number. The sequence number, in conjunction with the transaction identifier, is used to put grouped command strings into their logical order. The sequence numbers have no specified numbering sequence, default start value, or length limit: the only requirement is that a sequence number must be in order from lowest to highest. When not using a transaction identifier or sequence number, the default information that should go here is a simple "X" (note that when "X" is being used in a command string by itself, it should always be capitalized). - -F. This is the data section. The data section is the heart of the command string. It is important to note that, at the minimum, all data sections need to be base-64 encoded prior to transmission - at no time should there be information in plain text format in the data section. -[/i] - -Obviously, command strings can be manipulated to access each section separately and the manipulation can be done with virtually any programming language used on the client side. - -Normally, the client will send a command to the Windstone server to start the authentication process and then retrieve some information; the server will reply accordingly to the client's command strings with its own responses wrapped in command strings. Let's suppose a Windstone Agent is being used to perform the following actions: - -- Initialize the system -- perform a login -- retrieve user profile from the Windstone server - -In this simulation I will not use the actual command strings but just the codes for the various commands. - -[i][u]Agent[/u]: 0000 :: SETUP_INITIALIZE[/i] - The Windstone agent sends a request to the server to initialize the authentication process, supplying the software identifier, the software type ("PC-Based" or "Web-Based"), the command landing URL and the URL to redirect logins to. - -[i][u]Server[/u]: 0002 :: SETUP_COMPLETE [/i]- Everything looks good to the server, which replies with the following information: Unique agent identifier, primary authentication token, secondary authentication token, activation key, security code, shared encryption key (255 random characters, non-binary), registration completion date and time (epoch). These parameters will be used by the agent afterwards and are necessary to identify the agent on the Windstone server. - -[i][u]Agent[/u]: 1102 :: USER_LOGIN_REDIRECT[/i] - The agent requests to start the authentication process and sends the email address of the user to the server along with the URL where the user's password will be entered. - - -[i][u]Server[/u]: 1105 :: USER_AUTH_SAVE[/i] - User credentials are checked by the Windstone server. Everything is fine, so the server sends this response to the agent. The response contains the authentication token which will be used to authenticate the user during the session, as well as the user's display name. - -[i][u]Agent[/u]: 1107 :: USER_INFO[/i] - The agent can now request the user's profile from the Windstone Server. - -[i][u]Server[/u]: 1108 :: USER_PROFILE[/i] - After checking the user's authentication token, the server can now send the following information to the agent: Email address, display name, user "About Me" text, last login date and time, account created date and time, online status. - -This is just a simple example of how the Windstone protocol can be used; as mentioned earlier, there are various other commands[12] which can be used to perform various actions. - -[b]Development and deployment[/b] -The Windstone protocol is fully operational and can be implemented on any website or application able to communicate with a web server. The developer made a very basic PHP-based example of an Agent system available online[13]; it may not be a masterpiece of PHP coding (as the developer himself pointed out), but it can be useful in understanding how to develop a Windstone Agent System. - -If you'd like to start developing your own Agent System or you just want to create a Windstone account, it can be done on the Windstone registration page[14]: you'll be asked to provide an email address, a display name and a profile (the last two can be modified afterwards). Then the system will prompt you for a password, and an email will be sent to the address you provided to confirm and activate your account. Once you have an account, you can login to any website or application implementing the Windstone protocol, such as the Windstone website itself[15]. - -Windstone is certainly not yet comparable to the MSN Passport technology - it's not used by a lot of important sites, and it's much simpler and offers fewer services, but it's undoubtedly an interesting approach to a free to use, secure and private system of universal user authentication. -Check it out![9] - -[b]Notes and Resources[/b] -[1] Microsoft Hotmail Service, [url]http://www.hotmail.com[/url] -[2] MSN Passport Network: [url]https://accountservices.passport.net/ppnetworkhome.srf?vv=320&lc=1033[/url] -[3] List of sites using MSN Passport, Passport@everything2: [url]http://www.everything2.com/index.pl?node=passport[/url] -[4] "Microsoft .NET Passport and Wallet: Approach with Caution!", [url]http://web.mit.edu/ist/isnews/v17/n04/170408.html[/url] -[5] "Microsoft Hailstorm and Passport", go-mono.com, [url]http://www.go-mono.com/passport.html[/url] -[6] Liberty Alliance Project, Official Page, [url]http://www.projectliberty.org/index.php[/url] -[7] Liberty Alliance Project, FAQs, [url]http://www.projectliberty.org/about/faq.php[/url] -[8] CyberArmy, Official Page, [url]http://www.cyberarmy.net/[/url] -[9] Project Windstone, Official Page, [url]http://windstone.x-mirror.com/v2/[/url] -[10] Special Operations and Security, official website, [url]http://sos.x-mirror.com/[/url] -[11] Windstone Communications Protocol, Development Whitepaper, [url]http://windstone.x-mirror.com/v2/development.php[/url] -[12] Windstone Protocol Commands, [url]http://windstone.x-mirror.com/v2/commands.php[/url] -[13] Example of PHP Agent System (ZIP file), [url]http://windstone.x-mirror.com/v2/ws-testbed.zip[/url] -[14] Windstone Registration, [url]http://windstone.x-mirror.com/v2/register.php[/url] -[15] Windstone Login Page, [url]http://windstone.x-mirror.com/v2/login.php[/url]
@@ -1,59 +0,0 @@
------ -permalink: quick-overview-of-sqlite -filters_pre: -- bbcode -title: A Quick Overview of SQLite -comments: [] - -date: 2005-11-25 17:52:38 +01:00 -tags: -- review -- databases -type: article -toc: true ------ -A few months ago, my old hosting company started having problems with their servers. The servers would go down unexpectedly for 5-10 minutes on a relatively frequent basis, but for some weird reason... the MySQL databases were unusable for a couple of hours afterwards every time. "We had problems with MySQL, BUT the server was up, so we're still within the 99% uptime guarantee"... At the time I was thinking: "If only MySQL databases behaved like plain files..." - -[b]What is SQLite?[/b] - -When PHP5 was first released, I discovered SQLite: [i]"...a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine"[/i] (as quoted from the [url=http://www.sqlite.org]official site[/url]). PHP5 offers native support to this little wonder, whose development actually started long before PHP5 was released, and can be used with many, many other programming languages. - -SQLite organizes each database in a .db file, and implements most of the SQL 92 standards, to access the databases with no need of a server process running at the same time. Access is accomplished through standard reading/writing file operations. - -Let's examine the pros and cons of using SQLite in your web applications. - -[b]Features[/b] - -- SQLite is FREE "for any purpose", [url=http://www.sqlite.org/copyright.html]they say[/url]. -- It doesn't rely on a server process to run -- You don't need to spend time configuring your installation, because there's nothing to configure! -- As there's no client-server negotiation, accesses to the database are much faster (2-3 times faster than a MySQL database) - -As a consequence of all this, there's actually no concept of "users" allowed to access the database; as I said, the actual data of each database is stored into a single file, and as such, it has permissions which regulate access. If a script has read or write access to the file, a read/write sql instruction can be executed on the database. You can therefore simply protect your databases as you would protect any other file on your server. - -- SQLite is small: the library is just 250KB, and takes care of everything, you don't need any other library or program to use it. -- SQLite can handle files up to 2 terabytes in size. -- SQLite implements most of the SQL 92 standard. This means you can usually use standard and well known queries to access it (with some exceptions, discussed in the next section). -- SQLite does not enforce datatype constraints. Is this a feature or a bug? Well, they call it a feature, but others may not agree. As a matter of fact, you can put a string into a field marked "integer" and vice versa, and furthermore, the string can be as big as you like! There's one exception to this rule, though. Columns marked as PRIMARY KEY must be of integer type. - - -[b]Limitations[/b] -Now that you have read all of the preceding material, and know that PHP5 supports SQLite natively, you might be thinking about putting MySQL in the bin and using SQLite for everything instead: it's smaller, faster, portable, simpler, and headache-free... it's love at first sight. Right? - -Well, the developers themselves decided to devote [url=http://www.sqlite.org/whentouse.html]a page[/url] to discuss when you should use SQLite and where you'd be better off sticking with your "old" database engine. Furthermore, being such a small and powerful piece of code, SQLite comes with some limitations which should be considered before starting to use it in a project: - -- Not all SQL queries and syntax are supported. For a full list, have a look [url=http://www.sqlite.org/omitted.html]here[/url]. The most notable things you'll miss in SQLite are: the inability (for now) to "ALTER TABLE" (you do this, they say, by creating a new modified table and deleting the old one), no VIEW, and no CHECK or FOREIGN KEY constraints (they are "parsed but not enforced"). - -- Syntax can be different sometimes. I noticed that, for example, in a JOIN between two or more tables, when accessing columns you ALWAYS have to specify <table>.<column>, whereas MySQL doesn't complain if there's ambiguity. - -- SQLite is not suitable for projects which requires a lot of semi-simultaneous writing operations. SQLite uses reader/writer locks: if there's someone reading from the database, writing to it is not allowed. This basically mean that multiple simultaneous read operations (SELECT x FROM ...) have higher priority than write operations (INSERT, UPDATE, ...), which are therefore delayed. - -- Do not use SQLite for big databases. Even though I said that (theoretically) databases up to 2 terabytes are supported, when your database is more than 1 GB, SQLite requires too much memory to run (256 bytes of RAM for each MB of database space, they say). - -- Generally, if your website gets lots of traffic, SQLite shouldn't be your primary database engine, for the issues mentioned above. php.net uses SQLite for its site, but only on certain parts of it. If you get fewer than 100,000 hits/day, SQLite should work fine - they say. So basically I can use for any site I make... - - -[b]Conclusions[/b] -Considering all features and limitations, SQLite is an excellent solution for small or medium websites, embedded applications, programs which only need a small database to function and shouldn't be bound to a server, temporary databases, testing, and the like. Always keep in mind that you're working with files, so keep them protected wherever you put them in your server (a connection is established simply by specifying the path to the file). - -Last but not least, if you're used to phpMyAdmin for administering your MySQL databases, there are similar tools for SQLite, such as [url=http://www.sqlitemanager.org]sqlitemanager[/url].
@@ -1,184 +0,0 @@
------ -permalink: rails-doc-first-look -filters_pre: -- redcloth -title: Rails-Doc.org - A First Look -comments: -- :date: 2008-06-20 00:05:03 +02:00 - :author: falkenberg.tumblr.com - :url: "" - :id: 241 - :body: It would be great to have an OpenID login. -- :date: 2008-06-20 10:55:20 +02:00 - :author: nachokb - :url: "" - :id: 242 - :body: |- - Another thing I'll miss is multi-version support: - - "The next big release, coming out in a couple of months, will include support for multiple versions of Rails and version handling/separation on class-module-method level." - -- http://blog.nodeta.fi/2008/06/20/rails-doc-org-out-now/ -- :date: 2008-06-20 15:42:35 +02:00 - :author: Marcus - :url: "" - :id: 243 - :body: |- - It'd be really nice to be able to actually "search" the documentation--the equivalent of - - finder methods site:http://api.rubyonrails.org/ - - on Google. On this site if I don't know the name of the method I'm searching for (or if I don't guess correctly) the search just doesn't work. - - It's definitely nice to see someone working on this problem though! I think it's an interesting alternative, the inline notes feature is pretty cool. -date: 2008-06-19 07:30:00 +02:00 -tags: -- rails -- ruby -- writing -- review -type: article -toc: true ------ -When you decided to learn Ruby on Rails (if you did, that is), chances are that you bought a book. I did, too, actually: there are a lot of very interesting and fairly comprehensive books out there after all. - -I actually never bought a book to learn PHP, in the past though. Why's that? Well, for two simple reasons: - -* The "PHP manual":http://www.php.net/manual/en/ can easily be searched and provides enough documentation, in most cases. -* When the documentation is not enough, there's always plenty of comments by experienced developers to save your day. - -That being said, PHP is still an awfully disorganized language, but believe it or not, coming from PHP I didn't find "Rails documentation":http://api.rubyonrails.org/ useful enough simply because it didn't have these two simple but very powerful features. - -Sure, there's the "Rails Documentation Project":http://www.railsdocumentation.org/ which provides more organized docs, and "Noobkit":http://www.noobkit.com/ does a nice job with its search-as-you-type feature... but still is not quite enough: you'd expect something much better than that for something like Rails!h3. Introducing Rails-Doc.org - -!>/files/railsdoc_logo_sm.png! - -"Rails-Doc.org":http://www.rails-doc.org focuses on providing a better interface to Rails documentation by offering two key features: - -* A powerful, fast and useful document search -* The possibility to add notes to Rails documentation - -When the app went live, I immediately registered (it's free of course) and started playing with it... - -h4. Search as you type... - -The first thing I did was trying the search features, of course. I started typing "rout" for Routing, and I was immediately shown a list of matches: - -!=/files/rails-doc_search.gif! - -It took a small fraction of a second to load the matches, which makes me think that definitely they have all the names indexed somewhere. Nevertheless, it was a pleasant surprise: normally, these search-as-you-type utilities are not that refined! - -All you need to do is start typing at least three letters, and you get results, if any. -if you press ENTER, you get automatically redirected to the first result. This can be good, but maybe it would have been nicer to load a "traditional" list of results, but it depends on your taste, really. - - -h4. ...or browse through the namespaces - -Alternatively, it is possible to browse the docs in the more traditional way, i.e. according to their class or module: the *Browse* page does just that: it lists _all_ Rails classes and modules, regardless of the nesting. But there's more: a little roundy icon precedes each class name, to indicate whether the documentation is present, and to what degree: - -!=/files/rails-doc_icons.gif! - -This is an interesting concept: in this way, in theory, people should contribute to the documentation where it's more needed. - -Each reference page is very neatly re-formatted: you can hardly imagine it's actually the same content included in Rails' RDoc pages! - -!=/files/rails-doc_document.gif! - - -Finally, another nice addition is the *Related* column, which lists links to other items which are related to the current topic: - -!=/files/rails-doc-related.gif! - - -h3. Contribute, contribute, contribute! - -You have to register for something, don't you? Yes. If you register, you can post notes to any document. Simple enough, all you have to do is to click the *Add Note* button and a form will slide down for you to fill in: - -!=/files/rails-doc_note1.gif! - -As you start typing, you'll notice that a preview of the note is displayed instantly: as you can use SimpleMarkup to write notes, exactly like in RDoc, this feature can be very handy: - -!=/files/rails-doc_note2.gif! - -What if there's no documentation for a particular class or method? You'll get a warning like this one: - -!=/files/rails-doc_nodoc.gif! - -The idea behind this is that, if you provide some useful insights, they'll eventually end up in Rails core documentation. - -h3. An Short Interview with Mikael Roos, from Nodeta - -Before the application went live, I was lucky enough to get Mikael Roos to answer to some of my questions. Here's the full interview... - -h4. What are you actually trying to do on Rails-Doc.org? - -The initial goal of the project is to provide the existing documentation in a more accessible way, most importantly to provide a lightning fast search feature that gives weighted results based on the -quality and amount of documentation. This we have already accomplished, and all remaining issues are related to browser compatibility. Another initial goal is to present a smooth interface for creating inline notes to -the documentation so that Rails developers can post notes about certain methods etc. for themselves and others to draw knowledge from. - -Our longer-term goal (N.B. we are an agile project, so long-term means, say, three months) is to provide a way for the active members of the Rails community to improve the existing documentation based on the posted notes -to create an extended documentation that could optimally even be made in to a patch and would find its way back into the actual Rails source. - -Another clear and obvious goal is to keep improving the service steadily as we progress toward the goals that I mentioned above. - - -h4. Could you spend a few words on the "development process" followed by your company to develop this app? Did I read the word "Scrum" somewhere? Am I correct? - - - - -Yes, our development process of choice is Scrum. The core team is only three members, one backend developer, one backed/frontend develope and one frontend developer/UI specialist. I feel the team is optimal in many ways. -The team also has a few more experienced developers who are primarily active in other projects to ask questions from, one of whom is also the acting product owner on the Rails-doc project (that's me!). - -h4. Did you develop it in three months, or...? - -The first release was developed in three SPRINTS, not months - so what I'm saying is the first release was developed in five weeks (first sprint was mostly introductory and lasted a week, the next two sprints, first -development and then stabilization, were two weeks each). However, it is a FIRST RELEASE, which means the app is by all means not complete, but since we make software in a very agile way, it'a all about "Ship, ship, ship!". - -h4. What is "Nodeta":http://www.nodeta.fi, exactly? My Finnish is a bit rusty nowadays... - -Nodeta is a software development company that focuses on web software. We employ a highly agile and effective process. We have worked both on light independent projects and in the environment of large global enterprises. -There are currently 10 Nodetans. - -Rails-Doc.org is a pilot project for your new shiny app, ApiDock. Is it an open source app? - -Unfortunately, I cannot go into details about APIdoc yet. What I can tell is that it is developed with Rails and that it won't be open source, but rather it would optimally be offered as a service, which after all is what -the word "app" on the web means these days. Open source projects could however use it for free, sort of in the spirit of GitHub. - -It will also most likely be separately targeted to larger companies. - -h4. Can you give me more technical details about the way keyword search is performed? Are you indexing/tagging documentation beforehand? - -There will probably be a blog post on the "Nodeta blog":http://blog.nodeta.fi about the search and how it works after the first release comes out. - - -h4. What about the social side of it: you're hoping people will contribute with notes, which will then be collected and integrated in the documentation correct? Do you have any moderation or anti-spam precaution? - -The quality of notes is judged in a social way. Notes can be thanked by other users and notes that get many thanks are showed in a more prominent way. Registration will be required in order to post notes and the registration will feature a captcha. - - -h4. Will contributors be credited somehow? Who can contribute and at what level? - -Anybody can post notes and good notes get thanks and thus so do their posters. Users that get lots of thanks will be later asked to become core users that can alter the extended documentation (not in the first -release.) - - -h4. You want to blow out competition and that you don't want to fail: sounds a good plan! How is Rails-Docs different from other similar apps? - -We think that our app is the first that is serious about making things happen. We think about users first and above all at this stage our search feature is frankly unparallelled. - -h4. Do you have DHH's seal of approval? Will you? Is there any copyright issue with your domain name? - -Time will tell what DHH thinks. We did contact him just a few days ago to ask what his thoughts about all this are and are waiting for his comments. I doubt there is any wrinkles with copyright as Rails-doc itself is a completely non-profit project. - - -h4. What about doing something similar for the whole Ruby language? Ruby docs may also be easier, in a way... - -It is possible that we might do just that but right now it's all about Rails. - -h3. The Bottom Line - -Rails-Doc.org is definitely an interesting project, which has all the potential to become a powerful, Rails-powered service. Sure, it's not open source and this can be a bit of a letdown for some: but after all people flocked to GitHub when it opened, didn't they? - -The search capabilities of Rails-Doc.org are definitely a very important step forward in making Rails documentation more accessible and easier to use, but the killer feature is definitely the possibility to add notes, if used wisely. - -I'll be watching this project closely and I'll pay particular attention on what happens to the community's contributions: will it really be useful? Will it really help creating documentation patches to Rails core? Only time will tell, of course.
@@ -1,336 +0,0 @@
------ -subtitle: "A roundup of six different PHP frameworks inspired by Ruby on Rails" -popular: true -permalink: rails-inspired-php-frameworks -filters_pre: -- redcloth -title: Rails-inspired PHP frameworks -comments: -- :date: 2007-07-31 20:57:30 +02:00 - :author: George - :url: "" - :id: 43 - :body: | - Hey, great article and amazingly designed site you got here. Thanks for the info. - -- :date: 2007-10-18 10:22:03 +02:00 - :author: RailsGuy - :url: "" - :id: 101 - :body: |- - It's funny how PHP developers are just now discovering MVC. This pattern has been around long before the internet and was adapted into MVC2 for web application mostly by pioneering Java developers. - - If Rails is what these PHP frameworks strive to be, then why not just use Rails? PHP frameworks will never be as good as Rails, not unless they change PHP itself. The language is just not dynamic enough to do what rails does with Ruby's reflection and meta programming. - - This post shows just how fragmented the PHP community is, and will continue to be. -- :date: 2007-10-18 15:23:11 +02:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 102 - :body: "RailsGuy: Thanks for your comment. A year ago I would have argued endlessly on how CakePHP is better than Rails and all that. Now I agree 100% with you and this very site is now powered by Rails and Typo! :-)" -- :date: 2007-12-17 13:56:57 +01:00 - :author: lexor@cyberspace.org - :url: "" - :id: 169 - :body: |- - The article seems to be truthful. Symfony could be different a year ago, but I can't agree that it's directory structure is confusing and disorganized. You can customize it, some folders are required to store data provided by functionality that is missing from other frameworks - think about it! - - >>Uses too many configuration files, not suitable for simple projects - I know the only simple project - "Hello, world!". You can't create infinitely simple and mega powerful framework - these are contradictory requirements. - Btw, do you know that a powerful admin interface can be generated based on a config file ONLY? - - >>Steep learning curve - It's worth it. -- :date: 2008-01-13 15:56:32 +01:00 - :author: Arrms - :url: "" - :id: 200 - :body: |- - Some php developers have been doing mvc style work since 2000. - - Including hacked reflection and dynamic type code. - - PHP 5 is a big step towards fixing a lot of the issues, and a lot of the comments made seem very un-informed about php. Yes php has a lot of bad programmers around because its so easy to hack up some webpages. - - I've used a lot of the frameworks around and they are all fine as long as long as you do what they want, when you want to do something they don't do is when you run into problems. - - Rails and Ruby look great but if scalability is a big issue then its just not viable. I'm sure that will be fixed in the future. It will be the same as php, there will be a huge amount of poor programming done in these initial days etc etc. - - And I'm not a big fan of any of the PHP frameworks out there at the moment, they could be done a lot better. The more decent frameworks are only seen in commercial products unfortunately. - - PHP has reflection now, and you can call methods and classes using variables... which seems to be what ruby claims as dynamicness that php doesn't have. Using wonderful reflection magic is going to involve a performance hit. So if that's a great claim on why to use language X, and your going to go crazy using it thats all well and good, but your performance and bugging are going to be a pain. - - - Activerecord magical database crazyness, is all great, but if you want to tweak performance quite often you have to do some of the work yourself anyway. And I really fail to see some of the real differences that people claim. - - But anyway, good review etc etc. -- :date: 2008-07-04 10:29:54 +02:00 - :author: karan - :url: "" - :id: 245 - :body: i have learn more from your site it is very useful to student who study php -date: 2006-05-03 14:57:00 +02:00 -tags: -- frameworks -- review -- cakephp -- rails -type: article -toc: true -intro: There are various articles online examining many PHP frameworks, providing short reviews or comparative charts, but I could not find yet an article examining the so called _"Rails-inspired frameworks"_ anywhere on the web, so I decided to write my own... ------ -There are various articles online examining many PHP frameworks, providing short reviews or comparative charts, but I could not find yet an article examining the so called _"Rails-inspired frameworks"_ anywhere on the web, so I decided to write my own... - -bq. *IMPORTANT UPDATE:* I do no longer recommend the CakePHP framework anymore due to the "unprofessionalism of some member of its development team":http://www.h3rald.com/blog/42. My site is now powered by Ruby on Rails and I totally lost interest in PHP and any PHP framework. If you are looking for a decent web framework, try "Ruby on Rails":http://www.rubyonrails.org (for Ruby), "Django":http://www.djangoproject.com/ (for Python) or "Catalyst":http://catalyst.perl.org/ (for Perl). -I'm talking about those PHP frameworks who give at least part of their success to Ruby on Rails[2], but don't call them _clones_ or _ports_ as some of their creators may get offended. - -!</img/pictures/rails.gif! - -Since Rails shocked the world with an easy-to-use, powerful and semi-sentient web development framework, web development is not the same anymore: everything must be done efficiently, quickly and you _have_ to produce a Web 2.0 compliant public beta after X days/weeks/months or your work is simply not useful to anybody. Try doing that with the traditional PHP spaghetti code: you can't, it's too much, it will be too tangled up and in the end you'll lose your mind trying to find that _small insignificant bug_ which makes your web application completely useless. - -Yes, you could use Rails, but maybe you don't know or don't want to learn Ruby, your host doesn't support it, your boss loves PHP etc. etc. If you're in this situation or you simply would like to know what's going on at the PHP front of the Rails Clone War, you should keep reading this article. - -I'd like to introduce - briefly - six Rails-inspired PHP frameworks and compare them with each other, to point out their features, their pros and cons. - -bq. _*Disclaimer:* I'm a CakePHP[3] fan, this site has been built with CakePHP and I even wrote something[4] about it in the past. This makes me inevitably partial and more familiar with this particular framework, but I'll try my very best to provide a relatively objective analysis. Obviously frameworks which are not based on the MVC architechture and that weren't inspired by Ruby on Rails have not been included, so forget things like PRADO, Qcodo, eZComponents, or even Mojavi: it's not that they are "bad", they've just been left out because they are not pertinent to this article_ - -h3. CakePHP - -!>/img/pictures/CakePHP_1.0.png! - -*Website:* "www.cakephp.org":http://www.cakephp.org/ -*PHP version:* PHP4 and PHP5 -*License:* MIT[5] -*Download size (.tar.gz):* 184KB -*Supported Databases:* MySQL, PostgreSQL, SQlite, MS SQL + any other supported by ADOdb or PEAR::DB database abstraction layers -*Beginner's Tutorial*: "Blog Tutorial":http://wiki.cakephp.org/tutorials:blog_tutorial_-_1 - -*Official Description:* -_"Cake is a rapid development framework for PHP which uses commonly known design patterns like ActiveRecord, Association Data Mapping, Front Controller and MVC. Our primary goal is to provide a structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss to flexibility."_ - -*PROs:* - -* Lightweight, not bloated, containing only essential code -* Runs both on PHP4 and PHP5 -* No configuration needed - except for a stupidly short database configuration file and a few constants which _can_ be modified. You can literally start baking in less than five minutes -* Extended table association support, allowing the creation of complex database architechtures -* Extremely logical and functional directory structure: better than Rails, if you ask me. -* Enhanced AJAX support through the AJAX and Javascript view helpers -* useful "bake" command line script to generate parts of the code automatically -* Very active community and plenty of _satellite sites_ -* Suitable for every kind of website, from the small personal site to the advanced e-business application. - -*CONs:* - -* No "official" internationalization support for now, but it will be included in the next milestone. -* It does not take fully advantage of PHP5 features -* Official documentation still needs some some improvement, although now it seems pretty complete and exhaustive. - -*Comments:* -CakePHP is my personal favorite: easy to learn, easy to use,multi-purpose and not bloated. Cake's philosophy is not to include unnecessary code in the framework unless it's absolutely necessary for the framework itself, as a result, 3rd-party libraries are not included in the official releases, but may be seamlessly integrated with the framework _if developers need them_. -Cake's success is partly determined - at least initially - by the fact that it can run fine with no limitations on PHP4, while other similar frameworks don't. Although this may still be one of its most obvious strengths, it must be said that Cake seems to go in the right direction, taking only the best from Rails, without forcing developers into complex and pointless adaptations, and evolving into a great framework created _in PHP, for PHP_. - - -h3. Symfony - -!>/img/pictures/symfony.gif! - -*Website:* "www.synfony.project.com":http://www.symfony-project.com/ -*PHP version:* PHP5 -*License:* Symfony[6] -*Download size (.tgz):* 1255KB -*Supported Databases:* MySQL, PostgreSQL, SQLite, Oracle, MS SQL + any other supported by Creole database abstraction layer -*Beginner's Tutorial*: "My first project":http://www.symfony-project.com/tutorial/my_first_project.html - -*Official Description:* -_"Based on the best practices of web development, thoroughly tried on several active websites, symfony aims to speed up the creation and maintenance of web applications, and to replace the repetitive coding tasks by power, control and pleasure. [...]_ -_Symfony is an object-oriented PHP5 framework based on the MVC model. Symfony allows for the separation of business rules, server logic and presentation views of a web application. It also contains numerous tools and classes aimed at shortening the development time of a complex web application."_ - -*PROs:* - -* Fully featured framework, includes everything you might ever need (see CONs, below) -* Full native internationalization support -* Truly excellent documentation, tutorials, wiki, book, screencasts, API, real-world examples, etc. etc. -* Code generators -* Various "pre-built" modules/libraries for the most common tasks -* It was not inspired only by Rails, but borrows concepts and practices from various other frameworks -* Good community support - -*CONs:* - -* Seems too big compared to the others, too many "extras" which may not be useful to _all_ developers -* PHP5 only -* Confusing and disorganized directory structure -* Uses too many configuration files, not suitable for _simple_ projects -* Steep learning curve - -*Comments:* -Symfony is really an interesting framework: it's perhaps the most _complete_ in terms for features and documentation. The only problem I have with it is that it just seems too complex and rather difficult to learn if compared to the others, which can do _almost_ the same things (or will soon be able to) in a _MUCH_ simpler way. A nice blend of MVC, pre-built components, command line generators and YAML/Propel configuration files, but perhaps a bit _disorganized_ in its internal structure, unlike its wonderful documentation and support section. - -h3. PHP on Trax - -!>/img/pictures/phpontrax.jpg! - -*Website:* "www.phpontrax.com":http://www.phpontrax.com/ -*PHP version:* PHP5 -*License:* MIT -*Download size (.tgz):* 843KB -*Supported Databases:* Any database supported by PEAR::DB -*Beginner's Tutorial*: "How to create a Trax application":http://svn.phpontrax.com/wiki/HowToCreateATraxApplication - -*Official Description:* -_"Php On Trax (formerly Php On Rails) is a web-application and persistance framework that is based on Ruby on Rails and includes everything needed to create database-backed web-applications according to the Model-View-Control pattern of separation."_ - -*PROs:* - -* Simple, logical, essential: a true RoR port to PHP5 -* Code generators, like Rails -* Zero configuration (like Rails and Cake -* Easy and logical directory structure (the same as Rails) -* Supports table associations, but more in a way which is more similar to Ruby on Rails than Cake. - -*CONs:* - -* Lack of documentation compared to the others -* Trying to port Ruby on Rails to PHP, ignoring why RoR was not built in PHP in the first place[7] -* No internationalization or other advanced functionalities -* PHP5 only -* Small community -* DBO class based only on PEAR::DB - -*Comments:* -In my opinion this project aims too much to be a Rails-clone to acquire a proper consensus. Trying to port something to another language is not good, especially in the case of Rails and Ruby. This framework looks somehow like an old version of CakePHP, which evolved slightly but always remained anchored to its beliefs of building a Rails port for PHP (even in the name!). Some may say that this is a lost battle since the beginning - or better, since before it started - but others found that PHP on Trax can be the easiest way to switch from Ruby on Rails to a PHP equivalent. Who is going to do that? Well, Ruby programmers _forced_ to develop in PHP, maybe. Not too good, but not too bad either. - - -h3. Code Igniter - -!>/img/pictures/codeigniter.jpg! - -*Website:* "www.codeigniter.org":http://www.codeigniter.com/ -*PHP version:* PHP4 and PHP5 -*License:* CodeIgniter[8] -*Download size (.zip):* 609KB -*Supported Databases:* MySQL, PostgreSQL, SQLite, MySQLi, MS SQL + ODBC -*Beginner's Tutorial*: "Hello World! Introduction to Code Igniter":http://www.codeigniter.com/videos/ci_intro.mov [video] - -*Official Description:* -_"Code Igniter is an Open Source Web Application Framework that makes writing kick-ass PHP programs simple as apple pie. [...] Designed to enable, not overwhelm, Code Igniter is a powerful PHP framework with a very small footprint, built for PHP coders who need a simple and elegant toolkit to create full-featured web applications._ -_If you're a developer who lives in the real world of shared hosting accounts and clients with deadlines, and if you're tired of ponderously large and thoroughly undocumented frameworks that require rocket science to understand, Code Igniter might just be the right tool for you."_ - -*PROs:* - -* Good and organized documentation -* Zero configuration (like Rails and Cake) -* Includes various classes and libraries for common tasks -* Compatible with PHP4 and PHP5 -* Medium-sized community -* Intuitive directory structure -* Ships with the full user guide included in separate HTML files - -*CONs:* - -* No full ("written") tutorials except the videos! -* Relatively new to the scene, but growing -* Does not seem to support table associations. - - -*Comments:* -People on the Net seem to be rather enthusiastic about this framework: where there's a thread about the _big ones_ (Cake and Symfony), there's always, someone who pops in suggesting to try out Code Igniter. I personally think this can be a true bless for small/medium sized projects, however, I'd opt for CakePHP or Symfony for a large scale application: something is missing, e.g., most notably, table associations. - - -h3. Biscuit - -!>/img/pictures/biscuit.gif! - -*Website:* "biscuitproject.tigris.org":http://biscuitproject.tigris.org/ -*PHP version:* PHP4 and PHP5 -*License:* MIT[5] -*Download size (.zip):* 240KB -*Supported Databases:* Any database supported by PEAR::DB -*Beginner's Tutorial*: "Creating a simple application using the Biscuit MVC framework":http://bennolan.com/biscuit/tutorial.html - -*Official Description:* -_"The mission of this project is to port Ruby on Rails to PHP5 (minus the Ruby part ;-)"_ - -*PROs:* - -* Zero configuration, easy to deploy -* Runs both on PHP4 and PHP5 -* Simple to learn - -*CONs:* - -* Still under development and incomplete -* Offers a limited subset of the features and functionalities offered by competitors: no internationalization, no table associations, no scaffolding... -* _"Documentation coming soon"_ -* Almost non-existent community - - -*Comments:* -This project started as an attempt to create something simpler than CakePHP and more similar to Rails. I'm not sure whether the project is still active or not, since the last "release" on the former's developer site is dated August 2005. Still in early stage - or dead. - -h3. Pipeline - -!>/img/pictures/livepipe.jpg! - -*Website:* "livepipe.net/pipeline/":http://livepipe.net/pipeline/ -*PHP version:* PHP5 -*License:* Pipeline[9] -*Download size (.zip):* 288KB -*Supported Databases:* SQLite -*Beginner's Tutorial*: none - -*PROs:* - -* Simple directory structure -* Suitable for small projects -* Comes with various ready-made components -* Supports table relationships - -*CONs:* - -* PHP5-only -* Too restrictive: only SQLite supported, _kindly suggests_ developers to use its built-in features only -* No documentation or tutorials, just the API -* Not suitable for large projects -* Almost non-existent community - -*Comments:* -This project mainly borrowed the MVC architecture and some basic concepts from Rails, creating a simple PHP5 framework with personal/small websites in mind: it offers various built-in components which can be handy to most of us, supports _only_ SQLite, and basically tells developers what to do. In my opinion it's not flexible enough to be compared to the others, and it's simply not suitable for anything other than small websites. - -h3. Conclusions - -My favorite framework still remains CakePHP, it's simple and yet powerful, easy to learn and use, mature, well supported and continuously improving. Symfony - at the moment - seems to be the one with most features and the best documentation, and it is an excellent and well supported project. The only problem I have with it is the scary amount of configuration files necessary to create an application: CakePHP doesn't need any and can be used for (almost?) equally complex projects. -Although I didn't have a chance to try them out, PHP on Trax is certainly the most faithful port of Ruby on Rails to PHP, but it lacks some of the features CakePHP and Symfony offer. Code Igniter may not be as advanced as the others, but its community seems to grow and its simplicity may appeal more users in the future... - -At any rate, developers should _always_ choose the best framework for their needs: I tried to write a quick comparative analysis of these six Rails' "PHP children", now it's _your_ turn, try out some of them, if you choose wisely you won't be disappointed. - -h3. Notes - -fn1. They are all distributed according to various Open Source licenses. - -fn2. "Ruby on Rails":http://www.rubyonrails.org - Ruby framework for web development - -fn3. "CakePHP":http://www.cakephp.org - Rapid [PHP] Development Framework - -fn4. "CakePHP - A 'tasty' solution for PHP programming":/articles/view/cakephp, originally published on "zZine Magazine":http://www.zzine.org/articles/cakephp - -fn5. Open Source "MIT License":http://www.opensource.org/licenses/mit-license.php. - -fn6. Symfony License: -<small> -<blockquote> -Copyright (c) 2004-2006 Fabien Potencier -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -</blockquote> -</small> - -fn7. Read the comments by David Heinemeier Hansson on "Ruby on Rails to Basecamp":http://www.37signals.com/svn/archives/000606.php - -fn8. CodeIgniter "License Agreement":http://www.codeigniter.com/user_guide/license.html - -fn9. Pipeline is licensed under the same terms as the Symfony framework [Copyright (c) 2006 Picora Pipeworks LLC].
@@ -1,282 +0,0 @@
------ -permalink: rails-os-killer-apps -filters_pre: -- redcloth -title: Rails-powered Open Source Killer Apps, Anyone? -comments: -- :date: - :author: Matthew Williams - :url: "" - :id: 371 - :body: |- - All the sites you mentioned are "proprietary" because they monetize. A company that releases a product is in the game to make money. GitHub is doing so, Basecamp is very much doing so, Twitter has a ton of funding and will soon be making money one way or another, so why give that up? The fact that you're expecting sites built with Rails to just expose their source to the world is asking for a little too much. - - Scour http://www.rubyforge.org and find some Open Source projects. There are some really great Open Source projects out there (take a look at http://www.redmine.org/), you just need to look. - - The list of your CMS's is I think as extensive as it's going to get for the Rails world. Drupal is a very mature project. I'm sure if you looked at Drupal a few years ago, it was in similar shape as Radiant or Typo. Give it time. - - But again, because the framework is Open Source, it's asking way too much for any products written with the framework to be Open Source. -- :date: - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 373 - :body: "Thank you Matthew. You're right, RedMine is indeed an interesting open source project, but what I'm trying to say is that Rails developers seems more focused on building something which can \"monetize\" quickly rather than investing time and energy in complex open source projects.\n\n\ - I don't blame them, really! If I were a full-time web developer I'd probably do something similar!\n\n\ - What I wanted to point out in a rather exaggerated and provocative way is that even if Ruby and Rails are MUCH better organized than PHP and any PHP framework, there are still _a lot_ of complex open source projects (not only Drupal, but take Joomla, Mediawiki, e107, etc.), in particular CMSes, which offer a lot of features.\n\ - The current open source Rails projects are great, and some of them are quite successful (this very blog runs Typo, and I think it's an awesome blogging engine!), I just wish there were more.\n\n\ - Maybe is just a matter of time... what's shocking is that the few \"general purpose\" CMS either are not doing very well or are just focusing on niches, like blogging. " -- :date: - :author: Luigi Montanez - :url: http://salesforceonrails.com - :id: 376 - :body: |- - There are quite a few reasons there's no widely adopted open-source Rails CMS: - - 1. Rails deployment isn't as easy as PHP deployment (though Passenger has done much to change that). - - 2. You get into Rails because you want to build highly customized (and good) web apps, not implement a standard CMS. PHP CMS frameworks are Good Enough, and they serve the niche of people who want a semi-customize website but don't want to code it. - - 3. Ruby, Rails, and Merb are geared toward developers, while PHP is geared towards people who want to make websites. That's not a knock on PHP, but it is a significant difference. - - 4. CMSes are so early 2000's. These last few years, social networks have been all the rage (soon to be replaced by mobile apps). I'd point out that there ARE a bunch of out-of-the-box open-source social networking projects for Rails. - - - http://portal.insoshi.com/ - - - http://www.communityengine.org/ - - - http://lovdbyless.com/ -- :date: - :author: lowell - :url: "" - :id: 383 - :body: |- - A few things. - - First, about your 'About' page. Here in the United States, our IT admins tend to be extremely conservative when it comes to upgrading (regardless of benefit); this is the biggest reason that IE6 is still being used. Reading your 'About' page caused me to fire up VMWare Fusion and load this in IE6 - I wasn't ready to believe that you would go so far as to actively 'exclude' those without choice. I placed in exclude in quotes because you claim incompatibility with older browsers, but it isn't like your blog is on the cutting edge of CSS - I mean, you do claim it to be minimalist, don't you? In fact, it's humorous to me that the only 'incompatibility' I as able to find is an image transparency issue. Okay, fine, we get it - you develop web apps and you're cool and know better than many. There's no need to go out of your way to be an a*s about it. - - As for the Rails app rant, well.. The final product isn't what we share because all the fun is in building it. We aren't PHP script junkies that cut and paste random code, you know that. What we do share is arguably much more important => plugins and gems. - - BTW, points for using a Rails app for your blog. :) I can't count how many similar Rails rants I've read on WordPress lol.. -- :date: - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 385 - :body: "Thanks Luigi for bringing up excellent comments and lowell for... well, bringing up good comments too.\r\n\ - \r\n\ - *@Luigi*: Indeed, I didn't know those three, and they look interesting.\r\n\ - \r\n\ - *@lowell*: I'll probably change the /about page, alright. Here in Italy, and especially in companies, IE6 is sadly still the way to go so... yes, I know what you mean. I did want to actively lock people out actually, but then I thought a banner would suffice to get the point across: after all, as you pointed out, my site does not break completely in IE6.\r\n\ - As for using Typo... well, I wouldn't have dared to say something even slightly unpleasant about Rails from a WordPress blog! " -- :date: - :author: Priit Tamboom - :url: http://priit.mx.ee - :id: 389 - :body: |- - Have you played with Adva-CMS? http://adva-cms.org (it's under very active development at the moment, so be warned). It's a kind of next evolution compared to Radiant. It's agnostic to what you build. So you can add blog, wiki, forum and your main apps directory is empty for your custom app. - - I wrote about adva at my blog: http://priit.mx.ee/posts/4 - - Cheers, - Priit <br/> - ps. i'm new adva dev, so I might not be very objective :-) -- :date: - :author: Aaron Farr - :url: http://www.cubiclemuses.com - :id: 415 - :body: |- - I see Radiant as a great compromise between writing up your own customized CMS and a full fledged system like Drupal. I'm currently using it for my own website (http://cubiclemuses.com) as well as the ApacheCon websites (http://us.apachecon.com), so it's really flexible. - - Radiant is _not_ good for member sites with lots of users, but for a basic CMS, it's pretty nice. -- :date: - :author: job grades - :url: http://jobgrades.com - :id: 416 - :body: Hey, take a look at Merb and merb-slices. I think the slices feature has the ability to offer a better foundation for "open source killer apps" than Ruby on Rails. slices are like "mini-apps". In merb, it's designed in a way that can be turned on/off/altered really easily. There's a video on the merbcamp.com website that explains the concept very well. -- :date: - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 417 - :body: |- - @job grades - Yes! Merb slices seem to be really interesting. All you need now is ...more slices and an ad-hoc site to easily distribute them. Add something to automatize download/update/installation and you have a very good foundation indeed. -- :date: - :author: Dave Sailer - :url: http://ultralighter.blogspot.com - :id: 419 - :body: "I found you via a note at RubyFlow (http://www.rubyflow.com/). Thank you. This post is exactly the sort of thing that I'm interested in at the moment.\r\n\ - \r\n\ - Another good source of general Ruby/Rails information that I've newly discovered is \"A Fresh Cup: Notes from a Recovered Microsoft addict\" (http://afreshcup.com/).\r\n\ - \r\n\ - A recent post there referred in turn to a Rails testing post at Caboose: \"We've stopped using rSpec...\" (http://blog.caboo.se/articles/2008/11/4/we-ve-stopped-using-rspec)\r\n\ - \r\n\ - This turned out to be somewhat relevant to the CMS issue in that in following up on Rails testing options I found Thoughtbot, Inc., which in turn has a product/service called \"Widgetfinger\" (http://www.widgetfinger.com/).\r\n\ - \r\n\ - Widgetfinger is deliberately limited but might be interesting to some: \"The widgetfinger service is 'Simple content management made for the modern web designer'. The tool was built to solve problems that we saw in our client work, and is meant to manage very basic 'brochure style' websites.\" " -- :date: - :author: Pratik - :url: http://m.onkey.org - :id: 420 - :body: |- - Component/slice based approach is nothing new. Rails engines has allowed people to do that for years now. - - @Fabio : Maybe you want to check out http://www.opensourcerails.com/ -- :date: - :author: Tim Kadom - :url: http://blog.skiptree.com - :id: 432 - :body: |+ - Comatose is a CMS which can be dropped into an existing Rails app as well. check it out. - - http://wiki.rubyonrails.org/rails/pages/Comatose - -- :date: - :author: rick - :url: "" - :id: 463 - :body: "Pratik: there's also the desert plugin by the pivotal guys. They used it to build their own in-house platform. There's also tog, a mish mash of popular plugins providing social network features." -- :date: - :author: gaspard - :url: http://zenadmin.org - :id: 752 - :body: "Just a passing note on zena (http://zenadmin.org). I am biased since I wrote the damn thing, but I must react to your quick description: \"Alpha, looks promising although it doesn\xE2\x80\x99t offer many features\".\n\n\ - I think this CMS has many more features then most top notch CMS out there. Give me a competitor for:\n\n\ - 1. *really* powerful templating language, editable through the browser with support for ajax.\n\n\ - 2. multi-lingual, versioned content.\n\n\ - 3. custom classes for you content, defined through the browser (no code to write).\n\n\ - 4. powerful image manipulation (automatic resizing/limiting for multiple contexts).\n\n\ - 5. groups based access rights to any item in the CMS.\n\n\ - 6. publication workflow (redaction -> proposition -> publication).\n\n\ - 7. multi-host (one app, many websites).\n\n\ - 8. context based caching (cache expires when needed, not because a clock says so).\n\n\ - 9. comments (with captcha for anonymous visitors).\n\n\ - 10. import an xhtml template with images ===> you have your initial template.\n\n\ - 11. etc" -- :date: - :author: gaspard - :url: http://zenadmin.org - :id: 756 - :body: |- - And just a note about your idea of a powerful base, with conventions. If you need to extend zena, it si very easy to write your own models (they should inherit from the base class "Node") with their own validations, versions, special database content, etc. - - Let me know if you would like more details on specific features / needs. - - By the way... I'd *love* having someone writing tutorials and introductory materials :-). -- :date: - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 759 - :body: |- - @gaspard - - Sorry for sounding a bit harsh with my first description: I actually need to take a (much) closer look at Zena. Let me say that it looks very interesting (I definitely missed some of the features you mentioned!) and I can't write to try it out properly (I'm just waiting for a week-end and a bit of spare time). - - Here's a deal: I'll try it out and write about it, let's see what happens :-) - - Incidentally, "Zena" is actually the name in dialect of my city (Genoa, Italy)... how did you pick the name? -- :date: - :author: gaspard - :url: http://zenadmin.org - :id: 779 - :body: |- - "zena" is short for "zen admin" (relaxing, peaceful content management). - - I did not know about the dialect name of Genoa. Nice. A CMS that is somehow related to an important seaport is a step towards openness. - - Let me know if you have any questions or need any help. -- :date: - :author: Torsten Becker - :url: "" - :id: 2683 - :body: adva-cms is undergoing a lot of development lately with many new features. Please let us know, how your success was with testing adva-cms. Do not hesitate to contact us for any question. -- :date: - :author: Sam Rose - :url: http://wagn.org - :id: 2721 - :body: Don't forget about wagn! -date: 2008-11-02 10:41:00 +01:00 -tags: -- rails -- ruby -- writing -- rant -type: article -toc: true ------ -Lately I've been meandering around the web to find a good CMS for a family site I'd like to set up. -Why a CMS? Well, for a few simple reasons: - -# I don't have enough free time to fiddle with Rails and make my own (I'm an _Hobbyist Programmer(TM)_: I code for fun and enlightment, not for money) -# Even if I had the time, I'm _sure_ there are plenty of CMSes out there which suits my needs. - -It turns out that reason #2 is not really applicable in this case, especially if we restrict the field to Ruby + Rails/Merb/<insert cool DRY framework here>.h3. Rails-powered CMSes - -_Name a Rails-powered CMS, quick!_ - -Easy: "Radiant":http://radiantcms.org/. - -Hmm, no. As much as I do like Radiant, it really cannot be considered a general-purpose CMS, can it? When it comes to build nearly-static sites in a clean and neat way I'd pick it any day, but it lacks quite a lot of community features like comments, ability to create forums, etc. etc. It does, however, support multilingual content in a rudimentary, yet effective way: create each translated page manually and use consistent URL conventions (/en/about, /it/about, etc.). - -I'm not saying that there aren't enough CMSes built on Rails, just that there's no "killer app" in the pack. A "killer" CMS would be something as powerful as Drupal, but easier to use and more modular. - -Here's an incomplete list of the Rails CMSes I'm currently aware of: - -|_. Name |_. First Impressions/Comments | -| "Radiant":http://radiantcms.org/ | Mature, suitable for administering static sites | -| "Typo":http://www.typosphere.org/ | Mature, one of the best blogging engines out there (my opinion is slightly biased though) | -| "Mephisto":http://mephistoblog.com/ | Mature, blogging engine | -| "Rubricks":http://rubricks.org/index_en.html | Under development, basic features if compared to other non-Rails solutions | -| "Slate":http://slateinfo.blogs.wvu.edu/ | Missing a lot of features if compared to competitors | -| "Beast":http://beast.caboo.se | Forum engine, extremely ligtweight | -| "RailFrog":http://www.railfrog.com/ | Not sure if it's still being updated, not so many features | -| "Zena":http://zenadmin.org/en | Alpha, looks promising although it doesn't offer many features | -| "simplelog":http://simplelog.net/ | Yet another blogging engine. Simple and easy to use | -| "oooopen rcms":http://rcms.oopen.de/ | Early development stage (dead?), minimal feature set | -| "Geego":http://www.geegocms.com/ | Multilingual, not so many out-of-the-box features | - -_[Psst, if you know any other Rails CMS I missed out, mention it in a comment and I'll update this table!]_ - -h3. Developing Proprietary Web Applications with Rails - -What's wrong with all of these? Normally one of three things: either they are mature, production-ready but focused on only one particular function (blog, forum, etc.), or they are still too new to be used seriously or they are slowly heading towards oblivion. - -What's going on here? Rails is a damn fine framework which offers all the modularity and power you need to build sites! Why isn't there a fully fledged CMS to rival Drupal? -I think that part of the problem is that Rails is _too_ good. *Why build a CMS from scratch when you can develop a web site from scratch much more easily, tailored to your customer?* - - -Rails has been used to build a few "mainstream" sites like Twitter (no bashing please!), Basecamp, GitHub and many more. What do these sites have in common? _They are not open source_. You cannot deploy your own Twitter on your server (You can with "Laconica":http://laconi.ca/trac/, though), you cannot deploy your own Basecamp to your server (you can with "ProjectPier":http://www.projectpier.org/, an open source fork of "ActiveCollab":http://www.activecollab.com/). - -It feels like that even though Rails itself is open source, *there aren't that many open source Rails-powered projects after all*. Maybe there are, but they do not really compare with similar alternatives offered in other languages. This is the reason why, despite its utter ugliness, PHP is still the _Open Source King of the Web_, and that's very, very sad in my opinion. - -h3. Dreams on Rails - -The annoying thing is that Rails _is suitable_ to build CMSes, and good ones, too! Take Radiant and Typo, for example: they both excel in their own ways, _in their own worlds_. -Theorethically speaking, *there's no reason why someone couldn't develop a modular system to glue different components together*: you'd need common user administration and common workflow, a few hooks, and a solid set of conventions on how to build third-party components. -Hell guys, the folks at Drupal developed a huge (and successful) product with a million different ways to extend it _in PHP_. Even without using OOP! Every damn hook in the core is a _function_. - -What does it take to do something like this using Rails, o Merb, or whatever else you like? You already have a very solid and consistent framework to build on (Rails), a way to automate tasks (Rake) and a language which lets you do everything you want, in a very elegant and organized way. - -*Rails lacks successful open source projects, in particular CMSes*. I wish someone could fix this: not by coding the _n^th^_ CMS with the only two or three features you need, but by developing an _high level application framework_ to build complex, dynamic and interactive web sites. Don't even develop the whole damn thing: just come up with a set of conventions on how to extend a very basic core, and tell people how they can contribute, or even integrate existing applications into it. - -The community will do the rest, hopefully... Or maybe are you too busy trying to roll out your newest, closed source startup? - -*If someone decides to develop such a powerful, high-level framework and is determined to keep it user-friendly and open source, I hereby promise to write the documentation for it*, articles, and books. And I'm not kidding. - -h3. [UPDATED] A Glimpse of Hope - -A few of the commenters of this article brought up a few interesting points and actually gave me a little bit of hope. "Luigi Montanez":http://salesforceonrails.com/ pointed out that Rails was built to help developers build web sites. For now, Rails deployment isn't as seamless as end users would like it, so there's no point creating a killer app for such users if they can't even get it to run on their $2/month shared hosting environment. -Nevertheless, there seems to be at least _three_ different open source "social network engines" powered by Rails: - -* "Insoshi":http://portal.insoshi.com/ -* "Community Engine":http://www.communityengine.org/ -* "Lovd By Less":http://lovdbyless.com/ - -These are not CMSes _in the early 2000's sense_, obviously, but they do provide the basis to effectively build a late Web 2.0-ish community web site. Each one of these project seems stable and mature enough to be used in production, but surely not as well-known as many other PHP-based solutions. - -On the other hand, "Priit Tamboom":http://priit.mx.ee/ mentioned "adva cms":http://adva-cms.org/, a project still in alpha stage which aims to be more traditional and site-agnostic: - -<blockquote> -"[...] Different from other Rails applications the all-engines approach of adva cms allows you to build your own applications on top of it. It also makes it very flexible and extensible: our plan is to make it possible to only pick those engines/features that you really need for your application and omit the rest. As they are still all designed to work together seemlessly and reuse each others functionality the whole plattform feels much more consistent to a collection of similar but separate Rails applications. [...]" -</blockquote> - -This sounds _exactly_ like what I was hoping would come out from the Rails community: something in between a web development framework and an high-level CMS. -I'm definitely going to try it out (it's an ideal weekend project) and I'll report back once I know more about it.
@@ -1,23 +0,0 @@
------ -permalink: rails-to-italy -filters_pre: -- redcloth -title: Rails to Italy 2007 -comments: [] - -date: 2007-07-07 13:15:00 +02:00 -tags: -- rails -- italy -type: article -toc: true ------ -So it looks like there will be a "Rails conference in Italy", after all. In Pisa as well, and that's maybe even less than 2 hours drive from where I live (Genoa)! - -_Sounds cool!_ - -Well, the entrance fee put me off a bit, I daresay (€89 if you book before August 1st, more otherwise), but it would be great to go there. -They are actually looking for speakers too, pity that at the moment I don't have anything prepared, but who knows... There's free entrance (and beer) for speakers, apparently, which it wouldn't be bad, but unfortunately my girlfriend would have to pay though, of course. - -We'll see what happens, for now I'm just going to promote the thing on my site (see the banner on the side). -
@@ -1,138 +0,0 @@
------ -:type: article -:popular: true -:date: 2010-11-14 13:35:29.046412 +01:00 -:title: A pizza with Randal Schwartz -:subtitle: Talking about open source, programming, emacs and technical writing -:intro: | - I am an avid "FLOSS Weekly":http://twit.tv/FLOSS listener. Sometimes I may fall behind by a few episodes, but I normally manage to catch up: Randal Schwartz' show is by far my favorite podcast. - - You can imagine my reaction when I discovered that Randal was in Genoa, my city, ready to leave for yet another "InsightCruise":http://www.insightcruises.com/: I had to meet the guy, at all costs! - - It turned out to be easier than I thought: I simply "asked him":http://twitter.com/#!/h3rald/status/28962418438 if he fancied a pizza out on the way back from his cruise, and he said yes. -:extended_intro: | - I also decided to invite "Claudio Perrone":http://www.agilesensei.com/ as well, seeing that he's back in Genoa on one of his Agile/Lean gigs. He said he didn't know much about Perl, but he'd have liked to come as well. So there I was lining up a dinner out with two IT gurus at the same time. - - Randal was staying at the "Bristol Palace Hotel":http://www.hotelbristolpalace.it/, and we met him at the lobby bar. In the end I persuaded my wife to come along as well, although she doesn't know much about Perl either. - We shook hands with Capt. Neil [Bauman, of InsightCruises.com] and a few others of the cruise gang, then we were off to the restaurant. - - It only took five minutes to realize that Randal was exactly like he sounds on his show: cheerful and chatty, eager to talk about technology and science. When you meet famous people face-to-face, there's always a chance that they are not nice at all, but luckily this wasn't the case: within minutes Randal was telling us all about "MotionX-GPS":http://news.motionx.com/category/motionx-gps/ (a very neat iPhone app that I highly recommend) like we had been buddies for ages. -:toc: true -:tags: -- opensource -- programming -- italy -:permalink: randal-schwartz -:image: /img/pictures/rls/rls3_mini.png -:pdf: true ------ -?[output?[html|html5]| - def:[q|<q>"{{0}}"</q>] -] -def:[blockquote|<blockquote>"{{0}}"</blockquote>] - -$[document.intro] - -After a rather bumpy bus ride (Italian evening drivers are well known for this), we got to =>[http://www.ristorantepiedigrotta.it|Piedigrotta], ordered some pizzas, and started talking. Little did we know that Randal loves talking and sharing stories about almost anything: we were chatting non stop for hours, and after dinner my wife and I invited everyone up to our place, to continue talking happily in front of a glass of our wine and... freshly-microwaved popcorn. - -Here's what we talked about, organized by topic for your convenience. I didn't record the conversation even if it would have made a hell of a show, but I'll do my best to quote him as faithfully as I can remember or paraphrase him without changing the meaning of his words. - -important[Randal, if you're reading this and you come across any misquotation, please let me know so I can amend them!] - - -textile_section[ - @title[Something more about Randal] -=>[http://www.stonehenge.com/merlyn/|Randal Schwartz] is a world-famous Perl guru, author of the =>[http://www.oreillynet.com/pub/au/335|best Perl programming] on the market, and a very prolific =>[http://www.stonehenge.com/merlyn/columns.html|column writer]. - -Randal is not a full-time writer though (\/q[writing books doesn't pay]). His day job consists in being a "guru on-demand": you can hire him to fix your code, refractor complex enterprise applications, or simply provide useful advice to IT managers. -Being the host of FLOSS Weekly is not a job, and Randal doesn't do it for the money of course, but for passion: q[I'm trying my best to do one show per week, even when I am away], he said, and he does go off traveling around the world a lot! - -q[Once I was at home for 8 weeks and it felt really strange. I kept thinking I had to pack to go somewhere else]. He's been on nearly every Geek/Insight Cruises (51, if I remember correctly) and his =>[http://www.stonehenge.com/merlyn/dot-plan.txt|travel plan] is always very busy. - -I was extremely lucky to catch him on the way back from one of the few cruises in the Mediterranean! It must be a sign of some sort. -] - -textile_section[ - @title[Open Source] -I have always tried to raise awareness about Open Source and Free Software among my friends, co-workers, and even managers. Sometimes it's easy to make people realize that Free, Libre, Open Source Software matters, other times is much harder. - -When Randal got half way through his pizza, I asked him if he had any tips on open source advocacy and on overcoming corporate resistance. I explained that the main concerns I get when I talk about open source in an enterprise environment are: -* the cost or support/training -* the immaturity of the product and fear of it being abandoned at some point -* overall, a high Total Cost of Ownership - -Randal was almost laughing at one point: q[why are people concerned about paying for support for open source software? Don't they pay it already for proprietary applications?], also q[the chances for open source software being discontinued are the same, if not lower, than proprietary software. Plus, proprietary software often forces compulsory upgrades, and similar things that can eventually damage your business]. Additionally, if I may add, in the unfortunate case that an open source project is abandoned or turns nasty, it is often forked, so at worst you always have the source code anyway. - -Randal also pointed out that what really matters about an open source project is the community built around it. He mentioned that the =>[http://www.mongodb.org/|MongoDb] guys that came on =>[http://twit.tv/floss105|FLOSS Weekly #105] were really enthusiastic of having embraced open source. Unfortunately, some projects just don't seem to get the whole idea behind open source at all: _community_ vs. _enterprise_ editions always makes me suspicious, and Randal agreed to an extent. - -*In a nutshell, Open Source is not about the company or the license, it's about the people and the community behind a project.* - -q[You should \[re-\]listen to one of my very first podcasts, the one with =>[http://www.webmink.net/|Simon Phipps], the former Chief Open Source Officer at Sun], Randal told me in the end, and he's right: =>[http://twit.tv/floss39|FLOSS #39] is a must for anyone truly interested in the subject. - -Seeing that Randal seemed to be perfectly happy to play with his iPhone, I went for the obvious question and asked him what he thought about Apple, and at the same time Claudio asked him what was his operating system of choice. - -q[OS X], admitted Randal, q[I use what gets the job done]. In all things, there's no point in being an extremist for the sake of argument, and being an open source advocate does not mean that you have to condemn every piece of proprietary software (at this point, Richard Stallman would have thrown up his pizza, had he been there --but he wasn't). - -q[From a GUI point of view, Apple is still ahead of the competition: if others want to win, they have to come up with something better, and different. \[...\]Ubuntu is getting there, but not quite yet.] - -Randal also pointed out the importance of contributing to open source projects: q[you don't have to code, you can just provide feedback, submit bug reports, write documentation, or test... I am the one who checks if git builds on a Mac, for example]. -] - -textile_section[ - @title[Programming] -Programming was another major topic of our discussion. Randal, after all, is a living Perl legend having written 6 Perl books and over 250 magazine columns. Unfortunately I don't know much about Perl, and neither does Claudio. I am quite open-minded about languages--although I am slightly favorable towards Ruby--so I enjoyed every little bit of the discussion anyway. - -Most of the discussion was about Perl 6, which was recently featured on =>[http://twit.tv/floss140|FLOSS Weekly #140]. After listening to what Randal had to say about it, I am definitely going to try it out at some point (hopefully skipping Perl 5 altogether). -q[We \[Perl programmers\] say that Ruby is an alpha version of Perl 6] said Randal, joking about the similarities between the two languages and the amount of time it took to come up with a working Perl 6 (which to date is still unfinished). He reckons Perl 6 will be used in production for small and medium projects within a few months, and he's going to write a book about it. - -He then briefly described what makes Perl 6 so special. The top feature we were talking about was grammars: the language offers the possibility to create grammars to parse other languages and even Perl 6 itself. Moreover, the Rakudo implementation running on the Parrot VM aims to implement the full Perl 6 specification in Perl 6 itself q[\[...\] therefore, at run time, a program is able to access the its syntax tree itself...], he said, while playing with an imaginary Perl 6 parse tree in the air. - -We then moved on to Smalltalk, and both Claudio and I asked him a few questions about it, in particular about the whole concept of _image_, particularly in reference to the Squeak implementation. We observed how many programmers of other languages (Ruby included) end up going back to the origins (Smalltalk) and how Smalltalk is far from dead. q[It's only a matter of getting used to it], said Randal when I asked him how to work with a Smalltalk image and how to distribute it, q[you program as you would in any other language, you can communicate with the rest of the world just fine. What you get in Smalltalk that you don't get in most other languages, is the ability to inspect and work with the underlying source code of the objects at run time, thanks to the amazing reflection features the language offers]. - -At one point I had to asked Randal what he though about Haskell, having tried to learn it three times without succeeding: q[I have tried _ten_ times to learn it myself, with no luck], he said. At least I'm not alone! - -The discussion then shifted towards tools, and then of course text editors. I just had to remind him that I am a Vim guy. Randal looked at me smiling, and said: q[That's fine. You WILL join us. Sooner or later you will join us... join us...]. - -Randal's involvement in Emacs dates way back to the end of the 80s, and he has been using it ever since. He even contributed to it, back then, by writing pp.el, the pretty printer module. -q[I posted my code to the emacs mailing list, and Richard Stallman himself replied asking if he could include my code in Emacs. If you read Emacs acknowledgements, I'm there as well], said Randal, proudly. - -I confess I almost felt the urge to give Emacs another try. I often get hyped up about things like this. If I had received such a reply from Richard Stallman, I would have probably sworn not to touch the Editor of the Beast ever again. - -q[Just try out Org mode. I didn't know it very well myself until I had a show about it, but now realize why people should always load up an Emacs instance just to run Org mode.], said Randal again, talking about yet another =>[http://twit.tv/floss136|recent show]. -] - -textile_section[ - @title[Technical Writing] -After our pizza, we all went back to my place, which is literally around the corner for the restaurant. It was only when we were happily starting the second glass of my family's very own home-made wine that Randal looks at me and says: q[You know that I started off as a Technical Writer myself, don't you?] - -I was baffled. I did brush up on Randal's life on his web site, Wikipedia and similar, like any good fan meeting his hero, but I never came across this tiny detail. This triggered yet another round of questions on my part, as I have been working full time as a technical writer for years now. Randal shared a couple of anecdotes about his early technical writing career. - -q[When I joined, I had a boss called Lyle. He used to say that the manual itself is _the_ product. If it's not in the manual, it simply doesn't exist for the customer.] A statement that can come handy as as a reminder for Product Managers, Project Leaders and similar when they try to belittle documentation, and for writers themselves, when they feel that they can be sloppy because no one cares. - -I really enjoyed when Randal told us about his first encounter with his editor, Jack: - -blockquote[ -He was a big guy. 6 ft tall, with huge hands. He used to hold his pencil like this... \[shows a fist grabbing a pencil\] ...he starts reading my first draft and crosses a word, then a paragraph, and another, and so on. Then he looks at me and says: 'OK, what did you _really_ want to say here?' - -I said 'Well, that you set option -s to enable XYZ', and he starts writing down on my document 'Set option -s to enable XYZ...', and so on. -] - -When you start as a Technical Writer, you often end up writing a lot trying to be thorough, making even really simple things complicated. Jack reminded me of a great editor that was hired at my company for a summer, and revolutionized the whole department by applying some principles and vocabulary of =>[http://en.wikipedia.org/wiki/Simplified_English|Simplified English]. As it turns out, instructions written in a plain and simple language are far easier to understand than anything else. -] - -textile_section[ - @title[Wrapping it up] -We spent the whole evening talking non-stop. We met at his hotel at 7:30 PM and I drove him back around 11 PM. The guy does talk a lot. Luckily, I got a chance to take a couple of pictures and get a funny autographed note, as long as I promised not to use it for cheques, that reads: "To Fabio, without whom this note will make no sense". - -image[@style[float:right;]?[output?[pdf]|$[site.root]]/img/pictures/rls/rls1_small.png] - -There's obviously a lot of stuff we talked about that I didn't write about, mainly because I was trying to keep this article focused on IT-related topics. Before his cruise, Randal visited the CERN in Geneva, so for a good half hour we talked about the LHC, experiments, neutrinos being shot from Geneva and collected in Rome, things like that. - -We also talked a lot about Randal's day job, then about his company =>[http://www.stonehenge.com|Stonehenge.com], then his trip to England (and to the real Stonehenge); and we talked about Italy, both about good things (food?) and bad things (bureaucracy, backwards mentality mainly in relation to IT, lack of English speakers, etc.). - -The evening couldn't have gone better. Especially considering Randal and I don't agree on some EXTREMELY important matters (programming languages and text editors). It was a great chance to learn from each other. I doubt he will be ditching Perl in favor of Ruby, but at least I hope to have made it very clear to him that Ruby is much more than Rails, at least for some of us. - -@sudo apt-get install emacs@ - -Damn! Wrong terminal. Sorry about that... -]
@@ -1,79 +0,0 @@
------ -permalink: rawline-020 -filters_pre: -- redcloth -title: "New Release: RawLine 0.2.0" -comments: -- :date: - :author: Magrabi - :url: http://magrabi.wordpress.com - :id: 2645 - :body: "congratulation ,\n\ - i wanna to ask you how can you write big applicaion like this project in ruby ,\n\ - iam beginner in ruby , can you tell me some bit about your begin in programming ??\n\ - thanx " -- :date: - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 2650 - :body: "@Magrabi: First of all, RawLine is a _tiny_ project, it's actually a really small library! If you want to learn more about programming in Ruby, start from the \"official Ruby web site\":http://www.ruby-lang.org, follow the 20-minute tutorial, and then experiment yourself!" -- :date: - :author: Magrabi - :url: http://magrabi.wordpress.com - :id: 2654 - :body: | - thnx dude but i already write scripts in ruby to do small things , - i wanna to ask about your journey in programming in all , - as you mentioned in the 10 things to learn ruby you say that you begin in school then you learn another languages in collage , how much time you spent to be good at programming ?? - -- :date: - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 2656 - :body: |- - It takes years and a lot of dedication to become a good programmer. I was good at high school and at uni, even if we did just a few exams on C++ and my thesis in Java. - - Then, when I started looking for work, I choose to become a Technical Writer pursuing a wonderful opportunity which turned out to be the best thing to do. I am now a Technical Leader and I write/coordinate technical documentation, and I'm programming just in my spare time :-) - - It doesn't matter how long it takes, you just have to love learning new things, always. (btw, I'm trying to learn a bit of Haskell too!) -- :date: - :author: Magrabi - :url: http://magrabi.wordpress.com - :id: 2657 - :body: |- - thnx Mr.Fabio , - your feeds is now readed by My Google Reader :D -date: 2008-04-02 05:33:00 +02:00 -tags: -- ruby -- programming -- opensource -- rawline -type: article -toc: true ------ --InLine- RawLine 0.2.0 is out! - -*Raw*Line is the new name for InLine, in case you didn't guess. The name was changed to avoid name collision problems with the RubyInline project. - -Here's what's new: - -* Added /examples and /test directory to gem. -* Escape codes can now be used in prompt. -* It is now possible to use bind(key, &block) with a String as key, even if the corresponding escape sequence is not defined. -* Added Editor#write_line(string) to print a any string (and "hit return"). -* Library name changed to "RawLine" to avoid name collision issues (Bug "18879":http://rubyforge.org/tracker/?func=detail&aid=18879&group_id=5622&atid=21788). -* Provided alternative implementation for left and right arrows if terminal -supports escape sequences (on Windows, it requires the Win32Console gem). - -In particular, I decided to provide an "optimized implementation" for the left and right arrows using escape sequences rather than shameful hacks. This is now possible because the Win32Console gem now enables ANSI escape sequences on Windows as well (weehee!). - -So: - -* If you're on <notextile>*nix</notextile> all good, your terminal is smart and can understand escape sequences => the new implementation will be used. -* If you're on Windows and you installed Win32Console, your termnal is smart and can understand escape sequences => the new implementation will be used. -* If you're on Windows and you didn't install Win32Console, then your terminal is stupid and it doesn't understand escape sequences, so the old implementation will be used. - -The new implementation is significantly faster than the old one, on Windows at least, and the cursor now blinks properly when left or right arrows are pressed. - -I re-emplemented only cursor movement because I'm still having some problems in getting the delete/insert escapes to work properly (or better: how I want them to work!).
@@ -1,102 +0,0 @@
------ -permalink: rawline-030 -filters_pre: -- erb -- redcloth -title: "RawLine 0.3.0 released \xE2\x80\x94 now with Readline emulation" -comments: -- :date: - :author: Daniel Berger - :url: http://www.sapphire-lang.org - :id: 2690 - :body: Very nice, thank you! -- :date: - :author: Lars Christensen - :url: "" - :id: 2711 - :body: | - Great job! The first example is a bit broken however, since String#chomp! return nil if the string is never modified. Try String#chomp. - -date: 2009-03-01 07:47:00 +01:00 -tags: -- ruby -- opensource -- rawline -type: article -toc: true ------ -"RawLine":/rawline 0.3.0 has been "released":http://rubyforge.org/projects/rawline. This new milestones fixes some minor bugs and adds some new functionalities, must notably: - -* Ruby 1.9 support -* A filename completion function -* A new API very similar to the one exposed by the Ruby wrapper for GNU Readline - -Some of you asked for Readline compatibility/emulation and that was actually not too difficult to implement: all the bricks were already there, I just had to put them together in the right place. - -The @RawLine@ module (you can spell it "Rawline" as well, if you wish) now behaves like @Readline@. This means that you can now use RawLine like this (taken from examples/readline_emulation.rb): - -<% highlight :ruby do %> -include Rawline - -puts "*** Readline Emulation Test Shell ***" -puts " * Press CTRL+X to exit" -puts " * Press <TAB> for file completion" - -Rawline.editor.bind(:ctrl_x) { puts; puts "Exiting..."; exit } - -Dir.chdir '..' - -loop do - puts "You typed: [#{readline("=> ", true).chomp!}]" -end -<% end %> - -Basically you get a @readline@ method, a @HISTORY@ constant like the one exposed by Readline (Rawline's is a RawLine::HistoryBuffer object though — much more manageable), and a @FILENAME_COMPLETION_PROC@ constant, which provides basic filename completion. Here it is: - -<% highlight :ruby do %> - def filename_completion_proc - lambda do |word| - dirs = @line.text.split('/') - path = @line.text.match(/^\/|[a-zA-Z]:\//) ? "/" : Dir.pwd+"/" - if dirs.length == 0 then # starting directory - dir = path - else - dirs.delete(dirs.last) unless File.directory?(path+dirs.join('/')) - dir = path+dirs.join('/') - end - Dir.entries(dir).select { |e| (e =~ /^\./ && @match_hidden_files && word == '') || (e =~ /^#{word}/ && e !~ /^\./) } - end - end -<% end %> - -You can find this function as part of the @RawLine::Editor@ class. The result is not exactly the same Readline, because completion matches are not displayed underneath the line but inline and can be cycled through — which is one of Readline's completion modes anyway. - -A few methods of the @RawLine::Editor@ class can now be accessed directly from the @RawLine@ module, like with Readline: - -* @Rawline.completion_proc@ — the Proc object used for TAB completion (defaults to FILENAME_COMPLETION_PROC). -* @Rawline.completion_matches@ — an array of completion matches. -* @Rawline.completion_append_char@ — a character to append after a successful completion. -* @Rawline.basic_word_break_characters@ — a String listing all the characters used as word separators. -* @Rawline.completer_word_break_characters@ — same as above. -* @Rawline.library_version@ — the current version of the Rawline library. -* @Rawline.clear_history@ — to clear the current history. -* @Rawline.match_hidden_files@ — whether FILENAME_COMPLETION_PROC matches hidden files and folders or not. - -I bet you didn't know these methods were even in the Readline wrapper, did you? Probably because of lack of documentation. -Anyhow, another very important difference beween Rawline and Readline is @Rawline.editor@, i.e. the default instance of RawLine::Editor used by the Rawline module itself. - -This makes things easier if you want more control over the line which is being edited and the previously-edited lines. Sure, @Readline#completion_proc@ exposes the current _word_ being typed before hitting tab, and so does @Rawline#completion_proc@ the difference is that if you access @Rawline.editor.line@ you get a @RawLine::Line@ object with all the information you could possibly need about the current line: the position of the cursor, the text, the order the characters were entered, etc. etc. -Now you can imagine why it took me a few minutes to write the @filename_completion_proc@ method (and why it will take you even less time to write your own similar method if you wanna do something different): you can access not only the last word being typed but also the current _and previous_ lines (through @Rawline.editor.history@ or just @Rawline::HISTORY@)! - -It must be said, as usual, that Rawline is _not_ a complete replacement for the Readline library yet (and it will probably never be, as Readline is huge!), but it's a good cross-platform, more Ruby-esque alternative to what's currently available by the Readline wrapper for Ruby. - -It's not as fast, of course, especially when completing long words, but it's quite usable. The following libraries are not required but recommended: - -* @win32console@ (on Windows) -* @termios@ (on *nix) - -They basically make Rawline faster. If you don't use them, Rawline will fall back on its pure-Ruby implementation to move left and right (i.e. printing backspaces and spaces character codes instead of ASCII escape codes). - -Unfortunately, there's no @vi_editing_mode@ or @emacs_editing_mode@ yet (for time constraints: they _can_ be implemented!) but patches are very welcome. Also, if you need more features, all you have to do is ask :-) - -P.S.: Check out the new "Project Page":/rawline and especially its Resources section!
@@ -1,141 +0,0 @@
------ -permalink: real-world-rawline-usage -filters_pre: -- erb -- redcloth -title: Real-world Rawline usage -comments: -- :date: - :author: gabriel - :url: http://tagaholic.me - :id: 2698 - :body: |- - Nice work! Loving the irb script. For anyone unsure of how to add keybindings to the above irb script, try this: - - editor = Rawline.editor - #move to beginning of line - editor.bind(:ctrl_a) { editor.move_left while (!editor.line.bol?) } - # move to end of line - editor.bind(:ctrl_e) { editor.move_right while (!editor.line.eol?) } -- :date: - :author: gabriel - :url: http://tagaholic.me - :id: 2699 - :body: | - uggh, that last bit should read: - - editor = Rawline.editor - - editor.bind(:ctrl_a) { editor.move_left while (!editor.line.bol?) } - #move to beginning of line - - editor.bind(:ctrl_e) { editor.move_right while (!editor.line.eol?) } - #move to end of line - -- :date: - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 2700 - :body: |- - Yep, that's it! Thanks Gabriel for pointing it out! - - I'm glad you're enjoying using RawLine. -date: 2009-03-07 04:54:00 +01:00 -tags: -- ruby -- rawline -type: article -toc: true ------ -So I finally decided to update "RawLine":/rawline last week, and I added a more Readline-like API. When I first started the project, I was determined _not_ to do that, because the current Readline wrapper shipped with Ruby is not very Ruby-ish: it's a wrapper, after all! - -The good thing of having a new API compatible with Readline is that now people can use RawLine in their Readline-powered scripts, with very minor modifications. - -Let's have a look at some examples (they are also shipped with "Rawline v0.3.1":http://rubyforge.org/projects/rawline): -h3. Rush - -"Rush":http://rush.heroku.com is an excellent gem which provides a cross-platform shell environment, entirely written in Ruby. -Being a shell, it obviously uses Readline for tab completion, and that does the job on Linux. On Windows though, things aren't that easy: - -* text gets garbled if you write long lines -* you can't type certain characters if they use some key modifiers like <RIGHT-ALT>, etc. - -RawLine doesn't have these problems (that's the very reason why I created it), so here's a simple script which launches a Rawline-enabled Rush shell: - -<% highlight :ruby do %> -require 'rubygems' -require 'rush' -require 'rawline' - -class RawlineRush < Rush::Shell - - def initialize - Rawline.basic_word_break_characters = "" - Rawline.completion_proc = completion_proc - super - end - - def run - loop do - cmd = Rawline.readline('rawline_rush> ') - finish if cmd.nil? or cmd == 'exit' - next if cmd == "" - Rawline::HISTORY.push(cmd) - execute(cmd) - end - end -end - -shell = RawlineRush.new.run -<% end %> - -What happens here? Nothing much really, all I had to do was: - -# Derive a new class from Rush::Shell -# Set <code>Rawline.basic_word_break_characters</code> to the same value used in the original Rush code -# Set <code>Rawline.completion_proc</code> to _the same_ completion Proc used in the original Rush code -# Rewrite the original <code>run</code> replacing <code>Readline</code> with <code>Rawline</code> - -And it works as it was intended to, i.e. typing <code>root['b<TAB></code> will expand to <code>root['bin/</code>, etc. -Note that I didn't write the completion Proc from scratch: it was already there. - -h3. IRB - -After trying out Rush, the next logical step was trying IRB itself: I could never use it properly on Windows, and that was really frustrating. -After a few minutes trying to figure out how to start IRB programmatically, I quickly came up with a similar example: - -<% highlight :ruby do %> -require 'irb' -require 'irb/completion' -require 'rubygems' -require 'rawline' - -Rawline.basic_word_break_characters= " \t\n\"\\'`><;|&{(" -Rawline.completion_append_character = nil -Rawline.completion_proc = IRB::InputCompletor::CompletionProc - -class RawlineInputMethod < IRB::ReadlineInputMethod - include Rawline - def gets - if l = readline(@prompt, false) - HISTORY.push(l) if !l.empty? - @line[@line_no += 1] = l + "\n" - else - @eof = true - l - end - end -end - -module IRB - @CONF[:SCRIPT] = RawlineInputMethod.new -end -IRB.start -<% end %> - -In this case, Rawline is included in the <code>RawlineInputMethod</code> class, derived from the original <code>ReadlineInputMethod</code> class, i.e. the class IRB uses to define (guess...) how to input characters. -Again, all I had to do was set a few Rawline variables to match the ones used in Readline, and then redefine the function used to get characters. All done. - -It works as expected (only with inline completion, of course): typing <code>"test".ma<TAB></code> will give you <code>"test".map</code>, <code>"test".match</code>, etc. - -You also get all Rawline key mappings for free (CTRL-K to clear the line, CTRL-U and CTRL-R to undo and redo, etc.), and you can define your own.
@@ -1,90 +0,0 @@
------ -permalink: redbook-020-released -filters_pre: -- redcloth -title: "Announcement: RedBook v0.2.0 released" -comments: [] - -date: 2007-10-08 05:05:00 +02:00 -tags: -- redbook -- ruby -- productivity -- opensource -type: article -toc: true ------ -<blockquote> -_"Release Early, Release Often"_ - - -- Eric S. Raymond, "The Cathedral and the Bazaar":http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html -</blockquote> - -In other words, time for another (early) release of "RedBook":http://www.assembla.com/space/redbook. There are quite a few new features which are worth examining, in particular: - -h3. Regexp search for messages - -This was actually already available before, just if you inputted a search string which was not a regexp, you'd get an unhandled exception (more or less). This exception is now handled propertly so you get a pretty message instead, if an error occurs when parsing the search string. - - -h3. Log Backup - -A new *:backup* keyword is available to quickly backup your log file. Here's what it does: - -* Loads all messages silently -* Writes them to a file in the same directory as the original log file named <log-alias>.bkp.yml. - -Handy, especially if there was a similar keyword to restore the last backup, which is planned for "later on":http://www.assembla.com/spaces/milestones/index/bWE7NkzCqr3k25abIlDkbG?spaces_tool_id=ceS8UazCqr3k25abIlDkbG. - - -h3. Support for multiple log files - -This is perhaps the most important feature introduced by this release. It is now possible to configure more than one log file by adding any number of *:data_<alias>:* settings inside your config.yml file, where alias is the name of your log file. So, for example, if your config.yml file contains the following: - -*:data_test: "testlog.yml"* - -You can load the "test" log by typing - -*:use test* - -(:use is a shorthand for :load_log). Similarly, another new keyword *:dest* has been introduced to be able to log a message to a different log file without loading it into memory, like this: - -*:log This message will be saved to testlog.yml :dest test* - -Finally, a *:refresh* keyword has been introduced as an alias to reloading the current log. - - -h3. (Almost) automatic log of completed activities - -Right when I was coding the *:timecalc* operation, I thought it would be nice to be able to log the start and end of a task without having to type it twice. Now this is possible using the *:complete* keyword: - -:log Testing feature X in product Y - -:complete - -*:complete* will re-log the last message prepended with [COMPLETED]: - - 4 Mon Oct 08 2007 - 10:47:45 AM Testing feature X in product Y - - 5 Mon Oct 08 2007 - 10:54:31 AM [COMPLETED] Testing feature X in product Y - -What if I start another task before completing the first one? No problem, it is sufficient to load the last activities using a *:load* command and then issuing *:complete <number>* where <number> is the index of the loaded activity. -This nifty little feature will become more and more important when (starting from release 0.4) I'll implement more time tracking functions, and it will be possible to track completed tasks in a specific timeframe and/or marked with a specific tag. - - -h3. Easy integration with launchers like Launchy and QuickSilver - -To conclude, as someone pointed out that it would be cool to use RedBook from launchers like Launchy or Quicksilver, I made another standalone script (redbooklet.rb or redbooklet.exe) which is just able to parse a log command and write a message to the specified log file. -To use it with Launchy, for example, all you have to do is the following: - -# Create a shortcut to redbooklet.exe (or to a way to execute the corresponding ruby script) named "log". -# Copy the "log" shortcut anywhere in your start menu -# Bring up launchy (ALT+SPACE) and type in "log" -# Hit tab -# Type in your log message, optionally with the any :tags or :dest keywords. -# The message will be logged to your default log file or to the log you specified using the :dest keyword. If an error occurs, it will appear in a command line window for 15 seconds before the program is closed. - -That's all folks! As usual, if you have any comment or suggestion feel free to reply to this post or email me. For a list of the planned features and releases, check out the "Milestones":http://www.assembla.com/spaces/milestones/index/bWE7NkzCqr3k25abIlDkbG?spaces_tool_id=ceS8UazCqr3k25abIlDkbG page. - -p=. *"DOWNLOAD HERE":http://www.assembla.com/spaces/files/bWE7NkzCqr3k25abIlDkbG* -
@@ -1,71 +0,0 @@
------ -permalink: redbook-030-released -filters_pre: -- redcloth -title: "Announcement: RedBook v0.3.0 released" -comments: [] - -date: 2007-10-25 07:18:00 +02:00 -tags: -- redbook -- ruby -- productivity -- opensource -type: article -toc: true ------ -It's time for a new beta release of RedBook. This was actually going to be a fairly modest release in terms of features, but I actually ended up implementing a lot more than expected, even things which were planned for the first production release 1.0. So, let's see what's new - -h3. New operation names _(which break compatibility with previous versions)_ - -I had a look at the names I choose for the operations and I noticed that they were either not intuitive enough or too verbose. So I decided to change a fair few of them (thus breaking compatibility with previous versions, but after all that's what beta releases are for, right?): - -|_. OLD |_. NEW | -| :complete | :finish | -| :load | :select | -| :load_config | :config | -| :load_log | :refresh | -| :timecalc | :calc | -| :stop | :quit | - -h3. New Manual/Home Page - -A while ago I discovered "TiddlyWiki":http://www.tiddlywiki.com/, but as a matter of fact I never used it for anything practical. From last week though, I started using it a work for taking notes and create short memos, and then I thought of using it to replace RedBook's standard README file (which was made in a hurry and was kinda cryptical). Now a brand new "manual.html" ships with RedBook -- 308 KB (30 of actual docs and 278 of Javascript/HTML/CSS magic) with everything you need to know about it. Additionally, an online version is available at the following address: - -p=. *"redbook.h3rald.com":http://redbook.h3rald.com* - -h3. Removed Win32::Console Library - -OK this is not good news for people (like me) who use RedBook on Windows, but I promise you'll forgive me when you read about the other new features below. I discovered by chance that the Win32::Console library (which was used to get colors working on Windows) seems not to handle international characters properly and also seems to be conflicting in some way with the Readline library I decided to include (see below). I don't know whether this is a problem of the actual library or just of the gem used to pack it. - -h3. rbconfig.yml - -The @config.yml@ file has been renamed to @rbconfig.yml@. Additionally, if you place a file with this name in your $HOME directory it will override the one in your RedBook folder (This was done in preparation for the RedBook RubyGem). - -h3. New operations - -The following new operations are available: - -* ":relog":http://redbook.h3rald.com/#%3Arelog -- Re-logs a previously-logged message (keeping the same tags and updating the timestamp) -* ":clear":http://redbook.h3rald.com/#%3Aclear -- Clears the screen. -* ":ruby":http://redbook.h3rald.com/#%3Aruby -- Evaluates arbitrary Ruby code outputting the result (use with care...) - -h3. Auto-completion - -Some Mac users originally complained that the backspace key wasn't working in RedBook (and it didn't in Linux either). Fortunately the solution to this was easy enough: include the GNU "Readline":http://tiswww.case.edu/php/chet/readline/rltop.html library. -Readline is now being used in RedBook to: - -* Provide basic (Emacs-style) bindings -* *Auto-completion* for keywords _and tags_ -* Allow the user to automatically customize key bindings via an ".inputrc":http://redbook.h3rald.com/#.inputrc file placed in their $HOME directory (on Windows you'll have to define a %HOME% environment variable pointing to a directory of your choice). An example .inputrc file is distributed with RedBook with some specific key bindings. - -h3. Support for international characters - -Finally, I decided to implement another feature which was originally planned for the 1.0 release: international characters support. This is possible using the Iconv Ruby extension (requires "GNU libiconv":http://www.gnu.org/software/libiconv/) which can convert strings between different character sets. The character sets needs to be configured via the "rbconfig.yml":http://redbook.h3rald.com/#rbconfig.yml file. - -For more information, check out the "ChangeLog":http://redbook.h3rald.com/#ChangeLog - -p=. *"Download RedBook":http://www.assembla.com/spaces/files/bWE7NkzCqr3k25abIlDkbG* - - -
@@ -1,138 +0,0 @@
------ -permalink: redbook-040-released -filters_pre: -- redcloth -title: "Announcement: RedBook v0.4.0 released" -comments: [] - -date: 2007-11-28 08:34:00 +01:00 -tags: -- opensource -- productivity -- redbook -- ruby -type: article -toc: true ------ -I'm pleased to announce a new release of the RedBook daily logging and time tracking script. This release introduces two new operations, four stats-related directives and a brand new Windows Installer able to setup RedBook in a blink, with (almost) no configuration at all. - -Let's have a closer look...h2. New Operations - -Suppose that you just logged a message and you noticed one of these two things happened: - -* You didn't really wanted to log it -* You made a silly typo in the message or in the tags - -What can you do about it? Up to RedBook 0.3, the only solution was to open the YAML file and correct the mistake manually. From now on there's also another simpler way to operate in such situations: using the :update and :delete operations! - - -h3. :update - -This operation can be used to update the message and or the tags of a previously-logged activity. The usage is simple: load a dataset first, and then execute an @:update@ command like: - -@:update 4 :message My updated message :with new_tag1 new_tag2@ - -This will update the 4th message of the dataset modifying its message and tags. Of course you can update either of the two things or both; the timestamp of the activity will not be changed. - -h3. :delete - -The delete operation can be used to completely delete a message from the log. Just load a dataset using a @:select@ operation and then execute a @:delete@ command, e.g.: - -* @:delete 1@ _(will delete the first activity)_ -* @:delete 4 2 7 9@ _(will delete activity #2, #4, #7 and #9)_ -* @:delete@ _(will delete the entire dataset)_ - -A confirmation message will appear before deleting the message(s). - -*IMPORTANT* -_Due to the architecture of the application, whenever an @:update@ or @:delete@ occurs the log file will be reloaded in memory and completely overwritten. This doesn't cause problems, although for big log files (10,000+ activities) this may take a few seconds._ - - -h2. Statistics - -Another important new feature introduced by this release is _time tracking_. It was actually already there, kind of: the @:calc@ operation was already able to calculate the time elapsed between two activities... however, this is not really practical. - -Since last release, it is possible to log the completion of an activity using the @:finish@ command. This will basically re-log the same activity prepending _[COMPLETED]_ to its message. -If you started using the @:finish@ command to complete your activities, RedBook can now calculate the following stats for you: - -* Count the number of messages in a dataset -* Calculate the average time spent for the completed activities in a dataset -* Calculate the total time spent for the completed activities in a dataset -* Calculate the duration of each completed activity in a dataset - -Each of these calculations is performed by adding special directive to a @:select@ command, as explained in the following sections. - -h3. :count - -This directive can be added to a @:select@ command to return just the number of message of the loaded dataset. -In other words, executing the following: - -@:select :count :with mail !work@ - -...will return the number of activities tagged with _mail_ but not with _personal_, without listing all the activities. - -h3. :avg - -The @:avg@ directive can be used to calculate the average time spent on activities matching certain criteria, for example: - -@:select Status Meeting :avg :with meeting@ - -...will return the average time spent on activities whose messages matches _/Status Meeting/_ and are tagged with _meeting_. - -h3. :total - -Similarly, @:total@ can be used to return the total time spent on activities matching certain criteria, e.g.: - -@:select :total :with mail work@ - -...will return the total time spent on activities tagged with _mail_ and _work_. - -h3. :duration - -Lastly, @:duration@ will print each completed task along with its duration. The syntax is similar to the others: - -@:select :duration :with break@ - -This will print each completed activity tagged with _break_ along with its duration. - -h3. :nodiff and _concurrent - -The logic behind the above-mentioned directives may seem trivial to implement, but it is not. The fun part was telling RedBook to subtract the duration of each sub-activity contained in another activity... a feature I considered necessary for time tracking purpose. However, if you start your work day with a _Working Day_ activity and you complete that activity using the @:finish@ command, when calculating the duration of the working day RedBook will subtract the duration of _all the completed sub-activities_ from the duration of _Working Day_. This is not OK, so I added the directive @:nodiff@ which can be used to prevent RedBook from calculating the difference between the parent activity's duration and the duration of each of its child activity. - -What if you're doing two things at once? use the special @_concurrent@ tag, and that activity will be considered symultaneous to its parent activity for time tracking purposes. - - -h2. Activity Status Filters - -RedBook is now fully aware of the "status" of each activity, so it is possible to display only activities in a certain status using the following directives: - -h3. :plain - -Executing @:select :plain :from today@ will return all the activities logged today, omitting their completions (if any), i.e. any activity beginning with _[COMPLETED]_. - -h3. :pending - -Executing @:select :pending :from today@ will return all the activities logged today which have not been completed yet. Again, this was not too trivial to implement, but it seems to work (it also smart enough to detect if the same activity has been relogged etc. etc.). - -*WARNING:* -_Using this directive with a large dataset may cause RedBook to take some time before delivering the result, due to the amount of iterations to perform. Use with care._ - -h3. :completed - -Executing @:select :completed :from today@ will return all the activities logged today which have been completed. - - -h2. Windows Installer - -I decided to spend some time (half an hour) and create a proper setup file for Windows using InnoSetup. The setup will take care of almost everything for you, so you have no excuse not to try RedBook because it's not user-friendly to install! - -Check out the "manual":http://redbook.h3rald.com for more details. - - -h2. RubyForge Project - -Finally, I registered a new "RubyForge Project":http://rubyforge.org/projects/redbook/ for RedBook, which include a public SVN repository updated every week (Assembla doesn't allow anonymous checkouts, unfortunately). -This project will also host the official RedBook Gem, scheduled for the 1.0 release. - - -p=. *["DOWNLOAD":http://www.assembla.com/spaces/files/redbook] | ["MANUAL":http://redbook.h3rald.com/]*
@@ -1,85 +0,0 @@
------ -permalink: redbook-050-released -filters_pre: -- erb -- redcloth -title: "Announcement: RedBook v0.5.0 released" -comments: [] - -date: 2007-12-16 08:07:00 +01:00 -tags: -- opensource -- productivity -- redbook -- ruby -type: article -toc: true ------ -This new beta release of RedBook introduces quite a few changes when it comes to configuration and setup. Here's some highlights...h3. Regexp changes - -It is now necessary to enter "proper" regular expressions for @:select@. Proper means between slashes, like the following: - -* /Work Day/ -* /mail/i - -I changed this in order to support case-insensitive searches using the @i@ switch. This makes queries much more powerful. - -h3. Variables - -A new, interesting feature I decided to introduce in this release is _variables_. For now you define them inside your rbconfig.yml file, like this: - -<% highlight :text do %> -:var_monday_morning: "monday at 8 am" - -:var_friday_evening: "friday at 8 pm" - -:var_week_report: ":select :duration :from :%monday_morning :to :%friday_evening" -<% end %> - -In this way, every time you type in :%week_report in RedBook, it will expand to: @:select :duration :from monday at 8 am :to friday at 8 pm@. By the way, completion is supported, so you'll only have to type in something like @:%we@ and hit <tab>. - -It is possible to define variables as @:var_<something>@ in the rbconfig.yml file and then used them inside RedBook as @:%<something>@. - -h3. New Operations - -Five new operations have been added: - -h4. :blank - -This will blank your current log after asking you if you really want to do so. - -h4. :restore - -This operation will overwrite your current log with the last saved backup. Like with the @:blank@ operation, you're asked if you really want to proceed or not. - -h4. :archive - -By typing @:archive@, the current log file will be archived to your @:archives_folder:@ directory specified in the rbconfig.yml file (similarly, it is now possible to specify a :backups_folder: for your logs' backup files). - -h4. :dataset - -A simple operation to display the messages inthe current dataset. - -h4. :dump - -This operation will dump the output of the last @:select@ operation to a text file. Useful for saving the average, total time and duration of a set of activities. - -h3. Portable edition - -Some Windows users will definitely love this. I finally found an easy way to run RedBook confined within the current directory, by using a simple @start.bat@ batch file to set the %INPUTRC% and %HOME% variables temporarily to the path to the .inputrc file and the directory of RedBook executable. This makes RedBook 100% portable and suitable to be used on USB sticks &similar. - -p=. *"Get RedBook Portable":http://redbook.googlecode.com/files/RedBook-0.5_Win32-portable.zip* - -h3. New Development Page - -I decided to move the primary RedBook repository from "Assembla":http://www.assembla.org to Google Code. Why? Well, nothing wrong with Assembla per se, I still think it's an excellent free service to host your public _and private_ projects, but Google Code is faster and offers only the features I need: - -* Public SVN repository access -* Simple-to-use issue tracker -* Very nicely developed downloads section, with download counts, and "normal" filenames. - -So here's the new RedBook Development Home: - -p=. *"http://code.google.com/p/redbook/":http://code.google.com/p/redbook/* - -Additionally I also setup a "RedBook Support Google Group":http://groups.google.com/group/redbook-support/, so if you have any question concerning the program, you know where to go!
@@ -1,238 +0,0 @@
------ -permalink: redbook -filters_pre: -- redcloth -title: RedBook - A simple Ruby program for your daily logging needs -comments: -- :date: 2007-09-30 06:16:02 +02:00 - :author: David Cumps - :url: http://blog.cumps.be - :id: 92 - :body: |- - I've always wondered, what do you log in these systems? I already log most of my time at work in timetracking systems, that I couldn't imagine logging spare time, what's going to be the benefit? - - Ofcourse, a script like this instead of some bloated time tracking system which has a GUI that makes you take ages for inputting something. -- :date: 2007-09-30 06:48:48 +02:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 93 - :body: "We have a time tracking system at work, but I normally tend to use it once a day... I use this script everyday to quickly keep track of what I'm doing _while_ I'm doing it, rather than trying to remember it afterwards ;-) " -- :date: 2007-10-01 03:43:18 +02:00 - :author: bryan - :url: "" - :id: 94 - :body: | - pretty cool.. any idea how to make backspace/delete work correctly on a mac? Im suffering from ^H disease. :) - -- :date: 2007-10-01 05:06:28 +02:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 95 - :body: |- - @bryan - - Thanks for pointing it out. I'm looking into it, although I think to fix that I'll have to use either the Curses or Readline libraries, and I was trying to avoid it... I'll have a look (suggestions are welcome of course!) -- :date: 2007-10-01 05:17:20 +02:00 - :author: Viktor Nordling - :url: "" - :id: 96 - :body: |- - Looks neat! - - I think it would be a perfect plugin for Launchy: (http://www.launchy.net/). Then I could just hit alt+space, write log | message and move on! - - For similar plugins for Launchy, please see: http://todoist.com/Help/viewLaunchy/ - - Cheers, - Viktor Nordling -- :date: 2007-10-01 12:40:28 +02:00 - :author: Dharivs - :url: "" - :id: 97 - :body: |- - Nice! - - You are my God! I was just about to implement it, but I couldn't... Thanks a lot :) -- :date: 2007-10-02 14:46:13 +02:00 - :author: bryan - :url: "" - :id: 98 - :body: | - Fabio: - - I'm afraid I've never used those libraries myself.. I'm a web guy, don't get into the command line stuff much.. but I'll keep checking back to see if you or anyone else does anything with it.. I think this looks like a nice logger tool. :) - -- :date: 2007-10-02 15:27:01 +02:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 99 - :body: I scheduled key bindings and support for international characters for the "1.0" release... Or hopefully before, you never know! I'm also trying to plan a few "milestones":http://www.assembla.com/spaces/milestones/index/bWE7NkzCqr3k25abIlDkbG?spaces_tool_id=ceS8UazCqr3k25abIlDkbG. -- :date: 2007-10-19 06:27:29 +02:00 - :author: James O'Kelly - :url: "" - :id: 103 - :body: I'll be trying RedBook out, thanks for the tip Fabio! And I totally agree about the command line, and Quicksilver is just crazy sexy. I don't even remember how to use my launcher anymore :) -- :date: 2007-10-20 03:44:09 +02:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 104 - :body: "Hello James, thanks. Well, actually next week I'll probably release v0.3, which comes with Readline support (which means history and proper key bindings for mac/*nix users) and quite a few new features. \n\ - By the way, I don't seem to be able to find your email address anywhere... " -- :date: 2008-03-12 17:52:49 +01:00 - :author: mrnovell.com - :url: "" - :id: 216 - :body: This is great, I am going to have my IT team start using it. Will there be a feature to where we can have central logging. -date: 2007-09-29 14:05:00 +02:00 -tags: -- ruby -- productivity -- software -- tools -- redbook -type: article -toc: true ------ -Logging your daily activities is important. If you don't believe me you'd better check at least these three posts on LifeHacker, which feature different scripts and applications: - -* "QuickLogger":http://lifehacker.com/software/top/geek-to-live--quick+log-your-work-day-189772.php -* "Life Logger":http://lifehacker.com/software/windows/log-your-workday-from-the-system-tray-with-life-logger-285602.php -* "QuickLogger 2":http://lifehacker.com/software/featured-windows-download/log-your-workday-with-quicklogger-2-302932.php - -I had a look at each one of them, and I believe they are quite useful, although I didn't really find what I was looking for. Why? Well, for example: - -* I don't believe a GUI is necessary -- you'd better off with just a shortcut key or command to run from Launchy or QuickSilver, that's much faster. -* They just log timestamped messages on a file, there's no real way to search through them and display them except by using a test editor -* They are Windows only -- not that it matters for me, but others may not be happy about it. - -That's why I thought I'd roll out my own: meet "RedBook":http://www.assembla.com/space/redbook. -Let me say it's nothing fancy: I'm not a full-time programmer but I do like playing with Ruby during my lunch breaks at work, so that's why RedBook is just a humble, tiny Ruby script. This automatically makes it cross-platform: you can install Ruby very easily on Linux & alikes, Mac OS X and Windows. Furthermore, if you are on Windows and for some weird reason you don't want to install Ruby, you can just try out the packed EXE file (made with RubyScript2Exe) -- it's about 2MB, but you won't need anything else. - - -h3. How It Works - -The program uses two YAML files, one for configuration, which must reside in the same directory as redbook.rb (or redboo.exe) and one for the log itself, which you can place anywhere, provided that you edit the configuration file accordingly. For information on how to install RedBook and how to configure it, you can check the manual.html (powered by "TiddlyWiki":http://www.tiddlywiki.com) file provided with the program or "browse it online":http://redbook.h3rald.com. - -When started, RedBook will load both the configuration file (config.yml) and _the whole log file_ into memory -- it's not a big deal, considering that they are only text files after all. I did a test with a log of quite a few MBs, and it was fine. - -You can then start input commands right away, following a few sample rules. RedBook has a (very) rudimentary parser which is able to detect keywords, i.e. alphabetic strings prepended with a colon. RedBook commands look like this: - -* *:log* This message will be logger *:tags* tag1 tag2 -* *:select* *:last* 15 *:since* January -* *:save* /home/h3rald/backup.yml - -If everything goes OK, RedBook will reply with some sort of response, an acknowledgement, a list of messages, etc. - -Simple. - -Here's basically what the program can do: - -* Log any message to the main log file. Messages can be tagged with one or more tags and will be automatically timestamped. -* Load/display a list of logged messages on the screen. It is possible to filter messages by specifying a time span, a string to search in the message text, or a list of tags. -* Dump loaded messages to a TXT, CSV or YAML file (you can even backup your log saving it to another YAML file in this way). -* Calculate the time elapsed between two or more tasks. Time will be displayed in years, months, weeks, days, hours, minutes and/or seconds as necessary. - -How? Here's a short tutorial... - -h3. A Quick RedBook Tutorial - -Let's assume you are able to run RedBook on your system by now (if you can't find some of the gems which are required for it, you can download them packed in a ZIP file from "here":http://www.assembla.com/spaces/files/redbook). - -Here's what happens when you start the program: - -<span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"> ----<br /> -RedBook v0.1 - Copyright (c) 2007, Fabio Cevasco<br /> ----<br /> - <span style="color:blue">>></span> Loading config file...<br /> - <span style="color:green">>></span> Config file loaded.<br /> - <span style="color:blue">>></span> Loading log file...<br /> - <span style="color:green">>></span> Log file loaded.<br /> - <span style="color:blue">>></span> Ready.<br /> -<span style="color:red">Red</span>Book >><br /> -</code> -</span> - -Good. Let's start logging something then. Just use the *:log* keyword, followed by a message, and then you can also add the *:tags* keyword followed by space-separated tags, like this: - -<span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"> -<span style="color:red">Red</span>Book >> :log My first message :tags test<br /> - <span style="color:green">>></span> Logged.<br /> -<span style="color:red">Red</span>Book >> :log This is another message<br /> - <span style="color:green">>></span> Logged.<br /> -<span style="color:red">Red</span>Book >> :log This is another message :tags test another_test<br /> - <span style="color:green">>></span> Logged.<br /> -</span> - -Try waiting a few seconds between each message. These three messages will be appended to the log file. You could open it in an editor, but it's normally easier to display them directly inside RedBook, like this: - -<span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"> -<span style="color:red">Red</span>Book >> :select<br /> - <span style="color:yellow">1</span> <span style="color:blue">Sat Sep 29 2007 - 09:09:32 PM</span> My first message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><br /> - <span style="color:yellow">2</span> <span style="color:blue">Sat Sep 29 2007 - 09:10:51 PM</span> This is another message<br /> - <span style="color:yellow">3</span> <span style="color:blue">Sat Sep 29 2007 - 09:11:45 PM</span> This is another message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><span style="color:cyan">[</span><span style="color:yellow">another_test</span><span style="color:cyan">]</span><br /> - <span style="color:green">>></span> 3 messages loaded.<br /> -</span> - -Easy. What if you have hundreds of messages? Well, the :select operation can take an optional search string, or you can tell RedBook to load only those messages tagged with one or more specific tags, like this: - -<span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"> -<span style="color:red">Red</span>Book >> :select :tags test<br /> - <span style="color:yellow">1</span> <span style="color:blue">Sat Sep 29 2007 - 09:09:32 PM</span> My first message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><br /> - <span style="color:yellow">3</span> <span style="color:blue">Sat Sep 29 2007 - 09:11:45 PM</span> This is another message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><span style="color:cyan">[</span><span style="color:yellow">another_test</span><span style="color:cyan">]</span><br /> - <span style="color:green">>></span> 2 messages loaded.<br /> -</span> - -Or you can use the :from and/or :to keywords to specify a certain time frame, like this: - -:select :tags test *:from ten minutes ago* - -:select *:from last week :to 2 days ago* - -RedBook includes a very nice "natural language date/time parser", "Chronic":http://chronic.rubyforge.org/ which is able to convert sentences like the following into Ruby Time objects: - -* 6 in the morning -* friday 1pm -* sat 7 in the evening -* today -* yesterday at 4:00 - -It's not perfect (and it's in pre-alpha as well), but it does the job, for what I can see, and it makes it very easy and fast to specify timeframes. - -After executing a :select command, two other operations can be performed on the loaded messages: *:calc* and *:save*. - -:calc calculates the exact amount of time elapsed between two or more tasks. Do you remember the numbers on the far left of each message? Think them as temporary IDs for the actual messages, and you can use them to select specific tasks when executing the :calc operation: - -<span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"> -<span style="color:red">Red</span>Book >> :calc 1 3<br /> - <span style="color:yellow">1</span> <span style="color:blue">Sat Sep 29 2007 - 09:09:32 PM</span> My first message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><br /> - --- 2 minutes and 13 seconds.<br /> - <span style="color:yellow">3</span> <span style="color:blue">Sat Sep 29 2007 - 09:11:45 PM</span> This is another message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><span style="color:cyan">[</span><span style="color:yellow">another_test</span><span style="color:cyan">]</span><br /> -</span> - -Similarly, if no IDs are specified, :calc calculates the time difference between each message and the previous: - -<span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"> -<span style="color:red">Red</span>Book >> :calc<br /> - <span style="color:yellow">1</span> <span style="color:blue">Sat Sep 29 2007 - 09:09:32 PM</span> My first message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><br /> - --- 1 minute and 19 seconds.<br /> - <span style="color:yellow">2</span> <span style="color:blue">Sat Sep 29 2007 - 09:10:51 PM</span> This is another message<br /> - --- 54 seconds.<br /> - <span style="color:yellow">3</span> <span style="color:blue">Sat Sep 29 2007 - 09:11:45 PM</span> This is another message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><span style="color:cyan">[</span><span style="color:yellow">another_test</span><span style="color:cyan">]</span><br /> - </span> - -Finally, you can save loaded messages to a TXT, YAML or CSV file, as follows: - -<span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"> -<span style="color:red">Red</span>Book >> :save log.txt<br /> - <span style="color:blue">>></span> Saving...<br /> - <span style="color:green">>></span> Saved dataset to "log.txt"<br /> -</span> -h -If you want to backup your log, you can load all messages and then save them to a YAML file. Maybe in this case you want to append the *:silent* keyword to the :select command, so that messages won't be displayed on the screen. - -h3. Conclusion - -RedBook is just a simple program: it suits my needs for now, but of course there's roo for improvement. If you have some useful suggestions, or you want to contribute in some way, feel free to contact me! - -p=. "Home Page":http://redbook.h3rald.com | "Development":http://code.google.com/p/redbook/ | "Download":http://code.google.com/p/redbook/downloads/list
@@ -1,76 +0,0 @@
------ -:type: article -:permalink: refactoring-ruby-edition-review -:tags: -- ruby -- books -- review -:title: "Book Review: Refactoring - Ruby Edition" -:toc: true -:date: 2010-01-22 16:40:36.788596 +02:00 -:summary: "A review of Refactoring: Ruby Edition, Jay Fields, Shane Harvie, Martin Fowler and Kent Beck. A good book to have for Ruby professionals and conscientious hobbyists." ------ - -Refactoring, like testing, is an activity that should be very familiar to all programmers, especially Rubyists. Actually, programs written in Ruby don't need as many refactorings as, say, Java programs. However Rubyists are traditionally more TDD oriented and they like writing clear and elegant code. - -"Refactoring: Ruby Edition":http://www.informit.com/store/product.aspx?isbn=0321603508 is actually a rewrite of the more revolutionary -- at the time -- "Refactoring: Improving the Design of Existing Code":http://www.informit.com/store/product.aspx?isbn=0201485672, written by Martin Fowler & others to teach Java programmers about refactoring. Jay Fields and others decided to _port_ this historical title to Ruby to fill a gap: there was no authoritative book about refactoring for this language, so what's better than translating the Bible on the subject? - -If you already own the Java book you shouldn't buy this one. This is not my personal opinion (I never read the original), it's actually written in the Preface of the book itself. I really like honest authors, and luckily this seems to have become a trend, lately: programmers don't like reading bullshit after all. By the authors' own admission, this book contains roughly the same material and the same examples of the original Java book, plus some slightly more Ruby-specific content. - -h3. Getting started - -!>/img/pictures/refactoring-ruby-ed.jpg! - -The first chapter, _Refactoring, a first example_, is not a first chapter. Well, it is in a literal sense, but it doesn't look like one: no theory, no padding, you're immediately thrown in the middle of the battle, dealing with a small program in desperate need of refactoring. It literally contains quite a lot of code: the same program is rewritten over and over with changes in bold to teach you what refactoring means. The most intimidating thing is reading names of refactoring techniques capitalized and used in a natural way, like if the reader was supposed to know them already. In all fairness though, they are self-explanatory most of the time, e.g. _Replace Array with Object_. - -What makes this chapter even more unusual is the clever usage of white space: _before_ and _after_ code snippets are shown on separate page, which makes it much more immediate to see the changes in code (but it won't work very well if you bought the ebook instead of the hardback). - -By contrast, the second chapter _Principles in Refactoring_ is all about theory: it should have been the first chapter, but it's better this way. Here you'll learn the basics: a bit of history, when to refactor and when not to, and so on. I bet it was taken almost verbatim from the Java book; see for example: _"[...] If your building APIs for outsid consumption, as *Sun* does [...]"_. - -Chapter 3, _Bad Smells in Code_, is probably the most important and useful chapter in the entire book. It's somethig you should read over and over until you can spot a code smell right after coding. - -bq. "You should use this chapter and the table on the inside back cover as a way to give you inspiration whn you're not sure what refactorings to do." - -Precisely what you have to do. Except that there is no table on the inside back cover, so I guess "this one":http://docs.google.com/viewer?url=http://www.industriallogic.com/papers/smellstorefactorings.pdf will have to do. Pity. - -Chapter 4, _Building Tests_, is the usual, compulsory chapter about unit testing, i.e. the usual intro to Test::Unit. As I said, it's essential for the book to make sense, but you can safely skip it if you know how to test already. - -Finally, chapter 5 (_Toward a Catalog of Refactoring_) is a 2.5 page intro to the bulk of the book, nothing more than glue to ease the transition. I would have removed it completely, but that's because I'm a merciless technical writer I guess. - -h3. Diving in - -From chapter 6 onwards, specific refactoring techniques are described. Each chapter starts with a brief overview of the following sections (which should have been a list, but I'm just being pedantic now), so you know what to expect. - -Each technique described has a very meaningful and immediate name that reflects its purpose, like Extract Method or Split Temporary Variable. A code example introduces the code smell and the proposed refactoring, followed by a _Mechanics_ section with a list of actions to perform and an explanatory _Motivation_ section. - -Tipically, each refactoring has its own, self-contained code snippets. Depending on the complexity of the refactoring technique examined, the authors may spend half to five or six pages just to show all code iterations to get to the result. When things get too complicated, UML diagrams are used to make the technique easier to understand, but only when it's strictly necessary. - -Even if the original techniques were though for Java, the authors (in particlar Jay Fields, I guess) do a great job making sure that the Ruby code doensn't look like Java code in disguise: the result of the refactoring always follows Ruby's philosophy and idioms. I particularly liked the following: -* Replace Dynamic Receptor with Dynamic Method Definition (Chapter 6), a nice example of metaprogramming. -* Decompose Conditional/Recompose Conditional (Chapter 9), very useful and very common -* Replace Nested Conditional with Guard Clause (Chapter 9), another way to deal with a very common problem with conditionals -* Extract Module (Chapter 11), very Rubyesque way to tidy up busy classes - -This doesn't mean that _every_ refactoring described in the book is a programmer's epiphany, some of the techniques are indeed pretty obvious and some portion of code in need of refactoring indeed smell very, very bad! E.g.: -* Inline Class (Chapter 7): Who on Earth would ever create a class containing a single method returning a telephone number? -* Replace Magic Number with Symbolic Constant (Chapter 8): Why would you use integers for constants? Didn't Matz give us Symbols to avoid just that? - -h3. The big picture - -By the end of chapter 11 you should be familiar with nearly all the best possible way to get rid of code smells. That's all good, but what happens if _the entire program_ stinks? Chapter 12 (_Big Refactorings_) claims to have some answers to some common pitfalls. The techniques defined in this chapter are by no means sufficient to solve all problems caused by bad design, but they can help especially to rewrite legacy code, or programs developed by Ruby newbies: -* Tease Apart Inheritance -* Convert procedural design to objects -* Separate domain from presentation -* Extract hierarchy - -They are basically all about reducing bloat and unnecessary complexity, and -- to me, that is -- they all sounded pretty obvious. _Of course_ I'm going to separate domain from presentation! Didn't Rails teach us anything at all? I must say I was somehow disappointed by this chapter. I was going to bet there was something slightly more advanced, maybe something about replacing traditional object instantiation with an internal DSL? Nope, sorry. - -Chapter 13, on the other hand, is an excellent conclusion to the book: it really helps the reader to understand when to refactor and how to do so, depending on the situation. - - -h3. Conclusion - -This and "Design Patterns in Ruby":http://www.h3rald.com/articles/design-patterns-in-ruby-review/ are now my favorite Ruby books. I believe they complete each other: Russ Olsen's book is more about designing your programs properly from the start, while _Refactoring: Ruby Edition_ can help to make things better at a lower level. -Ruby developers don't need to refactor as much as Java developers, mainly because of Ruby itself, nevertheless, this is an excellent read for anyone who wants to get serious about programming in Ruby, and is determined to do so by following the Ruby Way. - -I'll definitely keep this book near me when I'm coding: I do believe it is much more helpful when you start using it as a reference, when you already read about all the refactoring techniques and want to put them in practice. Also, I'll probably re-read chapter 3 on a regular basis, to get accustomed to recognize code smells, and deal with them accordingly.
@@ -1,114 +0,0 @@
------ -:title: "Book Review: Reflections on Management" -:subtitle: "The key to becoming a true leader" -:image: /img/pictures/books/reflmgmt.jpg -:type: article -:date: 2011-02-05 23:51:25.674345 +02:00 -:toc: true -:tags: ["review", "books", "software"] -:permalink: reflections-on-management -:pdf: true -:intro: | - When I was offered to review this book, I was a bit skeptical: a book on _management_? I normally read and review books on programming and software development methodologies. However, I work as a Documentation Technical Leader, and while I don't technically _manage_ a whole team yet (damn economic crisis!), someday I may end up doing just that, so I gave "Reflections on Management":http://www.informit.com/store/product.aspx?isbn=032171153X a try. - - _It's short, after all, I'll probably read it in a couple of weeks and move on_ — I thought. Well, beware of short books: I thought exactly the same thing when I picked up "The Elements of Style":http://en.wikipedia.org/wiki/The_Elements_of_Style, and it still follows me around everywhere, so that I can re-read bits of it whenever I need to. -:extended_intro: | - This short but dense masterpiece by Watts S. Humphrey and William R. Thomas is one those books you always end up carrying around in your pocket (or stored in your favorite ebook reader). It's a short but very dense collection of tips and tricks to succeed as a leader and a manager — of _anything_: <q>Your Software Projects, Your Teams, Your Boss, and Yourself</q>, as the book subtitle says. It doesn't "just" help forging great managers and leaders, it also explains, with practical examples and no-nonsense explanations, how to deal with those annoying people in suits who constantly keep asking you for impossible things... ------ -$[document.intro] -&:[title|Reflections on Management] -&:[author|Watts S. Humphrey] - -textile_section[ - @title[About &[author]] -Generally, I don't bother writing anything about the authors in my reviews: you can easily find this kind of information online if you want to. I'll make an exception in this case, you'll understand why as you read along. - -=>[http://www.sei.cmu.edu/watts/index.cfm?WT.ac=watts|&[author]] was a true legend in Software Engineering, he's often referred to as _The Father of Software Quality_. He worked at IBM for 27 years and eventually became Vice President of Technical Development. In the 80s, he arrived at the =>[http://www.sei.cmu.edu/|Software Engineering Institute (SEI)] where he developed some key development processes of our time: the Software Capability Maturity Model (CMM), the Personal Software Process (PSP), and the Team Software Process (TSP). He received many awards, culminating with the _National Medal of Technology_ in 2005. - -He wrote several books focusing mainly on software development and managing software projects through his PSP and TSP methodologies. _\/&[title] — How to Manage Your Software Projects, Your Teams, Your Boss, and Yourself_ was the last book published while he was alive. =>[http://www.informit.com/title/0321624505|Leadership, Teamwork, and Trust: Building a Competitive Software Capability], co-authored with James W. Over, was published posthumously. - -&[author] =>[http://www.sei.cmu.edu/newsitems/Humphrey_obituary.cfm|died] on October 28, 2010. -] -textile_section[ - @title[Structure and Organization] -In many ways, _\/&[title]_ can be seen as the _summa_ of Humphrey's work on PSP, TSP and management of software projects, condensed in a very readable 288-page-book, co-written with =>[http://www.sei.cmu.edu/about/people/wrt.cfm|William R. Thomas], Senior Technical Writer and manager of SEI's Technical Publications Team. - -image[@style[float:right]?[output?[pdf]|$[site.root]]/img/pictures/books/reflmgmt.jpg] - -I noticed the tech writer's touch simply by flicking through the pages of the book when I first got it: its structure is impeccable. - -Organized into four parts, totalling 8 chapters, an Epilogue and an Appendix, this book is a prime example of order and readability: pick any section title (just the title) of any section in any chapter, and you get a clear idea of their content and purpose, and a key principle of management. Examples? Sure: -* Chapter 8: Learning to Lead -** 8.1 How You Behave Affects Your Team -** 8.2 Leaders Set an Example for Their Teams -** 8.3 Learn to Avoid the Symptoms of Poor Leadership -** \[...\] - -If you print the Table of Contents alone you get a priceless cheat sheet on management and leadership. If you want slightly more detail, each chapter contains a summary table of all its sections, with a two-line summary of its contents. There are no subsections, only first-level sections, which make the book much easier to understand and "digest". - -You can read it all at once, then you should keep it readily available for consultation. It will take you only a few seconds to look through the contents and pick the most relevant section in a time of need. -] -textile_section[ - @title[Writing Style] -The book is very clear and simple to read, always. Each section is self-contained, and always aims to make a point, usually expressed right in its title. If I were to find a common pattern in most of the chapters of this book, it would be the following: -# Identification of the problem – a particular situation or aspect is described in a way that problems are self-esplanatory. -# Labeling and classification – the situation is analized and often a set of causes are presented to the reader, often labeled or classified. -# List of possible solutions – a list possible solutions is presented to the reader, often as a definition list. -# Solution details – more details are provided to prove the effectiveness of the solution, often including personal anecdotes. - -By doing so, the author makes sure that everything he writes about can be easily understood and accepted, because proven by personal experience. -] -section[ - @title[Contents] - pt[I|Managing Your Projects| -The book starts with a general introduction on Software Quality. If you are new to the subject (and you _shouldn't_ be), this is probably one of the best and to-the-point overviews you'll ever find, written by the man who almost came up with the concept. - -The second chapter is about planning. Actually, the whole book is about planning at different levels, so no, you should not dismiss this part. _Good_ plans are important, and they are your best weapon against management, if you excuse the expression. - -Someone may object that if you're working in an _agile_ team, you shouldn't spend a lot of energy in long-term planning, but rather focus on dealing with frequent requirement changes and deliver often and regularly. While this can be true, planning is still important: you won't produce any rigorous schedule or design documents, but you still have to be able to provide accurate estimates and very often! - ] - pt[II|Managing Your Teams| -The second part of the book focuses the _Team_, the people in it, their roles, their responsability and its leadership. Chapter 3 introduces Tom DeMarco's concept of _Jelled Team_, i.e. a team that is more than the sum of its parts, and is characterized by cohesion, challenging goals, frequent feedback, a common working framework and good communication. - -The Holy Grail. The dream of every team leader and its members. The good news is, it can be done. Any team can jell, and teams _like to jell_ furthermore, if the proper conditions exist, and the three chapter in this third part will teach you everything from being a good team member to becoming a great team leader. - -In many ways, this was my favorite part of the book. It's amazing how a lifetime of experience is distilled in just a few pages. Chapter 5 (Leading and Coaching your Teams) is very, very inspiring and very helpful in understanding how to become a good team leader, how to motivate and involve people, and how to manage them rationally. - -The story of Humphrey's high school wrestling coach Umbach is a classic example of a truly dedicated, inspiring, and successful leader: - - blockquote["The workouts were so tough that the matches seemed easy. By the end of the year, several of us were undefeated, the team took the 13-state championship, and we were campus heroes. All of this from a ragtag bunch of inexperienced recruits. It was Coach Umbach who made the team. - -Our coach's dedication, commitment and energy were amazing, but what I found most inspiring was that he really cared about how each of us did. I have always remembered how he made a small band of raw recruits into a championship team and how he fostered the kind of cohesive team spirit that made losing simply unthinkable."] - ] - pt[III|Managing Your Boss| -The third part consists of a single chapter: _Negotiation your projects and defending your plans_. It doesn't matter if you want to pretend otherwise: as soon as you become a team leader and you have to deal with management, you'll have to deal with complex internal politics. - -This chapter is about learing to be pragmatically diplomatic and deal with management. It's about creating good plans that can survive confrontation with your managers, no matter what their demands are. - -There's no silver bullet: I appreciated the honesty of the author when providing solutions. Section 6.6 (What to do when a project is doomed) is an example of this: - - blockquote[ -You're on a project and it's headeing south. While everubody is trying their hardest, and you're doing your level best to help, you can feel it in your bones: the project is doomed to fail. What can you do? You have three choices. -# Keep plugging away and hope things will improve. -# Look for another job. -# Try to fix the problems. - - ] -That's right. Look for another job. That almost made me laugh, but it made me understand that in some extreme situation that may just be the best solution. - ] - pt[IV|Managing Yourself | -The last part of the book is about you. I would probably have moved it earlier on in the book, maybe right after the first part, but it serves as a good ending for the book. Chapter 7 (Taking Control of Your Work) is a must-read for anyone. It teaches you how to manage your working life, from time management (The 18 Hour Work Week) to psychological aspects (What Do You Want From Life?). - -Chapter 8 (Learning to Lead), is a nice writeup on the essence of Leadership, and what it measn to be a good leader rather than a manager. A great read. - ] -] -textile_section[ - @title[Final Thoughts] -Reading certain sections of this book felt a little bit weird at first. TSP, PSP, heavy planning and documents... are they still relevant in a "real world" now dominated by _agile_ practices, Scrum, Kanban and similar? Do you really have to provide detailed plans and documentation to convince management? -* You may not have detailed design documents, but you still have user stories. -* You may not be required to plan ahead of 6 months, but you still have to plan frequently and provide accurate estimates. -* You may not be required to trace and track everything you do, but at the very least you have to monitor your _velocity_ and produce _burndown charts_. - -Yes, you read "PSP" and "TSP" everywhere in the book, but they are just labels. The methodologies and processes may change, but _the principles_ will always remain true. This book is about understanding the very essence of management and leadership, and it will remain an invaluable resource for anyone who wants to build a career in the Software Industry. -] -
@@ -1,33 +0,0 @@
------ -permalink: review-services -filters_pre: -- redcloth -title: Review Services -comments: -- :date: 2008-04-03 07:26:36 +02:00 - :author: rssnewsdigest - :url: http://rssnewsdigest.com/top_search.php - :id: 227 - :body: http://www.digitalidnews.com/articles/2007/07/24/safenet-chosen-by-security-biometric-clearing-network-to-provide-security-for-registered-traveler-program -date: 2007-12-14 12:24:00 +01:00 -tags: -- review -- website -- personal -- tools -- books -type: article -toc: true ------ -When it comes to software, I definitely like to try out new things. My collegues takes the piss out of me because every -week- day I come up with "some new tool they _have_ to start using" and so on. -As a matter of fact, I like reviewing software as well. I enjoy writing and analyzing new things, evaluating all the new possibilities they may offer, and I also tend to have a rather critical eye for what doesn't _feel_ right. I'll use a tool for months but still try out new ones which claim to do the same thing — but better — as they come out. -Unfortunately — or fortunately, depends how you look at it — when it comes to software, there are very few _silver bullets_, and things keep changing: that's the way it is and the way it will be. - -I must try to write up a page (and ideally update it regularly, that's the hard part) listing all the tools I use, at some point... but at any rate, if you coded some new app you think kicks ass or you found a hidden jewel in the labyrinth of freeware, just let me know: I'll definitely try it out, and if it's worth a post I'll blog about it. - -*The same applies to books*, actually, as I like reading, especially those which are related to Ruby or programming, nowadays. - -The cost of such reviews and articles? Depends! Certainly I wouldn't mind donations or some compensation of some form, especially from publishers or software companies. It may be money, books, software or even nothing: it really depends on what I have to review. -Please be aware that I am *not* doing this full time, and I already have a job and a fiancée to look after, but I'll do my best to publish as much as I can on my site or even elsewhere elsewhere [Note: on e-zines, magazines & similar, not on your brother's friend's mother-in-law's crappy blog!]. - -For any inquiries, contact me (*h3rald [—at—] h3rald.com*).
@@ -1,18 +0,0 @@
------ -permalink: ror-and-cakephp -filters_pre: -- redcloth -title: Ruby on Rails & CakePHP -comments: [] - -date: 2006-07-07 09:52:28 +02:00 -tags: -- cakephp -- rails -- tutorial -type: article -toc: true ------ -This article is an attempt to port a famous Ruby on Rails tutorial to PHP using an emerging PHP MVC framework, CakePHP. CakePHP was inspired by Rails' philosophy of Rapid Application Development. It implements a lot of the features and concepts that made Ruby on Rails popular in a very short time. Although Ruby's syntax and way of doing things is known to be much more elegant than other programming languages, there is yet hope for PHP to get more organized and effi cient. This tutorial will follow its Rails counterpart step-by-step, covering the essential steps to create a simple, yet fully functional, web application. -Register on the "International PHP Magazine":http://www.php-mag.net/magphpde/psecom,id,20,archive,2,noeid,20,.html to read the full article. -!/img/thumbs/phpmag0706.gif!
@@ -1,21 +0,0 @@
------ -:title: "Ruby Compendium v0.2.0 released" -:subtitle: "With up-to-date Ruby implementations, more resources, and online version" -:image: /img/pictures/ruby.png -:type: article -:date: 2011-08-07 18:01:52.573674 +02:00 -:tags: ["ruby-compendium", "books", "ruby"] -:permalink: ruby-compendium-020 -:intro: | - The Ruby Compendium has been updated, and it now lists the most up-to-date versions of various Ruby implementatios, even more web sites, books, podcasts, and Rubyists. In addition to the PDF version, the book can now be read online "here on H3RALD.com":/ruby-compendium/book/. -:extended_intro: | - Overall, this is a relatively minor update; however, I felt it was a good time to release it to keep the book up-to-date. ------ - -$[document.intro] - -textile[ -The _Ruby Compendium_ is available free of charge, under the terms of the "Creative Commons Attribution-ShareAlike 3.0 Unported License":http://creativecommons.org/licenses/by-sa/3.0/, and you can help improving it! It was written using my very own "Glyph Framework":http://www.h3rald.com/glyph, and the entire source code is available on "GitHub":https://github.com/h3rald/ruby-compendium, for anyone to fork. - -div{text-align:center;margin:20px; auto;font-size: 18px; font-weight:bold;}. =>[https://github.com/downloads/h3rald/ruby-compendium/ruby-compendium.pdf|Download PDF] \| =>[http://www.h3rald.com/ruby-compendium/book|Read Online] -]
@@ -1,140 +0,0 @@
------ -permalink: ruby-lang-italian -filters_pre: -- redcloth -title: Italian translation of Ruby-Lang.org finally available! -comments: -- :date: - :author: Luca Sabato - :url: http://sabatia.it - :id: 564 - :body: "*Ottimo lavoro!!!* Mi spiace non essere stato io il terzo ;( comunque sia _cercher\xC3\xB2_ di aiutarvi nel possibile a mantenere attivo questo progetto di traduzione.\n\n\ - Alla prossima." -- :date: - :author: Magrabi - :url: http://magrabi.wordpress.com - :id: 2646 - :body: |- - i wanna to translate the site into arabic , whats the way to begin ? - thnx -- :date: - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 2649 - :body: "@Magrabi: All you have to do is contact the webmaster of Ruby-Lang.org (webmaster@ruby-lang.org) and ask ;-) As far as I know, the Arabic translation was started already, but it seems to be still in _draft_, so they may need your help!" -date: 2008-11-15 14:48:00 +01:00 -tags: -- ruby -type: article -toc: true ------ -"[Vai alla versione italiana]":#italian-version - -I am very pleased to announce that the official site of the Ruby programming language is now available in Italian: - -*"www.ruby-lang.org/it/":www.ruby-lang.org/it/* - -h3. In the beginning... - -It all started in July 2007, when after a closer look at the site I discovered that apparently it was not available in Italian! How could it be? There were a lot of translations available, such as French, Spanish, Japanese, Korean... but no Italian. -I immediately emailed the webmaster and within a few hours "Curt Hibbs":http://curthibbs.wordpress.com/ (hell yes, "that":http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html Curt Hibbs!) mailed me the instructions to get me started: - -<blockquote> -"[...] Providing a translation of the Ruby web site would have two parts: 1) the initial translation of the current content, and 2) the ongoing maintenance of the Italian version as new content and news items are added. - -This effort will be much more sustainable over the long term if you put together a team of at least three people who would commit to translating and maintaining the site. [...]" -</blockquote> - -...Why _three_ people to translate "a few pages"? That's what bugged me at the time: it honestly seemed just a few days work for one person at most. Later on I understood why. -I wasn't the first to volunteer for the Italian translation, actually: *"Raul Parolari":http://www.raulparolari.com* was indeed the first, but he was waiting for another two team members to start, of course. - -We eventually persuaded Curt that _we could handle it_ even without a third team member, so we started right away. As a matter of fact, we did manage to translate a lot of stuff within the first week. - -h3. Translating is easy, right? - -Translating feels easy when you are mother tongue in the language you're translating into (Italian), and you know fairly well the language you're translating from (English): it can't possibly hard, right? Nah, a piece of cake. -Most of the time it's fairly easy and fast, too, but things can get a bit more complicated when you stumble upon idioms and tech jargon. - -Personlly, I never surf the web in Italian. That's a personal choice (I love the English language to an extreme extent), and I've learnt to live with it no matter what people think. I admit that it was hard for me to translate some of the things on the Ruby web site: not because they were hard for me to understand, but because in some cases a translation would simply not do justice to the original text. - -Some of the text may sound weird in Italian, especially in the code examples. In the end we choose to translate every bit of code, e.g. @puts sentence@ became @puts frase@ and other equally horrid things. Sometimes I wonder whether we should have just left the original code as it was, but we wanted to make things easier for people who don't speak much English at all. - -h3. Stagnation - -Things went quite after the initial excitement, I admit. Both Raul and me more or less stopped translating as time went on, and I am truly and deeply sorry for that. You know how it is: you start off really enthusiastic and then you lose interest, you get involved in other projects, work, family, etc. etc. - -*"Davide D'Agostino":http://www.lipsiasoft.com/* came to our rescue in December 2007. He's arguably the "most Italian" of the group and he came out with some interesting solutions for some particularly difficult bits of the translation. -Believe it or not, the 80% of the site was translated by the beginning of 2008: only a few bits were left, but then... erhm, things went quiet again. I put the translation of the site on my todo list, and I knew it was there all along: "Oh, yes, I should have a look at Ruby-Lang.org again" I repeated to myself from time to time. - -About two weeks ago I got so pissed off with myself about this that I decided to finally "get things done" and translate the few remaining bits, reviewed the lot, got rid of some rough edges, did some minor proofreading and here it is, ready to be browsed by Italians, finally. - -The most ironic thing? It took literally a few hours of "work" to sort things out... but nearly a year to finally find the will to do it. - -h3. What now? - -Now the site is live and we'll keep it up-to-date from now on. I sincerely hope it will help bringing more and more Italians closer to the Ruby world. I'm sure there are plenty of people out there who would have done a much better job than we did, and definitely in a much shorter timeframe... but hey, we finally did it, after all! - -I would like to thank again *"Raul Parolari":http://www.raulparolari.com* and *"Davide D'Agostino":http://www.lipsiasoft.com/* for helping translating the site: I now finally understand why Curt wanted three people on the translation team! - -One last thing: if you find any mistake (and there are plenty, I'm sure) or if you have any suggestion to improve the current translation, don't hesitate to "contact me":/about/: I'll try to fix things as soon as possible. - -Enjoy Ruby, now finally "in Italian":http://www.ruby-lang.org/it/ too! - -<hr /> - -<a name="italian-version"></a> - -h2. È finalmente disponibile la traduzione italiana di Ruby-Lang.org - -Sono veramente contento di annunciare che il sito ufficiale del linguaggio di programmazione Ruby è ora disponibile anche in Italiano: - -*"www.ruby-lang.org/it/":www.ruby-lang.org/it/* - -h3. In principio... - -Tutto incominciò nel luglio del 2007, quando dopo un'occhiata più da vicino al sito mi accorsi che apparentemente non era disponibile in italiano! Com'era possibile? Era già tradotto in molte lingue tra cui francese, spagnolo, giapponese, coreano... ma niente italiano. - -Mandai immediatamente un'email al webmaster, e in poche ore "Curt Hibbs":http://curthibbs.wordpress.com/ (già, proprio "quel":http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html Curt Hibbs!) mi inviò le istruzioni su come iniziare a tradurre: - -<blockquote> -"[...] La traduzione del sito di Ruby è articolata in due parti: 1) la traduzione iniziale degli attuali contenuti e 2) il continuo aggiornamento della versione italiana ogniqualvolta vengono create nuove pagine. - -Questo sforzo è molto più sostenibile nel lungo termine se riesci a mettere insieme una squadra di almeno tre persone dedite a tradurre e ad aggiornare il sito. [...]" -</blockquote> - -...Perchè _tre_ persone per tradurre "solo poche pagine"? Questo quello che mi chiesi in quel momento: sembrava veramente essere una questione di pochi giorni, e sicuramente una persona sarebbe stata più che sufficiente. Successivamente capii perchè tre persone erano necessarie. - -Comunque, non ero il primo ad offrirmi volontario per la traduzione italiana: *"Raul Parolari":http://www.raulparolari.com* si era già fatto avanti, ma stava ancora aspettando altre due persone per poter iniziare, ovviamente. - -Alla fine, riuscimmo comunque a persuadere Curt che _ce la potevamo fare_, anche senza una tersa persona ad aiutarci. Incominciammo a tradurre quindi di buona lena, e di fatto riuscimmo a tradurre molto durante la prima settimana. - -h3. Tradurre è facile, non è così? - -Tradurre dall'inglese all'italiano sembra facile se sei madrelingua e conosci bene l'inglese: non può essere difficile, giusto? Facilissimo, ovvio. -Per la maggior parte è così, di fatto: facile e veloce. Ma le cose tendono a complicarsi un pochettino quando hai a che fare con modi di dire e linguaggio un po' più tecnico. - -Personalmente, non vado mai su siti italiani. È una mia scelta personale (mi piace tantissimo la lingua inglese), e ho imparato a non fare caso a quello che gli altri pensano di questa scelta. Devo ammettere che è stato difficile per me tradurre alcune parti del sito di Ruby: non perchè fossero difficili da capire, ma perchè in qualche caso una traduzione non è semplicemente in grado di rendere giustizia al testo originale. - -Alcuni pezzi della traduzione, per questa ragione, potrebbero suonare un po' strani alle orecchie di Italiani d.o.c., specialmente per quanto riguarda gli esempi di codice. Alla fine abbiamo deciso di tradurre la maggior parte del codice (ove possibile, ovviamente): @puts sentence@ è quindi diventato @puts frase@, e altri simili orrori. Qualche volta mi chiedo se non avessimo fatto meglio a lasciare il codice originale così com'era, ma d'altra parta abbiamo cercato di fare il possibile per rendere le cose più semplici anche per persone che non sanno una parola di inglese. - -h3. Stagnazione - -Col tempo, l'iniziale interesse nella traduzione è andato affievolendosi, lo ammetto. Sia io che Raul abbiamo praticamente interrotto la traduzione ad un certo punto, e mi dispiace veramente tanto. Sapete com'è: incominci entusiasta e poi piano piano inizi a perdere interesse, ti dedichi ad altri progetti, il lavoro, la famiglia, eccetera. - -*"Davide D'Agostino":http://www.lipsiasoft.com/* venne in nostro aiuto nel Dicembre 2007. Penso che sia quello "più italiano" del gruppo, tanto da essere in grado di proporre soluzioni interessanti per alcuni pezzi particolarmente difficili da tradurre. Che ci crediate oppure no, l'80% del sito era pronto e tradotto all'inizio del 2008: rimanevano solamente alcune piccole parti ancora da tradurre, e poi... beh, abbiamo un po' lasciato perdere, di nuovo. La traduzione del sito era tra le mie cose da fare, c'è sempre stata: "Sì, certo, _dovrei_ dare un'occhiata a Ruby-Lang.org"... mi sono ripetuto questa frase periodicamente, senza di fatto fare nulla. - -Poi, finalmente, due settimane fa mi sono deciso a finire il lavoro traducendo le poche pagine rimaste, revisionando il tutto, facendo un po' di pulizie qua e là, ed ecco qui: il sito può ora essere visitato da tutti gli italiani che lo desiderano. - -La cosa più ironica? Sono bastate solo poche oro di "lavoro" per mettere le cose a posto, ma quasi un anno per trovare finalmente la forza di volontà per farlo... - -h3. E adesso? - -Ora il sito è accessibile e lo terremo aggiornato d'ora in avanti. -Spero sinceramente che possa contribuire ad avvicinare sempre più italiani al mondo di Ruby, anche se sono sicuro che ci sono moltissime altre persone là fuori che avrebbero fatto un lavoro più ben fatto del nostro, e sicuramente in tempi molto più brevi... ma dopotutto, alla fine ce l'abbiamo fatta, no? - -Vorrei spendere ancora due parole per ringraziare nuovamente *"Raul Parolari":http://www.raulparolari.com* e *"Davide D'Agostino":http://www.lipsiasoft.com/* per avermi aiutato a tradurre questo sito. Finalmente ora capisco perchè Curt voleva tre persone nel gruppo di traduzione! - -Un'ultima cosa: se qualcuno di voi trova un errore (e ce ne saranno molti, ne sono sicuro), o se ha un suggerimento per migliorare l'attuale traduzione, può "contattarmi":/about/: cercherò di correggere il sito quanto prima possibile. - -E ora, divertitevi con Ruby, ora anche "in italiano":http://www.ruby-lang.org/it/! -
@@ -1,81 +0,0 @@
------ -permalink: server-packages -filters_pre: -- bbcode -title: Easy-to-install server packages -comments: [] - -date: 2005-06-28 22:12:19 +02:00 -tags: -- review -- webdevelopment -- php -- databases -type: article -toc: true ------ -The first and most obvious difference between, say, a C++ programmer and a PHP developer is that the PHP developer needs a server with PHP support up and running somewhere in order to "show" others that the application is working. This normally means that a PHP developer must either have remote access to a server, or have one set up on his machine. Installing and configuring a server can be tricky sometimes, especially if you want to configure it "properly", but in some cases - for Linux/BSD users mainly - there are some pre-configured servers you can download and install. - -I won't examine all these methods in this article, but I'll describe three alternatives for installing and run a webserver on windows in 10 minutes or less. - -[b]Preliminary considerations[/b] -Let's assume that you just want to have a server set up on your computer for [i]internal use[/i] only, for testing purposes. That means that you wouldn't need to be concerned about "security" or similar issues - you just want to be able to run your PHP scripts and access your database(s) quickly and easily. - -As I said earlier, Linux users would probably opt for some package available for their favourite distros - they would only have to download and install an .rpm or .deb package for (presumably) Apache httpd, PHP and MySQL, and just use a basic configuration. There are other tools around which can help if you want to compile or configure Apache, but that is beyond the scope of this article. - -Let's just focus on Windows users, then. Normally they like things that are easy to install and can be configured in a few minutes [i]maximum[/i] or not at all. Finally, let's assume that as a Windows user, you don't want to spend more money for a new operating system with a bundled server, like Windows 2003, because you can use [url=http://www.apache.org]Apache[/url] on Windows as well, for free. Having said this, I actually found 3 possible solutions that are handy for PHP (or Perl) developers who don't want to spend time learning how to configure a server. There are people like that, including myself to some extent. - - -[b]WAMPserver[/b] -[url=http://www.wampserver.com]WAMP[/url] stands for "Windows Apache MySQL PHP", and I must say that this product happens to be my choice. The current version, available at the time of writing, offers: - -- PHP 5.0.4 -- Apache 1.3.33 -- MySQL 4.1.10a -- phpMyadmin 2.6.1-pl3 -- SQLitemanager 1.0.4 - -This is basically a fully working PHP5 environment, with other tools like phpMyadmin to administer your MySQL database even more easily (more laziness!), and, if you're into the new functionalities of PHP5, it also comes with sqlitemanager, a php application similar to phpMyAdmin but for sqlite databases, which are supported by default in PHP5. -You download it, you start the installation program, and it's DONE. That's it. In 5 minutes you have your own little apache/php/mysql(ite) environment up and running and you can start showing off your sites to your friends and co-workers right away. - -The program also installs two services which can be run at startup, a little icon in the system tray to access all the tools and, of course, http://localhost in your favourite browser. - -If all this is still not enough for you, and you want more things more easily, you can install addons to set up PHP4 (and seamlessly switch between the two with a single click!), Perl, Zend Accelerator, and so forth. - - -[b]EasyPHP[/b] -The second suite I will briefly describe is [url=http://www.easyphp.org]EasyPHP[/url]. This is a French project (like the previous one, actually), which offers PHP4, MySQL and Apache, plus phpMyAdmin to administer the MySQL databases. However, it doesn't offer PHP5 support yet (so it's not my favourite) and thus there's no sqlite support either. - -Apart from that, it works exactly like WAMP: you download it, you install it, and it's done. Services are installed and you have - again - your little icon on the system tray to access all its functions and tools. It works well, but it doesn't seem to have any add-ons available like WAMP does. - -[b]XAMPP[/b] -This is by far the most complete distribution of the three I am focusing on. This project is developed by [url=http://www.apachefriends.org]Apache Friends[/url] and has a lot of features and flavours. XAMPP currently includes: - -- Apache HTTPD 2.0.54 -- MySQL 4.1.12 -- PHP 5.0.4 + 4.3.11 + PEAR + Switch -- MiniPerl 5.8.6 -- Openssl 0.9.7g -- PHPMyAdmin 2.6.2-pl1 -- XAMPP Control Panel 1.0 -- eAccelerator 0.9.3 -- Webalizer 2.01-10 -- Mercury Mail Transport System for Win32 and NetWare Systems v4.01a -- FileZilla FTP Server 0.9.8a -- SQLite 2.8.15 -- ADODB 4.63 -- Zend Optimizer 2.5.7 -- XAMPP Security for Windows 98, 2000, XP - -Honestly, you can't ask for more! If by chance you want to run this suite on other platforms, there's a version for Mac OS X, Solaris, and even Linux. - -The installation method for XAMPP is slightly more difficult than the other suites - you actually have to download and unzip it in a folder of your choice. Then you're off and running. - -Unfortunately (or fortunately), there's no icon on the system tray, so you need to actually access http://localhost to get a list of services and tools. It also doesn't come with sqlitemanager, but you can download it and install it in the documents folder (like I did). - -I actually use XAMPP - the "lite" edition, which is smaller and has less features - for my USB drive. Since it doesn't require any services to be installed in order to run, you can simply copy it onto a USB stick and run it from there! - -[b]Conclusion[/b] -I'm quite impressed by all of the server packages I reviewed; WAMP and XAMPP in particular. I can now carry around my websites and applications and instantly run them or show them to anyone who has a computer with a USB port. - -As I said in the beginning, these programs are NOT meant to be used in a production environment or to be accessed publicly, therefore, security is not a consideration here. In my opinion, they are simply excellent for testing purposes, and for now, that's what I need them for.
@@ -1,74 +0,0 @@
------ -permalink: simply-on-rails-1-concepts-map -filters_pre: -- redcloth -title: "Simply on Rails - Part 1: Concepts and Bubbles" -comments: [] - -date: 2007-07-07 07:43:00 +02:00 -tags: -- rails -- website -- web20 -type: article -toc: true ------ -The first thing I do when I start developing a new application is write down some ideas. - -Pen and paper normally do the job, but nowadays there are some valid online and offline applications which work as good if not (probably) better. - -I've never been a fan of "Mind Mapping":http://en.wikipedia.org/wiki/Mind_Mapping. I've been to a seminar on problem solving and creativity and they were showing how mind mapping can unleash your creativity, but it didn't really work for me. I found the concept-idea-concept-idea sequences a bit too restrictive for my liking. - -So I decided to try something different: bubbles! "Bubbl.us":http://www.bubbl.us/ is an interesting online flash application which lets you create bubbles. You can create bubbles and relationships between them, change their color, their dimensions etc. And above all it's absolutely fun to use. I created two bubble sheets, the first one to define how content will be organized in the next version of ItalySimply: - -<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="450" height="340" id="bblviewer"> -<param name="movie" value="http://bubbl.us/sys/view.swf?sid=26306&pw=yaeyI.megNtZcMTh3azVsVjhwVEt0TQ" /> -<param name="quality" value="high" /> -<param name="SeamlessTabbing" value="false" /> -<param name="AllowScriptAccess" value="always" /> -<param name="FlashVars" value="_sid=26306&_title=ItalySimply%20v3%20-%20Content&_z=75&_pw=yaeyI.megNtZcMTh3azVsVjhwVEt0TQ" /> -<embed src="http://bubbl.us/sys/view.swf?sid=26306&pw=yaeyI.megNtZcMTh3azVsVjhwVEt0TQ" FlashVars="_sid=26306&_title=ItalySimply%20v3%20-%20Content&_z=75&_pw=yaeyI.megNtZcMTh3azVsVjhwVEt0TQ" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="450" height="340" allowscriptaccess="always" SeamlessTabbing="false" name="bblviewer"></embed> -</object> - -The diagram identifies three main types of content: - -* Houses - basically what the site is about: house listing with information and pictures about houses for sale or rent. -* Links - Either swapped with partners or suggested by users. -* Pages - Static content. - -which will be organized in three different ways: - -* Tags -* Categories -* An internal search engine, allowing people to filter houses according to some criteria. - -The other sheet focuses on relationships between content and users. - -<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="450" height="340" id="bblviewer"> -<param name="movie" value="http://bubbl.us/sys/view.swf?sid=26307&pw=yaeyI.megNtZcMTgxeUw0S0FSNzhFNg" /> -<param name="quality" value="high" /> -<param name="SeamlessTabbing" value="false" /> -<param name="AllowScriptAccess" value="always" /> -<param name="FlashVars" value="_sid=26307&_title=ItalySimply%20v3%20-%20Communication&_z=75&_pw=yaeyI.megNtZcMTgxeUw0S0FSNzhFNg" /> -<embed src="http://bubbl.us/sys/view.swf?sid=26307&pw=yaeyI.megNtZcMTgxeUw0S0FSNzhFNg" FlashVars="_sid=26307&_title=ItalySimply%20v3%20-%20Communication&_z=75&_pw=yaeyI.megNtZcMTgxeUw0S0FSNzhFNg" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="450" height="340" allowscriptaccess="always" SeamlessTabbing="false" name="bblviewer"></embed> -</object> - -At the far sides we have users and administrators, and in the middle how they interact between themselves or with content, in particular: - -* Users will be able to access house feeds and be notified automatically of new additions -* Users will be able to ask questions or comments to each house (they'll be moderated, of course). -* Users will be able to suggest links, or contact administrators using a "House Preferences" form or a more generic contact form. - -Bubbles are fun, but while I was creating these two diagrams, I felt I absolutely needed to name the relationships between each entity or concept, so I spend some time trying to find a tool who would let me do so in an easy and fast way. - -Yep, I needed to create a "domain model":http://en.wikipedia.org/wiki/Domain_model to move a bit closer to create the database architecture of the site. -It turns out that this magic tool exists, and it's free for non-commercial use: "CmapTools":http://cmap.ihmc.us/download/. -It's not web based, and it's a 59MB Java desktop application which can be used to create "Concept Maps":http://en.wikipedia.org/wiki/Concept_map. - -Within minutes I was able to create a simple but pretty and functional enough domain model for my site: - -!/files/ItalySimply-v3_domain-model.jpg! - -Basically all the concepts I used are going to become models, and all the named relationships will become model associations in Rails. - -Next step: database architecture.
@@ -1,31 +0,0 @@
------ -permalink: simply-on-rails-2-database-design -filters_pre: -- redcloth -title: "Simply on Rails - Part 2: Database Design" -comments: [] - -date: 2007-07-14 11:27:00 +02:00 -tags: -- rails -- databases -type: article -toc: true ------ -This week I attended a course for work on how to _Implement Databases with Microsoft SQL Server 2005_. An interesting course indeed, which made me realize how feature-rich Bill's product is, compared to the Open Source alternatives like MySQL. It also made me realize how nice it is to implement database-related logic (read: Models) using a _proper_ programming language rather than using triggers, stored procedures, functions and other goodies offered by Transact-SQL. - -It's all a matter of taste and of necessities: using MS SQL Server for one of my website is simply not going to happen anytime soon, and I'm more than happy to have a database which can be used _just_ as a database and a programming language (Ruby, in this case) which can do wonders, rather than a procedural-only surrogate. - -Anyhow, back to our weekly series. After creating a "concept map":/blog/simply-on-rails-1-concepts-map, it's time of _get real_ and try to figure out a database architecture. The tool of choice this week is obviously the widely popular "DbDesigner 4":http://fabforce.net/dbdesigner4/. It's free, it's easy to use, and the results are pretty enough. There: - -!/files/italysimply_database-architecture_thumb.png!:/files/italysimply_database-architecture.png - -It's amazing how a relatively simple concept map can lead to such a complex database architecture, isn't it? -Well, it's normal. One of the reasons of this is that I totally forgot about geographical information about the houses which will be featured on the site, or better, I thought about it as a _strings_ typed in by the administrators, whereas it would be much better having dropdown boxes. - -Countries, regions, privinces, areas and cities will be added to the database only once, rather than having to type them in every time a house is added. Obvious, but this lead to five tables more and nine (!) relationships more. - -The other reason of why the number of tables is higher than the number of entities in the domain model is that I decided _not_ to use the ENUM type. Firstly because "it's not handled very well by Rails":http://wiki.rubyonrails.org/rails/pages/HowtoUseSetAndEnumColumns - and also because there's "a number of reasons":http://blog.arabx.com.au/?p=87 why ENUMs should not be used. - -The only problem now is that whenever I load a house, I'll have to get data from a lot of tables at once (and this means a lot of joins underneath the model layer) or - worse - a lot of queries in case I decide to load related data "on the fly". It looks like I'll have to do a bit of "piggy-backing":http://railsexpress.de/blog/articles/2005/11/06/the-case-for-piggy-backed-attributes here and there. "Someone":http://railsexpress.de/blog/articles/2006/05/29/simpler-piggy-backing already thought about a way of doing this in a more "Model-friendly" way. Perhaps I'll give it a shot.
@@ -1,196 +0,0 @@
------ -permalink: simply-on-rails-3-shared-controller -filters_pre: -- erb -- redcloth -title: "Simply on Rails - Part 3: LiteController" -comments: -- :date: 2007-09-08 04:26:55 +02:00 - :author: Aleksandr - :url: http://www.ajaxrussia.com - :id: 58 - :body: Why aren't you using REST? -- :date: 2007-09-08 04:39:37 +02:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 59 - :body: |- - @Aleksandr: - - Good question! - - The answer is that being it my first project in Rails, I was still a bit unsure about REST. - - <spoiler> - On a side note, I'm currently considering using "ActiveScaffold":http://activescaffold.com/ for things like this now... Will blog about it soon-ish. - </spoiler> -date: 2007-07-22 06:03:00 +02:00 -tags: -- rails -type: article -toc: true ------ -Enough with concepts, ideas and diagrams: it's time to start coding something. Everyone knows what's the first step when creating a Rails applications, but anyhow, here it is: - -<% highlight :ruby do %> -rails italysimply -<% end %> - -Then I create a new development database, load it up with the schema I "previously":/blog/simply-on-rails-2-database-design prepared and modify the @config/database.yml@ to be able to connect to it. Nothing new here. -I actually had to modify the schema a little bit: - -* I changed all the names for the foreign keys to something more evocative than "has_many" or "has_one" -* I added a _level_ column to the _states_, _availabilities_ and _conditions_ table -* I removed the _description_ column from the categories table - -Great, but... hang on: now some of the database tables look awfully similar with each other: - -* statuses -* states -* roles -* types -* tags -* conditions -* availabilities -* categories - -They all have a name column, some of them have a name column as well, they'll hold only a relative small number of records which will hardly ever be deleted. In fact, I was tempted to use Enums for some of those things... -Anyhow, I'll still have to add and modify data in those tables, so it looks like I kinda need to create 8 controllers, 8 models and about four views for each one of them. No way. Fair enough for the controllers and models, but I'm not going to create 32 views which all look exactly the same. Rails should be smarter than that!And it is, luckily. Derek Sivers & C. came out with an interesting "Shared Controller":http://dereksivers.com/rails-shared-controller.html concept, which could be just what I'm looking for in this case. Actually I need something really simple in this case: - -* Put all the CRUD logic into one controller -* Create only one set of views - -Here's the controller: - -%{color:red}*app/controllers/admin/lite_controller.rb*% -<% highlight :ruby do %> -class Admin::LiteController < ApplicationController - - layout 'admin' - - before_filter :prepare - - def prepare - @item_name = model.to_s - end - - def index - list - end - - verify :method => :post, :only => [ :destroy, :create, :update ], - :redirect_to => { :action => :list } - - def list - ordering = model.column_names.include?('level') ? 'level ASC' : 'name ASC' - @items = model.find(:all, :order => ordering) - render('lite/list') - end - - def show - @item = model.find(params[:id]) - render('lite/show') - end - - def new - @item = model.new - render('lite/new') - end - - def create - @item = model.new(params[:"#{@item_name.downcase}"]) - if @item.save - flash[:notice] = @item_name+' was successfully created.' - redirect_to :action => 'list' - else - render('lite/new') - end - end - - def edit - @item = model.find(params[:id]) - render('lite/edit') - end - - def update - @item = model.find(params[:id]) - if @item.update_attributes(params[:"#{@item_name.downcase}"]) - flash[:notice] = @item_name+' was successfully updated.' - redirect_to :action => 'list' - else - render('lite/edit') - end - end -end -<% end %> - -Then all I need to do is create eight controllers with just a few lines of code in each: - -%{color:red}*app/controllers/admin/statuses_controller.rb*% -<% highlight :ruby do %> -class Admin::StatusesController < Admin::LiteController - def model - Status - end -end -<% end %> - -Basically, I just need to specify which model the specific controller takes care of, Ruby's inheritance does the rest. The model name will be passed to the views like this: - -%{color:red}*app/controllers/admin/lite_controller.rb*% -<% highlight :ruby do %> -def prepare - @item_name = model.to_s -end -<% end %> - -And each method uses the @model@ method to access the model, like this: - -%{color:red}*app/controllers/admin/lite_controller.rb*% -<% highlight :ruby do %> -def create - @item = model.new(params[:"#{@item_name.downcase}"]) - if @item.save - flash[:notice] = @item_name+' was successfully created.' - redirect_to :action => 'list' - else - render('lite/new') - end -end -<% end %> - -Note how the params are collected: - -<% highlight :ruby do %> -@item = model.new(params[:"#{@item_name.downcase}"]) -<% end %> - -@params[:"#{@item_name.downcase}"]@ at runtime becomes @params[:status]@ or @params[:role]@ etc. etc., depending on which controller is called. Sweet. - -The views? Modified accordingly: - -%{color:red}*app/views/lite/edit.rb*% -<% highlight :ruby do %> -<h1>Editing <%= @item_name %></h1> - -<% form_tag :action => 'update', :id => @item do %> - <%= render :partial => 'lite/form' %> - <%= submit_tag 'Edit' %> -<% end %> - -<%= link_to 'Show', :action => 'show', :id => @item %> | -<%= link_to 'Back', :action => 'list' %> -<% end %> - -%{color:red}*app/views/lite/_form.rb*% -<% highlight :ruby do %> -<%= error_messages_for 'item' %> -<!--[form:lite]--> -<p><label for="<%= @item_name.downcase %>_name">Name: </label> -<%= text_field @item_name.downcase, 'name', {:value => @item.name} %></p> -<% if @item.methods.include?('level') then %> - <p><label for="<%= @item_name.downcase %>_level">Level: </label> - <%= text_field @item_name.downcase, 'level', {:value => @item.level} %></p> -<% end %> -<!--[eoform:lite]--> -<% end %>
@@ -1,130 +0,0 @@
------ -permalink: simply-on-rails-4-default-data-migrations -filters_pre: -- erb -- redcloth -title: "Simply On Rails - Part 4: Quick and Easy Default Data Migrations" -comments: -- :date: 2007-09-15 23:41:30 +02:00 - :author: Pei Mei - :url: http://www.railsjitsu.com/ - :id: 76 - :body: "Very nice. I still prefer to include my migrations as rails code User.create() in my migrations to avoid having developers create dodgy yaml files though, especially with pks.\n " -- :date: 2007-09-16 02:40:46 +02:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 79 - :body: Indeed, indeed you are right. You have to be careful when you prepare the YAML files, and in certain situation (and for certain kind of data) a more standard approach is recommendable. -- :date: 2007-11-27 16:35:58 +01:00 - :author: Mike - :url: http://www.floristone.com - :id: 137 - :body: |- - Cool code and post. I second the idea of using Migrations with such application. - - Thanks -- :date: 2007-12-22 02:47:20 +01:00 - :author: Electrical Repair - :url: http://www.asaprepair.com/content/Electrical-Repair/ - :id: 171 - :body: | - Migrations would make the application much more flexible in terms of moving it among different DB servers and more. - -date: 2007-09-15 13:10:00 +02:00 -tags: -- rails -- ruby -- databases -type: article -toc: true ------ -In the "last post":http://www.h3rald.com/blog/simply-on-rails-3-shared-controller of this series I tried to find a DRY(Don't Repeat Yourself) solution to deal with tables storing "ancillary" data, i.e. names of user roles, predefined categories, page state names and other similar things. -I personally chose to put this kind of data to make my application more dynamic, although I could have decided to use ENUMs or simply ordinary varchar fields -- that would have been easier, but less flexible. For now, I'm sticking with my original choice. - -The data in these tables is kind of a prerequisite for the application to run: I must be able to have a status to assign to a user when creating it, and the same applies to roles. Sure, I could spend 20 minutes populating these tables manually, but it would be nice if there was a less tedious way, wouldn't it? - -There is indeed. The inspiration came from a technique described in the book (which I highly recommend) _Agile Web Development With Rails_, in which the author outlines how it would be possible to use Rails' fixtures and migrations to load data in the database automatically from YAML files. -All you have to do is create a migration to load the specified YAML files and you're all set. - -I wanted to take a little step further, allowing the migration to load data from _all YAML files in a specific directory_, automatically.Let's start creating the YAML files then and place them all in one directory of the application like @/db/migrate/defaults@. Here's the one I used for user roles, for example: - -<% highlight :yaml do %> -visitor: - id: 1 - name: Visitor - level: 0 - -user: - id: 2 - name: User - level: 10 - -contributor: - id: 3 - name: Contributor - level: 20 - -provider: - id: 4 - name: Provider - level: 50 - -operator: - id: 5 - name: Operator - level: 100 - -administrator: - id: 6 - name: Administrator - level: 500 - -webmaster: - id: 7 - name: Webmaster - level: 1000 -<% end %> - -The important thing to remember is to provide a unique string to identify each record, before specifying each fiels. The other files look similar, so I won't bother listing them here. - -And here's the simple code for the migration: - -<% highlight :ruby do %> -require 'active_record/fixtures' - -class LoadDefaults < ActiveRecord::Migration - - def self.up - down - models = self.default_models - models.each do |m| - Fixtures.create_fixtures(self.default_directory, m) - end - end - - def self.down - models = self.default_models - models.each do |m| - eval("#{m.singularize.capitalize}.delete_all") - end - end - - def self.default_directory - File.join(File.dirname(__FILE__), "defaults" ) - end - - def self.default_models - files, names = Dir.glob("#{self.default_directory}/*.yml"), [] - unless files.blank? - files.each { |f| names << File.basename(f, '.yml') } - names - else - [] - end - end - -end -<% end %> - -Basically the migration will look in a directory named "defaults" for some YAML files named after a particular database table, and it will attempt to load all the records defined in each one of them. -The @down@ method of the migration _deletes all the data in the specified tables_, so use with care...
@@ -1,41 +0,0 @@
------ -permalink: simply-on-rails-intro -filters_pre: -- redcloth -title: Simply on Rails? -comments: [] - -date: 2007-06-30 06:00:00 +02:00 -tags: -- rails -- web20 -type: article -toc: true ------ -So finally my site is back up, I don't have to worry about coding anymore: just writing about whatever I like, no more Cake, no more MVC, no more frameworks... - -_What do you mean no coding anymore? You've been bragging about how this Rails thing is fast, how you can develop things easily, and this, and that... You *know* what you have to do now_ - -^^^ That was my fiancée, actually, and she's right: my web development days are far from being over, actually. I admit I tried to get away from it, but she kindly reminded me (and she can be _very_ persuasive) that now I have to fix "ItalySimply":http://www.italysimply.com/, the site I created a while a go (4 years?) with a mixture of Mambo (the CMS, now Joomla) and spaghetti PHP. - -A sort-of-real-estate thingie visited by people who want to move to Italy or simply buy a house here. And it's due a makeover, to be honest. - -How am I gonna manage this? Let's see... - -h3. COW - -COW \- Code On Week-ends. my web development methodology: simple, effective, basically my only choice. Actually the full name is COW (IYL): Code On Week-ends _If You're Lucky_, i.e.: if we're not going out, if there's nothing better to do, if I feel like it. No deadlines (almost), no plans to follow, nothing. - -No, I'm not terribly motivated to take on this project, but I already thought about two things to get me going: - -* *Get "Agile Web Development with Rails":http://www.pragmaticprogrammer.com/titles/rails/* \- I read bits of the first edition, and that's what got me started with Rails, now it's time to buy the real thing. -* *Blog about it* \- I'll _try_ to keep a diary of my coding efforts and share the most juicy bits with the rest of the world. In this way I'll also have content for my site and the three people who read this blog will have something (hopefully) interested to read. - -h3. The Cunning Plan - -Instead of getting out of troubles by simply tidying up some PHP code or migrate the site to Joomla, I'd like to re-code the whole thing from scratch using Rails. Ideally I'd like to migrate quite a bit of the content (including the hundreds of houses with pictures which were published over the years), but at the moment I'm not thinking about it: after all, in the end the site will be so addictive and easy to use that adding hundreds of houses back on will be just so much fun! Right? Yeah, right... - -First of all I'll spend quite a bit of time planning the application and what has to be done, then I'll have to practice a little bit with Rails, and then, eventually, I'll end up writing some code. Of course, suggestions and ideas will be more than welcome throughout all the process. - -Let's see how it goes... -
@@ -1,144 +0,0 @@
------ -permalink: slax -filters_pre: -- bbcode -title: Slax - A small, complete and 'nice-looking' Linux live distribution -comments: [] - -date: 2006-02-05 17:17:46 +01:00 -tags: -- review -type: article -toc: true ------ -How can I learn how to use Linux? Simple, you grab a copy of any of the twelve thousands different 'distros' available out there, and you install it on your PC, hoping not to damage your existing Windows installation (if any). Or there's a more lazy and safe way, get one of the few dozens of 'Linux live CDs', burn the cd, boot from it, and you're all set...It's true, nowadays the best solutions for Linux newbies is trying out a few [i]live CDs[/i] before installing [i]the real deal[/i] on their machines: it's safe(r), takes less time and it's much more fun. Yes, some people may object saying that the fun in learning Linux is installing it on your hard drive first, but a few people I know who 'accidentally' overwrote their Master Boot Record or 'accidentally' damaged their Windows installation might disagree there... - -A live distribution[1] basically is a CD (or DVD or USB drive) containing a fully working operating system - Linux in the specific - which can be run directly from the CD itself and does not require an hard disk installation. The drawback is that normally some part of the operating system are loaded and run from a [i]ram disk [/i] and therefore the data written there will be erased once the system reboots. Due to the nature of CDs, saving data on the CD itself is obviously not possible, and this limitation can normally be bypassed by saving changes within a file to store either on your hard drive, remotely, or on some other media which allows read/writing like a floppy disk or USB stick. - -Linux is well known for the many different distributions available, each with its own features, pros and cons. The same happens for live distros: in the last few years the number grew a lot[2] and nearly all major distributions now have a [i]live[/i] counterpart, mostly to allow new users to preview their product. - -The most famous, and possibly one of the first LiveCD ever made was Knoppix[3], a Debian[4]-based CD featuring a KDE[5] desktop environment and many useful applications [i]squeezed[/i] into 700MB of space which can be used as a fully functional operating system. Add to this a truly impressive on-the-fly hardware detection ability, and there's the [i]best[/i] (arguably) multi-purpose linux Live distribution ever made. -If Knoppix is "so perfect", why do other distributions exist at all? Well, some people noticed that they wanted to remove something from the collection of applications Knoppix included in the default CD, others wanted to add other bits, so soon a long list of Knoppix-based [i]customized[/i] distros followed[6]... - -This is another story, I'd like focus my attention on perhaps the most valid Knoppix-alternative out there: Slax[7]. - -[b]Size vs. Features[/b] -Knoppix was the first Live CD I tried, but I didn't like one thing about it: its size. 700MB means one CD, and one CD means that I can't carry it in my pocket now can I? Not literally, anyway, at least not comfortably. So I started looking for a smaller alternative, and I found various possible candidates. Damn Small Linux[8] was one of the most extreme: 50MB in total, nothing more, nothing less, and it worked! Alright, I must say that now it's much better than it was when I first tried it but, it was more or less functional at the time (2003), although relatively new on the scene. -I liked it, really but, due to its size self-limitations the user interface wasn't too pretty, and the applications included weren't exactly what I was looking for: when you're used to Firefox (or better, Firebird, at the time) to browse the Net, Dillo[9] doesn't really look exactly appealing and feature-rich - although remarkable for its size. - -I decided that I wanted something more than that, also because I was planning to burn the live-linux distro on a [i]brand new[/i] (at the time) 8cm CD-RW with 180MB of space available. The best solution I could find, at the time and still now, perhaps, was Slackware Live CD, a very promising live distribution based on Slackware Linux[10]. -I was very impressed at the time, especially for the effort the developer put to create a mini-distribution which is also user-friendly and nice-looking as well, incorporating the KDE Desktop. These are not the only strengths of the project, as we'll see in the next sections but, certainly the first thing everyone can notice. - -After a while the project changed names and became "Slax", perhaps to create its own identity and expand itself following a different direction than its non-live predecessor: while the 'real' Slackware is often quite cautious on using latest technologies and normally includes [i]stable[/i] packages, Slax does quite the opposite, including more recent applications and solutions. - - -[b]Overview[/b] -Slax website[7] evolved quite a bit through the years, and now it's a true example of clarity and exhaustiveness. An essential clean design, access to a lot of information on how to use the live CD, solutions to common problems and also something for developers interested in creating their own live distro: the truly remarkable thing is that the biggest part of the work is done - apparently - by one single person, Tomas Matejicek[11], the founder of the project. - -The strength of Slax - as I anticipated before - is perhaps its ability to compress a few carefully selected, commonly used applications which allow the user to fully enjoy his live experience in 177MB of space. Certainly the choice of using the K Desktop Environment instead of a more lightweight one like Fluxbox or Xfce may seem illogical, but for sure new Linux users would feel more "at home" with KDE, especially if coming from Windows XP. KDE is by far the most user friendly desktop environment available for Linux, and Slax made it even more user friendly by carefully organizing menus in an optimal way without cluttering the desktop with a myriad of icons and overly-crowded navigation bars. -When it comes to the applications included, Slax offers nearly everything the average desktop user needs: word processor (KWord), spreadsheet (KSpread), browser (Konqueror), multimedia player (Kplayer), editors, games and much more[26]! In its simplicity and especially for its size, Slax is a well-rounded, multi-purpose distribution. There's an interesting article available on tuxs.org[12] which documents the author's [i]personal challenge[/i] of using [i]only[/i] Slax (version 4.1.4 at the time) for a whole week. Surprisingly, the writer was really impressed of the features offered by this little distro: he was able to connect to the Net, browse the web, check his mail, write and do various other "everyday task", with no difficulty or extra hassle. - -Slax is also [i]very[/i] fast: normally some other live CDs compress [i]the whole[/i] operating system on a single file, or a few, while Slax developed an optimized modular architecture: groups of programs or even single applications are compressed [i]separately[/i] into .mo files: this technique sensibly increases the performance and speed of the operating system: whenever I open KWord, for example, to write an article, the OS will access [i]just[/i] the KWord module on the disk, without touching other modules. -[i]Surely there's a way to add/remove modules...[/i] - Yes, there is, and this will be discussed later on. - -Finally, like various other live distros, Slax supports some handy "cheatcodes" which can be used to boot customize some options when booting the operating system. - -Some of the most interesting codes include: - -[code] -boot: slax webconfig=passphrase -boot: slax webconfig=ask -[/code] -This is a recent feature: Slax allows users to save their settings remotely, directly on Slax server. Every user has to choose a 10+ characters password in order to use this feature[27]. - -[code] -boot: slax toram (just alias for copy2ram) -boot: slax copy2ram -[/code] -This code can be used to copy the entire operating system to your computer's RAM: this may make the booting process slower, but Slax will run faster than light afterwards (256MB+ ram required) - -[code] -boot: slax changes=/dev/device -[/code] -Saves changes to a specified device using any linux filesystem, like a hard drive or a usb stick. - -[code] -boot: slax load=module -[/code] -Load optional modules stored in the /optional/ directory. For further information about modules, see the "Make your own!" section below. - -For a full list of all Slax cheat codes, see the cheatcodes page[13] on Slax website. - -[b]Different flavors[/b] -I defined Slax a multi-purpose mini distribution, but as always different people have different needs: some users may want to be able to run some windows applications through Wine[14], for example, or may prefer a more lightweight Desktop Environment. The huge - and logical - limitation of all live CDs is that they normally don't offer the possibility of adding applications and packages: when the operating system starts the "root" partition is transferred onto a ramdrive which allows - even if until reboot - read/write access. Although this limitation can be overcome at least through using some of the cheatcodes described before, having the application already installed could be much easier. - -That's why Slax developers decided to start creating different [i]flavors[/i] of Slax. Some of them are not available at the moment (the current slax version at the time of writing is 5.0.6), and others can be already downloaded from the official site[15]. - -[u]Slax "Kill Bill"[/u] - This is the first Slax customization which became available, and came out more or less at the same time as Tarantino's movie. [i]Bill[/i] Gates didn't seem to mind at all, even if this version actually allows users to run [i]some[/i] Windows applications like notepad on linux. Basically Wine[15] dosbox[16] and qemu[17] can make this possible, with limitations... nothing too exciting but, definitely fun to try out. - - -[u]Slax "Server"[/u] -[quote]SLAX SRV is a pocket operating system with many internet services ready to use. Includes DNS, DHCP, SMB, HTTP, FTP, MySQL, SMTP, POP3, IMAP, SSH.[/quote] -Unfortunately, this flavor of Slax is not yet available for download, but some updates concerning its status are available on the developer's TODO list[18]: - -[i]SE: mysql up and running -SE: httpd up and running, with PHP with MySQL -SE: DNS server up and running as a cache server -SE: DHCP server included but not started automatically, could confuse local network -SE: SSH server up and running -SE: MAIL server up and running, needs testing -SE: FTP server up and running[/i] - -This is definitely going to be an interesting project, and I'm really looking forward to it. In the meantime, there are two server-oriented live distribution available, which is also based on Slax: Slampp[19] and in particular Slampp Lite[20]. I tried Slampp Lite and I was really satisfied with its features: support for PHP, Perl, Python on Apache (basically includes XAMPP for Linux[21]), xfce desktop environment, the latest Firefox browser, antivirus, firewall, and more. - -[u]Slax "Popcorn"[/u] -This Slax flavor is more minimalist, and substantially different from the Standard Edition. For a start it features the more lightweight xfce Desktop Environment[22], and thus removes all KDE-based applications making more room for Firefox browser and Abiword, which are not included in the Standard version due to the presence of their [i]KDE counterparts[/i] (Konqueror and Kword). -Very fast, simple, and fits 128MB: suitable for small USB keys more than anything. - -[u]Slax "Frodo"[/u] -As the name implies, this version is smaller again (47MB), and it's basically the base for all other flavors as it includes just a Linux console and some scripts for hardware detection and setting up the live environment. - -[b]Make your own![/b] -[i]Nice! But I'd have included X instead of Y, then added Z as well, perhaps...[/i] -That's a common feeling: the truth is that people are never happy with what they get! If you're still not happy with what Slax in all its different flavors can offer you, well, you can make your own. Although some might want to start more or less from scratch, creating [i]Slax-based[/i] customizations (this was the only option until the more recent versions), now there's an easier way: modules and the documentation present on the official site is complete enough and describes the necessary steps to take to create, modify and use them[23]. Modules are basically files with .mo extension containing an application which will be loaded by Slax at startup, if placed in the /modules/ directory, or only if required by the user (see the corresponding cheatcode) if placed in the /optional/ directory. The easiest way to create a module which requires no particular skill is converting a Slackware package, by issuing this command: - -[code]tgz2mo application.tgz application.mo[/code] - -Of course there are other ways to create modules without converting Slackware packages, further details in the documentation[23]. There are also a lot (currently 576!) of user-contributed modules ready for use available for download and hosted on the Slax site[24], the only problem is that inevitably some of them seem to be out-of-date, and not constantly updated by their maintainers. - -Last but not least, the dream of all Windows users: MySlax Creator and MySlax Modulator[25], which allow Windows users to create their own Slax distribution with custom modules both for CD and USB drive and create Slax modules on windows respectively. Two really nice additions which make this project even more (Windows-)user-friendly! - -[b]Conclusions[/b] -Slax is exactly how advertised on its website: [i]"[a] fast and beautiful Linux operating system which fits on small (3.14") CD-ROM disc"[/i], nothing more, nothing less. Personally, I'd like to emphasize its user-friendliness, as it seems the most valid alternative to Knoppix, and perhaps even better: it does not include [i]as many applications as possible[/i] which could confuse Linux neophytes but, just a bunch of useful programs for everyday use to give users a [i]taste[/i] of what Linux is capable to do. -Normally, as Slax is mostly maintained by one person, Slax releases are not too frequent: normally 2-3 per year maximum. The version which was tested for this article was the 5.0.6 and (un)luckily a new one [i]just came out[/i] while I was writing the article: version 5.0.7b is now available for download[15] and features KDE 3.5. A few bugs were discovered immediately after its released and quickly fixed with a patch-module (hence the "b"): This YOUR chance to try it out before I do... - -Happy Sla[i]x[/i]ing! - - -[1]Linux Live CD - Wikipedia: [url]http://en.wikipedia.org/wiki/Linux_live_cd[/url] -[2]DrozenTech's LiveCD List: [url]http://www.frozentech.com/content/livecd.php[/url] -[3]Knoppix Official Site: [url]http://www.knoppix.org/[/url] -[4]Debian Official Site: [url]http://www.debian.org/[/url] -[5]K Desktop Environment: [url]http://www.kde.org/[/url] -[6]Knoppix Customizations: [url]http://www.knoppix.net/wiki/Knoppix_Customisations[/url] -[7]Slax Live CD: [url]http://slax.linux-live.org[/url] -[8]Damn Small Linux - Official Page: [url]http://www.damnsmalllinux.org/[/url] -[9]Dillo Browser, Official Page: [url]http://www.dillo.org/[/url] -[10]Slackware Linux, Official Page: [url]http://www.slackware.com/[/url] -[11]Slax - Developer's page: [url]http://slax.linux-live.org/credits.php[/url] -[12]Barney Matthews, "A week with Slax 4.1.4" - Tuxs.org: [url]http://www.tuxs.org/slax.htm[/url] -[13]Slax cheatcodes: [url]http://slax.linux-live.org/cheatcodes.php[/url] -[14]Wine HQ: [url]http://www.winehq.com/[/url] -[15]Slax download page: [url]http://slax.linux-live.org/download.php[/url] -[16]Dosbox Project: [url]http://dosbox.sourceforge.net/news.php?show_news=1[/url] -[17]Qemu Project: [url]http://fabrice.bellard.free.fr/qemu/[/url] -[18]Slax TODO list: [url]http://slax.linux-live.org/todo.php[/url] -[19]Slampp Official Page: [url]http://slampp.abangadek.com/wiki/wikka.php?wakka=HomePage[/url] -[20]Slampp Lite page: [url]http://slampp.abangadek.com/wiki/wikka.php?wakka=SlamppLite[/url] -[21]XAMPP for Linux: [url]http://www.apachefriends.org/en/xampp-linux.html[/url] -[22]Xfce desktop environment, official page: [url]http://www.xfce.org[/url] -[23]Slax Documentation - Modules: [url]http://slax.linux-live.org/doc_modules.php[/url] -[24]Slax modules page: [url]http://slax.linux-live.org/modules.php[/url] -[25]MySlax Projects: [url]http://myslax.bonsonno.org/[/url] -[26]Slax - installed packages: [url]http://slax.linux-live.org/installed_packages.txt[/url] -[27]Slax - Webconfig: [url]http://slax.linux-live.org/webconfig.php[/url]
@@ -1,323 +0,0 @@
------ -permalink: social-bookmarking-services -filters_pre: -- redcloth -title: Review of ten popular social bookmarking services -comments: -- :date: 2007-06-29 08:22:18 +02:00 - :author: Marc - :url: http://www.socialmarc.com - :id: 11 - :body: |- - Great Review! Do you have one for - social bookmarking in the enterprise - ? -- :date: 2007-06-29 11:22:57 +02:00 - :author: Fabio Cevasco - :url: "" - :id: 12 - :body: "Hello Marc,\n\n\ - Nice try, you did indeed made me look at your site - which by chance features a social bookmarking service for enterprises - but I don't think I'll focus on that right now.\n\n\ - I work for quite a large company who's more inclined in using IBM and Microsoft products, rather than new Web 2.0 startups - not that that's necessarily a good thing, by any means. I'd just like to ask you: how do you plan to convince large enterprises to use your service? " -- :date: 2007-12-15 12:05:29 +01:00 - :author: Raaj - :url: "" - :id: 168 - :body: | - Thsi bookmarking and social networking stuff is going hot on the web. I do like your approach, would you please write a review about http://www.Tagza.com - Its young, funky new bookmarking web site. - - Cheers - - Raaj - -- :date: 2008-09-28 20:46:27 +02:00 - :author: heath - :url: "" - :id: 262 - :body: | - I would add www.IPopU.com to that list, its a pretty big Social Bookmarking site with 15,000+ members, and tens of thousands of submissions already. Clean simple layout, easy navigation, quick and easy submissions.Many categories to suite a variety of niches across the net. - - Check it out. - -- :date: - :author: sam2008 - :url: "" - :id: 433 - :body: |- - Most social bookmark services encourage users to organize their bookmarks with informal tags instead of the traditional browser-based system of folders, although some services feature categories/folders or a combination of folders and tags. - =============================================== - Sam - <a href="http://www.widecircles.com">Social Bookmarking</a> -date: 2006-05-13 15:06:27 +02:00 -tags: -- web20 -- review -- internet -type: article -toc: true ------ -Social bookmarking[1] is perhaps one of the pillars of Web 2.0, allowing people to save, tag and share their Internet bookmarks online anytime, anywhere. Since _del.icio.us_[2] came out, the Web is not the same anymore: no more IE favourites or Firefox bookmarks, no more "Save page as..." etc., people nowadays want to do _everything_ online without being bond to a single computer, and also make everything they do or read public - apparently. This is one of the key concepts of Web 2.0[3]: sharing information in a quick and easy way, without any restrictions.Del.icio.us was the first, but of course not the only one social bookmarking system which became popular in a few months: many other followed its example, many companies developed their own alternative to del.icio.us, adding and removing features, changing bits etc. etc. Result: someone said that _"[...] There is almost 1 new social bookmark/digg like service appears one daily basis [...]"_[4]. - -Nice, and there are also many reviews of each one as well[5]! Here's another one... - -<blockquote> -*Preliminary Notes*: This round-up does _not_ include _all_ social bookmarking sites and yes, there are a lot missing. I decided to pick 10 services out of the dozens available for one simple reason: make this article more readable. I'm really sorry if your favourite social bookmarking site is not listed: if you feel creative you can add your (short!) review as a comment to this article. -Although I recently wrote a very positive review of Ma.gnolia[6] and I know its lead developer, I do _not_ consider myself partial towards Ma.gnolia, you'll notice when I review it. -</blockquote> - - -h3. Common features and concepts - -The social bookmarking sites reviewed in this article are: del.icio.us[2], Ma.gnolia[7], Furl[8], Spurl[9], Yahoo MyWeb 2.0[10] Blinklist[11], Smarking[12], Shadows[13], Simpy[14] and Blogmarks[15]. - -All these social bookmarking sites have some features in common which can be used to define _social bookmarking_ itself: - -* They allow users to save URLs online, adding some notes to it, and share them with others -* Each url can be _tagged_ with custom tags user can create and manage -* RSS is widely supported, so you can included your "recent bookmarks" in your blog, for example -* They allow users to import/export bookmarks in various formats -* They support the creation and management of user profiles -* Bookmarklet, buttons or other cute little things are provided to make your life easier and bookmark faster - - Such features will not be mentioned over and over in each review, of course. - -h3. Review parameters - -Besides an overview for each service and some notes regarding their intended _audience_, some other parameters will be considered and rated from 0 to 10 (the higher, the better): - -_Speed_ -I'm currently on dialup, and so I'll be able to effectively test the speed and rendering time of each site. The higher the mark, the faster the site is. - -_Features_ -Notes concerning added/missing features, and overall features rating. - -_Simplicity_ -Do you need to be a certified geek(TM) in order to use the service or even your dog can learn how to use it, if he tries hard? - -_Interface/Design_ -This parameter concerns the visual appearance of a website. Note: it can be particularly subjective, I'll try my best to be objective. - -_Userbase_ -Basically the amount of people which use a determined service. - -Ready to go... - -h3. "del.icio.us":http://del.icio.us/ -!>/img/pictures/socbook/delicious.gif! - -* *Speed:* 10 - This is by far the fastest site to load, perhaps because it doesn't have any fancy eye-candy at all -* *Features:* 6 - del.icio.us offers only the most essential features, nothing too fancy, but nothing too bad either -* *Simplicity:* 6 - You need some time to get used to it, but it's not confusing like some others. Hardly any documentation or tutorial provided, but hey, this is the geek's choice after all -* *Interface/Design:* 6 - Personally I like it, but I know I have no taste for design and interfaces. An average user would say that it's too plain and no, nothing fancy at all -* *Userbase:* 10 - Judging by the amount of people coming to my site after one of my article made it to digg, compared to other social bookmarking services, this is BY FAR the most used one. Everyone has a del.icio.us account, then, maybe, something else -* _*Overall Rating: 7.6*_ - -*Overview* -This is THE social bookmarking service, it is the first, the most supported (every other service allows importing from del.icio.us), and the most used, with several thousands of registered users. Obviously, this made it the main term of comparison for other bookmarking services, which claim to be _better_ because they are successful exactly where del.icio.us is lacking, e.g.: - -* Eye candy -* they offer better user interaction (comments, messages) -* Ratings are supported -* More AJAX and effects -* Other sites cache bookmarks internally or may offer thumbnails - -Nevertheless, del.icio.us still remains the geek's choice, the numbers speak by themselves. It is also my choice at the moment, because of its simplicity (in the sense of "no useless things are included") and speed. - -*Suitable for:* IT professionals, computer enthusiasts, tech-savvy people in general. Your old auntie probably won't like it, but at least she'll keep away from it and leave you in peace. - -h3. "Ma.gnolia":http://ma.gnolia.com/ -!>/img/pictures/socbook/magnolia.gif! - -* *Speed:* 5 - It's a bit slow if compared to competitors. Maybe it's just me, maybe it's the server, maybe it's Ruby on Rails. -* *Features:* 7 - Saved copies, AJAX 5-star ratings, AJAX private/public lock, groups & messages -* *Simplicity:* 8 - Fairly simple to learn and use, excellent documentation online -* *Interface/Design:* 10 - I really like Ma.gnolia's website design over all the others: clean, simple and professional with AJAX features in the right place. -* *Userbase:* 6 - It's fairly new so not many people are using it. It's being pushed by Zeldman & ALA's crew though -* _*Overall Rating: 7.2*_ - -*Overview* -This _was_ my first choice and the first social bookmarking site I reviewed[6] and tried properly. It is developed in Ruby on Rails and it excels in simplicity and visual appearance, but it has some rather annoying CONs. First of all it's a bit slow for my liking, especially now that I'm on dialup. Second, the search is currently limited to tags only: it's obviously a temporary thing and it will be back soon though, but I gave it a 7 instead of a 8 for features for this reason. -Ads are visible on the top of every page - subscribe (soon) to remove them... oh well. - -*Suitable for:* Anyone, although it seems to be the choice of _web designers_ and people involved in website development. - -h3. "Furl":http://www.furl.net/ -!>/img/pictures/socbook/furl.gif! - -* *Speed:* 7 - Fast enough, no complains and no unnecessary objects or images either. -* *Features:* 6 - saved copies, plenty of tools including their own toolbar, multiple categories but no tagclouds and not as customizeable as the others -* *Simplicity:* 7 - Simple, organized, essential. Documentation available. -* *Interface/Design:* 5 - This is nothing fancy at all compared to the others, a fairly _traditional_ web interface. _Web 2.0?_ ...Pardon? -* *Userbase:* 8 - This is one of the oldest social bookmarking services and it's easier than del.icio.us, that's why the fairly large userbase. -* _*Overall Rating: 6.6*_ - - -*Overview* -When I tried this service after trying the others I wasn't impressed at all. The interface is fairly standard, all done in a traditional way, no AJAX at all: if you absolutely hate Web 2.0 hype, even when it's actually useful, go for this. To rate a bookmark I must click on edit and select the rating from a select menu: our children wouldn't believe it. -The good thing about Furl, and what made it popular, presumably, is its simplicity over other similar services like del.icio.us, that's the most logical reason I could find to explain its popularity. - -*Suitable for:* Anyone, users against or not yet accustomed to Web 2.0 interactivity - - -h3. "Spurl":http://www.spurl.net/ -!>/img/pictures/socbook/spurl.jpg! - -* *Speed:* 8 - Fast and pleasant to look at, no complaints -* *Features:* 7 - Saved copies, del.icio.us sync, useful stats, no ratings, multilingual, some quirks (see below) -* *Simplicity:* 8 - Yes, this is really simple and straightforward to use. Extensive documentation available. -* *Interface/Design:* 8 - A really clean, simple, but yet nice looking and organized interface. -* *Userbase:* 6 - Fairly popular, not as popular as del.icio.us but on the right track -* _*Overall Rating: 7.4*_ - -*Overview* -Now this is is an interesting service. The first thing that I really liked about it is the good del.icio.us integration: not excellent because it seems to take quite a bit to import my del.icio.us bookmarks, but everything you bookmark with Spurl can be send to del.icio.us at the same time and vice versa! They also offer interesting stats regarding your bookmarks, report broken links, cache webpages, etc. -Some annoying things must be noted though (hence the 7 in features): the bookmarklet will popup a window - not great; it doesn't support ratings and the tag management could be improved: del.icio.us and ma.gnolia can _suggest_ tags when saving a bookmarks, while Spurl unfortunately doesn't. It also seems to be less tag-centric than the others (except for Furl of course). It is multi-language and offers a 18+ filter - but if you forget to mark a bookmark as "explicit" it won't work, and as result you can get porn links on the homepage... - -*Suitable for:* Anyone, del.icio.us users who would like to try something new without losing sync with their favourite service. - - -h3. "Yahoo MyWeb 2.0":http://myweb2.search.yahoo.com/ -!>/img/pictures/socbook/myweb2.0.jpg! - -* *Speed:* 6 - Not too fast, like other sites in the Yahoo network. -* *Features:* 5 - "Web 2.0"? Well, yes, it has tag clouds and allows bookmark sharing, but that's about it. -* *Simplicity:* 7 - Integrated with Yahoo services (and toolbar), fairly easy to use, if you don't know something the FAQs are handy. -* *Interface/Design:* 6 - Clean, simple and a bit boring - perhaps I'm just to used to the rest of the sites in the Yahoo network -* *Userbase:* 8 - Grab some random users and a big chunk of Yahoo enthusiasts: not bad! -* _*Overall Rating: 6.4*_ - -*Overview* -When I first read about it, I though: _look, Yahoo is ready to embrace the Web 2.0 philosophy_, then I tried it and changed my mind: it has tags, tag clouds, it allows sharing but nothing more than that. The interface is still Web 1.0, and AJAX methodologies are not used at all. -Basically this service grasps the basic concepts from del.icio.us & C., simplifies them and re-presents them in a form which can be easily understood by the majority of Internet users of the planet (and primarly Yahoo users) and _yet_ look innovative. Excellent marketing work, perhaps, but nothing too new or particularly useful there. - -*Suitable for*: Anyone, in particular Yahoo users for the excellent integration with the rest of Yahoo services. - -h3. "Blinklist":http://www.blinklist.com/ -!>/img/pictures/socbook/blinklist.gif! - -* *Speed:* 7 - Fast, especially considering the type of interface -* *Features:* 10 - The service which offers more features than anyone else, simply that. Ratings, quit bookmarks, video tutorials, AJAX where needed, tabs, starred links, message board etc. etc. -* *Simplicity:* 7 - Considering the amount of features it offers, it's simple enough to use. Impressive Help section. -* *Interface/Design:* 9 - I really like its interface, the scary amount of AJAX code it uses et al. Not a 10 because the five icons at the top (Gnome-like?) don't go well with the rest of the design, only that. -* *Userbase:* 7 - Not too popular, and new to the scene -* _*Overall Rating: 8*_ - -*Overview* -This should technically be the winner. These guys truly did their best trying to build perhaps the most "Web 2.0 compliant" social bookmarking service ever. The downside of it is just the huge amount of AJAX involved in all this, but if you're fine with that, Blinklist is truly amazing. It uses a digg-like approach to _blink_ the urls which appear on the site instantly: an AJAX div fades in allowing you to fill in the bookmark's details and then it fades away incrementing the _blink_ count and adding it to your collection. The private area has a quadri-tabbed sidebar with: 1) real-time chat, 2) popular tags view, 3) recent tags used, 4) cloud view. It supports site thumbnails but not saved copies unfortunately, advanced profiles, avatars, ratings... -Advanced, "cool" and (perhaps too much) on the edge. In Italian we have a word for things like this, but I won't mention it here. Just think about _Fast and Furious_, the feeling when browsing this site can be similar to driving an heavily modded car: if you like the way it works, it's the best thing ever - if not, well, del.icio.us does the job alright. - -*Suitable for*: Web 2.0 lovers, geeks, anyone brave enough to try it without getting too shocked - -h3. "Smarking":http://smarking.com/ -!>/img/pictures/socbook/smarking.jpg! - -* *Speed:* 7 - Nothing superfluous in the interface, but it could be faster -* *Features:* 8 - Proper messaging, advanced profiles, STATS! -* *Simplicity:* 7 - Easy to learn and use, has a FAQ and a wiki -* *Interface/Design:* 7 - Very traditional but functional interface. Not too fancy or advanced, but does the job -* *Userbase:* 4 - About 300 users -* _*Overall Rating: 6.8*_ - -*Overview* -Don't expect anything too fancy from Smarking, but a few features caught my attention. For one, it supports a proper messaging system: other services allow you to send notes and a link to other users, while this one has a proper, built-in private messaging system... OK, not a big thing but nice to have. The design is not too great: it does the job but there's hardly any image, nevermind AJAX effects or similar. -What really impressed me (hence the 8 in features), are the detailed stats that this service makes available publicly: detailed domain stats, tag stats, user stats and more while others simply don't bother. -It was developed using Python and PostgreSQL by an Italian student of Computer Science - apparently there's someone who is able to program properly in my country as well. Good job: nothing too exceptional as social bookmarking service, but an exemplary work. - -*Suitable for*: Italians in particular and everybody else as well. - -h3. "Shadows":http://www.shadows.com/ -!>/img/pictures/socbook/shadows.gif! - -* *Speed:* 5 - I don't know if it's because of Rails or the interface, but this site doesn's seem to perform as well as the others -* *Features:* 7 - enhanced commenting, saved copies, thumbnails, groups -* *Simplicity:* 6 - The usual FAQs are there, but other than that there's no particular effort to make newbie's life easier -* *Interface/Design:* 5 - Simple but not quite pretty interface, no graphic effor whatsoever, AJAX for adding and editing comments -* *Userbase:* 6 - Not a tiny userbase but not huge either -* _*Overall Rating: 6*_ - -*Overview* -Maybe it's just me, but I wasn't too impressed by Shadows: it doesn't offer any particular innovative feature other than enhanced commenting. You can start real discussions about your bookmarks and interact with other users fairly well, but the question is: do you really want to? Perhaps an interesting way to build communities, but other than that nothing special. -The interface is not too pretty, unlike Ma.gnolia it looks like they didn't make a terrible effort trying to design something pleasant to look at and the final result is quite boring. They seem to support thumbnails, but clearly they use a third party service like Alexa because there's hardly any thumbnail displayed, generally: wrong choice - see Blogmarks below for a better thumbnail support. -And yes, the default green smily default avatar is terribly cheesy and truly annoying (not that the others are any better...). - -*Suitable for*: Anybody? Nobody? Maybe people who like a more community-like approach - - -h3. "Simpy":http://www.simpy.com/ -!>/img/pictures/socbook/simpy.png! - -* *Speed:* 7 - It's fast, but again, its interface is not anything fancy -* *Features:* 7 - Detects broken links and redirections, notes, groups -* *Simplicity:* 6 - It has FAQs but it could look confusing for inexperienced users -* *Interface/Design:* 6 - Nothing special, no eye candy, no AJAX even where it would be appreciated -* *Userbase:* 7 - Medium-sized userbase -* _*Overall Rating: 6.6*_ - -*Overview* -The best feature offered by Simpy is the link detection service, able to detect broken links, duplicates and redirections. Everything else looks pretty normal and nothing special: it offers tag management, groups, notes, the usual tools. Copies of your bookmarks are NOT cached, and clicking on the _cached_ link will take you to web.archive.org, hoping that it cached the page you're looking for (hell even I could do that!). -No AJAX, nothing too pretty. Boring? Well, no, let's call it functional and essential. - -*Suitable for*: Anybody, moderate experience required - - -h3. "Blogmarks":http://blogmarks.net -!>/img/pictures/socbook/blogmarks.jpg! - -* *Speed:* 5 - It's slow. One of the main reasons ought to be the thumbnails: every bookmark has an associated image! -* *Features:* 7 - Excellent thumbnail support, Private tags, usual things -* *Simplicity:* 6 - It's pretty straightforward, but there's only one page to help new users -* *Interface/Design:* 7 - Simple and essential, no AJAX, not too fancy -* *Userbase:* 7 - One year old, medium userbase -* _*Overall Rating: 6.4*_ - -*Overview* -Again, nothing too special - except, of course, that _all_ bookmarks have a thumbnail: a good thing which made me feel popular for about 0.7 seconds when I noticed a little picture showing my own site when someone bookmarked it, but on the other hand quite annoying and pointless for dialup users. -No Web 2.0 interface, just plain old stuff which does the job but is not particularly pleasant or innovative. Private tags? A good thing maybe, and probably the only real innovation compared to other similar services. - -*Suitable for*: Anybody, moderate experience required - - -h3. Conclusions - -Although del.icio.us is still the leading service for social bookmarking, its competitors are obviously getting better. Among the ones I reviewed today, at least some of them look promising: Blinklist is definitely the most advanced in terms of features offered and technology used, and I think I'll try it out a bit more and see if it can be better than del.icio.us in the long run. Spurls is also tempting especially because it offers various interesting features without _forcing_ you to abandon your del.icio.us account - and that was an excellent (and wise) feature Spurl developers chose to implement, without any doubt. Regarding my old favourite, Ma.gnolia, it still deserves a mention, mainly for being a succesful blend of latest technology and class design, without being too extreme. - -So... what's _your_ favorite then? - - -h3. Notes and Resources - -fn1. Social Bookmarking, "Wikipedia Page":http://en.wikipedia.org/wiki/Social_bookmarking - -fn2. "del.icio.us":http://del.icio.us/, the first social bookmarking service - -fn3. "What is Web 2.0?":http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html - O'Reilly article - -fn4. "Mother of all social bookmarking services icons":http://shakk.wordpress.com/2006/04/20/mother-of-all-social-bookmarking-services-icons/ - A cool mosaic of all the social bookmarking sites' icons. - -fn5. Other reviews and comparisons of social bookmarking services: - -* Social bookmarking "resources":http://h2obeta.law.harvard.edu/64211 -* "Comparison charts":http://www.irox.de/roxomatic/616/social-bookmarks-review of the most popular social bookmarking systems [PDF] -* PCmag "round-up":http://www.pcmag.com/article2/0,1895,1875208,00.asp of various social bookmarking sites -* "Social Bookmarking Tools (I) - A general review":http://www.dlib.org/dlib/april05/hammond/04hammond.html -* "ALL Social that CAN bookmark":http://3spots.blogspot.com/2006/01/all-social-that-can-bookmark.html - The most comprehensive review of social bookmarking sites. - -fn6. "Ma.gnolia - Social bookmarking made (extremely) easy":http://www.h3rald.com/articles/view/ma.gnolia/ - -fn7. "Ma.gnolia":http://ma.gnolia.com/ - Social bookmarking service - -fn8. "Furl":http://www.furl.net/ - Social bookmarking service - -fn9. "Spurl":http://www.spurl.net/ - Social bookmarking service - -fn10. "Yahoo MyWeb 2.0":http://myweb2.search.yahoo.com/ - Social bookmarking service - -fn11. "Blinklist":http://www.blinklist.com/ - Social bookmarking service - -fn12. "Smarking":http://smarking.com/ - Social bookmarking service - -fn13. "Shadows":http://www.shadows.com/ - Social bookmarking service - -fn14. "Simpy":http://www.simpy.com/ - Social bookmarking service - -fn15. "Blogmarks":http://blogmarks.net/ - Social bookmarking service
@@ -1,158 +0,0 @@
------ -permalink: sqlyog5-review -filters_pre: -- bbcode -title: SQLyog 5 - a fast and reliable MySQL front-end -comments: [] - -date: 2006-02-28 13:50:00 +01:00 -tags: -- databases -- review -type: article -toc: true ------ -MySQL[1] is a great database solution. Literally millions of people who use it can tell you that it is a well-performing, feature-rich database solution for almost any size project: it is low-cost (often free), and available on the majority of webservers all over the world. When I first discovered MySQL while learning some basic PHP programming, I almost immediately wondered how I'd effectively access MySQL and manage my databases other than through PHP code or command line. I was pointed to PHPMyAdmin[2], which I still use as a quick, general-purpose MySQL front-end. However, I wondered if there was anything better than that, and maybe not confined within a browser window... - -There are a few desktop "cousins" of PHPMyAdmin out there, especially for Windows, which is not surprising. After a quick search, three products come up immediately: MySQL-Front[3], Navicat MySQL[4] and SQLyog[5], all of them are proprietary solutions and seem to be the most popular ones around. - -[i]Alright, which one is the best?[/i] - -There are many different criteria available to choose a winner among these three products. The easiest for me was simply: "which one is free?" - -- SQLyog, with some restrictions, is our instant winner. Both MySQL-Front and Navicat MySQL offer a 30-day trial, while SQLyog can be free for life but only with basic features. However, the number of basic features is considerable. - -[b]First impressions[/b] -After launching SQLyog (free edition), a small and not-too-annoying nag screen appears: you click on it and it goes away, it doesn't last for 10 seconds like some others. The same screen appears when you try to access the power tools and advanced features which are not included in the free edition. I got used to it after a short while, and that's the only annoyance of the free version of the product. - -The program's interface seems a bit unconventional for the traditional Windows user, especially if compared to the other two products. The main window is divided into four parts: the main menu and a navigation bar underneath it, a left column listing all the databases and tables in an expandable tree, the top half of the main window which hosts a SQL editor, and the lower half with everything else, including a tabbed area for displaying query results, messages, table data, table structure and history. - -It seems as if the SQL editor should be in a tab as well, but after using SQLYog for a while, you understand why is not: the editor has been positioned such that it can be used often, easily, and immediately. It took me a while to figure this out, but once you embrace this philosophy, you'll never stop using this program; all front-ends include a query editor, but it's often relatively hidden, meaning that it is at least one or two clicks away from the rest of the interface. - - -[b]Main Features[/b] -After specifying your credentials, the program will connect to the MySQL server and list all of the available databases in an Explorer-like left side panel. All tables can be accessed by clicking once on the corresponding database. All column fields, indexes and triggers (if any) are displayed by clicking on each table name. - -[i]So when I click on a database or a table the corresponding structure is displayed, right?[/i] - -Wrong. When you do that, nothing happens. Remember the multi-tabbed lower panel, which is supposed to display results, table data, objects, etc.? Well, the focus is set to the [i]Result[/i] column by default, so if you want to display the database or table structure you need to click on the [i]Objects[/i] table, and voil� , the structure appears. Fortunately this behaviour can be changed by modifying the program's options, through the Tools menu. - -Clicking on [i]Table data[/i] will display the first 50 records of the selected table, while the [i]Result[/i] and [i]Messages[/i] tabs will still be empty; the editor wasn't used, so there's no result to show, and we didn't get any errors or other messages from MySQL yet, so everything is as it should be. - -The most interesting feature from an educational point of view, so far, is actually the [i]History[/i] tab, which is just one click away and shows the following: - -[code] -/*[11:11:11 AM][ 0 ms]*/ show variables like '%character%' -/*[11:11:11 AM][ 0 ms]*/ Set character_set_connection=latin1 -/*[11:11:11 AM][ 0 ms]*/ Set character_set_results=latin1 -/*[11:11:11 AM][ 0 ms]*/ Set character_set_client=latin1 -/*[11:11:11 AM][ 0 ms]*/ set sql_mode='' -/*[11:11:11 AM][ 15 ms]*/ show databases -/*[11:11:22 AM][ 0 ms]*/ use `zzine_drupal` -/*[11:11:23 AM][ 203 ms]*/ select `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` - where `TABLE_SCHEMA` = 'zzine_drupal' and `TABLE_TYPE` = 'BASE TABLE' -/*[11:11:32 AM][ 47 ms]*/ show full fields from `zzine_drupal`.`node` -/*[11:11:32 AM][ 140 ms]*/ show keys from `zzine_drupal`.`node` -/*[11:11:32 AM][ 0 ms]*/ select * from `zzine_drupal`.`node` limit 0, 50 -[/code] - -The above is a log of all the SQL commands which were sent to the server so far: the program connected and showed all the databases, I clicked on the "zzine_drupal" database, got some info about it, and then clicked on the [i]node[/i] table and displayed the first 50 records. So, if you are new to SQL and want to learn the syntax to query the database you can just have a glance at this tab every so often. - -Note that the time to execute a query is displayed in ms, and it's not wrong! SQLyog actually performs quite well, as boasted on the official site's features page[6]: [i]"[it] uses native MySQL C API - the fastest way to communicate with MySQL server"[/i] - and they do mean it. - -[i]What else does SQLYog offer?[/i] - - The free version includes the most used features, like the very two most basic operations: you can query the database by typing an SQL query into the editor and executing it (F5 or F8 if you want to edit the results) and change the value of each field through a convenient blob editor, which can display text or images, import content from a file or save it locally. -Then the program groups all functionalities in standard dropdown menus on the top bar, and also presents the most used operations as clickable icons as well. Now, this can be handy, but the program displays 25+ icons without any text underneath, so either you keep hovering your mouse on each one waiting for an explanation message to appear, or you just use the standard dropdown menus anyway. The authors did an outstanding job creating an icon for (literally) every action: they are quite well made and explanatory enough if you look at them carefully, but they are still very similar, and too numerous to memorize. - -However, SQLyog is also 100% keyboard friendly, as almost every function has a shortcut. Memorizing just a few of them, and it's worthwhile, as it makes everything much faster. At any rate it's better than memorizing all the icons instead! - -Let's examine each dropdown menu and the functions listed in them. - -[u]File[/u] -This menu lists all the functions concerning database connection and disconnection, opening and saving SQL files, and opening new query tabs - the SQL editor panel can have multiple tabs. - -[u]Edit[/u] -This menu refers to the SQL editor, not to the query results! It includes functions like execute queries, copy, paste, cut, undo, redo and find/replace, which does not find strings in a record/table/database, but only in the SQL editor. I do believe the "Find in Database" function is missing in SQLyog, and is present in some of the competitors, but you can search your database using the appropriate SQL queries, right? Maybe - in my opinion - an advanced [i]Find <something> in <somewhere>[/i] wizard or dialogue should be implemented - as the developers seem to be very good at creating those types of things, we'll soon find out. - -[u]DB[/u] -Maybe I'd have called this "database" for the sake of newbies, but this menu indeed groups all database-related functionalities together. Create/truncate/drop databases, create table and create view (maybe they could have been placed under the [i]table[/i] menu), and other interesting features like creating an HTML schema on the database and even copying a whole database (or just a few tables) to a different host (even remote, if accessible) with a single click! It works, just don't try to copy a database onto another remote server on a 56K dialup connection, like I did... - - -[u]Tables[/u] -Another self-explanatory menu, listing all table-related operations like create, alter, rename, empty, drop, import, export tables, manage indexes, rearrange columns, etc. All these functions can be performed through wizards, dialogues or other equally simple methods that any average Windows user should be familiar with. There are only a few exception here and in other menus: when wizards would be inappropriate or inadequate for certain actions, SQLyog prepares a "template query" and lets the user fill it in, typically for more advanced needs, such as if you want to create a new (MySQL 5.0+ only) [i]trigger[/i] named [i]test[/i] on the [i]node[/i] table of the aforementioned zzine_drupal database. For this, SQLyog prepares the following query template: - -[code] -DELIMITER $$; - -DROP TRIGGER `zzine_drupal`.`test`$$ - -CREATE TRIGGER `zzine_drupal`.`test` BEFORE/AFTER INSERT/UPDATE/DELETE on `zzine_drupal`.`node` -FOR EACH ROW BEGIN - -END$$ - -DELIMITER ;$$ -[/code] - -...just remember to modify it according to your needs! -Do you like SQLyog's query templates? Check out Edit->Insert Templates and there's almost everything for every taste. - - -[u]Objects[/u] -Presumably the authors created this menu to group some advanced or new functionalities together, but everything listed here is already present in one of the other menus: management of functions and triggers, view-related actions, and stored procedures... except for the [i]Drop Column[/i] action, which is only available under this menu. - -[u]Tools[/u] -This menu also lists two actions which we already saw under the [i]DB[/i] menu, which is exporting or importing a database. however, there is also an [i]Export resultset[/i] wizard, as well as a very handy user management tool, information about the current database, and the program preferences. - -The program preferences apparently have two settings which perhaps should be changed by default, which concern the previously mentioned weird tab focus: if you'd like something more intuitive and you don't need (or want) to use the SQL editor a lot, you can safely unclick the "Keep focus on SQL Editor after query execution" and click the "Always select Objects tab when a new item is selected". - -Believe it or not, you get all this for free. No charge, no trial periods: these are the actual features offered by the free edition of SQLyog! No surprise that over 500,000 people already downloaded it! - -What's in the [i]Professional[/i] and in the [i]Enterprise[/i] edition then? Nothing much, and [i]Power tools[/i]. - - -[b]"Power Tools"[/b] -When I wrote [i]nothing much[/i] earlier I actually referred to the Professional Edition, which - as the feature matrix shows[8]- doesn't offer anything more than the free edition: basically you pay $9 to get rid of the nag screens, which are normally not very intrusive... - -[u]Tunneling[/u] -On the contrary, the Enterprise Edition ($49) has a lot of very interesting advanced tools which are actually worthwhile to have. Perhaps the most essential feature missing in the free version, especially for people using a remote hosting solution, is [i]tunnelling[/i]. You can use SQLyog to connect to a remote server, theoretically; in reality though, in order to do so your hosting provider must allow privileged remote connections to the database (i.e. <user>@% instead of <user>@localhost), which is not permitted 98% of the time for security reasons. So how can you use SQLyog to access your remote database(s)? With tunneling. -The concept is simple: even if privileged remote connections are normally not permitted, privileged local connections are. So all you need to do is place a PHP script on your server, somewhere accessible, and specify it as a parameter for HTTP tunneling before establishing the connection; SQLyog will then access the script and the script will basically forward SQLyog's instruction to the database server, just as if the commands were issued locally. - -[i]I will never allow commands to be sent to my server unencrypted and through a PHP script, which can be exploited by the first script-kiddie passing by![/i] - -This is a common, slightly biased, but ultimately reasonable concern, and for $49 you can also get SSH tunneling, provided that your host allows you to connect to the server through a SSH shell. I tried this option and it worked perfectly: with a 2MB/s ADSL connection all went smoothly and fast: the program proved to be a valid alternative to PHPMyAdmin in terms of speed and responsiveness. -Do not try this on a 56K connection! It's not worthwhile, and probably not even conceived of by the developers. As I always want to try extreme solutions, I also tried SSH tunneling on dialup and my final conclusion was: [i]stick with PHPMyAdmin[/i]. SQLyog seems to have been developed in order to achieve relatively immediate responses, as a result, when a low speed connection is used to connect to a remote database, the program may hang for a little while before delivering results and executing queries as normal. Perhaps there's room for improvement here: it would be great to have progress bars display when an operation takes more time than normal. - -[u]Database Synchronization and Migration[/u] -A common and useful feature you should expect from a MySQL front-end is a synchronization utility, and SQLyog has one: by clicking on [i]Database Synchronization[/i] under the Powertools menu you can start a quick and easy synchronization wizard, to automatically update two databases. Simply provide the connection details (even if they are on different hosts or require tunneling), and select the databases you want to synchronize, also specifying if you want a two-way synchronization or only one way. A similar function is [i]structure synchronization[/i], which can be used to keep only the structure (not the data) up-to-date between two databases. You won't be asked to create two new connections, but the operation can only be performed on databases that are already accessed by SQLyog. - -For more information on how to take advantage of SQLyog's advanced synchronization features, I recommend reading a very informative article specifically devoted to this subject, available online[8]. - -Another VERY interesting features SQLyog offers (which has been the subject of a whole article on DatabaseJournal.com[9]) is the possibility to easily migrate to MySQL from other ODBC sources. Through a relatively painless wizard it is possible to migrate from another database type to MySQL, while making sure that any errors are handled as expected. - -[u]Periodic Tasks and Management[/u] -MySQL is a wonderful relational database, but it fundamentally lacks the ability to execute scheduled queries and operations, which are normally accomplished by server-side scripts. SQLyog offers you the opportunity to easily create and administer periodic tasks, notifications and backups via a few wizards: the [i]Notification Services[/i] wizard, which can be used to send the result of a particular user-defined periodic query to an email address or execute maintenance queries, and the [i]Scheduled Backups[/i] wizard to automate full or partial database backups and exports. Webyog[10] itself offers an informative how-to[10] on these tasks, step-by-step with screenshots. Last but not least, you can manage all these scheduled jobs through a very handy [i]job manager[/i] located in the [i]Powertools[/i] menu. - - -[b]Final Judgement[/b] -SQLyog is a well-rounded, multi-functional front-end for MySQL which can be used by both newbies and more experienced users to manage their databases. I'd clean up and reorganize the interface a little bit and remove a lot of the icons as well as list all the functions under the top menus, possibly [i]without[/i] the icons and without repeating the same function anywhere. - -Apart from those small items, SQLyog is definitely worth a shot, and the Webyog team definitely did a good job in this fifth version by incorporating all the latest MySQL 5 functionalities in an already excellent program. The free version in particular offers quite a wide range of functionalities with no trial period, and this certainly helped the program to grow in popularity. I would never buy the Professional edition, simply because it only gets rid of nag screens without offering nothing new over and above the Free Edition. On the other hand, the Enterprise Edition is an excellent and inexpensive solution if you need the power tools. - -SQLyog is just a few clicks away[11], only 7 Megabytes, and ready to install! - - -[b]Notes[/b] -[small][1]MySQL - Official Site: [url]http://www.mysql.com/[/url] -[2]PHPMyAdmin - Official Site: [url]http://www.phpmyadmin.net/home_page/index.php[/url] -[3]MySQL-Front: [url]http://www.mysqlfront.de/[/url] -[4]Navicat MySQL: [url]http://www.navicat.com/[/url] -[5]Webyog Website: [url]http://www.webyog.com/[/url] -[6]SQLyog, feature page: [url]http://www.webyog.com/sqlyog/index.php [/url] -[7]SQLyog, features matrix: [url]http://www.webyog.com/sqlyog/featurematrix.html[/url] -[8] Peter Laursen & Quy Ton, "Using SQLyog Enterprise to Effectively Synchronize MySQL Databases" (PDF): -[url]http://www.webyog.com/articles/Using_SQLyog_Enterprise_to_Effectively_Synchronize_MySQL_Databases.pdf[/url] -[9] Peter Laursen, "Migration to MySQL with SQLyog ver 4.1" : [url]http://www.databasejournal.com/features/mysql/article.php/10897_3550146[/url] -[10]Webyog, "How to use Scheduled Backups with SQLyog": [url]http://www.webyog.com/articles/how_to_use_scheduled_backup.html[/url] -[/small]
@@ -1,118 +0,0 @@
------ -:type: article -:tags: -- review -- productivity -- books -- software -:permalink: succeeding-with-agile-review -:title: "Book Review: Succeeding with Agile" -:summary: "A review of Mike Cohn's Succeeding with Agile. Possibly one of the most well-organized technical books I came across." -:toc: true -:pdf: true -:date: 2010-04-25 14:16:28.099000 +02:00 ------ -&:[book|_Succeeding with Agile_] -&:[author|Mike Cohn] -&:[url|http://www.succeedingwithagile.com/] -&:[S|_Scrum_] -&:[ag|_agile_] -&:[links| -* =>[http://www.mountaingoatsoftware.com/topics/scrum|Introduction to &[S] - An Agile Process] -* =>[http://en.wikipedia.org/wiki/\/&[S]_(development)|&[S] (Wikipedia Page)] -* =>[http://www.scrumalliance.org/|&[S] Alliance] -* =>[http://www.scrum.org/|&[S].org] -] -&:[l_book|=>[&[url]|&[book]]] -%:[=pt| - interpret %{section[@title[Part #{param(0)}: #{param(1)}] - txt[#{param(2)}] - ]} -=] ---[-----------------------------------] -textile[ -bq. "This is not a book for those who are completely new to &[S] or &[ag]. There are other books, classes, and even websites for that. If you are completely new to &[S], start with one of those." - -p(((((. -- &[author], &[book] - -Great. That's just great. Good job I started with the _Introduction_ first, otherwise the first chapters of this book would have been way too overwhelming! - -&[l_book] is a book that _doesn't_ teach you about &[S] or &[ag] methodologies, it won't give you a definition of ScrumMaster, sprint, or backlog... instead, it takes all that for granted and teaches how to pragmatically adopt -- or better, ADAPT(Awareness, Desire, Ability, Promotion, Transfer) to -- &[S], in the context of yourself, your team, and even your entire organization. - -bq. "\[...\] this book draws on my experience with &[S] over the past 15 years, but especialle the last 4. For the last 4 years, every evening after I spent the day with one of my clients, I would go back to my hotel room and make notes about problems they were facing, the question they asked, and the advice I gave." - -Indeed, this book is a gold mine of information, anecdotes, tips and tricks about everything you could possibly want to know about making &[S] work, at any level. If you have some knowledge about &[ag] development you definitely have some questions: _will it work?_ ... _is it really more productive?_ ... _how can I make my boss understant this?_. This book has all the answers you need. Most definitely, it also answer questions you didn't think of. - -If you don't know what all this is about, then you'd better do your homework first: -&[links] -] - -section[@title[Overview] - -image[@style[float:left;]$[site.root]/img/pictures/succeeding-with-agile.jpg] -txt[ - -The book is organized into five parts of different length, ranging from 20 to over 100 pages. If you read the book from the start till the very end, you'll notice that the start of each part is like a new milestone in &[S] adoption: first the author makes sure that _you_ are prepared (Part 1), then moves on to deal with individuals and initial resistance (Part 2), then teams (Part 3) and finally the whole organization (Part 4), until you can finally taste the fruits of you labor (Part 5). - -In a way, you may well want to carry this book in your briefcase every day you go to work, and read it bit by bit, as you make progress in your quest for &[S] adoption. -] - - pt[I|Getting Started| -Part I is about making sure you know _why_ becoming gile is important and beneficial to you and your work environment. It will teach you how to promote &[S], its advantages and challenges, and the different ways to go about it: Start Small or Go All In? Stealth or Public Display? Things like that. Pointless theory? Not really: everything is well documented, with success stories to support one way or the other. - ] --[End of part I] - - pt[II|Individuals| -This part was very interesting from a psychological point of view: it deals with individuals and their possible reactions to becoming &[ag]. You'll meet _skeptics_, _followers_, _saboteurs_ and _diehards_ -- no hope? Well, of course not: you'll learn how to deal with each one of them in the best way possible. This part will also introduce you to new roles and responsabilities related to &[S]. - ] --[End of part II] - - pt[III|Teams| -Up next, Teams. You're no longer dealing with single-minded individuals, but with more complex groups. New challenges emerge, mostly related to communication and people interactions. I particularly enjoyed *Chapter 13 -- The Product Backlog*, which provides invaluable insights on this important everyday tool. *Chapter 15 -- Planning* is another interesting read: it teaches you a lot about planning vs. estimating, and coming to compromises to meet deadlines. - - ] --[End of part III] - - pt[IV|The Organization| -If you made it up to here, then you're nearly done. You probably know most of the tricks by now, but there's still a lot to learn. *Chapter 17 -- Scaling &[S]* is definitely worth reading, even just for the analysis between _formal_ and _informal communities_, while *Chapter 19 --Cohexisting with Other Approaches* almost feels heretical at times: mixing &[S] with Waterfall? Is that even conceivable? Yes. Sometimes it's the only way, especially when you have to deal with compliance to standards like ISO9001. Once again, the author has a nice success story on how a company passed an ISO9001 audit by providing documentation in form of photocopied notes and by adding a single failing test to persuade the auditor that the automated test suite was not rigged. Priceless. - - ] --[End of part IV] - - pt[V|Next Steps| -Only two chapters in this part of the book, which mainly deals with (self) assessment and progress analysis. Still worth a read, but you can safely leave it out for when you succeeded with &[ag]. - - ] --[End of part V] -] --[End of Contents section] - -section[@title[Technical Analysis] -txt[ -I'm not exaggerating when I say that this is _by far_ the best book I've read in the past few years when it comes to the way it is organized. Start by reading the =>[http://my.safaribooksonline.com/9780321660534?portal=informit|table of contents]: if you take each chapter out and make a bulletted list of each section you'll end up with a handy (and free!) cheat sheet on how to promote and adopt Agile methodologies. - -This doesn't mean the book isn't a worthwhile read, but rather that it can also be used as a reference when needed. -] - -section[@title[Formatting and Readability] -txt[ -From a technical writing point of view, this book is spotless. I should keep it on my desk to remind me how technical documentation should be written, except that... it's not a technical manual of course. But the formatting and the way content is laid out can make the most skilled technical writer very jealous: there's never a huge blob of boring text, never a series of pointless pictures: Mike Cohn (or his editors) did a terrific job composing this book. - -You can start reading it from any point and it still makes sense, diagrams are simple and clear, and yet extremely useful, and so are the reference tables and spreadsheets. They never hurt, they are always in the right place, at the right time. And bold text is aptly used at the start of list items, so that even if you skim through the key concepts will still make it to your brain. Excellent. -] -] - -section[@title[Style and Contents] -txt[ -Reading this book is like listening to a seminar hold by some charismatic icon like =>[http://en.wikipedia.org/wiki/David_Allen_(author)|David Allen] or =>[http://en.wikipedia.org/wiki/JoAnn_Hackos|JoAnn Hackos]: you never get bored, and you constantly learn something. Mike's informal and conversational style is one of the main reasons why you should read this book instead of others on the subject: he is a great communicator, and he knows how to make his point across. - -As an added value, Mike also uses two types of _boxes_ throughout the book: -* *Things to try now* -- Whenever a new strategy or practice is introduced, you'll find one of these boxes containing a bulleted list. _"Commit to running the next two or three sprints without any overtime"_, "Do you understand what motivates every other person on your team? If not, find out. How? Ask them.", ... these are just examples of some of the author's reccommendations to put you in the right track. -* *Objection* -- Either actual quotes from customers and employees, or possible statements which may come out throughout the process of adopting &[S]. Things like _"If the product includes less than what we've planned, no one will buy it"_, or _"My team won't self organize; team members are too passive and look to me to lead"_, ... of course, what makes these objection boxes valuable is not the statement themselves, but the tips on how what to do about them. There's not a single one left unanswered: you really feel you're covered in any situation. -]] - -] - -section[@title[Final Thoughts] -txt[ -I really enjoyed this book. It took me ages to read it, not only because it's quite long (450 pages), but also because it's very dense of information. Another author could have made it three times longer, but I was glad Mike didn't. I'm pretty certain I'll keep it near me and read bits from it when I need to: it's pretty much the Bible of &[S] adoption. - -What's wrong with it then? Not much. Perhaps the only thing I really missed was an introductory 50-page-chapter on &[S] and &[ag]. I know this is not meant to be a book for beginners, but some basic glossary or &[S] cheat sheet would have made it accessible to an even wider audience, at virtually no cost for the author or the readers, who could have just skipped that part. - -Anyhow, I give it a 9 out of 10. -] -]
@@ -1,395 +0,0 @@
------ -type: article -tags: -- website -- ruby -- programming -- writing -date: 2009-09-15 13:32:51.049000 +02:00 -permalink: take-back-your-site-with-nanoc -title: "Take back your site, with nanoc!" -subtitle: How I turned H3RALD.com into a 100% static, hassle-free web site -filters_pre: -- erb -- redcloth -toc: true -popular: true -intro: | - Back in 2004, when I bought the h3rald.com domain, this site was static. At the time I hardly knew HTML and CSS, nevermind server-side languages, so I remember creating a _pseudo-template_ for the web site layout and using it whenever I wanted to create a new page, to preserve the overall look-and-feel. This was a crude and inefficient strategy, of course: whenever I changed the layout I had to replicate the change in all the pages of the site – the whole eight of them. -extended_intro: | - Five years later, after rebuilding this web site "seven times":/h3rald/ using different backends (PHP + CakePHP, Ruby + Rails + Typo, etc.), I decided to make it static again, this time with a twist. It all started when I read a "post":http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html by Tom Preston-Warner ("GitHub":http://www.github.com co-founder) that I finally decided to give it a try. Today, the 8th release of this web site is 100% static: if you load any page, there's no server-side interpretation going on, you're just browsing a plain HTML page, at most with a few AJAX calls. But let's start from the beginning... ------ - - - -h3. Why I don't need a blog platform - -There's nothing inherently wrong with blog platforms like Wordpress: they allow _anyone_ to publish content on the web using a user-friendly administration area. They were built with one thing in mind: make publishing content on the web something as simple as possible, even for people who don't know anything about HTML, let alone server-side scripting. - -What about people who _do_ know about web development though? Do they still need a blog platform? Depends. If you are comfortable with editing files using a text editor, if you enjoy using the command-line on a daily basis, if you like programming and _hacking_ a little bit, if you don't really care about fancy and user-friendly administration backends... _then you probably don't_. - -All you need is a system to transform a bunch of source files into a web site. The good news is that such system exists – and you're also spoiled for choices! - -h3. Introducing site compilers - -The first _site compiler_ I discovered was "Webby":http://webby.rubyforge.org/: - -bq. [...] Webby works by combining the contents of a page with a layout to produce HTML. The layout contains everything common to all the pages — HTML headers, navigation menu, footer, etc. — and the page contains just the information for that page. You can use your favorite markup language to write your pages; Webby supports quite a few. - -There are quite a few applications like Webby, such as: -* "nanoc":http://nanoc.stoneship.org/ -* "Rassmalog":http://snk.tuxfamily.org/lib/rassmalog/doc/guide.html -* "Jeckyll":http://www.jekyllrb.com/ -* "WebGen":http://webgen.rubyforge.org/ -* "Rog":http://rog.rubyforge.org/ -* "Rote":http://rote.rubyforge.org/ -* "Hobix":http://hobix.com/ -* "RakeWeb":http://rakeweb.rubyforge.org/wiki/wiki.pl -* "RubyFrontier":http://www.apeth.com/RubyFrontierDocs/default.html -* "StaticMatic":http://staticmatic.rubyforge.org/ -* "StaticWeb":http://staticweb.rubyforge.org/ -* "ZenWeb":http://www.zenspider.com/ZSS/Products/ZenWeb/ -* "YurtCMS":http://yurtcms.roberthahn.ca/ -* "NanoBlogger":http://nanoblogger.sourceforge.net/ - -There are probably even more, with different features, but they all try to solve the same problem: provide a way to generate static web sites in an automated way. - -I spent some time reading about each one of them, "evaluating the pros and cons":http://github.com/h3rald/h3rald/issues/closed#issue/1 and in the end I decided to go for "nanoc":http://nanoc.stoneship.org/, simply because it was the only one that seemed to fit all my needs. - -h3. A quick overview of nanoc - -nanoc is a nifty tool written in Ruby suitable for _[...] building small to medium-sized websites_. In other words, anything which doesn't involve some fancy user interaction. For what concerns blogs, the only user interaction is _comments_ – but that's fine, because there's more than one web service for that, such as "Disqus":http://disqus.com/ or "IntenseDebate":http://intensedebate.com/. - -h4. Some details on the project - -Compared to the alternatives, nanoc is one of the most mature and most maintained, having hit just a few weeks ago its 3.0 release. Its creator, Denis Defreyne, uses it for his own "web site":http://stoneship.org/ and is involved with the project on a daily basis, both coding and offering support to nanoc users like myself who regularly ask questions on the "nanoc user group":http://groups.google.com/group/nanoc. - -Denis also seems very concerned about keeping documentation up-to-date – something that really impressed me from a technical writer's point of view. The "tutorial":http://nanoc.stoneship.org/tutorial/ he put together will get you started in no time, and the "manual":http://nanoc.stoneship.org/manual/ will explain everything else you may possibly want to know. When release 3.0 came out he even put together a "migration guide":http://nanoc.stoneship.org/migrating/. If this is still not enough and you don't mind spending some time extending the system, nanoc's "RDoc documentation":http://nanoc.stoneship.org/doc/3.0.0/ is very comprehensive compared to other Ruby projects. - -h4. Sites, Items and data sources - -!>/img/pictures/nanoc-structure.png! - -nanoc ships with a really neat command line tool that can do most of the work for you. @Nanoc3 create_site h3rald@ will create a new web site in a folder called h3rald. The contents of this folder are laid out according to a particular logic (_convention over configuration_, remember?) So: - -* *content* – your articles, pages, stylesheets, images, ...all the site content and assets. -* *layouts* – the site layouts (and partial layouts) -* *lib* – place your custom ruby code and vendor libraries here -* *output* – your "compiled" site, ready to be deployed -* *config.yaml* – your site's configuration file. The only one (and it's just a few lines) -* *Rakefile* – place any custom Rake task here -* *Rules* – defines the rules for compilation, layout and routing - -Here's the default @config.yaml@ file: - -<% highlight :yaml do %> ---- -data_sources: -- items_root: / - layouts_root: / - type: filesystem_compact - output_dir: output -<% end %> - -A _data source_ in nanoc defines where data is retrieved from to create the web site. By default, the "filesystem_compact":http://nanoc.stoneship.org/doc/3.0.0/Nanoc3/DataSources/FilesystemCompact.html data source requires that you create two files in the /content folder for each article or page of your web page: -* One containing the actual content of the page -* Another for the page's arbitrary metadata - -By personal preference, I chose the "filesystem_combined":http://nanoc.stoneship.org/doc/3.0/Nanoc3/DataSources/FilesystemCombined.html data source, which allows you to combine the content and the metadata of a page in a single file. - -The source code for this very article, for example, starts like this: - -<% highlight :text do %> ------ -type: article -tags: -- website -- ruby -- programming -- writing -date: 2009-09-15 13:32:51.049000 +02:00 -permalink: take-back-your-site-with-nanoc -title: "Take back your site, with nanoc!" -toc: true ------ -Back in 2004, when I bought the h3rald.com domain, this site was static. At the time I hardly -knew HTML and CSS, nevermind server-side languages, so I remember creating a _pseudo-template_ for - the web site layout and using it whenever I wanted to create a new page, to preserve the overall look-and-feel. -This was a crude and inefficient strategy, of course: whenever I changed the layout I had to replicate the change - in all the pages of the site – the whole eight of them. -<% end %> - -At run time, the content goes through a Textile filter and the metadata is used in layouts, to generate tag links automatically, for example. - -h4. Layouts, filters, and helpers - -Layouts in nanoc are similar to layouts and views in Rails, but much simpler. The same applies to helpers. Here's a snippet from my "default layout":http://github.com/h3rald/h3rald/tree/master/layouts/default.erb: - -<% highlight :text do %> - <div id="container"> - <!-- CONTENT START --> - <div id="content" class="clearfix<%= (@item[:permalink] == 'home') ? ' home' : ' standard' %>"> - <h2><%= @item[:title] %></h2> - <% case @item[:type] - when 'article' then%> - <div id="content-header"> - <%= render 'article_meta', :article => @item %> - </div> - <% end %> - <hr /> - <div id="content-body"> - <%= yield %> - </div> - <div id="content-footer"> - <div class="share"> - <script type="text/javascript" src="http://w.sharethis.com/button/sharethis.js#publisher=6e34d60c-b14e-4c19-9b2f-7c35a9f0ab09&type=website&linkfg=%23a4282d"></script> - <% if @item[:feed] then %> - <a href="<% @item[:feed_url] || @item[:feed]+"rss/" %>" type="application/rss+xml" rel="alternate"><img src="/images/theme/feed-icon-14x14.png" alt="#"/>H3RALD - <%= @item[:feed_title]%></a> - <% end %> - </div> - <%= render 'article_buttons' if @item[:type] == 'article' %> - </div> - </div> -<% end %> - -This source code snippet shows quite a few features of nanoc's layouts: -* You can access the metadata of the page which is being rendered using the <notextile><code>@item</code></notextile>, so <notextile><code>@item[:title]</code></notextile> returns the page's title, for example. -* Layouts can be nested, and behave like Rails's partials. The @render@ takes a string parameter (the name of the layout to render) and an optional hash parameter to pass variables to the layout. -* The @yield@ method is used to include the content of a page. -* Layouts support any kind of filter, like ERB for example. Go crazy. - -Helpers can be used in layouts to perform common tasks, like creating links, feeds, navigation elements and so on. Check the "source code docs":http://nanoc.stoneship.org/doc/3.0.0/ for more info, and of course feel free to create your own as you see fit. - -Finally, filters are used to filter content markup. nanoc ships with "almost everything you need":http://nanoc.stoneship.org/manual/#list-of-built-in-filters, from Textile to Haml to RDoc, but nobody forbids you to create your own, and it's dead easy. - -h4. Rules and tasks - -While tasks (as in Rake tasks) do not constitute a huge part of nanoc (but as usual, you may need to create your own to perform custom operations), Rules became, as of version 3, one of the key concepts to grasp in order to make everything work. Rules are stored in the @Rules@ file of your nanoc site, they can be used to: -* Define routes, i.e. where pages are deployed in the output folder. -* Define how pages are compiled, which filters to apply to a particular set of pages, which layouts to use, etc. -* Define how layout are handled, which filters to apply to a particular layout, etc. - -You can find more information in the "manual":http://nanoc.stoneship.org/manual/#rules, along with other important information, but for now, let's say you should be familiar with _most_ of nanoc's jargon and how it works. Let's see what you can do with it, in practice. - -h3. Migrating from your blog platform - -As of version 7, h3rald.com has been powered by the "Typo":http://www.typosphere.org blog platform. If you are not familiar with it, let's just say it's a sort of Wordpress built on top of Rails: database backend, pretty admin front-end, tags, comments, and all sort of things a blog may need. While Typo is pleasant enough to use, it has all the inherent disadvantages of any other similar platform: -* It relies on a database -* It relies on server-side scripting to render pages -* It uses a complex caching mechanism to produce, ultimately, semi-static pages -* It may be subject to exploits, attacks, high server loads, and similar -* You can't really customize it beyond a certain point -* You have to upgrade your backend frequently, and often is not as painless as you may expect -* You can't use versioning tools like git for your content, as it's stored in a database - -I'm not claiming that nanoc is blogging's silver bullet (it was not created for that), but for sure: -* It _does not_ rely on a database -* It _does not_ rely on server-side scripting to render pages (not in real-time, anyway) -* It _does not_ need a complex caching mechanism simply because it produces static pages -* It is definitely less prone to nasty things -* It's extremely flexible and hackable with very little effort -* You don't have to upgrade all the time, but it is _really_ painless if you decide to -* You can use git and similar: your content is in plain old text files - -Rants are beside the point, suffice to say I recently convinced myself that switching from Typo to nanoc was a _good thing_, so let's see how it worked out. - -h4. Posts, pages and comments - -Out of Typo's MySQL database, I just wanted to get the following data: -* Pages and posts -* Tags -* Comments - -Following the approach used by "Jekyll":http://github.com/mojombo/jekyll, I decided to use the simple and powerful "Sequel":http://sequel.rubyforge.org/ gem. I'm sorry to disappoint you, but the whole migration process can be summarize with the following Rake task: - -<% highlight :ruby do %> - task :migrate, :db, :usr, :pwd, :host do |t, args| - raise RuntimeError, "Please provide :db, :usr, :pass" unless args[:db] && args[:usr] && args[:pwd] - db = Sequel.mysql args[:db], :user => args[:usr], :password => args[:pwd], :host => args[:host] || 'localhost' - # Remove all existing pages! - dir = Pathname.new(Dir.pwd/'content') - dir.rmtree if dir.exist? - dir.mkpath - # Prepare page data - dataset = db[:contents].where("state = 'published' || type = 'Page'") - total = dataset.count - c = 1 - total_tags = [] - dataset.each do |a| - puts "Migrating [#{c}/#{total}]: '#{a[:title]}'..." - meta = {} - meta['tags'] = get_tags a[:keywords] - meta['comments'] = get_comments db, a[:id] - meta['permalink'] = a[:permalink] || a[:name] - meta['title'] = a[:title] - meta['type'] = a[:type].downcase - meta['date'] = a[:published_at] - meta['toc'] = true - meta['filters_pre'], extension = get_filter db, a[:text_filter_id] - contents = convert_code_blocks meta, a[:body]+a[:extended].to_s - write_page meta, contents, extension - c = c+1 - end - end - -<% end %> - -That's it. Well, almost: you can find the @get_comments@, @get_tags@ and @get_filter@ methods in a separate "utility file":http://github.com/h3rald/h3rald/tree/master/lib/utils.rb. Nothing special really, just a few convenience methods wrapping queries or simply processing data. Note how all information, including tags and legacy comments, is saved in each page's metadata. The @write_page@ method simply creates a file in the @/contents@ folder. - -h4. Filters and highlighters - -On my old site, I used mainly Textile and Markdown to write posts. However, some of my really old articles used BBCode, whose corresponding filter is not available in nanoc. No worries, I soon found out that creating a new nanoc filter came down to this: - -<% highlight :ruby do %> -require 'rubygems' -require 'bb-ruby' - -class BbcodeFilter < Nanoc3::Filter - identifier :bbcode - - def run(content, args) - content.bbcode_to_html - end - -end -<% end %> - -Yes, that's it. Granted, the @bb-ruby@ gem does all the work, but notice how easy it is to just plug in new Ruby code into nanoc's architecture! - -The next big challange was code highlighting. After a quick research, I found at least a half dozen of possible solutions to highlight source code. Some were javascript based, others were based on a server-side language like PHP, Ruby or Python. Again, I looked at Jekyll for inspiration and discovered they integrated the "Pygments":http://www.pygments.org _Python_ library. Why use a Python library for code highlighting in a Ruby-based project? Because there's nothing to stop you (if you can run Python on your server, that is), because it looks very neat and because it supports a lot of different programming languages. - -Lazy as I am, I more or less dropped "Chris Wanstrath's Ruby wrapper":http://github.com/h3rald/h3rald/blob/master/lib/albino.rb into my @/lib@ folder (I just used Open3 instead of Open4 for Windows compatibility), and monkey-patched nanoc's filtering helper as follows: - -<% highlight :ruby do %> -module Nanoc3::Helpers::Filtering - - def highlight(syntax, &block) - # Seamlessly ripped off from the filter method... - # Capture block - data = capture(&block) - # Reconvert <% %> - data.gsub! /<%/, '<%' - data.gsub! /%>/, '%>' - # Filter captured data - filtered_data = "\n<notextile>"+Albino.colorize(data, syntax)+"</notextile>\n" rescue data - # Append filtered data to buffer - buffer = eval('_erbout', block.binding) - buffer << filtered_data - end - -end - -include Nanoc3::Helpers::Filtering -<% end %> - -There you go, another thing sorted. - -h4. Tags and Feeds - -Adding tagging support was a tiny bit more tricky. nanoc supports content tagging out-of-the-box though metadata and a simple helper, but I wanted to create tag pages (with feeds). Nothing too difficult though, it all came down to a simple Rake task: - -<% highlight :ruby do %> - task :tags do - site = Nanoc3::Site.new('.') - site.load_data - dir = Pathname(Dir.pwd)/'content/tags' - dir.rmtree if dir.exist? - dir.mkpath - tags = {} - # Collect tag and page data - site.items.each do |p| - next unless p.attributes[:tags] - p.attributes[:tags].each do |t| - if tags[t] - tags[t] = tags[t]+1 - else - tags[t] = 1 - end - end - end - # Write pages - tags.each_pair do |k, v| - write_tag_page dir, k, v - write_tag_feed_page dir, k, 'RSS' - write_tag_feed_page dir, k, 'Atom' - end - end -<% end %> - -Again, you can find all the other simple utility methods in my "utility file":http://github.com/h3rald/h3rald/tree/master/lib/utils.rb. - -When it came to feeds, I decided to create a new method for the Blogging helper to create RSS feeds, although nanoc does come with an Atom feed generator: - -<% highlight :ruby do %> - def rss_feed(params={}) - require 'builder' - require 'time' - prepare_feed params - # Create builder - buffer = '' - xml = Builder::XmlMarkup.new(:target => buffer, :indent => 2) - # Build feed - xml.instruct! - xml.rss(:version => '2.0') do - xml.channel do - xml.title @item[:title] - xml.language 'en-us' - xml.lastBuildDate @item[:last][:date].rfc822 - xml.ttl '40' - xml.link @site.config[:base_url] - xml.description - @item[:articles].each do |a| - xml.item do - xml.title a[:title] - xml.description @item[:content_proc].call(a) - xml.pubDate a[:date].rfc822 - xml.guid url_for(a) - xml.link url_for(a) - xml.author @site.config[:author_email] - xml.comments url_for(a)+'#comments' - a[:tags].each do |t| - xml.category t - end - end - end - end - buffer - end - end -<% end %> - -Nothing too daunting, once you get used to Ruby's XML builder. I followed a similar approach for my "monthly archives":/archives - -h4. 3rd-party services - -Finally, the interactive bits. I basically turned to third-party services and a bit of jQuery for everything which required user-interaction or pulling data from other web sites. Here's a list of services and APIs I currently use: - -* "IntenseDebate":http://intensedebate.com/, for comments. -* "Google AJAX Search API":http://code.google.com/apis/ajaxsearch/web.html for internal site-wide search. -* "Twitter JSON API":http://apiwiki.twitter.com/ to fetch tweets. -* "Delicious JSON API":http://delicious.com/help/json to fetch delicious bookmarks. -* "BackType JSON API":http://www.backtype.com/developers to fetch comments from other sites. -* "GitHub JSON API":http://develop.github.com/ to fetch GitHub commits for most of my "projects":/projects - -If you want to know how I integrated them, check out my "/js folder":http://github.com/h3rald/h3rald/tree/master/content/js, it was very simple, really. - -h3. Conclusion - -I was very happy of switching to nanoc. It didn't take me long, and I spent most of the time with non-nanoc issues (brushing up jQuery, CSS, graphics, etc.). Of course knowing the Ruby programming language helps, and if you're not comfortable with hacking your way a little bit, then maybe it's not for you. - -!</img/pictures/nanoc-compile.png! - -Personally, I've been waiting for something like nanoc for a long time: its simple and yet powerful architecture makes you able to do virtually anything with it. For the first time in a long time, I feel like I'm in complete control of my web site, I know every bits of it and if I want to change the way it works or looks I only have to touch a few files. - -nanoc's metadata is mindblowing for its simplicity and power: although you're not dealing with a database, you can query your content in the easiest ways possible. Whenever I needed a way to easily access pages, filter them, add extra logic to them, I just added metadata. If you forget something, you don't have to change your database tables, create new relationships or anything of the sort, you simply add metadata to pages. - -Be warned that tweaking nanoc gets addictive very quickly: you soon end up creating silly little tasks for making things just the way you want. For me, adding a new article to my blog now just means this: - -<% highlight :text do %> -$ rake site:article name=take-back-your-site-with-nanoc -$ vim content/articles/take-back-your-site-with-nanoc -... write & close the file ... -$ Nanoc3 compile -<% end %> - -...Exactly what I need. Nothing more, nothing less.
@@ -1,34 +0,0 @@
------ -permalink: textlinkads_sidebar_v01 -filters_pre: -- redcloth -title: Text Link Ads sidebar for Typo -comments: [] - -date: 2007-11-17 04:47:00 +01:00 -tags: -- rails -- opensource -type: article -toc: true ------ -I thought it would be nice to share the code of the sidebar I created to display "Text Link Ads":http://www.text-links-ads.com sponsor links on my Typo powered blog. - -There's actually another "plugin":http://blog.nanorails.com/articles/2006/10/01/a-new-rails-plugin-for-textlinkads-including-support-for-feedvertising which was made for Typo 2.6, but unfortunately it doesn't work with Typo 4.1.1. - -h3. Installation - -Just unzip it inside your vendor/plugins directory. The new sidebar should appear in the list of your available sidebars in the Typo's administration area. - -h3. Configuration - -In Typo's administration area, configure the following settings for this sidebar: - -* *Title*: The title of the sidebar -* *KEY*: Your TLA's XML key -* *Affiliate ID*: Your TLA's affiliate ID -* *Advertise Here*: A message shown when no links are displayed. - - -*"Download Text Links Ads Sidebar v0.2":/files/textlinkads_sidebar_v0.2.zip* -
@@ -1,160 +0,0 @@
------ -permalink: the-internet-philosopher -filters_pre: -- redcloth -title: The Internet Philosopher -comments: [] - -date: 2006-05-11 13:00:41 +02:00 -tags: -- internet -- writing -- travelling -type: article -toc: true ------ -Recently I got this rather short email from a guy named Daniel Lampinen: - -<blockquote> -Hi. Respect for being an internet addict - that's good. I have moved to India just to afford and get time to be on the internet as much as possible: - -"http://www.ropix.org/english.html":http://www.ropix.org/english.html -</blockquote> - -Spam? Yeah, must be: I get this kind of stuff all the time, and this looked like another person asking for money. Or maybe not? After all this guy is not asking for anything in his mail, he's just telling me something about myself and perhaps try to get me to visit his site[1]. I did indeed - after all it was just one click away - mostly for curiosity.That website was one of the most plain ones I've ever come across, perhaps to help the visitor to understand that _content_ is the only think that matters, not _design_. Daniel seems to be Swedish, and he immediately apologizes for his imperfect English: indeed there are some mistakes here and there, but I could understand _enough_ about him, his way of living and his beliefs that I decided to write this article about him. - -h3. An Internet Philosopher - -_"I'm trying to live for my opinions and ideas"_ - -!>/img/pictures/lampinen/piccadilly.jpg! - -This is Daniel's "statement" which guides his entire life. He lives for his opinions and ideas, he lives to debate them with others, to talk to others about them, and eventually getting money for doing so: that would be his ideal way of living, and he partly realized it already. -It all started last year (2005), when he was a mailman in Stockholm: that was a boring job, probably like a million other jobs anywhere in the world. He didn't want to do that, and - believe it or not - he didn't want a business career either: he just wanted to spend time on the Internet, creating _things_. Not cool websites or successful e-businesses, just express his own opinions, thoughts and ideas and spread them online, he defines himself a _philosopher_, and yet I could not find anything better to define him: he literally lives for his thoughts. - -A few months ago the Italian Telecom broadcasted one of the most peculiar adverts I've ever seen: they were portraying an hypothetical past, where Gandhi was appearing on TV, on the Internet, on mobile phones, on big screens in the streets pronouncing one of his famous speeches. The advert ends with a sentence like _"Imagine what could have happened if he could have used our communication systems"_, trying to promote Telecom's services, and it has been criticized[2] many times for this. -I immediately thought about this advert while reading Daniel's homepage. Obviously he's far from being Gandhi, but at least he attempts to live in a simple and honest way and tries to communicate with as many people as possible. And he lives in India, he recently moved there from Sweden mainly because it's much, MUCH cheaper than any country in Europe or in the rest of the Rich World. - -!</img/pictures/lampinen/cow.jpg! - -From what I could read about him, his life is quite simple: he tries to spend as little money as possible and not in futile things. He lives in a cheap hotel in Puri, India, where he can access the Internet - that's all that matters. Perhaps it may sound a bit freaky, but certainly not as freaky as going out getting trashed every night, buying drugs or waste money on trendy clothes - at least from someone's point of view. - -_"Yeah, OK, it's all good so far but how can he live like that? Has he got a job?"_ - -Yes and no - not in a traditional way, at least. He sells stuff, his thoughts, ideas and writings to be more precise, and no, there are no set prices: he goes _"[...] by this principle (the Annalakshmi[3] principle): pay as much as you think my work is worth.[4]"_. -It's quite similar to charity and it's an interesting idea, whose success highly depends on the conscience of the giver: _the more honest his soul his, the more he'll give_. - - -h3. Business Talk - -Don't call him a beggar. Daniel has his own way of seeing the economy of the Rich World and also his own views when it comes to money: - -!>/img/pictures/lampinen/money.jpg! - -<blockquote> -"This should be mentioned: give money to Unicef instead of to me. But give money to me instead of buying a expensive new couch. -[...] If I can inspire you to consume less, it may be worth some money. How would the world look like if everybody payed each other because they wanted to, not only because they legally had to? Pretty good, right? On some places in the world there's today restaurants where you can pay as much as you thought that the food was worth. See this like a newspaper or a book that you can choose to pay for. - -There's plenty of different policies on what you should put your money on. On of the policies is to follow the market totally (except when it comes to classic charity). That one use to result in that you think it's ok to buy a Gucci bag for $1000 but think it's out of the question to give something to someone that "doesn't wanna work for the money". - -[...] It can even be fun to get fooled by a souvenir salesman in a warm country - if you let go of some of the pride and the "millimeter justice". Do that. You can still give as much or more to Unicef. I prefer a society where people put money on other people - both those struck by a catastrophe and rich people in your country - instead of buying un-necessary stuff.[5]" -</blockquote> - -Daniel accepts donations in many ways[6], and it must be noted is that his supporters may even choose how he should use his money, you can tell him what to buy or not to buy, and he'll respect your decision: someone told him not to buy drugs and he never did, while another asked him to buy good food, and maybe a beer at local restaurants, and he did exactly that[7]. -If you're curious about what he buys, Daniel added a list of expenses[8] to his site which diligently updates every time he spends money. Prices are in indian rupees (1$ is about 45 rupees!), and it looks like this: - -* 10 Bread -* 9 Tip to roomservice -* 30 Internet ticket -* 10 Drinking water -* 40 Riksa taxi -* 10 Muffins -* 10 Bananas -* 25 Bread and chips -* 10 Tip to roomservice -* 36 Candy -* 15 Bread -* 20 Internet ticket -* 12 Tip to roomservice -* 20 Tip to roomservice -* 7268 Hotel room for 8-18 April (plus food+bewerages+internet+laundry) -* 15 Tip roomservice - -In a nutshell, when it comes to money and buying things, Daniel lives by this simple rule: - -bq. "Work with unwanted things as little as possible, consume as little as possible, communicate as much as possible" - -But is it really that simple? Could _you_ live like him and still be happy? Certainly he has a big advantage: he lives in India, where everything costs much less than in Europe or the US. If you decide to try, he can help: he can give anybody suggestions on how to live cheaper and even keep you motivated to do so, and all he asks in exchange is what YOU think his suggestions are worth. All the payments for this service must be made through a Swedish company[9], which is technically his employer. - -He can also sell "ideas" in the same way: you start emailing him explaining your situation and your needs, and he'll try his best to come up with a solution and his own opinions. You won't believe it, but a Swedish company[10] was really pleased to hear his opinions and thoughts about innovation and used his suggestions to improve their services. - - -h3. An Internet Addict - -!</img/pictures/lampinen/view.jpg! - -Perhaps one of the most interesting things about Daniel's website is his journal. Not a proper blog, but just a single static webpage hosting all his daily thoughts: you can't comment to them, but reading some passages may be interesting enough. -The best way to do so is trying to search for a particular word (in Firefox it's pretty easy) and read what he wrote about that, I tried with "Internet" and here's something I came across: - -bq. "Now I'm finally realizing my two year old plans to be in a poor country. The only thing I'm gonna do is thinking, and surfing on the internet, see how long my money will last, and try to get new money to my VISA card by doing work that can be done with a brain and internet, for example producing ideas and point of views to companies in rich countrys. What's good for everybody, is that I don't need many dollars/euros to survive." - -This was one of his early posts, and yes, that's exactly what he started to do... - -bq. So, I'm living at the internet. Hotel room, beach, internet. That's pretty monotonous. But all together better than better than s[**]t job. I'm gonna contact medias that cover the internet and offer to write things in behalf of a person that have filled his life with only internet. - -bq. Internet, internet, internet. I'm happily addicted to something that makes me smarter and finding the right people. The only thing you need is a cable. People are crowding at the internet cafes here at the tourist street by the beach, and it's a nice atmosphere. - -An happy internet addict. Although how good this addiction is can be debatable, Daniel seems to have found his perfect way of living, and the only thing he needs is an Internet connection and his brain. - -bq. "Yesterday I searched on Google for the swedish words for "I am an internet addict" and e-mailed the words "respect for being an internet addict - that is good" to the bloggers that had written the sentence "I am an internet addict" during the last year." - -Yes, that's exactly the message I got by email a few days ago. At first I must say I found it even a bit offensive: _"I am not an Internet addict! You might be, but I'm not."_ - He obviously didn't mean to insult neither me nor any other blogger he mailed: for him, "being an internet addict" is probably one of the best things people - especially young people - can do. - -Shocked? Yes, it's understandable: we hear a lot about Internet addiction in these days, and I was reading in a recent study[11] which pointed out that: - -bq. "[...] When 54 percent of Internet addicts say they have a history of depression, 52 percent drug or alcohol abuse and 34 percent an anxiety disorder, it seems even clearer that cyberspace is just another place for unhealthy and self-destructive behaviors to manifest themselves." - -Is it though? Daniel Lampinen truly admints he's an Internet addict, but he most definitely doesn't have any history of drug or alcohol abuse: - -bq. "On [the] Give me money [page] there's now a list of demands from the givers. The first demand come from the latest giver: no drugs. Which I'm fine with. As you can see on What I'm buying, I've only bought one joint (in Christiania in Copenhagen). And that was just a statement because I think others is gonna be free to do it. I never take anything to "get away from reality", or to "have fun". Not even beer, which I only take to relax. That's how dull I am. The reality rules." - -There you are. -So why did he choose to become an Internet addict? Well, most definitely because he was tired of the Rich World's society: he had a boring job which he didn't enjoy, and he simply realised that the Internet _could_ - at least sometimes - be better than ordinary life. He openly admits he's a weird human being, and he's fine with that, but you can be sure of two things: - -* he's totally, absolutely honest, in anything he does, and he's not afraid to express his own opinions without adjusting them according to the people around him -* he maintained his individuality at the cost of living in a poorer country - -How many people in the Rich World can accomplish either of these things? Please raise your hands... - -h3. Notes - -Very special thanks to Daniel Lampinen for allowing me to write about him and providing all the pictures for this article. - -fn1. Daniel Lampinen's "website":http://www.ropix.org/english.html, English version. - -fn2. "Gandhi e Telecom Italia":http://www.zeusnews.it/index.php3?ar=stampa&cod=3432 - Comments on the famous Italian advert. [Italian] - -fn3. "Annalakshmi":http://www.annalakshmi.org/index.php - _A non-profit organization dedicated to bringing the joy of Indian culinary, visual and performing arts to one and all._ -_Annalakshmi is an international chain of vegetarian restaurants that augments its dining experience by showcasing Indian arts and handicrafts as well as cultural dance and music performances. Inspired by the Hindu concept for Abundance, Annalakshmi operates on the basis of "Eat as you Want, Pay as you Wish" where the guest decides not just what to order but also how much to pay._ - -fn4. From Daniel Lampinen's "UI Ideas":http://www.ropix.org/ideas.html page. - -fn5. From Daniel Lampinen's "Money":http://www.ropix.org/money.html page. - -fn6. Daniel's "Money page":http://www.ropix.org/money.html lists all possible ways to dive him money, most notably: - -* "Paypal":https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=800825%40gmail%2ecom&item_name=Ropix&no_shipping=0&no_note=1&tax=0¤cy_code=USD&bn=PP%2dDonationsBF&charset=UTF%2d8 -* His IBAN bank account number (an international number): -SE1580000008201644439081 -With this code: BIC. SWEDSESS -* His "free page":http://www.ropix.org/free.html. - -fn7. It's documented in the "Gustav 100Kr":http://www.ropix.org/gustav100kr.html page. - -fn8. Daniel's "list":http://www.ropix.org/expenses.html of expenses. - -fn9. "F-Bolaget AB":http://www.f-bolaget.se/index.html - -fn10. "Intip":http://www.intip.se/ - -fn11. "Is Internet addiction a real problem?":http://arstechnica.com/news.ars/post/20060510-6795.html - Arstecnica.com
@@ -1,64 +0,0 @@
------ -:type: article -:permalink: the-merb-way-review -:tags: -- ruby -- books -- review -:title: "Book Review: The Merb Way" -:toc: true -:date: 2009-11-17 12:15:36.788596 +02:00 -:summary: A review of "The Merb Way", by Foy Savas. This book dives deep the framework, and can be really helpful to those interested in understanding more about Merb – or about developing any modular application in Ruby. ------ - -When I first picked up this book I was surprised by its length. Somehow, after reading "The Rails Way":/articles/the-rails-way-review, I got stuck in my mind that "The Merb Way":http://my.safaribooksonline.com/9780321601636 had to be almost equally voluminous. Instead, this book is about 300 page long, roughly as long as the sum of the chapters devoted to _ActiveRecord_ in Obie Fernandez's acclaimed Rails bible. - -Apparently it only takes 300 pages to describe a web framework nowadays! I couldn't help but feeling a bit skeptical at first. Even in the foreword, Obie Fernandez presents the book – and the whole "Merb":http://www.merbivore.com framework – with some initial skepticism: isn't Ruby on Rails enough? Why do we need yet another Ruby web framework? And above all, seeing that Merb is going to eventually be "merged into Rails 3":http://weblog.rubyonrails.org/2008/12/23/merb-gets-merged-into-rails-3, why on Earth do we need a book about Merb, _now_? - -Needless to say, Foy Savas proved that both Merb and its book cannot be dismissed just like that. - -h3. Getting started - -!>/img/pictures/therailsway.jpg! - -The book starts with the original "Merb Pastie":http://pastie.org/14416, a single page of Ruby code able to sort out HTTP requests, dispatch them to the appropriate controllers and render a web page. This piece of code is enough to convey what Merb is: a new breed of web framework, almost as simple as it can get but very poweful and flexible at the same time. - -As you start diving in through the first chapter, you realize you're reading about a _Hacker's Web Framework_. That's precisely what Merb is: a very versatile tool to get the job done, in the simplest way possible. Similarly, _The Merb Way_ immediately feels like a _Hacker's Handbook_ rather than an ordinary guide on how to develop web applications. You won't learn what MVC is by reading this book, and don't expect to be taught what a _mixin_ is; you are reading a book about a Ruby web framework that was born after the _Rails Revolution_, so it is safe (for the author) to assume that: -* You know the Ruby programming language -* You know what Ruby on Rails is and you tried it out, at the very least - -The first few chapters are about the core functionalities provided by an an MVC framework: after a comprehensive first chapter about Merb's fundamentals (from the layout of a Merb application to an overview of Merb internals) you are quite abruptly "introduced" to routing, controllers, views and models. These chapters do not aim to provide a comprehensive description of each component, they simply tell you: _here's how Merb does this_. - -Out of the first five chapters, favorite is definitely the one about _Models_. Although Merb is ORM-agnostic, DataMapper is the _de facto standard_ for Merb applications, and it fully embrace the framework's design and extreme flexibility without being _in the way_ of your code. -Foy does an excellent job in this chapter by strategically describing DataMapper's code from the top to the very bottom, from the highest abstractions to raw SQL code, using a plethora of snippets taken from the actual Merb code. - -h3. It's about how Merb works, not how to work with Merb - -After reading the _Models_ chapter I decided to go back and re-examine the previous chapters. I didn't notice until then, but the author sneakily _smuggled_ a consistent amount of Merb source code into this book. This is rather unusual for books about web frameworks: they normally tell you how to use the framework, not how it was built! While this can be disappointing for people used to read Rails books, it came as a very pleasant surprise to me. - -About 40-50% of this entire book (and I'm not exaggerating) is Ruby source code. In a good way, it feels like a collection of strategically-positioned code snippets glued together with explanations of the most tricky bits and digressions on how the framework was _designed_. In other words, it probably contains just enough text to make sure that the average reader understands the code, but remember that the _average reader_ of this book must know Ruby failry well. - -There is no pointless prose in this book, no explanations of obvious methods, no fancy words, no useless boasting on how cool the framework is: just an objective description of how Merb works and of the key design decisions behind it. If I may, the only thing that doesn't feel quite right with this book is its title: _Merb Internals_ would have been a better choice. Once you realize this, the book suddenly makes sense, and can even make you a better Ruby programmer. - -_The Merb Way_ does an excellent job in describing how to design a web framework, or any real-world Ruby application for that matter. It teaches you that modularity is the key to flexibility by showing how the Merb stack is organized. Sure, it doesn't teach you how to create a blog in five minutes, but perhaps a thorough explanation of how anthentication is implemented (Chapter 9) will actually be useful in two months time, when you'll have to create your own Merb plugin from scratch. - -h3. Some constructive criticism - -The idea behind this book is clever but a bit dangerous. I flipped through the pages in front of my wife and asked her what was wrong with it. _"There's too much code!"_ she said, without hesitation. Precisely. - -It is damn good Ruby code, but sometimes you wish there was more text describing how to use it in practice. Or maybe some code examples on _using_ the framework on a real-world application. Not a chance. Of all that holy code, there's not much featuring something other than Merb itself. Basically the exact opposite of all the other books about Rails or other web frameworks! - -Even accepting the fact that you are not reading a book about developing web applications, there are two more things which could be improved: -* Merb's design is very intriguing, and you grasp the essentials by reading this book, but a few diagrams here and there and more in-depth digressions on the subjects would have been nice. -* Besides DataMapper, what I really wanted to read about were Slices and Parts – unfortunately the chapters about them are far too short and shallow. The reasoning behind this is that _their future may be uncertain_ due to the Rails 3 merge. Pity. - -h3. Conclusion - -The death of Merb has been greatly exaggerated. Too bad I "gave up web frameworks altogether":/articles/take-back-your-site-with-nanoc/ for my site, because after reading this book I would have gone for Merb _today_ rather than waiting to see the wonders of Rails 3 _tomorrow_. Even a book with this title could have been written in a very different way, I would still recommend it if you want to become a better Ruby programmer by learning from the best: Merb code really stands out, even compared to Rails, and Foy Savas does a great job presenting and describing it. - - - - - - -
@@ -1,31 +1,8 @@
------ -permalink: the-rails-way-review +----- title: "Book Review: The Rails Way" -comments: -- :date: - :author: Obie Fernandez - :url: http://obiefernandez.com - :id: 2684 - :body: |- - Fabio, - - Thank you for publishing your comprehensive review and especially for including constructive criticism from the perspective of a technical writer. You may or may not know that I'm starting to work on the second edition. Rest assured that I will do my best to take your feedback into account. - - Cheers, - Obie -- :date: - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 2685 - :body: "Thank you for your comment Obie! \n\n\ - I'm looking forward to reading it then... Actually I thought you were gonna wait for Rails 3! " -date: 2009-01-04 09:03:00 +01:00 -tags: -- rails -- books -- review -type: article -toc: true +content-type: article +timestamp: 1231056180 +tags: "rails|books|review" ----- > "Programming books are pointless: you buy them, you read them and you chuck them because they're already out-of-date!"@@ -124,3 +101,4 @@ No other book will go so in-depth about Rails or about everything you need to know to get your site up and running in a_real_ production environment. That's the reason why _The Rails Way_is the perfect companion for web development professionals who must ensure their applications are tuned up to perform and scale well.
This doesn't mean that beginners should be discouraged from reading this book, quite the opposite. This is actually the only book newcomers to Rails need once they are done reading all those awesome beginner-oriented tutorials freely available on the Internet. Everyone interested in Rails, at some point, has to follow _The Rails Way_. +
@@ -1,84 +0,0 @@
------ -:type: article -:title: "Book Review: The Rails 3 Way" -:tags: ["review", "books", "rails"] -:date: 2011-03-26 13:16:46.694283 +01:00 -:subtitle: aka The (Rails) Bible, 2nd Edition -:image: /img/pictures/books/rails3way/cover.jpg -:toc: true -:permalink: the-rails3-way-review -:pdf: true -:intro: | - Obie did it, again. With the second edition of his former masterpiece, _The Rails Way_, he managed to outdo himself delivering a new, even more useful, Rails Bible. Wether you're a Ruby on Rails professional like him or just an enthusiast, this book is pretty much everything you need to learn how to master the third release of DHH's Ruby web framework. - - "The Rails 3 Way":http://tr3w.com/ is no ordinary second edition. If you already own _The Rails Way_, you'll be pleasantly surprised that this is a different, more polished book. While something had to remain the same, there's a lot of new content in its 708 pages, and even the old content has been rewritten or at least revised. - - It doesn't matter whether you already know Rails 2.x or you're jumping straight into the Rails 3 world, if you use Rails, you can't miss this book. -:extended_intro: | - I started the "review of the first edition":http://www.h3rald.com/articles/the-rails-way-review/ with a quote from my fiancée (now wife) on how pointless programming books are, especially those dealing with newish technologies: they tend to go out of date fairly quickly. While this still holds true, there's not much you can do about it, except maybe purchasing a digital edition of the book instead. However, if you want to keep a good Rails reference book by your side, this has to be the one. ------ -$[document.intro] -&:[title|The Rails 3 Way] -&:[author|Obie Fernandez] -&:[img-path|/img/pictures/books/rails3way] - -§txt[ - @title[What's New] - - left-fig[&[img-path]/compare.jpg|The Rails Way vs. The Rails 3 Way] - -If you put _\/&[title]_ and the original _The Rails Way_ one next to the other, you can see that the new book is considerably shorter: about 200 pages less. This doesn't mean it contains less information, quite the opposite: the new book contains a lot more stuff with less _fluff_. Obie managed to reduce digressions to a bare minimum and focus on providing more informative content to the readers using less text. Think of it as a _fat-free_ book. - -While no _What's new in Rails 3_ section is included in the book, Obie points out the new stuff when needed (but not always). An example is chapter 12, _Ajax on Rails_, in which changes introduced by Rails 3 clearly stand out, especially the section on Unobtrusive JavaScript (UJS). - -Although the book is divided into chapters, it can also be divided into parts (each dealing with a specific theme) simply by looking at the front edge. According to this theme-based partitioning, Active Record makes up for nearly _a quarter_ of the book (173 pages), followed by _Active Support API_ appendix and the _All About Helpers_ chapter. - -Another nice addition that can really make the difference when you're in a hurry is the _Method Index_, which is separate from the main Index. It seems to account for all the methods in all (or at least the most important) classes in Rails. I didn't check method by method, but it is pretty comprehensive nonetheless, based on some quick spot checking. - -] -§txt[ - @title[Contents] - - right-fig[&[img-path]/sections.jpg|Active Record makes up for over 24% of the book] - -The first thing you notice once you read the first few pages, is that this book is _even more opinioned_ than its predecessor. - -quote[Even though Rails 3 is less opinionated than early versions, in that it allows for easy reconfiguration of Rails assumptions, this book is more opinionated than ever.|Obie Fernandez|Introduction to _The Rails Way_] - -In other words, you won't find an ERb view in the whole book (Haml rulez!) and if you don't like RSpec... well, you'd better skip Chapter 18 altogether. - -The other big difference with traditional Ruby and Rails books is the amount of reference to third-party code, mainly rubygems. Rails comes with no authentication functionality? So what: =>[https://github.com/binarylogic/authlogic|Authlogic] and =>[https://github.com/plataformatec/devise|Devise] are great for the job, go check them out! Do you need to test your Active Mailer emails? =>[https://github.com/bmabey/email-spec|email-spec] is all you need. - -I was actually surprised to find so much content not strictly related to Rails in this book: the first chapter starts off with =>[http://gembundler.com/|Bundler] (now a Rails dependency, however), Chapter 2 (Routes) mentions =>[http://rack.rubyforge.org/|Rack], and so does Chapter 4 (Controllers). If you want a nice and to-the-point practical introduction to =>[http://relishapp.com/rspec|RSpec], the first part of Chapter 18 covers that. - - left-fig[&[img-path]/reference.jpg|About 40% of the book is reference material] - -Then there's reference material. Plenty of it, a good 40% I daresay. The good thing is that (unlike the first edition) it won't bore you to death: take Chapter 5 (Working with Active Record) for example, you'll fly through find-related methods so swiftly you'll regret when it's over. Active Support? I didn't read every line of Appendix B, but when I want to know something about inflection methods I will know exactly where to find them, and what to expect: the method signature, a few lines of text, and a short example at most. - -My only regret? Cheat sheets. Or better, the lack of them. More tables, please! Granted, the web is full of Rails cheat sheets, but a few of them at the end of the book or even in a separate foldable add-on like in the =>[http://www.pragprog.com/titles/tpp/the-pragmatic-programmer|Pragmatic Programmer] can't hurt. - -Finally, some words about the code examples. The code/text ratio is almost 1:1, but Obie's choice of _not_ turning this book into a huge tutorial by implementing a single example application was absolutely right: The code snippets used in throughout the book are concise and relevant to the text around them and won't distrupt your reading. If you want to play with them, they're even =>[https://github.com/obie/tr3w_time_and_expenses|on GitHub] for you to clone and fork. -] -§txt[ - @title[Organization and Writing Style] - - right-fig[&[img-path]/flick.jpg|Yes, it's a long book. But you don't<br/>have to read it from start to finish!] - -_\/&[title]_ is a book for Rails professionals. If you don't know Ruby or if you never heard of Ruby on Rails, this book is _not_ for you. It won't teach you what MVC is, it won't waste time on explaining _convention over configuration_, it won't even describe the structure of a Rails app! If you're newcomer to Rails... well, that's what =>[http://ruby.railstutorial.org/|The Rails Tutorial] is for. - -To be honest, I'm with Obie on this. If this book had been beginner-friendly, it would have been even longer than the previous edition, and probably more boring. Instead, by assuming that the reader has been already initiated to the world of Ruby and Rails, the author can dive into the framework straight away. Moreover, chapters are not ordered by difficulty: they don't need to be, they need to be ordered in a way that makes sense for a Rails developer. - -Once again, this book includes personal sidebars used to voice the opinion of one of the co-authors or Rails gurus: there are plenty of "_Yehuda_ says", "_Xavier_ says", "_Durran_ says", and so on. Nothing new there, it's just a nice way to provide the reader with authoritative opinions on some matters. - -As I progressed through the book, I started noticing how Obie anticipated my questions and doubts: I found this to be a remarkable feature of this book, and an excellent way to make the readers feel they are on the same page with the author. If something should not be done because it may cause you problems, the author won't hold back. See page 214, "Extra Columns on *has_and_belongs_to_many* Join Tables", for example: it's a cool feature, but it can cause all sort of annoyances, and the bottom line is: use *has_many :through* instead, if you need extra columns on join tables. - -] -§txt[ - @title[Conclusion] - -_\/&[title]_ remains the _de facto_ reference book for Rails. I was quite pleased to see that Obie improved it so much, compared to the first edition. Sure, it cannot be recommended to absolute beginners, but it's not a big problem: if you're new to Rails, all you have to do is browse around and read a few basic tutorials first. - -What I really missed was a _What's New_ section, or something like that. The new stuff that was introduced in Ruby on Rails v3 is seamlessly blended with all the rest, which is great if you're tackling the framework for the first time, but not so much when you already read tons of books on Rails 2.x. I would have tagged content specific to Rails 3 in some way at least, for example with labels on the side of each page. Or maybe have a short introductory chapter covering the new features, and directions on where to find them in the book. - -Overall, _\/&[title]_ is a great book, and if you plan on using Rails 3 for your next web site, it deserves a special place on your desk. -]
@@ -1,176 +0,0 @@
------ -permalink: thoughts-on-firefox3-and-opera95 -filters_pre: -- redcloth -title: Thoughts on Firefox 3 and Opera 9.5 -comments: -- :date: 2008-06-13 06:59:23 +02:00 - :author: Friend - :url: "" - :id: 236 - :body: You may want to note that Quick Find, the Opera history search, not only searches titles, but also all the content in the pages you have visited. This makes it a lot more useful than the limited Firefox implementation. -- :date: 2008-06-14 01:19:15 +02:00 - :author: ben - :url: "" - :id: 237 - :body: |- - I really like Opera, but I think FF3 is such a big improvement that it has hit the tipping point. A lot of opera's adoption was from people who hated FF2's primitive UI, slow speed, and memory footprint. All have been solved enough that its larger user base will pretty make the solid winner. - - That said, I still use Opera. I don't like the new theme, because its harder to tell which tab is active (its not lit up enough), but luckily they have the classic skin. - - I think FF vs. Opera will be the same as Linux vs FreeBSD. The former has the critical mass, worse code base, and the religious fanatics. The latter is excellent, a niche, and their users are silently happy. -- :date: 2008-06-14 04:26:28 +02:00 - :author: wupperbayer - :url: "" - :id: 238 - :body: |- - As an addition to what Friend already said, Opera not only shows history entries in its adress bar while entering terms, but bookmarks, too (found by its title and its address). You can also use Quick Find in two other ways: Either search through opera:historysearch or through Opera's history panel. - - Otherwise, nice review! It's really hard to claim one browser is much better than the other, as they're both very good. It certainly depends on personal preferences. -- :date: 2008-06-15 09:37:05 +02:00 - :author: Opera user - :url: "" - :id: 239 - :body: "FF3 is much better than FF2 and comes close to Opera, I must admit some things do better than Opera. Only if I could use FF without mouse as I do in Opera. There nothing like Opera's SHIFT + arrows in FF. " -- :date: 2008-06-16 00:40:47 +02:00 - :author: Opera Synthesiser - :url: "" - :id: 240 - :body: Opera is still edges the Firefox, but just barely. That said, Firefox still has more users but Opera is improving with every single update. -- :date: 2008-07-22 06:21:35 +02:00 - :author: Daniel - :url: "" - :id: 250 - :body: I like the fact that a star shows up in the FF3 url box that indicates the page is in your fav folder and that you can modify it rigth away. FF has always been much more user friendly than Opera for most short cuts. Only recently has Opera modified one that was already in FF. Ctrl+t for tab, ctrl+b bookmark, ctrl+h history etc. these are the basic shortcuts Opera or any browser should have. -date: 2008-06-13 05:18:00 +02:00 -tags: -- browsers -- review -- firefox -- opera -type: article -toc: true ------ -Opera 9.5 is out, Firefox 3 too (more or less), so, which browser are you going to use today? -This new generatio of browsers offers plenty of new, innovative features and improvements over the past, in both cases: - -* You can finally use Firefox because it finally doesn't eat up all your RAM -* You can finally use Opera because it is finally "understand" ajaxified web sites like Gmail - -Amazingly, these two releases have a lot in common...!>/files/opera_sharp.png! - -h3. A fresh new look - -Both browsers needed a new look, let's be honest. Both didn't really care that much in the past releases, but suddenly things changed: the new Opera theme, Sharp, looks truly awesome on any platform, and the Mozilla development team came up with FOUR different themes, aiming to camouflage Firefox as a native application for all the major OSes. - -Personally, while I was really impressed by the new Opera theme, I was not too sure of the new direction taken for Firefox UI. Why a different theme for each different major operating system? In particular the XP theme could have been better, in my opinion. -Not a huge deal though, as both browsers are skinnable (although I'm not gonna alter the way Opera looks!). -<br /> -<br /> -<br /> - -h3. The speed of light - -My main complaint about Firefox 2 was its slow startup and generally slowness due to several memory leaks. This eventually led me to "switch to Opera" for my daily browsing a while ago. - -Firefox 3, luckily, is much faster and more memory-efficient than its predecessor, as the development team squashed most of the memory-related bugs. The introduction of jemalloc as the new memory allocator and also the new cycle collectory improved things quite a bit. - -Opera 9.5 still "feels" faster at startup and also the GUI is a bit more snappy than Firefox's, but Firefox 3 is _terribly_ fast at interpreting Javascript. -As a result, sites like Gmail or Google Reader are rendered almost instantaneously in Firefox 3, while Opera 9.5 is slightly slower. - - -h3. Address Bar 2.0 - -Both browser struggled to add more features to the Address Bar: Opera now supports search-as-you-type history search and Firefox... well, let's just say that Firefox Developers built something truly wonderful with the new "AwesomeBar": it is now possible to search history items _tagged pages and bookmarks_. - -!=/files/awesomebar.png! - -But there's more: you'll notice that the AwesomeBar does an outstanding job in retrieving results ordered by relevance, frequency and access time, and it also allows the user to restrict search to specific page types. - -As an Opera user, I must admit that Firefox is really way ahead with this. Unfortunately, Opera toolbar still is not that smart. - -h3. Sync'ing up - -Opera offers the ability to sync your bookmarks, notes, custom toolbars and Quick Dial pages via the new "Link":http://link.opera.com/ service. -It looks awfully similar to "Mozilla Weave":https://services.mozilla.com/, an experimental extension aiming to synchronize the whole Firefox profile. - -Currently, Weave allows users to sync bookmarks, history and passwords in a very secure way: this truly preserve the "state" of your browser across multiple computers. - -On the other hand, Opera is virtually on _any device or platform_, so Link can be handy if you use Opera as your mobile browser. Unfortunately, we'll still have to wait a bit for a proper Mozilla competitor for mobile device, but it already "looks very promising":http://arstechnica.com/news.ars/post/20080409-first-look-mozilla-fennec-targets-handheld-browser-market.html. - -h3. Be nice, be open - -Firefox is THE (only?) open source browser. Opera has always been (and always will be?) a proprietary, freeware, _closed source_ app. -Some people are really bothered by this, especially Linux users of course: it really comes down to how religious you are about the software running on your machine. - -Being open source, Firefox is more hacker-friendly: this release, especially, also delivers an awful lot of useful APIs which can be used to develop extensions in a much easier way. This of course isn't an option for Opera. - -From a different point of view, Opera actually implements "more 'next generation' open standards":http://dev.opera.com/articles/view/opera-9-5-the-next-generation-of-web-s/ than Firefox, and it scores more than Firefox in the "Acid 3":http://acid3.acidtests.org/ test. - -Does this matter in the end? Well, yes and no: it's nice that Opera struggles to be way ahead than others in this, but in the end, until Firefox 3 (and Internet Explorer too!) catch up, web developers won't dare using any of the new features. - -Do you have a web site optimized for Opera? No, probably not: you're normally aiming at Firefox or IE (sigh!) when it comes to development, because they are still more widely used. - -All this is very sad, but still terribly true. But at least, other browsers will feel more compelled to catch up. - -h3. Usability is the key - -Personally, I prefer Opera's philosophy of "everything in tabs" rather than having many dialog boxes floating around for downloads, history, bookmarks etc. - -From this point of view, Firefox is arguably not as usable as Opera. Before Firefox GUI purists start screaming insults, I repeat that this is entirely up to your taste. - -While Opera's GUI didn't undergo any major change, Firefox 3 definitely did: - -* A new _Library_ now holds all your bookmarks, history and feeds -* The new Downloads dialog supports (finally!) download resumes, even across different browsing sessions -* It is very easy to access information on web site, especially with the new identity button (that's where the web site favicon is displayed). - -!=/files/places.png! - -Another trend introduced by Firefox 3 is the ability to _search-as-you-type_ in all these dialogs and in many others (like the Cookie Manager). This makes finding information much easier. - -Opera didn't need any major overhaul, but I would have liked to have cookies and preference in tabs, too (they are pretty much the only dialog boxes left). - -h3. To extend or not extend? - -This is always the eternal dilemma when it comes to Firefox vs. other browsers. - -The major strength of Firefox 3, like _all_ its predecessors, lies in the hundreds of free extensions which can be installed by user to enhance browser's functionality. You can turn Firefox into almost anything you like. - -Because I'm trying to be browser-independent, I like to keep my Firefox extensions to a bare minimum: - -* Weave -* Operator -* Web Developer -* Del.icio.us -* Firebug -* StumbleUpon -* ColorZilla -* Secure Login - -Opera fans always boost that Opera can do pretty much everything you'd ever need _out of the box_, so you don't need any extension at all. Part of this is true (does Firefox have an e-mail client? No. Does Firefox offer a Wand out-of-the-box? No., ...read "this":http://my.opera.com/Rijk/blog/2006/07/04/top-150-popular-firefox-extensions-and-opera for the details) - -In the past release, Opera added widget to let developers unleash their creativity. And I must admit that they are quite cute and work well enough (a few of them at least). - -One of the most frequently-missed feature was a Firebug equivalent for Opera. Luckily, this was fixed in this release with the introduction of "DragonFly":http://www.opera.com/products/dragonfly/, which is already bundled with the browser itself. -I'm pretty sure this will make _a lot_ of web developers very happy. - -!=/files/opera_dragonfly.png! - -Personally, I still miss an equivalent of the del.icio.us extension in Opera, but I guess I can survive with just a bookmarklet, if needed. - -h3. Choose your winner - -It is really up to you. I don't have a true favorite as for now: Firefox 3 is very, very tempting because of three things: - -* The AwesomeBar: I feel I'm already becoming addicted to it -* Some of its extensions, including Weave -* The performance improvements, especially concerning memory management and the rendering of pages making extensive use of Javascript - -Opera, on the other hand, charmes me for what it can do out-of-the-box: it's fast, sleek, has almost everything I need with no configuration at all. It's ideal if you use multiple systems, including mobile devices. - -Definitely I will not abandon any of the two as for now: I'll probaly use Firefox for a more enhanced browsing experience, but I'll definitely use Opera when I'm in a hurry to look something up for example, and every time my fiancée is using Firefox on the same account. - -There's no absolute winner in the Browser Wars yet: just different browsers for different occasions! - -
@@ -1,133 +0,0 @@
------ -permalink: to-rest-or-not-to-rest -filters_pre: -- redcloth -title: To REST or not to REST? -comments: -- :date: 2007-09-24 11:51:45 +02:00 - :author: Matt Beedle - :url: http://matt-beedle.com - :id: 85 - :body: |- - Interesting article. Just a couple of points I would like to make. - - First of, you mention URLs. It's very simple to make these look nice, just using to_param, and find_by_foo. I have a phone site which is almost completely RESTful. Here is a once of the longest urls: http://best-mobile-phones.org.uk/manufacturers/LG/phones/KE850-Prada/offers - - Secondly, although in a pure RESTful design each controller contains only 7 actions, it is easy to add other custom ones. I have written an article about it before here: http://matt-beedle.com/2007/07/17/custom-rest-routes/ - - The point of REST is more that it encourages good application design. Thin controllers (containing little logic) and thick models (containing most of the logic). -- :date: 2007-09-24 11:57:44 +02:00 - :author: dates - :url: "" - :id: 86 - :body: on blogs are good. When research a topic, sometimes it is the date stamp on a blog that lets me know if the information is too dated to consider or not. -- :date: 2007-09-24 12:01:27 +02:00 - :author: MS - :url: "" - :id: 87 - :body: |- - Have you seen how Microsoft is suggesting to encode their nextgen REST SDK? Ugly. - - http://astoria.mslivelabs.com/Overview.doc -- :date: 2007-09-24 12:04:32 +02:00 - :author: browsers - :url: "" - :id: 88 - :body: can in fact do different HTTP commands (WebDAV). This is how Outlook Web Access works. -- :date: 2007-09-24 23:29:42 +02:00 - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 90 - :body: |- - @Matt - - Thanks for your comment. I bookmarked your article for later use. May I ask why your site is _mostly_ RESTful? What couldn't you use REST for? That's what I keep noticing: people end up doing sites which are _not_ 100% RESTful... why? -- :date: 2007-09-25 05:00:31 +02:00 - :author: Matt Beedle - :url: http://matt-beedle.com - :id: 91 - :body: "Hi Fabio,\n\n\ - The home page, contact-us, terms, disclaimer, etc are not RESTful. These are just normal mapped routes as they do not really correspond to a resource. I know it is easy for beginners to get confused when learning REST based design for the first time, I certainly did. One could decide to create a contact_us controller, a terms controller etc, each with just a show action to render the page. Obviously this would be overkill. \n\n\ - A more viable approach could be to create a foo controller with custom routes for each page. However, this is unnecessary.\n\n\ - The point I am trying to make is that REST is not a mutually exclusive design methodology. It works very well for database driven sites, and this is where is should be used. Where it doesn't fit, don't use it. A site doesn't need to be entirely REST based. When you think of it in these terms, the question REST or not to REST does not really fit. Maybe something like \"When should I REST\" would be more apt.\n\n\ - Apologies for the long rambling post! " -- :date: 2007-11-28 15:45:44 +01:00 - :author: Plop - :url: "" - :id: 139 - :body: |- - Nobody asks you to use integer as id :) - - /users/plop - - meaning params[:id] == "plop" - - class User < AR::Base - def self.find(*args) - if args.first.is_a?(String) and !args.first.numeric? - find_by_username(args.shift,*args) or raise ActiveRecord::RecordNotFound - else - super - end - end - - def to_param - username - end - end -- :date: 2007-11-28 16:00:16 +01:00 - :author: plop - :url: "" - :id: 140 - :body: |+ - oooh nasty code display in my previous comment... - - that's better: http://pastie.caboo.se/123207 - - - then write user_path(user) or user_path(user.login) - - -date: 2007-09-24 05:48:00 +02:00 -tags: -- rails -type: article -toc: true ------ -Lately I've been reading quite a bit about Rails' REST approach, and to be totally honest I'm not 100% convinced it can always be a good idea. The purpose of this post is to re-evaluate the situation, and ask other people their opinion on the matter. - -Let's see... - -h3. Key Benefits - -To cut a long story short, from my understanding REST can be a good thing because: - -* It introduces the powerful concept of "resources", which is independent from the presentation. This basically means that you can have your "resources" represented in HTML. XML etc. etc. "for free". If you are making an extensive use of web services, this is truly a bless. -* Each CRUD action is carried out using a different HTTP command (get, post, put and delete). At present, because most browsers don't understand PUT or DELETE requested, this is somehow simulated by Rails. -* By thinking and modeling your application in terms of resources, everything should always be "in the right place". - -h3. Downsides? - -Let's now try to summarize what made me think more carefully this approach... - -* While I really like Rails' convention over configuration philosophy, this sounds a tiny bit too extreme for me. In the end it could be good, but it requires developers to completely re-think the way they develop their application in order to be 100% RESTful. -* URLs aren't that pretty anymore. While "someone":http://themysteriouswaysofruby.blogspot.com/2007/04/pretty-restful-urls-in-rails.html suggested a way to improve the way RESTful URLs look, that sounds like extra hassle to me. It's subjective, I know, but I really don't like using IDs in the url... I'd rather go for an univocal code any day (check out this site... I don't even like dates in my blog). -* Sometimes, it may take quite a bit to figure out how to model some functionality using resources. While it is straightforward when you want to perform CRUD operations, modeling a search action or authentication may be a bit tricky and may also feel a bit forced. Again, maybe it's just me. -* It may be a bit too early to take full advantage of this approach. PUT and DELETE are simulated, and this doesn't sound right -- agreed, that's the only way for now, but it still sounds like a forceful workaround. Browsers are not RESTful (yet)! -* All resources are virtually accessible by a URL. I'm not a security expert, but this scares me a bit. - -Here are some posts which made me think a bit: - -* "Looking for a good argument against REST":http://gilesbowkett.blogspot.com/2007/04/looking-for-good-argument-against-rest.html - -* "RESTful Myths: Unraveling the Confusion":http://www.ipbabble.com/2007/07/restful_myths.html - -* "Why Can’t Web Apps Be REST-ful?":http://blog.livollmers.net/index.php/2007/06/26/why-cant-web-apps-be-rest-ful/ - -The bottom line is: is REST really worth the hassle? Especially for small and simple applications like a blog, is it really worthwhile to coerce myself to adopt a RESTful approach when I could accomplish exactly the same things with much less hassle? - -In other words, is REST really the answer to everything or in _some cases_ it is just _not necessary_? - -And also (OK, this may sound harsh and impolite): does it really make sense to push people to adopt a RESTful approach no matter what? Sometimes someone may get the feeling that Rails is all about REST now. Is that true, or is there still room for -freedom- other views? - -Looking forward to hear your comments, but please be nice and civilized!
@@ -1,63 +0,0 @@
------ -permalink: too-many-cooks-take-2 -filters_pre: -- redcloth -title: "Too many cooks... take #2" -comments: -- :date: 2007-09-02 14:18:10 +02:00 - :author: Anon - :url: "" - :id: 46 - :body: I'm glad you agree. -- :date: 2007-09-03 02:02:36 +02:00 - :author: Sebastian - :url: "" - :id: 47 - :body: |- - ... or symfony, if you want to stick with PHP(5) - - http://www.symfony-project.com/ - - Sebastian -- :date: 2007-11-26 05:29:44 +01:00 - :author: daniel - :url: "" - :id: 129 - :body: |+ - well, having a disagreement with the dev team doesn't have to mean that you must stop using the application they develop, right? - -date: 2007-09-02 06:41:00 +02:00 -tags: -- cakephp -- writing -- rant -type: article -toc: false ------ -Today I was not going to post on my blog. I have the flu, I don't feel very well so I started reading some news feeds on Google Reader. That lasted for about half an hour, so I decided to check my old Netvibes account where I kept other feeds, including a bunch of CakePHP-related blogs. - -Two posts immediately grab my attention: - -"I don’t trust CakePHP or what should you say in public?":http://cakebaker.42dh.com/2007/08/27/i-dont-trust-cakephp-or-what-should-you-say-in-public/ - -and - -"Bye, bye, CakePHP team":http://cakebaker.42dh.com/2007/08/28/bye-bye-cakephp-team/ - -They're both from Daniel's cakebaker blog, the one I used to read when I was really into Cake. - -To cut a long story short, apparently Daniel said something wrong and he got "what he deserves" for speaking out. Naughty boy! - -That's because it might have put "CakePHP and the team in a bad light". Well, I don't know about that, but definitely now it IS in a bad light! - -I even found a bunch of comment which link this incident to what happened to me a few months ago: - -_"I said it when Fabio/H3rald left, and I’ll say it again—I think the biggest weakness of Cake is that the core dev team is quick to cut people out who don’t hold to every dogma the devs do. Fundamentalism, ego, call it what you will, a great community will only count for so long if the core keeps alienating its biggest allies. (not that they’re neccessarily alienating you, dho. I truly hope you stick around. You do seem to be taking it well.)"_ - -^^^ Whoever you are, you're 100% right. - -A core asset (at least for his writings) of the CakePHP team is gone, and another (big) chunk of CakePHP PR strategy is out of play, now, it seems. While I'm sorry the CakePHP community has to get the butt-end of it as always, I'm certainly happy for Daniel who, like me, will now have a chance to look around and experiment with new things. That's right man, Rails or Django are the way to go. - - - -
@@ -1,44 +0,0 @@
------ -:type: article -:permalink: too-many-cooks-take-3 -:title: "Too many cooks... take #3" -:toc: false -:date: 2009-10-24 20:26:59.794937 +02:00 -:tags: -- cakephp -- rant -- php -- li3 -:summary: "Yet another rant about CakePHP, this time with a glimpse of hope called 'Lithium'." ------ -Like "its predecessor":http://www.h3rald.com/articles/too-many-cooks-take-2/, this is another rant about the (end of the) "CakePHP framework":http://www.cakephp.org. Not that I particularly enjoy writing about the misfortune of others, but after reading "this official announcement":http://bakery.cakephp.org/articles/view/the-cake-is-still-rising I felt compelled to post. - -It has been two years since my last post on this subject and yes, the cake is still rising, but at what price? Will it still taste sweet now that two of its main ingredients are not part of it anymore? As "Daniel":http://cakebaker.42dh.com/2009/10/23/the-end-of-cakephp/ puts it, _probably the best thing to do now is to drink tea and to wait until the dust settles..._ - -As far as I'm concerned, what really matters is that Garrett Woodworth (former CakePHP Project Manager) and Nate Abele (former CakePHP Lead Developer) are _gone_. They realized they had enough Nuts over the years and they decided to switch to a more "Lithium-rich":http://irc.cakephp.org/logs/link/1110092#message1110102 diet. More helthy and depression-proof, too! - -Stupid metaphors and painful jokes aside, this is probably the best piece of news the CakePHP community received in a long time: the birth of _a fork of the CakePHP framework_, more precisely of the so-called Cake3 branch. - -_Cake3_? I didn't keep up-to-date with the buzz, so I didn't know anything about this until today, when I decided to finally start catching up. - -bq. "Cake 3.0, on the other hand, is pretty different from the existing core code in a few notable ways. Mainly, it's been re-written from the ground up for PHP 5.3." - -p)))))). from "Cake 3 interview with Nate Abele":http://debuggable.com/posts/Cake_3_interview_with_Nate_Abele:4a665a5e-5bfc-4e42-96ee-6d284834cda3, debuggable.com - -Of course, in these three years of my full immersion in the Ruby language, I almost completely forgot about PHP too. PHP 5.3 means namespace and closures, i.e. the Rubyist's daily bread. A more modular CakePHP, properly object-oriented, with an ActiveRecord-like API for models (finally!) is definitely worth a look, especially if it's Nut-free as well. - -The new framework will be called *Lithium* (sounds more professional already), and it's due to launch next monday, here: "http://li3.rad-dev.org/":http://li3.rad-dev.org/ (at the time of writing, this link is password-protected). - -Personally, I am _very_ excited about this new project. It should have happened three years ago, really, but there's no point in being greedy: the time has finally come. I would like to (pre-)thank Garrett and Nate for their (upcoming) amazing work, I'll definitely keep a closer eye on it. - - - - - - - - - - - -
@@ -1,218 +0,0 @@
------ -permalink: tweaking-windows-explorer -popular: true -filters_pre: -- redcloth -title: Tweaking Windows Explorer -subtitle: How to make the default Windows file manager suck less -comments: -- :date: - :author: John - :url: "" - :id: 271 - :body: Thanks for this great tutorial, well whtever it is. I typically use Linux alternating between Suse9.0 and Debian. This customization of the Explorer is fantastic, Thank You -- :date: - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 273 - :body: |- - Thanks John. - - I'm on Fedora Core 9 at home but I have to use Windows at work... I recently changed my default shell (although still using Windows Explorer as main file manager) to "bb4Win":http://www.bb4win.org/news.php (BlackBox for Windows): it's just so much faster! -date: 2007-06-29 11:28:00 +02:00 -tags: -- review -- software -type: article -toc: true ------ -If you asked me what file manager I used on Windows, up to a month ago I'd have answered something like: "A43":http://www.primitus.us/a43/ or "CubicExplorer":http://www.cubicreality.com/, for sure _anything but Windows Explorer_. -Well, it turns out that I had to change my mind after all... - -There's a multitude of "Explorer Replacements" which aim to be more feature-rich, more user-friendly, less bloated than Bill's favorite, and I indeed tried quite a few of them, mostly the free ones of course. - -The only problem is that whenever I got close to choose "the one", I noticed that there always was one or two features missing somewhere, which were present in another and vice versa. Additionally, to be totally honest, the level of integration with Windows and other applications was never _complete_. - -These are a few stupid, silly things which tend to be lacking or at least are not 100% functioning -- not in all the file managers I tried, but at least in some: - -* Environment variables integration -- Alternative file managers normally are not able to parse Windows environment variables. -* Icon overlays -- Some file managers can't render Subversion's icon overlays. -* Strange context menus -- Sometimes right-clicking on a file or a directory may not open the standard Explorer context menu -* Open Folder -- Third-party application allowing you to open a folder, will always open it through Windows Explorer -* auto complete address bar.... -* Special Folders -- Some special folders (e.g. Control Panel) are now accessible using alternative file manager, but others may not (e.g. Network Connections). At any rate, typing "Control Panel" will _not_ open the Control Panel in an alternative file manager. - -_What about trying to "patch" Windows Explorer instead of using another program altogether?_ - -I never really thought of that until "LifeHacker":http://lifehacker.com/software/featured-windows-download/add-tabs-to-windows-explorer-with-qt-tabbar-260926.php featured the QT TabBar shell extension by "Quizo":http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html. That was my epiphany: I immediately thought I was going to "patch" Windows Explorer using a few really useful (and free, of course) Windows Shell Extensions. - -Here's _my_ file manager now: - -!/files/tweaked_explorer.jpg! - -Yes, it is Windows Explorer, with just a few addons: - -* "QT TabBar":http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html#qttab (Requires .NET framework 2.0) -* "QT Address Bar":http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html#qtadr (Requires .NET framework 2.0) -* "QU ToolBar 2":http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html#qtt2 (Requires .NET framework 2.0) -* "NTFS Link Shell Extension":http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html -* "FileMenu Tools":http://www.lopesoft.com/en/fmtools/info.html - -h3. Explorer Tabs - -For an instant gratification, download and install QT TabBar first, logoff and logon again for the changes to take effect (or install all the other extensions first, otherwise you'll have to re-logon after installing nearly each one). As the name implies, this will add tabs to Windows Explorer, just the way you expect them to be: clean, stable and really smart. - -!=/files/tabs.gif! - -After the installation, right-click anywhere in an existing window toolbar and enable the *QT Tab Standard Buttons* and voilá, a the tab bar will appear. You can click CTRL+N a few times to open new tabs. Take your time to position QT TabBar wherever is more convenient for you. - -Whenever you're ready, take your time to configure QT TabBar (right-click on it and choose "Options") General options: - -!=/files/tabbar_general.gif! - -...and at least the Window options: - -!=/files/tabbar_window.gif! - -*How do you create tabs?* There are many different ways to do it, choose whatever is best for you: - -* CTRL+N keyboard shortcut -* Drag and drop a folder or a shortcut on QT TabBar - Even from other applications! -* Right click on an tab and choose "Clone this" - -Other features? Sure, there's plenty more, e.g.: - -* *Single Instance* -- By enabling the appropriate option, you'll only have a single instance of Windows explorer, everything will be opened in new tabs. A must. -* *Rearrange tabs* -- Tabs can be rearranged by dragging and dropping. -* *Lock/Unlock* -- Lock a tab (right-click > Lock) to avoid closing it accidentally. -* *Folder Memo* -- It is possible to set a "folder memo" for a specific folder, which can be visualized and edited afterwards (right-click > Memo for this folder). -* *Folder Password* -- Password-protect a particular tab (right-click > Set Password...). -* *Picture Preview* -- Preview image files simply by hovering on them with the mouse. -* *Groups* -- It is possible to group more tabs together by adding them to groups (right-click > Add to Group > [Group Name]) which can be configured via the QT TabBar option dialog. -* *Keyboard Shortcuts* -- Open the folder in which you unzipped QT TabBar and run QTShortcutKeyEditor.exe and enable as many as you like (they are too many to list hered), the possibilities are endless. - -h3. Customizing Toolbars - -Windows Explorer allows users to choose the buttons which will be displayed in the *Standar Buttons* toolbar. To do so, proceed as follows: - -# If necessary, enable the Standard Buttons toolbar by selecting _View > Toolbars > Standard Buttons_ from the Explorer menu. -# Select _View > Toolbars > Customize_ from the Explorer menu. -# Choose the buttons you want to display. - -I picked the following: - -!=/files/standard_explorer_buttons.gif! - -i.e.: Up , Refresh, Search, Folders, History, Favorites, Undo, Delete, Cut, Copy, Paste, Properties, View, Map Drive and Disconnect. It's really up to you what you choose really. -I placed this toolbar right under the menu, on the top-left side. - -!>/files/tabbar_buttons.gif! - -Right next to it I placed some of the buttons available for *QT TabBar*: - -* Groups -- Load an existing tab group (configurable in the options) -* Recently Closed -- open recently-closed tabs -* Applications -- run custom applications (configurable in the options) -* Close -- Close current tab -* Lock -- Lock current tab -* Topmost -- Force explorer to stay on top of other windows - -Then I decided to enable the *Links* Explorer toolbar, which can be configured to display bookarks and shortcuts placed in the Favorites > Links folder. As shortcuts, I dragged each drive available on my system and voilà: poor man's Drive Toolbar! Unfortunately, unlike in the _proper_ drive toolbars offered by alternative file managers, all drive shortcuts will remain there (with a red question mark) even when the drive is not connected to the system. I can live with that. - -!>/files/toolbar2.gif! - -Right to the address bar (we're going to substitute it in the next section though), I decided to place *QT ToolBar 2*, which is available - hear, hear - after installing the QT ToolVar 2 extension. -At first it looks like a search filter toolbar, and yes, it can be used for this _as well_. Just type .jpg in the search box and it will show only the JPG files in the current folder. Easy enough. - - -Of course there's (much) more to it. A _search helper_ is provided (click the little arrow pointing downwards at the end of the toolbar and select Search Helper) to perform more complex searches: - -!=/files/toolbar2_search.gif! - -Additionally, ToolBar allows you to display a handy copy file name/path button and up to two buttons to access two applications you use frequently. To configure them select _Option_ from the dropdown menu accessible at the end of the toolbar, and configure your applications like this: - -!=/files/toolbar2_apps.gif! - -I choose the Command Prompt and the A43 file manager. The cool thing is that you can enable the "arguments for user application" and the the file path (if a file is selected) or the folder path will be passed automatically to the application, so my A43 file manage will open in the current folder. If you want to have more than two custom applications at your fingertips, all you have to do is to configure as many as you like in the Options tab of QT TabBar, and they'll become available via the Applications button. - -Two little utilities can also be used through QT TabBar 2, _MD5_, which instantly calculates the MD5 checksum of the selected file: - -!=/files/toolbar2_md5.gif! - -and _Folder Analyze_, which finds out the size of the current folder and how it is distributed across folders and files. A bit like a little "WinDirStat":windirstat.info but for the current folder only. It looks like this: - -!=/files/toolbar2_folder.gif! - -h3. Navigation Improvements - -Is there any way to make navigation through folder easier in Windows Explorer? Yep, more than one: - -h4. Breadcrumbs - -Vista offers a "Breadcrumb Bar":http://www.zdnet.com.au/insight/software/soa/Investigating-Windows-Vista-s-breadcrumb-bar-/0,139023769,139218189,00.htm, and XP doesn't. Quizo fixed it of course, with his *QT Address Bar*, which brings breadcrumbs navigation to Windows XP. Use it as an Explorer address bar replacement. By default breadcrumbs are displayed: - -!=/files/address-bar1.gif! - -...allowing you to navigate through your folder three within submenus without changing the current directory. Clicking it toggles the standard path: - -!=/files/address-bar2.gif! - -A nice thing to have. - -h4. Take back your Favorites! - -I don't use IE, I use Firefox, Opera, even Safari sometimes, but not IE unless I'm forced to do so. Hence I _hardly ever_ used Internet Explorer's Favorites, an I almost forgot about it, until I decided to begin tweaking Windows Explorer, and I (re-)discovered that Favorites are shared between the two... What's that got to do with anything? Well, you can simply put Favorites to good use and use them to store _only_ Windows Explorer folders. - -Simple and effective: click the Favorites button in the toolbar, they'll be loaded in a sidebar on the left, then simply drag a folder to QT TabBar and you'll get there. - -h4. Wormholes, anyone? - -Finally, *NTFS Link Shell Extension* does something totally different altogether: it can be used to create hardlinks (a bit like Unix symlinks, but for NTFS drives only) junctions and symbolic links (Vista only). For an explanation of what each object is, refer to the explanations provided on the "shell extension homepage":http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html#hardlinks. For our purposes, we'll just use junctions now: - -bq."[...] Junctions are wormholes in the tree structure of a directed graph. By browsing a Junction a maybe far distant location in the file system is made available. Modifying, Creating, Renaming and Deleting files within a junction tree structure operates at the junction target, i.e. if you delete a file in a Junction it is deleted at the original location. [...]" - -Consider the following example. - -!>/files/junction.gif! - -1) Create a directory called "Gateway" in C:\. -2) With NTFS Link Shell Extension installed, right-click a directory "far, far away", on any of your NTFS drives, for example D:\My\Very\Long\Path\MyDirectory, and select "Pick Link Source". -3) Go back in your Gateway folder, right-click and select "Drop As > Junction". A folder with a small chain overlay will be created. -4) You will now be able to access all the contents in D:\My\Very\Long\Path\MyDirectory directly from C:\Gateway. - -*Important* - No, creating a shortcut is _not_ the same thing. the path C:\Gateway\MyDirectory is an actual _valid path_, i.e. you can use it to attach files to emails, and going up one level in C:\Gateway\MyDirectory will take you simply to C:\Gateway\, _not_ to D:\My\Very\Long\Path\. - -Both at home and at work, I use a "Gateway" folder containing junctions leading to commonly-accessed directories, and this speeds up navigations a lot. Just remember to delete junctions "properly" (right-click > Delete Junction), not like an ordinary directory... ;-) - -h3. De-cluttering the Context Menus - -Right now our Windows Explorer interface has been streamlined, folder navigation is easier, but there's still room for improvement. Where? Well, in the contex menus of course. -I spent ages trying to figure out an easy way to remove unnecessary or unwanted entries from the menus which appears on a right-click. Yes, they can be removed by fiddling with the Windows Registry, but that's not exactly user-friendly, is it? Now there's an easy alternative: *FileMenu Tools*. - -This nifty little utility allows you to remove rubbish from your context menus and add new entries as well. Entries are grouped by file type and can be enabled or disabled with a single click. Unfortunately I was not able to disabe some of them, probably due to restriction on my computer at work. - -!>/files/filemenu_tools.gif! - -Once the rubbish is gone, perhaps you can even evaluate the possibility to add some more. I chose to enable just _Attributes_ and _Advanced Renamer_, but there are many more predefined commands (each with its own pretty icon) you can choose from: - -* Synchronize Folders -* Extended Delete -* Find And Replace -* Delete Locked File -* Delete and no move to Recycle Bin -* Change Icon -* Run with Arguments -* Command Line From Here -* Split/Join File -* Copy/Move to... -* Copy Name/PAth/Content -* Change Time -* Register/Unregister DLL -* Create new folder - -Something missing? Well, you can always create your own entry, if you like! - - -h3. Conclusion - -I think that's enough for you to give Windows Explorer another shot -- or at least it was enough for me anyway. Be aware that there are and hopefully there will be more Windows shell extensions able to do neat things: "7-Zip":http://www.7-zip.org/, "Notepad++":http://notepad-plus.sourceforge.net/uk/site.htm and "Cream":http://cream.sourceforge.net/ all add very useful context menus, and don't forget "TortoiseSVN":http://tortoisesvn.tigris.org/, if you are a Windows-based developers (yes, they do exist).
@@ -1,112 +0,0 @@
------ -permalink: web-promotion -filters_pre: -- bbcode -title: Zero-cost website promotion - Part I -comments: [] - -date: 2005-12-09 14:08:27 +01:00 -tags: -- internet -- webdevelopment -type: article -toc: true ------ -Everybody from magazines to canned pasta sellers wants a website to promote their business, but you need to promote your site before you promote your products or services through it. In Part 1 of this article, I will explain some of the basics of promoting a website, and show you how to implement a cost-free strategy to get the search engine placement you need to promote your website.[b]The Necessity of Website Promotion[/b] -As the World Wide Web kept growing over the years, people soon realised that keeping updated [i]list[/i]s of all the available pages on the Net was an impossible and pointless job. It became necessary to develop a new way to easily find and access the massive amount of content on the Web, and that is when [i]search engines[/i] became a reality. - -Everyone should know the [i]legend[/i] of the two lads from Stanford University who became multi-millionaires in a few years after developing and successfully marketing their easy-to-use, ultra-powerful search engine called Google. - -After it became clear that the Web was going to be (quite literally) dominated by search engines, IT professionals started developing strategies to cause their site to appearon the first page of search results. These strategies and techniques soon became known as [i]Search Engine Optimizations[/i] (SEO). Call it ?science?, ?magic? or simply a way to make money, SEO is a business, and so-called "SEO experts" often [i]do[/i] get a lot of cash just to take care of your website. - -Whether you like it or not, any website must be promoted in order to get visitors; some sort of marketing strategy [i]is[/i] necessary if you want to stand out from the crowd, and even if you just want someone to find your page. - -Now let's assume that you don't want to spend a penny marketing your site, but you still want to be known and noticed among either competitors or friends and get some visitors to your new, exceptional (for you) and extremely innovative (to your eyes) website. Is it possible to do this, or do you need to shell out some money to an SEO expert' - -I think that a zero-cost marketing strategy does exist, and I tried to put one into practice myself. I achieved relatively good results without spending anything but time. Patience and dedication are the keys to success in a zero-cost method: if you don't have those two qualities, you either need to start working on them or find a job to make money to spend for a [i]proper[/i] (but sometimes risky) marketing campaign. - - -[b]1. Plan your website[/b] - -Don't skip this part, because it's the most important step in the whole process: you have to come up with some clever ideas to make your site look unique and original! - -[i]2. Have a look around[/i] - -[i]?Well, if I were able to do [b]that[/b] I wouldn't need to promote my site at all, and I wouldn't be reading this article?[/i] - -This is true to some extent - coming up with an original idea nowadays is difficult if not impossible. [i]Offering something different[/i] or [i]presenting it in a different way[/i] can be done, as can offering the same thing [i]but better[/i] (that's what Google did). Once again, you need patience, dedication, and the belief that it is worth it. - -The best way to decide if it's worth creating a new website is to study your potential competitors, i.e. any other website that deals with the same stuff. Study the way these websites are created, list their weaknesses and strengths, and after comparing a few of them, start thinking about what [i]you[/i] can do to create a [i]better[/i] website. - -Then, [i]objectively[/i] evaluate your idea and decide if you have the ability to do it, what risks are involved, and how long it would take to create. After all this brainstorming, if you still want to spend time on your project, you can go on; if not, [i]this is your last chance to stop and think about something completely different[/i] - it doesn't mean you?re a coward, it just means you are capable of understanding your limits, which is something many people have trouble doing these days. - -[i]4. Create an identity[/i] -Now it's time to think about a proper [i]identity[/i] for your site, and this involves the following steps: - -[list] -[*]Define your objectives and purposes -[*]Define the audience of your site -[*]Think about a good name for your site -[*]Create some graphics and a logo -[*]Create slogans and descriptions -[/list] - -Of course, defining the objectives and purposes of your site is the most important thing on that entire list. Again, you have to be honest with yourself and not be afraid to admit your limitations: if you find you can't do something you?d like to, try to imagine your site without that particular feature, and if there?s still a hope of success, go ahead. If not, try looking at your ideas from a different point of view. - -A different point of view could mean a different audience: if you see that there?s absolutely no chance of selling canned pasta to Italians,you might have better luck with the English. Audience is extremely important: it's a factor which influences both the content and the design of your site, as well as the features offered. Doing something the way [i]you[/i] like it doesn't mean other people are going to like it, and for people to want to come to your site, they have to like it! - -Now, think about a good name for your site: it must be easy to remember, be somehow related to what you do, and most importantly, the domain must be available. Check on that before you commit to a particular name, or you might be in for a shock. There are plenty of places on the Net that can tell you if a particular domain with a particular TLD is available[1]. - -Next, I think you should come up with a logo, though some people say it's premature to think about graphics at this stage. It's probably true, but I find that having a visual representation of your goal can often be a morale booster that will help you to keep going. - -The last step is a slogan or a description. This is an important part of creating your site's identity. It should be honest, yet promising: it has to stick in the consumer's mind. How you do this is entirely up to you, and it can also be the most time-consuming step of the process - it will probably take you a few tries to come up with something you really like. - - -[i]4. Features, Services and Architecture[/i] - -Now it's time to do something less idealistic and slightly more practical: you should start listing the features and services your site will offer, and start thinking about how to present them. Don't plan on doing too many things or implementing unnecesssary features on your site - having a forum, a newsletter [i]and[/i] a blog on CannedPasta.com could be a bit too much, whereas having a gallery and a Testimonials area could be a much better use of resources. In short, add features because they can be useful, not because it's trendy to offer them. - -After you decide on your features, you have to think about the [i]architecture[/i] of your site, or [i]how[/i] people are going to find the services you offer on your site. Menus and navigation bars are a must, but keep them relatively uncluttered and easy to use: you must be able to grab the visitor?s attention and communicate what you do in the first 10 seconds; then, if the visitor remains on the site for another minute or two, he must be convinced by then that you are selling the best canned pasta he?s ever tried and cheaper than anyone else. This is accomplished mainly by putting links to relevant pages in at the right places: if a visitor can't find your content, he?ll never be persuaded to try your product! - - -[b]Site Development[/b] - -It's now time to start coding your site. Whether you do it yourself or have someone do it for you, the web developer should follow some important guidelines when coding the site. I will only touch on them very briefly. - -[i]Make it simple[/i] -don't do something unless you have to. The layout of your site must be decided according to the site?s purpose - that's why movie sites have a lot of graphics, Flash[3] and other eye-catching things, and why forums and news sites don't need that stuff at all. Show your products and describe them with the minimum amount of content; people who want to buy canned pasta normally don't want to know the history of it: they just want to see if it's worth buying it. - -[i]Cleaner is better[/i] -the code of your site should be clean,support web standards, and contain no errors. Although code validation[4] is not critical to acquire good placement in search engines, it can help to a certain extent. - -For the sake of code clarity, I normally recommend not using deprecated tags or and its attributes. Avoiding using tags attributes altogether, if possible: CSS[5] was created for a reason, and that's for making your life easier. A discussion of CSS is beyond the scope of this article, but I have included a reference link[6] for you to learn more about it. - -[i]Fundamentals of an SEO Strategy[/i] -[list] -[*]Always provide an ALT attribute for your image (crawlers[7] will process that instead of the image) -[*]Always provide a relevant TITLE attribute to your links -[*]Always use properly formatted h1, h2, etc. tags for your titles. -[*]The tag in the of every page should be different each time and either reflect the page?s content or provide a proper title for it. It should also be one of the first tags on the page. -[*]Always remember to provide an icon for your site (favicon[8]) -[*]Don't forget a valid robots.txt[9] file in the root directory of your site. -[/list] - -[i] Meta Tags[/i] -Although Google doesn't seem to care about them any more, you should always include some meta tags in every page, particularly for keywords and the site description. Ideally, these should vary according to the page's content, contain not more than 10-15 relevant keywords, and give a brief yet complete description of the page. - -[i] Search Engine Friendly (SEF) URLs[/i] -Even though all the major search engines can process dynamic URLs correctly, a URL like http://www.cannedpasta/products/spaghetti.php is much better than something like http://www.cannedpasta.com/index.php?a=show&cat=1256&id=234. The first one will not only be crawled by ANY search engine with no problems at all, but more importantly, users will remember it. If your site is dynamic (as are the majority of websites these days) and your pages are therefore automatically generated, you could try using mod_rewrite to transform complicated URLs into their simplified but more effective counterparts[10]. - -That's all for this part of the article. Next time I?ll discuss the final phases of your site?s zero-cost promotion campaign: website promotion, website maintenance, and what to do once you get things going. - - -[b]Notes, related links, and further reading:[/b] - -[1]You can do so here, for example: [url]http://www.mydomain.com[/url] -[2]The domain is fictitious and used as an example -[3]Macromedia Flash: [url]http://www.macromedia.com/software/flash/[/url] -[4]W3C validator: [url]http://validator.w3.org/ [/url] -[5]CSS: [url]http://www.w3.org/Style/CSS/ [/url] -[6]Official CSS tutorial: [url]http://www.w3schools.com/css/default.asp [/url] -[7]Web crawler, Wikipedia page: [url]http://en.wikipedia.org/wiki/Web_crawler[/url] -[8]Favicon, Wikipedia page: [url]http://en.wikipedia.org/wiki/Favicon[/url] -[9]Robot.txt tutorial: [url]http://www.searchengineworld.com/robots/robots_tutorial.htm[/url] -[10]Apache mod_rewrite: [url]http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html [/url]
@@ -1,227 +0,0 @@
------ -permalink: what-is-ajax -filters_pre: -- bbcode -title: What is AJAX? -comments: [] - -date: 2006-01-12 07:30:08 +01:00 -tags: -- internet -- web20 -- ajax -- webdevelopment -type: article -toc: true ------ -[i]"The Web is changing. The 30-year-old terminal-like technology it was originally is gradually giving way to new ways of doing things. The power of AJAX allows for rich user interaction without the trouble that has bugged traditional web applications."[/i]This is the introduction to the script.aculo.us[1] website, and regardless your opinion about the so-called AJAX [i]programming technique[/i], they are fundamentally right: the web is changing. AJAX is at least one way to do things in a different way, enhancing - although arguably, in some cases - users' browsing experience. - -[b]Application examples[/b] -What is AJAX then? Nothing too new, but not too old either. I'd define AJAX as the [i]rebirth of Javascript[/i], for example, it's not only Javascript we're talking about. The acronym stands for Asynchronous Javascript And XML and it already gives an idea of the fundamentals of the technology: something build on [i]asynchronous server requests and responses [/i]. This may be clear to coders, but the best way to try explaining this to everyday internet users is showing some famous applications: - -[i]Gmail[2][/i]: The first example? The most famous? The most used? Perhaps. Google aimed to impress both end users and geeks with it's free, long awaited email service. What's so unusual in this webmail application? -[list] -[*]An innovative and intuitive interface, more similar to a desktop application than a traditional webpage. -[*]Rich formatting through an effective, easy-to-use editor. -[*]Online spell checker. -[*]Instant (one click) email tagging, labels, contact groups etc. -[*]Email auto save. -[/list] - -[i]Kiko[3][/i]: This is a very neat online calendar, free to use and customizable. Features include: -[list] -[*]Multiple user/contacts/events administration. -[*]Personalization of the right click menu (it overrides your browser's default behavior). -[*]Drag and drop events across the calendar. -[*]Easily switch through different calendar views without any page refresh. -- [/list] - -[i]Writely[4][/i]: An online word processor. Although it is not as advanced as its desktop's cousins, this is a truly admirable effort to port a desktop application to the web. The service is free for now and it allows users to create, edit, share and export text documents. Among its features there are: -[list] -[*]High degree of document formatting - modify font size, style, colors, alignment, insert images and links etc. -[*]Enhanced exporting options - it can create html documents, Word documents, zip files etc. -[*]Online spell-checker. -[*]Ability to easily share and publish your work. -[/list] - -This list can continue[5], as new "AJAX-powered" applications are created nearly every day. -[quote]AJAX provides the web developer the ability to create web applications that look and feel like applications that run on the desktop. It does this by solving the 'partial update' problem. AJAX makes it possible for a web application to request data from the server (usually in response to a button click or other java script 'event') and change a part of the current page to reflect the result of the query. Prior to AJAX, if the web developer wanted to retrieve any information from the server a full page update was required. This may mean a full page load when the user clicks a help icon, spell checks a document or performs a drag and drop operation that changes data on the server. AJAX solves this problem and opens the door for a host of AJAX-powered web applications -There were some unconventional solutions to this problem prior to AJAX. I have ignored them for the purpose of this article as they were hacky or relied on a feature in a particular browser [/quote] - -[b]How does it work?[/b] -Ajax[7] is fundamentally the union of various technologies - not something new by itself: -[list] -[*] (X)HTML, CSS, etc., used as presentation layer and format the information retrieved by the server: nothing special here. -[*]The XMLHttpRequest[8] object, which allows data exchange between client and server "silently", in an asynchronous way, without the need of refreshing and reloading a whole web page -[*]The Dom Object Model (DOM)[9], a Object-Oriented way to represent and access HTML or XML. -[*]XML and XSLT used for data interchange and manipulation -[/list] - -The magic is undoubtedly in the XMLHttpRequest object, originally invented by Microsoft as an ActiveX object and then made available as a standard Javascript class by Mozilla-based browsers. At least something which [i]seems[/i] to be compatible with [i]most[/i] browsers then. - -A necessary step in any Javascript script using the XMLHttpRequest object would be something like: - -[code] -if (window.XMLHttpRequest) { // Mozilla, Safari, ... - http_request = new XMLHttpRequest(); -} else if (window.ActiveXObject) { // IE - http_request = new ActiveXObject("Microsoft.XMLHTTP"); -} -[/code] - -In order to have an http_request object to use later on which is independent from the browser type. - -Let's now examine an example of elementary Ajax application[10]. The following code is broken into different parts and commented, the uncommented source and a demo is available on degraeve.com[10]. - -For this simple example we need to create a simple server-side script which will be called by our Ajax application. The script can be in any language, this one is in Perl. - -[code] -#!/usr/bin/perl -w -use CGI; - -$query = new CGI; - -$secretword = $query-param('w'); -$remotehost = $query-remote_host(); - -print $query-header; -print "<p>The secret word is <b>$secretword</b> and your IP is <b>$remotehost</b>. - [/code] - -Basically it creates a new CGI object named $query, used to access the parameter which will be passed by our submission form, "w", and get the user's IP address. -The script will then print a the page header and a phrase containing the word entered in our form and the user's IP address. - -And here's the simple Ajax application: - -[code] -<html> -<head> -<title>Simple Ajax Example</title> - -<script language="Javascript"> -[/code] - -[i]Comment: Just the first HTML tags of the page, and the beginning of the script[/i] - -[code] -function xmlhttpPost(strURL) { - var xmlHttpReq = false; - var self = this; - // Mozilla/Safari - if (window.XMLHttpRequest) { - self.xmlHttpReq = new XMLHttpRequest(); - } - // IE - else if (window.ActiveXObject) { - self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP"); - } -[/code] - -[i]Comment: First of all we create a function named xmlhttpPost, which takes the parameter strURL, i.e. the web address of the script we created earlier. In the first part of the function, we create the HTMLHttpRequest object independently of the browser, which in this case is called self.xmlHttpReq. [/i] -[code] - - self.xmlHttpReq.open('POST', strURL, true); - - self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); -[/code] - -[i]Comment: with the method open we initialize the connection, specifying that we want to send a POST request to the page "strURL" and that the connection is asynchronous (true). The third parameter is actually true by default and could have been omitted in this case. -As we want to use the POST method, we need to set the content-type header for our request, in this case "application/x-www-form-urlencoded". [/i] - -[code] - self.xmlHttpReq.onreadystatechange = function() { - if (self.xmlHttpReq.readyState == 4) { - updatepage(self.xmlHttpReq.responseText); - } - } - self.xmlHttpReq.send(getquerystring()); -} -[/code] - - -[i]Comment: This is the crucial part, as we need to send the request and also define the behavior of our application once the response is received. The request is sent using the "send" method, which sends a properly formatted query string (see below), but before that we need to setup a "listener" to monitor what happens to our request. -The readyState variables is updated according to the status of the connection, and can assume the following values: -[list] -[*]0 - Uninitialised -[*]1 - Loading -[*]2 - Loaded -[*]3 - Interactive -[*]4 - Completed -[/list] - -We want to update our page once we are sure that the connection with the script has been established, therefore we setup a listener (onreadystatechange) to update the page via the function update page defined below only if the connection's state is "Completed" (self.xmlHttpReq.readyState == 4). The self.xmlHttpReq.responseText variable which is sent to the update page function contains the response generated by our CGI script. [/i] - -[code] -function getquerystring() { - var form = document.forms['f1']; - var word = form.word.value; - qstr = 'w=' + escape(word); // NOTE: no '?' before querystring - return qstr; -} -[/code] - -[i]Comment: This function simply formats the parameter sent to the script as "w=typedword" where "typedword" is the word typed in the form of our application. [/i] - -[code] -function updatepage(str){ - document.getElementById("result").innerHTML = str; -} -[/code] - -[i]Comment: Finally, this function inserts the response we got from the CGI script into an HTML element with id=result, through the method innerHTML. [/i] - -[code] -</script> -</head> - -<form name="f1"> - <pword: <input name="word" type="text" > - <input value="Go" type="button" >onclick='JavaScript:xmlhttpPost("/cgi-bin/simple-ajax-example.cgi")'</p> - <div id="result"></div> -</form> -</body> -</html> -[/code] - -[i]Comment: This is the final part of the application, which defines our form containing a text field and a submit button. Note that our xmlhttpPost function is called once the button is clicked, through the on click attribute. [/i] - -That's it. -The first reaction after reading so far would probably be "Ajax is not easy at all", well, I never said it was. To create a simple application which just prints something on the screen we had to go through a lot of code, and we could have done something similar with much less hassle. This was just a trivial example, very different from those large scale applications available online. - -There's good news though, there are plenty of frameworks and toolkits which makes life easier for developers interested in using this programming technique. There are in particular various libraries built upon the Prototype[11] framework such as the already mentioned Script.aculo.us[1] and Rico[12] for examples, and various frameworks which integrate Ajax in some way in any server side language, like Ruby on Rails[13] or CakePHP[14], for example. - -[b]Conclusion[/b] -Undoubtedly Ajax can be used to create really powerful and innovative applications, but it shouldn't be abused or mis-used. There are a few things to keep in mind, when developing an Ajax application: -[list] -[*]It requires Javascript to be enable on the client browser, and the developer obviously can't control that -[*]The application may not compatible with all browsers, in particular older browsers will definitely not be able to access it. -[*]It can be too much of a surprise for the user who never used an Ajax application before: it may experience delays in responses, some basic functionalities like the "Back" button might not work as expected etc. -[/list] - -There are actually many more things to consider [15] before even start planning to develop an application, and can basically be summarized as follows: - -[i]"Do not use Ajax in your web application unless you know what you're doing"[/i] - -Luckily, there are a lot of articles and resources[16] out there, waiting for you. - - -[b]Notes and Resources[/b] -[small] -[1] Script.aculo.us AJAX toolkit: [url]http://www.script.aculo.us [/url] -[2] Gmail - Google's online webmail: [url]http://mail.google.com/mail[/url] -[3] Kiko - Online calendar: [url]http://www.kiko.com/[/url] -[4] Writely - Online word processor: [url]http://www.writely.com/[/url] -[5] A venture forth Blog - Top 10 Ajax applications: [url]http://www.aventureforth.com/?p=13[/url] -[6] HTTP - Webopedia entry: [url]http://www.webopedia.com/TERM/H/HTTP.html[/url] -[7] AJAX - Wikipedia Page: [url]http://en.wikipedia.org/wiki/AJAX[/url] -[8] XMLHTTP Wikipedia Page: http://en.wikipedia.org/wiki/XMLHTTP - -[9] Dom Object Model - Wikipedia Page: [url]http://en.wikipedia.org/wiki/Document_Object_Model[/url] -[10] degraeve.com - Simple Ajax Example: [url]http://www.degraeve.com/reference/simple-ajax-example.php[/url] -[11] Prototype Javascript Framework: [url]http://prototype.conio.net/[/url] -[12] Rico open-source Javascript library: [url]http://openrico.org/[/url] -[13] Ruby on Rails: [url]http://www.rubyonrails.org[/url] -[14] CakePHP framework: [url]http://www.cakephp.org[/url] -[15] Alex Bosworth's Weblog: Ajax Mistakes: [url]http://sourcelabs.com/ajb/archives/2005/05/ajax_mistakes.html[/url] -[16] AjaxMatters.com: [url]http://www.ajaxmatters.com/r/welcome[/url] -[/small]
@@ -1,143 +0,0 @@
------ -permalink: where-does-your-ruby-code-live -filters_pre: -- redcloth -title: Where does your Ruby code live? -comments: -- :date: - :author: murphee - :url: http://jroller.com/page/murphee - :id: 450 - :body: |- - I'd say the best way is to - - slap your project on Github - - then: sign up for Rubyforge (projects usually take a day or two to be approved, at least that used to be the case) - - Use Ryan Davis' hoe to manage your project's rake file. It configures your rake file with a task to push a new release to Rubyforge. - Voila: done. - You get the best of both worlds: github's magic and the benefits of RubyGems. - Github also offers you the option to easily offer experimental Gems, eg. if you fork a project, change something with it: you can instantly install that as a gem as well (although you have to add github as source to Gems). Ain't no easier way to distribute a forked version of an existing gem. - - As for that rant you linked to (about Github not being profitable)... well, Github consists of 3 fulltime employees and has made them shitloads of money in the few months it's been around. - Eg. see this interview with Tom Preston-Werner: - http://www.infoq.com/interviews/preston-werner-powerset-github-ruby - Sure - doesn't mean it'll stick around forever... but the benefit of Git is that you always have the full history of the project on your local disk - even if Github goes away this second. Try getting that with CVS/SVN at any other hoster, where you have to manually do regular snapshots of the history (if the hoster even offers that). - So, even if Github might become history at some point, it's still easy to continue by just moving your git repository to, say, Rubyforge's git servers. Github's remarkably free of lock-in, at least when it comes to data. - - PS: InfoQ covered this problem some time ago: - http://www.infoq.com/news/2008/08/gems-from-rubyforge-and-github -- :date: - :author: Fabio Cevasco - :url: http://www.h3rald.com - :id: 473 - :body: |- - So I guess the best solution – for now – is to go for a "scattered" setup: - - a) GitHub for the repository (assuming you like Git) - - b) (Optional) LightHouse for bug tracking - - c) RubyForge just for the gem - - I'd still like a *proper* directory of gems (with a proper search), maybe scraping RubyForge data (like APIdock did with Ruby/Rails/RSpec documentation). Did anybody ever come up with something similar? Would anyone be interested? -date: 2008-11-08 13:34:00 +01:00 -tags: -- ruby -- programming -type: article -toc: true ------ -Back when I wrote my "10 reasons to learn Ruby":/articles/10-reasons-to-learn-ruby article, I mentioned "RubyGems":http://www.rubygems.org/ in _Reason #1_ as one of they key features of the Ruby programming languages. -Indeed, gems make getting Ruby programs as easy as typing @gem install <something>@ from the command line. When you want to distribute something new in Ruby, there's no need to give people download links, zip files or setup programs, just "tell them to get the gem":http://adam.blog.heroku.com/past/2008/11/2/pony_the_express_way_to_send_email_from_ruby/. That's perfectly normal, and extremely cool. - -Gems are normally stored on "RubyForge":http://rubyforge.org, so all you have to do is uploading your gem there, and it will be available to the rest of the universe. It's a nice feeling. I remember when I first uploaded "RawLine":http://rubyforge.org/projects/rawline/ and then tried @gem install rawline@ just for the hell of it: it downloaded and installed the gem, as expected. - -Back in the day, if you wanted to find something written in Ruby, all you had to do is search through RubyForge, and you'd eventually find it, with a bit of luck. - - -h3. Can we just have git, please? - -RubyForge had, until recently, one major problem: it only allowed CVS and SVN repositories, and you had to make your choice when creating the project, once and for all. So when the cool guys at "GitHub":http://github.com/ rolled out their _social code hosting_ web site, most of the _créme de la créme_ of RubyForge flocked there in mass migration: "Rails":http://github.com/rails/rails/tree/master, "Merb":http://github.com/wycats/merb-core/tree/master, "RSpec":http://github.com/dchelimsky/rspec/tree/master... you name it. -Once the big guys made the switch, a lot jumped on the GitHub bandwagon of course. Result: we have a lot of projects still on RubyForge, but quite a few (and important ones) on GitHub. - -Why did people move there? Well, at first it was because they wanted a sleek-looking git host, and RubyForge didn't offer git at the time. But "git is now available on RubyForge":http://drnicwilliams.com/2008/04/08/git-for-rubyforge-accounts/, so why don't people use it? -I'd like to know how many people use git on RubyForge. Apparently you can have your old SVN repository manually migrated to git, if you ask nicely (and RubyForge people are very helpful always, anyway). Still, I don't think many people use git there, and hardly anyone (if any) moved back from GitHub. - -What's so special about this new "social code hosting" site then? I guess just a few key features: - -* Fast and reliable git hosting -* The ability to "watch" other people's repositories and interact with them "the git way", also by forking. -* There's a whole new and fresh community feeling to it: you can follow people, message them, etc. -* The interface is much more neat than RubyForge's (OK, granted, it doesn't take much) -* Really cool stats and graphs -* A basic, but functional, wiki - -h3. ...oh, and bug tracking, too! - -GitHub has no bug tracking features. It tracks an awful lot of stuff about your repositories and people working on them, but "batteries are sold separately". You can get batteries "here":http://lighthouseapp.com/, for example. Apparently, GitHub and LightHouse are seamlessly "integrated":http://github.com/blog/41-service-integration. - -So now you can sign up to two cool brand new web applications with neat interfaces instead of sticking with the old-looking RubyForge (which comes with "batteries included", after all). -Personally *I'm very confused now*. Fortunately I don't have any extremely cool projects used by thousands of people, so jumping from one source code hosting solution from another is not really an issue for me, but I imagine it would be for others! Correct? - -So, as far as I know, if you are a Rubyist, here's what you can do: - -# Stick with RubyForge: it's not so bad after all. -# Embrace GitHub (and Lighthouse): it's extremely nice to use. Some people are not "too convinced":http://groovie.org/2008/05/06/most-bizarre-git-service-and-other-stupid-rails-powered-businesses that this is the best choice though. -# Go for something in between, like "Assembla":http://www.assembla.com/, which actually has an _impressive_ list of features and is powered by Rails too, so you'll feel at home. "Google Code":http://code.google.com/hosting/ used to be another common choice, but sadly they don't offer git yet. -# Do-it-yourself, maybe using something like "Gitorius":http://gitorious.org/ and some open source bug tracking/project management solution. - -So... what choice did _you_ make or are you planning to make? - -h3. Moving houses - -There's one simple issue to consider when moving your code to a new place: what happens to your _old_ place. If have a relatively popular project, a lot of people may have bookmarked your project page on RubyForge, or the RubyForge subdomain which you may have used as the "home page" for your project (in truth, most of the ones who moved away still use it). - -You may setup a redirection to the new home page or put a notice saying that the project moved somewhere else and point visitors to GitHub and LightHouse, or to another web site, if you wish. When "Rails moved to GitHub":http://weblog.rubyonrails.org/2008/4/11/rails-premieres-on-github, that wasn't much of a problem as Rails has its own web site. - -What may become a problem is your old repository. In Rails' case, they left the old SVN repository available on sourceforge for a while and then removed it altogether. Other project owners have just abandoned their old repositories, occasionally resulting in "someone else":http://webby.rubyforge.org/ deciding to leave a note as their "last SVN commit":http://webby.rubyforge.org/svn/trunk/. - -These solutions all work (you eventually drive people to the new home of your project), but it's not very nice, that's all. What happens if someone comes up with something cooler than GitHub? In all honesty, you may end up moving house over and over again. - -h3. Don't forget the gems! - -One thing I liked about RubyForge, as I wrote at the beginning, was that if you uploaded a gem there, it was immediately available to everyone typing @gem install <something>@. -Luckily, "GitHub supports gems, too":http://gems.github.com/list.html! We're saved. The page they put up is "utterly awful":http://gems.github.com/, but it does the job: you can have your gems hosted on GitHub. - -Good! So surely I can get Rails now, right? Yup: @gem install rails@ will get the latest version of Rails for you, straight from GitHub. - -Actually, no. It doesn't seem to work that way: sure you can get the latest rails in that way, but it will actually be downloaded from _RubyForge_ (go check the "downloads":http://rubyforge.org/frs/?group_id=307&release_id=27493, you'll see it there). -So even if technically you got Rails, you got it from RubyForge. If you want to get gem from GitHub, you have to add it as gem source first (that's an _una tantum_ operation, luckily): @gem sources -a http://gems.github.com@. - -So, yes, you can move to GitHub and you'll also get gem support: but please _remind the users_ that they have to add GitHub as gem source. Or, better, you should always remember to upload your latest gems to GitHub _and to RubyForge as well_. - -h3. The present - -To sum up: - -* If you want, you can stay on RubyForge. It has git, it has gems, it's probably not nearly as prettier than competitors and is not as social, but it works. -* You can opt for GitHub+LightHouse, have a slick interface, plenty of features and your project will be scattered in 2 different places + your home page, and you'll also have to keep uploading your gems to RubyForge. -* At this point, you may even go for something completely different, like Assembla or your own setup, but still upload your gems to RubyForge. - -The obvious solutions at this point would be that the folks who craft rubygems (the gem which makes the gems, to be clear) add GitHub as default source. Sure as hell when that happens other people will want that too (hey, I'll have gems.h3rald.com setup by then!). Is this the future? I hope not. - -h3. The future? - -You know there's a domain called "www.rubygems.org":http://www.rubygems.org/? It's where the gem _manuals_ are! -As much as I love documentation, there's nothing wrong in moving all those documents and books to something like _docs.rubygems.org_, right? -Then they could make RubyGems.org the _only_ official gem server and tell people they should upload their gems there if they want to distribute them efficiently (after manual approval, if necessary, like there is on RubyForge). - -In this way: - -* You wouldn't have to upload stuff to RubyForge anymore -* You could have the clever folks at GitHub to create a simple script to automate the upload -* You'd have virtually _all_ the gems in one place -* You'd put a good domain name (currently almost forgotten) to good use - -While they are at it, *the clever folks at RubyGems.org could also setup a _proper_ gem directory with a _proper_ search*. I'm sure there would be plenty of people who could help, too! - -It's not impossible, right? They said that making Rails/Ruby/RSpec documentation more accurate and accessible was impossible, but now there's "APIdock":http://apidock.com/, correct? - -Personally I'd like it to be a collaborative effort of the Ruby community (like ruby-lang.org), rather than one private company showing off, but I think everyone will be happy as long as it works. -I'm sure people will contribute, I would try at least (after finishing the Italian translation of ruby-lang.org, that is... erhm, well, that's another story...). - -Thoughts?
@@ -1,85 +0,0 @@
------ -:type: article -:title: Getting things done... in Wonderland! -:subtitle: Why Wunderlist is the only Todo List I'll ever need -:tags: ["productivity", "review", "software"] -:date: 2011-07-30 23:07:53.423483 +01:00 -:image: /img/pictures/wunderlist/wunderlist.png -:toc: true -:permalink: wunderlist -:pdf: true -:intro: | - I don't remember the exact day when I started using a todo list in a serious way. It definitely happened at work, but I can't remember when exactly. The point is that, once I started working (and getting paid for what I love doing – writing), I slowly turned into a real _productivity freak_. - - I write _everything_ down. My colleagues know that if I say that I'll do something _right now_ but I don't do it within five minutes, they have to assume that I forgot about it altogether and they'd better send me an email. - - I am not a paper person. Never been one. When I got a job which consisted in working on the computer for eight hours a day, I started looking for todo list programs. That turned into an endless quest: I tried X for a few weeks, then I discovered that Y was better, used it for months, then moved onto Z, and so on. ------ -$[document.intro] -&:[img-path|$[site.root]/img/pictures/wunderlist] ---[-----------------------] - §txt[ - @title[What's wrong with 90% of digital todo lists] -Over the past five years, I must have tried dozens of different digital todo lists, and every single one of them had something wrong with it. Here are the most common flaws I encountered in many applications: -* *Too many fields* – I don't want to specify (or see, either) a due date, a start date, a completion date, priority, effort, risk, tags, categories, sections, flags, stars, projects, reminder, pre-reminder, recurrency, location, contexts, and finally the actual task. I just want to write down what I have to do. Maybe I want to flag it as _important_. Sometimes I may need to set a deadline with a reminder, but that starts getting complex already. -* *Too few fields* – On the other hand, just a title and a checkbox won't do. I want some form of categorization and (optional) deadlines. -* *Not cross-platform* – I use Windows at work, Linux at home, my wife has a Mac. We both have iPhones, but someday I may get an Android device, too. There aren't many todo lists out there that support more than two operating systems, nevermind mobile devices or web access! -* *Too fiddly* – See the first complaint, above. With too many fields almost always comes a complex interface. I don't want to wait 17 clicks to save my task. I want to type in what I want to do, and press Enter. Is it too much to ask for? -* *Made for a particular methodology* – GTD is great and David Allen is the God of Productivity, but I don't want to use @contexts or specify next actions because don't believe in them, therefore I shouldn't be forced to do so. - -90% of the digital todo list suck. Believe me. 10% – perhaps – don't. Luckily, I just need _one_, and guess what: I found it! - ] - - §txt[ - @title[Introducing Wunderlist: the quest is over!] - -=>[http://www.6wunderkinder.com/wunderlist/|Wunderlist], the List of Wonders, you can use it anywhere and at any time. It's so awesome that... I should stop the ass-kissing right now, and get to the _facts_. - -I discovered Wunderlist when my endless quest led me to the App Store. I think I must have installed nearly all the damn todo list apps, even the crappy ones. I didn't fall in love with Wunderlist at first tap: it took a few install-uninstall cycles, but in the end I settled for it. Here's why: -* *Free* – Not that it matters that much, I would happily pay a few bucks for a _good_ app. And yes, I did pay for a few todo lists that I dumped afterwards. Bummer. -* *Cross-platform* – iPhone, iPad, Android, Windows, OS X. And Linux? Not really, but who cares: the web app is fine and it probably plays well =>[http://haiku-os.org/|Haiku] as well. -* *Simple and Efficient* – Two clicks to add a task to any list. No compulsory extra-fields, optional deadlines, unlimited lists. Got something important to do? Tap the star on the left of the task to move it to the top of your list and bookmark it. -* *Amazing email integration* – Create tasks via email, share tasks with others via email, get reminders via push... or email. They even email you if you have overdue tasks. Like... everyday! I was so happy when they implemented this feature that I nearly cried when I got the first few emails. -* *Everything is sync'ed* – On your iPhone, iPad, Android device, Windows PC, Mac, web, etc. It's all there, always, everywhere. - -When I finally realized how awesome this app was, I started using it for chores, and as a shopping list. Then I figured it was good enough as a backlog for my open source projects and my web site, and then... Then my wife discovered it. - ] - - §txt[ - @title[Why your wife shouldn't use it...] - -image[@style[float:right;margin-top:1em;]&[img-path]/wunderlist-list.png] - -One of the relatively unusual features of Wunderlist is the possibiliy of sharing lists with others. All you have to do is click a button, specify one or more email address, and send invitations out. People will then signup for a free Wunderlist account and they'll be able to access (as in read/write access) your list. - -Because Roxanne, my wife, has an iPhone, she was the most obvious candidate to try out this collaborative feature. First I shared my _Shopping_ list with her: we needed to make a list of things to get for a party, and that was fun. Wunderlist worked perfectly: we went around the supermarket and ticked things off the shared list, which updated in real-time! - -All went great until I decided to share the infamous _Chores_ list. You know the one: bills, fees, errands... I used to say things like "it's on my list, honey, I'll do it", or even "Yes... I'll add it to the _Chores_, just gimme a minute". Little did I know that my beloved liked Wunderlist so much that she started using it frequenly, constantly updating the damn chores list with things like "Take the rubbish out" or "Collect the package from the post office". - -I realized she became a true Wunderlist ninja when I found a task called "Flowers for Roxanne!" – starred and with a deadline set to _two months ago!_ - ] - - §txt[ - @title[My five work lists] -After months of trial, I decided to use Wunderlist at work as well. With caution, of course: I made sure not to write down any sensitive information in my tasks, because you never know. I started off with just one list, but it got crowded very quickly. I now use _five_ lists for work only: - -image[@style[float:right;margin-top:1em;]&[img-path]/wunderlist-work.png] - -* *Work \[!\]* – This is the most active one, I use it for things to do ASAP. Starred tasks are urgent and important, and should be dealt with within the day. At work, that's my default list. -* *Work \[~\]* – This is for things that in progress, for tasks I delegated to other people, for keeping track of emails waiting for a reply, etc. I tend to check it at least a couple of times per day (if something is really urgent gets moved to the first list). -* *Work \[...\]* – This is for someday/maybes. Something that is most definitely not urgent, and not too important either. I normally review it once a week, except in the middle of August when I won't be able to do anything because everyone will be on holiday... It will become my default list for a week or two, then. -* *Work \[CoP\]* – I also work as the coordinator of a Community of Practice, and I want to keep CoP-related stuff separate, so that I know where to look when I can allocate some CoP time during my day. -* *Work \[@boss\]* – This is a special list for my boss only. We email each other frequently, but rather then sending her long emails she can't afford to read, I write down discussion topics in this list, which I'll then load up at the following status meeting. - -The next step? Maybe sharing lists with my boss and collegues, who knows... - ] - - §txt[ - @title[The bottom line] -Saying that Wunderlist is the _perfect_ todo list for _everyone_ would be pointless: there would always be people who wouldn't agree with that. Wunderlist is not perfect, but close enough for me: it has most of the feature I need, and – most importantly – very little features I don't need. In the end, this is what makes an app truly awesome. - -I give it four stars out of five. Why not five? Because in this way =>[http://www.6wunderkinder.com/|6Wunderkinder] can make Wunderlist _even a better product_ by surprising its users with something they didn't know they wanted. That's what Steve Jobs does at every Keynote, isn't it? - -image[@style[text-align:center;margin:auto;display:block;]&[img-path]/wunderlist-done.png] - - ]
@@ -1,6 +0,0 @@
---- -permalink: 'atom' -type: 'feed' -title: 'H3RALD - Articles (Atom Feed)' ---- -<%= atom_feed %>
@@ -1,83 +0,0 @@
------ -permalink: concatenative -filters_pre: -- erb -- redcloth -title: "Concatenative" -type: project -github: concatenative -links: -- "Documentation": http://concatenative.rubyforge.org -- "Download": http://rubyforge.org/projects/concatenative -- "Source": http://github.com/h3rald/concatenative/tree/master -- "Tracking": http://github.com/h3rald/concatenative/issues -status: On Hold -version: 0.2.0 ------ - -<%= render 'project_data', :tag => 'concatenative' %> - -Concatenative is a Ruby DSL(Domain-specific Language) for concatenative programming. It is heavily inspired by "Joy":http://www.latrobe.edu.au/philosophy/phimvt/joy.html, a minimalist programming language by Manfred von Thun. Like Joy, Concatenative features: - -* function composition, instead of function application -* quotation, instead of abstraction -* no formal parameters -* no variable assignments - -Plus, it allows you to use Ruby objects and methods in a concatenative fashion. - -<div class="spacer-50"></div> - -h3. Installation - -The simplest method to install Concatenative is to install the gem: - -@gem install concatenative@ - -h3. Usage - -Initialization: - -<% highlight :ruby do %> -require 'concatentive' -<% end %> - -Execute a Concatenative program: - -<% highlight :ruby do %> - concatenate( - 10, - [0, :==], - [1, :+], - [:dup, 1, :-], - [:*], - :linrec - ) -<% end %> - -The program above returns the factorial of 10, computed using the linrec combinator. It is also possible to execute arrays directly and define concatenative programs as symbols. - -<% highlight :ruby do %> - :factorial << [[0, :==], [:pop, 1], [:dup, 1, :- , :factorial, :*], :if] - [5, :factorial].execute -<% end %> - -The program above calculates the factorial of 5, using explicit recursion. - -You can use all Ruby methods in Concatenative programs as well, making sure that the right number of arguments (and the method’s receiver) are retrieved from the stack correctly. For this to work, Concatenative must know the arity of the method in advance, so the following rules are applied: - - * All operators have an arity of 1 - * All other method have an arity of 0 - * If a method has a different arity, you must specify it explicitly using the pipe (|) operator. - -Example: - -<% highlight :ruby do %> - concatenate( - "Goodbye, World!", /Goodbye/, "Hello", :sub|2 - ) -<% end %> - -The program above is equivalent to @"Goodbye, World!".sub(/Goodbye/, "Hello")@. - -<%= render 'project_updates', :tag => 'concatenative' %>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: contact -:title: "Contact" ------ - -<div class="contact-list"> - -* <i class="fa fa-envelope"></i> <a href='mailto:h3rald@h3rald.com'>h3rald@h3rald.com</a> -* <i class="fa fa-twitter"></i> "@h3rald":http://twitter.com/h3rald -* <i class="fa fa-linkedin"></i> "LinkedIn":http://it.linkedin.com/in/fabiocevasco -* <i class="fa fa-bookmark"></i> "Pinboard":http://pinboard.in/u:h3rald/ -* <i class="fa fa-instagram"></i> "Instagram":http://instagram.com/h3rald/ -* <i class="fa fa-github"></i> "Github":https://github.com/h3rald -* <i class="fa fa-foursquare"></i> "Foursquare":http://foursquare.com/h3rald - -</div>
@@ -1,565 +0,0 @@
-<?xml version="1.0" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"> -<metadata></metadata> -<defs> -<font id="fontawesomeregular" horiz-adv-x="1536" > -<font-face units-per-em="1792" ascent="1536" descent="-256" /> -<missing-glyph horiz-adv-x="448" /> -<glyph unicode=" " horiz-adv-x="448" /> -<glyph unicode="	" horiz-adv-x="448" /> -<glyph unicode=" " horiz-adv-x="448" /> -<glyph unicode="¨" horiz-adv-x="1792" /> -<glyph unicode="©" horiz-adv-x="1792" /> -<glyph unicode="®" horiz-adv-x="1792" /> -<glyph unicode="´" horiz-adv-x="1792" /> -<glyph unicode="Æ" horiz-adv-x="1792" /> -<glyph unicode="Ø" horiz-adv-x="1792" /> -<glyph unicode=" " horiz-adv-x="768" /> -<glyph unicode=" " horiz-adv-x="1537" /> -<glyph unicode=" " horiz-adv-x="768" /> -<glyph unicode=" " horiz-adv-x="1537" /> -<glyph unicode=" " horiz-adv-x="512" /> -<glyph unicode=" " horiz-adv-x="384" /> -<glyph unicode=" " horiz-adv-x="256" /> -<glyph unicode=" " horiz-adv-x="256" /> -<glyph unicode=" " horiz-adv-x="192" /> -<glyph unicode=" " horiz-adv-x="307" /> -<glyph unicode=" " horiz-adv-x="85" /> -<glyph unicode=" " horiz-adv-x="307" /> -<glyph unicode=" " horiz-adv-x="384" /> -<glyph unicode="™" horiz-adv-x="1792" /> -<glyph unicode="∞" horiz-adv-x="1792" /> -<glyph unicode="≠" horiz-adv-x="1792" /> -<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" /> -<glyph unicode="" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" /> -<glyph unicode="" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" /> -<glyph unicode="" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> -<glyph unicode="" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" /> -<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" /> -<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " /> -<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" /> -<glyph unicode="" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" /> -<glyph unicode="" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" /> -<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z " /> -<glyph unicode="" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" /> -<glyph unicode="" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" /> -<glyph unicode="" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" /> -<glyph unicode="" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" /> -<glyph unicode="" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" /> -<glyph unicode="" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" /> -<glyph unicode="" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" /> -<glyph unicode="" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" /> -<glyph unicode="" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" /> -<glyph unicode="" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" /> -<glyph unicode="" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" /> -<glyph unicode="" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" /> -<glyph unicode="" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57 q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -4 -0.5 -13t-0.5 -13q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5 q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" /> -<glyph unicode="" horiz-adv-x="1408" d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142 q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5 t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68.5 -0.5t67.5 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5 t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" /> -<glyph unicode="" horiz-adv-x="1024" d="M0 -126l17 85q6 2 81.5 21.5t111.5 37.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5 q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2 t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5 q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" /> -<glyph unicode="" d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1 t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5 t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49 t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" /> -<glyph unicode="" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> -<glyph unicode="" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" /> -<glyph unicode="" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" /> -<glyph unicode="" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" /> -<glyph unicode="" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" /> -<glyph unicode="" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" /> -<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" /> -<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" /> -<glyph unicode="" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" /> -<glyph unicode="" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" /> -<glyph unicode="" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" /> -<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" /> -<glyph unicode="" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" /> -<glyph unicode="" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" /> -<glyph unicode="" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" /> -<glyph unicode="" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" /> -<glyph unicode="" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" /> -<glyph unicode="" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" /> -<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" /> -<glyph unicode="" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" /> -<glyph unicode="" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " /> -<glyph unicode="" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" /> -<glyph unicode="" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> -<glyph unicode="" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" /> -<glyph unicode="" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " /> -<glyph unicode="" horiz-adv-x="1664" d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45 t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" /> -<glyph unicode="" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" /> -<glyph unicode="" horiz-adv-x="2048" d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" /> -<glyph unicode="" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960z" /> -<glyph unicode="" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" /> -<glyph unicode="" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" /> -<glyph unicode="" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" /> -<glyph unicode="" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" /> -<glyph unicode="" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" /> -<glyph unicode="" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" /> -<glyph unicode="" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" /> -<glyph unicode="" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" /> -<glyph unicode="" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" /> -<glyph unicode="" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" /> -<glyph unicode="" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" /> -<glyph unicode="" horiz-adv-x="1024" d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" /> -<glyph unicode="" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" /> -<glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" /> -<glyph unicode="" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" /> -<glyph unicode="" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5 t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" /> -<glyph unicode="" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" /> -<glyph unicode="" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" /> -<glyph unicode="" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" /> -<glyph unicode="" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" /> -<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" /> -<glyph unicode="" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" /> -<glyph unicode="" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" /> -<glyph unicode="" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " /> -<glyph unicode="" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " /> -<glyph unicode="" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" /> -<glyph unicode="" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" /> -<glyph unicode="" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" /> -<glyph unicode="" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" /> -<glyph unicode="" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" /> -<glyph unicode="" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" /> -<glyph unicode="" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" /> -<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" /> -<glyph unicode="" d="M829 318q0 -76 -58.5 -112.5t-139.5 -36.5q-41 0 -80.5 9.5t-75.5 28.5t-58 53t-22 78q0 46 25 80t65.5 51.5t82 25t84.5 7.5q20 0 31 -2q2 -1 23 -16.5t26 -19t23 -18t24.5 -22t19 -22.5t17 -26t9 -26.5t4.5 -31.5zM755 863q0 -60 -33 -99.5t-92 -39.5q-53 0 -93 42.5 t-57.5 96.5t-17.5 106q0 61 32 104t92 43q53 0 93.5 -45t58 -101t17.5 -107zM861 1120l88 64h-265q-85 0 -161 -32t-127.5 -98t-51.5 -153q0 -93 64.5 -154.5t158.5 -61.5q22 0 43 3q-13 -29 -13 -54q0 -44 40 -94q-175 -12 -257 -63q-47 -29 -75.5 -73t-28.5 -95 q0 -43 18.5 -77.5t48.5 -56.5t69 -37t77.5 -21t76.5 -6q60 0 120.5 15.5t113.5 46t86 82.5t33 117q0 49 -20 89.5t-49 66.5t-58 47.5t-49 44t-20 44.5t15.5 42.5t37.5 39.5t44 42t37.5 59.5t15.5 82.5q0 60 -22.5 99.5t-72.5 90.5h83zM1152 672h128v64h-128v128h-64v-128 h-128v-64h128v-160h64v160zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M735 740q0 -36 32 -70.5t77.5 -68t90.5 -73.5t77 -104t32 -142q0 -90 -48 -173q-72 -122 -211 -179.5t-298 -57.5q-132 0 -246.5 41.5t-171.5 137.5q-37 60 -37 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 42 -47.5 74t-15.5 73q0 36 21 85q-46 -4 -68 -4 q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q77 66 182.5 98t217.5 32h418l-138 -88h-131q74 -63 112 -133t38 -160q0 -72 -24.5 -129.5t-59 -93t-69.5 -65t-59.5 -61.5t-24.5 -66zM589 836q38 0 78 16.5t66 43.5q53 57 53 159q0 58 -17 125t-48.5 129.5 t-84.5 103.5t-117 41q-42 0 -82.5 -19.5t-65.5 -52.5q-47 -59 -47 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26zM591 -37q58 0 111.5 13t99 39t73 73t27.5 109q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -48 2 q-53 0 -105 -7t-107.5 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -70 35 -123.5t91.5 -83t119 -44t127.5 -14.5zM1401 839h213v-108h-213v-219h-105v219h-212v108h212v217h105v-217z" /> -<glyph unicode="" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> -<glyph unicode="" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" /> -<glyph unicode="" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" /> -<glyph unicode="" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> -<glyph unicode="" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" /> -<glyph unicode="" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" /> -<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" /> -<glyph unicode="" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> -<glyph unicode="" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" /> -<glyph unicode="" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" /> -<glyph unicode="" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" /> -<glyph unicode="" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" /> -<glyph unicode="" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" /> -<glyph unicode="" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5 t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" /> -<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704 q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" /> -<glyph unicode="" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" /> -<glyph unicode="" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" /> -<glyph unicode="" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> -<glyph unicode="" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" /> -<glyph unicode="" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" /> -<glyph unicode="" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" /> -<glyph unicode="" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" /> -<glyph unicode="" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" /> -<glyph unicode="" horiz-adv-x="1792" d="M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5 t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5 q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z" /> -<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" /> -<glyph unicode="" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " /> -<glyph unicode="" horiz-adv-x="1792" /> -<glyph unicode="" horiz-adv-x="1792" /> -<glyph unicode="" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" /> -<glyph unicode="" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" /> -<glyph unicode="" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" /> -<glyph unicode="" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" /> -<glyph unicode="" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" /> -<glyph unicode="" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" /> -<glyph unicode="" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" /> -<glyph unicode="" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" /> -<glyph unicode="" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" /> -<glyph unicode="" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" /> -<glyph unicode="" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" /> -<glyph unicode="" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" /> -<glyph unicode="" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" /> -<glyph unicode="" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" /> -<glyph unicode="" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> -<glyph unicode="" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" /> -<glyph unicode="" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" /> -<glyph unicode="" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" /> -<glyph unicode="" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" /> -<glyph unicode="" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" /> -<glyph unicode="" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" /> -<glyph unicode="" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" /> -<glyph unicode="" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" /> -<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" /> -<glyph unicode="" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" /> -<glyph unicode="" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" /> -<glyph unicode="" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" /> -<glyph unicode="" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" /> -<glyph unicode="" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" /> -<glyph unicode="" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" /> -<glyph unicode="" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" /> -<glyph unicode="" d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" /> -<glyph unicode="" d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" /> -<glyph unicode="" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" /> -<glyph unicode="" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" /> -<glyph unicode="" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" /> -<glyph unicode="" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" /> -<glyph unicode="" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" /> -<glyph unicode="" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" /> -<glyph unicode="" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" /> -<glyph unicode="" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" /> -<glyph unicode="" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" /> -<glyph unicode="" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" /> -<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" /> -<glyph unicode="" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" /> -<glyph unicode="" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1024" d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14 q78 2 134 29z" /> -<glyph unicode="" d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" /> -<glyph unicode="" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" /> -<glyph unicode="" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" /> -<glyph unicode="" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" /> -<glyph unicode="" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" /> -<glyph unicode="" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324 l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" /> -<glyph unicode="" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> -<glyph unicode="" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> -<glyph unicode="" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" /> -<glyph unicode="" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" /> -<glyph unicode="" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " /> -<glyph unicode="" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" /> -<glyph unicode="" d="M1254 899q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 113.5 -16t26.5 -99q-5 -52 -52 -143q-43 -78 -71 -99q-44 -32 -87 14q-23 24 -37.5 64.5t-19 73t-10 84t-8.5 71.5q-23 129 -34 164q-12 37 -35.5 69 t-50.5 40q-57 16 -127 -25q-54 -32 -136.5 -106t-122.5 -102v-7q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t76 31.5q131 77 250 237 q104 139 172.5 292.5t82.5 226.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="2176" d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40 t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29 q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9 q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102 t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" /> -<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69 q-46 32 -141.5 92.5t-142.5 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13 t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5 t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21 t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286 t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273 t273 -182.5t331.5 -68z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" /> -<glyph unicode="" horiz-adv-x="2048" d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64 q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" /> -<glyph unicode="" horiz-adv-x="2304" d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433 q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" /> -<glyph unicode="" d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q43 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0 q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" /> -<glyph unicode="" horiz-adv-x="1280" d="M981 197q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -49 2q-53 0 -104.5 -7t-107 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -56 23.5 -102t61 -75.5t87 -50t100 -29t101.5 -8.5q58 0 111.5 13t99 39t73 73t27.5 109zM864 1055 q0 59 -17 125.5t-48 129t-84 103.5t-117 41q-42 0 -82.5 -19.5t-66.5 -52.5q-46 -59 -46 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26q37 0 77.5 16.5t65.5 43.5q53 56 53 159zM752 1536h417l-137 -88h-132q75 -63 113 -133t38 -160q0 -72 -24.5 -129.5 t-59.5 -93t-69.5 -65t-59 -61.5t-24.5 -66q0 -36 32 -70.5t77 -68t90.5 -73.5t77.5 -104t32 -142q0 -91 -49 -173q-71 -122 -209.5 -179.5t-298.5 -57.5q-132 0 -246.5 41.5t-172.5 137.5q-36 59 -36 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 41 -47.5 73.5 t-15.5 73.5q0 40 21 85q-46 -4 -68 -4q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q76 66 182 98t218 32z" /> -<glyph unicode="" horiz-adv-x="2304" d="M1509 107q0 -14 -12 -29q-52 -59 -147.5 -83t-196.5 -24q-252 0 -346 107q-12 15 -12 29q0 17 12 29.5t29 12.5q15 0 30 -12q58 -49 125.5 -66t159.5 -17t160 17t127 66q15 12 30 12q17 0 29 -12.5t12 -29.5zM978 498q0 -61 -43 -104t-104 -43q-60 0 -104.5 43.5 t-44.5 103.5q0 61 44 105t105 44t104 -44t43 -105zM1622 498q0 -61 -43 -104t-104 -43q-60 0 -104.5 43.5t-44.5 103.5q0 61 44 105t105 44t104 -44t43 -105zM415 793q-39 27 -88 27q-66 0 -113 -47t-47 -113q0 -72 54 -121q53 141 194 254zM2020 382q0 222 -249 387 q-128 85 -291.5 126.5t-331.5 41.5t-331.5 -41.5t-292.5 -126.5q-249 -165 -249 -387t249 -387q129 -85 292.5 -126.5t331.5 -41.5t331.5 41.5t291.5 126.5q249 165 249 387zM2137 660q0 66 -47 113t-113 47q-50 0 -93 -30q140 -114 192 -256q61 48 61 126zM1993 1335 q0 49 -34.5 83.5t-82.5 34.5q-49 0 -83.5 -34.5t-34.5 -83.5q0 -48 34.5 -82.5t83.5 -34.5q48 0 82.5 34.5t34.5 82.5zM2220 660q0 -65 -33 -122t-89 -90q5 -35 5 -66q0 -139 -79 -255.5t-208 -201.5q-140 -92 -313.5 -136.5t-354.5 -44.5t-355 44.5t-314 136.5 q-129 85 -208 201.5t-79 255.5q0 36 6 71q-53 33 -83.5 88.5t-30.5 118.5q0 100 71 171.5t172 71.5q91 0 159 -60q265 170 638 177l144 456q10 29 40 29q24 0 384 -90q24 55 74 88t110 33q82 0 141 -59t59 -142t-59 -141.5t-141 -58.5q-83 0 -141.5 58.5t-59.5 140.5 l-339 80l-125 -395q349 -15 603 -179q71 63 163 63q101 0 172 -71.5t71 -171.5z" /> -<glyph unicode="" d="M950 393q7 7 17.5 7t17.5 -7t7 -18t-7 -18q-65 -64 -208 -64h-1h-1q-143 0 -207 64q-8 7 -8 18t8 18q7 7 17.5 7t17.5 -7q49 -51 172 -51h1h1q122 0 173 51zM671 613q0 -37 -26 -64t-63 -27t-63 27t-26 64t26 63t63 26t63 -26t26 -63zM1214 1049q-29 0 -50 21t-21 50 q0 30 21 51t50 21q30 0 51 -21t21 -51q0 -29 -21 -50t-51 -21zM1216 1408q132 0 226 -94t94 -227v-894q0 -133 -94 -227t-226 -94h-896q-132 0 -226 94t-94 227v894q0 133 94 227t226 94h896zM1321 596q35 14 57 45.5t22 70.5q0 51 -36 87.5t-87 36.5q-60 0 -98 -48 q-151 107 -375 115l83 265l206 -49q1 -50 36.5 -85t84.5 -35q50 0 86 35.5t36 85.5t-36 86t-86 36q-36 0 -66 -20.5t-45 -53.5l-227 54q-9 2 -17.5 -2.5t-11.5 -14.5l-95 -302q-224 -4 -381 -113q-36 43 -93 43q-51 0 -87 -36.5t-36 -87.5q0 -37 19.5 -67.5t52.5 -45.5 q-7 -25 -7 -54q0 -98 74 -181.5t201.5 -132t278.5 -48.5q150 0 277.5 48.5t201.5 132t74 181.5q0 27 -6 54zM971 702q37 0 63 -26t26 -63t-26 -64t-63 -27t-63 27t-26 64t26 63t63 26z" /> -<glyph unicode="" d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150 v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103 t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328 v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" /> -<glyph unicode="" d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="2048" d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123 v-369h123z" /> -<glyph unicode="" d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101 v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="2038" d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14 q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24 q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33 q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5 t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43 q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5 t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13 t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" /> -<glyph unicode="" d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10 q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14 q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14 t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44 q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" /> -<glyph unicode="" d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5 t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5 q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126 t135.5 51q85 0 145 -60.5t60 -145.5z" /> -<glyph unicode="" d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5 q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28 q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11 q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q106 35 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5 q20 0 20 -21v-418z" /> -<glyph unicode="" horiz-adv-x="1792" d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48 l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23 t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128 q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128 q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" /> -<glyph unicode="" d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9 t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9 t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9 t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68t68 28t68 -28l228 -228h368l228 228q28 28 68 28t68 -28t28 -68t-28 -68zM864 1152q0 -93 -65.5 -158.5 t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5 q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819 q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5 t100.5 134t141.5 55.5z" /> -<glyph unicode="" horiz-adv-x="768" d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z " /> -<glyph unicode="" horiz-adv-x="2304" d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67 t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-5 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70 v-400l434 -186q36 -16 57 -48t21 -70z" /> -<glyph unicode="" horiz-adv-x="2048" d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658 q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204 q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" /> -<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5 t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217 t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5 q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89 q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" /> -<glyph unicode="" d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5 q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5 q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z " /> -<glyph unicode="" horiz-adv-x="1792" d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188 l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5 t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1 q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" /> -<glyph unicode="" horiz-adv-x="2048" d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384 q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5 l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" /> -<glyph unicode="" horiz-adv-x="2048" d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5 t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" /> -<glyph unicode="" d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384 q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" /> -<glyph unicode="" d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64 q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37 q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1024" d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z" /> -<glyph unicode="" horiz-adv-x="2304" d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11 q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245 q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785 l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242 q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236q0 -11 -8 -19 t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786q-13 2 -22 11t-9 22v899 q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" /> -<glyph unicode="" d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127 t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5 t-103 128v128q0 69 103 128t280 93.5t385 34.5z" /> -<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197 q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8 q-1 1 -1 2t-0.5 1.5t-0.5 1.5q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" /> -<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4l-3 21q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5t-3.5 -21.5l-4 -21h-4l-2 21 q-2 26 -7 46l-99 438h90v107h-300z" /> -<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107 h-290v-107h68l189 -272l-194 -283h-68z" /> -<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" /> -<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" /> -<glyph unicode="" d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400 v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79 q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" /> -<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5 q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" /> -<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" /> -<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243 l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" /> -<glyph unicode="" d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406 q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" /> -<glyph unicode="" horiz-adv-x="1792" d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546 q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" /> -<glyph unicode="" horiz-adv-x="2048" d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94 q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55 t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97q14 -16 29.5 -34t34.5 -40t29 -34q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5 t-85 -189.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194 q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5 t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348q0 222 101 414.5t276.5 317t390.5 155.5v-260q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 q0 230 -145.5 406t-366.5 221v260q215 -31 390.5 -155.5t276.5 -317t101 -414.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41 t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170 t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136 q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" /> -<glyph unicode="" horiz-adv-x="1792" d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251 l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162 q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33 q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5 t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71 t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> -<glyph unicode="" d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85 q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392 q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072 q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58 q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47 q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171 v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" /> -<glyph unicode="" d="M825 547l343 588h-150q-21 -39 -63.5 -118.5t-68 -128.5t-59.5 -118.5t-60 -128.5h-3q-21 48 -44.5 97t-52 105.5t-46.5 92t-54 104.5t-49 95h-150l323 -589v-435h134v436zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1280" d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5 t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153 t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5 q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20 t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5 t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" /> -<glyph unicode="" horiz-adv-x="2048" d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25 q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5 q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109 q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137 l863 639l-478 -797z" /> -<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23 t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" /> -<glyph unicode="" d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15 t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2 t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160 q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5 q0 -26 -12 -48t-36 -22z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179 q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" /> -<glyph unicode="" d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256 q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" /> -<glyph unicode="" d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5 t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" /> -<glyph unicode="" d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5 t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5 t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91 q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9 t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" /> -<glyph unicode="" horiz-adv-x="1792" d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323 l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" /> -<glyph unicode="" horiz-adv-x="1792" d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23 zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5 t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" /> -<glyph unicode="" horiz-adv-x="1792" d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1755 1083q37 -37 37 -90t-37 -91l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234l401 400 q38 37 91 37t90 -37z" /> -<glyph unicode="" horiz-adv-x="1792" d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5 t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q3 -2 11 -7 t11 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" /> -<glyph unicode="" horiz-adv-x="1792" d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" /> -<glyph unicode="" d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36 q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q70 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5 t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87 q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" /> -<glyph unicode="" horiz-adv-x="2048" d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19 t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" /> -<glyph unicode="" horiz-adv-x="2048" d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121 q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" /> -<glyph unicode="" horiz-adv-x="1792" d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5 t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38 h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1112 1090q0 159 -237 159h-70q-32 0 -59.5 -21.5t-34.5 -52.5l-63 -276q-2 -5 -2 -16q0 -24 17 -39.5t41 -15.5h53q69 0 128.5 13t112.5 41t83.5 81.5t30.5 126.5zM1716 938q0 -265 -220 -428q-219 -161 -612 -161h-61q-32 0 -59 -21.5t-34 -52.5l-73 -316 q-8 -36 -40.5 -61.5t-69.5 -25.5h-213q-31 0 -53 20t-22 51q0 10 13 65h151q34 0 64 23.5t38 56.5l73 316q8 33 37.5 57t63.5 24h61q390 0 607 160t217 421q0 129 -51 207q183 -92 183 -335zM1533 1123q0 -264 -221 -428q-218 -161 -612 -161h-60q-32 0 -59.5 -22t-34.5 -53 l-73 -315q-8 -36 -40 -61.5t-69 -25.5h-214q-31 0 -52.5 19.5t-21.5 51.5q0 8 2 20l300 1301q8 36 40.5 61.5t69.5 25.5h444q68 0 125 -4t120.5 -15t113.5 -30t96.5 -50.5t77.5 -74t49.5 -103.5t18.5 -136z" /> -<glyph unicode="" horiz-adv-x="1792" d="M602 949q19 -61 31 -123.5t17 -141.5t-14 -159t-62 -145q-21 81 -67 157t-95.5 127t-99 90.5t-78.5 57.5t-33 19q-62 34 -81.5 100t14.5 128t101 81.5t129 -14.5q138 -83 238 -177zM927 1236q11 -25 20.5 -46t36.5 -100.5t42.5 -150.5t25.5 -179.5t0 -205.5t-47.5 -209.5 t-105.5 -208.5q-51 -72 -138 -72q-54 0 -98 31q-57 40 -69 109t28 127q60 85 81 195t13 199.5t-32 180.5t-39 128t-22 52q-31 63 -8.5 129.5t85.5 97.5q34 17 75 17q47 0 88.5 -25t63.5 -69zM1248 567q-17 -160 -72 -311q-17 131 -63 246q25 174 -5 361q-27 178 -94 342 q114 -90 212 -211q9 -37 15 -80q26 -179 7 -347zM1520 1440q9 -17 23.5 -49.5t43.5 -117.5t50.5 -178t34 -227.5t5 -269t-47 -300t-112.5 -323.5q-22 -48 -66 -75.5t-95 -27.5q-39 0 -74 16q-67 31 -92.5 100t4.5 136q58 126 90 257.5t37.5 239.5t-3.5 213.5t-26.5 180.5 t-38.5 138.5t-32.5 90t-15.5 32.5q-34 65 -11.5 135.5t87.5 104.5q37 20 81 20q49 0 91.5 -25.5t66.5 -70.5z" /> -<glyph unicode="" horiz-adv-x="2304" d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27 q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128 q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> -<glyph unicode="" horiz-adv-x="2304" d="M671 603h-13q-47 0 -47 -32q0 -22 20 -22q17 0 28 15t12 39zM1066 639h62v3q1 4 0.5 6.5t-1 7t-2 8t-4.5 6.5t-7.5 5t-11.5 2q-28 0 -36 -38zM1606 603h-12q-48 0 -48 -32q0 -22 20 -22q17 0 28 15t12 39zM1925 629q0 41 -30 41q-19 0 -31 -20t-12 -51q0 -42 28 -42 q20 0 32.5 20t12.5 52zM480 770h87l-44 -262h-56l32 201l-71 -201h-39l-4 200l-34 -200h-53l44 262h81l2 -163zM733 663q0 -6 -4 -42q-16 -101 -17 -113h-47l1 22q-20 -26 -58 -26q-23 0 -37.5 16t-14.5 42q0 39 26 60.5t73 21.5q14 0 23 -1q0 3 0.5 5.5t1 4.5t0.5 3 q0 20 -36 20q-29 0 -59 -10q0 4 7 48q38 11 67 11q74 0 74 -62zM889 721l-8 -49q-22 3 -41 3q-27 0 -27 -17q0 -8 4.5 -12t21.5 -11q40 -19 40 -60q0 -72 -87 -71q-34 0 -58 6q0 2 7 49q29 -8 51 -8q32 0 32 19q0 7 -4.5 11.5t-21.5 12.5q-43 20 -43 59q0 72 84 72 q30 0 50 -4zM977 721h28l-7 -52h-29q-2 -17 -6.5 -40.5t-7 -38.5t-2.5 -18q0 -16 19 -16q8 0 16 2l-8 -47q-21 -7 -40 -7q-43 0 -45 47q0 12 8 56q3 20 25 146h55zM1180 648q0 -23 -7 -52h-111q-3 -22 10 -33t38 -11q30 0 58 14l-9 -54q-30 -8 -57 -8q-95 0 -95 95 q0 55 27.5 90.5t69.5 35.5q35 0 55.5 -21t20.5 -56zM1319 722q-13 -23 -22 -62q-22 2 -31 -24t-25 -128h-56l3 14q22 130 29 199h51l-3 -33q14 21 25.5 29.5t28.5 4.5zM1506 763l-9 -57q-28 14 -50 14q-31 0 -51 -27.5t-20 -70.5q0 -30 13.5 -47t38.5 -17q21 0 48 13 l-10 -59q-28 -8 -50 -8q-45 0 -71.5 30.5t-26.5 82.5q0 70 35.5 114.5t91.5 44.5q26 0 61 -13zM1668 663q0 -18 -4 -42q-13 -79 -17 -113h-46l1 22q-20 -26 -59 -26q-23 0 -37 16t-14 42q0 39 25.5 60.5t72.5 21.5q15 0 23 -1q2 7 2 13q0 20 -36 20q-29 0 -59 -10q0 4 8 48 q38 11 67 11q73 0 73 -62zM1809 722q-14 -24 -21 -62q-23 2 -31.5 -23t-25.5 -129h-56l3 14q19 104 29 199h52q0 -11 -4 -33q15 21 26.5 29.5t27.5 4.5zM1950 770h56l-43 -262h-53l3 19q-23 -23 -52 -23q-31 0 -49.5 24t-18.5 64q0 53 27.5 92t64.5 39q31 0 53 -29z M2061 640q0 148 -72.5 273t-198 198t-273.5 73q-181 0 -328 -110q127 -116 171 -284h-50q-44 150 -158 253q-114 -103 -158 -253h-50q44 168 171 284q-147 110 -328 110q-148 0 -273.5 -73t-198 -198t-72.5 -273t72.5 -273t198 -198t273.5 -73q181 0 328 110 q-120 111 -165 264h50q46 -138 152 -233q106 95 152 233h50q-45 -153 -165 -264q147 -110 328 -110q148 0 273.5 73t198 198t72.5 273zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> -<glyph unicode="" horiz-adv-x="2304" d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42 q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604 v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569 q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73 t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" /> -<glyph unicode="" horiz-adv-x="2304" d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260 l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279 v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040 q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168 q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5 t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21 h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5 t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" /> -<glyph unicode="" horiz-adv-x="2304" d="M322 689h-15q-19 0 -19 18q0 28 19 85q5 15 15 19.5t28 4.5q77 0 77 -49q0 -41 -30.5 -59.5t-74.5 -18.5zM664 528q-47 0 -47 29q0 62 123 62l3 -3q-5 -88 -79 -88zM1438 687h-15q-19 0 -19 19q0 28 19 85q5 15 14.5 19t28.5 4q77 0 77 -49q0 -41 -30.5 -59.5 t-74.5 -18.5zM1780 527q-47 0 -47 30q0 62 123 62l3 -3q-5 -89 -79 -89zM373 894h-128q-8 0 -14.5 -4t-8.5 -7.5t-7 -12.5q-3 -7 -45 -190t-42 -192q0 -7 5.5 -12.5t13.5 -5.5h62q25 0 32.5 34.5l15 69t32.5 34.5q47 0 87.5 7.5t80.5 24.5t63.5 52.5t23.5 84.5 q0 36 -14.5 61t-41 36.5t-53.5 15.5t-62 4zM719 798q-38 0 -74 -6q-2 0 -8.5 -1t-9 -1.5l-7.5 -1.5t-7.5 -2t-6.5 -3t-6.5 -4t-5 -5t-4.5 -7t-4 -9q-9 -29 -9 -39t9 -10q5 0 21.5 5t19.5 6q30 8 58 8q74 0 74 -36q0 -11 -10 -14q-8 -2 -18 -3t-21.5 -1.5t-17.5 -1.5 q-38 -4 -64.5 -10t-56.5 -19.5t-45.5 -39t-15.5 -62.5q0 -38 26 -59.5t64 -21.5q24 0 45.5 6.5t33 13t38.5 23.5q-3 -7 -3 -15t5.5 -13.5t12.5 -5.5h56q1 1 7 3.5t7.5 3.5t5 3.5t5 5.5t2.5 8l45 194q4 13 4 30q0 81 -145 81zM1247 793h-74q-22 0 -39 -23q-5 -7 -29.5 -51 t-46.5 -81.5t-26 -38.5l-5 4q0 77 -27 166q-1 5 -3.5 8.5t-6 6.5t-6.5 5t-8.5 3t-8.5 1.5t-9.5 1t-9 0.5h-10h-8.5q-38 0 -38 -21l1 -5q5 -53 25 -151t25 -143q2 -16 2 -24q0 -19 -30.5 -61.5t-30.5 -58.5q0 -13 40 -13q61 0 76 25l245 415q10 20 10 26q0 9 -8 9zM1489 892 h-129q-18 0 -29 -23q-6 -13 -46.5 -191.5t-40.5 -190.5q0 -20 43 -20h7.5h9h9t9.5 1t8.5 2t8.5 3t6.5 4.5t5.5 6t3 8.5l21 91q2 10 10.5 17t19.5 7q47 0 87.5 7t80.5 24.5t63.5 52.5t23.5 84q0 36 -14.5 61t-41 36.5t-53.5 15.5t-62 4zM1835 798q-26 0 -74 -6 q-38 -6 -48 -16q-7 -8 -11 -19q-8 -24 -8 -39q0 -10 8 -10q1 0 41 12q30 8 58 8q74 0 74 -36q0 -12 -10 -14q-4 -1 -57 -7q-38 -4 -64.5 -10t-56.5 -19.5t-45.5 -39t-15.5 -62.5t26 -58.5t64 -21.5q24 0 45 6t34 13t38 24q-3 -15 -3 -16q0 -5 2 -8.5t6.5 -5.5t8 -3.5 t10.5 -2t9.5 -0.5h9.5h8q42 0 48 25l45 194q3 15 3 31q0 81 -145 81zM2157 889h-55q-25 0 -33 -40q-10 -44 -36.5 -167t-42.5 -190v-5q0 -16 16 -18h1h57q10 0 18.5 6.5t10.5 16.5l83 374h-1l1 5q0 7 -5.5 12.5t-13.5 5.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048 q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> -<glyph unicode="" horiz-adv-x="2304" d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109 q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118 q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151 q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31 q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> -<glyph unicode="" horiz-adv-x="2048" d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5 l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5 l418 363q10 8 23.5 7t21.5 -11z" /> -<glyph unicode="" horiz-adv-x="2048" d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128 q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161 q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" /> -<glyph unicode="" horiz-adv-x="1408" d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704 q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167 q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" /> -<glyph unicode="" d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5 t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53 q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24 t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61 t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10 t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5 t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11t55.5 -11t52.5 -38q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5t47 37.5 q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-35 0 -55.5 11t-52.5 38q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38t-58 27 t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448h256v448 h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51 t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" /> -<glyph unicode="" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" /> -<glyph unicode="" horiz-adv-x="1792" d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9 t9 -23z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20 q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50 t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1 q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" /> -<glyph unicode="" d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73 q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110 q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="2048" d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5 t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5 t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" /> -<glyph unicode="" horiz-adv-x="2048" d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5 t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" /> -<glyph unicode="" horiz-adv-x="2304" d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94 q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469 q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400 q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" /> -<glyph unicode="" d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5 h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" /> -<glyph unicode="" horiz-adv-x="2048" d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327 q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5 q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" /> -<glyph unicode="" horiz-adv-x="1280" d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q18 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119 t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5 t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14 q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88 q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5 t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" /> -<glyph unicode="" horiz-adv-x="2048" d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206 q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307 t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14 t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" /> -<glyph unicode="" d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5 t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" /> -<glyph unicode="" d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55 q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410 q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" /> -<glyph unicode="" d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z" /> -<glyph unicode="" horiz-adv-x="2048" d="M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335 q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5 q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360q2 0 4.5 -1t5.5 -2.5l5 -2.5l188 199v347l-187 194 q-13 -8 -29 -10zM986 1438h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13 zM552 226h402l64 66l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224 l213 -225zM1023 946l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196 l-48 -227l130 227h-82zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z" /> -<glyph unicode="" d="M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z" /> -<glyph unicode="" d="M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384 q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z" /> -<glyph unicode="" horiz-adv-x="2048" d="M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021 q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25 q209 0 374 -102q172 107 374 102z" /> -<glyph unicode="" horiz-adv-x="2048" d="M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101 q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284 q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z" /> -<glyph unicode="" d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34 l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114 v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378 v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51 h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5 t-43 -34t-16.5 -53.5z" /> -<glyph unicode="" horiz-adv-x="2048" d="M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832 q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z" /> -<glyph unicode="" horiz-adv-x="2048" d="M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126.5t-103.5 132.5t-108.5 126t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5 t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113 t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5 q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920 q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920 q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="2048" d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20 l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z" /> -<glyph unicode="" horiz-adv-x="2048" d="M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83 q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83 q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314 v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83 q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" /> -<glyph unicode="" d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14 t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5 q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31 t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z" /> -<glyph unicode="" horiz-adv-x="2304" d="M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5 t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105 l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226 t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z" /> -<glyph unicode="" d="M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12 q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384 q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5 t158.5 -65.5t65.5 -158.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221 q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124 t127 -344z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292 q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1280 1504q0 14 9 23t23 9h416q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-419 -420q87 -104 129.5 -236.5t30.5 -276.5q-22 -250 -200.5 -431t-428.5 -206q-163 -17 -314 39.5t-256.5 162t-162 256.5t-39.5 314q25 250 206 428.5 t431 200.5q144 12 276.5 -30.5t236.5 -129.5l419 419h-261q-14 0 -23 9t-9 23v64zM704 -128q117 0 223.5 45.5t184 123t123 184t45.5 223.5t-45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123 t223.5 -45.5z" /> -<glyph unicode="" horiz-adv-x="1280" d="M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5 t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> -<glyph unicode="" d="M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64 q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64 q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9 t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5 t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23 t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391 q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391 q0 -226 -154 -391q103 -57 218 -57z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230 q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9 t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128 q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -29 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z" /> -<glyph unicode="" horiz-adv-x="2048" d="M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23 t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9 t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5 t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1728 1536q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-229 -230l156 -156q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-156 157l-99 -100q87 -104 129.5 -236.5t30.5 -276.5q-22 -250 -200.5 -431t-428.5 -206q-163 -17 -314 39.5 t-256.5 162t-162 256.5t-39.5 314q25 250 206 428.5t431 200.5q144 12 276.5 -30.5t236.5 -129.5l99 99l-156 156q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l156 -156l229 229h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM1280 448q0 117 -45.5 223.5t-123 184t-184 123 t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5z" /> -<glyph unicode="" horiz-adv-x="1280" d="M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22 t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5 t131.5 -316.5t316.5 -131.5z" /> -<glyph unicode="" horiz-adv-x="2048" d="M2029 685q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-131q-12 -119 -67 -226t-139 -183.5t-196.5 -121.5t-234.5 -45q-180 0 -330.5 91t-234.5 247 t-74 337q8 162 94 300t226.5 219.5t302.5 85.5q166 4 310.5 -71.5t235.5 -208.5t107 -296h131v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM640 128q104 0 198.5 40.5t163.5 109.5t109.5 163.5 t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5 t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> -<glyph unicode="" horiz-adv-x="1792" /> -<glyph unicode="" horiz-adv-x="1792" /> -<glyph unicode="" horiz-adv-x="1792" /> -<glyph unicode="" d="M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z" /> -<glyph unicode="" horiz-adv-x="1280" d="M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5 l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5 q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z" /> -<glyph unicode="" d="M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5 t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233 l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z" /> -<glyph unicode="" horiz-adv-x="1792" d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216 q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" /> -<glyph unicode="" horiz-adv-x="2048" d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5 t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z" /> -<glyph unicode="" horiz-adv-x="2048" d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136 q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69 t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z" /> -<glyph unicode="" horiz-adv-x="2048" d="M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704 q-26 0 -45 -19t-19 -45v-384h1152z" /> -<glyph unicode="" d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" /> -<glyph unicode="" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56 t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" /> -<glyph unicode="" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47 t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 204v-209h-642v209h134v926h-6l-314 -1135h-243l-310 1135h-8v-926h135v-209h-538v209h69q21 0 43 19.5t22 37.5v881q0 18 -22 40t-43 22h-69v209h672l221 -821h6l223 821h670v-209h-71q-19 0 -41 -22t-22 -40v-881q0 -18 21.5 -37.5t41.5 -19.5h71z" /> -<glyph unicode="" horiz-adv-x="1792" /> -<glyph unicode="" horiz-adv-x="1792" /> -<glyph unicode="" horiz-adv-x="1792" /> -<glyph unicode="" horiz-adv-x="1792" /> -<glyph unicode="" horiz-adv-x="1792" /> -</font> -</defs></svg>
@@ -1,202 +0,0 @@
-<?xml version="1.0" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > -<svg xmlns="http://www.w3.org/2000/svg"> -<metadata> -<json> -<![CDATA[ -{ - "fontFamily": "h3raldicons", - "majorVersion": 1, - "minorVersion": 0, - "fontURL": "https://h3rald.com", - "description": "H3RALD.com Font Bundle\nFont generated by IcoMoon.", - "version": "Version 1.0", - "fontId": "h3raldicons", - "psName": "h3raldicons", - "subFamily": "Regular", - "fullName": "h3raldicons" -} -]]> -</json> -</metadata> -<defs> -<font id="h3raldicons" horiz-adv-x="1024"> -<font-face units-per-em="1024" ascent="960" descent="-64" /> -<missing-glyph horiz-adv-x="1024" /> -<glyph unicode=" " horiz-adv-x="512" d="" /> -<glyph unicode="" glyph-name="css3-01" data-tags="css3-01" d="M408.128 866.636v-44.036h-112.604v136.398h112.604v-48.26h-64.344v-44.102h64.344zM523.882 910.738h44.984v48.26h-112.616c0 0 0-24.224 0-48.26 15.066-15.066 22.922-22.278 44.712-44.068-12.738 0-44.712-0.044-44.712-0.042v-44.028h112.616v44.036l-44.984 44.102zM683.492 910.738h44.98v48.26h-112.612c0 0 0-24.224 0-48.26 15.062-15.066 22.922-22.278 44.71-44.068-12.73 0-44.71-0.044-44.71-0.042v-44.028h112.614v44.036l-44.982 44.102zM876.79 757.776l-68.406-740.972-296.386-79.8-296.392 79.8-68.396 740.972h729.58zM738.954 607.112h-458.464l11.058-89.478h232.55l-224.502-93.502 7.036-87.46 315.024-1.016-7.042-116.622-103.728-29.108-99.368 25.084-6.030 72.39h-92.822l12.064-139.752 187.336-55.298 186 54.292 24.134 277.488h-210.99l0.52 0.224 218.172 93.278 9.052 89.48z" /> -<glyph unicode="" glyph-name="html5-01" data-tags="html5-01" d="M217.338 958.998h46.064v-45.512h42.138v45.512h46.068v-137.818h-46.064v46.152h-42.138v-46.152h-46.064v137.818h-0.004zM412.182 913.294h-40.55v45.704h127.188v-45.704h-40.57v-92.114h-46.064v92.114h-0.004zM519.004 958.998h48.040l29.542-48.426 29.518 48.426h48.046v-137.818h-45.876v68.308l-31.69-49h-0.79l-31.712 49v-68.308h-45.078v137.818zM697.080 958.998h46.076v-92.266h64.782v-45.552h-110.858v137.818zM149.974 758.148l65.892-739.066 295.688-82.080 296.508 82.198 65.962 738.95h-724.050zM736.578 582.76l-4.126-45.954-1.812-20.376h-346.868l8.284-92.814h330.332l-2.212-24.344-22.664-253.944-185.928-51.552-185.678 51.548-12.702 142.322h90.994l6.454-72.292 101.032-27.23 101.102 27.28 10.514 117.562h-314.144l-24.448 274.108h454.040l-2.17-24.314z" /> -<glyph unicode="" glyph-name="prog-golang01" data-tags="prog-golang01" d="M544.76 477.546c-177.17-16.418-359.712-54.262-543.76-66.198 27.962 28.628 85.342 24.944 137.124 33.094 90.956 14.322 205.29 24.004 307.338 37.836 32.928 4.458 75.876 22.258 99.298-4.732zM369.81 411.35c-59.318-6.736-109.502-10.096-160.76-14.188-34.782-2.78-72.624 4.324-94.574-18.914 72.566-19.752 160.884 12.492 236.42 9.458 10.372 8.584 125.712-10.13 174.948 33.094-40.36 25.598-98.312-2.896-156.034-9.45zM899.38 345.146c-46.426-40.928-69.664-71.76-137.124-56.738-21.674 21.276-19.078 58.020-18.912 61.47 1.064 21.858 15.344 49.18 14.18 70.92-10.43-36.886-71.178-48.54-70.92-80.376-47.962-32.42-87.694-73.074-174.948-66.196-46.15 57.212 23.562 152.418 61.472 198.586 16.842 20.526 33.742 42.176 52.006 61.47 40.014 42.268 45.91 56.58 99.296 80.384 80.484 35.862 112.838-59.668 61.462-108.754-19.71-5.034-20.85-1.23-42.548 0 19.436 19.196 15.070 56.804 23.636 75.65-0.524 8.934-15.628 3.278-14.182 14.19-76.858-31.264-126.444-88.144-170.214-156.044-18.44-28.594-38.684-56.996-42.558-104.012 0.524-8.934 15.626-3.286 14.188-14.19 5.232-0.15 10.198-0.034 14.97 0.284v0.108h1.722c76.618 5.948 95.712 69.422 139.336 108.364-29.768 13.382-60.564-28.196-89.834-4.732 24.704 46.816 94.49 31.148 156.030 47.284 4.888-15.438 11.984-10.024 0-23.636 64.232 46.508 100.486 185.8 236.42 160.76 40.496-106.4-49.086-208.010-113.478-264.792zM979.756 572.112c-91.486-19.196-175.772-117.978-203.316-231.688 61.17-19.312 100.444 50.026 146.578 75.65 26.954 40.638 77.358 98.176 56.738 156.038z" /> -<glyph unicode="" glyph-name="prog-bash02" data-tags="prog-bash02" d="M155.108 367.89l202.378 79.726v1.222l-202.378 80.336v88.928l309.078-136.758v-65.614l-309.078-136.758v88.918zM868.892 272.226v-79.726h-365.492v79.726h365.492zM937.834 959h-851.668c-46.842 0-85.166-38.326-85.166-85.166v-851.666c0-46.842 38.324-85.166 85.166-85.166h851.668c46.842 0 85.166 38.324 85.166 85.166v851.666c0 46.84-38.324 85.166-85.166 85.166zM937.834 22.166h-851.668v723.918h851.668v-723.918z" /> -<glyph unicode="" glyph-name="prog-perl" data-tags="prog-perl" d="M905.27-17.432c-0.284 3.396-0.474 6.792-0.284 10.176 1.598 2.586-2.19 21.054-8.546 40.688-10.114 31.214-10.878 36.204-5.692 57.366 0.902 3.674 2.302 15.882 2.846 27.254 1.042 21.818 2.036 27.312 7.734 41.498 5.112 12.714 6.612 18.33 7.322 31.33 0.81 15.102-0.97 23.976-6.51 37.022-5.494 12.892-6.206 18.792-3.666 32.546 2.746 14.904 2.746 49.87 0 61.024-2.714 11.11-4.116 51.346-3.656 102.936l5.692 63.066c8.776 34.124 14.116 46.38 21.154 46.38 6.452 0 12.518-10.536 16.688-29.7 2.554-17.774 1.27-36.006 4.474-53.702 4.154-24.438-2.494-48.888-15.056-69.974-7.452-13.076-10.014-22.47-8.132-29.302 1.5-5.432 7.054-11.516 11.384-12.61 1.882-0.474 4.254 0.276 6.916 1.624 3.32 1.668 6.696 5.83 18.308 23.198 7.888 11.768 15.386 24.208 16.688 27.666 10.834 47.496 11.278 82.568 5.288 129.376 0 30.406-4.208 41.774-25.226 64.688-39.324 48.974-62.046 91.972-84.626 149.72-7.782 12.946-19.134 28.646-27.666 38.248-13.282 14.95-21.214 29.762-28.476 52.080-10.474 26.564-19.442 57.962-34.988 80.962-14.65 16.404-28.306 34.414-49.638 42.722-27.030 12.654-48.514 10.542-78.926 8.944-22.532-4.706-43.494-15.172-65.102-22.776-33.41-13.114-65.552-35.532-79.332-69.578-3.458-7.552-18.6-32.026-26.45-43.12-14.698-17.146-33.334-31.216-52.072-43.534-23.266-13.834-42.248-32.12-65.092-62.662-23.090-31.736-25.102-59.326-36.618-95.2-17.75-18.784-31.79 7.122-27.26 25.224 10.856 43.792 30.382 83.302 27.666 129.782-6.726 61.208-31.942 142.912-104.564 147.684-16.22-0.046-20.834-2.616-39.058-19.12-12.204-11.056-20.314-14.812-40.274-19.93-23.826-5.852-49.256-1.806-71.604-12.21-10.696-6.266-23.602-25.362-26.45-39.058-2.364-11.43 3.32-22.746 14.652-28.882 22.83-10.734 61.79-2.74 66.724-34.582-7.774-33.748-28.89-57.052-27.666-90.732-1.5-36.846 3.176-67.282 5.692-103.34 3.306-44.192 35.232-67.626 57.366-104.558 33.312-42.522 92.454-86.944 149.314-69.578 19.732 6.38 27.642 5.256 34.988-5.288 5.012-7.2 5.722-13.816 2.846-29.692-3.498-19.388-3.458-56.204 0-76.9 2.57-15.34 4.476-38.652 4.476-51.666 0-10.658 2.112-23.976 4.88-34.994 1.806-7.178 2.126-14.698 2.854-39.058 0.482-16.45 1.346-32.524 2.036-35.798 2.294-11.154 1.79-20.228-3.26-54.932-2.134-14.676-9.556-41.514-14.644-52.882-2.748-6.144-9.816-20.49-15.868-32.142-0.688-1.308-0.994-2.042-1.63-3.252-7.054-0.734-10.612-1.56-11.162-2.448h-272.136v-45.572h940.14v45.568h-76.798zM558.348 227.496c4.53 4.368 14.33 14.084 21.568 21.558 14.972 15.478 15.372 16.252 19.12 38.248 3.412 19.938 3.488 20.26 17.498 40.688 5.018 7.306 7.398 13.956 13.428 36.618 5.56 20.948 8.070 26.134 12.608 28.476 2.174 1.118 3.688 1.728 5.288 1.622 1.608-0.1 3.114-1.042 4.888-2.434 4.996-3.932 6.174-8.354 8.944-38.246 1.456-15.6 3.306-35.17 4.476-43.534 5.14-36.946 5.954-48.514 4.476-61.032-0.758-6.426-1.54-19.716-2.036-29.288-1.392-26.968-5.226-38.92-19.932-64.284-4.49-7.742-9.992-17.726-12.21-22.378-4.398-9.242-9.112-15.46-13.832-17.902-4.622-2.394-10.682-1.952-16.68 1.216-8.262 4.376-23.29 16.020-30.512 23.602-7.726 8.112-11.026 12.486-19.938 28.484-10.13 18.18-11.392 21.99-11.392 30.1 0 10.606 3.862 18.47 14.238 28.486zM569.74 33.018c-5.54-5.492-9.358-8.064-20.336-13.42-15.12-7.376-20.826-12.18-21.972-18.316-0.458-2.494 0.304-4.444 1.222-6.502-51.46 0.466-102.958-1.324-154.61-5.294 2.968 14.598 5.9 30.198 6.51 41.094 0.59 10.244 1.982 21.996 3.666 30.106 1.522 7.338 3.038 19.594 3.658 27.26 1.454 18.002 2.862 23.244 11.392 41.498 3.878 8.3 8.278 19.274 9.77 24.414 2.602 8.982 2.67 10.726 2.44 37.024-0.222 23.9 0.33 28.804 2.442 41.498 4.192 25.186 6.128 32.692 14.238 49.232 11.032 22.478 11.966 25.906 13.022 46.38 1.232 23.856 5.134 36.234 13.42 44.75 4.66 4.804 8.698 7.32 16.272 8.132 2.534 0.284 5.546 0 8.952 0 14.368 0.044 20.788-1.906 25.224-7.728 4.17-5.456 4.628-12.18 1.224-26.854-1.53-6.58-3.436-18.5-4.070-26.442-1.4-17.414-4.438-27.314-12.204-41.094-9.892-17.574-10.162-19.104-10.176-48.414-0.008-23.536 0.192-25.938 2.44-32.954 1.354-4.184 4.024-9.808 6.106-12.608 4.614-6.236 18.37-18.034 32.954-28.484 14.13-10.124 30.182-25.7 39.876-38.652 10.284-13.626 25.004-27.108 26.848-44.75 0.032-12.9-7.474-29.166-18.308-39.876zM602.7-7.67c5.976 3.742 10.298 8.478 13.834 15.87 4.116 8.644 7.298 12.974 11.392 12.616 4.092-0.36 8.768-5.532 15.048-15.048 5.47-8.292 10.704-13.71 15.868-17.092-18.828 1.534-37.352 2.72-56.142 3.654zM871.628 94.86c-0.666-12.508-0.92-14.13-7.736-34.176-9.992-29.394-12.294-37.978-14.238-52.882-1.522-11.706-2.694-16.266-6.632-25.232h-122.054c-14.092 1.668-28.154 3.182-42.188 4.482 6.978 3.886 11.668 12.862 13.834 27.666 1.054 7.208 1.018 10.466-0.406 18.714-3.26 18.888-7.758 26.242-21.162 37.428-4.522 3.78-9.458 8.692-10.978 10.986-4.046 6.098-5.302 14.154-3.664 21.966 1.996 9.51 11.292 26.372 21.972 40.68 9.554 12.838 14.59 20.856 22.372 35.804 2.93 5.61 7.252 11.11 13.832 17.904 5.28 5.448 11.064 13.066 13.022 16.678l3.252 6.512v37.022c-0.122 26.396 1.4 51.98 4.888 78.116 2.892 31.338 14.010 56.066 29.29 82.998 8.752 18.054 12.846 23.198 20.344 23.198 10.044 0 16.158-11.14 19.12-34.582 3.38-23.030 14.582-42.722 21.566-64.696 4.246-15.638 7.3-22.678 17.086-42.31 9.294-18.622 17.128-39.386 19.532-52.080 1.272-6.708 1.624-16.012 1.624-35.4 0-28.552 0.956-39.914 4.474-54.512 2.668-11.088 3.974-42.9 2.85-64.284z" /> -<glyph unicode="" glyph-name="prog-rails" data-tags="prog-rails" d="M1023 756.476l-22.506-33.758c0 0-56.266 63.758-159.388 52.514-103.148-11.252-285.034-116.272-313.17-346.922-28.128-230.648 82.514-481.93 82.514-481.93h-498.808c0 0-13.124 82.512 18.754 240.028 31.872 157.52 78.754 262.53 159.388 412.552 80.634 150.014 210.022 273.78 397.546 290.648 187.528 16.882 335.67-133.132 335.67-133.132zM12.252 197.66l-11.252-93.766 91.886-11.246 16.884 97.512-97.518 7.5zM192.276 477.064l-86.256 33.76-28.128-78.752 88.136-28.128 26.248 73.12zM338.548 715.214l-65.638 43.132-52.504-58.12 67.508-45.012 50.634 60zM527.936 868.98l-45.004 50.634-61.878-31.878 45.004-54.376 61.878 35.62zM728.594 897.108l-7.512 48.754-80.626 3.758 11.244-54.394 76.894 1.882zM962.992 846.482l-61.878 45.004-1.878-33.75 52.506-28.128 11.25 16.874zM889.852 718.974l50.634-5.622v22.498l-50.634 11.252v-28.128zM728.594 722.716l24.368-44.996 35.63 28.128-7.502 30-52.496-13.132zM689.21 608.324l-37.51 56.256-39.374-35.63 54.376-60 22.508 39.374zM552.32 460.198l63.752-54.392 15.004 61.886-54.376 41.252-24.38-48.746zM546.692 272.664l78.762-33.75-3.742 61.878-71.27 37.508-3.75-65.636zM691.074 32.632l-35.622 73.14h-82.506l18.756-67.516 99.372-5.624z" /> -<glyph unicode="" glyph-name="anchor" data-tags="anchor" d="M923.865 612.617l51.982 3.931-176.546 190.486 40.845-200.747 42.575 3.219c22.53-143.738-4.275-281.603-85.127-385.149l-486.754 486.756c24.312 52.864 14.704 117.496-28.849 161.049-55.902 55.902-146.532 55.904-202.431 0.005-55.901-55.901-55.897-146.537 0.002-202.435 43.482-43.481 107.976-53.121 160.795-28.956l107.231-107.231c-42.774-39.326-87.86-76.341-134.662-111.641l60.142-60.142c37.404 45.011 75.791 88.757 115.503 130.798l338.597-338.597c-103.519-80.747-241.302-107.52-384.952-85.014l3.224 42.63-200.747 40.845 190.486-176.546 3.926 51.915c172.911-73.835 354.643-69.117 481.926 23.442l125.955-42.547-42.918 127.050c89.048 127.021 92.675 306.246 19.798 476.88zM117.713 707.857c-34.834 34.834-34.838 91.32 0 126.156 34.836 34.836 91.315 34.834 126.154-0.003 34.834-34.838 34.833-91.316-0.002-126.151s-91.318-34.838-126.152-0.002zM589.916 678.609l-60.142 60.142c-33.969-48.222-71.257-93.126-111.215-135.358l40.004-40.004c42.074 40.604 85.73 79.177 131.353 115.221z" /> -<glyph unicode="" glyph-name="prog-drupal" data-tags="prog-drupal" d="M734.542 768.936c-52.208 32.522-101.45 45.312-150.692 77.79-30.468 20.69-72.81 69.932-108.256 112.274-6.898-67.968-27.59-95.512-51.25-115.2-50.2-39.418-81.716-51.204-125.022-74.864-36.406-18.684-234.328-136.852-234.328-390.868s213.636-441.068 450.936-441.068c237.294 0 443.076 172.296 443.076 433.21s-192.948 379.038-224.464 398.726zM135.626 575.118c-7.858 13.75 2.968 44.308 39.462 84.642 3.316 3.754 7.42 7.64 11.96 11.612 50.026 55.832 119.084 93.81 140.648 104.592 9.778 4.932 53.17 25.58 97.434 59.062 26.542 20.692 46.272 40.378 55.176 105.378 0.7-2.576 1.398-5.064 2.096-7.508 11.438-36.1 9.692-55.046 9.692-63.384 0-8.862-4.976-32.522-20.692-44.352-6.896-4.888-8.904-8.818-8.904-9.822 0-3.928 8.904-6.898 8.904-15.758 0-10.826-4.888-32.478-57.098-84.686-52.208-52.166-127.030-98.438-185.088-126.986-58.146-28.55-85.646-26.584-93.59-12.79zM740.216 29.63c-4.976-4.932-50.202-36.406-103.37-41.338-53.17-4.934-125.11-7.902-168.414 31.472-6.896 6.896-4.888 16.764 0 20.692 4.976 3.93 8.906 6.896 14.756 6.896 5.936 0 4.976 0 7.944-1.962 19.644-15.76 49.242-28.548 112.19-28.548 63.034 0 107.298 17.722 127.030 32.476 8.904 6.898 12.834 1.004 13.794-2.924 0.96-3.972 2.968-9.864-3.93-16.764zM567.876 119.25c10.826 9.822 28.548 25.582 45.312 32.478 16.762 6.896 25.58 5.892 41.382 5.892 15.714 0 32.476-0.96 44.264-8.818 11.788-7.9 18.772-25.624 22.7-35.488 3.93-9.822 0-15.76-7.946-19.688-6.896-3.93-7.858-1.964-14.754 10.826-6.896 12.834-12.746 25.624-47.232 25.624s-45.31-11.83-62.074-25.624c-16.676-13.794-22.612-18.684-28.548-10.826-5.852 7.902-3.932 15.758 6.896 25.624zM828.832 111.35c-35.446 2.968-106.338 113.234-151.65 115.2-57.098 1.964-181.158-119.128-278.592-119.128-59.106 0-76.83 8.862-96.56 21.652-29.51 20.692-44.264 52.208-43.302 95.512 0.958 76.788 72.9 148.682 163.436 149.642 115.244 1.004 194.954-114.196 253.012-113.192 49.24 0.96 143.792 97.476 190.064 97.476 49.24 0 63.036-51.206 63.036-81.718 0-30.556-9.866-85.69-33.438-120.132-23.662-34.486-38.418-47.278-66.006-45.312z" /> -<glyph unicode="" glyph-name="prog-php01" data-tags="prog-php01" d="M802.108 512c7.428-8.23 9.19-22.362 5.306-42.38-4.058-20.85-11.87-35.724-23.446-44.64-11.586-8.916-29.204-13.374-52.864-13.374h-35.698l21.914 112.74h40.206c22.3 0 37.154-4.118 44.582-12.346zM299.508 524.346h-40.206l-21.916-112.74h35.696c23.654 0 41.278 4.458 52.864 13.374 11.578 8.916 19.388 23.792 23.446 44.64 3.884 20.020 2.12 34.15-5.306 42.38-7.426 8.228-22.28 12.346-44.578 12.346zM1023 448c0-148.458-228.786-268.806-511-268.806s-511 120.348-511 268.806c0 148.456 228.786 268.806 511 268.806s511-120.35 511-268.806zM397.084 429.428c6.080 10.896 10.406 22.922 12.966 36.074 6.204 31.934 1.522 56.806-14.048 74.626-15.562 17.82-40.33 26.726-74.272 26.726h-112.846l-52.354-269.376h58.684l13.916 71.61h50.268c22.174 0 40.42 2.328 54.744 6.994 14.322 4.658 27.338 12.466 39.056 23.438 9.83 9.040 17.788 19.004 23.886 29.908zM603.628 369.088l24.362 125.364c4.958 25.494 1.238 43.942-11.144 55.328-12.392 11.376-34.898 17.074-67.536 17.074h-51.866l13.922 71.62h-58.22l-52.364-269.384h58.22l29.992 154.33h46.534c14.896 0 24.634-2.464 29.208-7.396 4.574-4.934 5.546-14.182 2.91-27.738l-23.162-119.196h59.144zM854.022 540.126c-15.56 17.82-40.328 26.726-74.27 26.726h-112.848l-52.356-269.376h58.686l13.914 71.61h50.27c22.172 0 40.42 2.328 54.742 6.994 14.322 4.658 27.338 12.466 39.056 23.438 9.84 9.042 17.792 19.004 23.886 29.908 6.088 10.896 10.404 22.922 12.966 36.074 6.206 31.936 1.524 56.808-14.046 74.626z" /> -<glyph unicode="" glyph-name="prog-nodejs01" data-tags="prog-nodejs01" d="M231.778 656.23l-48.106 27.546c-3.024 1.782-4.902 4.998-4.902 8.488v58.612c0 3.49-1.856 6.728-4.886 8.464l-20.478 11.798c-1.484 0.888-3.202 1.324-4.864 1.324-1.708 0-3.378-0.436-4.902-1.324l-20.492-11.798c-3.032-1.738-4.88-4.976-4.88-8.464v-58.612c0-3.49-1.856-6.684-4.892-8.488l-48.122-27.546c-1.494-0.916-3.35-0.916-4.858 0-1.532 0.842-2.44 2.468-2.44 4.214l-0.178 125.466c0 3.518 1.876 6.75 4.894 8.494l80.966 46.596c1.39 0.806 2.92 1.22 4.464 1.286 0.12 0 0.704 0 0.844 0 1.552-0.066 3.082-0.48 4.458-1.286l80.96-46.598c3.040-1.746 4.886-4.976 4.886-8.494l-0.156-125.466c0-1.746-0.938-3.372-2.432-4.214-1.49-0.916-3.376-0.916-4.884 0.002zM543.234 689.86v93.506c0 3.496 1.864 6.72 4.886 8.464l81.006 46.746c3.016 1.746 6.742 1.752 9.774 0.008l20.272-11.688c1.064-0.614 2.374-0.614 3.43 0 1.050 0.614 1.708 1.744 1.708 2.964v124.254c0 1.738 0.918 3.334 2.41 4.22 1.502 0.874 3.35 0.888 4.866 0.044l48.196-26.896c3.104-1.722 5.020-4.998 5.020-8.54v-233.082c0-3.498-1.864-6.72-4.894-8.472l-81.004-46.776c-3.024-1.76-6.758-1.76-9.79 0l-80.99 46.776c-3.026 1.752-4.89 4.976-4.89 8.472zM603.562 720.578c0-0.872 0.464-1.678 1.218-2.114l27.812-16.028c0.754-0.428 1.686-0.428 2.44 0l27.812 16.028c0.754 0.436 1.218 1.242 1.218 2.114v32.116c0 0.872-0.464 1.686-1.218 2.114l-27.804 16.066c-0.762 0.436-1.694 0.436-2.456 0l-27.812-16.066c-0.746-0.428-1.21-1.242-1.21-2.114v-32.116zM961.35 793.102l-80.47 46.73c-3.026 1.76-6.766 1.766-9.796 0.008l-80.974-46.738c-3.024-1.746-4.886-4.976-4.886-8.472v-93.476c0-3.518 1.892-6.756 4.94-8.502l80.464-45.842c2.962-1.702 6.608-1.708 9.588-0.060l48.664 27.050c1.544 0.866 2.506 2.484 2.514 4.244 0.014 1.76-0.924 3.394-2.456 4.274l-81.476 46.768c-1.516 0.872-2.456 2.492-2.456 4.244v29.29c0 1.746 0.932 3.364 2.448 4.244l25.358 14.624c1.508 0.866 3.372 0.866 4.878 0l25.374-14.624c1.516-0.88 2.448-2.5 2.448-4.244v-23.050c0-1.746 0.938-3.364 2.454-4.236 1.516-0.866 3.378-0.866 4.894 0.008l48.49 28.19c3.024 1.752 4.874 4.974 4.874 8.464v22.648c-0.002 3.49-1.85 6.714-4.874 8.458zM305.566 683.118l80.96-46.774c3.032-1.746 6.756-1.746 9.788 0l80.99 46.774c3.024 1.752 4.886 4.976 4.886 8.472v93.542c0 3.49-1.864 6.728-4.894 8.472l-80.982 46.73c-3.032 1.752-6.756 1.752-9.782 0l-80.966-46.73c-3.032-1.746-4.894-4.984-4.894-8.472v-93.542c0-3.498 1.864-6.72 4.894-8.472zM787.89 467.354l-249.668 144.28c-15.666 8.93-36.676 8.93-52.474 0l-249.676-144.28c-16.176-9.316-26.186-26.792-26.186-45.51v-288.146c0-18.706 10.010-36.204 26.186-45.534l65.464-37.712c31.722-15.614 43.094-15.614 57.518-15.614 46.954 0 73.936 28.404 73.936 77.938v284.478c0 4.024-3.282 7.194-7.236 7.194h-31.664c-4.022 0-7.252-3.17-7.252-7.194v-284.478c0-21.958-22.726-43.81-59.832-25.278l-68.398 39.538c-2.41 1.308-3.942 3.896-3.942 6.662v288.146c0 2.734 1.532 5.456 3.956 6.846l249.528 144.030c2.312 1.346 5.388 1.346 7.688 0l249.58-143.992c2.386-1.428 3.874-4.058 3.874-6.882v-288.146c0-2.766-1.486-5.412-3.814-6.742l-249.682-144.12c-2.136-1.3-5.412-1.3-7.734 0l-64.044 38.030c-1.906 1.094-4.346 1.508-6.196 0.458-17.728-10.062-21.084-11.384-37.69-17.152-4.11-1.434-10.18-3.896 2.256-10.838l83.364-49.326c7.984-4.626 17.070-7.008 26.186-7.008 9.248 0 18.304 2.38 26.29 7.008l249.668 144.156c16.168 9.41 26.228 26.828 26.228 45.534v288.144c-0.004 18.718-10.066 36.158-26.234 45.51zM598.896 161.184c-74.506 0-90.896 18.718-96.388 55.772-0.636 3.956-4.024 6.906-8.088 6.906h-36.404c-4.51 0-8.13-3.608-8.13-8.14 0-47.41 25.808-103.966 149.012-103.966 89.21 0 140.364 35.118 140.364 96.462 0 60.83-41.106 77.006-127.618 88.464-87.438 11.57-96.322 17.536-96.322 38.014 0 16.872 7.526 39.434 72.288 39.434 57.836 0 79.156-12.462 87.924-51.432 0.77-3.674 4.112-6.352 7.896-6.352h36.542c2.27 0 4.422 0.976 5.958 2.588 1.544 1.708 2.366 3.934 2.15 6.27-5.654 67.158-50.286 98.452-140.472 98.452-80.28 0-128.156-33.88-128.156-90.666 0-61.626 47.638-78.668 124.666-86.268 92.184-9.050 99.34-22.512 99.34-40.654 0-31.474-25.248-44.884-84.562-44.884zM876.656 757.912c-0.576 0.34-1.292 0.34-1.87 0l-15.534-8.968c-0.584-0.334-0.94-0.954-0.94-1.62v-17.958c0-0.666 0.356-1.288 0.94-1.62l15.534-8.968c0.576-0.334 1.292-0.334 1.87 0l15.546 8.968c0.586 0.332 0.94 0.954 0.94 1.62v17.958c0 0.666-0.354 1.286-0.94 1.62l-15.546 8.968z" /> -<glyph unicode="" glyph-name="prog-nodejs02" data-tags="prog-nodejs02" d="M965.17 664.262v-432.226c0-28.050-15.092-54.168-39.344-68.286l-374.496-216.232c-11.978-6.948-25.564-10.518-39.438-10.518-13.676 0-27.298 3.57-39.278 10.518l-125.042 73.98c-18.652 10.414-9.55 14.118-3.384 16.256 24.908 8.644 29.946 10.636 56.536 25.726 2.774 1.586 6.432 0.966 9.294-0.686l96.062-57.038c3.482-1.962 8.4-1.962 11.602 0l374.526 216.172c3.488 1.992 5.724 5.966 5.724 10.106v432.228c0 4.234-2.236 8.188-5.812 10.326l-374.372 215.98c-3.452 2.020-8.060 2.020-11.536 0l-374.288-216.040c-3.636-2.080-5.93-6.158-5.93-10.266v-432.226c0-4.138 2.292-8.018 5.908-9.98l102.598-59.308c55.658-27.806 89.75 4.97 89.75 37.912v426.722c0 6.034 4.846 10.792 10.878 10.792h47.494c5.938 0 10.858-4.756 10.858-10.792v-426.724c0-74.292-40.472-116.908-110.904-116.908-21.632 0-38.694 0-86.276 23.426l-98.196 56.574c-24.266 13.99-39.276 40.234-39.276 68.286v432.226c0 28.086 15.010 54.3 39.276 68.27l374.512 216.416c23.7 13.402 55.216 13.402 78.714 0l374.496-216.416c24.252-14.028 39.344-40.184 39.344-68.27zM642.342 273.266c-111.76 0-136.35 28.096-144.588 83.672-0.954 5.932-6.036 10.35-12.126 10.35h-54.612c-6.764 0-12.192-5.406-12.192-12.208 0-71.12 38.708-155.942 223.518-155.942 133.812 0 210.538 52.678 210.538 144.686 0 91.246-61.654 115.52-191.418 132.7-131.158 17.356-144.486 26.294-144.486 57.016 0 25.322 11.286 59.162 108.432 59.162 86.748 0 118.73-18.698 131.88-77.152 1.158-5.51 6.166-9.53 11.846-9.53h54.818c3.4 0 6.63 1.46 8.94 3.886 2.316 2.56 3.546 5.894 3.222 9.39-8.482 100.754-75.426 147.688-210.708 147.688-120.418 0-192.236-50.828-192.236-136.004 0-92.434 71.458-118 187-129.404 138.276-13.564 149.008-33.766 149.008-60.976 0-47.198-37.868-67.334-126.836-67.334z" /> -<glyph unicode="" glyph-name="prog-jquery" data-tags="prog-jquery" d="M998.322 230.74c0 0-127.108-342.772-564.708-262.976-6.886 1.282-13.49 3.676-20.178 5.698-1.564 0.458-3.144 0.958-4.708 1.406-6.57 2.044-13.074 4.14-19.538 6.394-0.74 0.258-1.446 0.5-2.196 0.766-5.888 2.070-11.744 4.268-17.524 6.488-1.514 0.59-3.020 1.164-4.526 1.78-6.228 2.46-12.424 5.032-18.554 7.718-1.13 0.498-2.22 0.998-3.368 1.504-5.366 2.386-10.664 4.858-15.918 7.37-1.364 0.692-2.736 1.332-4.11 1.98-0.748 0.374-1.554 0.748-2.32 1.13-3.392 1.696-6.704 3.458-10.046 5.208-2.578 1.33-5.198 2.626-7.76 4-4.732 2.578-9.398 5.198-14.040 7.876-1.722 0.982-3.46 1.93-5.166 2.92-6.304 3.708-12.542 7.56-18.688 11.454-1.738 1.114-3.458 2.294-5.172 3.444-4.008 2.594-8.018 5.19-11.944 7.9-0.416 0.284-0.814 0.582-1.222 0.874-1.522 1.032-2.968 2.088-4.482 3.186-4.142 2.878-8.242 5.822-12.3 8.816-1.962 1.48-3.918 2.968-5.864 4.458-3.676 2.804-7.334 5.674-10.962 8.568-1.804 1.446-3.634 2.876-5.438 4.34-4.424 3.644-8.834 7.354-13.15 11.096-0.816 0.714-1.68 1.414-2.512 2.162-0.084 0.034-0.142 0.1-0.234 0.176-4.898 4.292-9.706 8.692-14.472 13.182-1.438 1.314-2.87 2.72-4.316 4.1-3.56 3.42-7.086 6.864-10.554 10.356-1.44 1.414-2.862 2.844-4.242 4.276-4.482 4.608-8.908 9.222-13.232 13.94-0.158 0.214-0.316 0.34-0.506 0.548-0.076 0.082-0.184 0.192-0.258 0.284-4.424 4.874-8.766 9.856-13.016 14.854-1.19 1.406-2.386 2.844-3.56 4.266-3.168 3.818-6.288 7.626-9.348 11.486-1.272 1.606-2.544 3.226-3.8 4.84-3.434 4.434-6.828 8.9-10.114 13.442-0.616 0.848-1.272 1.68-1.864 2.512-0.126 0.14-0.232 0.292-0.316 0.432-3.808 5.266-7.484 10.63-11.094 16.002-1.122 1.648-2.178 3.344-3.26 5.042-2.612 3.974-5.174 7.952-7.652 11.976-1.296 2.062-2.528 4.132-3.776 6.206-2.254 3.758-4.458 7.518-6.596 11.31-1.222 2.146-2.428 4.242-3.61 6.446-0.658 1.164-1.372 2.364-2.012 3.584-1.124 2.032-2.138 4.15-3.236 6.222-1.696 3.252-3.418 6.52-5.056 9.83-69.114 138.188-80.392 307.388 10.096 437.446l70.628 89.578c-79.686-154.014-43.872-341.556 55.816-477.52 3.6-4.95 7.286-9.832 11.052-14.712 1.166-1.472 2.336-2.954 3.502-4.368 3.134-3.992 6.336-7.934 9.572-11.836 1.166-1.372 2.304-2.718 3.494-4.132 4.326-5.108 8.75-10.18 13.292-15.128 0.216-0.24 0.424-0.458 0.632-0.69 4.292-4.684 8.666-9.306 13.116-13.866 1.38-1.396 2.786-2.778 4.192-4.176 3.494-3.566 7.062-7.028 10.688-10.47 1.372-1.364 2.752-2.678 4.176-4.034 4.898-4.558 9.838-9.090 14.87-13.516 0.524-0.458 1.064-0.88 1.546-1.304 4.658-4.050 9.374-7.994 14.148-11.92 1.664-1.356 3.36-2.71 5.056-4.058 3.75-3.018 7.544-5.956 11.362-8.874 1.822-1.398 3.692-2.82 5.582-4.216 4.15-3.078 8.342-6.106 12.576-9.1 1.438-0.972 2.836-2.030 4.292-3.010 4.376-3.028 8.834-5.972 13.308-8.85 1.68-1.116 3.344-2.28 5.040-3.362 6.172-3.908 12.41-7.75 18.714-11.46 1.622-0.932 3.244-1.804 4.84-2.704 4.758-2.752 9.524-5.462 14.38-8.058 2.628-1.462 5.332-2.786 7.992-4.192 3.976-2.046 7.952-4.126 11.976-6.088 1.522-0.748 3.002-1.448 4.492-2.154 5.132-2.47 10.28-4.85 15.486-7.21 1.232-0.534 2.428-1.090 3.668-1.622 6.064-2.654 12.192-5.2 18.372-7.634 1.588-0.632 3.178-1.24 4.774-1.874 5.622-2.178 11.286-4.292 17.016-6.312 0.89-0.316 1.78-0.64 2.644-0.956 6.388-2.198 12.816-4.292 19.296-6.272 1.654-0.516 3.31-1.016 5.006-1.514 6.636-1.962 13.232-4.084 20.036-5.624 179.546-40.862 369.034-4.166 475.79 134.92zM364.88 450.484c9.814-14.048 20.676-30.772 33.692-42.062 4.708-5.196 9.648-10.26 14.68-15.242 1.264-1.296 2.57-2.544 3.876-3.816 4.874-4.742 9.864-9.408 14.988-13.94 0.216-0.158 0.408-0.376 0.616-0.526 0.058-0.066 0.108-0.082 0.15-0.148 5.69-4.974 11.562-9.774 17.516-14.488 1.324-1.016 2.636-2.072 3.976-3.104 5.98-4.582 12.078-9.090 18.332-13.38 0.192-0.132 0.34-0.268 0.532-0.4 2.752-1.912 5.564-3.692 8.35-5.522 1.348-0.866 2.62-1.796 3.966-2.612 4.474-2.87 8.992-5.656 13.59-8.334 0.65-0.4 1.282-0.732 1.922-1.106 3.95-2.28 7.984-4.534 12.010-6.712 1.396-0.782 2.828-1.48 4.258-2.228 2.778-1.448 5.572-2.936 8.4-4.342 0.424-0.2 0.866-0.398 1.274-0.574 5.764-2.836 11.576-5.58 17.524-8.158 1.264-0.566 2.578-1.064 3.868-1.598 4.75-2.012 9.54-3.984 14.356-5.83 2.044-0.774 4.118-1.514 6.146-2.254 4.382-1.63 8.766-3.112 13.19-4.592 2.006-0.638 3.968-1.296 5.972-1.912 6.288-1.946 12.508-4.424 19.070-5.506 337.868-55.982 415.866 204.156 415.866 204.156-70.32-101.266-206.486-149.582-351.794-111.872-6.446 1.698-12.806 3.552-19.12 5.54-1.948 0.584-3.844 1.214-5.766 1.856-4.49 1.456-8.958 3.002-13.388 4.616-2.022 0.74-4.050 1.48-6.040 2.246-4.85 1.864-9.648 3.792-14.396 5.804-1.306 0.566-2.612 1.066-3.884 1.648-5.962 2.598-11.834 5.326-17.624 8.188-2.986 1.458-5.906 2.998-8.85 4.508-1.698 0.874-3.402 1.75-5.098 2.624-3.76 2.042-7.502 4.16-11.188 6.308-0.874 0.504-1.788 0.982-2.678 1.51-4.566 2.678-9.074 5.436-13.54 8.268-1.374 0.876-2.704 1.83-4.076 2.732-2.954 1.908-5.888 3.842-8.784 5.804-6.22 4.292-12.276 8.798-18.256 13.356-1.38 1.086-2.752 2.146-4.118 3.232-63.592 50.222-114 118.846-137.988 196.66-25.11 80.704-19.694 171.294 23.828 244.812l-53.47-75.476c-65.43-94.17-61.878-220.226-10.838-319.82 8.572-16.698 18.194-32.89 28.948-48.314zM721 566.988c2.786-1.040 5.564-1.962 8.382-2.916 1.232-0.378 2.462-0.802 3.702-1.168 3.976-1.252 7.926-2.704 12.036-3.476 186.568-36.046 237.16 95.738 250.634 115.132-44.33-63.82-118.81-79.14-210.222-56.962-7.21 1.762-15.144 4.37-22.116 6.832-8.924 3.182-17.698 6.808-26.248 10.912-16.242 7.798-31.696 17.258-46.050 28.090-81.782 62.058-132.582 180.442-79.22 276.85l-28.878-39.802c-38.574-56.772-42.358-127.276-15.602-189.982 28.228-66.548 86.072-118.762 153.582-143.51z" /> -<glyph unicode="" glyph-name="prog-lua01" data-tags="prog-lua01" d="M791.446 808.090c0 62.478 50.566 113.058 112.954 113.058 62.46 0 113.030-50.58 113.030-113.058 0-62.394-50.568-112.978-113.030-112.978-62.388 0-112.954 50.584-112.954 112.978zM726.912 314.656l-31.92-4.832c-24.328-3.454-35.456-12.9-35.456-29.55 0-19.794 11.51-30.542 32.004-30.542 22.864 0 44.802 11.122 53.478 27.396 2.378 4.534 2.378 5.606 2.378 14.654v8.676l0.38 20.808v0.376c-0.38 0-1.762-1.082-2.76-1.764-2.068-2.070-8.364-3.84-18.104-5.222zM518.578 808.090c213.084 0 385.82-172.766 385.82-385.906 0-213.128-172.736-385.9-385.82-385.9-213.1 0-385.828 172.772-385.828 385.9 0 213.14 172.728 385.906 385.828 385.906zM415.822 259.48h-126.454v219.118h-34.382v-249.358h160.836v30.24zM799.196 251.794c-4.906-0.998-7.292-1.38-10.128-1.38-6.904 0-10.054 3.162-10.054 10.746v103.848c0 32.004-25.702 51.122-68.758 51.122-47.192 0-71.892-20.192-73.59-60.486h28.478c3.452 24.718 15.952 35.082 41.66 35.082 28.086 0 42.050-10.364 42.050-30.558 0-18.72-2.454-20.094-52.49-25.316-17.034-1.388-22.554-2.46-31.22-5.222-23.638-7.668-37.528-27.098-37.528-52.116 0-33.3 22.948-53.496 60.774-53.496 23.254 0 39.206 7.678 61.846 29.178 0.998-18.432 10.744-27.406 29.168-27.406 6.894 0 10.43 0.692 19.792 3.454v22.55zM565.386 582.058c0-62.398 50.642-113.054 113.030-113.054s113.030 50.656 113.030 113.054-50.642 113.052-113.030 113.052-113.030-50.652-113.030-113.052zM512.666 250.414c-24.328 0-36.446 12.808-36.446 38.908v121.578h-30.932v-135.152c0-30.54 24.708-51.732 59.784-51.732 26.698 0 44.728 10.048 57.628 31.624v-26.398h29.534v181.66h-30.914v-106.674c0-9.674-5.222-25.334-11.818-35.082-7.678-11.736-21.566-18.732-36.836-18.732zM66.688 549.904l34.45-11.21-3.842-11.74-96.296 31.314 3.684 11.208 9.664-3.148c-0.382 0.77-0.84 1.148-0.99 1.54-5.988 9.362-6.762 14.194-3.85 23.176 5.614 17.27 23.178 24.252 44.206 17.424 23.022-7.448 34.298-24.41 28.31-42.828-2.678-8.292-7.060-12.746-15.336-15.736zM71.82 568.55c3.852 11.59-4.066 21.954-21.016 27.4-17.118 5.602-27.546 1.996-31.772-10.978-3.684-11.506 4.45-21.408 22.256-27.242 15.344-4.99 26.706-0.924 30.532 10.82zM40.29 664.95c9.208 18.038 29.308 23.26 49.486 12.97 20.418-10.36 28.086-29.626 18.804-47.888-8.9-17.42-29.318-22.644-49.336-12.434-20.186 10.204-27.928 29.624-18.954 47.352zM64.766 629.108c15.344-7.826 28.768-5.448 34.608 6.142 5.748 11.358-0.158 23.562-15.196 31.16-15.354 7.826-28.394 5.448-34.224-6.064-5.83-11.436 0-23.716 14.812-31.238zM142.032 689.664l-36.446 45.516 53.944-22.49 7.676 10.206-45.042 60.868-7.518-9.98 36.678-46.356-54.168 23.334-8.292-10.978 37.052-45.898-54.010 23.566-8.134-10.75 70.596-27.168 7.664 10.13zM157.842 765.802c-16.342 17.806-16.65 38.066-0.764 52.65 14.804 13.662 33.152 10.13 51.64-10.054l-38.982-35.842c11.51-11.284 21.566-12.588 31.23-3.764 7.376 6.758 9.132 16.504 4.458 23.486l9.132 8.522c2.604-3.838 4.134-9.056 4.6-15.044 0.616-9.288-2.76-17.118-10.896-24.56-5.372-4.986-10.896-8.134-16.11-9.132-11.742-2.38-23.868 2.378-34.308 13.738zM163.066 779.846l29.534 27.172c-9.896 9.594-20.252 10.592-28.776 2.766-8.584-7.91-8.742-20.418-0.758-29.938zM250.77 798.264l-25.25 35.54c-5.98 8.368-3.592 19.648 5.374 26.020 0.542 0.382 1.772 1.302 2.994 1.992l-7.36 10.364c-1.688-0.766-2.918-1.458-3.768-2.15-5.906-4.14-8.442-12.276-7.584-22.948l-7.070 9.976-9.506-6.752 42.118-59.176 10.052 7.134zM253.532 844.086c-11.428 21.264-6.754 40.988 12.208 51.198 17.714 9.594 34.6 1.606 47.564-22.49l-46.576-25.096c8.368-13.814 17.808-17.504 29.31-11.362 8.824 4.756 12.974 13.814 10.13 21.718l10.97 5.914c1.538-4.378 1.772-9.752 0.782-15.66-1.772-9.132-6.92-15.886-16.576-21.11-6.538-3.528-12.668-5.214-17.89-4.912-12.042 0.618-22.554 8.214-29.922 21.8zM262.048 856.368l35.38 19.034c-7.292 11.744-17.116 15.276-27.246 9.826-10.28-5.53-13.508-17.654-8.134-28.86zM320.674 882.46c-7.37 20.88-0.84 38.456 16.194 44.44 8.9 3.142 16.726 1.768 24.56-4.146l0.224 0.232-12.276 34.85 11.66 4.14 33.152-94.1-11.044-3.908-3.31 9.436c-1.838-9.436-6.828-15.2-15.652-18.264-18.49-6.524-35.3 4.148-43.508 27.32zM333.026 885.918c5.988-17.042 16.352-24.714 27.788-20.648 6.364 2.226 11.196 7.752 12.426 14.356 0.766 4.832 0.308 9.132-2.070 15.964-6.754 19.106-16.12 25.938-28.928 21.488-11.662-4.146-14.888-15.046-9.216-31.16zM439.542 878.088l-10.52 99.238 12.35 1.306 3.768-36.076 1.148 1.384c5.68 8.134 10.438 11.128 19.114 12.050 17.648 1.914 31.53-11.286 33.684-32.314 2.686-25.172-7.826-42.214-27.164-44.206-9.664-1.078-14.738 1.072-21.566 8.898l0.924-8.978-11.738-1.302zM447.826 913.396c1.688-16.046 10.046-24.792 22.33-23.49 12.278 1.304 18.49 12.666 16.568 30.394-1.838 17.498-9.506 25.946-22.406 24.56l-0.534-0.080c-12.658-1.836-17.954-12.502-15.958-31.384zM528.934 875.706l-1.688-3.606c-2.688-5.524-4.452-6.75-9.442-6.522-2.76 0.154-4.14 0.46-6.976 1.688l-0.542-11.208c3.3-1.15 4.534-1.458 7.37-1.614 3.3-0.148 7.21 0.386 9.356 1.156 5.222 1.838 9.058 7.672 15.662 22.948 1.762 3.992 3.292 7.37 4.524 10.284 2.146 4.762 3.528 7.902 4.142 9.366l23.246 56.486-13.732 0.54-21.948-58.41-16.952 60.1-13.964 0.616 23.706-75.606c-1.234-3.146-1.838-4.374-2.762-6.218zM1010.858 451.622l11.552 0.674c-0.916 15.562-2.57 31.23-4.924 46.572l-11.446-1.756c2.306-14.99 3.918-30.296 4.818-45.49zM686.11 898.738c-14.638 5.126-29.334 9.46-44.938 13.24l-2.736-11.248c15.236-3.694 29.576-7.918 43.848-12.916l3.826 10.924zM770.936 859.31c-14.182 8.194-27.738 15.292-41.446 21.7l-4.914-10.482c13.406-6.272 26.68-13.22 40.578-21.242l5.782 10.024zM102.992 135.83c8.84-12.85 18.348-25.408 28.27-37.318l8.9 7.402c-9.706 11.644-18.996 23.92-27.622 36.478l-9.548-6.562zM837.33 45.798l7.468-8.85c11.87 10.032 23.412 20.752 34.316 31.864l-8.268 8.11c-10.644-10.864-21.922-21.334-33.516-31.124zM901.296 111.014l8.982-7.294c9.804 12.068 19.154 24.734 27.78 37.65l-9.624 6.438c-8.432-12.626-17.564-25.002-27.138-36.794zM977.13 633.012c-6.478 14.072-13.73 28.066-21.534 41.586l-10.022-5.79c7.626-13.21 14.706-26.888 21.034-40.636l10.522 4.84zM765.154-4.902l-2.802-1.606 5.748-10.054 2.836 1.63c12.548 7.252 24.908 15.104 36.744 23.354l-6.622 9.498c-11.568-8.068-23.644-15.736-35.904-22.822zM987.91 271.026l11.030-3.542c4.748 14.788 8.874 29.982 12.25 45.186l-11.294 2.504c-3.31-14.848-7.338-29.712-11.986-44.148zM679.082-44.224l3.776-10.93c14.672 5.056 29.308 10.896 43.506 17.324l-4.774 10.546c-13.882-6.286-28.178-11.984-42.508-16.94zM1011.432 405.858c-0.526-15.184-1.764-30.53-3.678-45.608l11.486-1.462c1.962 15.428 3.226 31.138 3.76 46.674l-11.568 0.396zM25.102 398.776l-11.568-0.426c0.574-15.626 1.946-31.338 4.050-46.674l11.46 1.57c-2.052 14.97-3.376 30.284-3.942 45.53zM952.040 186.972l10.18-5.506c7.376 13.64 14.222 27.82 20.344 42.15l-10.646 4.542c-5.98-13.998-12.668-27.862-19.878-41.186zM1008.228 544.774c-3.784 15.082-8.316 30.17-13.498 44.846l-10.912-3.852c5.048-14.334 9.49-29.076 13.182-43.806l11.228 2.812zM162.882 63.98c11.020-10.956 22.68-21.526 34.682-31.406l7.36 8.934c-11.718 9.646-23.122 19.976-33.876 30.682l-8.166-8.21zM590.272-65.866l1.68-11.46c15.396 2.27 30.866 5.282 45.968 8.964l-2.744 11.244c-14.754-3.59-29.868-6.536-44.904-8.748zM26.3 305.624c3.634-15.004 8.092-30.116 13.266-44.928l10.928 3.808c-5.048 14.462-9.398 29.208-12.942 43.848l-11.252-2.728zM30.176 490.080l-11.46 1.646c-2.254-15.624-3.826-31.29-4.698-46.554l11.552-0.652c0.854 14.932 2.394 30.262 4.606 45.56zM57.048 217.246c6.354-13.888 13.49-27.912 21.234-41.668l10.088 5.672c-7.586 13.482-14.572 27.212-20.786 40.812l-10.536-4.816zM498.992-70.648l-0.474-11.568c6.754-0.276 13.656-0.416 20.528-0.416 8.724 0 17.582 0.232 26.306 0.69l-0.6 11.57c-15.228-0.818-30.582-0.892-45.76-0.276zM405.808-69.792c15.128-3.476 30.63-6.29 46.058-8.352l1.54 11.478c-15.078 2.022-30.232 4.766-45.020 8.158l-2.578-11.284zM316.958-40.548c14.264-6.212 28.992-11.826 43.748-16.676l3.618 11.004c-14.43 4.74-28.81 10.22-42.742 16.286l-4.624-10.614zM235.026 4.522c12.882-8.724 26.306-16.942 39.914-24.436l5.588 10.138c-13.298 7.318-26.422 15.354-39.006 23.886l-6.496-9.588z" /> -<glyph unicode="" glyph-name="prog-visualstudio" data-tags="prog-visualstudio" d="M599.484 668.21c-67.826-33.776-122.67-101.908-179.068-168.096-0.174-0.21-0.358-0.424-0.532-0.63-95.904 130.292-264.442 163.188-357.31 79.126-29.108-26.334-50.774-64.154-60.454-114.068-15.52-153.916 132.606-283.876 306.076-243.498 66.046 20.052 126.636 58.152 184.356 105.020 12.834-19.96 27.872-40.138 47.766-60.64 158.174-145.44 461.080-68.2 481.298 155.886 22.022 236.9-223.014 345.892-422.132 246.9zM96.634 335.456c-10.696 42.6-1.148 83.844 5.846 97.118 42.342 89.396 176.988 110.098 286.472 32.158-84.966-91.252-188.504-166.214-292.318-129.276zM751.394 263.986c-73.522 11.81-153.050 43.682-225.416 90.388 0.864 0.766 1.728 1.532 2.602 2.296 86.822 78.062 187.824 150.622 272.086 188.388 0.056 0.026 0.090 0.042 0.14 0.066 55.392-97.95 34.3-226.344-49.412-281.138z" /> -<glyph unicode="" glyph-name="prog-java" data-tags="prog-java" d="M387.836 543.262c-9.458 20.912-13.698 45.304-6.472 67.462 7.224 22.654 23.406 40.826 39.588 57.756 45.050 45.062 100.57 78.17 144.632 123.972 24.394 25.146 44.556 55.268 51.524 89.874 5.728 25.39 2.992 51.528-2.234 76.674 23.4-26.638 31.118-64.726 24.394-99.082-7.216-38.584-28.632-72.688-53.772-102.062-20.162-23.654-43.318-44.564-67.462-63.986-28.13-22.654-55.76-47.048-73.432-78.914-14.944-25.886-18.43-57.752-8.22-85.884 16.682-48.292 55.512-84.142 76.676-129.696-23.406 20.664-46.304 42.072-67.72 64.722-22.396 23.9-43.56 49.288-57.502 79.164zM514.796 581.104c-4.23-39.584 16.426-76.924 41.078-106.302 11.944-13.192 22.152-29.374 22.646-47.798 0.502-24.636-13.432-47.548-31.368-63.722 4.238 0.492 7.224 4.23 10.71 6.22 26.886 17.178 52.77 38.836 65.964 68.454 8.714 20.166 6.724 44.068-4.724 62.742-13.448 21.906-31.118 41.324-41.572 65.22-5.734 13.442-7.724 29.124-2.992 43.314 6.228 19.166 19.668 34.852 33.86 48.544 39.080 37.088 86.378 63.486 131.688 92.358-57.258-16.428-113.766-39.084-162.060-74.686-30.622-22.902-58.996-54.764-63.23-94.344zM786.894 393.896c27.136-1.496 53.764-21.408 58.748-48.794 4.732-23.65-6.716-47.048-21.41-64.97-24.15-28.876-56.764-49.542-89.614-67.218-3.244-1.982-5.98-4.474-8.47-7.216 43.318 10.956 86.628 27.378 121.734 55.512 19.41 16.182 36.588 37.598 40.326 63.238 3.486 22.152-5.72 45.056-22.154 59.742-19.92 18.18-48.042 24.896-74.436 21.408-15.186-1.99-31.862-5.226-42.316-17.922 12.452 2.482 24.64 7.466 37.592 6.22zM246.44 322.706c32.606-8.714 66.216-11.206 99.574-13.448 29.872-1.99 59.75-2.492 89.874-2.24 77.666 1.238 155.832 6.472 232.006 23.398 7.216 1.74 15.186 2.986 21.666 7.466 12.694 8.22 26.626 14.694 40.324 21.166-61.99-9.958-124.226-18.43-186.956-22.41-63.48-3.982-127.462-6.472-191.186-2.242-18.172 1.74-36.846 2.742-53.772 9.716-3.988 1.74-9.466 5.218-7.476 10.454 3.738 6.722 11.206 9.954 17.678 13.44 27.388 12.946 57.258 20.162 86.386 28.626-50.042 0.752-99.832-11.942-145.628-31.612-10.21-4.982-21.66-8.962-29.872-17.428-3.244-3.478-3.244-9.464 0.494-12.444 7.47-6.722 17.422-9.708 26.888-12.442zM649.728 254.24c-43.568-7.718-87.388-14.944-131.452-17.178-48.294-3.236-96.588-0.494-144.382 4.482-9.208 1.246-18.422 2.736-26.634 6.966-4.232 2.492-8.462 6.472-8.212 11.708 0.494 8.212 7.46 13.934 12.444 19.912-15.43-5.478-30.868-11.198-43.812-21.416-5.484-4.232-10.956-10.948-9.466-18.416 2.25-8.712 10.712-13.94 18.18-17.92 18.416-9.466 39.080-13.692 59.25-17.428 51.022-8.22 103.054-8.47 154.334-4.976 54.282 4.23 108.296 13.188 160.822 28.626-14.936 6.716-29.128 14.442-41.072 25.64zM376.136 168.098c-13.94-3.98-28.132-8.714-39.58-17.914-5.736-4.482-10.21-12.208-7.468-19.426 3.486-9.208 12.2-14.694 20.406-19.41 21.416-11.708 45.56-17.178 69.208-21.416 53.53-8.458 108.54-7.216 161.816 2.24 31.612 5.978 63.23 14.442 92.602 27.63-19.168 7.968-37.834 16.934-55.756 27.386-31.118-5.476-62.492-11.206-94.356-13.196-42.064-3.236-84.638 0.25-126.71 5.476-9.96 2.242-22.404 3.236-29.126 11.952-3.478 7.226 4.484 12.454 8.964 16.678zM716.69 8.036c34.848 7.208 69.954 15.438 101.816 31.612 9.952 5.734 22.152 11.958 25.396 23.9 1.74 11.45-10.21 17.428-18.674 22.16 5.226-5.986 8.712-14.694 3.48-21.66-8.714-11.706-23.642-16.182-36.84-20.664-41.32-11.7-84.144-16.432-126.71-21.164-112.77-10.204-226.292-12.696-339.056-3.236-37.84 3.988-76.434 8.218-112.528 21.658-5.72 2.492-14.434 4.984-14.434 12.704 2.234 6.708 8.714 10.454 14.434 13.69 25.89 13.19 54.768 20.414 83.644 22.154-8.456 4.982-18.416 5.476-28.124 5.226-24.152-0.746-47.8-6.966-70.698-14.694-19.668-7.208-39.832-15.18-55.52-29.622-6.222-5.47-11.942-15.924-5.478-23.398 9.96-10.706 25.398-13.44 39.080-16.676 76.676-13.198 154.342-20.656 232.022-23.398 103.062-2.996 206.868 1.488 308.19 21.408zM818.756-5.412c-46.804-14.936-95.344-23.148-143.644-29.872-83.392-10.454-167.538-13.69-251.432-11.206-51.030 1.99-102.060 5.476-152.352 13.948 11.7-7.968 26.142-10.454 39.588-14.192 56.514-11.952 114.51-14.192 172.020-15.932 84.38-1.496 168.774 1.74 251.924 14.936 39.338 6.96 78.918 15.43 114.26 33.854 18.43 9.708 37.104 24.652 40.326 46.304-18.664-19.91-45.544-29.126-70.69-37.84z" /> -<glyph unicode="" glyph-name="prog-js02" data-tags="prog-js02" d="M436.39 444.958c0-129.438 9.248-238.2-54.618-302.566-35.922-36.21-92.602-57.544-162.34-57.544-114.384 0-177.894 55.724-218.43 132.832 39.024 24.918 78.904 49.004 119.55 72.308 16.584-46.376 72.582-98.516 135.776-66.42 40.054 20.36 35.43 82.080 35.43 149.074 0 139.098 0 299.56 0 425.056-0.126 2.088-0.25 4.174 1.464 4.428 47.732 0 95.456 0 143.17 0-0.002-111.79-0.002-238.264-0.002-357.168zM799.454 529.076c-36.494 15.628-81.856 34.116-92.976 67.904-12.466 37.868 8.792 69.066 32.462 79.682 52.046 23.376 114.076-15.112 126.926-54.602 39.166 23.314 78.206 46.768 113.652 73.792-41.652 69.168-102.708 118.684-214.006 115.122-61.28-1.958-107.314-21.304-141.682-50.176-33.542-28.17-59.442-67.708-63.474-123.978-12.050-168.424 113.976-211.416 221.39-258.274 33.86-14.77 71.502-29.684 87.080-59.034 32.122-60.564-24.778-100.52-73.796-104.794-78.672-6.854-131.716 39.174-162.35 87.080-38.266-23.72-79.876-44.090-116.596-69.366 51.074-89.816 134.818-147.96 265.662-147.586 133.48 0.376 232.438 64.732 240.562 185.954 11.046 164.768-112.396 210.99-222.854 258.276z" /> -<glyph unicode="" glyph-name="prog-objc" data-tags="prog-objc" d="M1023 401.122c-6.746-28.136-17.358-51.628-31.838-70.492s-32.46-33.094-53.936-42.704c-21.482-9.598-48.804-14.402-81.99-14.402-40.246 0-73.14 5.856-98.656 17.554-25.526 11.704-47.542 32.262-66.070 61.73-18.524 29.45-27.788 67.16-27.788 113.116 0 61.26 16.3 108.35 48.886 141.252 32.586 32.906 78.706 49.366 138.33 49.366 46.65 0 83.32-9.44 110.018-28.298 26.698-18.868 46.526-47.844 59.492-86.91l-101.052-22.482c-3.528 11.278-7.236 19.538-11.112 24.752-6.404 8.758-14.238 15.5-23.496 20.21-9.274 4.712-19.62 7.082-31.072 7.082-25.95 0-45.818-10.434-59.632-31.296-10.43-15.478-15.654-39.79-15.654-72.924 0-41.052 6.23-69.19 18.682-84.42 12.474-15.218 29.99-22.82 52.562-22.82 21.89 0 38.442 6.136 49.644 18.438 11.196 12.286 19.32 30.152 24.376 53.554l100.306-30.306zM223.332 546.674c4.598-18.538 6.894-39.414 6.894-62.62 0-26.526-3.12-49.43-9.374-68.728-6.254-19.296-14.706-35.23-25.326-47.804-10.62-12.594-23.054-21.934-37.302-28.040-14.238-6.098-29.276-9.156-45.094-9.156-18.988 0-35.53 3.426-49.62 10.296-14.096 6.852-25.774 16.758-35.040 29.722-9.274 12.96-16.168 28.746-20.694 47.36s-6.776 39.596-6.776 62.962c0 26.224 3.094 48.974 9.274 68.27 6.17 19.292 14.58 35.226 25.202 47.81 10.62 12.58 23.022 21.928 37.186 28.032 14.164 6.106 29.168 9.154 44.986 9.154 18.988 0 35.53-3.468 49.628-10.4 14.088-6.928 25.808-16.838 35.148-29.726 9.346-12.882 16.316-28.592 20.908-47.132zM188.408 481.116c0 17.328-1.314 33.194-3.95 47.586-2.646 14.388-6.904 26.79-12.784 37.186-5.872 10.4-13.45 18.46-22.714 24.19-9.274 5.73-20.46 8.59-33.576 8.59-12.65 0-23.546-3.052-32.662-9.156-9.124-6.106-16.618-14.394-22.498-24.864-5.872-10.48-10.246-22.76-13.108-36.852-2.862-14.090-4.292-29.048-4.292-44.872 0-17.486 1.348-33.422 4.068-47.82 2.71-14.386 6.97-26.746 12.776-37.070 5.796-10.32 13.29-18.344 22.49-24.074 9.19-5.73 20.268-8.586 33.226-8.586 12.658 0 23.586 3.046 32.778 9.148 9.198 6.106 16.768 14.39 22.722 24.872 5.956 10.476 10.364 22.718 13.224 36.734 2.862 14.020 4.3 29.010 4.3 44.988zM452.15 451.952c0-18.842-2.604-35.682-7.792-50.53-5.206-14.836-12.592-27.43-22.166-37.742-9.564-10.332-21.208-18.238-34.922-23.738-13.714-5.504-29.16-8.25-46.342-8.25-13.416 0-27.122 1.282-41.144 3.844-14.014 2.562-27.878 6.622-41.594 12.208v306.084h39.332v-87.94l-1.804-42.046c11.294 15.22 23.396 25.962 36.288 32.216 12.876 6.25 26.706 9.378 41.478 9.378 12.958 0 24.336-2.708 34.132-8.138 9.798-5.422 18.006-13.074 24.644-22.942s11.61-21.782 14.92-35.718c3.308-13.946 4.97-29.508 4.97-46.686zM411.904 450.148c0 11.898-0.856 22.83-2.594 32.778-1.73 9.948-4.484 18.46-8.25 25.546-3.768 7.082-8.592 12.622-14.472 16.618-5.872 3.988-12.882 5.988-21.016 5.988-4.974 0-10.022-0.79-15.146-2.374-5.132-1.58-10.438-4.216-15.944-7.91-5.498-3.698-11.302-8.592-17.408-14.696-6.096-6.106-12.618-13.678-19.554-22.722v-110.096c7.686-3.012 15.528-5.39 23.512-7.122 7.984-1.726 15.602-2.594 22.83-2.594 9.048 0 17.674 1.43 25.882 4.292 8.208 2.86 15.454 7.652 21.708 14.356s11.228 15.602 14.92 26.68c3.686 11.076 5.532 24.826 5.532 41.256zM460.36 528.818h111.232v-191.706c0-21.098-4.906-37.078-14.706-47.922-9.796-10.852-23.28-16.286-40.454-16.286-5.432 0-11.012 0.34-16.734 1.024-5.722 0.676-11.42 1.688-17.076 3.050-5.648 1.36-11.144 3.012-16.492 4.976-5.356 1.954-10.372 4.14-15.038 6.55v-37.524c8.592-3.622 18.198-6.446 28.828-8.484 10.622-2.032 21.508-3.042 32.662-3.042 15.378 0 29.202 2.176 41.486 6.55 12.284 4.376 22.638 10.782 31.080 19.214 8.434 8.45 14.93 18.804 19.446 31.090 4.516 12.282 6.78 26.332 6.78 42.156v222.904h-151.014v-32.55zM609.684 647.502c-2.794 2.852-6.070 5.082-9.84 6.666-3.766 1.58-7.834 2.376-12.2 2.376-4.376 0-8.452-0.794-12.21-2.376-3.776-1.584-7.052-3.814-9.838-6.666-2.788-2.866-4.974-6.188-6.562-9.952-1.572-3.768-2.372-7.764-2.372-11.98 0-4.376 0.798-8.406 2.372-12.098 1.588-3.692 3.776-6.974 6.562-9.832 2.786-2.866 6.062-5.086 9.838-6.666 3.76-1.588 7.836-2.374 12.21-2.374 4.366 0 8.434 0.786 12.2 2.374 3.77 1.58 7.044 3.8 9.84 6.666 2.778 2.858 4.974 6.138 6.544 9.832 1.59 3.692 2.378 7.722 2.378 12.098 0 4.216-0.79 8.212-2.378 11.98-1.57 3.766-3.768 7.088-6.544 9.952z" /> -<glyph unicode="" glyph-name="prog-ccplusplus" data-tags="prog-ccplusplus" d="M677.784 415.564l96.82-29.26c-6.514-27.164-16.76-49.836-30.732-68.042-13.98-18.206-31.338-31.946-52.064-41.218-20.734-9.266-47.108-13.898-79.144-13.898-38.85 0-70.596 5.638-95.23 16.934-24.636 11.294-45.886 31.156-63.776 59.592-0.936 1.488-1.748 3.086-2.632 4.618l-30.902-213.166h-51.34l91.364 633.758h51.852l-24.298-167.606c30.236 23.68 70.158 35.586 119.844 35.586 45.038 0 80.434-9.112 106.2-27.318 25.776-18.208 44.912-46.18 57.43-83.89l-97.542-21.704c-3.408 10.886-6.986 18.86-10.728 23.896-6.18 8.454-13.74 14.958-22.68 19.506-8.95 4.55-18.94 6.838-29.992 6.838-25.050 0-44.23-10.072-57.562-30.212-10.072-14.942-15.112-38.408-15.112-70.39 0-39.626 6.014-66.79 18.032-81.478 12.042-14.696 28.952-22.040 50.742-22.040 21.126 0 37.102 5.93 47.914 17.798 10.81 11.856 18.654 29.098 23.536 51.696zM228.414 363.866c-10.812-11.87-26.79-17.798-47.914-17.798-21.792 0-38.7 7.344-50.742 22.040-12.018 14.69-18.032 41.852-18.032 81.478 0 31.982 5.040 55.45 15.112 70.39 13.332 20.14 32.512 30.212 57.562 30.212 11.054 0 21.042-2.288 29.992-6.838 8.942-4.548 16.5-11.052 22.68-19.506 3.744-5.038 7.32-13.010 10.73-23.896l97.542 21.704c-12.518 37.71-31.654 65.682-57.43 83.89-25.766 18.208-61.164 27.318-106.2 27.318-57.554 0-102.066-15.89-133.522-47.654-31.456-31.758-47.192-77.216-47.192-136.35 0-44.354 8.94-80.75 26.822-109.186 17.89-28.436 39.14-48.296 63.776-59.592s56.382-16.934 95.23-16.934c32.038 0 58.41 4.632 79.144 13.898 20.726 9.274 38.084 23.014 52.066 41.218 13.972 18.208 24.218 40.878 30.732 68.042l-96.82 29.26c-4.882-22.596-12.724-39.838-23.536-51.696zM966.958 471.362v56.034h-47.008v-56.034h-67.444v56.034h-47.006v-56.034h-55.748v-47.016h55.748v-55.74h47.008v55.74h67.444v-55.74h47.008v55.74h56.040v47.016h-56.042z" /> -<glyph unicode="" glyph-name="prog-cplusplus" data-tags="prog-cplusplus" d="M431.2 392.392l165.966-50.17c-11.152-46.548-28.708-85.424-52.672-116.628-23.976-31.222-53.728-54.776-89.258-70.662-35.54-15.884-80.758-23.828-135.676-23.828-66.602 0-121.022 9.682-163.248 29.036-42.234 19.362-78.662 53.404-109.328 102.15-30.656 48.736-45.984 111.13-45.984 187.174 0 101.38 26.972 179.298 80.892 233.75 53.928 54.448 130.228 81.682 228.902 81.682 77.208 0 137.896-15.62 182.060-46.826 44.188-31.218 76.992-79.162 98.456-143.814l-167.222-37.206c-5.846 18.664-11.986 32.328-18.39 40.97-10.596 14.488-23.554 25.638-38.89 33.442-15.33 7.798-32.462 11.71-51.416 11.71-42.932 0-75.818-17.266-98.674-51.786-17.266-25.616-25.908-65.842-25.908-120.672 0-67.93 10.306-114.49 30.922-139.69 20.626-25.184 49.62-37.776 86.972-37.776 36.22 0 63.6 10.172 82.148 30.524 18.54 20.33 31.988 49.888 40.348 88.62zM926.938 488.046v96.062h-80.592v-96.062h-115.608v96.062h-80.592v-96.062h-95.562v-80.592h95.562v-95.564h80.592v95.564h115.608v-95.564h80.592v95.564h96.062v80.592h-96.062z" /> -<glyph unicode="" glyph-name="prog-csharp" data-tags="prog-csharp" d="M466.548 387.822l179.604-54.29c-12.070-50.376-31.070-92.446-57-126.214-25.95-33.788-58.142-59.276-96.594-76.466-38.458-17.192-87.394-25.788-146.824-25.788-72.076 0-130.964 10.476-176.66 31.422-45.704 20.954-85.126 57.792-118.31 110.542-33.176 52.744-49.764 120.264-49.764 202.556 0 109.71 29.188 194.032 87.538 252.958 58.36 58.922 140.928 88.394 247.71 88.394 83.552 0 149.228-16.902 197.020-50.672 47.82-33.784 83.318-85.668 106.546-155.632l-180.962-40.262c-6.328 20.196-12.97 34.984-19.9 44.336-11.466 15.678-25.49 27.742-42.086 36.19-16.588 8.44-35.128 12.674-55.64 12.674-46.46 0-82.048-18.686-106.782-56.042-18.684-27.722-28.036-71.252-28.036-130.588 0-73.512 11.152-123.896 33.464-151.168 22.32-27.254 53.696-40.878 94.118-40.878 39.198 0 68.826 11.006 88.898 33.032 20.060 21.994 34.614 53.982 43.66 95.896zM970.69 481.482l-13.708-68.584h66.018v-74.524h-80.904l-19-95.044h-76.82l19.054 95.044h-59.538l-19.19-95.044h-76.28l19.054 95.044h-37.144v74.524h52.094l13.752 68.584h-65.846v74.524h80.796l19.376 96.664h76.818l-19.504-96.664h59.25l19.388 96.664h76.546l-19.314-96.664h37.412v-74.524h-52.31zM894.034 481.482h-59.36l-13.842-68.584h59.448l13.754 68.584z" /> -<glyph unicode="" glyph-name="prog-js01" data-tags="prog-js01" d="M2.016 959c-1.14-0.166-1.056-1.54-0.974-2.916 0-339.336 0-678.62 0-1017.948 338.728-2.27 681.616-0.324 1021.958-0.972 0 340.618 0 681.22 0 1021.836-340.316 0-680.666 0-1020.984 0zM519.786 55.666c-23.644-23.838-60.956-37.876-106.858-37.876-75.286 0-117.086 36.68-143.768 87.422 25.684 16.4 51.932 32.244 78.688 47.59 10.912-30.524 47.772-64.84 89.366-43.714 26.366 13.398 23.322 54.020 23.322 98.108 0 91.546 0 197.156 0 279.744-0.084 1.376-0.166 2.75 0.964 2.916 31.414 0 62.826 0 94.232 0 0-73.576 0-156.804 0-235.058 0-85.196 6.088-156.774-35.946-199.132zM941.392 140.166c-5.348-79.768-70.486-122.126-158.34-122.376-86.124-0.248-141.248 38.026-174.866 97.134 24.17 16.634 51.556 30.034 76.75 45.644 20.16-31.522 55.074-61.82 106.858-57.304 32.262 2.812 69.712 29.11 48.57 68.964-10.254 19.32-35.032 29.134-57.312 38.85-70.704 30.848-153.656 59.142-145.722 169.984 2.654 37.028 19.704 63.050 41.778 81.592 22.622 19 52.92 31.734 93.258 33.022 73.258 2.346 113.446-30.24 140.858-75.768-23.328-17.782-49.028-33.216-74.802-48.562-8.458 25.99-49.288 51.316-83.544 35.938-15.578-6.986-29.576-27.522-21.368-52.448 7.32-22.23 37.178-34.398 61.198-44.688 72.704-31.12 153.954-61.534 146.684-169.982z" /> -<glyph unicode="" glyph-name="prog-ruby" data-tags="prog-ruby" d="M730.562 186.128l217.27-192.832-427.508 33.588c83.756 50.6 152.852 111.026 204.588 159.134 0.852-0.166 1.758-0.258 2.664-0.258 0.99 0.002 1.988 0.12 2.986 0.368zM971.036 70.9l40.016 524.090c-19.796-50.568-51.114-109.46-91.714-172.344l51.698-351.746zM745.094 198.034l216.768-192.392-57.872 393.73c-47.706-71.012-104.99-143.616-158.896-201.338zM491.902 10.448c-46.69-25.868-94.746-46.47-143.414-61.514l499.572 33.596-356.158 27.918zM74.694 262.898l130.858-305.78 107.702 356.8-238.56-51.020zM345.028 332.024l364.364-117.034-92.976 368.408-271.388-251.374zM636.806 619.988l339.658 22.736-265.562 216.896-74.096-239.632zM830.004 954.162l-222.884 1.008 99.086-69.38 123.798 68.372zM9.57 392.484l-7.334-217.306 53.458 97.5-46.124 119.806zM131.336 305.184c42.368-2.702 85.166 6.686 128.34 25.584 29.082 13.782 59.252 31.224 89.534 51.726 43.43 30.684 87.2 69.064 131.29 112.76 158.584 157.166 223.79 332.934 154.492 402.918-16.536 16.688-40.208 25.218-70.376 25.35-91.32 0.394-227.81-68.35-344.138-183.684-111.172-110.196-183.262-240.992-183.648-333.236-0.136-32.798 8.938-58.638 26.966-76.814 16.034-16.198 38.816-22.762 67.54-24.604zM462.206 15.64c4.972 2.572 9.926 5.172 14.816 7.818l-146.644 282.944-110.366-365.572c0.924 0.12 8.378 1.016 8.378 1.016 9.632 1.226 19.146 2.636 28.542 4.23 60.636 10.338 120.63 29.266 178.308 56.278 9.128 4.268 18.102 8.706 26.966 13.286zM761.686 249.018l3.478 3.992c2.428 2.848 4.874 5.75 7.308 8.662 0 0 7.536 8.972 10.464 12.536 4.928 5.96 9.826 12.042 14.742 18.158 4.516 5.64 9.020 11.298 13.516 17.058 4.716 6.042 9.432 12.096 14.112 18.268 10.594 13.946 21.306 28.568 32.754 44.72 12.114 17.088 23.816 34.284 34.832 51.168l-19.862 12.146c-52.742 32.25-158.74 97.212-228.406 140.006l90.148-357.19c8.398 9.222 17.264 19.25 26.914 30.476zM1016.47 824.1l-280.46 39.378 267.376-218.654c9.394 30.992 15.512 61.048 18.176 89.398 0.384 3.974 0.63 7.97 0.87 11.996 0.228 3.704 0.358 7.422 0.458 11.148 0.642 24.146-1.52 46.576-6.42 66.734zM908.65 440.516c0.688 0.906 1.458 1.924 2.298 3.146 5.338 7.558 12.93 19.924 21.372 34.818 23.496 41.434 52.478 100.508 64.564 143.986l-348.824-23.272c72.758-44.712 179.042-109.848 231.884-142.168l28.174-17.196c0.168 0.21 0.34 0.44 0.532 0.686zM490.528 27.744l1.090 0.614c76.092 42.168 144.1 94.042 220.284 168.174l-370.838 119.614 149.464-288.402zM1 136.116c1.638-48.292 11.886-88.162 30.482-118.782l17.316 206.226-47.798-87.444zM68.568 237.186l-19.98-238c28.468-37.24 66.504-53.87 123.056-53.87 5.696 0 11.612 0.156 17.956 0.466l-9.99 24.824c-21.618 53.704-83.306 206.898-111.042 266.58zM1012.288 838.792c-4.112 12.578-9.36 24.192-15.622 34.612-25.264 42.030-68.904 68.922-129.742 79.952l-135.922-75.062 281.286-39.502z" /> -<glyph unicode="" glyph-name="prog-c" data-tags="prog-c" d="M725.034 358.34l267.63-80.894c-17.984-75.062-46.292-137.762-84.942-188.094-38.646-50.316-86.628-88.308-143.928-113.926-57.306-25.622-130.22-38.43-218.77-38.43-107.41 0-195.156 15.618-263.24 46.836-68.094 31.21-126.862 86.098-176.296 164.708-49.432 78.59-74.154 179.208-74.154 301.83 0 163.476 43.488 289.112 130.452 376.932 86.954 87.79 209.99 131.7 369.094 131.7 124.494 0 222.348-25.18 293.582-75.506 71.244-50.33 124.15-127.644 158.772-231.898l-269.664-60c-9.44 30.098-19.328 52.128-29.656 66.060-17.086 23.366-37.99 41.354-62.702 53.934-24.72 12.576-52.364 18.876-82.916 18.876-69.22 0-122.252-27.84-159.106-83.5-27.862-41.308-41.788-106.168-41.788-194.582 0-109.538 16.618-184.62 49.882-225.238 33.254-40.618 79.996-60.938 140.226-60.938 58.424 0 102.568 16.418 132.462 49.21 29.888 32.798 51.574 80.448 65.062 142.92z" /> -<glyph unicode="" glyph-name="axe" data-tags="axe" d="M439.752 261.428l264.7 264.698-14.104 14.104 60.015 60.013-87.232 87.234-60.015-60.015-14.105 14.105-10.92-10.92c-37.888 75.191-30.805 166.974 37.033 282.885l-0.002 0.003c-329.678 132.36-685.271-269.162-571.215-583.966 106.837 62.11 217.013 88.614 299.25 66.146l-18.846-18.846 14.105-14.105-316.969-316.967v-90.817h83.649l320.552 320.552 14.104-14.104zM978.495 550.161c-117.528-68.782-210.087-75.332-285.749-35.741l-232.906-232.906c24.15-82.545-2.302-194.184-65.31-302.568 314.802-114.055 716.326 241.539 583.966 571.215z" /> -<glyph unicode="" glyph-name="github-01" data-tags="github-01" d="M13.924 426.494c45.18 11.282 106.61 26.648 214.236 29.506-2.974 5.948-5.66 12.106-8.038 18.456-41.88 0.364-170.86-5.584-215.042-16.5-0.25-0.078-0.518-0.096-0.786-0.096-1.478 0-2.84 1.016-3.204 2.512-0.422 1.746 0.652 3.548 2.416 3.99 43.78 10.82 169.65 16.826 214.236 16.71-10.034 29.506-14.466 63.31-14.466 101.046 0 67.032 20.874 92.318 48.92 128.040-21.448 76.394 7.694 128.614 7.694 128.614s45.066 9.342 130.264-51.664c46.178 19.78 169.294 21.428 227.54 4.392 35.76 23.636 101.142 57.17 127.54 47.79 7.136-11.51 22.524-45.026 9.324-118.696 8.978-16.154 55.522-50.572 55.712-147.856-0.768-35.876-4.49-66.168-11.396-91.798 111.080 0.94 176.424-8.23 221.43-16.518 1.766-0.364 2.956-2.072 2.648-3.856-0.306-1.574-1.688-2.706-3.222-2.706-0.23 0-0.422 0.018-0.652 0.038-44.932 8.326-110.388 17.458-222.122 16.442-1.958-6.504-4.144-12.682-6.524-18.572 38.026-1.266 142.466-5.334 227.646-31.386 1.766-0.538 2.724-2.378 2.188-4.144-0.422-1.4-1.726-2.32-3.146-2.32-0.306 0-0.652 0.038-0.958 0.152-86.37 26.398-193.076 30.024-228.566 31.196-30.888-67.858-94.236-93.18-196.644-103.712 33.19-20.892 42.706-47.096 42.706-118.006 0-70.906-0.958-80.422-0.728-96.726 0.346-26.766 39.558-39.578 38.102-48.192-1.458-8.598-32.806-7.214-47.462-2.094-41.516 14.464-37.374 49-37.374 49l-1.38 94.808c0 0 2.84 51.032-16 51.032 0-10.262 0-118.484 0-155.184 0-33.726 23.598-43.972 23.598-56.442 0-21.43-43.126 2.032-56.404 15.406-20.268 20.336-17.964 63.46-17.466 97.57 0.46 32.942-0.306 104.98-0.306 104.98l-13.754-0.29c0 0 5.64-157.372-7.252-186.050-16.67-36.816-66.954-49.48-66.954-32.71 0 11.282 12.392 7.692 19.242 32.976 5.85 21.508 3.856 181.95 3.856 181.95s-16.114-9.536-16.114-39.578c0-13.754-0.384-92.316-0.384-115.704 0-29.41-41.766-46.156-61.834-46.156-10.168 0-22.81 0.496-22.81 5.886 0 13.602 38.198 21.586 38.198 49.882 0 24.536-0.538 87.652-0.538 87.652s-19.262-3.296-46.734-3.296c-69.256 0-91.166 44.2-101.584 68.93-13.564 32.21-31.156 47.346-49.842 59.434-11.472 7.424-14.12 16.192-0.844 18.686 61.314 11.548 76.988-69.526 117.928-82.436 29.218-9.23 66.782-5.238 85.468 6.848 2.476 24.77 20.318 46.178 35.186 57.458-104.134 9.996-165.872 46.158-197.872 104.29-108.932-2.61-170.744-18.072-216.058-29.39-3.3-0.826-6.522-1.63-9.63-2.418-0.268-0.056-0.538-0.076-0.806-0.076-1.478 0-2.82 0.998-3.204 2.494-0.442 1.764 0.652 3.568 2.418 4.010 3.12 0.768 6.324 1.552 9.604 2.396z" /> -<glyph unicode="" glyph-name="instagram" data-tags="instagram" d="M132.168 959h759.638c72.158 0 131.194-59.010 131.194-131.168v-759.638c0-72.158-59.036-131.194-131.194-131.194h-759.638c-72.158 0-131.168 59.036-131.168 131.194v759.638c0 72.158 59.010 131.168 131.168 131.168v0zM745.468 845.472c-25.3 0-46.010-20.71-46.010-46.010v-110.134c0-25.3 20.708-46.010 46.010-46.010h115.524c25.3 0 46.010 20.708 46.010 46.010v110.134c0 25.3-20.708 46.010-46.010 46.010h-115.524zM907.476 526.82h-89.95c8.508-27.794 13.1-57.212 13.1-87.704 0-169.992-142.222-307.796-317.678-307.796-175.432 0-317.654 137.804-317.654 307.796 0 30.49 4.59 59.908 13.1 87.704h-93.842v-431.706c0-22.356 18.264-40.644 40.622-40.644h711.682c22.332 0 40.622 18.29 40.622 40.644v431.706h-0.002zM512.95 649.106c-113.354 0-205.25-89.050-205.25-198.886s91.896-198.886 205.25-198.886c113.376 0 205.272 89.050 205.272 198.886s-91.896 198.886-205.272 198.886z" /> -<glyph unicode="" glyph-name="github-02" data-tags="github-02" d="M512.15 361.12c-7.584 0-14.97-0.374-22.38-0.822-4.914 14.022-7.908 29.392-7.908 46.134 0 16.492 2.918 45.56 7.684 45.612 2.47 0 4.99-0.224 7.46-0.224 125.502 0 227.206 101.85 227.206 227.378 0 29.942-13.7 68.742-29.668 84.71l77.922 43.614v151.478l-162.582-90.772c-36.102 24.078-72.856 38.226-119.514 38.226-125.504 0-223.912-101.702-223.912-227.206 0-70.612 33.884-133.688 84.41-175.356-14.074-29.542-21.308-62.402-21.308-97.286 0-31.338 6.986-61.106 18.44-88.178-66.046-38.7-108.738-100.078-108.738-169.318 0-117.17 122.186-212.11 272.768-212.11 150.654 0 272.716 94.94 272.716 212.11-0.004 117.072-122.016 212.010-272.596 212.010zM497.004 785.29c58.584 0 106.018-47.458 106.018-105.992 0-58.584-47.434-106.068-106.018-106.068-58.586 0-106.042 47.482-106.042 106.068 0 58.536 47.456 105.992 106.042 105.992zM512.15 67.52c-66.918 0-121.188 36.504-121.188 81.59 0 45.038 54.27 81.542 121.188 81.542 66.92 0 121.19-36.504 121.19-81.542 0-45.086-54.27-81.59-121.19-81.59z" /> -<glyph unicode="" glyph-name="angularjs" data-tags="angularjs" d="M512 650.505l84.838-198.722-169.679 0.002 84.84 198.72zM956.433 773.524l-66.241-596.163-378.192-213.864-378.192 213.862-66.241 596.167 444.433 158.976 444.433-158.978zM795.563 224.673l-283.563 622.662-283.563-622.662h105.986l54.885 143.838 122.692 1.893 122.69-1.893 54.883-143.838h105.99z" /> -<glyph unicode="" glyph-name="battered-axe" data-tags="battered-axe" d="M946.36 876.538c-96.057-214.044-249.731-207.069-403.969-129.791l37.738 54.072c-24.775 37.484-69.871 64.654-111.516 76.848l-42.019-61.524c-35.132 24.011-69.513 49.773-102.428 75.388l-0.007-0.007c-3.961-6.034-7.641-11.869-11.080-17.538-67.845 38.349-157.474 55.396-258.245 55.396 99.809-40.31 178.113-93.819 213.146-184.851-2.030-27.668-0.309-55.657-0.309-89.808 11.86-6.567 23.398-13.461 34.574-20.65l-261.157-382.386 1.6-220.927 361.579 518.079c107.578-119.1 121.076-273.051-68.96-392.977 103.72-30.189 200.425-31.741 286.869-11.662l17.493 110.784 74.017-77.129c61.306 35.133 151.694 99.911 191.805 157.628l-64.083 110.751 109.616-30.319c67.267 103.392 74.48 327.516-4.664 460.623z" /> -<glyph unicode="" glyph-name="prog-cakephp" data-tags="prog-cakephp" d="M942 379.834l81 68.166-81 68.162 56.116 89.788-98.158 39.68 25.466 102.762-105.626 7.406-7.402 105.622-102.766-25.458-39.688 98.154-89.776-56.12-68.166 81.004-68.162-81.004-89.788 56.12-39.68-98.154-102.762 25.462-7.41-105.618-105.618-7.406 25.458-102.766-98.15-39.688 56.112-89.784-81-68.162 81-68.166-56.112-89.784 98.15-39.68-25.466-102.766 105.626-7.402 7.402-105.626 102.77 25.466 39.688-98.158 89.78 56.124 68.162-81.008 68.166 81.008 89.784-56.124 39.68 98.158 102.766-25.466 7.402 105.618 105.626 7.412-25.466 102.766 98.158 39.688-56.116 89.774zM883.996 289.852l-34.258-13.858 8.882-35.872 13.284-53.586-91.996-6.456-2.586-36.91-3.868-55.076-89.45 22.166-13.858-34.258-20.66-51.11-78.096 48.82-59.39-70.576-59.384 70.578-78.102-48.82-34.52 85.368-89.458-22.166-3.86 55.084-2.586 36.912-92 6.454 22.168 89.45-85.366 34.516 48.812 78.106-70.566 59.382 70.566 59.384-48.812 78.104 85.366 34.52-22.16 89.454 91.992 6.454 2.59 36.908 3.864 55.084 89.456-22.168 34.512 85.368 78.104-48.816 59.384 70.57 59.392-70.576 78.088 48.822 34.526-85.366 89.45 22.16 3.868-55.084 2.586-36.912 91.996-6.454-22.176-89.452 85.384-34.512-48.812-78.104 70.562-59.384-70.572-59.392 48.82-78.088-51.116-20.668zM604.336 238.536l1.048-73.93c0 0-124.828-14.456-209.612 4.298-122.514 27.098-136.334 111.208-136.334 111.208l-11.086 58.22c5.102-16.702 30.728-76.536 139.472-97.218 83.808-15.944 205.584-3.728 216.512-2.578zM491.94 634.572l55.010-85.816 229.334-56.456-3.676-25.916-209.858 57.724 38.376-59.882c-28.21-6.142-58.384-10.376-89.828-12.3-153.378-9.374-283.254 39.332-305.79 111.208l24.838-130.354c17.188-24.65 56.182-59.376 142.946-73.672 82.506-13.598 198.34-4.924 232.374-1.896l0.084-20.16c0 0-139.618-14.838-234.1 1.462-81.844 14.106-119.786 47.574-137.082 72.134l9.36-49.146c0.288-0.498 0.548-0.98 0.84-1.48 4.17-14.47 28.698-77.256 144.492-98.324 75.918-13.822 182.040-5.956 214.792-2.994l-0.956 66.67 157.184-57.004 14.264 35.032 24.302 286.434c-2.046-6.424-4.858-12.766-8.476-18.984l-298.43 63.72zM762.51 363.284l-159.954 43.996-0.1 22.222 163.728-40.302-3.674-25.916zM202.106 580.99l3.402-17.858c-1.822 5.814-3.028 11.758-3.402 17.858z" /> -<glyph unicode="" glyph-name="dropbox" data-tags="dropbox" d="M825.044 549.466l197.956 164.958-301.62 192.71-207.352-173.88-202.688 173.88-310.34-202.148 213.716-162.58-213.716-162.604 310.342-183.812 202.688 155.518 202.622-155.518 306.348 183.812-197.956 169.664zM514.658 724.244l292.742-168.186-295.41-195.758-293.574 184.954 296.242 178.99zM725.416 167.396l90.28 54.164v-49.254l-304.4-197.442-297.656 198.788v46.428l98.936-58.602 9.146 6.994 192.306 147.56 201.454-154.6 9.934 5.964z" /> -<glyph unicode="" glyph-name="tl-toolbox" data-tags="tl-toolbox" d="M980.416 384.124h42.584v-298.084c0-23.42-19.162-42.582-42.584-42.582h-936.832c-23.42 0-42.584 19.162-42.584 42.582v298.084h178.85v-76.65h153.302v76.65h357.7v-76.65h153.3v76.65h136.264zM385.41 701.196c0 2.724 0.246 5.402 0.536 8.068 0.138 1.138 0.266 2.28 0.454 3.41 0.166 1.046 0.42 2.078 0.632 3.124 0.644 3.040 1.414 6.050 2.4 8.994 13.91 41.596 63.508 72.502 122.568 72.502 59.058 0 108.654-30.906 122.568-72.504 0.99-2.944 1.756-5.956 2.404-8.994 0.208-1.044 0.464-2.076 0.63-3.124 0.184-1.13 0.316-2.272 0.45-3.41 0.292-2.666 0.534-5.344 0.534-8.068l0.1-59.974h56.422v59.974c0 4.224-0.298 8.392-0.764 12.522-0.376 3.726-0.99 7.39-1.68 11.034 0 0.016 0 0.030-0.010 0.042-13.78 72.256-89.424 127.75-180.654 127.75s-166.874-55.492-180.654-127.75c0-0.012-0.004-0.026-0.008-0.042-0.69-3.642-1.306-7.306-1.68-11.034-0.47-4.128-0.766-8.296-0.766-12.522v-59.974h56.422l0.096 59.976zM936.17 690.724c-14.58 18.738-46.392 34.066-70.696 34.066h-138.122c1.156-7.734 1.822-15.598 1.822-23.596v-94.040h-124.508l-0.048 34.014-0.1 60.028c0 8.3-2.596 16.278-7.244 23.596h-170.542c-4.65-7.328-7.256-15.328-7.256-23.65l-0.096-59.972-0.054-34.014h-124.5v94.038c0 7.998 0.666 15.862 1.822 23.596h-138.122c-24.298 0-56.116-15.328-70.696-34.066l-86.83-136.266v-127.748h178.85v76.648h153.302v-76.648h357.7v76.648h153.3v-76.648h178.848v127.748l-86.83 136.266zM810.084 384.124v85.166h-85.168v-127.75h85.168v42.584zM299.084 384.124v85.166h-85.166v-127.75h85.166v42.584z" /> -<glyph unicode="" glyph-name="vc-fossil" data-tags="vc-fossil" d="M570.62 49.862l-0.924 1.23-0.914 1.322-1.024 1.43-0.924 1.738-0.814 1.83-0.914 1.948-0.816 2.144-0.814 2.346-0.714 2.346-0.714 2.552-0.716 2.762-0.616 2.754-0.616 2.958-0.616 2.96-0.508 3.17-0.508 3.168-0.414 3.262-0.4 3.376-0.306 3.476-0.308 3.468-0.208 3.468-0.208 3.576-0.1 3.576-0.1 3.676v7.144l0.1 3.676 0.1 3.576 0.208 3.568 0.208 3.476 0.308 3.476 0.306 3.468 0.4 3.37 0.414 3.268 0.508 3.17 0.508 3.16 1.232 5.92 0.616 2.76 0.716 2.762 0.714 2.544 0.714 2.354 0.814 2.354 0.816 2.138 0.914 1.938 0.814 1.838 0.924 1.738 1.024 1.432 0.914 1.33 0.924 1.222 1.024 1.024 1.014 0.814 1.024 0.616 1.024 0.408 1.014 0.306 1.032 0.1 1.016-0.1 1.024-0.306 1.022-0.408 1.024-0.616 1.024-0.814 1.014-1.024 0.916-1.222 0.922-1.33 1.024-1.432 0.916-1.738 0.822-1.838 0.916-1.938 0.814-2.138 0.824-2.354 0.714-2.354 0.714-2.544 0.714-2.762 0.608-2.76 1.232-5.92 0.508-3.16 0.508-3.17 0.408-3.268 0.414-3.37 0.3-3.468 0.306-3.476 0.208-3.476 0.2-3.568 0.1-3.576 0.108-3.676v-7.144l-0.108-3.676-0.1-3.576-0.2-3.576-0.208-3.468-0.306-3.468-0.3-3.476-0.414-3.376-0.408-3.262-0.508-3.168-0.508-3.17-0.616-2.96-0.616-2.958-0.608-2.754-0.714-2.762-0.714-2.552-0.714-2.346-0.824-2.346-0.814-2.144-0.916-1.948-0.822-1.83-0.916-1.738-1.024-1.43-0.922-1.322-0.916-1.23-1.014-1.024-1.024-0.814-1.024-0.618-1.022-0.406-1.024-0.308-1.016-0.1-1.032 0.1-1.014 0.308-1.024 0.406-1.024 0.618-1.014 0.814-1.024 1.024zM544.986 371.124l-0.308 1.124-0.408 1.024-0.616 0.924-0.708 0.814-0.822 0.608-1.024 0.506-1.014 0.316-1.132 0.3h-2.644l-3.068-0.508-3.37-1.024-3.576-1.53-3.984-2.046-4.182-2.446-8.888-6.128-9.598-7.66-9.8-9.082-10.010-10.422-9.394-10.92-8.068-10.73-6.74-10.312-5.208-9.498-2.042-4.39-1.634-4.084-1.126-3.786-0.612-3.466-0.204-3.060v-1.324l0.204-1.23 0.412-1.23 0.408-1.016 0.612-0.814 0.714-0.814 0.818-0.616 1.020-0.516 1.024-0.408 1.124-0.208 1.326-0.1 1.326 0.1 3.064 0.516 3.37 1.022 3.576 1.532 3.978 1.938 4.19 2.446 8.886 6.138 9.598 7.75 9.8 9.1 10.010 10.414 9.294 10.928 8.168 10.72 6.736 10.312 5.208 9.498 2.044 4.392 1.532 4.084 1.13 3.776 0.708 3.476 0.208 2.96-0.1 1.43-0.208 1.22zM547.738 215.288l-3.776 3.168-3.776 2.754-3.476 2.354-3.362 1.738-1.538 0.714-1.432 0.616-1.322 0.4-1.124 0.214-1.124 0.092h-0.516l-0.406-0.092-0.408-0.108-0.308-0.208-0.306-0.2-0.3-0.208-0.214-0.308-0.2-0.306-0.102-0.408v-0.408l-0.1-0.406 0.1-0.516 0.202-1.016 0.314-1.124 0.608-1.33 0.716-1.322 0.814-1.43 2.146-3.062 2.752-3.276 3.168-3.362 3.578-3.476 3.776-3.168 3.784-2.854 3.468-2.254 3.37-1.838 1.53-0.714 1.432-0.508 1.23-0.406 1.222-0.202 1.024-0.108h0.516l0.398 0.108 0.416 0.1 0.298 0.202 0.308 0.2 0.306 0.208 0.202 0.308 0.208 0.306 0.1 0.408v0.408l0.11 0.406-0.11 0.416-0.1 1.116-0.408 1.13-0.516 1.222-0.714 1.43-0.814 1.432-2.246 3.060-2.652 3.268-3.17 3.37-3.576 3.47zM567.15 392.774l-2.144-3.060-0.924-1.432-0.714-1.43-0.508-1.23-0.416-1.116-0.1-1.13-0.1-0.4 0.1-0.416v-0.406l0.1-0.408 0.208-0.306 0.208-0.308 0.2-0.2 0.308-0.208 0.406-0.208 0.308-0.1h0.924l1.014 0.1 1.23 0.208 1.332 0.408 1.422 0.616 1.43 0.616 3.37 1.83 3.476 2.354 3.776 2.862 3.776 3.168 3.576 3.468 3.17 3.37 2.652 3.268 2.246 3.070 0.814 1.43 0.716 1.422 0.516 1.222 0.398 1.13 0.108 1.016 0.1 0.516-0.1 0.408v0.406l-0.108 0.3-0.2 0.314-0.2 0.3-0.616 0.416-0.306 0.2-0.814 0.2h-0.508l-1.024-0.1-1.124-0.2-1.33-0.416-1.432-0.608-1.53-0.714-3.27-1.738-3.566-2.346-3.686-2.862-3.776-3.16-3.568-3.476-3.178-3.37-2.642-3.27zM569.396 436.478l-0.416-0.1-0.398-0.208-0.416-0.202-0.816-0.616-0.922-0.714-0.916-1.014-1.024-1.232-1.122-1.43-2.146-3.27-2.246-3.882-2.246-4.392-2.144-4.79-1.938-4.908-1.532-4.59-1.23-4.392-0.714-3.776-0.3-1.746-0.108-1.63-0.1-1.33 0.1-1.222 0.208-1.024 0.102-0.508 0.208-0.306 0.2-0.408 0.408-0.408 0.306-0.2 0.308-0.108h0.614l0.408 0.108 0.406 0.2 0.408 0.2 0.814 0.618 0.924 0.714 1.016 1.024 1.032 1.222 1.014 1.43 2.146 3.268 2.246 3.884 2.244 4.392 2.146 4.79 1.938 4.908 1.54 4.7 1.222 4.284 0.708 3.882 0.316 1.738 0.1 1.532 0.1 1.43-0.1 1.232-0.208 1.014-0.1 0.408-0.2 0.406-0.208 0.308-0.202 0.308-0.208 0.2-0.308 0.108-0.306 0.1h-0.608zM562.144 185.062l-0.208 0.308-0.306 0.406-0.716 0.714-1.014 0.816-1.23 0.814-3.060 1.532-3.678 1.638-4.39 1.636-4.798 1.432-5.314 1.322-5.306 1.124-5.108 0.814-4.594 0.416-4.084 0.2-3.472-0.2-1.432-0.108-1.226-0.308-1.018-0.298-0.408-0.208-0.308-0.306-0.306-0.2-0.206-0.208-0.204-0.306-0.1-0.3v-0.614l0.1-0.416 0.204-0.298 0.206-0.408 0.306-0.306 0.716-0.816 1.018-0.714 1.226-0.814 3.066-1.638 3.676-1.638 4.394-1.53 4.792-1.532 5.314-1.33 5.314-1.116 5.1-0.714 4.6-0.516 4.084-0.1 3.466 0.1 1.432 0.208 1.23 0.308 1.014 0.298 0.416 0.208 0.3 0.208 0.306 0.298 0.208 0.208 0.2 0.306 0.1 0.3v0.614l-0.1 0.416-0.202 0.298zM960.098 262.678l-0.208 0.914-0.2 0.816-0.308 0.616-0.306 0.616-0.408 0.398-0.308 0.216-0.208 0.1-0.298 0.1h-0.208l-0.608 0.1-0.714-0.2-0.616-0.208-0.814-0.408-0.716-0.616-1.738-1.432-1.838-1.828-2.044-2.462-4.284-6.022-4.6-7.452-4.906-8.882-4.89-9.906-4.908-10.828-4.39-11.022-3.776-10.53-2.96-9.598-2.146-8.574-1.23-7.244-0.3-3.17-0.1-2.652 0.1-2.246 0.202-0.922 0.208-0.824 0.308-0.608 0.406-0.608 0.408-0.416 0.298-0.2 0.216-0.108 0.298-0.1h0.208l0.608-0.1 0.714 0.2 0.616 0.208 0.814 0.408 0.714 0.616 1.738 1.422 1.838 1.848 2.046 2.444 4.284 5.922 4.6 7.56 4.898 8.882 4.898 9.906 4.808 10.828 4.39 11.030 3.776 10.512 2.96 9.598 2.146 8.584 1.322 7.252 0.306 3.16 0.102 2.662-0.2 2.248zM291.222 386.336l2.142-4.592 1.226-1.838 1.326-1.638 1.326-1.322 1.432-1.024 1.53-0.814 1.634-0.408 1.634-0.108 1.738 0.208 1.734 0.408 1.738 0.814 1.734 1.132 1.838 1.322 3.572 3.576 3.676 4.6 3.68 5.606 3.676 6.538 3.678 7.352 7.042 17.266 6.538 20.012 5.922 22.364 4.904 24.204 3.676 24.406 2.14 23.076 0.618 21.038-0.716 18.584-0.918 8.17-1.226 7.352-1.532 6.534-1.838 5.618-2.25 4.594-1.222 1.838-1.226 1.634-1.43 1.326-1.428 1.024-1.534 0.816-1.634 0.408-1.63 0.104-1.738-0.104-1.734-0.508-1.738-0.818-1.732-1.020-1.844-1.43-3.572-3.576-3.676-4.59-3.676-5.518-3.676-6.534-3.676-7.456-7.044-17.258-6.538-20.014-5.822-22.366-5.002-24.202-3.678-24.406-2.042-23.076-0.714-21.042 0.714-18.582 0.92-8.166 1.226-7.354 1.53-6.538 1.942-5.622zM286.014 344.168l-0.716-6.846-0.51-15.52 0.818-17.564 2.246-19.096 3.676-20.218 4.902-19.912 5.718-18.38 6.328-16.342 6.846-13.99 3.472-6.030 3.572-5.306 3.472-4.39 3.576-3.678 3.466-2.76 1.634-1.116 1.738-0.824 1.634-0.506 1.634-0.316 1.632-0.092 1.532 0.2 1.532 0.408 1.43 0.714 1.326 1.024 1.326 1.124 1.126 1.43 1.124 1.63 2.042 3.984 1.738 4.798 1.426 5.522 1.124 6.22 0.714 6.846 0.512 15.626-0.818 17.458-2.142 19.096-3.676 20.218-4.902 20.020-5.718 18.272-6.434 16.452-6.74 13.99-3.572 5.922-3.472 5.304-3.576 4.492-3.468 3.676-3.476 2.762-1.734 1.014-1.734 0.824-1.632 0.508-1.634 0.306-1.634 0.11-1.536-0.208-1.53-0.408-1.432-0.714-1.326-1.024-1.326-1.122-1.124-1.432-1.124-1.628-2.044-3.992-1.734-4.692-1.432-5.624-1.12-6.22zM592.168 384.296l-5.314-1.022-5.314-1.332-4.89-1.43-4.398-1.532-3.668-1.628-1.638-0.816-1.432-0.814-1.222-0.814-1.032-0.714-0.708-0.824-0.306-0.308-0.2-0.406-0.208-0.308-0.108-0.406v-0.606l0.108-0.308 0.208-0.306 0.2-0.202 0.306-0.314 0.308-0.206 0.398-0.2 1.032-0.316 1.222-0.298 1.432-0.208 3.466-0.102 4.084 0.102 4.6 0.506 5.108 0.716 5.306 1.13 5.314 1.322 4.798 1.43 4.39 1.532 3.776 1.638 2.96 1.628 1.232 0.714 1.014 0.816 0.814 0.714 0.208 0.416 0.306 0.298 0.102 0.416 0.1 0.298v0.616l-0.1 0.298-0.202 0.316-0.208 0.2-0.308 0.306-0.298 0.208-0.416 0.2-1.014 0.308-1.232 0.306-1.43 0.2-3.468 0.102-4.084-0.102-4.59-0.406-5.004-0.808zM374.344 299.846l10.418-12.866 10.316-11.446 10.006-9.796 9.394-8.168 4.39-3.268 4.084-2.754 3.88-2.254 3.47-1.628 3.27-1.024 1.43-0.308 1.328-0.1 1.226 0.1 1.124 0.208 1.018 0.298 0.924 0.616 0.814 0.714 0.612 0.916 0.512 1.032 0.308 1.114 0.204 1.332 0.1 1.53-0.204 3.27-0.612 3.882-1.226 4.292-1.634 4.69-2.042 5.008-5.41 11.228-7.048 12.158-8.474 12.86-9.702 13.38-10.418 12.868-10.312 11.436-10.006 9.906-9.398 8.068-4.386 3.376-4.088 2.754-3.876 2.246-3.476 1.638-3.266 1.014-1.43 0.308-1.326 0.108-1.226-0.108-1.124-0.208-1.024-0.298-0.92-0.616-0.814-0.716-0.612-0.914-0.512-1.024-0.306-1.222-0.206-1.33-0.104-1.43 0.104-3.37 0.716-3.786 1.226-4.284 1.628-4.798 2.046-5.006 5.41-11.228 7.044-12.16 8.376-12.866 9.804-13.374zM431.328 125.122l0.408-1.43 1.326-3.070 1.838-3.36 2.552-3.676 3.066-3.884 3.676-4.184 8.784-8.682 10.72-9.192 12.254-9.398 13.582-9.29 14.094-8.684 13.478-7.352 12.766-6.022 11.538-4.592 5.214-1.638 4.79-1.222 4.392-0.822 3.892-0.408 3.26 0.1 1.53 0.208 1.232 0.308 1.222 0.408 0.914 0.608 0.924 0.714 0.616 0.822 0.498 0.924 0.316 1.016 0.1 1.23v1.222l-0.306 1.322-0.408 1.43-1.23 3.070-1.938 3.368-2.554 3.676-3.060 3.876-3.576 4.192-8.882 8.684-10.612 9.182-12.26 9.398-13.582 9.398-14.094 8.674-13.478 7.362-12.766 6.022-11.542 4.49-5.206 1.63-4.798 1.23-4.396 0.816-3.876 0.406-3.374-0.108-1.426-0.2-1.332-0.3-1.122-0.416-1.024-0.616-0.816-0.714-0.714-0.814-0.512-0.916-0.302-1.014-0.104-1.23 0.104-1.232 0.204-1.32zM566.734 205.996l2.046-2.652 1.014-1.024 0.924-0.814 0.814-0.608 0.408-0.208 0.308-0.208 0.406-0.1h0.614l0.308 0.1 0.306 0.208 0.202 0.208 0.208 0.2 0.2 0.408 0.208 0.306 0.1 0.508 0.208 1.024v2.552l-0.208 1.638-0.2 1.73-0.816 3.776-1.23 4.392-1.53 4.598-1.948 4.898-2.136 4.8-2.146 4.398-2.246 3.876-2.144 3.26-1.124 1.43-1.024 1.232-0.914 1.022-0.924 0.816-0.814 0.606-0.416 0.216-0.4 0.2-0.416 0.1h-0.604l-0.308-0.1-0.308-0.2-0.208-0.216-0.2-0.2-0.2-0.406-0.102-0.308-0.108-0.508-0.208-1.022-0.1-1.232 0.1-1.322 0.416-3.368 0.814-3.778 1.124-4.39 1.53-4.592 1.938-4.906 2.146-4.806 2.246-4.392 2.246-3.876 2.148-3.266zM835.408 60.48l-0.714 0.816-0.914 0.714-1.13 0.608-1.322 0.616-1.432 0.416-3.576 0.616-4.284 0.2-4.906-0.1-11.538-1.33-13.582-2.662-15.218-3.876-16.542-5.208-17.358-6.33-17.050-7.152-15.626-7.352-13.88-7.454-11.744-7.252-9.298-6.946-3.676-3.16-2.96-3.068-2.246-2.854-0.814-1.33-0.616-1.33-0.308-1.222-0.208-1.124v-1.124l0.306-1.024 0.508-0.914 0.714-0.824 0.924-0.708 1.124-0.616 1.33-0.616 1.43-0.408 3.578-0.616 4.284-0.208 4.898 0.108 11.542 1.322 13.582 2.662 15.212 3.876 16.442 5.208 17.36 6.338 17.056 7.144 15.728 7.352 13.79 7.46 11.844 7.244 9.292 6.946 3.676 3.16 2.96 3.068 2.254 2.862 0.814 1.322 0.608 1.33 0.308 1.222 0.2 1.124v1.13l-0.3 1.016-0.522 0.928zM365.154-53.688l-1.222 3.060-1.944 3.37-2.552 3.676-3.064 3.884-3.572 4.184-8.882 8.682-10.622 9.192-12.254 9.398-13.582 9.39-14.094 8.682-13.478 7.354-12.766 6.022-11.542 4.498-5.206 1.63-4.798 1.222-4.392 0.824-3.878 0.398-3.374-0.1-1.426-0.2-1.332-0.308-1.124-0.408-1.018-0.616-0.82-0.714-0.714-0.814-0.512-0.916-0.302-1.032-0.104-1.222 0.104-1.222 0.204-1.33 0.408-1.43 1.326-3.060 1.838-3.37 2.552-3.676 3.066-3.884 3.676-4.184 8.784-8.684 10.72-9.19 12.254-9.398 13.582-9.282 14.094-8.684 13.476-7.352 12.768-6.032 11.54-4.598 5.208-1.63 4.798-1.222 4.392-0.814 3.878-0.408 3.27 0.1 1.53 0.2 1.226 0.308 1.226 0.408 0.92 0.616 0.918 0.714 0.612 0.814 0.512 0.916 0.308 1.032 0.1 1.222v1.222l-0.302 1.33-0.414 1.432zM226.172 20.65l-0.204 0.308-0.308 0.408-0.714 0.714-1.020 0.814-1.226 0.814-3.064 1.54-3.676 1.63-4.392 1.638-4.798 1.43-5.31 1.322-5.306 1.124-5.106 0.814-4.596 0.416-4.088 0.202-3.472-0.202-1.426-0.108-1.226-0.308-1.024-0.298-0.408-0.208-0.306-0.308-0.304-0.2-0.204-0.208-0.204-0.306-0.104-0.298v-0.616l0.104-0.414 0.204-0.3 0.204-0.406 0.304-0.308 0.714-0.814 1.024-0.714 1.226-0.816 3.060-1.638 3.676-1.638 4.392-1.53 4.798-1.532 5.314-1.33 5.306-1.116 5.106-0.714 4.596-0.516 4.088-0.1 3.468 0.1 1.43 0.208 1.226 0.306 1.020 0.298 0.412 0.208 0.302 0.208 0.308 0.3 0.204 0.208 0.204 0.308 0.104 0.298v0.614l-0.104 0.416-0.204 0.3zM393.034 26.572l-0.206 3.576-0.204 3.476-0.306 3.468-0.408 3.468-0.308 3.376-0.506 3.26-0.412 3.178-0.512 3.16-1.224 5.92-0.612 2.76-0.714 2.754-0.82 2.552-0.714 2.346-0.814 2.346-0.816 2.154-0.918 1.938-0.82 1.838-0.918 1.738-1.020 1.432-0.922 1.322-1.020 1.222-1.024 1.022-1.020 0.824-1.022 0.608-1.024 0.408-1.020 0.314-1.018 0.1-1.024-0.1-1.024-0.314-1.020-0.408-1.022-0.608-1.020-0.824-1.024-1.022-1.018-1.222-0.92-1.322-1.024-1.432-0.918-1.738-0.816-1.838-0.922-1.938-0.816-2.154-0.818-2.346-0.71-2.346-0.82-2.552-0.714-2.754-0.612-2.76-0.612-2.96-0.616-2.96-0.508-3.16-0.406-3.178-0.512-3.26-0.308-3.376-0.406-3.468-0.308-3.468-0.204-3.476-0.206-3.576-0.104-3.568-0.1-3.684v-7.144l0.1-3.676 0.104-3.568 0.206-3.576 0.204-3.476 0.308-3.468 0.406-3.466 0.308-3.376 0.512-3.262 0.406-3.176 0.508-3.16 0.616-2.96 0.612-2.96 0.612-2.762 0.714-2.754 0.82-2.552 0.71-2.346 0.818-2.346 0.816-2.154 0.922-1.938 0.816-1.838 0.918-1.738 1.024-1.43 0.92-1.322 1.018-1.222 1.024-1.032 1.020-0.816 1.022-0.616 1.020-0.398 1.024-0.308 1.024-0.108 1.018 0.108 1.020 0.308 1.024 0.398 1.022 0.616 1.020 0.816 1.024 1.032 1.020 1.222 0.922 1.322 1.020 1.43 0.918 1.738 0.82 1.838 0.918 1.938 0.816 2.154 0.814 2.346 0.714 2.346 0.82 2.552 0.714 2.754 0.612 2.762 1.224 5.92 0.512 3.16 0.412 3.176 0.506 3.262 0.308 3.376 0.408 3.466 0.306 3.468 0.204 3.476 0.206 3.576 0.104 3.568 0.1 3.676v7.144l-0.1 3.684-0.104 3.568zM911.494 151.976l-0.208 0.516-0.208 0.202-0.2 0.2-0.202 0.216-0.314 0.1-0.508 0.2-0.714 0.1-0.708-0.1-0.824-0.1-0.924-0.308-2.038-0.822-2.354-1.222-2.652-1.63-5.922-4.284-6.746-5.722-7.452-6.844-7.752-7.96-7.976-8.792-7.66-9.090-6.836-8.784-5.822-8.166-4.692-7.454-3.576-6.538-1.23-2.862-0.914-2.446-0.618-2.144-0.1-1.024v-1.532l0.202-0.714 0.208-0.508 0.208-0.2 0.2-0.216 0.2-0.2 0.316-0.1 0.506-0.208 0.716-0.102 0.708 0.102 0.822 0.108 0.924 0.298 2.136 0.816 2.354 1.23 2.654 1.628 5.922 4.292 6.736 5.72 7.46 6.838 7.76 7.966 7.958 8.784 7.668 9.082 6.838 8.784 5.82 8.168 4.692 7.458 3.576 6.538 1.23 2.854 0.916 2.46 0.516 2.138 0.1 1.024 0.1 0.814-0.1 0.714-0.196 0.722zM175.212 293.916l0.82 3.786 0.612 4.39 0.306 4.898v5.524l-0.714 12.35-1.738 13.89-2.858 15.21-3.778 16.036-4.596 15.936-5.108 14.598-5.304 12.964-5.416 11.128-2.756 4.708-2.654 4.184-2.656 3.576-2.552 2.96-2.554 2.142-1.124 0.818-1.222 0.612-1.126 0.512-1.124 0.204-1.018 0.106-1.024-0.206-1.020-0.41-0.818-0.512-0.92-0.816-0.714-0.918-0.714-1.124-0.612-1.33-1.124-3.162-0.814-3.776-0.512-4.39-0.308-4.908v-5.514l0.716-12.352 1.732-13.888 2.862-15.22 3.778-16.036 4.594-15.926 5.112-14.498 5.306-13.074 5.414-11.126 2.758-4.7 2.652-4.184 2.658-3.578 2.552-2.86 2.552-2.246 1.124-0.814 1.222-0.618 1.124-0.516 1.124-0.2 1.024-0.1 1.022 0.2 0.92 0.416 0.918 0.5 0.816 0.822 0.818 0.924 0.71 1.116 0.616 1.33 1.016 3.162zM456.754 23.612l1.33 0.616 1.222 0.716 1.124 0.914 0.92 1.13 0.818 1.322 0.612 1.54 0.512 1.63 0.302 1.728 0.308 4.092-0.308 4.592-0.814 5.008-1.43 5.614-1.838 5.93-5.306 13.066-7.048 14.098-8.886 14.904-10.518 15.21-11.436 14.614-11.542 12.958-11.336 11.028-10.824 8.982-5.102 3.576-4.904 2.97-4.594 2.344-4.188 1.638-3.984 1.016-1.834 0.208h-1.638l-1.63-0.208-1.43-0.298-1.432-0.618-1.22-0.714-1.126-0.914-0.92-1.13-0.814-1.322-0.616-1.54-0.508-1.63-0.308-1.73-0.306-3.992 0.306-4.59 0.92-5.108 1.326-5.514 1.942-6.030 5.208-12.958 7.148-14.206 8.882-14.804 10.522-15.312 11.436-14.612 11.436-12.958 11.336-11.028 10.824-8.892 5.108-3.566 4.902-3.070 4.592-2.346 4.292-1.636 3.88-0.916 1.838-0.306h1.738l1.53 0.208 1.526 0.296zM255.48 744.060l-1.124 8.782 0.1 8.272 0.512 3.88 0.716 3.78 1.122 3.572 1.432 3.472 1.838 3.268 2.042 3.064 1.19 1.448 0.446 1.92 0.92 2.858 2.96 6.23 4.288 6.742 5.514 7.352 6.846 7.76 7.86 8.272 18.996 17.362 22.772 18.28 26.14 18.688 28.902 18.584 29.816 17.154 28.594 14.606 26.756 11.842 24.1 8.886 10.928 3.27 10.11 2.344 8.992 1.536 8.062 0.716 6.838-0.208 2.96-0.506 2.652-0.716 2.354-0.918 1.938-1.124 1.638-1.534 1.322-1.634 0.924-1.938 0.258-1.036 0.756-0.908 1.638-2.35 1.532-2.756 2.552-6.534 2.246-8.068 1.63-9.498 1.23-10.724 0.814-11.844 0.1-26.96-1.838-30.636-3.776-33.392-5.722-35.638-7.344-35.332-8.484-32.578-9.29-29.206-9.806-25.222-4.898-10.824-5.002-9.498-5.008-8.272-4.898-6.742-4.798-5.206-2.35-2.042-2.35-1.634-2.246-1.122-2.25-0.82-0.382-0.038-2.27-1.8-3.164-2.042-3.374-1.838-3.676-1.532-7.862-2.348-8.782-1.328-9.394-0.308-10.010 0.612-10.622 1.534-11.128 2.554-11.44 3.472-11.744 4.288-12.046 5.31-12.154 6.126-12.256 6.946-12.15 7.864-12.152 8.678-11.638 9.294-10.93 9.598-10.11 9.802-9.19 10.010-8.376 10.11-7.354 10.11-6.534 10.11-5.414 9.906-4.39 9.806-3.37 9.494-2.24 9.090zM440.14 736.954l4.462-3.92 10.11-9.802 9.19-10.010 3.734-4.508 0.35 6.142 3.78 33.492 5.718 35.638 0.306 1.46-10.010-14.426-15.112-19.508-12.528-14.558zM356.566 788.606l4.708-1.758 12.052-5.208 12.15-6.23 8.614-4.882 10.176 16.422 14.092 20.318 15.114 19.608 3.97 4.62-5.908-3.8-29.822-17.158-28.59-14.604-16.556-7.328zM656.194-11.104l-0.714 1.33-1.024 1.322-1.124 1.432-3.060 2.752-3.984 2.762-4.798 2.762-5.514 2.644-6.33 2.762-14.504 5.208-16.852 4.698-18.788 4.184-20.318 3.476-20.428 2.446-19.196 1.332-17.466 0.208-15.42-0.822-6.84-0.816-6.026-1.014-5.41-1.332-4.596-1.53-3.676-1.738-1.532-0.924-1.33-1.014-1.024-1.124-0.814-1.124-0.612-1.23-0.308-1.222v-1.222l0.206-1.332 0.406-1.33 0.714-1.322 1.024-1.33 1.124-1.422 3.064-2.762 3.98-2.762 4.802-2.754 5.51-2.652 6.334-2.762 14.5-5.206 16.852-4.7 18.688-4.184 20.32-3.476 20.426-2.446 19.196-1.332 17.566-0.2 15.42 0.816 6.736 0.814 6.128 1.014 5.416 1.332 4.59 1.53 3.676 1.738 1.532 0.924 1.33 1.014 1.024 1.132 0.814 1.114 0.616 1.23 0.308 1.222v1.222l-0.2 1.332-0.414 1.332zM228.522 44.854l2.14-3.268 1.126-1.324 1.020-1.23 0.92-1.014 0.918-0.816 0.82-0.616 0.406-0.208 0.408-0.208 0.408-0.1h0.614l0.302 0.1 0.308 0.208 0.204 0.208 0.204 0.2 0.206 0.416 0.208 0.3 0.1 0.516 0.206 1.014 0.104 1.23-0.104 1.432-0.102 1.53-0.306 1.738-0.714 3.876-1.226 4.284-1.532 4.708-1.942 4.898-2.142 4.798-2.144 4.392-2.246 3.876-2.246 3.278-1.024 1.322-1.024 1.222-0.914 1.024-0.918 0.814-0.924 0.616-0.408 0.208-0.406 0.2-0.308 0.1h-0.714l-0.308-0.1-0.306-0.2-0.206-0.208-0.204-0.208-0.204-0.408-0.206-0.308-0.104-0.506-0.204-1.024v-2.644l0.204-1.54 0.206-1.738 0.818-3.876 1.124-4.292 1.53-4.69 1.944-4.908 2.144-4.806 2.246-4.382 2.248-3.886zM225.56 33.624l-0.512 1.322-0.714 1.332-0.92 1.43-2.144 3.060-2.654 3.37-3.168 3.376-3.676 3.466-3.778 3.17-3.78 2.862-3.572 2.346-3.37 1.728-1.534 0.716-1.428 0.516-1.226 0.406-1.226 0.308h-1.53l-0.408-0.11-0.412-0.090-0.302-0.11-0.308-0.306-0.306-0.202-0.206-0.306-0.204-0.308-0.1-0.416-0.104-0.398v-0.814l0.204-1.13 0.408-1.116 0.512-1.23 0.714-1.432 0.818-1.43 2.142-3.060 2.756-3.27 3.17-3.368 3.676-3.476 3.776-3.262 3.782-2.76 3.572-2.346 3.268-1.848 1.532-0.714 1.43-0.508 1.326-0.406 1.226-0.2 1.020-0.11h0.512l0.412 0.11 0.406 0.1 0.304 0.2 0.306 0.2 0.308 0.216 0.204 0.298 0.206 0.308 0.1 0.406v0.408l0.104 0.408-0.104 0.516-0.1 1.014-0.408 1.134zM183.692 287.080l0.508-1.532 0.512-1.33 0.714-1.222 0.816-1.124 1.022-1.024 1.124-0.922 1.226-0.716 1.228-0.506 1.426-0.508 1.534-0.308 1.634-0.1 3.468 0.1 3.78 0.616 4.084 1.124 4.292 1.63 4.49 2.146 4.802 2.552 4.798 2.96 10.006 7.352 10.212 8.784 10.11 10.312 9.192 11.030 7.864 11.038 6.224 10.71 2.558 5.108 2.14 4.906 1.634 4.8 1.124 4.39 0.818 4.184 0.206 3.876-0.206 3.376-0.306 1.63-0.512 1.43-0.512 1.432-0.71 1.23-0.818 1.116-1.020 1.032-1.126 0.814-1.222 0.714-1.226 0.608-1.432 0.408-1.53 0.306-1.634 0.208-3.472-0.1-3.78-0.716-4.084-1.13-4.288-1.628-4.492-2.146-4.7-2.552-4.902-2.96-10.006-7.354-10.11-8.784-10.114-10.312-9.29-11.028-7.76-11.030-6.334-10.622-2.45-5.208-2.146-4.906-1.634-4.692-1.226-4.498-0.71-4.184-0.306-3.778 0.204-3.476 0.308-1.526zM78.714 474.264l0.512-1.228 0.71-1.426 0.818-1.43 2.146-3.064 2.752-3.27 3.17-3.368 3.676-3.472 3.776-3.27 3.782-2.756 3.572-2.35 3.268-1.838 1.536-0.714 1.43-0.506 1.322-0.408 1.226-0.208 1.024-0.1h0.512l0.408 0.1 0.406 0.106 0.308 0.204 0.302 0.204 0.308 0.204 0.204 0.308 0.206 0.308 0.104 0.408v0.408l0.104 0.408-0.104 0.51-0.104 1.024-0.408 1.124-0.512 1.326-0.714 1.326-0.916 1.43-2.144 3.066-2.658 3.368-3.164 3.368-3.676 3.472-3.778 3.168-3.78 2.856-3.572 2.35-3.374 1.734-1.53 0.714-1.432 0.512-1.226 0.408-1.226 0.308h-1.53l-0.408-0.104-0.408-0.1-0.306-0.104-0.308-0.302-0.302-0.208-0.206-0.304-0.208-0.308-0.1-0.408-0.104-0.408v-0.82l0.204-1.124 0.412-1.124zM116.192 437.194l-0.204 0.408-0.308 0.308-0.714 0.814-1.020 0.714-1.226 0.82-3.064 1.632-3.676 1.63-4.392 1.536-4.798 1.53-5.31 1.328-5.31 1.022-5.106 0.816-4.592 0.412-4.088 0.204-3.472-0.204-1.43-0.104-1.222-0.308-1.024-0.304-0.408-0.204-0.306-0.308-0.304-0.204-0.204-0.204-0.208-0.308-0.102-0.308v-0.612l0.102-0.408 0.412-0.61 0.304-0.412 0.714-0.71 1.024-0.82 1.222-0.818 3.064-1.63 3.676-1.534 4.392-1.634 4.798-1.422 5.31-1.332 5.31-1.13 5.106-0.814 4.596-0.398 4.084-0.208 3.472 0.208 1.43 0.1 1.226 0.298 1.020 0.308 0.406 0.208 0.308 0.298 0.308 0.208 0.204 0.208 0.204 0.3 0.104 0.314v0.606l-0.104 0.408-0.204 0.31zM121.908 456.802l1.024-1.226 0.92-1.024 0.918-0.816 0.816-0.61 0.406-0.204 0.408-0.204 0.412-0.104h0.61l0.306 0.104 0.304 0.204 0.208 0.204 0.204 0.204 0.206 0.408 0.204 0.308 0.1 0.506 0.206 1.024 0.104 1.226-0.104 1.43-0.102 1.53-0.306 1.734-0.714 3.88-1.222 4.292-1.536 4.7-1.938 4.898-2.146 4.8-2.144 4.39-2.246 3.88-2.246 3.268-1.020 1.332-1.022 1.222-0.92 1.024-0.918 0.814-0.92 0.616-0.408 0.204-0.41 0.204-0.304 0.1h-0.718l-0.308-0.1-0.306-0.204-0.206-0.204-0.204-0.204-0.204-0.412-0.206-0.304-0.104-0.51-0.204-1.024v-2.652l0.204-1.534 0.208-1.734 0.814-3.88 1.124-4.292 1.53-4.696 1.944-4.904 2.144-4.798 2.246-4.392 2.246-3.88 2.146-3.268 1.124-1.326z" /> -<glyph unicode="" glyph-name="vc-bitbucket-01" data-tags="vc-bitbucket-01" d="M512 958.998c-223.98 0-465.038-53.2-465.038-170 0-22.484 9.008-42.59 25.028-60.426l369.264-82.752v-25.018c23.574-1.18 47.246-1.8 70.746-1.8 223.98 0 465.038 53.192 465.038 169.996 0 116.8-241.058 170-465.038 170zM802.022 733.23c-76.916-23.68-179.914-36.728-290.022-36.728s-213.106 13.046-290.030 36.728c-80.15 24.68-97.506 50.658-97.506 55.768s17.356 31.088 97.506 55.768c76.924 23.682 179.922 36.724 290.030 36.724s213.106-13.042 290.022-36.724c80.158-24.68 97.516-50.656 97.516-55.768s-17.358-31.088-97.516-55.768zM519.944 571.144c144.672 0 303.108 19.47 412.564 67.378l-102.826-616.966c0 0-84.552-84.552-295.932-84.552-295.934 0-338.21 84.552-338.21 84.552l-40.112 240.652 285.826-64.050v374.96c26.43-1.296 52.788-1.974 78.69-1.974zM173.138 580.904c-24.168 16.986-46.858 37.222-67.444 60.070-3.312 3.79-3.246 8.108-1.304 9.982 1.312 1.28 3.402 1.57 5.606 0.768 1.132-0.414 2.246-1.098 3.228-1.998 41.096-37.454 88.738-66.692 137.786-84.56 49.030-17.836 96.682-23.268 137.786-15.738 0.982 0.182 2.098 0.058 3.228-0.356 2.196-0.792 4.292-2.608 5.606-4.846 1.942-3.286 2.008-7.646-1.28-9.024-20.618-7.862-43.3-11.584-67.476-10.982-25.052 0.62-51.242 5.838-77.856 15.516h-0.016c-26.612 9.692-52.812 23.548-77.864 41.168zM171.628 502.552c-13.072 23.532-20.312 44.084-22.128 63.076-0.182 1.882 0.602 3.476 2.13 4.080 0.974 0.396 2.13 0.346 3.328-0.084 0.668-0.24 1.33-0.61 1.974-1.082 11.89-8.884 24.020-16.87 35.076-23.458 2.246-1.354 4.062-3.682 4.822-5.962 8.042-24.968 28.586-53.358 50.136-83.182 0.876-1.172 2.082-2.658 4.046-3.37 1.974-0.726 3.188-0.082 4.046 0.43 21.55 14.136 42.096 27.636 50.146 46.742 0.75 1.734 2.566 2.742 4.83 2.454 11.032-1.446 23.134-2.394 35.042-2.172 0.634 0.008 1.304-0.108 1.964-0.346 1.198-0.438 2.376-1.256 3.352-2.354 1.486-1.676 2.328-3.932 2.13-5.708-1.816-17.66-9.050-32.828-22.122-46.858-12.294-13.17-28.304-23.682-43.794-33.838-1.13-0.742-2.254-1.468-3.362-2.212-1.13-0.734-1.742-2.792-0.272-5.168 3.626-5.83 7.092-11.694 10.33-17.614 15.448-28.214 23.474-52.482 24.524-74.182 0.082-1.536-0.47-2.806-1.512-3.526-1.042-0.71-2.486-0.808-3.996-0.256l-33.534 12.204c-2.888 1.048-5.284 4.154-5.498 7.11-2.362 32.74-29.33 70.052-57.866 109.554-15.488 21.44-31.506 43.602-43.792 65.722zM215.028 412.18c10.056-14.152 16.81-24.268 22.326-33.45 1.106-1.842 2.61-5.748 0.678-8.622-5.558-8.306-8.612-17.036-9.338-26.58-0.214-2.792-2.642-4.16-5.524-3.114l-33.474 12.18c-1.502 0.544-2.964 1.718-4.004 3.188s-1.594 3.154-1.52 4.632c1 19.99 8.29 37.594 22.394 53.926 0.562 0.66 2.048 1.85 4.55 0.934 1.962-0.718 3.118-1.988 3.912-3.094zM269.788 510.868c2.592-0.942 5.070-3.97 5.070-6.954 0-0.858-0.198-1.402-0.404-1.88-1.396-3.22-7.746-14.318-19.578-21.51-1.32-0.802-2.824-0.504-3.864-0.126l-0.008 0.008c-1.032 0.374-2.536 1.166-3.856 2.932-11.832 15.804-18.182 31.526-19.578 35.754-0.206 0.626-0.404 1.32-0.404 2.188 0 2.98 2.476 4.204 5.070 3.252 2.138-0.776 8.242-3.624 18.744-7.456l0.066-0.016c10.5-3.832 16.604-5.418 18.742-6.192z" /> -<glyph unicode="" glyph-name="vc-git" data-tags="vc-git" d="M1003.724 400.414l-444.14-444.13c-25.724-25.7-67.388-25.7-93.080 0l-446.222 446.192c-25.708 25.702-25.708 67.38 0 93.106l305.96 305.948 115.866-115.884c-11.88-28.458-6.304-62.466 16.872-85.622 7.574-7.598 16.306-13.27 25.638-17.088v-280.596c-9.332-3.826-18.078-9.532-25.638-17.084-30.594-30.59-30.594-80.142 0-110.766 30.562-30.592 80.148-30.592 110.746 0 30.59 30.624 30.59 80.176 0 110.766-6.22 6.188-13.258 11.112-20.716 14.804l0.008 278.020 105.652-105.652c-11.652-28.348-5.964-62.148 17.042-85.17 30.616-30.608 80.176-30.608 110.784 0 30.59 30.598 30.59 80.158 0 110.744-21.89 21.924-53.512 28.030-80.916 18.586l-113.28 113.278c9.458 27.414 3.31 59.002-18.572 80.908-21.774 21.776-53.092 27.962-80.412 18.738l-117.534 117.538 92.652 92.666c25.712 25.704 67.392 25.704 93.066 0l446.224-446.196c25.7-25.704 25.7-67.396 0-93.106z" /> -<glyph unicode="" glyph-name="dbs-mongodb" data-tags="dbs-mongodb" d="M741.986 464.99c-2.96 183.898-99.554 335.854-198.652 431.274-31.51 30.342-36.596 62.736-36.596 62.736s0.674-14.242-15.682-31.368c-68.76-71.996-112.456-110.064-154.214-201.264-51.99-113.54-54.888-263.99-54.888-263.99s2.766-123.842 54.888-224.786c40.35-78.146 111.436-142.022 139.598-165.458 2.59 8.834 7.56 26.748 10.958 44.996 5.268 28.318 7.634 58.436 7.656 58.734 0.524 6.72 6.072 11.944 12.812 12.060 0.076 0 0.15 0 0.224 0 6.646 0 12.248-4.99 12.988-11.62 0.048-0.45 5.138-45.386 14.996-72.832 4.998-13.924 13.904-18.59 14.288-18.782 3.62-1.48 6.022-4.358 7.17-8.1 0.066-0.184 0.092-0.376 0.132-0.566 27.114 22.292 187.932 164.066 184.322 388.966zM469.37 207.936c-4.666-7.452-7.598-16.018-8.3-25.066-0.016-0.216-0.82-10.388-2.508-24.122-26.374 27.664-55.278 63.076-75.41 102.066-44.882 86.93-49.748 194.548-50.126 205.336 0.37 12.288 5.436 146.666 51.004 246.184 25.25 55.146 51.324 89.146 85.34 125.982v-630.38zM544.682 72.918c0 0-8.642-13.018-10.456-28.744-4.566-39.59-5.222-107.174-5.222-107.174l-26.142 7.844c0 0-0.71 44.53-5.232 78.412-3.006 22.556-10.454 39.214-10.454 39.214s8.11 25.6 13.070 52.274c5.468 29.382 7.838 60.116 7.838 60.116s5.18-46.536 15.688-75.802c7.11-19.82 20.91-26.14 20.91-26.14z" /> -<glyph unicode="" glyph-name="dbs-mysql" data-tags="dbs-mysql" d="M505.034 386.57h94.536v-22.44h-96.154c-0.974 0-2.266-0.214-3.24-0.214-11.976-1.082-15.538-3.028-17.154-9.932-0.328-1.080-0.328-1.946-0.328-2.81v-15.32c0-1.082 0-1.948 0.328-3.028 1.618-9.066 8.092-13.158 21.686-13.158h40.792c10.038 0 20.392-1.73 28.818-4.972 15.86-6.040 23.96-15.104 23.96-24.818v-24.602c0-11.876-7.126-20.944-21.692-27.628-8.75-4.102-19.752-6.47-31.088-6.47h-96.798v22.44h92.922c1.296 0 2.262 0.214 3.56 0.214 6.47 0.434 11.328 2.162 14.238 4.758 3.244 2.578 4.858 5.606 4.858 7.984v19.636c0 2.154-0.648 4.1-2.586 6.046-3.236 3.882-7.778 5.822-18.458 6.686-0.972 0.216-2.262 0.216-3.558 0.216h-34.97c-3.236 0-6.47 0.216-9.714 0.434-28.81 3.018-45.968 15.968-45.968 31.080v19.636c0 17.266 8.742 27.198 28.814 33.458 6.474 1.94 13.598 2.804 27.196 2.804zM767.134 237.986l33.168-29.934h-39.1l-26.83 24.22-27.014-1.714h-36.014c-6.162 0-12.65 0.866-19.786 2.812-21.408 5.838-31.796 17.082-31.796 35.688v80.020c0 20.334 14.282 32.668 42.5 36.56 2.92 0.434 6.164 0.648 9.082 0.648h63.918c3.242 0 6.162-0.214 9.406-0.648 28.218-3.892 42.492-16.226 42.492-36.56v-80.020c0.002-16.492-6.052-25.324-20.026-31.072zM755.698 347.13c0 0.866 0 1.948-0.324 3.038-1.946 8.648-10.704 13.624-23.678 13.624h-50.934c-14.93 0-24.652-6.488-24.652-16.66v-76.126c0-1.082 0.324-2.162 0.64-3.46 1.946-9.306 10.712-14.496 24.012-14.496h30.582l-28.096 25.368h39.1l24.51-22.124c4.508 2.412 7.484 6.088 8.516 10.82 0.324 1.072 0.324 2.162 0.324 3.244v76.772zM218.562 386.356c-25.576 7.984-42.738 1.080-50.504-16.186l-51.154-114.392-49.532 114.392c-7.448 17.266-24.93 24.17-50.504 16.186-10.684-3.236-15.866-9.498-15.866-22.44v-132.74h33.666v132.956l52.128-115.906c6.15-14.032 14.568-18.996 31.076-18.996 16.514 0 24.606 4.964 30.76 18.996l52.124 115.906v-132.956h33.672v132.74c-0.002 12.942-5.182 19.204-15.866 22.44zM389.016 339.746v-87.212c-0.59 0-63.804-0.15-73.214 0-18.444 0.284-20.036 9.63-19.72 13.608v73.256h-33.66c0.736-0.732-0.008-74.022 0.016-75.568 0.262-16.716 21.466-31.24 54.76-31.554h71.564v-8.824c0.004-3.626 2.562-14.398-19.108-16.694-0.266-0.016-106.316 0-106.5 0v-22.656h106.314c16.862 0.5 53.446 6.872 53.258 36.206-0.004 0.508 0.188 119.442 0.030 119.442h-33.74zM1002.292 252.534l8.132-12.444h-5.554l-7.41 12.244h-4.434v-12.244h-4.758v28.328h11.044c7.012 0 10.654-2.386 10.654-8.142 0-5.164-3.31-7.278-7.674-7.742zM998.116 256.308c3.576 0 6.688 0.334 6.688 4.292 0 3.308-3.444 3.842-6.29 3.842h-5.488v-8.134h5.090zM1023 254.254c0-14.82-11.71-24.808-24.818-24.808-13.092 0-24.808 9.988-24.808 24.808 0 14.822 11.716 24.81 24.808 24.81 13.108 0 24.818-9.988 24.818-24.81zM1017.444 254.254c0 11.254-8.6 19.654-19.262 19.654-10.78 0-19.254-8.4-19.254-19.654 0-11.244 8.474-19.652 19.254-19.652 10.662 0 19.262 8.408 19.262 19.652zM724.126 648.034c-4.316 0.080-7.37-0.468-10.596-1.176 0-0.196 0-0.39 0-0.586 0.2 0 0.39 0 0.59 0 2.062-4.23 5.698-6.954 8.242-10.598 1.956-4.122 3.918-8.238 5.88-12.354 0.2 0.196 0.398 0.39 0.59 0.586 3.65 2.566 5.314 6.674 5.298 12.946-1.464 1.54-1.682 3.464-2.946 5.298-1.676 2.446-4.936 3.828-7.058 5.884zM1008.96 346.124c2.778-2.038 4.64-5.198 8.242-6.478 0 0.2 0 0.398 0 0.59-1.896 2.404-2.378 5.722-4.118 8.242-2.544 2.544-5.108 5.098-7.652 7.652-7.484 9.93-16.974 18.646-27.070 25.89-8.042 5.782-26.066 13.582-29.426 22.948-0.192 0.2-0.392 0.398-0.592 0.598 5.706 0.64 12.392 2.704 17.658 4.118 8.848 2.372 16.758 1.756 25.89 4.118 4.126 1.182 8.242 2.362 12.36 3.528 0 0.79 0 1.57 0 2.362-4.618 4.74-7.91 11.012-12.942 15.302-13.184 11.216-27.562 22.432-42.376 31.776-8.208 5.188-18.366 8.554-27.072 12.95-2.928 1.476-8.068 2.246-10.006 4.708-4.566 5.832-7.060 13.222-10.588 20.012-7.384 14.226-14.646 29.762-21.192 44.73-4.458 10.204-7.376 20.268-12.942 29.426-26.722 43.934-55.492 70.454-100.046 96.52-9.488 5.542-20.9 7.73-32.958 10.59-6.47 0.39-12.952 0.788-19.422 1.178-3.95 1.65-8.058 6.482-11.768 8.828-14.764 9.324-52.63 29.61-63.558 2.94-6.904-16.83 10.312-33.254 16.474-41.786 4.326-5.982 9.856-12.692 12.952-19.418 2.030-4.422 2.376-8.86 4.126-13.538 4.276-11.528 7.992-24.068 13.524-34.724 2.802-5.388 5.888-11.070 9.424-15.888 2.17-2.958 5.878-4.26 6.46-8.828-3.626-5.086-3.834-12.978-5.872-19.42-9.2-29.004-5.73-65.048 7.652-86.516 4.1-6.586 13.772-20.724 27.062-15.298 11.626 4.736 9.034 19.416 12.36 32.366 0.748 2.942 0.292 5.1 1.764 7.062 0-0.192 0-0.39 0-0.586 3.536-7.062 7.068-14.124 10.596-21.184 7.844-12.626 21.758-25.83 33.55-34.728 6.106-4.616 10.92-12.6 18.83-15.302 0 0.2 0 0.398 0 0.598-0.2 0-0.4 0-0.59 0-1.54 2.378-3.936 3.376-5.88 5.29-4.608 4.518-9.73 10.13-13.542 15.304-10.728 14.558-20.202 30.494-28.834 47.078-4.126 7.922-7.71 16.66-11.188 24.718-1.338 3.11-1.322 7.808-4.118 9.418-3.808-5.904-9.414-10.684-12.36-17.656-4.708-11.148-5.314-24.742-7.060-38.84-1.032-0.372-0.574-0.118-1.182-0.586-8.2 1.972-11.078 10.412-14.122 17.652-7.702 18.304-9.132 47.782-2.354 68.856 1.754 5.45 9.69 22.624 6.47 27.66-1.532 5.028-6.58 7.93-9.406 11.772-3.512 4.748-7.004 10.994-9.432 16.48-6.296 14.272-9.24 30.294-15.878 44.724-3.176 6.894-8.542 13.878-12.95 20.012-4.88 6.792-10.346 11.792-14.124 20.012-1.346 2.918-3.176 7.588-1.18 10.59 0.63 2.026 1.53 2.87 3.536 3.532 3.418 2.632 12.916-0.876 16.474-2.354 9.432-3.918 17.316-7.652 25.31-12.946 3.834-2.544 7.716-7.468 12.35-8.83 1.772 0 3.536 0 5.298 0 8.292-1.902 17.574-0.594 25.308-2.944 13.682-4.158 25.942-10.626 37.076-17.658 33.918-21.414 61.654-51.906 80.626-88.276 3.052-5.856 4.376-11.444 7.060-17.658 5.422-12.526 12.26-25.412 17.656-37.664 5.382-12.216 10.63-24.55 18.24-34.722 4-5.344 19.46-8.212 26.49-11.184 4.924-2.078 12.99-4.25 17.648-7.054 8.916-5.378 17.542-11.774 25.898-17.662 4.176-2.946 17.018-9.398 17.65-14.706-20.694 0.548-36.504-1.374-50.020-7.070-3.842-1.614-9.964-1.662-10.596-6.468 2.112-2.212 2.446-5.524 4.126-8.242 3.218-5.224 8.666-12.218 13.532-15.894 5.314-4.010 10.788-8.3 16.476-11.77 10.13-6.18 21.442-9.706 31.19-15.892 5.768-3.652 11.474-8.242 17.078-12.36zM841.988 270.448v116.124h-33.668v-116.338c0-23.088 17.158-36.040 51.798-38.632 3.234-0.208 6.47-0.424 9.714-0.424h87.736v22.44h-88.386c-19.742-0.002-27.194 4.97-27.194 16.83z" /> -<glyph unicode="" glyph-name="os-apple" data-tags="os-apple" d="M497.278 713.040c-10.894 59.424 17.202 120.572 51.036 161.788 37.292 45.464 101.284 80.342 155.968 84.172 9.248-62.298-16.176-122.998-49.644-165.93-35.898-46.122-97.626-81.894-157.36-80.030zM818.058 497.744c16.926 47.208 50.444 89.682 102.452 118.344-52.564 65.588-126.338 103.656-195.984 103.656-92.128 0-131.068-43.888-195.060-43.888-65.92 0-115.94 43.888-195.732 43.888-78.248 0-161.552-47.69-214.374-129.156-19.428-30.092-32.594-67.502-39.764-109.17-19.902-116.888 9.832-269.116 98.558-404.286 43.14-65.604 100.636-139.476 175.756-140.126 66.92-0.648 85.916 42.784 176.488 43.248 90.722 0.5 107.914-43.698 174.75-43.048 75.144 0.632 135.8 82.388 178.95 147.976 30.708 47.058 42.334 70.828 66.22 124.042-121.462 45.812-171.408 179.634-132.26 288.52z" /> -<glyph unicode="" glyph-name="os-linux" data-tags="os-linux_1" d="M485.86 687.090c4.582 0 8.908-1.206 12.816-3.452 3.91-2.196 7.42-5.464 10.38-9.472 2.91-4.026 5.306-8.85 6.944-14.274 1.646-5.406 2.544-11.394 2.544-17.766 0-6.346-0.906-12.342-2.57-17.782-1.662-5.488-4.068-10.378-7.036-14.462-2.978-4.092-6.554-7.394-10.514-9.682s-8.332-3.536-12.974-3.536c-4.656 0-9.064 1.248-13.042 3.536-3.974 2.288-7.536 5.59-10.496 9.682-2.952 4.084-5.322 8.974-6.92 14.462-1.614 5.44-2.46 11.436-2.42 17.782 0.076 6.372 1.024 12.36 2.72 17.766 1.68 5.424 4.126 10.248 7.12 14.274 2.994 4.008 6.538 7.278 10.496 9.472 3.978 2.246 8.352 3.452 12.952 3.452zM540.928 680.968c-4.424 0-8.616-1.13-12.426-3.144-3.816-2.062-7.252-5.006-10.128-8.632-2.878-3.66-5.208-8.010-6.814-12.842-1.606-4.84-2.494-10.188-2.494-15.778 0.008-5.58 0.906-10.902 2.544-15.77 1.638-4.848 3.986-9.282 6.888-12.982 2.936-3.708 6.394-6.72 10.254-8.798 3.876-2.096 8.118-3.26 12.592-3.26 4.408 0 8.6 1.164 12.426 3.26 3.81 2.078 7.236 5.106 10.090 8.798 2.87 3.76 5.164 8.168 6.744 13.034 1.59 4.898 2.43 10.28 2.378 15.87-0.050 5.564-0.998 10.886-2.644 15.694-1.646 4.816-4.010 9.148-6.92 12.776-2.902 3.668-6.338 6.57-10.146 8.632-3.81 2.012-7.97 3.142-12.344 3.142zM242.346 184.616c3.884 0.792 7.818 1.498 11.744 2.096 3.942 0.626 7.884 1.124 11.844 1.556 3.958 0.432 7.942 0.748 11.892 0.964 3.976 0.232 7.936 0.374 11.876 0.374 34.832 0 64.792-3.518 90.126-9.646 25.39-6.124 46.192-14.904 62.668-25.452 16.51-10.58 28.67-22.93 36.704-36.212 8.068-13.314 11.96-27.562 11.928-41.808-0.018-2.462-0.118-4.792-0.3-7.020-0.2-2.212-0.482-4.36-0.866-6.388-0.38-1.996-0.856-3.926-1.412-5.756-0.566-1.828-1.232-3.55-1.98-5.19 2.046-0.132 4.11-0.232 6.172-0.332 2.044-0.084 4.108-0.166 6.17-0.2 2.046-0.066 4.126-0.1 6.164-0.118 2.070-0.034 4.118-0.034 6.18-0.034 0.516 0 0.932 0 1.33 0 0.382 0 0.732 0 1.082 0 0.332 0 0.682 0 1.032 0 0.366 0 0.764 0 1.23 0 1.872 0 3.742 0 5.614 0.034 1.856 0 3.734 0.050 5.598 0.084 1.848 0.048 3.694 0.1 5.54 0.166 1.864 0.066 3.708 0.14 5.524 0.232-0.766 1.63-1.432 3.344-2.014 5.19-0.582 1.83-1.080 3.744-1.496 5.79-0.4 2.030-0.7 4.176-0.924 6.438-0.208 2.246-0.324 4.608-0.324 7.104-0.034 14.246 3.868 28.494 11.926 41.808 8.036 13.284 20.21 25.632 36.746 36.212 16.466 10.546 37.278 19.328 62.686 25.452 25.376 6.128 55.35 9.646 90.222 9.646 4.184 0 8.36-0.14 12.534-0.406 4.176-0.234 8.334-0.592 12.476-1.064 4.158-0.5 8.284-1.066 12.376-1.774 4.11-0.722 8.176-1.522 12.21-2.436 3.742 7.884 7.002 16.118 9.78 24.702 2.78 8.584 5.042 17.49 6.788 26.774 1.746 9.282 2.978 18.886 3.642 28.834 0.682 9.948 0.806 20.228 0.368 30.848-0.95 23.13-4.792 48.332-11.762 73.88-6.92 25.392-16.916 51.118-30.222 75.602-13.224 24.32-29.726 47.458-49.744 67.834-19.912 20.244-43.324 37.842-70.57 51.284 10.544 2.362 20.392 6.080 29.176 10.912 8.766 4.824 16.5 10.696 22.878 17.424 6.348 6.688 11.354 14.23 14.698 22.314 3.326 8.084 5.016 16.734 4.758 25.684-0.334 10.828-3.46 21.092-8.824 30.424-5.35 9.282-12.934 17.648-22.166 24.652-9.232 6.986-20.126 12.64-32.154 16.534-12.010 3.892-25.15 6.046-38.874 6.046-11.958 0-23.42-1.638-34.018-4.65-10.62-2.976-20.4-7.352-28.984-12.806-8.608-5.506-16.010-12.076-21.866-19.512-5.872-7.436-10.198-15.72-12.592-24.586-1.198 13.24-4.708 25.716-10.066 36.978-5.34 11.226-12.516 21.224-21.126 29.608-8.566 8.342-18.562 15.022-29.558 19.662-10.978 4.59-22.962 7.136-35.564 7.136 0 0-0.034 0-0.048 0-0.034 0-0.050 0-0.066 0-0.018 0-0.034 0-0.066 0-0.018 0-0.050 0-0.066 0-13.376 0-26.184-2.846-37.86-8.036-11.718-5.182-22.348-12.716-31.374-22.008-9.032-9.33-16.466-20.51-21.74-32.918-5.306-12.476-8.434-26.248-8.85-40.704v-0.166c-0.284-9.682 0.692-19.13 2.762-28.114 2.062-9.016 5.24-17.582 9.348-25.49 4.142-7.936 9.2-15.228 15.080-21.716 5.878-6.486 12.55-12.16 19.852-16.816-23.986-14.44-44.644-32.272-62.244-52.182-17.7-20.094-32.312-42.35-44.040-65.488-11.802-23.32-20.702-47.556-26.872-71.41-6.222-24.002-9.664-47.598-10.562-69.374-0.432-10.586-0.3-20.8 0.382-30.682 0.698-9.914 1.912-19.46 3.642-28.676 1.762-9.208 4.008-18.064 6.762-26.582 2.748-8.532 5.99-16.716 9.684-24.526zM515.328 873.732c17.65-0.236 35.098-1.764 52.166-4.516 17.066-2.748 33.766-6.728 49.91-11.898 16.16-5.172 31.794-11.528 46.7-18.974 14.93-7.484 29.144-16.098 42.452-25.792 12.276-8.92 23.57-18.614 33.758-28.922 10.222-10.31 19.356-21.256 27.206-32.6 7.884-11.376 14.514-23.172 19.746-35.182 5.238-12.042 9.064-24.336 11.344-36.626 1.43-7.652 2.71-14.79 3.842-21.526 1.148-6.744 2.164-13.058 3.078-19.080s1.746-11.694 2.512-17.148c0.766-5.44 1.48-10.628 2.18-15.67 0.756-5.34 1.456-10.396 2.162-15.278 0.714-4.89 1.43-9.608 2.162-14.23 0.748-4.632 1.532-9.184 2.412-13.74 0.88-4.592 1.846-9.132 2.91-13.806 7.128-12.666 14.456-22.856 21.776-31.272 7.318-8.4 14.654-15.004 21.756-20.576 7.088-5.556 13.99-10.064 20.428-14.274 6.47-4.208 12.492-8.118 17.898-12.474 8.284-6.678 17.564-13.542 27.22-20.494 9.656-6.968 19.704-14.072 29.444-21.324 9.782-7.27 19.262-14.654 27.82-22.156 8.566-7.536 16.194-15.212 22.222-23.006 3.542-4.582 6.67-9.33 9.082-13.888 2.43-4.542 4.194-8.95 4.99-12.842 0.806-3.908 0.666-7.318-0.648-9.914-1.314-2.56-3.826-4.358-7.776-4.99-0.508-0.1-1.024-0.132-1.556-0.232-0.532-0.050-1.046-0.1-1.58-0.132-0.532-0.050-1.080-0.066-1.628-0.084-0.534-0.016-1.074-0.048-1.63-0.048-8.25 0-17.5 2.244-27.212 5.754-9.732 3.476-19.946 8.218-30.192 13.242-10.246 5.006-20.494 10.272-30.324 14.82-9.814 4.592-19.228 8.466-27.762 10.646-1.174 0.332-2.372 0.624-3.576 0.874-1.232 0.25-2.446 0.474-3.694 0.656-1.23 0.2-2.486 0.382-3.726 0.5-1.264 0.182-2.512 0.248-3.776 0.34 1.13-5.646 1.93-11.318 2.32-17.258 0.39-5.97 0.398-12.192 0-18.93-0.39-6.752-1.206-14.006-2.438-22.006-1.246-8.036-2.91-16.8-5.040-26.556-0.898-4.292-2.478-10.828-5.024-19.088-2.53-8.268-6.022-18.264-10.762-29.442-4.776-11.236-10.78-23.638-18.332-36.746-7.584-13.14-16.702-26.948-27.696-40.854 13.556-4.548 26.48-10.138 38.342-16.576 11.876-6.454 22.672-13.748 31.97-21.63 9.332-7.918 17.132-16.436 23.004-25.318 5.888-8.858 9.806-18.098 11.354-27.47 0.848-5.19 1.256-10.122 1.256-14.796-0.016-4.69-0.464-9.064-1.33-13.174-0.866-4.092-2.146-7.852-3.844-11.278-1.696-3.452-3.816-6.512-6.354-9.24-2.294-2.496-4.924-4.692-7.852-6.562-2.96-1.888-6.206-3.444-9.764-4.714-3.56-1.266-7.436-2.188-11.594-2.838-4.158-0.624-8.618-0.922-13.366-0.922-13.284 0-26.556 0-39.714-0.026-13.14 0-26.2 0-39.032 0-12.834 0-25.492-0.034-37.834-0.048-12.344-0.036-24.42-0.058-36.114-0.126-9.24 0-18.248 0-26.956 0s-17.142 0-25.226 0-15.844 0-23.22 0c-7.37 0-14.374 0-20.944 0-6.902 0-13.888 0.14-20.708 0.664-6.82 0.534-13.472 1.432-19.696 2.928-6.236 1.522-12.042 3.66-17.2 6.654-5.124 2.954-9.58 6.81-13.108 11.702-2.062-0.066-4.126-0.166-6.188-0.24-2.070-0.1-4.126-0.184-6.22-0.242-2.080-0.042-4.184-0.116-6.29-0.148-2.096-0.034-4.24-0.066-6.386-0.066h-9c-2.244 0-4.464 0.034-6.67 0.066-2.21 0.034-4.408 0.108-6.57 0.166-2.18 0.082-4.35 0.166-6.504 0.266-2.162 0.132-4.324 0.232-6.47 0.376-3.526-4.964-7.984-8.824-13.124-11.818-5.14-3.020-10.938-5.148-17.176-6.688-6.228-1.522-12.882-2.42-19.704-2.954-6.82-0.524-13.79-0.664-20.708-0.664-6.57 0-13.556 0-20.944 0-7.37 0-15.136 0-23.204 0-8.11 0-16.518 0-25.226 0s-17.714 0-26.956 0c-11.71 0.066-23.77 0.090-36.122 0.126-12.368 0.016-24.994 0.048-37.834 0.048-12.858 0-25.9 0-39.058 0-13.14 0.026-26.398 0.026-39.688 0.026-4.792 0-9.266 0.298-13.44 0.922-4.166 0.65-8.034 1.572-11.594 2.838-3.542 1.272-6.788 2.826-9.714 4.714-2.928 1.872-5.54 4.066-7.834 6.562-2.528 2.728-4.64 5.79-6.336 9.24-1.698 3.426-2.994 7.186-3.842 11.278-0.866 4.11-1.314 8.484-1.332 13.174-0.016 4.676 0.4 9.608 1.256 14.796 1.522 9.406 5.49 18.706 11.436 27.604 5.93 8.916 13.824 17.45 23.22 25.368 9.398 7.936 20.294 15.238 32.288 21.674 11.944 6.438 24.976 12.010 38.624 16.518-10.944 13.924-20.044 27.712-27.612 40.82-7.518 13.074-13.524 25.484-18.264 36.68-4.742 11.178-8.234 21.158-10.78 29.408-2.528 8.226-4.1 14.764-5.006 19.054-2.128 9.806-3.792 18.588-5.040 26.638-1.24 8.036-2.046 15.304-2.446 22.056-0.4 6.738-0.4 12.974-0.016 18.93 0.4 5.956 1.18 11.636 2.312 17.276-1.38-0.092-2.788-0.192-4.184-0.308-1.406-0.14-2.82-0.332-4.234-0.498-1.398-0.232-2.794-0.482-4.192-0.74-1.38-0.308-2.76-0.6-4.108-0.972-8.55-2.18-17.948-6.054-27.762-10.646-9.83-4.548-20.084-9.814-30.306-14.82-10.238-5.024-20.444-9.766-30.158-13.242-9.714-3.51-18.914-5.754-27.13-5.754-0.548 0-1.082 0.034-1.63 0.048-0.548 0.018-1.074 0.034-1.598 0.084-0.532 0.034-1.064 0.082-1.596 0.132-0.516 0.1-1.022 0.132-1.53 0.232-3.958 0.632-6.47 2.43-7.792 4.99-1.322 2.596-1.438 6.006-0.64 9.914 0.816 3.892 2.554 8.3 4.99 12.842 2.428 4.558 5.54 9.306 9.084 13.888 6.038 7.792 13.672 15.47 22.24 23.006 8.534 7.502 18.032 14.886 27.78 22.156 9.748 7.252 19.744 14.356 29.392 21.324 9.63 6.954 18.878 13.816 27.13 20.494 5.588 4.558 11.876 8.618 18.614 12.99 6.72 4.376 13.922 9.132 21.342 15.088 7.41 5.914 15.046 13.026 22.656 22.174 7.586 9.13 15.154 20.226 22.456 34.182 0.882 4.11 1.672 8.15 2.412 12.226 0.716 4.092 1.398 8.184 2.054 12.376 0.64 4.15 1.272 8.444 1.904 12.834 0.648 4.45 1.282 9.008 1.962 13.782 0.698 5.042 1.414 10.23 2.178 15.67 0.766 5.456 1.598 11.126 2.496 17.148 0.932 6.022 1.93 12.336 3.078 19.080 1.13 6.736 2.404 13.874 3.842 21.526 2.262 12.292 6.106 24.584 11.344 36.626 5.222 12.010 11.844 23.804 19.728 35.182 7.86 11.344 16.966 22.29 27.198 32.6 10.18 10.308 21.482 20.002 33.75 28.922 13.308 9.694 27.514 18.306 42.452 25.792 14.886 7.448 30.506 13.802 46.676 18.974 16.118 5.17 32.8 9.15 49.852 11.898 17.050 2.752 34.45 4.28 52.064 4.516h5.154zM514.064 627.922c-0.516-3.208-1.166-6.372-1.946-9.498-0.798-3.094-1.714-6.154-2.746-9.14-1.046-2.984-2.204-5.93-3.476-8.792-1.264-2.862-2.644-5.68-4.118-8.4-9.44-0.532-18.97-2.162-27.986-4.408-9.016-2.21-17.532-5.106-24.984-8.2-7.436-3.126-13.796-6.478-18.496-9.616-4.692-3.126-7.736-6.096-8.5-8.45-0.766-2.296-0.866-4.592-0.516-6.82 0.34-2.212 1.13-4.326 2.144-6.272 0.982-1.946 2.188-3.742 3.376-5.274 1.198-1.53 2.364-2.794 3.278-3.734 0.898-0.988 4.806-4.964 10.246-10.454 5.458-5.506 12.444-12.526 19.496-19.596 7.068-7.052 14.206-14.138 19.91-19.728 5.706-5.588 9.964-9.646 11.278-10.678 1.332-1.082 2.57-2.096 3.826-3.028 1.282-0.932 2.578-1.764 3.992-2.462 1.414-0.732 2.978-1.296 4.742-1.698 1.78-0.38 3.784-0.616 6.122-0.616h2.652c2.338 0 4.334 0.234 6.088 0.616 1.756 0.4 3.292 0.964 4.692 1.698 1.396 0.7 2.67 1.532 3.918 2.462 1.246 0.932 2.478 1.946 3.776 3.028 1.338 1.032 5.622 5.090 11.318 10.678 5.698 5.59 12.834 12.676 19.912 19.728 7.060 7.070 14.046 14.090 19.504 19.596 5.448 5.488 9.366 9.464 10.262 10.454 0.916 0.94 2.072 2.206 3.262 3.734 1.18 1.532 2.402 3.328 3.392 5.274 0.998 1.946 1.796 4.058 2.146 6.272 0.35 2.228 0.248 4.524-0.516 6.82-0.732 2.228-3.428 4.99-7.62 7.918-4.208 2.96-9.88 6.054-16.602 8.998-6.704 2.954-14.42 5.748-22.688 8.050-8.26 2.294-17.050 4.142-25.95 5.132 0.616-0.042 1.212-0.076 1.83-0.102 0.59-0.042 1.212-0.090 1.812-0.108 0.6-0.066 1.214-0.092 1.812-0.132 0.608-0.018 1.214-0.058 1.83-0.108-2.662 2.652-5.108 5.43-7.302 8.292-2.228 2.894-4.208 5.888-5.938 8.966-1.746 3.094-3.21 6.27-4.426 9.546-1.208 3.282-2.158 6.626-2.806 10.052z" /> -<glyph unicode="" glyph-name="os-win-04" data-tags="os-win-04" d="M1021.196 959c-108.772-15.132-211.52-29.426-308.064-42.878-91.246-12.7-160.038-24.776-242.010-36.188 0-68.72 0-137.328 0-205.868 0-68.532 0-137.064 0-205.606 81.972 0.482 150.764 0.99 242.11 1.54 96.544 0.566 199.194 1.164 307.964 1.814 0 81.158 0 162.29 0 243.44 0 81.144 0 162.392 0 243.746v0zM423.864 873.342c-75.568-10.53-165.458-20.542-233.876-30.080-65.288-9.088-127.616-17.784-187.184-26.096 0-58.66 0-117.266 0-175.786 0-58.536 0-117.054 0-175.588 59.466 0.348 121.894 0.722 187.184 1.114 68.416 0.4 158.208 0.832 233.876 1.282 0 67.476 0 134.96 0 202.446s0 135.054 0 202.708v0zM2.804 431.224c0-58.612 0-117.128 0-175.664s0-117.054 0-175.508c59.466-8.368 121.794-17.132 187.076-26.298 68.432-9.614 158.314-19.718 233.982-30.348 0 67.4 0 134.884 0 202.372 0 67.474 0 134.968 0 202.536-75.668 0.55-165.458 1.074-233.876 1.564-65.386 0.464-127.714 0.914-187.182 1.346v0zM471.122 16.76c81.972-11.518 150.764-23.678 242.11-36.512 96.544-13.564 199.194-27.986 307.964-43.248 0 81.042 0 162.192 0 243.332 0 81.158 0 162.292 0 243.542-108.772 0.782-211.42 1.538-307.964 2.228-91.346 0.656-160.136 1.282-242.11 1.878 0-68.616 0-137.156 0-205.712 0-68.518 0-137.050 0-205.508z" /> -<glyph unicode="" glyph-name="os-ios" data-tags="os-ios" d="M56.692 618.216c-33.136 0-55.692 23.962-55.692 55.674 0 32.436 23.272 55.69 55.692 55.69 33.834 0 56.372-23.254 56.372-55.69 0-33.832-23.954-55.674-56.372-55.674zM109.546 566.76v-392.574h-104.312v392.574h104.312zM636.748 451.874c0-188.888-95.856-285.458-230.474-285.458-143.086 0-224.128 119.832-224.128 277 0 162.116 89.516 281.224 231.166 281.224 150.138 0.002 223.436-128.28 223.436-272.766zM291.39 445.54c0-106.426 41.594-193.822 118.4-193.822 77.542 0 117.71 86.69 117.71 195.934 0 99.39-37.36 191.716-117.004 191.716-81.746 0-119.106-94.458-119.106-193.828zM712.88 284.836c28.188-16.916 73.298-30.298 116.996-30.298 57.796 0 88.104 27.488 88.104 67.658 0 38.776-26.074 62.030-85.99 88.104-81.756 35.24-132.498 85.99-132.498 156.46 0 88.818 69.762 157.184 186.768 157.184 51.45 0 90.922-11.976 116.296-24.676l-21.85-85.292c-19.030 9.872-52.164 23.27-96.552 23.27-54.974 0-79.652-29.608-79.652-59.916 0-38.756 26.79-56.39 93.042-86.698 86.69-38.758 125.456-88.792 125.456-159.986 0-94.44-71.186-163.506-197.356-163.506-53.562 0-107.84 14.804-133.198 30.308l20.434 87.388z" /> -<glyph unicode="" glyph-name="brw-chrome" data-tags="brw-chrome" d="M513.298 260.018c-101.306 0-183.724 82.426-183.724 183.724 0 101.316 82.418 183.734 183.724 183.734s183.732-82.418 183.732-183.734c0.002-101.298-82.424-183.724-183.732-183.724zM590.702 227.372c-25.71-9.354-52.636-14.078-80.234-14.078-54.15 0-107.018 19.012-148.852 53.522-33.938 28.002-59.232 64.854-73.172 106.662l-0.074 0.248-202.476 350.702c-72.74-111.876-98.55-245.274-72.658-376.47 26.372-133.614 103.186-248.952 216.304-324.79 58.928-39.5 124.21-65.846 194.080-78.336l167.082 282.54zM972.628 673.408c-126.454 254.428-435.226 358.17-689.648 231.716-65.848-32.728-123.708-79.132-169.918-135.882l171.042-296.264c11.1 86.052 70.664 162.122 158.876 189.868 21.282 6.688 43.424 10.248 65.722 10.562zM511.304-63c128.174 0 250.846 48.068 345.366 135.336 95.016 87.716 152.718 207.084 162.476 336.104 5.58 73.892-5.372 149.548-31.686 219.036h-334.54c56.286-44.556 89.312-112.646 88.982-184.8-0.24-51.95-18.052-103.004-50.326-143.994l-213.258-360.622c10.984-0.704 22.050-1.060 32.968-1.060 0.018 0 0.002 0 0.018 0z" /> -<glyph unicode="" glyph-name="dbs-sqlite" data-tags="dbs-sqlite" d="M883.69 936.8c-43.914 39.166-97.094 23.434-149.574-23.146-7.784-6.918-15.568-14.596-23.294-22.796-12.134-12.866-24.128-27.258-35.904-42.782-12.218 5.048-25.576 7.86-39.572 7.86h-435.22c-57.538 0-104.616-47.080-104.616-104.616v-435.226c0-57.538 47.078-104.614 104.616-104.614h306.154c3.676-20.292 5.822-34.73 5.822-34.73s0.274-3.786 0.732-9.6c-1.688-39.338-0.674-80.126 2.37-116.986 4.040-48.804 11.63-90.722 21.316-113.162l6.57 3.594c-14.212 44.196-19.994 102.126-17.46 168.936 3.826 102.108 27.326 225.258 70.74 353.608 73.356 193.758 175.132 349.216 268.284 423.462-84.9-76.674-199.808-324.864-234.2-416.772-38.518-102.918-65.804-199.498-82.26-292.032 28.374 86.748 120.134 124.034 120.134 124.034s45.012 55.498 97.61 134.8c-31.506-7.176-83.238-19.486-100.57-26.764-25.558-10.72-32.446-14.378-32.446-14.378s82.796 50.422 153.832 73.248c97.694 153.86 204.124 372.446 96.936 468.062zM511.814 484.46c10.084-20.452 17.96-46.55 23.15-66.486 1.326-5.124 2.528-9.922 3.484-14.006 2.284-9.664 3.506-15.936 3.506-15.936s-0.802 3.044-4.106 12.626c-0.626 1.838-1.33 3.844-2.162 6.206-0.354 0.98-0.844 2.162-1.384 3.426-5.86 13.608-22.056 42.346-29.188 54.852-6.096-17.986-11.486-34.814-15.994-50.042 20.58-37.652 33.124-102.192 33.124-102.192s-1.090 4.184-6.258 18.78c-4.596 12.908-27.464 52.988-32.882 62.354-9.266-34.216-12.946-57.304-9.626-62.944 4.898-8.268 9.614-21.118 13.964-35.93h-287.316c-11.34 0-20.922 9.588-20.922 20.926v435.224c0 11.34 9.582 20.922 20.922 20.922h424.472c-52.98-90.304-95.58-198.234-112.784-287.78z" /> -<glyph unicode="" glyph-name="os-osx_1" data-tags="os-osx_1" d="M1023 258.92h-81.524l-33.892 73.182c-12.768 26.024-21.616 46.168-30.948 68.758h-1.464c-7.868-22.59-16.7-43.224-28.012-69.256l-30.93-72.684h-79.57l97.742 192.026-94.298 185.652h81.042l33.884-74.156c9.822-21.624 17.2-40.77 26.032-61.896h0.982c8.84 23.588 15.218 40.788 24.56 62.378l31.92 73.672h80.050l-96.742-185.154 101.168-192.522zM317.796 452.424c0-131.626-66.802-198.91-160.602-198.91-99.722 0-156.194 83.496-156.194 193.024 0 112.96 62.378 195.95 161.102 195.95 104.61-0.002 155.694-89.376 155.694-190.064zM241.662 449.488c0 69.24-26.032 133.582-81.524 133.582-56.988 0-83.022-65.822-83.022-135.070 0-74.154 28.986-135.060 82.522-135.060 54.028 0 82.024 60.406 82.024 136.548zM499.516 479.44c-46.168 21.108-64.832 33.4-64.832 60.398 0 21.126 17.202 41.752 55.51 41.752 30.94 0 54.028-9.332 67.286-16.202l15.218 59.426c-17.682 8.84-45.186 17.192-81.042 17.192-81.524 0-130.144-47.64-130.144-109.52 0-49.122 35.364-84.484 92.326-109.038 41.762-18.164 59.926-34.38 59.926-61.396 0-27.986-21.126-47.148-61.396-47.148-30.458 0-61.878 9.324-81.524 21.126l-14.24-60.906c17.666-10.802 55.492-21.108 92.818-21.108 87.912 0 137.516 48.122 137.516 113.926 0 49.6-27.006 84.482-87.422 111.498z" /> -<glyph unicode="" glyph-name="brw-firefox" data-tags="brw-firefox" d="M1022.97 544.34c-0.298 9.414-20.612-44.488-21.422-35.238-6.042 68.852-20.502 150.73-56.9 206.964 2.028-11.050-5.164-21.084-11.15-30.104-84.058 152.642-246.456 256.076-433.028 256.076-145.292 0-275.926-62.724-366.322-162.564-9.956 18.888-17.376 44.098-22.16 75.602-35.676-34.976-53.414-96.78-53.208-185.582-3.932-7.83-7.66-15.778-11.182-23.836-8.762-13.256-20.3-31.158-26.178-41.834-15.276-27.252-19.656-49.886-20.42-69.23 0.124 0.198 0.24 0.378 0.352 0.56 0.13-4.002 0.652-7.864 1.686-11.472l10.59 8.624c-4.71-27.4-7.194-55.56-7.194-84.304 0-272.85 221.186-494.038 494.038-494.038 0.782 0 1.558 0.026 2.338 0.030 1.034-0.006 2.062-0.030 3.096-0.030 1.656 0 3.304 0.046 4.956 0.060 138.61 1.368 263.56 59.776 352.464 152.922 68.486 71.746 127.432 175.944 142.916 278.64 3.65 24.226 7.232 36.542 9.51 68.342 1.254 17.526 7.746 73.682 7.218 90.412zM323.566 866.812c56.010 23.69 115.53 35.702 176.906 35.702s120.896-12.012 176.904-35.702c21.49-9.090 42.098-19.764 61.766-31.916-36.4 8.586-78.034 13.63-124.78 15 25.124-5.012 46.448-11.242 63.674-19.148 26.586-11.734 44.062-26.824 52.224-44.78-24.678 4.544-46.942 2.868-66.582-4.792 140.796-55.544 207.616-121.64 199.942-198.016-10.296 16.040-23.958 26.576-41.438 31.834 21.564-83.806 23.726-153 6.25-207.598-11.976 36.404-16.296 76.056-26.126 83.716 13.676-112.306-11.478-213.248-62.002-267.36 9.572 33.042 13.416 60.088 11.24 81.416-59.366-88.852-120.188-116.952-195.872-119.834-29.912 0.256-58.176 4.784-84.75 13.42-0.274-0.010-0.544 0-0.814-0.010 0.262 0.010 0.524 0.018 0.788 0.026-38.994 13.074-74.36 35.364-105.796 67.066 49.128-4.092 93.916 4.42 133.358 24.374l64.654 41.928-0.238 0.214c8.382 3.114 16.28 2.884 23.954-0.708 15.796 2.154 21.286 10.536 16.026 24.654-7.65 10.536-19.148 20.116-33.996 28.48-32.33 16.784-66.090 14.152-101.286-8.118-33.53-18.926-65.85-18.204-97.216 1.922-20.596 14.112-40.464 33.038-59.622 56.738l-7.668 11.248 29.454 39.51c21.082-1.914 45.266-6.696 72.55-14.602 4.55 26.1-1.432 53.4-17.952 81.406 0 0.248 0 0.486 0 0.486 25.626 23.708 48.374 40.942 67.756 51.96 8.63 4.552 20.596 35.912 11.984 41.188-17.956-0.97-35.922 0.23-53.876 3.83l-0.24-0.722c-7.43 2.154-16.762 8.622-28.26 19.64l-29.454 28.73c0 0-8.858 10.058-8.144 10.536 4.068 21.794 10.784 40.464 20.356 56.514 0 0 30.166 34.712 57.24 52.914-50.296-6.228-95.79-28.738-136.254-67.534-33.522 12.228-73.268 9.582-119.010-7.888l0.236 0.23c-3.44 1.578-6.74 3.516-9.908 5.792 6.284 7.114 12.784 14.072 19.542 20.83 41.748 41.758 90.362 74.534 144.48 97.424z" /> -<glyph unicode="" glyph-name="brw-safari-01" data-tags="brw-safari-01" d="M954.094 568.506c-69.538 191.048-249.958 309.684-442.128 309.684-41.934 0-84.42-5.676-126.438-17.45 21.398 12.682 31.54 39.334 22.74 63.514-9.934 27.302-40.402 41.51-67.704 31.576l-49.638-18.066c-27.3-9.94-41.51-40.408-31.574-67.708 8.786-24.146 33.64-38.038 58.156-34.050-221.924-100.466-332.296-356.614-247.604-589.32 69.548-191.062 249.94-309.686 442.138-309.686 53.412 0 107.77 9.174 160.868 28.5 244.156 88.872 370.054 358.842 281.184 603.006zM866.574 242.254c-44.168-94.71-122.57-166.556-220.768-202.296-43.244-15.74-88.256-23.72-133.766-23.72-39.534 0-78.792 6.020-116.7 17.896-37.564 11.768-73.040 29.040-105.45 51.34-67.196 46.228-117.516 111.348-145.534 188.314-35.74 98.2-31.104 204.436 13.064 299.146 44.168 94.714 122.57 166.556 220.77 202.3 43.242 15.738 88.254 23.722 133.774 23.722 39.514 0 78.774-6.026 116.682-17.902 37.562-11.768 73.040-29.044 105.458-51.346 67.196-46.232 117.526-111.346 145.534-188.304 35.74-98.198 31.104-204.442-13.064-299.15zM604.142 441.132c8.956-24.612 7.792-51.236-3.278-74.976-11.068-23.74-30.72-41.746-55.328-50.702-10.842-3.948-22.12-5.948-33.524-5.948-8.92 0-17.622 1.29-25.962 3.598l63.814 71.202 40.802 81.696c5.578-7.49 10.178-15.816 13.476-24.87zM479.104 400.628c-1.078 8.652 2.36 17.948 7.36 24.316 4.918 5.726 11.86 9.74 19.952 10.752 7.83 0.97 15.316-1.052 21.376-5.126 7.286-4.888 12.512-12.78 13.682-22.178 0.744-6.026-0.354-11.818-2.72-16.966-4.646-8.694-14.038-16.794-24.58-18.106-8.012-0.998-15.67 1.146-21.802 5.412-7.080 4.926-12.124 12.684-13.268 21.896zM535.19 502.852l-63.824-69.676-39.706-81.65c-4.816 6.882-8.846 14.404-11.802 22.534-8.958 24.612-7.794 51.236 3.276 74.976 11.068 23.74 30.72 41.746 55.328 50.706 10.842 3.942 22.12 5.942 33.534 5.942 7.928-0.002 15.706-0.99 23.194-2.832zM511.994 764.16c-196.924 0-356.556-159.638-356.556-356.566 0-196.92 159.632-356.562 356.556-356.562s356.566 159.642 356.566 356.562c0 196.928-159.642 356.566-356.566 356.566zM379.562 712.17l52.756-31.756-9.158 25.168c-1.458 4-2.804 6.876-4.046 8.638-1.244 1.76-2.614 2.904-4.112 3.42-1.17 0.382-2.734 0.508-4.704 0.382-1.968-0.136-3.54-0.308-4.702-0.518l-1.328 3.656 28.552 10.398 1.328-3.658c-0.838-0.416-2.022-1.042-3.56-1.886-1.534-0.844-2.782-1.988-3.742-3.43-0.848-1.26-1.138-3.012-0.884-5.236 0.264-2.222 1.116-5.316 2.558-9.292l17.312-47.552-8.348-3.040-60.184 36.356 11.37-31.23c1.412-3.874 2.744-6.732 3.992-8.556 1.252-1.834 2.624-3.002 4.12-3.52 1.098-0.38 2.668-0.5 4.702-0.362 2.042 0.136 3.642 0.318 4.798 0.526l1.334-3.658-28.6-10.406-1.332 3.656c1.188 0.536 2.498 1.27 3.946 2.204 1.448 0.936 2.568 1.97 3.358 3.104 0.888 1.352 1.23 3.030 1.016 5.018-0.216 1.996-1.106 5.144-2.676 9.462l-11.468 31.512c-0.572 1.56-1.348 2.958-2.34 4.174-0.99 1.206-2.188 2.124-3.584 2.758-1.474 0.662-3.042 1.042-4.682 1.134-1.646 0.090-3.44-0.028-5.374-0.334l-1.37 3.756 25.052 9.112zM255.17 337.212c0.39-5.244 1.088-13.61 2.114-25.096 1.018-11.486 2.064-23.428 3.148-35.822l-7.39-2.686-31.668 44.458 5.642-53.932-7.38-2.686c-9.604 13.71-16.99 24.272-22.142 31.694-5.158 7.412-9.496 13.628-13.012 18.654-1.074 1.526-2.044 2.558-2.908 3.112-0.866 0.544-1.9 1.052-3.118 1.498-0.862 0.318-1.714 0.472-2.552 0.472-0.84-0.010-1.774-0.11-2.808-0.3l-1.334 3.656 27.702 10.080 1.296-3.564c-1.542-0.844-2.668-1.534-3.388-2.060-0.716-0.526-1.266-0.998-1.632-1.414-0.35-0.408-0.522-0.772-0.514-1.090 0-0.316 0.046-0.59 0.126-0.798 0.16-0.444 0.356-0.852 0.59-1.224 0.232-0.372 0.496-0.806 0.786-1.306 1.474-2.222 4.338-6.414 8.598-12.574 4.254-6.162 9.528-13.8 15.804-22.938l-5.792 52.752 7.758 2.82 31.87-45.012c-0.902 8.774-1.678 15.924-2.322 21.458s-1.216 10.27-1.708 14.19c-0.32 2.404-0.608 4.41-0.862 6.016s-0.58 2.95-0.98 4.046c-0.234 0.654-0.676 1.134-1.324 1.424-0.644 0.3-1.434 0.472-2.36 0.528-0.78 0.028-1.75-0.064-2.892-0.282-1.152-0.226-2.136-0.436-2.972-0.626l-1.366 3.748 20.886 7.604 1.37-3.748c-0.724-0.372-1.402-0.862-2.042-1.46-0.634-0.608-1.224-1.296-1.78-2.058-0.82-1.224-1.296-2.404-1.424-3.548-0.12-1.146-0.13-2.47-0.020-3.986zM649.244 109.36c-0.368-3.186-1.366-6.080-2.994-8.694-1.788-2.884-4.128-5.454-7.022-7.71-2.894-2.26-6.534-4.184-10.906-5.782-4.066-1.478-8.040-2.35-11.928-2.612-3.886-0.264-7.298-0.154-10.238 0.334l-2.042-4.454-3.984-1.454-9.372 23.826 4.038 1.47c1.736-1.952 3.774-3.948 6.106-5.97s4.782-3.71 7.36-5.036c2.666-1.416 5.426-2.35 8.266-2.804s5.834-0.108 8.99 1.044c4.256 1.542 7.132 3.774 8.642 6.678 1.51 2.902 1.692 5.942 0.542 9.1-0.946 2.596-2.706 4.428-5.274 5.498-2.562 1.070-6.096 1.516-10.598 1.334-2.93-0.118-5.632-0.208-8.102-0.292-2.466-0.072-4.808-0.090-7.024-0.044-5.118 0.154-9.364 1.498-12.746 4.030-3.38 2.522-5.816 5.842-7.304 9.944-0.944 2.596-1.292 5.298-1.042 8.104 0.254 2.802 1.116 5.552 2.576 8.246 1.416 2.532 3.526 4.946 6.334 7.25 2.812 2.294 6.106 4.136 9.888 5.518 3.694 1.342 7.332 2.076 10.93 2.222 3.598 0.134 6.5 0.028 8.722-0.336l1.834 3.856 4.082 1.488 8.638-22.556-4.040-1.468c-1.822 2.106-3.838 4.202-6.034 6.288-2.196 2.096-4.3 3.738-6.324 4.908-2.196 1.262-4.49 2.068-6.886 2.424-2.394 0.354-4.936 0.044-7.622-0.936-3.378-1.234-5.79-3.194-7.234-5.878-1.444-2.696-1.656-5.444-0.63-8.266 0.97-2.658 2.694-4.5 5.166-5.508 2.472-1.016 5.912-1.452 10.32-1.296 2.6 0.062 5.246 0.134 7.94 0.226 2.69 0.090 5.104 0.118 7.24 0.090 5.172-0.108 9.5-1.27 12.984-3.492 3.484-2.232 6.050-5.626 7.716-10.2 1.050-2.876 1.396-5.908 1.032-9.090zM630.816 372.844l59.928-48.596-75.75 14.666c-8.422-12.652-19.208-23.816-32.016-32.768l13.714-131.23-73.852 109.332c-3.622-0.322-7.236-0.49-10.828-0.49-15.454 0-30.596 2.946-44.722 8.42l-140.95-157.22 92.792 190.808c-3.026 3.43-5.862 7.058-8.52 10.856l-131.29-13.714 109.336 73.848c-1.378 15.564 0.24 31.008 4.524 45.592l-59.928 48.6 75.752-14.672c8.42 12.654 19.208 23.822 32.014 32.768l-13.712 131.23 73.85-109.332c3.622 0.322 7.232 0.49 10.83 0.49 14.618 0.004 28.948-2.68 42.416-7.604l143.256 156.404-1.616-3.244-92.76-185.718c3.634-3.96 6.974-8.234 10.104-12.704l131.29 13.718-109.34-73.854c1.376-15.558-0.248-31.002-4.522-45.586zM812.19 539.18l-3.566-1.296c-1.824 2.196-4.314 4.174-7.476 5.96-3.156 1.77-5.924 2.496-8.274 2.168-1.016-0.126-2.376-0.472-4.060-1.034-1.694-0.552-3.084-1.034-4.178-1.434l-9.654-3.52 9.332-25.65 6.846 2.496c1.714 0.626 3.21 1.398 4.468 2.314 1.256 0.916 2.254 2.168 2.988 3.748 0.456 0.98 0.722 2.504 0.798 4.592 0.072 2.078-0.028 3.828-0.294 5.252l3.562 1.298 10.106-27.764-3.564-1.296c-0.662 1.252-1.742 2.722-3.23 4.436-1.488 1.696-2.712 2.804-3.67 3.302-1.438 0.752-2.946 1.088-4.504 0.99-1.562-0.082-3.268-0.472-5.11-1.144l-6.84-2.486 6.976-19.18c0.73-2.004 1.452-3.538 2.178-4.6 0.724-1.062 1.606-1.76 2.638-2.086 1.004-0.308 2.214-0.308 3.648-0.008 1.424 0.308 3.312 0.888 5.662 1.742 1.088 0.4 2.394 0.898 3.92 1.488 1.514 0.582 2.826 1.17 3.928 1.742 1.256 0.634 2.396 1.316 3.42 2.050 1.026 0.716 1.714 1.488 2.060 2.286 0.944 2.078 1.784 5.026 2.514 8.856 0.734 3.82 1.116 6.624 1.142 8.402l3.42 1.244 6.28-21.186-62.418-22.718-1.33 3.666c0.854 0.38 1.996 0.934 3.426 1.67 1.434 0.734 2.418 1.342 2.954 1.814 1.008 0.934 1.57 1.85 1.702 2.766 0.124 0.916-0.028 1.97-0.458 3.158l-17.084 46.936c-0.412 1.126-0.922 1.996-1.534 2.612-0.618 0.6-1.684 0.972-3.212 1.080-0.944 0.082-2.212 0.008-3.792-0.208-1.59-0.226-2.774-0.426-3.558-0.608l-1.332 3.656 58.992 21.476 6.178-16.982z" /> -<glyph unicode="" glyph-name="brw-safari-02" data-tags="brw-safari-02" d="M954.094 568.506c-69.538 191.048-249.958 309.684-442.128 309.684-42.052 0-84.66-5.778-126.796-17.622 21.63 12.6 31.948 39.38 23.1 63.686-9.934 27.302-40.402 41.51-67.704 31.576l-49.638-18.066c-27.302-9.94-41.512-40.408-31.576-67.708 8.796-24.172 33.7-38.044 58.242-34.016-221.984-100.438-332.392-356.62-247.69-589.354 69.546-191.062 249.94-309.686 442.136-309.686 53.414 0 107.772 9.172 160.868 28.498 244.158 88.874 370.056 358.844 281.186 603.008zM866.574 242.252c-44.168-94.708-122.57-166.554-220.77-202.294-43.242-15.742-88.254-23.72-133.766-23.72-39.532 0-78.792 6.020-116.698 17.896-37.564 11.768-73.040 29.040-105.45 51.34-67.196 46.228-117.516 111.346-145.534 188.314-35.74 98.2-31.104 204.436 13.064 299.146 44.168 94.714 122.57 166.556 220.77 202.3 43.242 15.738 88.254 23.722 133.774 23.722 39.514 0 78.774-6.024 116.682-17.902 37.562-11.768 73.040-29.044 105.458-51.346 67.196-46.232 117.526-111.346 145.534-188.304 35.74-98.198 31.104-204.442-13.064-299.152zM618.826 476.736c-3.126 4.468-6.464 8.742-10.104 12.702l94.382 188.962-143.258-156.404c-13.472 4.922-27.798 7.608-42.42 7.604-3.598 0-7.208-0.168-10.83-0.49l-73.846 109.332 13.708-131.23c-12.802-8.946-23.59-20.116-32.014-32.768l-75.752 14.67 59.932-48.6c-4.282-14.586-5.906-30.030-4.528-45.594l-109.336-73.846 131.292 13.712c2.654-3.796 5.49-7.426 8.52-10.856l-92.794-190.808 7.302 8.104 133.652 149.118c14.126-5.472 29.272-8.42 44.716-8.42 3.598 0 7.208 0.172 10.83 0.49l73.852-109.332-13.714 131.234c12.81 8.946 23.594 20.116 32.020 32.762l75.752-14.662-59.934 48.592c4.278 14.586 5.902 30.028 4.524 45.588l109.34 73.856-131.292-13.716zM437.106 349.694c-4.822 6.88-8.852 14.402-11.808 22.534-8.958 24.61-7.794 51.236 3.276 74.974 11.072 23.74 30.72 41.746 55.332 50.706 10.838 3.942 22.116 5.944 33.53 5.944h0.006c7.93 0 15.7-0.99 23.19-2.832l-63.82-69.678-39.706-81.648zM491.906 423.114c4.914 5.724 11.854 9.74 19.948 10.752 7.83 0.97 15.32-1.052 21.38-5.126 7.288-4.89 12.512-12.78 13.678-22.18 0.75-6.026-0.35-11.818-2.716-16.966-4.65-8.692-14.042-16.794-24.58-18.106-8.016-0.998-15.668 1.148-21.806 5.412-7.072 4.928-12.118 12.684-13.266 21.898-1.076 8.65 2.364 17.946 7.362 24.316zM606.304 364.322c-11.068-23.738-30.716-41.74-55.328-50.696-10.842-3.948-22.12-5.954-33.526-5.954-8.914 0-17.616 1.29-25.96 3.604l63.814 71.198 40.802 81.694c5.576-7.488 10.176-15.814 13.472-24.87 8.96-24.61 7.798-51.236-3.274-74.976zM365.172 701.626l-1.366 3.756 25.046 9.11 52.756-31.756-9.158 25.168c-1.458 4.002-2.804 6.878-4.042 8.638-1.242 1.76-2.618 2.904-4.11 3.42-1.172 0.38-2.74 0.508-4.708 0.38-1.97-0.136-3.54-0.308-4.702-0.516l-1.328 3.656 28.552 10.398 1.328-3.656c-0.838-0.416-2.022-1.042-3.56-1.888-1.534-0.844-2.782-1.986-3.742-3.43-0.848-1.26-1.138-3.012-0.88-5.234 0.26-2.224 1.112-5.318 2.558-9.292l17.306-47.552-8.346-3.040-60.176 36.358 11.364-31.23c1.41-3.874 2.744-6.732 3.996-8.556 1.248-1.834 2.624-3.004 4.12-3.52 1.094-0.382 2.664-0.5 4.698-0.364 2.042 0.136 3.642 0.318 4.802 0.526l1.33-3.656-28.6-10.408-1.334 3.656c1.19 0.536 2.5 1.27 3.948 2.206s2.568 1.968 3.358 3.102c0.888 1.352 1.23 3.032 1.016 5.018-0.212 1.996-1.106 5.144-2.676 9.464l-11.468 31.51c-0.566 1.56-1.348 2.958-2.336 4.174-0.994 1.208-2.188 2.124-3.584 2.758-1.478 0.664-3.040 1.044-4.686 1.134-1.652 0.094-3.442-0.024-5.376-0.334zM657.506 120.772c1.046-2.876 1.392-5.906 1.030-9.090-0.368-3.186-1.366-6.080-2.994-8.694-1.788-2.884-4.128-5.454-7.024-7.71-2.892-2.26-6.532-4.184-10.904-5.782-4.066-1.478-8.040-2.35-11.928-2.612-3.886-0.264-7.298-0.154-10.238 0.334l-2.042-4.454-3.984-1.454-9.368 23.826 4.034 1.47c1.736-1.952 3.774-3.948 6.106-5.97s4.782-3.71 7.36-5.036c2.666-1.416 5.426-2.35 8.266-2.804s5.834-0.108 8.99 1.044c4.256 1.542 7.13 3.774 8.642 6.678 1.51 2.902 1.692 5.942 0.54 9.1-0.944 2.596-2.704 4.428-5.272 5.498-2.562 1.070-6.096 1.516-10.598 1.334-2.93-0.118-5.632-0.208-8.102-0.292-2.466-0.072-4.808-0.090-7.022-0.044-5.12 0.154-9.366 1.498-12.748 4.030-3.38 2.522-5.812 5.844-7.304 9.944-0.944 2.596-1.292 5.298-1.040 8.104 0.25 2.802 1.112 5.552 2.576 8.246 1.412 2.532 3.522 4.946 6.33 7.25 2.812 2.294 6.106 4.136 9.888 5.516 3.694 1.344 7.332 2.078 10.93 2.224 3.598 0.134 6.5 0.028 8.722-0.336l1.834 3.856 4.082 1.488 8.638-22.556-4.040-1.468c-1.822 2.106-3.838 4.202-6.034 6.288-2.196 2.096-4.3 3.738-6.324 4.908-2.196 1.262-4.49 2.068-6.886 2.424-2.394 0.354-4.936 0.044-7.622-0.936-3.378-1.234-5.79-3.194-7.236-5.878-1.442-2.696-1.654-5.444-0.628-8.266 0.97-2.658 2.694-4.5 5.166-5.508 2.472-1.016 5.912-1.452 10.32-1.296 2.6 0.062 5.244 0.134 7.94 0.226 2.69 0.090 5.104 0.118 7.24 0.090 5.172-0.108 9.5-1.27 12.984-3.492 3.488-2.234 6.054-5.626 7.72-10.2zM266.574 314.44c1.016-11.486 2.064-23.428 3.152-35.822l-7.394-2.686-31.664 44.458 5.642-53.932-7.384-2.686c-9.606 13.71-16.986 24.272-22.144 31.694-5.158 7.412-9.494 13.628-13.006 18.654-1.080 1.526-2.050 2.558-2.912 3.112-0.862 0.544-1.9 1.052-3.118 1.498-0.862 0.318-1.708 0.472-2.552 0.472-0.84-0.010-1.776-0.11-2.808-0.3l-1.334 3.656 27.7 10.080 1.298-3.564c-1.54-0.844-2.668-1.534-3.388-2.060-0.716-0.526-1.262-0.998-1.634-1.414-0.348-0.408-0.516-0.772-0.512-1.090 0.004-0.316 0.050-0.59 0.126-0.798 0.158-0.444 0.354-0.852 0.59-1.224 0.23-0.372 0.494-0.806 0.786-1.306 1.474-2.222 4.336-6.414 8.596-12.574 4.26-6.162 9.532-13.8 15.81-22.938l-5.796 52.752 7.758 2.82 31.87-45.012c-0.902 8.774-1.674 15.924-2.324 21.458-0.642 5.534-1.214 10.27-1.706 14.19-0.322 2.404-0.608 4.41-0.858 6.016-0.258 1.606-0.584 2.95-0.98 4.046-0.24 0.654-0.68 1.134-1.328 1.424-0.644 0.3-1.434 0.472-2.36 0.528-0.78 0.028-1.746-0.064-2.894-0.282-1.146-0.226-2.136-0.436-2.97-0.626l-1.366 3.748 20.89 7.604 1.366-3.748c-0.72-0.372-1.402-0.862-2.038-1.46-0.634-0.608-1.228-1.296-1.778-2.058-0.826-1.224-1.302-2.404-1.43-3.548-0.12-1.142-0.126-2.466-0.014-3.982 0.384-5.248 1.086-13.614 2.108-25.1zM836.668 514.366l6.28-21.186-62.418-22.718-1.33 3.666c0.854 0.38 1.996 0.934 3.426 1.668 1.434 0.736 2.418 1.342 2.954 1.814 1.006 0.934 1.568 1.852 1.702 2.768 0.122 0.916-0.028 1.968-0.458 3.158l-17.084 46.936c-0.414 1.126-0.922 1.996-1.534 2.614-0.618 0.598-1.684 0.97-3.212 1.080-0.944 0.082-2.212 0.008-3.792-0.208-1.588-0.226-2.772-0.426-3.556-0.608l-1.332 3.658 58.992 21.476 6.18-16.976-3.566-1.298c-1.824 2.196-4.314 4.174-7.476 5.96-3.156 1.77-5.924 2.496-8.274 2.168-1.018-0.126-2.376-0.472-4.060-1.034-1.694-0.554-3.086-1.034-4.178-1.434l-9.654-3.52 9.332-25.65 6.846 2.496c1.714 0.626 3.21 1.396 4.468 2.314 1.256 0.916 2.254 2.168 2.988 3.748 0.456 0.98 0.722 2.504 0.798 4.59 0.072 2.078-0.028 3.83-0.294 5.252l3.56 1.298 10.108-27.764-3.564-1.298c-0.662 1.252-1.742 2.722-3.23 4.438-1.488 1.696-2.712 2.802-3.67 3.302-1.438 0.754-2.946 1.088-4.506 0.99-1.56-0.082-3.266-0.472-5.108-1.144l-6.842-2.486 6.978-19.18c0.73-2.006 1.452-3.54 2.178-4.6 0.724-1.062 1.606-1.76 2.64-2.086 1.002-0.308 2.212-0.308 3.646-0.008 1.424 0.308 3.312 0.89 5.662 1.742 1.088 0.4 2.394 0.898 3.92 1.488 1.514 0.58 2.826 1.17 3.928 1.742 1.256 0.634 2.394 1.316 3.42 2.050 1.026 0.716 1.714 1.488 2.060 2.288 0.944 2.078 1.784 5.026 2.514 8.854 0.734 3.82 1.116 6.624 1.142 8.402l3.416 1.238z" /> -<glyph unicode="" glyph-name="brw-explorer" data-tags="brw-explorer" d="M968.41 730.54c94.562 245.362-89.1 228.2-89.1 228.2-117.838 0-265.144-107.316-265.144-107.316s-175.698 47.34-351.412-58.922c-191.492-122.048-185.172-338.792-185.172-338.792 155.71 223.054 372.454 313.54 372.454 313.54v-14.73c-319.85-218.728-395.606-538.696-414.544-603.93-18.94-65.224-6.312-211.588 128.366-211.588s271.45 108.482 271.45 108.482 29.46-6.32 109.416-6.32c336.69 0 416.644 296.708 416.644 296.708h-298.808c0 0-21.042-96.794-128.352-96.794-147.298 0-138.886 153.61-138.886 153.61h570.262c27.354 395.602-317.748 452.416-317.748 452.416s121.956 86.274 227.264 86.274c166.902 0 87.976-195.512 87.976-195.512l5.334-5.326zM418.606 49.86c0 0-205.522-124.724-297.778-38.306-49.424 86.426 30.894 208.818 30.894 208.818s67.958-126.030 266.884-170.512zM665.81 527.316h-271.212c0 0-3.43 132.166 139.036 132.166 137.588 0.002 132.176-132.166 132.176-132.166z" /> -<glyph unicode="" glyph-name="brw-opera" data-tags="brw-opera" d="M509.848 959c-279.196 0-473.73-202.514-473.73-506.252 0-270.28 189.006-515.748 473.744-515.748 287.538 0 478.022 245.408 478.022 515.748-0.002 306.17-201.376 506.252-478.036 506.252zM509.862 51.090c-23.126 0-43.226 4.508-60.702 12.718-48.578 24.492-77.834 78.748-94.952 145.182-18.52 77.052-20.612 170.54-20.612 252.364 0 146.132 10.666 278.17 70.306 344.070 26.026 27.666 60.338 44.042 105.408 44.164 0.186 0 0.372 0.016 0.548 0.016 58.71 0 99.878-28.75 128.428-73.83 42.562-71.894 52.252-188.402 52.252-313.77 0.004-177.962-11.826-410.914-180.676-410.914z" /> -<glyph unicode="" glyph-name="android" data-tags="android" d="M241.212 622h541.576v-441.326c0-26.218-21.256-47.474-47.442-47.474h-54.246v-134.406c0-34.132-27.224-61.794-60.83-61.794-33.692 0-60.876 27.662-60.876 61.794v134.406h-94.742v-134.406c0-34.132-27.278-61.794-60.882-61.794-33.598 0-60.874 27.662-60.874 61.794v134.406h-54.198c-26.192 0-47.488 21.256-47.488 47.474v441.326zM135.082 625.602c-33.948 0-61.446-27.926-61.446-62.4v-243.874c0-34.434 27.498-62.408 61.446-62.408 33.954 0 61.446 27.974 61.446 62.408v243.874c0 34.474-27.492 62.4-61.446 62.4zM782.79 666.472h-541.578c6.684 77.156 56.734 143.552 128.784 181.996l-51.492 75.608c-6.944 10.196-4.324 24.108 5.892 31.050 10.204 6.942 24.088 4.302 31.066-5.886l56.122-82.464c31.116 10.76 64.892 16.938 100.416 16.938 35.566 0 69.344-6.178 100.458-16.952l56.122 82.448c6.892 10.216 20.82 12.856 31.024 5.914 10.216-6.942 12.836-20.854 5.892-31.050l-51.45-75.608c72.048-38.42 122.064-104.816 128.744-181.994zM427.73 771.31c0 16.546-13.398 29.966-29.938 29.966-16.582 0-29.98-13.42-29.98-29.966 0-16.538 13.442-29.952 29.98-29.952s29.938 13.414 29.938 29.952zM659.984 771.31c0 16.546-13.444 29.966-29.98 29.966-16.582 0-29.94-13.42-29.94-29.966 0-16.538 13.358-29.952 29.94-29.952 16.538 0 29.98 13.414 29.98 29.952zM888.96 625.688c-33.912 0-61.488-27.968-61.488-62.444v-243.96c0-34.476 27.576-62.452 61.488-62.452 33.956 0 61.402 27.974 61.402 62.452v243.96c0.002 34.476-27.446 62.444-61.402 62.444z" /> -<glyph unicode="" glyph-name="hc-book-02" data-tags="hc-book-02" d="M446.736 736.808l-105.724-52.862v190.302l56.386-10.572 49.338 63.434v-59.090l169.53 84.758c8.446 4.226 16.492 6.222 23.76 6.222 20.476 0 34.842-15.846 34.842-42.434v-0.566l-228.132-113.872v-65.32zM834.388 786.902v-546.998c0-38.766-28.372-84.668-63.042-102.006l-385.17-189.684c0 0-64.398-23.794-128.824-2.064-70 23.616-67.736 86.85-67.736 86.85v682.71c0 23.658 49.27 48.368 49.27 48.368l-1.164-0.324 68.054 34.030v-66.022l-27.608-13.78 0.846 0.234c0 0-34.834-15.356-37.664-44.774-1.982-20.532 15.768-31.318 25.088-35.53 66.222-21.048 119.738-1.742 119.738-1.742l385.172 189.69c34.67 17.34 63.040-0.192 63.040-38.958zM333.82 157.012l-0.496-0.020c-2.368-0.084-4.784-0.13-7.228-0.13-19.266 0-37.376 2.808-53.804 8.348-10.862 3.67-20.146 8.542-28.386 14.91l-8.618 6.662v-79.258c8.604-6.65 19.176-12.618 32.496-17.112 23.044-7.772 45.98-9.664 66.036-8.956v75.556zM333.82 513.39c-20.056-0.708-42.992 1.184-66.036 8.956-13.318 4.496-23.89 10.462-32.496 17.112v-133.916c8.604-6.648 19.176-12.618 32.496-17.112 23.044-7.772 45.98-9.664 66.036-8.956v133.916z" /> -<glyph unicode="" glyph-name="lb-book-01" data-tags="lb-book-01" d="M1002.632 498.752l-308.112-317.388c-35.572-36.636-106.018-60.556-145.424-53.154l-240.206 35.1v48.596l221.642-32.976c39.398-11.704 109.844 12.216 145.416 48.864l308.112 317.384c8.484 8.742 14.182 17.442 17.342 25.734 27.478-14.264 29.544-42.992 1.23-72.16zM124.35 239.36l-38.658 5.746c-17.408 4.042-37.226-5.080-38.266 67.454-0.608 42.516 10.504 71.334 18.356 88.982l213.756-37.626 258.428-37.892c50.536-7.402 120.98 16.518 156.552 53.154l308.114 317.388c35.564 36.644 23.338 72.674-27.198 80.084l-449.57 65.92c-50.534 7.402-120.98-16.518-156.552-53.154l-308.104-317.386c-3.060-3.144-5.63-6.28-7.992-9.416-18.39-22.572-52.216-56.622-52.216-150.056 0-114.734 65.838-115.158 80.766-116.056l42.584-6.222v-117.454l68.492 28.704 73.464-49.446v180.938c3.052 38.142-10.646 70.96 28.378 70.96v0.284l-170.334 31.114v-96.020z" /> -<glyph unicode="" glyph-name="lb-book-02" data-tags="lb-book-02" d="M986.806 369.26l-298.174-307.148c-34.426-35.456-102.598-58.604-140.734-51.44l-232.458 33.972v47.020l214.492-31.912c38.126-11.324 106.3 11.822 140.724 47.288l298.174 307.148c8.21 8.46 13.724 16.878 16.784 24.904 26.594-13.802 28.59-41.606 1.192-69.832zM989.752 628.222c24.18 27.088 21.436 53.306-4.136 66.58-3.058-8.024-8.572-16.444-16.784-24.902l-284.822-293.396-31.092-28.848c-36.646-26.53-90.614-41.812-122.984-32.196l-430.49 64.046c-24.058 6.842-36.028-4.918-37.032 65.276-0.588 41.146 10.166 69.036 17.762 86.116l206.862-36.414 250.092-36.67c48.906-7.164 117.078 15.984 151.504 51.44l298.174 307.148c34.416 35.464 22.584 70.332-26.32 77.502l-435.068 63.796c-48.904 7.164-117.078-15.986-151.502-51.44l-298.168-307.15c-2.96-3.042-5.45-6.076-7.734-9.112-17.796-21.844-50.53-54.794-50.53-145.216 0-75.24 29.254-99.66 52.61-107.87-0.696-0.876-1.42-1.746-2.080-2.624-17.796-21.846-50.53-54.796-50.53-145.216 0-111.034 63.714-111.444 78.162-112.312l41.21-6.022v-113.666l66.28 27.778 71.096-47.85v175.102c2.954 36.912-10.302 68.672 27.462 68.672v0.274l-164.838 30.112v-92.924l-37.412 5.562c-22.554 5.094-36.028-4.918-37.032 65.276-0.588 41.144 10.166 69.036 17.762 86.114l206.862-36.412 250.092-36.67c48.906-7.164 117.078 15.984 151.504 51.44l298.174 307.15c25.924 26.712 25.586 53.070 2.946 67.526z" /> -<glyph unicode="" glyph-name="bolt-shield" data-tags="bolt-shield" d="M750.884 353.050l37.789-108.272-244.245-223.843 206.455 332.115zM772.236 94.521l-37.794 108.268 244.245 223.838-206.45-332.107zM266.98 353.050l-37.791-108.272 244.247-223.842-206.455 332.113zM245.626 94.521l37.794 108.268-244.245 223.837 206.45-332.105zM227.525 786.56c1.545-213.981 97.171-428.859 288.599-613.822 190.302 184.572 287.849 399.687 289.54 613.822-164.124-36.218-414.008-36.674-578.139 0zM516.236 251.661c-146.601 141.648-219.834 306.204-221.017 470.074 125.696-28.082 317.061-27.737 442.749 0-1.29-163.987-75.997-328.726-221.732-470.074z" /> -<glyph unicode="" glyph-name="calendar-empty" data-tags="calendar-empty" d="M354.77 683.846c0-21.71-23.462-39.306-52.406-39.306h-52.42c-28.944 0-52.404 17.596-52.404 39.306v235.848c0 21.71 23.46 39.306 52.404 39.306h52.42c28.944 0 52.406-17.596 52.406-39.306v-235.848zM826.46 919.694c0 21.71-23.46 39.306-52.404 39.306h-52.42c-28.944 0-52.406-17.596-52.406-39.306v-235.848c0-21.71 23.462-39.306 52.406-39.306h52.42c28.944 0 52.404 17.596 52.404 39.306v235.848zM983.692 839.518v-902.518h-943.384v902.518h117.922v-155.672c0-44.082 40.284-78.616 91.712-78.616h52.42c51.43 0 91.712 34.534 91.712 78.616v155.672h235.846v-155.672c0-44.082 40.286-78.616 91.714-78.616h52.42c51.43 0 91.712 34.534 91.712 78.616v155.672h117.926zM905.078 94.23v393.078h-786.154v-470.664h786.154v77.586z" /> -<glyph unicode="" glyph-name="terminal" data-tags="terminal" d="M25.334 959v-1022h973.332v1022h-973.332zM122.666 34.332v681.334h778.666v-681.334h-778.666zM385.818 458.75l-133.738 109.794c-7.138 6.044-13.154 12.576-13.154 24.656 0.378 13.042 9.020 25.132 19.914 25.132 5.636 0 10.894-3.25 15.418-6.976l154.764-127.484c8.26-6.512 14.286-12.11 13.896-25.124 0-13.516-5.636-18.622-13.896-25.132l-154.412-127.036c-4.496-3.716-9.764-7.898-16.14-7.898-10.522 0-19.542 12.556-19.542 25.586 0.378 11.626 4.886 17.682 12.404 23.736l134.486 110.746z" /> -<glyph unicode="" glyph-name="clock" data-tags="clock" d="M512 873.834c234.806 0 425.834-191.026 425.834-425.834 0-234.806-191.028-425.834-425.834-425.834-234.808 0-425.834 191.028-425.834 425.834 0 234.808 191.026 425.834 425.834 425.834zM512 959c-282.214 0-511-228.786-511-511 0-282.212 228.786-511 511-511 282.212 0 511 228.788 511 511 0 282.214-228.788 511-511 511v0zM554.584 490.584v298.082h-85.166v-383.252h255.498v85.168h-170.332z" /> -<glyph unicode="" glyph-name="windows" data-tags="windows" d="M213.338 855.124c0 0 204.246 111.050 378.982-22.784l-97.792-335.99c0 0-109.512 75.34-190.722 67.204-81.21-8.158-188.26-47.016-188.26-47.016l97.792 338.586zM1 118.868c45.080 23.306 112.744 35.118 190.7 41.646 78.022 6.51 187.82-64.936 187.82-64.936l98.802 339.552c-15.634 11.236-88.336 60.188-179.332 66.696-91.040 6.51-200.708-44.486-200.708-44.486l-97.282-338.472zM432.208 65.67c17.856-7.038 76.44-62.76 173.944-67.708 97.526-4.838 205.082 45.498 205.082 45.498s95.788 335.2 97.722 336.498c0.66 0.352-1.208-0.968-1.936-1.298-91.192-35.69-137.744-41.012-204.992-42.618-68.282-1.648-172.538 66.19-172.538 66.19l-97.282-336.562zM644.020 796.85l-97.99-334.034c0 0 79.606-78 191.734-71.536 112.196 6.534 173.064 41.89 187.952 46.884l97.284 337.004c0 0-129.212-53.964-213.702-44.18-84.53 9.786-137.11 45.698-165.278 65.862z" /> -<glyph unicode="" glyph-name="book" data-tags="book" d="M983.293 364.413l-67.594 22.31 1.591-1.665-373.85-135.67-357.881 378.335-87.855 28.998c-44.338-31.379-49.323-120.782-19.511-151.87l441.774-454.079 467.257 167.304c-42.553 23.261-77.1 89.476-3.93 146.337zM495.156 241.88l-368.136 381.698h11.020l366.51-374.19-9.393-7.508zM523.302 64.41c0 0-50.929 59.504 15.072 138.695l400.039 144.866c0 0-46.001-78.994 7.832-125.649l-422.944-157.912zM185.558 627.724l-12.216 12.914 372.938 132.431 369.42-386.344 67.592-22.31c-0.33-0.256-0.641-0.514-0.967-0.771l7.884 2.814-435.941 452.001-454.798-162.317 86.088-28.416z" /> -<glyph unicode="" glyph-name="twitter" data-tags="twitter-3" d="M918.372 656.426c0.406-9.002 0.61-18.046 0.61-27.13 0-277.084-210.922-596.57-596.548-596.57-118.418 0-228.644 34.714-321.432 94.208 16.424-1.946 33.092-2.94 50.024-2.94 98.242 0 188.636 33.518 260.418 89.768-91.774 1.682-169.192 62.308-195.876 145.608 12.816-2.454 25.936-3.772 39.46-3.772 19.1 0 37.632 2.574 55.234 7.36-95.91 19.266-168.2 104.002-168.2 205.59 0 0.892 0 1.764 0.022 2.636 28.266-15.694 60.588-25.124 94.976-26.218-56.268 37.592-93.274 101.77-93.274 174.524 0 38.424 10.32 74.436 28.386 105.4 103.414-126.852 257.882-210.312 432.144-219.072-3.568 15.35-5.436 31.348-5.436 47.792 0 115.782 93.882 209.664 209.664 209.664 60.346 0 114.808-25.468 153.050-66.204 47.774 9.388 92.626 26.846 133.138 50.876-15.654-48.97-48.868-90.050-92.178-116.004 42.418 5.070 82.852 16.342 120.444 33.010-28.102-42.036-63.666-78.96-104.626-108.526z" /> -<glyph unicode="" glyph-name="twitter-alt" data-tags="twitter-1" d="M901.046 429.24c-83.31-338.092-642.726-481.518-900.046-130.538 98.57-94.080 270.224-102.426 379.066 10.152-63.84-9.344-110.306 53.336-31.856 87.18-70.484-7.708-109.748 29.8-125.808 61.7 16.5 17.274 34.764 25.376 70.044 27.684-77.208 18.254-105.71 56.022-114.426 101.908 21.396 5.094 48.176 9.516 62.818 7.538-67.61 35.358-91.080 88.61-87.37 128.612 120.826-44.908 197.822-80.952 262.198-115.486 22.916-12.286 48.562-34.342 77.416-62.372 36.752 97.298 82.192 197.504 159.96 247.248-1.29-11.288-7.328-21.766-15.33-30.352 22.112 20.062 50.722 33.862 79.854 37.852-3.34-21.902-34.808-34.222-53.856-41.346 14.418 4.492 90.984 38.644 99.346 19.152 9.842-22.092-52.838-32.314-63.456-36.132-8.018-2.718-15.95-5.644-23.762-8.826 96.956 9.686 189.59-70.422 216.604-169.786 1.944-7.176 3.854-15.124 5.626-23.468 35.46-13.212 99.776 0.654 120.458 13.404-14.968-35.444-53.856-61.544-111.304-66.312 27.632-11.492 79.8-17.876 115.778-11.732-22.78-24.452-59.428-46.578-121.954-46.080z" /> -<glyph unicode="" glyph-name="stumble_upon" data-tags="stumble_upon" d="M566.102 545.942l69.816-32.508 104.078 31.060v72.218c-3.696 122.942-104.152 221.532-227.992 221.532-123.388 0-223.61-97.866-227.992-220.18v-329.994c0-29.858-24.218-54.076-54.086-54.076-29.878 0-54.088 24.218-54.088 54.076v139.846h-174.838c0 0 0-140.052 0-141.692 0-126.182 102.278-228.468 228.458-228.468 125.076 0 226.448 100.534 228.212 225.17l0.246 325.916c0 29.898 24.22 54.098 54.088 54.098 29.858 0 54.096-24.2 54.096-54.098v-62.9zM848.172 427.916v-146.342c0-29.876-24.218-54.098-54.098-54.098-29.86 0-54.078 24.22-54.078 54.098v143.56l-104.078-31.060-69.816 32.508v-142.398c1.066-125.208 102.954-226.428 228.45-226.428 126.162 0 228.45 102.288 228.45 228.468 0 1.638 0 141.692 0 141.692h-174.83z" /> -<glyph unicode="" glyph-name="skype" data-tags="skype" d="M986.86 339.512c7.262 33.236 11.126 67.718 11.126 103.124 0 265.456-215.176 480.634-480.632 480.634-28.018 0-55.464-2.444-82.188-7.036-42.968 27.048-93.794 42.766-148.312 42.766-153.924 0-278.704-124.806-278.704-278.73 0-51.45 13.998-99.606 38.326-140.974-6.388-31.214-9.756-63.55-9.756-96.662 0-265.456 215.178-480.632 480.632-480.632 30.094 0 59.484 2.792 88.028 8.084 39.226-21.11 84.086-33.086 131.742-33.086 153.95 0 278.73 124.782 278.73 278.73 0 44.464-10.454 86.48-28.992 123.782zM763.844 212.96c-22.208-31.49-55.066-56.416-97.632-74.106-42.144-17.516-92.668-26.398-150.182-26.398-69.040 0-126.926 12.126-172.086 36.078-32.288 17.466-58.934 41.070-79.146 70.238-20.41 29.466-30.764 58.66-30.764 86.856 0 17.616 6.762 32.884 20.060 45.362 13.174 12.4 30.042 18.662 50.152 18.662 16.518 0 30.764-4.94 42.342-14.72 11.054-9.38 20.56-23.254 28.17-41.17 8.534-19.512 17.816-35.978 27.622-48.954 9.432-12.476 22.98-22.956 40.296-31.164 17.442-8.26 40.92-12.426 69.814-12.426 39.748 0 72.334 8.484 96.836 25.226 23.926 16.316 35.55 35.93 35.55 59.958 0 18.988-6.086 33.882-18.562 45.586-13.098 12.226-30.312 21.758-51.298 28.294-21.83 6.786-51.498 14.146-88.152 21.832-49.876 10.678-92.27 23.354-125.978 37.702-34.458 14.646-62.252 34.98-82.564 60.432-20.634 25.798-31.088 58.21-31.088 96.312 0 36.304 10.978 69.040 32.636 97.26 21.482 28.044 52.872 49.828 93.292 64.772 39.896 14.746 87.33 22.232 141 22.232 42.938 0 80.664-4.964 112.18-14.77 31.66-9.856 58.386-23.18 79.368-39.572 21.136-16.518 36.856-34.184 46.734-52.522 9.98-18.564 15.024-36.978 15.024-54.842 0-17.166-6.614-32.786-19.71-46.36-13.176-13.698-29.77-20.66-49.356-20.66-17.792 0-31.738 4.366-41.394 12.924-9.008 7.934-18.34 20.36-28.696 38.174-12 22.78-26.496 40.72-43.138 53.37-16.144 12.302-43.142 18.54-80.244 18.54-34.458 0-62.452-6.936-83.262-20.56-20.060-13.15-29.792-28.246-29.792-46.084 0-10.954 3.12-20.086 9.582-27.97 6.836-8.334 16.468-15.668 28.644-21.756 12.626-6.362 25.65-11.402 38.674-14.996 13.374-3.718 35.804-9.206 66.518-16.318 38.9-8.334 74.654-17.692 106.268-27.796 31.988-10.254 59.656-22.878 82.192-37.55 23.028-14.996 41.27-34.232 54.192-57.238 12.976-23.054 19.536-51.548 19.536-84.634-0.006-39.578-11.306-75.68-33.638-107.244z" /> -<glyph unicode="" glyph-name="share" data-tags="share" d="M1011.41 116.298c0-99.056-80.292-179.298-179.274-179.298-99.054 0-179.324 80.242-179.324 179.298 0 3.244 0.296 6.412 0.472 9.63l-354.928 180.948c-29.766-22.056-66.544-35.282-106.442-35.282-99.056 0-179.324 80.268-179.324 179.298s80.268 179.298 179.324 179.298c44.338 0 84.858-16.194 116.172-42.866l345.548 176.18c-0.5 5.364-0.824 10.728-0.824 16.194 0 99.006 80.27 179.298 179.324 179.298 98.98 0 179.274-80.292 179.274-179.298 0-99.032-80.292-179.3-179.274-179.3-44.164 0-84.484 16.018-115.722 42.442l-345.998-176.43c0.448-5.116 0.774-10.28 0.774-15.52 0-9.306-0.948-18.364-2.296-27.296l342.778-174.758c31.84 28.944 74.008 46.758 120.464 46.758 98.984 0.004 179.276-80.29 179.276-179.296z" /> -<glyph unicode="" glyph-name="reddit" data-tags="reddit" d="M1023 459.496c0 64.894-52.832 117.724-117.726 117.724-28.866 0-56.092-10.444-77.59-29.374-76.56 48.998-178.132 80.476-290.428 84.73l66.94 190.262 167.246-39.964c0.108-52.936 43.188-95.954 96.142-95.954 53 0 96.142 43.124 96.142 96.164 0 53.020-43.142 96.142-96.142 96.142-40.236 0-74.75-24.846-89.044-60.010l-198.16 47.354-82.246-233.68c-117.008-2.21-223.13-33.88-302.534-84.372-21.372 18.488-48.324 28.7-76.876 28.7-64.916 0-117.724-52.83-117.724-117.724 0-40.132 20.656-77.17 54.134-98.774-2.042-11.728-3.2-23.668-3.2-35.776 0-169.922 205.992-308.176 459.19-308.176s459.17 138.254 459.17 308.176c0 11.75-1.072 23.33-3.010 34.764 34.384 21.416 55.716 59.002 55.716 99.788zM867.584 842.254c32.636 0 59.168-26.552 59.168-59.168 0-32.636-26.532-59.166-59.168-59.166s-59.168 26.53-59.168 59.166c0 32.616 26.532 59.168 59.168 59.168zM37.996 459.496c0 44.534 36.216 80.75 80.73 80.75 16.382 0 32.026-4.884 45.27-13.918-46.576-36.112-80.898-79.486-98.542-127.262-17.184 15.16-27.458 37.016-27.458 60.43zM511.126 53.746c-232.816 0-422.196 121.662-422.196 271.202 0 149.542 189.378 271.182 422.196 271.182 232.796 0 422.196-121.64 422.196-271.182-0.002-149.54-189.4-271.202-422.196-271.202zM957.18 397.886c-17.392 47.964-51.568 91.51-98.080 127.79 13.454 9.434 29.414 14.57 46.174 14.57 44.514 0 80.73-36.216 80.73-80.75 0-24.044-10.824-46.428-28.824-61.61zM365.27 307.030c-39.986 0-72.392 32.364-72.392 72.328 0 39.944 32.406 72.348 72.392 72.348 39.944 0 72.306-32.404 72.306-72.348 0-39.966-32.362-72.328-72.306-72.328zM739.586 379.358c0-39.964-32.366-72.328-72.308-72.328-39.984 0-72.372 32.364-72.372 72.328 0 39.944 32.386 72.348 72.372 72.348 39.942 0 72.308-32.406 72.308-72.348zM681.152 209.688c7.244-7.096 7.52-18.656 0.506-25.984-2.166-2.252-54.072-55.060-171.376-55.060-117.934 0-165.1 53.544-167.038 55.82-6.654 7.748-5.748 19.456 2.022 26.066 7.728 6.59 19.308 5.726 25.962-1.894 1.052-1.18 40.428-43.018 139.054-43.018 100.312 0 144.318 43.334 144.76 43.776 7.098 7.222 18.806 7.41 26.11 0.294z" /> -<glyph unicode="" glyph-name="rss" data-tags="rss" d="M274.354 73.832c0-74.928-60.756-135.684-135.66-135.684s-135.684 60.756-135.684 135.684c0 74.954 60.782 135.686 135.684 135.686s135.66-60.732 135.66-135.686zM3.458 959v-195.868c453.038 0 821.642-370.626 821.642-826.132h195.888c0.002 563.546-456.452 1022-1017.53 1022zM3.16 611.78v-195.89c127.152 0 246.618-49.704 336.442-139.952 89.948-90.374 139.502-210.638 139.502-338.738h195.842c0 371.972-301.362 674.58-671.786 674.58z" /> -<glyph unicode="" glyph-name="paypal" data-tags="paypal" d="M736.068 959h-502.516l-222.664-1022h294.908l72.208 338.588h210.602c201.606 0 370.15 124.256 415.288 335.494 51.124 239.18-120.392 347.918-267.826 347.918zM727.036 611.082c-18.064-77.648-93.27-139.776-168.508-139.776h-138.406l63.19 279.552h144.416c72.232 0 120.366-62.13 99.308-139.776z" /> -<glyph unicode="" glyph-name="mail" data-tags="mail" d="M341.182 481.188l-338.014-379.714c-0.866 3.822-2.168 7.518-2.168 11.704v669.644c0 5.082 1.42 9.674 2.712 14.288l337.47-315.922zM987.974 828.952c-2.476 0.554-4.848 1.752-7.58 1.752h-936.756c-2.594 0-4.912-1.198-7.538-1.752l475.922-445.468 475.952 445.468zM525.616 333.958c-3.908-3.738-8.744-5.554-13.594-5.554-4.838 0-9.684 1.816-13.55 5.554l-124.42 116.434-340.74-382.682c3.396-1.046 6.728-2.414 10.326-2.414h936.756c3.78 0 7.068 1.368 10.486 2.414l-340.716 382.682-124.548-116.434zM682.988 481.188l337.96-379.672c0.918 3.822 2.050 7.518 2.050 11.662v669.644c0 4.998-1.24 9.674-2.52 14.266l-337.49-315.9z" /> -<glyph unicode="" glyph-name="amazon" data-tags="amazon" d="M587.192 492.060v29.228c-97.724 0-200.938-20.916-200.938-135.966 0-58.498 30.328-97.958 82.138-97.958 37.916 0 72.050 23.352 93.498 61.396 26.556 46.772 25.302 90.656 25.302 143.3zM723.402 162.69c-8.96-8.010-21.868-8.566-31.942-3.134-44.892 37.28-52.924 54.526-77.436 90.018-74.14-75.534-126.67-98.188-222.712-98.188-113.742 0-202.18 70.17-202.18 210.538 0 109.666 59.376 184.224 144.046 220.788 73.294 32.172 175.672 38.008 254.012 46.794v17.548c0 32.148 2.506 70.182-16.436 97.958-16.434 24.86-48.026 35.084-75.81 35.084-51.52 0-97.34-26.392-108.576-81.104-2.356-12.188-11.224-24.22-23.49-24.85l-130.918 14.184c-11.048 2.482-23.352 11.364-20.148 28.238 30.072 158.842 173.524 206.836 302.074 206.836 65.714 0 151.646-17.548 203.458-67.26 65.714-61.42 59.4-143.3 59.4-232.496v-210.446c0-63.3 26.276-91.086 50.974-125.23 8.634-12.256 10.584-26.88-0.418-35.84-27.6-23.142-76.648-65.738-103.622-89.74l-0.276 0.302zM908.522 125.246c-125.442-53.204-261.768-78.922-385.768-78.922-183.866 0-361.848 50.418-505.764 134.192-12.604 7.336-21.936-5.594-11.466-15.064 133.404-120.472 309.69-192.85 505.464-192.85 139.692 0 301.898 43.942 413.806 126.508 18.498 13.694 2.646 34.168-16.272 26.136zM941.924 24.69c-4.086-10.212 4.69-14.344 13.928-6.592 60.028 50.232 75.534 155.432 63.23 170.634-12.186 15.064-117.13 28.042-181.198-16.922-9.842-6.962-8.124-16.48 2.788-15.18 36.072 4.34 116.364 13.972 130.686-4.366 14.298-18.336-15.924-93.822-29.434-127.574z" /> -<glyph unicode="" glyph-name="tags" data-tags="tags" d="M124.636 853.596l-79.148-81.686 44.632-280.834 571.778-554.076 316.614 326.74-571.78 554.078-282.096 35.778zM330.112 575.296c-29.15-30.084-77.146-30.842-107.228-1.684-30.076 29.14-30.836 77.144-1.686 107.228 29.15 30.068 77.152 30.812 107.22 1.67 30.082-29.142 30.844-77.146 1.694-107.214zM53.118 829.29l-7.628 48.026 79.146 81.684 282.096-35.778 571.78-554.076-35.708-36.858-543.846 527.008-282.096 35.78-63.744-65.786z" /> -<glyph unicode="" glyph-name="broadsword" data-tags="broadsword" d="M27.43 41.2l30.374 30.374 80.793-80.793-30.374-30.374-80.793 80.793zM449.823 295.015c0 48.521-39.36 87.882-87.882 87.882s-87.88-39.36-87.88-87.88c0-48.521 39.338-87.859 87.882-87.882s87.902 39.338 87.88 87.88zM274.472 286.614l-0.807 0.807-166.337-166.336 80.794-80.794 166.337 166.337-0.92 0.92c-41.832 3.986-75.099 37.253-79.067 79.065zM274.061 295.016c0 45.507 34.621 82.952 78.95 87.431-46.731 53.121-88.214 110.883-123.852 172.613l-111.566-111.566 156.877-156.877c-0.262 2.763-0.409 5.564-0.409 8.399zM449.376 286.054c-4.472-44.334-41.914-78.942-87.433-78.92-2.836 0.002-5.638 0.149-8.406 0.413l157.058-157.058 111.566 111.566c-62.063 35.842-119.841 77.405-172.785 123.999zM815.497 885.368l-423.004-423.004c6.535-9.622 10.729-21.41 10.729-33.817 0-19.234-9.188-36.441-23.375-47.483 34.711-7.191 61.918-34.869 68.453-69.814 11.013 14.625 28.5 24.14 48.078 24.14 12.407 0 23.51-3.51 32.978-9.891l423.002 423.002 29.691 166.555-166.553-29.688zM41.964 87.42l112.539-112.539 49.514 49.514-112.539 112.539-49.514-49.514z" /> -<glyph unicode="" glyph-name="pin-3" data-tags="pin-3" d="M788.532 238.758l226.314-225.832-32.91-34.866-34.866-32.912-225.83 226.316-235.348-234.464-45.544 322.25-254.884 294.13-135.566-53.512-48.896 48.896 410.236 410.236 48.896-48.894-53.512-135.568 294.132-254.882 322.242-45.552-234.464-235.346z" /> -<glyph unicode="" glyph-name="tag" data-tags="tag" d="M87.698 950l-86.698-89.474 48.888-307.616 626.31-606.91 346.802 357.898-626.306 606.912-308.996 39.19zM312.766 645.164c-31.928-32.954-84.502-33.786-117.454-1.848-32.946 31.922-33.776 84.502-1.846 117.454 31.928 32.938 84.508 33.752 117.446 1.83 32.952-31.92 33.784-84.5 1.854-117.436z" /> -<glyph unicode="" glyph-name="tablet" data-tags="tablet" d="M908.912 959h-793.826c-14.352 0-25.984-11.632-25.984-25.976v-970.034c0-14.358 11.632-25.99 25.984-25.99h793.826c14.352 0 25.984 11.632 25.984 25.99v970.034c0 14.344-11.632 25.976-25.984 25.976zM470.158 876.292h112.324v-23.624h-112.324v23.624zM526.324-21.606c-31.092 0.468-56.166 24.056-56.166 53.124 0 29.082 25.074 52.664 56.166 53.126 31.090-0.46 56.158-24.042 56.158-53.126 0-29.066-25.068-52.654-56.158-53.124zM887.65 100.446h-751.302v695.116h751.302v-695.116zM551.95 32.632c0-14.15-11.466-25.618-25.626-25.618-14.152 0-25.62 11.466-25.62 25.618s11.466 25.62 25.62 25.62c14.158 0 25.626-11.466 25.626-25.62z" /> -<glyph unicode="" glyph-name="broken-shield" data-tags="broken-shield" d="M401.318 508.907l80.983 28.719-218.134 345.925h199.85l192.014-383.783-96.66-32.633 160.868-347.253c152.476 168.544 181.295 473.065 181.295 774.286h-791.19c0-407.489 83.968-810.821 395.369-896.398 75.963 16.195 137.687 49.175 187.768 95.137l-292.164 416z" /> -<glyph unicode="" glyph-name="mobile" data-tags="mobile" d="M764.606 959h-505.212c-14.344 0-25.984-11.632-25.984-25.976v-970.034c0-14.358 11.638-25.99 25.984-25.99h505.212c14.352 0 25.984 11.632 25.984 25.99v970.034c0 14.344-11.632 25.976-25.984 25.976zM455.838 876.292h112.326v-23.624h-112.326v23.624zM512.004-21.606c-31.090 0.468-56.166 24.056-56.166 53.124 0 29.082 25.076 52.664 56.166 53.126 31.090-0.46 56.16-24.042 56.16-53.126 0-29.066-25.070-52.654-56.16-53.124zM743.344 100.446h-462.688v695.116h462.688v-695.116zM537.628 32.632c0-14.15-11.468-25.618-25.626-25.618-14.152 0-25.62 11.466-25.62 25.618s11.466 25.62 25.62 25.62c14.158 0 25.626-11.466 25.626-25.62z" /> -<glyph unicode="" glyph-name="google" data-tags="google" d="M672.398 910.594c8.434-5.24 17.918-12.876 28.446-22.906 10.106-10.48 20.036-23.354 29.714-38.624 9.282-14.398 17.492-31.438 24.652-51.076 5.886-19.636 8.86-42.542 8.86-68.74-0.796-48.032-11.406-86.432-31.79-115.224-10.008-13.972-20.61-26.848-31.812-38.65-12.398-11.802-25.602-23.778-39.598-36.004-7.984-8.284-15.394-17.69-22.184-28.144-8.008-10.93-11.976-23.58-11.976-37.976 0-13.972 4.094-25.548 12.304-34.73 6.958-8.734 13.722-16.37 20.282-22.906l45.54-37.326c28.316-23.13 53.144-48.656 74.454-76.602 20.114-28.344 30.566-65.47 31.39-111.282 0-65.048-28.722-122.66-86.16-172.862-59.554-51.95-145.488-78.796-257.794-80.542-94.016 0.874-164.228 20.908-210.588 60.132-46.808 36.578-70.212 80.392-70.212 131.342 0 24.852 7.61 52.498 22.856 82.988 14.77 30.542 41.494 57.338 80.218 80.392 43.464 24.852 89.15 41.42 136.982 49.678 47.382 6.96 86.754 10.878 118.042 11.752-9.68 12.724-18.288 26.348-25.872 40.82-8.86 14.046-13.252 30.94-13.252 50.702 0 11.826 1.698 21.732 5.040 29.642 2.97 8.332 5.688 15.992 8.212 23.004-15.248-1.746-29.62-2.596-43.144-2.596-71.434 0.85-125.904 23.33-163.356 67.418-39.222 41.020-58.81 88.826-58.81 143.37 0 65.92 27.77 125.68 83.312 179.374 38.174 31.414 77.822 51.924 118.966 61.554 40.72 8.284 78.87 12.426 114.502 12.426h268.45l-82.886-48.406h-82.788zM724.25 137.906c0 34.084-11.106 63.75-33.336 89.076-23.504 24.004-60.258 53.47-110.286 88.402-8.532 0.874-18.562 1.322-30.118 1.322-6.836 0.848-24.352 0-52.572-2.644-27.77-3.918-56.214-10.23-85.258-18.962-6.836-2.644-16.442-6.588-28.868-11.802-12.4-5.664-24.976-13.748-37.8-24.226-12.402-10.93-22.856-24.454-31.414-40.622-9.83-17.018-14.746-37.528-14.746-61.554 0-47.132 21.358-86.006 64.1-116.546 40.622-30.59 96.162-46.286 166.7-47.158 63.224 0.874 111.556 14.822 144.866 41.918 32.486 26.646 48.732 60.878 48.732 102.796zM537.088 531.386c35.358 1.296 64.798 13.972 88.326 38.076 11.378 17.016 18.692 34.534 21.906 52.448 1.972 17.964 2.946 33.036 2.946 45.286 0 52.92-13.524 106.266-40.622 160.086-12.676 25.798-29.39 46.784-50.102 62.976-21.158 15.294-45.484 23.404-72.982 24.278-36.378-0.874-66.62-15.52-90.748-43.964-20.31-29.742-30.066-62.976-29.194-99.706 0-48.554 14.222-99.082 42.642-151.554 13.748-24.502 31.488-45.286 53.246-62.328 21.76-17.064 46.636-25.598 74.582-25.598z" /> -<glyph unicode="" glyph-name="gmail" data-tags="gmail" d="M1023 66.494v763.012h-1022v-763.012h1022zM876.49 222.896v-148.448h-717.43v140.494h1.23l3.632 1.21 269.328 216.87 81.48-69.038 72.352 63.56 289.408-204.648zM876.49 249.144l-274.228 191.834 274.228 237.638v-429.472zM830.906 821.57l-37.11-35.43-17.622-17.138-16.41-17.064-17.028-15.888-15.796-15.89-15.2-14.66-14.008-14.66-14.588-13.45-38.3-38.488-34.648-32.99-9.742-10.376-10.32-8.57-9.148-8.532-16.39-15.908-7.918-6.708-6.688-6.742-6.688-5.44-5.496-6.148-10.32-8.568-4.246-3.018-3.054-3.69-3.632-1.824-2.442-2.458-3.036-2.422-308.872 307.274 628.702-1.212zM417.454 446.472l-258.394-206.474 0.596 425.786 257.798-219.312z" /> -<glyph unicode="" glyph-name="foursquare_2" data-tags="foursquare_2" d="M600.528 908.224c20.336 0 42.418-2.17 66.394-6.836 45.61-8.834 73.156-45.96 121.786-71.036-13.122-44.414-51.25-63.85-81.192-91.372-32.434 27.522-62.426 39.374-89.074 39.374-83.312 0-133.864-115.874-124.106-232.27 12.25-9.332 31.336-11.776 52.946-11.776 24.052 0 51.176 3.044 75.254 3.044 8.48 0 16.59-0.376 24.028-1.422-48.282-38.6-60.258-113.552-147.212-113.552-7.81 0-16.218 0.624-25.326 1.922-35.282-137.306-57.288-287.862-81.216-436.522-44.014 0-88.002 0-131.942 0 16.392 149.334 53.246 278.304 71.010 426.366-5.638 9.284-18.164 11.728-33.134 11.728-16.418 0-35.854-2.946-52.322-2.946-5.79 0-11.228 0.376-16.018 1.374 4.492 39.472 7.66 80.292 20.31 111.63 33.81 0 67.642 0 101.476 0 17.488 187.83 61.726 372.294 248.338 372.294zM600.528 959v0c-104.496 0-182.718-48.082-232.52-142.87-36.154-68.89-52.472-154.248-61.504-229.426h-90.074l-12.826-31.788c-13.698-34.058-17.964-73.008-22.056-110.684-0.524-4.716-1.074-9.482-1.596-14.222l-5.24-46.058 45.436-9.382c7.834-1.622 16.442-2.394 26.274-2.394 9.83 0 19.462 0.748 28.818 1.522-7.934-53.22-18.014-104.994-27.82-155.446-13.922-71.586-28.294-145.59-37.028-224.936l-6.188-56.314h231.82l6.912 42.692c2.97 18.638 5.938 37.226 8.882 55.866 17.99 112.978 36.478 229.302 61.654 336.566 74.654 5.39 109.11 53.122 134.688 88.552 10.204 14.072 19.758 27.346 30.14 35.654l92.218 73.732-116.972 16.168c-9.208 1.272-19.36 1.896-31.012 1.896-13.55 0-27.348-0.824-40.672-1.622-12.376-0.748-24.102-1.448-34.582-1.448-1.148 0-2.172 0-3.218 0 1.82 51.424 16.992 99.18 41.020 125.33 15.844 17.216 28.992 17.216 33.308 17.216 15.77 0 35.208-9.456 56.29-27.322l34.16-28.994 32.984 30.316c6.062 5.564 13.028 11.128 20.41 16.992 27.046 21.632 60.708 48.554 75.18 97.384l11.876 40.222-37.3 19.262c-15.77 8.108-29.316 18.19-43.692 28.868-24.826 18.464-52.998 39.374-91.744 46.908-26.6 5.14-52.176 7.76-76.026 7.76v0z" /> -<glyph unicode="" glyph-name="burning-embers" data-tags="burning-embers" d="M202.096 232.208c-100.142-27.212-164.829-67.517-164.829-112.226 0-81.903 212.698-148.463 474.616-148.463s474.616 66.56 474.616 148.463c0 44.55-64.136 85.019-163.661 112.226 34.405-17.729 54.944-38.436 54.944-60.789 0-64.156-164.351-116.9-365.897-116.9s-364.726 52.749-364.726 116.9c0 22.471 20.188 43.001 54.944 60.789h-0.007zM608.47 852.759l0.007-0.005-0.003 0.008zM747.289 606.591c-11.717-163.955-140.757-99.918-87.92 116.604 12.97 53.154-24.031 114.237-50.893 129.559 52.807-134.027-118.288-234.184-113.836-70.327-80.296-73.726-25.583-168.192 9.553-243.361 26.636-56.995 24.655-107.48-20.206-126.704-32.018-13.716-67.627 23.144-79.117 60.962-5.112 16.827-3.411 41.735 1.851 75.881-42.096-85.46-107.781-91.664-76.815 62.938-119.018-135.44-76.015-397.058 89.886-476.962-25.934 50.843-40.17 113.951-28.4 167.746 0 0 0 0 0 0.002v0c0 0 0 0 0-0.002 72.58-157.372 241.786-2.873 251.633 137.904 26.941-89.085 23.161-219.118-21.623-312.409 180.56 70.484 221.070 342.375 125.885 478.168z" /> -<glyph unicode="" glyph-name="com-laptop" data-tags="com-laptop" d="M991.096 213.792h-43.548v553.582c0 23.422-16.334 42.584-36.294 42.584h-798.504c-19.964 0-36.3-19.162-36.3-42.584v-553.584h-43.55c-23.958 0-37.356-18.18-29.784-40.394l16.010-46.958c7.578-22.214 33.372-40.396 57.326-40.396h871.096c23.954 0 49.754 18.182 57.322 40.396l16.018 46.958c7.57 22.216-5.832 40.396-29.792 40.396zM599.114 128.624h-174.228v42.584h174.228v-42.584zM903.992 256.374v-42.584h-783.984v511.002c0 23.42 19.598 42.582 43.556 42.582h696.872c23.954 0 43.556-19.162 43.556-42.588v-468.412zM163.556 724.792l0.008-468.418h696.872v468.414l-696.88 0.006zM256.5 682.208c23.516 0 42.584-19.062 42.584-42.584 0-23.52-19.066-42.582-42.584-42.582s-42.584 19.062-42.584 42.582c0 23.522 19.066 42.584 42.584 42.584z" /> -<glyph unicode="" glyph-name="foursquare_1" data-tags="foursquare_1" d="M1022 894.288l-267.292-297.568-171.056 171.426-59.804-73.85c-32.866 110.042-135.604 190.324-256.38 190.324-147.298 0-267.468-119.446-267.468-266.744 0-0.222 0-0.444 0-0.622 0-0.266 0-0.532 0-0.798 0-139.538 108.030-253.924 244.418-265.28l-2.668-3.812 342.098-345.652 379.556 386.988-62.916 62.14 121.512 106.67v336.778zM976 563.41l-442.418-384.312-209.518 206.902c-0.044 0-0.044 0-0.088 0l-8.916 5.64c-15.348-3.238-31.27-6.294-47.548-6.294-127.916 0-231.97 103.604-231.97 231.764 0 128.182 104.052 232.142 231.97 232.142 127.916 0 232.014-104.456 232.014-232.638 0-37.834-9.136-73.65-25.192-105.252l19.382-34.696c0.178 0.266 0.31 0.482 0.488 0.748l58.538-124.416 423.258 469.616v-259.204z" /> -<glyph unicode="" glyph-name="linkedin" data-tags="linkedin" d="M233.008-40.438v659.13h-219.058v-659.128l219.058-0.002zM123.502 708.652c76.366 0 123.936 50.656 123.936 113.906-1.444 64.656-47.57 113.882-122.504 113.882-74.946-0.002-123.934-49.228-123.934-113.884 0-63.25 47.544-113.906 121.060-113.906h1.442v0.002zM354.248-40.438c0 0 2.874 597.286 0 659.128h219.092v-95.588h-1.454c28.808 44.98 80.708 111.066 198.88 111.066 144.17 0 252.232-94.206 252.232-296.666v-377.942h-219.056v352.616c0 88.602-31.696 149.062-110.994 149.062-60.508 0-96.568-40.76-112.404-80.16-5.794-14.024-7.204-33.722-7.204-53.422v-368.094h-219.092z" /> -<glyph unicode="" glyph-name="campfire" data-tags="campfire" d="M809.322 178.599c122.354 90.164 186.231 281.754 10.546 364.97 78.031-120.758-26.193-209.776-121.278-82.794-76.969 144.033 164.49 226.429-136.434 452.459h-0.005c96.719-142.775-36.839-290.674-127.106-117.782 54.501-288.532-130.238-332.159-149.265-149.265-153.020-135.345-115.826-307.654-30.782-436.563l-125.564-72.181c7.809-75.624 43.526-135.221 104.533-180.269l170.483 98.002c7.275-57.232 56.315-101.5 115.772-101.5 43.728 0 81.818 23.955 101.817 59.387l215.875-57.593c47.221 59.235 66.224 126 54.112 201.063l-82.703 22.065zM305.966 410.194c51.295-78.729 213.348-20.124 193.917 119.699 21.355-64.041 75.472-57.805 131.338 40.973-75.991-205.097 43.596-338.184 123.628-276.789 3.592-29.29-10.486-63.745-32.424-92.294l-239.477 63.891c-16.658-16.257-29.519-35.409-38.939-56.051l-39.889 12.639c-1.831 0.64-3.633 1.343-5.426 2.075-0.448 0.182-0.892 0.368-1.336 0.556-1.744 0.738-3.475 1.507-5.182 2.33-0.159 0.077-0.314 0.16-0.473 0.239-1.55 0.757-3.079 1.56-4.597 2.385-0.551 0.301-1.101 0.603-1.647 0.912-1.363 0.77-2.713 1.567-4.048 2.39-0.66 0.408-1.313 0.829-1.966 1.25-1.069 0.687-2.128 1.39-3.177 2.111-0.727 0.499-1.45 1.006-2.167 1.52-0.844 0.606-1.675 1.231-2.507 1.859-1.278 0.966-2.541 1.956-3.789 2.972-0.563 0.458-1.128 0.915-1.684 1.385-0.905 0.762-1.806 1.533-2.694 2.32-0.304 0.269-0.603 0.548-0.905 0.82-1.817 1.64-3.603 3.331-5.349 5.077-0.195 0.195-0.393 0.388-0.586 0.583-3.049 3.082-5.984 6.321-8.8 9.702-31.371 37.679-47.959 93.174-41.82 147.444zM347.181 863.903c-128.047-64.56-29.208-120.777-27.987-184.337 88.102 77.739-7.459 106.788 27.987 184.337z" /> -<glyph unicode="" glyph-name="candle-fire" data-tags="candle-fire" d="M364.41 918.925c48.374-371.294-188.237-561.456-139.152-744.638 7.323-27.332 20.381-52.291 37.719-74.6-5.128 14.257-8.070 29.28-8.404 44.919-2.103 98.496 100.821 184.113 174.397 321.957 23.019-62.421 47.523-137.253 33.456-232.201 125.665 36.485 221.166 132.846 242.011 234.957 96.625-172.937 82.802-376.68-100.193-481.94-4.248-2.444-8.59-4.704-13.003-6.804 49.815 7.171 96.084 25.473 132.218 56.419h0.002c296.449 253.88 51.648 716.187-359.051 881.931z" /> -<glyph unicode="" glyph-name="candle" data-tags="candle" d="M466.247 406.835c-30.89 31.166-51.977 87.364-51.977 152.13 0 98.302 62.474 178.087 106.319 178.087 42.198 0 106.319-79.782 106.319-178.087 0-60.683-18.768-113.485-46.466-145.642 72.078 35.977 123.643 71.326 123.643 182.95-0.002 142.481-133.347 316.703-187.435 316.703-55.735 0-187.435-174.222-187.435-316.702 0-118.508 57.949-159.169 137.032-189.44zM683.325 341.182v49.174c-53.936-20.026-108.718-29.713-163.098-29.79 4.781 58.617 2.948 119.335-8.643 198.482l-4.138-198.344c-51.808 1.363-103.16 11.443-152.97 29.651v-190.803c-6.652-51.088-44.77-60.824-44.090-106.58 0.58-39.024 29.918-51.907 44.090-35.197v-72.395h328.849v176.317c17.208-21.728 54.24-6.024 54.962 42.634 0.86 57.997-48.906 68.982-54.962 136.85z" /> -<glyph unicode="" glyph-name="capitol" data-tags="capitol" d="M1000.647 456.591v104.259h-230.789c-16.143 115.39-107.416 206.681-222.801 222.851l-36.697 137.562-36.699-137.563c-115.381-16.172-206.653-107.462-222.796-222.849h-230.798v-104.259h104.060v-355.032h-104.060v-104.259h364.98l-25.623-45.908h304.399l-25.978 45.908h362.802v104.259h-103.9v355.032h103.9zM547.23 101.823h-73.583v354.768h73.583v-354.768zM262.096 456.591h73.584v-355.032h-73.584v355.032zM758.779 101.559h-73.581v355.032h73.581v-355.032z" /> -<glyph unicode="" glyph-name="castle-emblem" data-tags="castle-emblem" d="M507.648 910.733c-254.555 0-460.915-206.357-460.915-460.915 0-137.867 60.55-261.576 156.485-346.040v278.080l-27.985 45.482h15.158l88.625 228.561 87.461-228.561h16.326l-29.151-45.482v-36.152h74.632v246.056l-27.987 45.482h15.158l88.624 228.559 88.624-228.554h15.158l-29.151-45.482v-176.088h73.467v67.636l-29.151 45.482h16.326l87.463 228.561 88.625-228.561h15.158l-27.987-45.482v-387.657c101.406 84.548 165.951 211.809 165.951 354.162 0.003 254.557-206.354 460.914-460.91 460.914z" /> -<glyph unicode="" glyph-name="clockwork" data-tags="clockwork" d="M684.58 280.582l-94.358 125.615c6.386 11.997 10.016 25.685 10.016 40.225 0 31.306-16.783 58.685-41.837 73.656v98.449h45.48l-89.791 258.258-90.959-258.258h45.48v-99.664c-23.966-15.208-39.888-41.957-39.888-72.442 0-47.361 38.396-85.755 85.757-85.755 1.458 0 2.907 0.038 4.347 0.11l97.908-130.339-34.619-26.081 227.759-161.445-91.913 262.817-33.383-25.147zM942.301 446.236c0 56.35-10.88 110.149-30.611 159.45l78.369 78.369-239.292 239.289-78.332-78.332c-43.927 17.592-91.433 28.144-141.128 30.246l38.053-95.351c11.035-1.854 21.882-4.263 32.526-7.158 2.736-0.745 5.459-1.522 8.169-2.334 0.68-0.204 1.361-0.401 2.038-0.608 3.142-0.962 6.266-1.969 9.37-3.020 0.631-0.214 1.258-0.438 1.888-0.655 2.693-0.93 5.371-1.893 8.032-2.888 0.618-0.231 1.239-0.456 1.854-0.69 3.072-1.169 6.124-2.382 9.153-3.638 0.591-0.246 1.176-0.499 1.766-0.747 2.656-1.119 5.295-2.27 7.916-3.455 0.55-0.249 1.103-0.491 1.65-0.742 2.995-1.373 5.967-2.79 8.914-4.246 0.548-0.271 1.092-0.55 1.639-0.824 2.616-1.311 5.214-2.654 7.791-4.031 0.474-0.254 0.952-0.501 1.427-0.757 2.913-1.574 5.8-3.191 8.66-4.846 0.499-0.289 0.994-0.585 1.492-0.877 2.581-1.512 5.142-3.055 7.677-4.632 0.388-0.242 0.78-0.478 1.168-0.72 2.83-1.776 5.631-3.595 8.404-5.452 0.438-0.294 0.872-0.593 1.308-0.887 2.551-1.726 5.078-3.481 7.577-5.274 0.296-0.212 0.596-0.419 0.89-0.633 2.74-1.978 5.447-3.997 8.125-6.054 0.376-0.289 0.748-0.583 1.124-0.874 2.514-1.948 5.003-3.926 7.459-5.942 0.2-0.165 0.406-0.327 0.606-0.493 2.644-2.182 5.254-4.403 7.831-6.664 0.307-0.269 0.61-0.541 0.917-0.812 2.477-2.187 4.925-4.405 7.337-6.662 0.104-0.097 0.209-0.192 0.312-0.289 2.539-2.384 5.040-4.808 7.504-7.268 0.244-0.242 0.483-0.488 0.727-0.732 2.427-2.436 4.823-4.903 7.175-7.412 0.008-0.008 0.017-0.018 0.027-0.027 2.424-2.588 4.806-5.215 7.148-7.878 0.179-0.204 0.356-0.409 0.535-0.613 4.661-5.32 9.159-10.786 13.484-16.394 0.12-0.155 0.239-0.314 0.359-0.469 4.358-5.673 8.544-11.486 12.544-17.436 0.074-0.109 0.145-0.217 0.217-0.326 4.029-6.009 7.873-12.151 11.518-18.424 0.035-0.060 0.070-0.122 0.105-0.182 3.672-6.326 7.146-12.781 10.41-19.359 0.007-0.015 0.013-0.028 0.022-0.043 9.852-19.854 17.812-40.811 23.646-62.639l0.002 0.002c7.465-27.937 11.464-57.289 11.464-87.581 0-30.309-3.994-59.681-11.469-87.631l-0.010 0.010c-14.019-52.438-40.347-99.827-75.652-138.957l63.921-173.277 161.982 161.982-78.374 78.374c19.755 49.314 30.64 103.137 30.64 159.512zM734.89 78.58l-83.91 58.669c-11.83-5.297-24.018-9.941-36.518-13.88-0.538-0.169-1.076-0.341-1.615-0.508-1.692-0.525-3.391-1.034-5.095-1.532-0.74-0.215-1.483-0.424-2.227-0.636-1.667-0.474-3.336-0.947-5.015-1.397l0.002-0.002c-27.957-7.48-57.336-11.485-87.651-11.485-30.291 0-59.643 4.002-87.578 11.468v0c-21.828 5.833-42.787 13.793-62.641 23.644-0.017 0.008-0.033 0.017-0.052 0.025-9.908 4.918-19.54 10.308-28.867 16.14-0.023 0.015-0.048 0.030-0.072 0.045-9.328 5.835-18.352 12.113-27.042 18.803-0.012 0.008-0.023 0.018-0.035 0.027-23.208 17.872-44.032 38.69-61.911 61.893-0.002 0.003-0.005 0.007-0.007 0.008-6.699 8.693-12.985 17.722-18.826 27.057-0.012 0.018-0.023 0.038-0.035 0.057-5.835 9.326-11.229 18.958-16.152 28.864-0.010 0.020-0.020 0.040-0.030 0.060-4.925 9.916-9.376 20.107-13.329 30.546-0.002 0.007-0.005 0.012-0.007 0.018-3.954 10.449-7.407 21.147-10.327 32.061v0c-7.484 27.97-11.498 57.361-11.498 87.691 0 30.317 4.006 59.694 11.485 87.653l0.002-0.002c12.635 47.248 35.242 90.418 65.424 127.123 0.060 0.074 0.12 0.149 0.18 0.222 4.55 5.524 9.274 10.898 14.161 16.122 0.142 0.152 0.282 0.304 0.424 0.456 4.828 5.142 9.817 10.128 14.954 14.961 0.222 0.209 0.443 0.419 0.665 0.628 5.088 4.759 10.327 9.361 15.702 13.803 0.299 0.247 0.596 0.496 0.897 0.742 5.334 4.377 10.805 8.59 16.402 12.639 0.374 0.271 0.748 0.543 1.124 0.812 5.566 3.991 11.259 7.814 17.069 11.469 0.439 0.277 0.879 0.553 1.32 0.829 5.787 3.603 11.692 7.034 17.704 10.29 0.501 0.271 1.002 0.541 1.503 0.81 5.997 3.207 12.101 6.239 18.307 9.089 0.551 0.252 1.103 0.504 1.655 0.755 6.196 2.806 12.492 5.429 18.88 7.866 0.596 0.227 1.194 0.453 1.792 0.677 6.383 2.392 12.858 4.599 19.418 6.612 0.635 0.195 1.271 0.386 1.908 0.576 3.172 0.952 6.359 1.871 9.57 2.731 12.514 3.356 25.311 6.019 38.352 7.931l35.391 94.408c-51.24-1.655-100.202-12.306-145.385-30.391l-78.39 78.39-239.289-239.289 78.379-78.379c-19.748-49.319-30.638-103.142-30.638-159.517 0-56.399 10.891-110.248 30.655-159.585l-78.382-78.382 239.29-239.29 78.419 78.419c49.304-19.73 103.11-30.603 159.46-30.603 56.377 0 110.208 10.876 159.529 30.625l78.36-78.36 57.929 57.929-73.788 51.593c0 0 0 0 0 0z" /> -<glyph unicode="" glyph-name="clovers-card" data-tags="clovers-card" d="M914.086 709.71l-370.803 214.083c-48.285 27.877-110.031 11.332-137.909-36.953l-328.213-568.484c-27.879-48.285-11.332-110.031 36.953-137.909l370.803-214.083c48.285-27.879 110.031-11.332 137.909 36.953l328.213 568.484c27.879 48.285 11.332 110.031-36.953 137.909zM472.67 839.357c12.213 21.152 39.261 28.401 60.416 16.189s28.401-39.263 16.189-60.414c-12.213-21.153-39.261-28.401-60.416-16.189s-28.401 39.263-16.189 60.414zM540.423 308.215c-18.86 11.645-32.14 29.116-39.127 48.684l-19.763-124.39-131.456 81.153 0.463 0.331h-0.002l100.405 72.001c-2.238-0.212-4.489-0.334-6.742-0.389-0.256-0.007-0.511-0.022-0.768-0.025-1.206-0.020-2.416-0.015-3.623 0.012-0.317 0.007-0.636 0.028-0.954 0.038-0.887 0.028-1.774 0.060-2.661 0.114-0.474 0.028-0.947 0.074-1.42 0.109-0.733 0.055-1.467 0.109-2.198 0.18-0.516 0.050-1.031 0.117-1.545 0.175-0.692 0.080-1.381 0.159-2.073 0.254-0.535 0.074-1.067 0.16-1.602 0.244-0.67 0.104-1.338 0.209-2.006 0.327-0.543 0.097-1.086 0.204-1.629 0.309-0.658 0.129-1.316 0.261-1.973 0.404-0.545 0.119-1.089 0.246-1.634 0.374-0.651 0.154-1.303 0.314-1.953 0.483-0.543 0.14-1.084 0.287-1.625 0.438-0.65 0.182-1.3 0.371-1.948 0.566-0.535 0.162-1.069 0.327-1.602 0.498-0.651 0.209-1.3 0.429-1.948 0.655-0.528 0.182-1.054 0.366-1.58 0.558-0.651 0.239-1.3 0.491-1.949 0.745-0.515 0.202-1.029 0.401-1.542 0.613-0.658 0.272-1.313 0.56-1.968 0.849-0.498 0.219-0.996 0.433-1.492 0.66-0.673 0.311-1.34 0.64-2.008 0.966-0.469 0.231-0.94 0.451-1.408 0.69-0.715 0.366-1.423 0.752-2.132 1.138-0.414 0.226-0.83 0.439-1.243 0.67-0.94 0.53-1.873 1.084-2.801 1.65-0.167 0.102-0.337 0.195-0.504 0.299-0.074 0.045-0.142 0.095-0.215 0.14-1.214 0.755-2.405 1.535-3.575 2.335-0.451 0.309-0.887 0.633-1.331 0.949-0.78 0.555-1.555 1.113-2.315 1.687-0.506 0.384-1.004 0.777-1.5 1.169-0.668 0.526-1.328 1.061-1.978 1.602-0.521 0.434-1.037 0.874-1.545 1.318-0.595 0.52-1.179 1.047-1.759 1.579-0.523 0.479-1.046 0.957-1.557 1.447-0.526 0.504-1.036 1.022-1.549 1.539-0.53 0.533-1.067 1.061-1.584 1.605-0.346 0.364-0.673 0.742-1.012 1.111-1.301 1.418-2.557 2.867-3.762 4.353-0.195 0.241-0.398 0.474-0.59 0.715-0.635 0.798-1.245 1.612-1.851 2.427-0.226 0.304-0.456 0.605-0.678 0.91-0.605 0.835-1.193 1.68-1.769 2.532-0.189 0.279-0.376 0.558-0.561 0.837-0.596 0.902-1.179 1.811-1.744 2.731-0.117 0.19-0.231 0.384-0.347 0.576-3.323 5.506-6.077 11.312-8.229 17.324-0.003 0.007-0.007 0.013-0.010 0.022-9.442 26.415-7.333 56.734 8.433 82.267 27.503 44.543 86.636 58.528 131.177 31.027 3.468-2.142 6.421-4.774 9.517-7.267-2.108 20.006 1.936 41.473 13.222 59.948 0.002 0 0.002 0 0.003 0 0.074 0.122 0.14 0.246 0.215 0.366 0.21 0.341 0.438 0.665 0.651 1.002 0.61 0.961 1.223 1.919 1.861 2.85 0.374 0.545 0.767 1.067 1.151 1.602 0.513 0.715 1.024 1.433 1.554 2.13 0.424 0.556 0.864 1.096 1.298 1.64 0.515 0.646 1.029 1.293 1.559 1.923 0.456 0.543 0.925 1.071 1.392 1.6 0.533 0.605 1.067 1.206 1.614 1.794 0.483 0.52 0.972 1.029 1.463 1.535 0.553 0.57 1.113 1.133 1.679 1.686 0.503 0.491 1.011 0.979 1.523 1.457 0.58 0.541 1.168 1.072 1.761 1.599 0.518 0.459 1.036 0.917 1.564 1.363 0.613 0.52 1.236 1.024 1.861 1.525 0.525 0.421 1.046 0.847 1.579 1.255 0.66 0.506 1.331 0.994 2.003 1.482 0.516 0.374 1.026 0.757 1.549 1.121 0.753 0.525 1.522 1.022 2.289 1.522 0.456 0.297 0.905 0.61 1.366 0.899 1.214 0.762 2.442 1.495 3.687 2.198 0.398 0.226 0.807 0.429 1.208 0.648 0.875 0.478 1.752 0.956 2.641 1.405 0.538 0.272 1.084 0.521 1.627 0.783 0.767 0.369 1.533 0.74 2.309 1.087 0.585 0.262 1.174 0.506 1.764 0.755 0.747 0.317 1.495 0.631 2.25 0.929 0.61 0.239 1.223 0.466 1.836 0.693 0.748 0.277 1.498 0.548 2.253 0.805 0.623 0.212 1.248 0.416 1.874 0.615 0.758 0.241 1.52 0.473 2.284 0.695 0.628 0.182 1.26 0.361 1.891 0.531 0.778 0.209 1.562 0.404 2.345 0.593 0.623 0.15 1.246 0.302 1.873 0.439 0.812 0.179 1.629 0.337 2.447 0.494 0.605 0.117 1.209 0.239 1.816 0.344 0.875 0.15 1.756 0.277 2.636 0.404 0.555 0.080 1.106 0.17 1.66 0.241 1.092 0.137 2.188 0.244 3.286 0.344 0.347 0.032 0.692 0.077 1.039 0.105 1.438 0.115 2.882 0.195 4.327 0.246 0.446 0.015 0.894 0.010 1.341 0.020 1.011 0.020 2.020 0.038 3.032 0.027 0.565-0.007 1.129-0.033 1.694-0.048 0.897-0.027 1.794-0.053 2.693-0.105 0.603-0.035 1.206-0.085 1.809-0.132 0.862-0.065 1.722-0.135 2.584-0.226 0.618-0.063 1.236-0.14 1.853-0.215 0.849-0.105 1.696-0.217 2.544-0.346 0.62-0.094 1.238-0.194 1.856-0.299 0.849-0.145 1.697-0.304 2.544-0.473 0.608-0.12 1.218-0.244 1.824-0.378 0.864-0.189 1.726-0.398 2.586-0.611 0.585-0.145 1.171-0.287 1.754-0.444 0.902-0.242 1.799-0.508 2.696-0.778 0.535-0.16 1.072-0.312 1.605-0.483 1.006-0.321 2.005-0.673 3.004-1.029 0.419-0.15 0.844-0.286 1.261-0.441 2.731-1.017 5.434-2.173 8.1-3.455 0.52-0.249 1.036-0.516 1.552-0.775 0.835-0.419 1.667-0.847 2.494-1.293 0.406-0.219 0.812-0.438 1.216-0.662 1.255-0.7 2.502-1.418 3.735-2.18 44.536-27.503 58.136-84.994 30.635-129.535-0.077-0.124-0.159-0.241-0.236-0.364-0.845-1.353-1.722-2.674-2.628-3.967-0.242-0.347-0.488-0.688-0.733-1.031-0.92-1.281-1.863-2.541-2.836-3.764-11.090-13.935-25.613-24.045-41.469-29.908 3.996-1.744 7.963-3.526 11.773-5.88 25.396-15.679 40.511-41.439 43.733-68.944 0.226-1.928 0.386-3.865 0.494-5.808 0.030-0.535 0.070-1.069 0.092-1.605 0.032-0.807 0.038-1.614 0.048-2.422 0.008-0.62 0.020-1.239 0.017-1.861-0.005-0.778-0.027-1.559-0.050-2.339-0.020-0.655-0.043-1.308-0.077-1.963-0.038-0.76-0.087-1.52-0.144-2.28-0.052-0.682-0.112-1.363-0.179-2.045-0.070-0.737-0.144-1.472-0.232-2.207-0.087-0.723-0.19-1.445-0.294-2.167-0.1-0.697-0.194-1.395-0.309-2.090-0.139-0.839-0.304-1.675-0.466-2.511-0.112-0.578-0.209-1.156-0.331-1.732-0.292-1.37-0.615-2.738-0.969-4.101-0.139-0.533-0.299-1.061-0.446-1.592-0.246-0.885-0.493-1.772-0.765-2.654-0.18-0.585-0.379-1.166-0.571-1.747-0.274-0.827-0.551-1.654-0.849-2.476-0.212-0.59-0.438-1.178-0.662-1.764-0.312-0.815-0.636-1.629-0.972-2.439-0.239-0.575-0.481-1.148-0.732-1.721-0.364-0.834-0.747-1.662-1.138-2.489-0.252-0.536-0.501-1.072-0.765-1.605-0.448-0.904-0.92-1.801-1.398-2.698-0.237-0.444-0.463-0.89-0.707-1.331-0.738-1.331-1.503-2.653-2.312-3.961-27.499-44.538-85.617-59.15-130.162-31.647zM553.324 46.956c-12.213-21.153-39.261-28.401-60.416-16.189s-28.401 39.261-16.189 60.414c12.213 21.153 39.261 28.401 60.416 16.189s28.401-39.261 16.189-60.414z" /> -<glyph unicode="" glyph-name="cog" data-tags="cog" d="M733.172 444.175c0-121.99-98.897-220.887-220.887-220.887s-220.887 98.897-220.887 220.887 98.897 220.887 220.887 220.887 220.887-98.897 220.887-220.887zM852.573 396.646c7.382 51.611 65.274 87.356 137.014 92.056-4.711 51.806-17.538 101.176-37.771 147.519-65.117-30.187-133.085-26.22-164.276 15.378-31.341 41.817-14.515 107.522 33.288 161.718-38.972 32.648-84.324 58.771-132.998 77.908-24.621-67.544-75.181-113.083-126.786-105.708s-87.364 65.275-92.058 137.016v-0.005c-52.089-4.724-102.948-17.077-149.506-37.494 30.693-65.417 28.42-133.212-13.392-164.562-41.605-31.184-107.951-15.935-162.001 31.298-32.441-38.837-58.57-82.563-77.619-131.012 67.547-24.626 113.088-75.193 105.706-126.781s-65.274-87.364-137.014-92.060c4.669-51.506 17.747-101.399 37.771-147.519 35.563 16.336 71.483 22.179 102.036 17.884 26.021-3.73 47.807-14.017 62.24-33.266 31.582-42.126 15.116-109.279-33.57-163.7 38.97-32.651 84.324-58.767 132.998-77.903 24.621 67.544 75.181 113.093 126.786 105.708s87.362-65.275 92.058-137.016c52.089 4.724 102.948 17.072 149.506 37.489-31.482 65.887-28.462 134.966 13.678 166.551 19.247 14.436 45.049 17.984 71.057 14.194 30.174-4.313 62.245-20.472 90.942-45.492 32.125 38.628 58.699 82.919 77.619 131.007-67.549 24.626-113.089 75.18-105.708 126.789zM512.229 174.697c-148.908 0-269.618 120.708-269.618 269.618s120.71 269.618 269.618 269.618 269.618-120.713 269.618-269.618-120.71-269.618-269.618-269.618z" /> -<glyph unicode="" glyph-name="cracked-shield" data-tags="cracked-shield" d="M947.138 908.544c-83.719-18.617-167.438-32.614-251.157-41.154l-141.080-270.239 92.805-41.204-229.774-378.077 82.79 338.588-44.969 20.48-142.485-39.817 118.617 100.339 87.14 260.315c-137.62-0.697-275.239 14.964-412.859 50.769h-0.002c61.001-51.982 105.429-189.988 105.429-352.388 0-88.573-13.803-169.002-35.551-232.957 62.165-142.627 171.576-244.414 359.192-350.023 182.817 97.335 287.577 192.828 346.932 334.651-24.962 66.012-40.456 152.676-40.456 248.328-0.003 162.402 44.426 300.408 105.427 352.39z" /> -<glyph unicode="" glyph-name="crossed-axes" data-tags="crossed-axes" d="M886.56 76.201l-57.326 75.853-16.919-12.724c-131.074 138.895-177.588 269.631-242.098 417.065 20.265 44.984 41.456 89.516 64.866 132.871l30.71-17.786c103.294 126.657 134.979-160.907 71.456-280.279 208.873 53.507 390.076 392.551 158.641 526.169-57.15-98.987-141.624-70.998-279.173 8.663l-97.611-169.6 25.714-14.892c-11.932-20.674-22.937-40.93-33.219-60.815-10.282 19.885-21.289 40.141-33.219 60.817l25.712 14.892-97.611 169.598c-137.55-79.662-222.024-107.65-279.173-8.663-231.434-133.618-50.231-472.662 158.641-526.171-63.523 119.372-31.838 406.936 71.456 280.279l30.71 17.786c23.412-43.355 44.602-87.887 64.868-132.873-64.512-147.433-111.025-278.171-242.098-417.064l-16.92 12.726-57.324-75.853 5-3.76c-4.467-3.956-9.012-7.92-13.638-11.894 19.773-37.504 58.69-58.184 102.068-74.946 4.159 3.66 8.25 7.358 12.296 11.084l25.055-18.845 57.324 75.853-16.207 12.189c89.728 106.149 147.877 230.337 203.059 356.649 55.182-126.311 113.332-250.499 203.061-356.648l-16.209-12.191 57.326-75.853 25.057 18.845c4.046-3.723 8.135-7.422 12.295-11.082 43.377 16.762 82.294 37.442 102.068 74.946-4.626 3.974-9.171 7.938-13.638 11.892l4.998 3.76z" /> -<glyph unicode="" glyph-name="crossed-sabres" data-tags="crossed-sabres" d="M273.331 375.122l-215.812-218.802c108.003-351.623 464.919-77.774 271.018 111.424-38.982 38.038-57.723 77.149-55.206 107.378zM264.083 278.003c19.448-14.097 35.021-28.707 47.196-43.471-58.044-7.328-162.286-87.002-184.252-144.736-9.179 14.055-17.547 30.657-24.783 50.081l161.839 138.126zM147.514 63.846c59.282 6.996 159.458 91.973 181.373 145.301 71.566-125.723-82.884-247.594-181.373-145.301zM394.878 353.085c-24.095-18.668-48.021-37.293-71.581-55.889l61.903-103.895c42.574 25.471 84.883 51.826 126.184 78.943 41.301-27.115 83.611-53.47 126.184-78.943l61.901 103.895c-23.56 18.596-47.485 37.221-71.58 55.889 237.645 175.167 409.483 374.712 340.798 570.49-71.030-167.684-259.356-325.894-457.305-480.263-197.948 154.368-386.272 312.579-457.302 480.263-68.685-195.776 103.153-395.322 340.798-570.49zM694.229 267.744c-193.9-189.198 163.016-463.048 271.018-111.424l-215.812 218.802c2.517-30.227-16.222-69.338-55.206-107.378zM693.878 209.147c21.917-53.328 122.092-138.305 181.375-145.301-98.489-102.293-252.941 19.578-181.375 145.301zM920.519 139.876c-7.235-19.424-15.604-36.025-24.783-50.081-21.963 57.735-126.206 137.408-184.252 144.736 12.176 14.764 27.75 29.374 47.196 43.471l161.839-138.126z" /> -<glyph unicode="" glyph-name="crossed-swords" data-tags="crossed-swords" d="M769.936 259.056l137.563 137.563-56.945 56.943c-22.192-43.638-48.741-83.863-78.808-120.959-46.035 45.981-91.367 90.987-136.678 134.831 133.417 141.84 254.131 289.344 346.59 463.725-177.222-98.768-327.164-216.224-471.102-346.742-143.936 130.517-293.878 247.973-471.1 346.742 92.459-174.379 213.171-321.883 346.59-463.725-45.31-43.843-90.642-88.847-136.676-134.829-30.065 37.096-56.616 77.321-78.808 120.959l-56.945-56.945 137.565-137.565c-52.495-87.21-126.819-152.596-211.627-207.494l56.031-56.031c55.518 84.185 123.299 156.119 207.822 211.3l137.241-137.241 56.945 56.945c-41.857 24.183-82.004 50.951-119.653 80.527 44.67 44.585 89.031 88.453 132.617 132.245 43.586-43.791 87.949-87.66 132.619-132.245-37.649-29.577-77.797-56.343-119.653-80.527l56.945-56.945 137.243 137.243c84.523-55.181 152.302-127.113 207.82-211.298l56.031 56.031c-84.807 54.897-159.131 120.282-211.627 207.493z" /> -<glyph unicode="" glyph-name="crystal-ball" data-tags="crystal-ball" d="M838.581 247.993c0.545 3.378 0.84 6.785 0.84 10.223 0 33.232-25.899 63.829-69.381 88.203 126.174 138.886 122.218 353.843-11.887 487.949-138.192 138.192-362.242 138.192-500.434 0-134.107-134.107-138.061-349.065-11.884-487.952-43.479-24.374-69.378-54.969-69.378-88.199 0-4.3 0.459-8.553 1.308-12.757-50.308-30.127-80.042-67.333-80.042-107.605 0-100.399 184.728-181.791 412.607-181.791s412.607 81.389 412.607 181.791c0 41.409-31.438 79.578-84.356 110.139zM283.995 807.234c123.735 123.734 324.346 123.734 448.079 0s123.735-324.344 0-448.079c-61.497-61.497-141.982-92.414-222.579-92.783-53.004 0.155-105.978 13.516-153.553 40.106-0.603-0.107-1.198-0.221-1.799-0.329-25.146 13.984-48.793 31.65-70.148 53.006-123.734 123.734-123.735 324.346 0 448.079zM751.527 667.355c-28.827-28.827-88.791-15.601-133.933 29.542s-58.368 105.106-29.542 133.933c28.827 28.827 88.791 15.601 133.933-29.542s58.368-105.106 29.542-133.933zM557.428 311.625c-57.675-57.675-177.649-31.211-267.97 59.109s-116.784 210.295-59.109 267.97c57.675 57.675 177.649 31.211 267.97-59.109s116.784-210.295 59.109-267.97z" /> -<glyph unicode="" glyph-name="daggers" data-tags="daggers" d="M985.92 810.444l15.178 56.646c-39.622 39.662-95.641 53.178-149.417 40.036l-15.178-56.646 27.586-7.392-61.838-230.779-15.392 4.124c-16.011-25.080-54.599-37.198-96.109-29.783l-15.393-57.446c26.566-2.422 52.782-6.129 78.691-10.983-85.872-165.94-116.387-370.762-72.39-543.163 130.015 148.662 202.506 322.892 209.018 506.14 24.987-8.852 49.705-18.719 74.166-29.561l15.393 57.446c-39.657 14.333-67.018 44.121-68.344 73.847l-15.393 4.124 61.838 230.779 27.585-7.39zM812.533 462.204c-20.423 5.471-32.542 26.465-27.072 46.885 0.227 0.847 0.491 1.674 0.77 2.492 0 0 0 0 0 0 2.815 8.244 8.225 14.967 15.054 19.496 0.033 0.022 0.065 0.045 0.097 0.067 0.93 0.613 1.891 1.183 2.872 1.712 0.067 0.037 0.134 0.074 0.2 0.109 0.957 0.511 1.939 0.979 2.938 1.407 0.097 0.042 0.192 0.084 0.289 0.124 0.982 0.413 1.985 0.782 3 1.111 0.119 0.038 0.237 0.075 0.356 0.114 1.007 0.316 2.030 0.591 3.065 0.824 0.13 0.028 0.261 0.057 0.391 0.084 1.034 0.221 2.080 0.401 3.135 0.536 0.132 0.017 0.266 0.030 0.398 0.045 1.062 0.124 2.133 0.207 3.212 0.241 0.124 0.003 0.247 0.003 0.373 0.005 1.096 0.023 2.197 0.005 3.303-0.067 0.1-0.007 0.2-0.018 0.299-0.025 1.134-0.084 2.272-0.212 3.411-0.399 0.060-0.010 0.12-0.023 0.18-0.033 1.181-0.2 2.364-0.451 3.545-0.768 1.189-0.319 2.347-0.695 3.478-1.116 0.053-0.020 0.109-0.037 0.162-0.057 1.089-0.411 2.147-0.874 3.179-1.373 0.085-0.042 0.174-0.080 0.261-0.122 1.002-0.494 1.973-1.036 2.917-1.61 0.102-0.062 0.205-0.12 0.306-0.182 0.924-0.573 1.814-1.188 2.678-1.831 0.107-0.079 0.214-0.157 0.319-0.237 0.849-0.646 1.664-1.33 2.449-2.041 0.102-0.094 0.205-0.184 0.307-0.279 0.777-0.718 1.52-1.468 2.233-2.245 0.090-0.099 0.182-0.199 0.272-0.297 0.707-0.788 1.38-1.604 2.018-2.446 0.075-0.1 0.15-0.2 0.226-0.302 0.636-0.857 1.236-1.737 1.799-2.643 0.058-0.094 0.115-0.189 0.174-0.284 0.563-0.924 1.089-1.871 1.572-2.838 0.040-0.080 0.077-0.16 0.117-0.241 0.486-0.992 0.934-2.005 1.333-3.039 0.022-0.055 0.042-0.112 0.062-0.167 0.406-1.062 0.768-2.143 1.079-3.241 0.007-0.023 0.012-0.047 0.018-0.070 1.597-5.69 1.896-11.814 0.646-17.943-0.155-0.763-0.327-1.525-0.531-2.287-5.474-20.418-26.467-32.537-46.89-27.067zM575.518 622.275h-15.938v238.919h28.558v58.644c-48.537 28.056-106.145 26.612-154.687 0v-58.644h28.558v-238.919h-15.933c-8.974-28.37-43.112-50.062-85.126-53.642v-59.472c26.287 4.535 52.57 7.741 78.851 9.756-39.998-182.511-16.463-388.251 70.656-543.392 87.108 177.247 112.037 364.303 70.898 542.994 26.427-2.083 52.855-5.217 79.287-9.358v59.472c-42.014 3.58-76.15 25.271-85.126 53.642zM549.076 518.227c0-21.14-17.141-38.281-38.284-38.281s-38.284 17.141-38.284 38.281c0 0.877 0.040 1.746 0.099 2.608v0c0.585 8.686 4.069 16.579 9.49 22.72 0.030 0.033 0.057 0.067 0.087 0.1 0.735 0.827 1.51 1.62 2.314 2.38 0.062 0.058 0.124 0.12 0.187 0.179 0.785 0.733 1.605 1.432 2.451 2.098 0.092 0.072 0.182 0.144 0.274 0.215 0.834 0.645 1.696 1.255 2.581 1.829 0.115 0.075 0.232 0.149 0.347 0.222 0.88 0.558 1.784 1.081 2.71 1.567 0.134 0.070 0.269 0.139 0.403 0.205 0.927 0.473 1.874 0.91 2.843 1.306 0.142 0.058 0.284 0.112 0.426 0.169 0.977 0.388 1.971 0.738 2.985 1.046 0.139 0.042 0.281 0.079 0.421 0.12 1.031 0.299 2.076 0.561 3.14 0.773 0.124 0.025 0.251 0.043 0.374 0.067 1.092 0.207 2.197 0.374 3.319 0.486 0.090 0.008 0.184 0.012 0.274 0.020 1.148 0.105 2.307 0.167 3.483 0.169 0.025 0 0.050 0.002 0.075 0.002s0.048-0.002 0.074-0.002c1.184-0.002 2.354-0.063 3.51-0.17 0.087-0.008 0.174-0.012 0.261-0.020 1.133-0.114 2.247-0.282 3.348-0.491 0.12-0.023 0.241-0.040 0.361-0.065 1.071-0.214 2.123-0.479 3.161-0.782 0.139-0.040 0.281-0.077 0.418-0.119 1.017-0.309 2.015-0.663 2.993-1.052 0.145-0.057 0.291-0.112 0.434-0.172 0.966-0.398 1.911-0.837 2.835-1.31 0.144-0.074 0.287-0.145 0.429-0.221 0.917-0.483 1.809-1.004 2.681-1.557 0.134-0.085 0.266-0.169 0.399-0.256 0.869-0.566 1.711-1.168 2.529-1.802 0.117-0.090 0.232-0.182 0.349-0.274 0.819-0.65 1.612-1.333 2.374-2.046 0.095-0.090 0.189-0.18 0.284-0.271 0.768-0.735 1.508-1.498 2.213-2.294 0.072-0.080 0.14-0.164 0.212-0.244 0.715-0.82 1.398-1.669 2.041-2.547 0.045-0.062 0.089-0.127 0.134-0.189 0.656-0.909 1.278-1.846 1.856-2.813 0.018-0.032 0.037-0.063 0.055-0.095 3.012-5.083 4.884-10.923 5.259-17.167v0c0.047-0.77 0.077-1.544 0.077-2.324zM346.51 529.205l-15.393 57.446c-41.51-7.415-80.098 4.702-96.109 29.783l-15.392-4.124-61.838 230.779 27.586 7.392-15.178 56.646c-53.776 13.142-109.795-0.374-149.417-40.036l15.178-56.646 27.585 7.392 61.838-230.781-15.393-4.124c-1.326-29.726-28.685-59.514-68.342-73.847l15.393-57.446c24.461 10.841 49.177 20.709 74.164 29.561 6.512-183.248 79.005-357.478 209.020-506.14 43.999 172.4 13.481 377.221-72.39 543.163 25.907 4.854 52.125 8.561 78.689 10.983zM236.405 509.089c5.472-20.42-6.648-41.413-27.072-46.885s-41.416 6.648-46.887 27.068c-0.202 0.753-0.373 1.508-0.528 2.263 0 0 0 0 0.002 0-1.258 6.142-0.959 12.281 0.645 17.983 0.005 0.015 0.008 0.030 0.012 0.047 0.312 1.104 0.677 2.19 1.084 3.257 0.020 0.052 0.037 0.104 0.057 0.154 0.401 1.037 0.85 2.053 1.338 3.050 0.037 0.077 0.074 0.152 0.112 0.229 0.484 0.972 1.012 1.921 1.577 2.848 0.057 0.092 0.112 0.184 0.169 0.276 0.563 0.907 1.164 1.789 1.801 2.648 0.074 0.1 0.149 0.199 0.224 0.299 0.638 0.842 1.311 1.659 2.020 2.447 0.090 0.1 0.18 0.199 0.271 0.297 0.712 0.778 1.457 1.528 2.233 2.247 0.1 0.094 0.204 0.184 0.306 0.276 0.787 0.712 1.602 1.395 2.451 2.041 0.105 0.080 0.214 0.157 0.319 0.237 0.864 0.645 1.754 1.258 2.678 1.831 0.1 0.062 0.204 0.12 0.306 0.182 0.944 0.575 1.914 1.114 2.917 1.61 0.085 0.042 0.174 0.080 0.261 0.122 1.031 0.499 2.090 0.962 3.179 1.373 0.053 0.020 0.11 0.037 0.164 0.057 1.131 0.421 2.289 0.797 3.476 1.116 1.181 0.316 2.362 0.568 3.545 0.768 0.060 0.010 0.12 0.023 0.18 0.033 1.139 0.187 2.277 0.316 3.411 0.399 0.1 0.007 0.2 0.018 0.299 0.025 1.106 0.074 2.207 0.090 3.303 0.067 0.124-0.003 0.249-0.002 0.373-0.005 1.079-0.033 2.15-0.117 3.212-0.241 0.132-0.015 0.266-0.028 0.398-0.045 1.056-0.134 2.101-0.314 3.135-0.536 0.13-0.028 0.261-0.055 0.389-0.084 1.036-0.232 2.058-0.508 3.067-0.824 0.119-0.037 0.236-0.075 0.354-0.114 1.016-0.329 2.018-0.7 3-1.111 0.097-0.040 0.192-0.082 0.289-0.124 0.999-0.428 1.98-0.895 2.938-1.407 0.067-0.035 0.134-0.074 0.2-0.109 0.981-0.53 1.939-1.099 2.872-1.714 0.032-0.022 0.063-0.043 0.095-0.065 6.831-4.529 12.241-11.254 15.056-19.498 0 0 0 0 0 0 0.282-0.819 0.545-1.645 0.772-2.492z" /> -<glyph unicode="" glyph-name="diamond" data-tags="diamond" d="M854.688 770.722h-687.528l-145.385-195.843 491.002-538.081 491.002 538.081-149.091 195.843zM512.778 42.528l-192.666 528.745 192.664 196.661 192.664-196.661-192.662-528.745zM305.311 581.705l-148.246 195.664zM716.815 581.705l145.914 195.664zM305.311 571.627h411.504v-18.375h-411.504v18.375z" /> -<glyph unicode="" glyph-name="diamonds-card" data-tags="diamonds-card" d="M914.086 709.71l-370.803 214.083c-48.285 27.877-110.031 11.332-137.909-36.953l-328.213-568.484c-27.879-48.285-11.332-110.031 36.953-137.909l370.803-214.083c48.285-27.879 110.031-11.332 137.909 36.953l328.213 568.484c27.879 48.285 11.332 110.031-36.953 137.909zM472.67 839.357c12.213 21.152 39.261 28.401 60.416 16.189s28.401-39.263 16.189-60.414c-12.213-21.153-39.261-28.401-60.416-16.189s-28.401 39.263-16.189 60.414zM656.032 548.696c0.002-0.003 0.002-0.007 0.003-0.008l25.346-161.697c0-0.002 0-0.003-0.002-0.005l2.634-16.795-260.524-98.317-43.113 275.057 260.514 98.371 15.141-96.605zM553.324 46.956c-12.213-21.153-39.261-28.401-60.416-16.189s-28.401 39.261-16.189 60.414c12.213 21.153 39.261 28.401 60.416 16.189s28.401-39.261 16.189-60.414z" /> -<glyph unicode="" glyph-name="diamonds" data-tags="diamonds" d="M513.589 785.983l273.191-336.029-273.191-336.027-273.189 336.029 273.189 336.027z" /> -<glyph unicode="" glyph-name="dice-five" data-tags="dice-five" d="M873.572 888.13h-724.815c-42.457 0-76.875-34.418-76.875-76.875v-724.815c0-42.457 34.418-76.875 76.875-76.875h724.815c42.457 0 76.875 34.418 76.875 76.875v724.815c0 42.457-34.418 76.875-76.875 76.875zM243.602 81.448c-55.139 0-99.837 44.699-99.837 99.837s44.699 99.837 99.837 99.837 99.837-44.699 99.837-99.837-44.699-99.837-99.837-99.837zM243.602 616.574c-55.139 0-99.837 44.699-99.837 99.837s44.699 99.837 99.837 99.837 99.837-44.699 99.837-99.837-44.699-99.837-99.837-99.837zM511.166 349.011c-55.139 0-99.837 44.699-99.837 99.837s44.699 99.837 99.837 99.837 99.837-44.699 99.837-99.837-44.699-99.837-99.837-99.837zM778.728 81.448c-55.139 0-99.837 44.699-99.837 99.837s44.699 99.837 99.837 99.837 99.837-44.699 99.837-99.837c-0.002-55.139-44.7-99.837-99.837-99.837zM778.728 616.574c-55.139 0-99.837 44.699-99.837 99.837s44.699 99.837 99.837 99.837 99.837-44.699 99.837-99.837c-0.002-55.139-44.7-99.837-99.837-99.837z" /> -<glyph unicode="" glyph-name="dice-four" data-tags="dice-four" d="M873.572 888.13h-724.815c-42.457 0-76.875-34.418-76.875-76.875v-724.815c0-42.457 34.418-76.875 76.875-76.875h724.815c42.457 0 76.875 34.418 76.875 76.875v724.815c0 42.457-34.418 76.875-76.875 76.875zM243.602 81.448c-55.139 0-99.837 44.699-99.837 99.837s44.699 99.837 99.837 99.837 99.837-44.699 99.837-99.837-44.699-99.837-99.837-99.837zM243.602 616.574c-55.139 0-99.837 44.699-99.837 99.837s44.699 99.837 99.837 99.837 99.837-44.699 99.837-99.837-44.699-99.837-99.837-99.837zM778.728 81.448c-55.139 0-99.837 44.699-99.837 99.837s44.699 99.837 99.837 99.837 99.837-44.699 99.837-99.837c-0.002-55.139-44.7-99.837-99.837-99.837zM778.728 616.574c-55.139 0-99.837 44.699-99.837 99.837s44.699 99.837 99.837 99.837 99.837-44.699 99.837-99.837c-0.002-55.139-44.7-99.837-99.837-99.837z" /> -<glyph unicode="" glyph-name="dice-one" data-tags="dice-one" d="M873.572 888.13h-724.815c-42.457 0-76.875-34.418-76.875-76.875v-724.815c0-42.457 34.418-76.875 76.875-76.875h724.815c42.457 0 76.875 34.418 76.875 76.875v724.815c0 42.457-34.418 76.875-76.875 76.875zM511.166 349.011c-55.139 0-99.837 44.699-99.837 99.837s44.699 99.837 99.837 99.837 99.837-44.699 99.837-99.837-44.699-99.837-99.837-99.837z" /> -<glyph unicode="" glyph-name="dice-six" data-tags="dice-six" d="M873.572 888.13h-724.815c-42.457 0-76.875-34.418-76.875-76.875v-724.815c0-42.457 34.418-76.875 76.875-76.875h724.815c42.457 0 76.875 34.418 76.875 76.875v724.815c0 42.457-34.418 76.875-76.875 76.875zM778.728 816.249c55.139 0 99.837-44.699 99.837-99.837s-44.699-99.837-99.837-99.837-99.837 44.699-99.837 99.837 44.699 99.837 99.837 99.837zM243.602 816.249c55.139 0 99.837-44.699 99.837-99.837s-44.699-99.837-99.837-99.837-99.837 44.699-99.837 99.837c0.002 55.139 44.699 99.837 99.837 99.837zM243.602 81.448c-55.139 0-99.837 44.699-99.837 99.837s44.699 99.837 99.837 99.837 99.837-44.699 99.837-99.837-44.699-99.837-99.837-99.837zM243.603 349.011c-55.139 0-99.837 44.699-99.837 99.837s44.699 99.837 99.837 99.837 99.837-44.699 99.837-99.837-44.699-99.837-99.837-99.837zM778.728 81.448c-55.139 0-99.837 44.699-99.837 99.837s44.699 99.837 99.837 99.837 99.837-44.699 99.837-99.837c-0.002-55.139-44.7-99.837-99.837-99.837zM778.729 349.011c-55.139 0-99.837 44.699-99.837 99.837s44.699 99.837 99.837 99.837 99.837-44.699 99.837-99.837-44.699-99.837-99.837-99.837z" /> -<glyph unicode="" glyph-name="dice-three" data-tags="dice-three" d="M873.572 888.13h-724.815c-42.457 0-76.875-34.418-76.875-76.875v-724.815c0-42.457 34.418-76.875 76.875-76.875h724.815c42.457 0 76.875 34.418 76.875 76.875v724.815c0 42.457-34.418 76.875-76.875 76.875zM243.602 81.448c-55.139 0-99.837 44.699-99.837 99.837s44.699 99.837 99.837 99.837 99.837-44.699 99.837-99.837-44.699-99.837-99.837-99.837zM511.166 349.011c-55.139 0-99.837 44.699-99.837 99.837s44.699 99.837 99.837 99.837 99.837-44.699 99.837-99.837-44.699-99.837-99.837-99.837zM778.728 616.574c-55.139 0-99.837 44.699-99.837 99.837s44.699 99.837 99.837 99.837 99.837-44.699 99.837-99.837c-0.002-55.139-44.7-99.837-99.837-99.837z" /> -<glyph unicode="" glyph-name="dice-two" data-tags="dice-two" d="M873.572 888.13h-724.815c-42.457 0-76.875-34.418-76.875-76.875v-724.815c0-42.457 34.418-76.875 76.875-76.875h724.815c42.457 0 76.875 34.418 76.875 76.875v724.815c0 42.457-34.418 76.875-76.875 76.875zM243.602 81.448c-55.139 0-99.837 44.699-99.837 99.837s44.699 99.837 99.837 99.837 99.837-44.699 99.837-99.837-44.699-99.837-99.837-99.837zM778.728 616.574c-55.139 0-99.837 44.699-99.837 99.837s44.699 99.837 99.837 99.837 99.837-44.699 99.837-99.837c-0.002-55.139-44.7-99.837-99.837-99.837z" /> -<glyph unicode="" glyph-name="emerald" data-tags="emerald" d="M701.605 264.644l76.927 287.096-209.507 209.992-286.433-77.104-76.927-287.096 209.507-209.992 286.433 77.104zM324.521 638.806l227.293 61.238 165.019-166.057-60.195-227.293-89.257-23.871c238.664 215.392-69.527 475.941-262.578 281.259l19.718 74.724zM634.242 930.463l-480.34-128.266-128.486-479.519 351.855-351.254 480.341 128.266 128.486 479.519-351.857 351.254zM570.311 886.798l-17.147-67.178c0-0.005 0-0.008 0-0.013h-0.003l0.003 0.013c-0.585 30.967-75.95 33.979-214.766 8.738l231.913 58.44zM88.119 399.578c101.47 60.986 131.132 259.795 72.58 329.98l65.543-60.91-60.204-237.53-77.919-31.54zM345.235 45.74c-10.44 88.984-56.594 171.576-141.148 287.169l156.027-164.605-14.879-122.564zM304.803 564.080l19.718 74.725 227.293 61.238 165.019-166.057-60.195-227.293-89.257-23.871c238.664 215.391-69.527 475.941-262.578 281.258zM551.143 43.884c122.36 52.802 166.446 74.732 181.619 114.96l48.447-49.615-230.066-65.346zM801.399 596.118c32.345 42.667-64.482 181.883-129.136 261.467l246.597-246.398-117.461-15.069zM825.371 517.697v0l119.666 9.278-58.442-231.912c13.434 137.525-0.074 181.405-61.225 222.634z" /> -<glyph unicode="" glyph-name="eye-shield" data-tags="eye-shield" d="M92.225 921.661l0.003-0.002v0.002zM92.228 921.659c0-430.215 54.093-736.513 420.647-946.383 369.303 211.445 421.125 514.985 421.125 946.383-274.863-41.693-568.472-41.181-841.771 0zM516.609 694.592c89.15 0 161.418-72.43 161.418-161.775s-72.268-161.775-161.418-161.775c-89.15 0-161.418 72.43-161.418 161.775s72.268 161.775 161.418 161.775zM804.867 606.423c33.353-21.319 66.231-46.331 98.476-75.063-32.25-28.735-65.387-53.669-99.176-74.829 6.413 24.35 9.846 49.915 9.846 76.287 0 25.403-3.181 50.061-9.146 73.604zM228.265 606.428c-5.967-23.545-9.148-48.203-9.148-73.609 0-26.372 3.433-51.937 9.846-76.287-33.622 21.088-66.724 45.991-99.089 74.829 32.387 28.856 65.23 53.843 98.391 75.068zM589.657 532.87c0-40.444-32.714-73.23-73.068-73.23s-73.068 32.786-73.068 73.23c0 40.444 32.714 73.23 73.068 73.23s73.068-32.786 73.068-73.23z" /> -<glyph unicode="" glyph-name="feather-wing" data-tags="feather-wing" d="M917.278 142.823c-62.917 35.015-99.727 94.789-103.427 149.551-19.815 293.237-508.455 331.44-757.172 624.281l-0.002-0.008c12.904-373.139 422.543-371.339 663.804-558.364-156.126 67.612-412.016 52.772-597.256 172.924 86.414-280.813 394.638-188.356 620.987-264.688-134.797 13.165-312.561-62.965-480.625-2.76 148.413-233.931 340.939-77.675 527.457-79.055-94.074-23.97-191.252-128.812-321.147-118.978 158.259-152.32 241.166-4.452 354.54 52.254-11.436-13.609-18.661-30.942-19.513-50.074-2.058-46.185 33.717-85.294 79.902-87.352s85.294 33.717 87.352 79.902c1.667 37.412-21.492 70.175-54.9 82.368z" /> -<glyph unicode="" glyph-name="feathered-wing" data-tags="feathered-wing" d="M44.871 902.582c214.754-135.992 413.362-242.663 642.973-266.923 81.279-8.586 95.469-69.762 63.242-139.972-52.952-115.36 32.805-286.626 224.319-390.294-11.946-55.881-92.481-102.921-142.085-86.402-41.297 86.193-105.631 177.185-175.326 152.501-142.555-50.488-289.358-61.225-389.036-6.886 132.238 17.946 258.123 53.104 368.994 108.507-200.306-29.957-437.462-30.73-527.33 69.829 181.816-7.265 329.185 11.18 493.712 52.363-219.139 20.183-460.075 60.252-527.905 194.613 161.69-50.415 378.521-69.181 525.207-70.203-228.524 57.571-535.868 215.22-556.765 382.867v0z" /> -<glyph unicode="" glyph-name="fire-shield" data-tags="fire-shield" d="M120.596 889c0-400.314 74.405-696.472 393.627-880.777 311.695 179.958 394.671 479.359 394.671 880.777-256.849-45.903-516.148-51.374-788.298 0zM493.369 118.69c-116.524 4.059-320.931 343.775-158.229 529.71v-0.003c-32.073-187.021 65.666-200.788 113.103-128.815 45.287 68.707-51.985 197.415 125.93 250.484-95.179-116.27 78.875-423.296 120.722-207.959 123.468-250.21-79.129-447.687-201.526-443.417zM631.551 273.282c0-91.044-53.789-164.857-120.145-164.857s-120.145 73.805-120.145 164.857 53.789 164.857 120.145 164.857 120.145-73.805 120.145-164.857z" /> -<glyph unicode="" glyph-name="fire" data-tags="fire" d="M379.832-25.040c90.476 0.124 195.846 0.503 274.644 0.712 204.767 153.767 14.354 362.924-157.404 332.646 151.679-114.67 19.713-302.523-117.24-333.358zM743.835 762.452c0.022-1.448 0-2.892 0-4.347 157.668-371.136-272.446-377.62-238.071-22.931-83.238-200.6-265.33 4.273-181.868 182.252v0.003c-367.15-213.012 103.81-453.944-20.351-663.839-70.046-118.411-227.472 56.591-216.206 253.175-99.408-252.34-27.025-432.79 102.779-530.641 3.418-0.835 50.664-1.151 116.893-1.198-6.77 1.731-13.421 3.989-19.905 6.834-42.724 18.748-67.845 121.844 58.306 176.088-25.189-154.824 275.389-26.814 46.645 327.682l0.003 0.003c170.169-53.669 277.611-119.826 354.504-237.89 54.217 48.35 93.11 130.372 104.952 211.068 86.828-155.807 46.904-395.366-158.411-482.947 45.402 0.090 75.841 0.074 79.079-0.175 309.014 69.43 278.217 489.069-28.35 786.863z" /> -<glyph unicode="" glyph-name="fizzing-flask" data-tags="fizzing-flask" d="M680.252 882.57c-48.766 15.178-114.855 8.172-136.434-39.644-31.331 41.653-95.574 27.914-110.206-19.67-14.632-47.578 26.883-98.788 89.217-96.944-6.146-67.85 88.462-109.197 163.259-78.131-0.945-38.551 16.599-83.57 60.638-89.791-12.766-36.164 6.202-83.961 57.139-83.961 62.842 0 75.925 72.514 41.981 106.118 18.915 20.749 25.625 50.248 22.159 78.131 34.51-24.165 69.066 13.023 67.424 40.1-3.027 49.857-40.664 71.817-67.424 48.517-17.57 55.141-74.363 63.909-104.952 32.651 2.694 14.827 0.399 26.165-10.492 38.483 45.138 11.383 37.764 75.275 9.345 93.655-34.749 22.471-70.8 7.352-81.644-29.514h-0.007zM862.093 334.262c-70.99 0-70.427 107.503 0 107.503s70.99-107.503 0-107.503zM951.286 544.33c-45.691 0-45.325 69.193 0 69.193s45.691-69.193 0-69.193zM866.266 843.177c-45.691 0-45.325 69.193 0 69.193s45.691-69.193 0-69.193zM354.763 741.379c-45.691 0-45.325 69.193 0 69.193s45.692-69.193 0-69.193zM476.24 656.301v-0.005l-109.605-189.848-302.436-172.623c-52.346-30.214-61.255-88.762-13.165-139.862 93.087-98.925 208.198-159.692 337.95-195.118 69.191-18.881 111.833 11.079 111.833 78.923l0.421 349.643 110.179 190.84-135.178 78.050zM371.218 40.333c-101.333 34.611-329.696 160.183-242.070 210.774l272.553 157.86-30.483-368.633zM506.88 640.003l-57.768-107.393z" /> -<glyph unicode="" glyph-name="flame-symbol" data-tags="flame-symbol" d="M331.998 718.013c0-180 180.001-210.002 180.001-360 0-60-60.002-149.998-149.999-149.998s-149.999 90.002-90.001 240c-90.001-60-120-120-120-180 0-150.002 149.999-300 359.999-300s359.999 89.998 359.999 270.002c1.34 266.249-306.793 355.191-390.002 480-60.002 90.002-29.999 150.002 29.999 210.002-119.996-30.005-179.998-114.005-179.998-210.005v0z" /> -<glyph unicode="" glyph-name="flat-hammer" data-tags="flat-hammer" d="M620.192 760.876h0.002zM860.285 595.87l-54.028-54.028-40.217 40.217c-13.422 13.427-33.906 14.508-57.658 7.619l-42.233 42.233 41.503 41.503-87.461 87.461-41.503-41.503-42.4 42.402c7.021 23.918 5.878 44.157-7.621 57.655l-288.491 83.671 67.322-304.84c15.038-15.039 34.828-17.635 57.635-11.598l40.422-40.422-362.598-362.6v-174.92l450.061 450.061 40.255-40.255c-5.832-22.565-3.306-42.731 11.598-57.635l40.217-40.217-70.624-70.624 100.454-100.454 345.821 345.821-100.454 100.454z" /> -<glyph unicode="" glyph-name="forging" data-tags="forging" d="M733.871 172.577h127.091v58.189c39.435 13.968 78.873 39.009 118.31 73.31-39.562 34.993-78.332 54.504-118.31 63.856v59.399h-466.406v-40.606h-177.566c31.939-77.495 102.326-130.671 177.566-148.345v-65.803h116.97c-27.8-70.080-80.057-125.917-139.53-174.092h511.531c-70.902 48.145-123.109 103.925-149.656 174.092zM475.368 461.868l98.423 44.313-42.61 140.473-111.452 109.498-63.882-28.762 33.705-111.135-355.031-159.819 25.049-55.643 355.052 159.828zM721.492 465.203l253.671 101.717-141.387 3.927 95.381 137.166-146.676-78.414 42.894 190.828-152.574-242.71-16.506 65.275-60.353-177.653 125.154 58.644z" /> -<glyph unicode="" glyph-name="gear-hammer" data-tags="gear-hammer" d="M970.324 310.366l19.147 116.009-42.108 6.949c1.213 37.604-2.566 74.488-10.798 109.929l39.665 14.931-41.423 110.041-40.352-15.19c-17.747 32.17-39.579 61.965-64.905 88.607l28.311 34.499-90.894 74.587-29.375-35.797c-30.745 18.203-64.15 32.725-99.707 42.903l7.933 48.058-116.011 19.149-8.337-50.517c-35.934 0.197-71.137-4.146-104.969-12.564l-18.841 50.052-110.041-41.423 19.752-52.473c-29.973-17.147-57.81-37.86-82.854-61.676l-44.834 36.792-74.587-90.892 46.152-37.873c-17.046-28.806-30.872-59.938-40.913-92.994l-60.038 9.913-19.147-116.009 60.652-10.011c-0.748-34.4 2.658-68.177 9.841-100.763l-57.691-21.716 41.423-110.041 57.17 21.519c16.115-29.998 35.746-57.99 58.448-83.352l-37.855-46.13 90.894-74.587 36.654 44.668c28.725-18.205 59.933-33.129 93.172-44.206l-9.061-54.892 116.011-19.149 8.655 52.434c36.035-1.746 71.456 1.094 105.626 8.063l17.872-47.48 110.041 41.423-17.017 45.208c32.202 16.661 62.165 37.36 89.162 61.514l35.792-29.372 74.587 90.894-34.312 28.156c19.429 30.643 35.122 64.111 46.391 99.858l42.721-7.051zM829.525 259.813c-3.825-6.306-7.833-12.477-12.016-18.507-0.028-0.042-0.057-0.084-0.085-0.124-1.251-1.802-2.524-3.588-3.807-5.366-0.254-0.351-0.504-0.703-0.76-1.054-1.241-1.707-2.496-3.401-3.765-5.083-0.271-0.359-0.545-0.718-0.817-1.077-1.311-1.726-2.633-3.441-3.974-5.142-0.11-0.14-0.224-0.279-0.334-0.419-5.927-7.492-12.139-14.734-18.614-21.708-0.164-0.175-0.324-0.352-0.488-0.528-1.498-1.609-3.014-3.201-4.542-4.781-0.251-0.259-0.501-0.518-0.752-0.775-1.54-1.584-3.090-3.156-4.659-4.711-0.144-0.142-0.287-0.282-0.431-0.423-6.872-6.794-14.005-13.31-21.382-19.526v0c-18.784-15.829-39.136-29.741-60.732-41.49v0.002c-6.136-3.339-12.377-6.495-18.704-9.478-0.421-0.199-0.839-0.401-1.261-0.598-1.814-0.847-3.638-1.674-5.467-2.492-0.536-0.239-1.072-0.479-1.61-0.717-1.839-0.81-3.683-1.609-5.536-2.389-0.448-0.189-0.897-0.373-1.345-0.56-10.903-4.542-22.050-8.566-33.409-12.037-0.212-0.065-0.423-0.13-0.635-0.195-2.208-0.67-4.425-1.321-6.65-1.949-0.16-0.045-0.321-0.090-0.481-0.135-11.789-3.316-23.788-6.047-35.964-8.162v0c-23.114-4.014-46.852-5.807-70.947-5.188v0c-5.852 0.15-11.727 0.448-17.615 0.88-0.643 0.048-1.285 0.094-1.928 0.145-1.647 0.13-3.296 0.269-4.946 0.423-1.513 0.142-3.027 0.297-4.542 0.458-1.63 0.172-3.261 0.354-4.893 0.548-1.848 0.221-3.697 0.451-5.546 0.7-0.925 0.124-1.851 0.252-2.776 0.383-2.524 0.361-5.048 0.738-7.576 1.153-0.137 0.022-0.274 0.042-0.411 0.063-0.57 0.094-1.134 0.205-1.704 0.302-2.354 0.399-4.701 0.81-7.036 1.253-1.445 0.274-2.878 0.578-4.317 0.869-1.435 0.291-2.873 0.573-4.3 0.879-1.754 0.378-3.496 0.782-5.24 1.183-1.064 0.246-2.132 0.483-3.191 0.737-1.974 0.474-3.937 0.972-5.897 1.477-0.782 0.2-1.567 0.399-2.347 0.605-2.158 0.571-4.305 1.164-6.443 1.774-0.54 0.154-1.081 0.306-1.619 0.461-2.319 0.672-4.627 1.365-6.924 2.080-0.316 0.099-0.631 0.197-0.947 0.296-2.471 0.777-4.93 1.574-7.373 2.4-0.099 0.033-0.197 0.067-0.296 0.1-2.578 0.874-5.142 1.771-7.689 2.698v-0.002c-21.76 7.915-42.445 17.782-61.859 29.4l0.002 0.002c-0.388 0.232-0.767 0.473-1.153 0.707-1.911 1.154-3.814 2.319-5.7 3.506-0.939 0.591-1.868 1.196-2.8 1.796-1.356 0.872-2.713 1.746-4.056 2.634-1.034 0.685-2.061 1.378-3.089 2.073-1.211 0.819-2.419 1.644-3.618 2.477-1.082 0.752-2.163 1.507-3.237 2.27-1.109 0.788-2.208 1.587-3.308 2.385-1.121 0.817-2.245 1.629-3.356 2.457-0.966 0.72-1.919 1.455-2.878 2.183-4.667 3.553-9.244 7.21-13.721 10.975-0.511 0.429-1.026 0.854-1.533 1.286-1.46 1.241-2.903 2.499-4.342 3.762-0.501 0.439-1.002 0.879-1.502 1.321-1.485 1.318-2.958 2.648-4.42 3.987-0.369 0.339-0.735 0.678-1.103 1.019-1.587 1.468-3.166 2.945-4.726 4.442-0.015 0.015-0.032 0.030-0.047 0.045-8.835 8.476-17.226 17.381-25.146 26.676v0c-14.615 17.151-27.623 35.625-38.833 55.177v0c-4.752 8.289-9.178 16.775-13.27 25.431-0.149 0.314-0.299 0.628-0.448 0.944-0.914 1.948-1.811 3.906-2.691 5.87-0.155 0.347-0.309 0.697-0.464 1.044-0.899 2.023-1.784 4.054-2.646 6.096-0.038 0.090-0.075 0.182-0.114 0.272-3.74 8.875-7.133 17.914-10.165 27.097-0.050 0.15-0.1 0.299-0.15 0.448-0.708 2.153-1.393 4.313-2.061 6.481-0.087 0.284-0.175 0.57-0.262 0.854-0.665 2.178-1.313 4.363-1.938 6.558-0.035 0.125-0.070 0.252-0.105 0.378-2.671 9.421-4.971 18.978-6.879 28.654v0c-4.301 21.818-6.622 44.227-6.79 67.001-0.052 7.12 0.115 14.278 0.484 21.459 0.037 0.707 0.065 1.412 0.105 2.118 0.099 1.732 0.224 3.466 0.347 5.202 0.084 1.168 0.167 2.335 0.264 3.503 0.124 1.518 0.261 3.039 0.403 4.56 0.137 1.445 0.282 2.892 0.436 4.338 0.14 1.326 0.282 2.653 0.438 3.981 0.209 1.774 0.438 3.551 0.673 5.329 0.139 1.047 0.267 2.093 0.414 3.142 0.403 2.855 0.832 5.713 1.305 8.575 0.459 2.78 0.959 5.543 1.477 8.296 0.155 0.827 0.321 1.65 0.481 2.476 0.394 2.018 0.805 4.028 1.233 6.030 0.175 0.825 0.349 1.652 0.531 2.476 0.58 2.633 1.179 5.255 1.816 7.863 0.022 0.087 0.040 0.175 0.062 0.262 0.655 2.683 1.348 5.347 2.061 8.002 0.217 0.807 0.441 1.61 0.663 2.414 0.535 1.938 1.084 3.869 1.649 5.793 0.239 0.814 0.476 1.627 0.72 2.437 0.745 2.471 1.508 4.931 2.304 7.377 0.050 0.155 0.097 0.314 0.149 0.469 7.138 21.875 16.267 42.706 27.11 62.35v0c1.201 2.177 2.424 4.338 3.667 6.485 0.005 0.008 0.010 0.017 0.015 0.025 6.107 10.544 12.724 20.724 19.802 30.521 0.212 0.294 0.423 0.59 0.636 0.882 1.221 1.679 2.459 3.346 3.707 5.001 0.344 0.456 0.69 0.912 1.037 1.366 1.206 1.585 2.424 3.162 3.655 4.726 0.366 0.463 0.735 0.922 1.103 1.383 3.902 4.903 7.926 9.695 12.066 14.378 0.501 0.566 0.996 1.141 1.5 1.704 1.042 1.164 2.101 2.312 3.157 3.461 0.778 0.849 1.557 1.697 2.344 2.537 0.991 1.057 1.99 2.105 2.992 3.149 0.884 0.922 1.772 1.839 2.664 2.75 0.962 0.982 1.928 1.961 2.9 2.932 0.976 0.974 1.961 1.938 2.948 2.9 0.924 0.902 1.846 1.807 2.78 2.698 1.166 1.114 2.349 2.21 3.53 3.308 0.768 0.713 1.527 1.438 2.3 2.145v0c17.236 15.748 35.95 29.801 55.854 41.964v-0.002c3.396 2.075 6.836 4.081 10.298 6.044 0.984 0.558 1.964 1.121 2.953 1.669 1.346 0.747 2.701 1.477 4.056 2.205 0.976 0.526 1.953 1.051 2.933 1.567 1.402 0.738 2.808 1.465 4.22 2.185 0.912 0.464 1.826 0.924 2.741 1.381 1.492 0.745 2.985 1.485 4.487 2.21 0.747 0.359 1.497 0.71 2.245 1.064 8.075 3.825 16.299 7.363 24.661 10.592 0.351 0.135 0.7 0.274 1.051 0.408 2.015 0.77 4.038 1.522 6.067 2.257 0.352 0.127 0.705 0.256 1.057 0.381 2.113 0.758 4.233 1.5 6.361 2.22 0.107 0.037 0.215 0.072 0.322 0.109 11.616 3.912 23.468 7.248 35.514 9.978v0c23.303 5.28 47.331 8.289 71.802 8.82 2.636 0.057 5.279 0.082 7.925 0.082 0.222 0 0.443 0 0.665 0 2.481-0.005 4.966-0.038 7.455-0.094 0.436-0.010 0.87-0.020 1.306-0.032 2.312-0.060 4.627-0.142 6.946-0.247 0.662-0.030 1.323-0.065 1.986-0.099 2.13-0.107 4.261-0.231 6.395-0.376 0.905-0.062 1.811-0.135 2.718-0.204 1.926-0.145 3.852-0.297 5.782-0.474 1.198-0.11 2.397-0.239 3.597-0.362 1.669-0.17 3.338-0.336 5.010-0.528 1.635-0.19 3.274-0.408 4.911-0.62 1.27-0.164 2.539-0.314 3.81-0.491 2.943-0.413 5.89-0.857 8.84-1.345 2.699-0.446 5.382-0.932 8.058-1.435 0.845-0.159 1.689-0.322 2.532-0.486 1.933-0.378 3.857-0.773 5.778-1.181 1.395-0.297 2.786-0.6 4.175-0.912 1.654-0.371 3.304-0.75 4.95-1.143 1.575-0.378 3.146-0.767 4.712-1.164 0.665-0.169 1.328-0.341 1.993-0.513 5.693-1.478 11.327-3.079 16.895-4.809v0c24.285-7.552 47.336-17.512 68.919-29.581v0c1.861-1.041 3.707-2.105 5.546-3.177 0.453-0.264 0.909-0.526 1.361-0.792 1.736-1.021 3.458-2.058 5.173-3.107 0.526-0.321 1.051-0.645 1.574-0.969 1.714-1.061 3.421-2.132 5.115-3.219 0.416-0.267 0.827-0.538 1.241-0.807 7.798-5.050 15.377-10.385 22.722-15.99 0.282-0.215 0.568-0.429 0.852-0.646 1.654-1.27 3.293-2.556 4.921-3.852 0.403-0.321 0.807-0.641 1.208-0.964 1.615-1.296 3.219-2.604 4.811-3.926 0.329-0.274 0.656-0.551 0.986-0.825 9.041-7.567 17.69-15.555 25.922-23.931 0.244-0.249 0.491-0.496 0.735-0.747 1.512-1.547 3.009-3.105 4.49-4.679 0.239-0.254 0.478-0.509 0.717-0.765 1.532-1.632 3.050-3.276 4.55-4.936v0c17.027-18.845 32.061-39.413 44.812-61.368h-0.002c0.119-0.205 0.232-0.414 0.351-0.62 1.204-2.083 2.389-4.178 3.551-6.284 0.503-0.912 0.991-1.833 1.487-2.748 0.78-1.443 1.557-2.887 2.319-4.34 0.558-1.066 1.106-2.138 1.654-3.211 0.668-1.308 1.33-2.621 1.983-3.939 0.573-1.156 1.143-2.315 1.704-3.478 0.59-1.221 1.166-2.449 1.742-3.677 0.585-1.25 1.173-2.496 1.744-3.752 0.484-1.064 0.952-2.138 1.427-3.207 2.395-5.407 4.667-10.875 6.8-16.406 0.215-0.558 0.438-1.114 0.65-1.674 0.698-1.839 1.376-3.687 2.046-5.538 0.205-0.57 0.414-1.139 0.616-1.711 0.683-1.921 1.351-3.849 2.005-5.782 0.142-0.421 0.281-0.844 0.423-1.266 4.589-13.786 8.371-27.897 11.289-42.27v0c5.003-24.648 7.5-50.057 7.198-75.906v0c-0.003-0.322-0.017-0.645-0.020-0.967-0.035-2.389-0.095-4.781-0.177-7.176-0.032-0.944-0.074-1.888-0.114-2.831-0.079-1.881-0.174-3.764-0.281-5.648-0.053-0.929-0.104-1.859-0.165-2.788-0.169-2.588-0.359-5.177-0.585-7.771-0.030-0.352-0.065-0.707-0.097-1.059-0.226-2.507-0.479-5.018-0.758-7.53-0.099-0.897-0.207-1.794-0.314-2.691-0.234-1.976-0.483-3.954-0.748-5.932-0.117-0.869-0.231-1.736-0.354-2.604-0.388-2.735-0.797-5.472-1.25-8.212-0.005-0.028-0.008-0.055-0.013-0.084-0.008-0.055-0.020-0.11-0.028-0.165-0.463-2.798-0.964-5.581-1.488-8.352-0.204-1.074-0.424-2.142-0.638-3.212-0.341-1.722-0.688-3.441-1.052-5.152-0.284-1.33-0.581-2.653-0.879-3.976-0.314-1.398-0.636-2.793-0.966-4.185-0.356-1.5-0.72-2.997-1.094-4.487-0.282-1.126-0.576-2.248-0.869-3.369-0.441-1.689-0.884-3.379-1.348-5.057-0.187-0.677-0.384-1.346-0.575-2.021-1.964-6.944-4.113-13.8-6.461-20.548v0c-8.419-24.214-19.272-47.116-32.227-68.474zM572.673 770.061c-177.865 29.359-345.855-91.027-375.213-268.896-29.359-177.867 91.031-345.853 268.898-375.212s345.855 91.027 375.213 268.896-91.032 345.853-268.898 375.212zM676.548 392.966l-98.58 80.894-208.353-253.897-51.77 42.483 208.353 253.897-132.393 108.643 189.904 66.298 201.77-165.579-108.932-132.739z" /> -<glyph unicode="" glyph-name="hammer" data-tags="hammer" d="M908.6 726.515l-136.125 20.49 39.697 52.466-164.665 125.696-41.844-55.291c-68.147 40.258-138.278 57.66-190.048 52.366l0.008-0.045c-7.397-0.71-14.415-2.496-21.001-4.144-20.677-5.194-36.749-14.677-46.885-28.079l173.173-132.138-38.623-51.055 32.544-24.842c-175.114-215.419-375.756-400.022-488.622-648.708l99.201-75.088c212.64 184.728 326.649 414.144 490.772 646.438l30.77-23.487 39.697 52.466 56.731-125.422 85.081-64.365c104.533 43.94 151.101 121.687 165.223 218.358l-85.084 64.383z" /> -<glyph unicode="" glyph-name="hand-emblem" data-tags="hand-emblem" d="M511.992 928.008c-265.085 0-480-214.915-480-480s214.915-480 480-480 480 214.915 480 480-214.889 480-480 480zM511.992 807.99c198.827 0 360.006-161.18 360.006-360.006s-161.18-360.006-360.006-360.006-360.006 161.18-360.006 360.006c0.025 198.852 161.205 360.006 360.006 360.006zM752.004 597.994c0 0-40.483-85.308-51.451-128.979-14.331-57.123 5.873-87.994-14.958-143.36-9.010-16.238 19.351-41.663 18.723-56.471-0.552-12.499-49.518-39.078-60.285-44.424-10.767-5.371-74.642-29.214-92.963-29.289-19.376-0.1-18.547 42.541-51.376 42.566-48.138 0.050-173.704 36.769-173.704 36.769-18.999 4.894-53.986 2.008-53.986 23.241s24.872 36.744 46.958 36.794l87.040-7.63c21.133 1.33 43.294 13.704 43.972 41.362-0.351 40.935-4.392 72.358-25.173 105.587l-80.665 125.867c-4.819 10.014-5.973 27.106 7.981 34.736s29.791-3.715 35.213-13.578l90.102-122.579c9.613-8.96 26.729-10.667 25.274 8.383l-39.78 182.413c-2.485 12.951 4.091 28.662 19.1 28.662 19.677 0 31.799-7.504 31.423-19.426l43.746-179.978c3.413-8.759 15.536-7.58 18.798 0.502l12.474 175.034c0.627 5.572 7.931 15.31 21.911 13.277s22.036-16.991 20.555-22.789l-4.041-172.925c2.836-15.335 14.883-17.569 24.27-9.010l61.214 109.478c3.715 9.186 18.296 11.093 26.704 7.454 7.805-5.17 12.925-12.022 12.925-21.685v0z" /> -<glyph unicode="" glyph-name="hearts-card" data-tags="hearts-card" d="M914.086 709.71l-370.803 214.083c-48.285 27.877-110.031 11.332-137.909-36.953l-328.213-568.484c-27.879-48.285-11.332-110.031 36.953-137.909l370.803-214.083c48.285-27.879 110.031-11.332 137.909 36.953l328.213 568.484c27.879 48.285 11.332 110.031-36.953 137.909zM472.67 839.357c12.213 21.152 39.261 28.401 60.416 16.189s28.401-39.263 16.189-60.414c-12.213-21.153-39.261-28.401-60.416-16.189s-28.401 39.263-16.189 60.414zM553.324 46.956c-12.213-21.153-39.261-28.401-60.416-16.189s-28.401 39.261-16.189 60.414c12.213 21.153 39.261 28.401 60.416 16.189s28.401-39.261 16.189-60.414zM696.377 360.591v0c-0.398-0.254-0.807-0.498-1.208-0.75-1.422-0.892-2.86-1.769-4.313-2.629-0.583-0.344-1.166-0.69-1.754-1.029-1.771-1.024-3.556-2.031-5.371-3.010-0.352-0.19-0.713-0.374-1.067-0.563-1.61-0.857-3.237-1.697-4.879-2.522-0.528-0.266-1.056-0.531-1.587-0.793-1.929-0.95-3.875-1.884-5.845-2.793-0.302-0.139-0.61-0.274-0.914-0.413-1.792-0.819-3.603-1.619-5.426-2.402-0.459-0.197-0.919-0.398-1.381-0.593-2.073-0.879-4.161-1.739-6.268-2.578-85.779-34.081-199.204-34.849-234.277-69.726-0.084-0.080-0.174-0.159-0.256-0.241 7.434 28.296-5.558 68.426-21.41 113.634-0.127 0.362-0.257 0.733-0.386 1.096-0.952 2.713-1.914 5.444-2.882 8.192-1.711 4.858-3.433 9.747-5.16 14.7-14.374 41.206-28.582 85.438-30.646 128.087-0.087 1.794-0.154 3.585-0.195 5.372 0 0.030-0.002 0.060-0.002 0.090-0.251 10.561 0.292 21.008 1.787 31.278 0.062 0.428 0.115 0.859 0.182 1.286 0.184 1.196 0.396 2.389 0.606 3.58 0.12 0.682 0.236 1.365 0.366 2.045 0.202 1.062 0.426 2.122 0.651 3.179 0.172 0.809 0.344 1.617 0.528 2.422 0.222 0.971 0.461 1.938 0.702 2.903 0.224 0.894 0.454 1.786 0.695 2.676 0.242 0.895 0.493 1.791 0.753 2.683 0.281 0.962 0.573 1.921 0.872 2.878 0.259 0.827 0.521 1.654 0.795 2.477 0.346 1.034 0.71 2.065 1.079 3.092 0.269 0.748 0.533 1.497 0.815 2.24 0.428 1.131 0.884 2.255 1.341 3.379 0.262 0.641 0.515 1.286 0.787 1.926 0.563 1.321 1.161 2.636 1.769 3.947 0.204 0.439 0.391 0.88 0.6 1.318 0.842 1.769 1.722 3.53 2.648 5.28 0.855 1.615 1.732 3.187 2.624 4.732 0.207 0.359 0.419 0.708 0.628 1.064 0.697 1.184 1.405 2.349 2.123 3.493 0.247 0.393 0.494 0.785 0.743 1.173 0.77 1.198 1.55 2.372 2.342 3.525 0.165 0.241 0.327 0.489 0.494 0.728 0.987 1.415 1.99 2.798 3.010 4.144 0.077 0.102 0.155 0.197 0.232 0.297 0.919 1.203 1.851 2.375 2.795 3.523 0.257 0.314 0.518 0.62 0.777 0.929 0.807 0.962 1.624 1.904 2.449 2.826 0.257 0.289 0.515 0.58 0.773 0.864 1.006 1.101 2.020 2.178 3.049 3.222 0.053 0.055 0.107 0.114 0.16 0.167 1.123 1.134 2.26 2.23 3.409 3.296 0.19 0.177 0.384 0.346 0.575 0.52 0.935 0.855 1.879 1.689 2.831 2.501 0.292 0.249 0.586 0.494 0.879 0.74 0.917 0.763 1.841 1.507 2.771 2.232 0.249 0.194 0.496 0.391 0.745 0.583 2.364 1.804 4.771 3.48 7.216 5.031 0.276 0.175 0.555 0.342 0.832 0.515 0.954 0.593 1.913 1.166 2.878 1.721 0.324 0.185 0.648 0.373 0.972 0.553 1.026 0.575 2.056 1.126 3.092 1.659 0.214 0.11 0.424 0.226 0.64 0.334 1.273 0.643 2.554 1.256 3.844 1.836 0.139 0.063 0.281 0.119 0.419 0.182 1.118 0.498 2.24 0.971 3.369 1.422 0.349 0.14 0.7 0.274 1.051 0.409 0.961 0.371 1.923 0.725 2.89 1.064 0.352 0.124 0.707 0.251 1.061 0.369 1.153 0.389 2.309 0.755 3.468 1.098 0.134 0.040 0.266 0.085 0.401 0.124 1.303 0.379 2.611 0.725 3.922 1.047 0.324 0.080 0.65 0.149 0.976 0.226 0.981 0.231 1.963 0.446 2.947 0.645 0.424 0.085 0.849 0.167 1.275 0.247 0.934 0.175 1.869 0.334 2.806 0.483 0.394 0.062 0.79 0.129 1.184 0.187 1.295 0.187 2.593 0.356 3.892 0.489 0.139 0.015 0.277 0.022 0.416 0.037 1.163 0.115 2.327 0.209 3.493 0.284 0.463 0.030 0.927 0.048 1.392 0.072 0.857 0.042 1.714 0.075 2.569 0.095 0.506 0.012 1.011 0.022 1.517 0.027 0.872 0.007 1.744-0.002 2.616-0.017 0.449-0.008 0.899-0.008 1.348-0.022 1.245-0.038 2.489-0.099 3.73-0.182 0.474-0.032 0.947-0.080 1.42-0.119 0.82-0.067 1.642-0.139 2.461-0.226 0.578-0.062 1.154-0.13 1.732-0.202 0.723-0.089 1.445-0.187 2.167-0.291 0.593-0.085 1.188-0.17 1.779-0.267 0.753-0.122 1.503-0.259 2.253-0.398 0.778-0.144 1.555-0.292 2.332-0.453 0.92-0.19 1.839-0.388 2.755-0.605 0.643-0.152 1.283-0.319 1.923-0.481 0.615-0.157 1.229-0.316 1.841-0.483 0.672-0.184 1.343-0.376 2.011-0.573 0.57-0.169 1.139-0.344 1.707-0.521 0.687-0.215 1.373-0.428 2.055-0.656 0.515-0.172 1.024-0.357 1.537-0.538 1.325-0.466 2.643-0.956 3.954-1.473 0.456-0.179 0.912-0.354 1.365-0.54 0.735-0.302 1.467-0.618 2.198-0.935 0.453-0.197 0.905-0.396 1.355-0.598 0.742-0.334 1.482-0.675 2.218-1.026 0.396-0.189 0.787-0.384 1.181-0.578 2.611-1.283 5.183-2.669 7.708-4.159 0.302-0.179 0.605-0.352 0.905-0.533 0.773-0.466 1.54-0.944 2.304-1.43 0.317-0.202 0.635-0.406 0.95-0.611 0.782-0.508 1.562-1.019 2.334-1.547 0.177-0.12 0.351-0.247 0.528-0.369 2.613-1.807 5.163-3.73 7.644-5.763 0.221-0.18 0.443-0.361 0.662-0.543 0.76-0.631 1.512-1.275 2.258-1.928 0.205-0.179 0.408-0.361 0.611-0.543 2.541-2.257 5.003-4.629 7.368-7.125 0.015-0.015 0.028-0.030 0.043-0.045 0.73-0.772 1.448-1.559 2.16-2.352 0.174-0.194 0.349-0.389 0.523-0.585 0.697-0.785 1.385-1.58 2.063-2.387 0.114-0.135 0.226-0.274 0.339-0.409 2.188-2.629 4.28-5.369 6.263-8.217 0.094-0.134 0.187-0.266 0.281-0.399 0.611-0.885 1.211-1.782 1.801-2.688 0.145-0.222 0.289-0.448 0.433-0.672 0.593-0.922 1.179-1.853 1.751-2.796 11.386-18.81 18.328-41.708 18.454-67.768 22.515 13.143 45.141 19.134 66.313 19.406v-0.005c18.668 0.239 36.201-3.977 51.519-11.68 0.020-0.010 0.040-0.020 0.058-0.030 0.984-0.494 1.956-1.006 2.922-1.53 0.055-0.030 0.109-0.058 0.164-0.089 0.934-0.508 1.856-1.031 2.771-1.567 0.085-0.050 0.17-0.1 0.256-0.15 0.887-0.523 1.767-1.057 2.638-1.604 0.107-0.067 0.214-0.135 0.321-0.202 0.849-0.536 1.689-1.086 2.519-1.644 0.124-0.084 0.247-0.169 0.373-0.252 0.812-0.551 1.615-1.114 2.41-1.687 0.137-0.099 0.272-0.199 0.409-0.299 0.78-0.568 1.552-1.144 2.315-1.732 0.144-0.11 0.284-0.222 0.426-0.334 0.752-0.586 1.495-1.179 2.23-1.784 0.147-0.122 0.292-0.246 0.439-0.368 0.725-0.603 1.443-1.214 2.15-1.836 0.147-0.13 0.292-0.262 0.438-0.394 0.7-0.623 1.395-1.253 2.078-1.894 0.144-0.135 0.282-0.274 0.426-0.409 0.68-0.646 1.355-1.296 2.016-1.961 0.13-0.13 0.257-0.266 0.386-0.398 0.668-0.678 1.331-1.36 1.981-2.056 0.092-0.099 0.182-0.202 0.274-0.302 2.725-2.942 5.274-6.044 7.642-9.288 0.222-0.304 0.451-0.601 0.67-0.907 0.334-0.468 0.653-0.945 0.979-1.418 0.332-0.483 0.67-0.962 0.996-1.452 0.279-0.419 0.545-0.849 0.817-1.273 0.356-0.555 0.717-1.108 1.062-1.67 0.244-0.396 0.478-0.8 0.715-1.199 0.359-0.601 0.72-1.203 1.066-1.812 0.217-0.383 0.426-0.772 0.64-1.158 0.352-0.638 0.705-1.276 1.044-1.923 0.195-0.373 0.384-0.752 0.575-1.128 0.341-0.67 0.68-1.34 1.006-2.018 0.175-0.366 0.346-0.735 0.518-1.104 0.327-0.7 0.651-1.403 0.962-2.111 0.155-0.354 0.306-0.712 0.458-1.067 0.312-0.733 0.62-1.47 0.917-2.212 0.137-0.344 0.271-0.692 0.404-1.037 0.296-0.763 0.583-1.53 0.86-2.302 0.12-0.336 0.237-0.672 0.354-1.009 0.276-0.793 0.543-1.59 0.8-2.394 0.104-0.324 0.205-0.65 0.306-0.976 0.256-0.825 0.499-1.654 0.735-2.487 0.089-0.312 0.175-0.625 0.261-0.939 0.234-0.859 0.456-1.721 0.667-2.589 0.072-0.296 0.144-0.591 0.214-0.887 0.21-0.899 0.409-1.802 0.598-2.71 0.057-0.272 0.114-0.543 0.169-0.815 0.187-0.944 0.361-1.894 0.523-2.848 0.042-0.242 0.085-0.484 0.125-0.728 0.162-0.996 0.309-1.996 0.443-3.002 0.028-0.209 0.058-0.416 0.085-0.623 0.135-1.061 0.252-2.128 0.357-3.201 0.015-0.155 0.033-0.311 0.048-0.468 0.107-1.148 0.194-2.302 0.264-3.461 0.005-0.084 0.012-0.167 0.017-0.251 0.219-3.784 0.244-7.629 0.063-11.53l0.005 0.008c-0.815-17.575-5.797-36.241-15.846-55.199-11.199-21.115-28.059-37.442-48.352-50.393z" /> -<glyph unicode="" glyph-name="heavy-shield" data-tags="heavy-shield" d="M860.969 640.283l34.609-7.96c20.961 91.241 30.324 183.351 27.987 275.207l-228.561-0.002v-34.046h-95.655v49.999h-167.214v-49.999h-95.135v34.044l-235.553 0.002c-2.365-91.796 7.18-184.026 27.987-275.207l34.616 7.883c8.351-39.271 19.099-78.375 32.203-117.204l-81.539-12.298 125.987-265.527 59.89 53.719c20.092-33.455 42.068-66.518 65.977-99.097l70.723 52.366-99.119-73.466c50.265-70.633 108.612-139.162 174.92-205.239 66.102 66.119 123.49 134.446 173.751 205.239l-28.597 21.108c24.011 32.783 46.092 66.066 66.283 99.752l60.628-54.382 125.987 265.532-82.501 12.438c13.138 38.803 23.93 77.886 32.327 117.137zM346.087 696.578h333.786c3.363-140.6-52.917-264.666-166.892-385.929-114.651 121.514-170.296 245.424-166.894 385.929zM588.884 250.998l0.003-0.002c-23.402-28.779-48.297-56.45-75.794-83.96 0 0-0.002 0.002-0.002 0.003 27.501 27.508 52.393 55.176 75.793 83.958z" /> -<glyph unicode="" glyph-name="helmet" data-tags="helmet" d="M904.567 443.902c48.852 52.507 77.324 115.423 77.324 183.060-0.002 88.666-50.763 168.886-130.317 228.536 28.19-38.064 46.127-80.76 46.127-126.728 0-47.357-16.878-91.896-46.587-130.732l-19.158 55.241-91.941-28.777c-40.607 54.851-94.161 87.641-162.903 99.592-17.354 88.215-42.113 190.009-63.438 190.009s-46.083-101.794-63.438-190.009c-68.737-11.95-122.289-44.738-162.896-99.582l-91.916 28.771-19.15-55.217c-29.714 38.842-46.595 83.384-46.595 130.739 0 45.968 17.905 88.665 46.127 126.728-79.586-59.681-130.348-139.903-130.348-228.568 0-67.648 28.48-130.572 77.345-183.084l-20.013-57.707 92.065-42.509c-9.857-77.369-14.383-166.84-14.383-268.946 103.078-59.842 217.299-89.588 333.202-88.857 115.903-0.73 230.124 29.015 333.202 88.855 0 102.099-4.526 191.565-14.381 268.931l92.095 42.524-20.022 57.731zM558.070 276.505c-9.812-80.548-23.097-203.684-23.097-280.010h-42.601c0 76.402-13.31 199.705-23.125 280.248-145.354 9.313-207.887 60.224-207.887 60.224s4.603 33.73 9.114 60.188c0.007 0.040 0.013 0.080 0.020 0.12 0.348 2.045 0.698 4.044 1.042 5.982 0.027 0.149 0.054 0.294 0.079 0.442 0.142 0.791 0.283 1.569 0.423 2.339 0.032 0.177 0.065 0.356 0.097 0.532 0.326 1.774 0.648 3.479 0.965 5.102 0.040 0.204 0.079 0.403 0.119 0.604 0.12 0.609 0.239 1.205 0.356 1.787 0.042 0.202 0.082 0.407 0.122 0.606 0.152 0.745 0.305 1.474 0.453 2.17 76.825-25.873 157.713-38.92 239.552-38.444 81.808-0.445 162.696 12.571 239.521 38.444 0.146-0.681 0.293-1.394 0.442-2.122 0.052-0.249 0.102-0.505 0.154-0.76 0.102-0.502 0.204-1.014 0.306-1.534 0.057-0.286 0.112-0.571 0.169-0.863 0.131-0.664 0.259-1.344 0.392-2.035 0.054-0.279 0.107-0.564 0.161-0.848 0.117-0.622 0.234-1.253 0.353-1.894 0.069-0.371 0.137-0.75 0.206-1.128 0.089-0.492 0.179-0.987 0.269-1.487 0.070-0.393 0.142-0.786 0.212-1.186 0.109-0.606 0.216-1.221 0.325-1.841 0.104-0.594 0.209-1.195 0.313-1.799 0.090-0.517 0.179-1.036 0.269-1.559 0.082-0.477 0.162-0.955 0.244-1.437 0.075-0.443 0.151-0.888 0.226-1.335 0.087-0.517 0.174-1.034 0.261-1.556 0.077-0.457 0.152-0.919 0.229-1.379 0.141-0.85 0.281-1.703 0.422-2.56 0.077-0.474 0.156-0.947 0.233-1.424 0.085-0.529 0.171-1.057 0.256-1.588 0.072-0.448 0.144-0.895 0.216-1.344 0.080-0.507 0.162-1.012 0.243-1.519 0.115-0.723 0.229-1.447 0.343-2.17 0.089-0.557 0.176-1.114 0.263-1.672 0.092-0.586 0.184-1.171 0.274-1.757 0.070-0.447 0.139-0.892 0.207-1.337 0.087-0.557 0.172-1.113 0.258-1.667 0.065-0.427 0.132-0.853 0.197-1.278 0.137-0.897 0.274-1.79 0.408-2.675 0.042-0.276 0.084-0.549 0.125-0.823 0.11-0.73 0.221-1.456 0.33-2.177 0.040-0.266 0.080-0.532 0.12-0.798 0.122-0.818 0.244-1.63 0.365-2.431 0.020-0.131 0.040-0.264 0.059-0.395 2.294-15.39 3.945-27.492 3.945-27.492s-60.336-51.829-207.949-60.463z" /> -<glyph unicode="" glyph-name="help" data-tags="help" d="M511.992 928.008c-265.111 0-480-214.915-480-480 0-265.111 214.889-480 480-480s480 214.915 480 480-214.889 480-480 480zM511.992 807.99c198.827 0 360.006-161.18 360.006-360.006s-161.18-360.006-360.006-360.006-360.006 161.18-360.006 360.006c0.025 198.827 161.18 360.006 360.006 360.006zM511.992 748.010c-132.543 0-240.013-80.59-240.013-180.003 0-60.009 119.994-60.009 119.994 0 0 33.129 53.735 60.009 119.994 60.009 66.284 0 119.994-26.855 119.994-60.009 0-33.129-60.009-29.992-119.994-60.009-3.74-1.882-6.952-4.267-9.387-6.576-49.569-31.398-50.623-85.283-50.623-113.443v-29.992c0-33.23 26.755-60.009 60.009-60.009 33.23 0 60.009 26.755 60.009 60.009v29.992c0 90.002 180.003 80.59 180.003 180.003 0.025 99.438-107.42 180.028-239.987 180.028zM511.992 268.010c33.129 0 60.009-26.855 60.009-60.009 0-33.129-26.855-60.009-60.009-60.009-33.129 0-60.009 26.855-60.009 60.009 0.025 33.129 26.88 60.009 60.009 60.009z" /> -<glyph unicode="" glyph-name="hydra" data-tags="hydra" d="M617.97 911.832c66.867-13.985 108.928-43.601 131.513-78.297-30.92 5.287-61.214 8.979-90.842 11.095l-37.683 34.783-38.459-32.831c-15.046-0.334-29.888-1.118-44.53-2.327l-58.817 32.347-29.786-45.554c-16.163-3.543-32.030-7.674-47.58-12.408l-58.826 29.88-22.586-61.435c-17.545-8.382-34.594-17.647-51.138-27.773l-65.275 10.586-0.892-57.989c-12.627-10.492-24.885-21.576-36.75-33.271h-70.466l7.133-73.108c-8.76-11.812-17.224-24.055-25.393-36.715l-40.709 7.327v-78.798c-0.030-0.060-0.062-0.119-0.092-0.179l0.005-0.003v-522.113h36.943c46.97 185.63 188.824 260.412 337.387 170.255 84.112-51.045 187.29-124.41 297.658-82.226-1.801-15.866-6.533-31.161-13.776-45.001l190.387-38.359c5.967 15.469 11.124 31.376 15.198 47.051-7.105-4.574-20.699-9.515-39.525-6.568-82.468 12.918-66.142 107.872-1.011 116.604 21.796 2.91 42.211-6.41 55.015-22.443l36.507 77.617c-135.977-12.134-258.816 61.522-394.317 33.276l0.005-0.002c70.821-14.809 113.809-47.157 135.31-84.504-14.642-1.128-28.786-1.191-42.473-0.312l-21.624 20.457-27.219-12.853c-11.937 3.037-23.453 6.899-34.582 11.493l-15.422 30.839-21.741-11.905c-14.281 8.75-27.82 18.83-40.641 30.109l-3.608 53.4-38.847-10.045c-14.986 15.226-30.244 27.324-45.662 36.628l-2.542 39.403-47.65-18.748c-23.39 5.394-46.867 5.245-70.051 0.511 88.308 180.505 267.723 184.475 361.069 128.874-10.437-11.341-22.769-20.647-36.223-27.488l132.906-141.613c13.833 9.148 27.252 19.114 39.66 29.531-8.441 0.409-28.241 10.035-34.868 16.13-68.949 63.371 14.151 127.44 65.621 97.034 18.938-11.187 30.682-29.691 31.824-50.176l69.36 47.62c-117.837 68.929-169.867 194.617-296.653 250.135l-0.007-0.002c46.117-49.864 63.291-98.104 61.811-139.311-17.831 13.484-37.158 24.198-57.606 32.362l-27.595 42.423-36.311-25.483c-10.369 1.513-20.896 2.517-31.554 3.025l-38.093 36.087-30.449-39.263c-15.821-2.13-31.736-5.187-47.642-9.126l-31.425 25.924-19.498-41.538c-13.955-5.098-27.808-10.825-41.485-17.166l-47.131 16.583-17.248-51.74c-24.462-15.502-47.846-32.922-69.612-52.022 68.81 274.962 412.677 341.797 589.238 302.731-2.238-13.576-6.632-26.636-12.896-38.608l190.387-38.359c5.967 15.47 11.124 31.366 15.198 47.046-7.105-4.569-14.967-10.628-23.886-9.411-92.462 12.6-87.469 109.292-16.653 119.451 21.77 3.134 42.211-6.418 55.019-22.443 1.996 20.335 3.59 71.216 4.347 91.692-135.98-12.138-226.655 47.435-362.15 19.207z" /> -<glyph unicode="" glyph-name="ice-cube" data-tags="ice-cube" d="M942.185 733.888l-400.955 157.455c-51.821 21.345-80.027 18.43-125.997 0.966l-313.995-113.826c-41.899-15.27-43.1-23.605-44.612-66.433l-14.789-467.318c-2.41-54.945-1.31-66.259 46.421-86.977l370.9-162.575c38.62-16.554 63.752-15.286 90.267-6.431l363.299 112.924c43.832 14.568 49.971 19.177 51.638 73.521l15.355 499.55c1.321 34.684-11.348 49.297-37.532 59.145zM507.43 246.564c-15.539-219.26-17.562-219.351-256.516-118.38-146.058 61.712-173.352 81.556-170.119 177.633l10.95 325.341c2.534 75.298 6.396 81.867 154.161 16.035 281.39-125.369 280.598-131.518 261.524-400.63zM448.271 599.893l-221.71 97.026c-69.024 30.2-89.223 54.872 35.636 100.068 215.463 77.994 216.508 77.857 390.921 10.085 190.778-74.122 263.001-107.43 139.159-155.623-147.763-57.504-255.94-90.094-344.006-51.556zM934.371 420.573c-8.22-269.823-18.064-279.916-240.349-346.879-140.607-42.345-162.727-51.147-157.694 24.025l21.948 327.819c6.423 95.914 15.121 102.793 189.286 167.485 190.611 70.798 193.798 56.905 186.809-172.45zM306.158 489.438c-9.878-119.018-143.519-26.429-191.279-133.030-63.655-142.085 117.93-196.11 230.432-242.81 97.616-40.522 137.039 9.72 140.929 131.972 8.351 262.607-168.028 389.15-180.082 243.867v0zM654.511 110.018c173.535-9.211 272.549 114.755 254.119 370.883-8.695 120.84-138.868 113.407-128.752-5.539 4.721-55.528-42.609-161.982-109.672-171.12-131.83-17.956-137.604-187.756-15.694-194.234l-0.002 0.010zM709.291 536.702c-149.265-8.381-142.137-100.115-96.757-157.693 105.409-133.748 253.15 166.476 96.757 157.693zM579.614 609.067c289.891 56.731 260.859 145.238 25.199 176.506-216.774 28.761-227.893-216.173-25.199-176.506z" /> -<glyph unicode="" glyph-name="jigsaw-piece" data-tags="jigsaw-piece" d="M984.699 161.656l-60.626 226.254c-28.707 36.208-84.18 9.816-99.158-29.967-11.967-31.764-101.206-48.968-129.782 57.641s64.823 121.811 98.299 93.874c28.532-23.816 102.559-23.567 80.517 61.343l-3.787 12.639c1.49-4.408 2.743-8.616 3.787-12.639l10.569-35.269-51.846 193.491-277.031-74.231c-38.14 16.954-51.706 62.758-20.751 88.674 61.848 51.78 20.629 191.62-103.492 158.352s-77.707-179.447-27.879-189.146c9.908-1.926 30.157-59.412 10.821-95.741l-210.187-56.32 56.043-209.155c-9.31-37.836-69.129-43.539-102.729-16.013-26.039 21.355-137.737-18.723-109.381-124.557s152.985-66.264 161.254-23.778c2.031 10.471 56.955 49.371 90.69 15.686l56.148-209.551 228.895 61.333c58.654 28.827 11.331 71.543-28.777 86.684-31.744 11.957-53.026 129.622 53.594 158.189s134.876-100.105 101.974-128.717c-8.25-7.171-26.756-86.098 31.47-73.638l-7.313-2.073 11.5 3.082c-1.438-0.391-2.821-0.715-4.175-1.006l10.716 3.039c-2.195-0.765-4.301-1.42-6.326-1.976l236.965 63.495z" /> -<glyph unicode="" glyph-name="kettlebell" data-tags="kettlebell" d="M771.425 573.201h-130.737c20.754 27.238 33.451 60.391 33.451 97.287 0 89.555-72.599 162.153-162.153 162.153s-162.153-72.599-162.153-162.153c0-36.896 12.696-70.047 33.451-97.287h-130.711l-194.57-453.985h907.997l-194.573 453.985zM511.987 573.201c-53.743 0-97.287 43.542-97.287 97.287 0 53.69 43.57 97.287 97.287 97.287 53.743 0 97.287-43.542 97.287-97.287s-43.543-97.287-97.287-97.287z" /> -<glyph unicode="" glyph-name="key" data-tags="key" d="M874.848 692.307l20.149 32.362 48.409-30.14 34.094 49.757-85.846 58.821c-48.41-70.651-107.781-38.103-165.52 0.899l52.921 77.229-67.237 46.075-359.745-524.991-45.789 31.958c-48.85 34.093-109.16-50.936-59.658-85.483l46.523-32.467-6.729-9.821c-91.193 45.848-190.357 37.141-233.258-25.47h0.003c-48.572-70.877-6.692-184.079 92.893-252.323s219.468-65.878 268.034 5c43.031 62.8 15.691 158.383-60.366 226.825l6.264 9.141 39.62-27.65c45.43-31.704 106.214 52.991 59.658 85.483l-40.352 28.159 209.454 305.667c55.401-38.232 110.589-81.066 66.911-144.81l85.842-58.821 57.678 84.173-53.696 33.431 22.034 35.387 55.249-34.4 35.86 52.333-75.298 46.883 22.034 35.387 29.863-18.594zM197.871 63.131c-36.326 0-65.775 29.449-65.775 65.773s29.447 65.773 65.775 65.773 65.775-29.449 65.775-65.773c-0.002-36.326-29.449-65.773-65.775-65.773z" /> -<glyph unicode="" glyph-name="knife" data-tags="knife" d="M467.253 692.519l-1.228-1.109c-60.817 104.687-138.192 195.873-260.781 252.16-42.976 19.733-75.591-12.946-92.822-51.329-67.684-150.777 169.755 3.089 293.551-255.071l-0.491-0.444c-9.164-65.412-98.815-131.745-179.649-134.314 155.254-370.173 512.917-637.327 763.284-476.528-329.088 112.605-386.461 421.803-521.864 666.636z" /> -<glyph unicode="" glyph-name="large-hammer" data-tags="large-hammer" d="M858.809 565.015l-22.627-39.176-144.606 83.455 41.122 71.217-202.017 116.482-41.077-71.139-133.494 77.042 22.627 39.173-119.661 69.057-215.867-373.738 119.661-69.057 23.6 40.86 133.533-77.062-41.167-71.296 35.062-20.216-223.818-387.271h177.252l178.946 310.94 34.575-19.935 41.122 71.217 144.568-83.43-23.6-40.861 119.661-69.057 215.867 373.738z" /> -<glyph unicode="" glyph-name="leaf" data-tags="leaf" d="M898.619 654.923c-1.848-5.569-3.742-11.172-5.638-16.807 21.572-105.467 13.594-220.065-40.816-345.175 7.896 80.356 6.59 157.217-5.828 230.894-14.657-28.517-33.349-56.146-52.473-83.961 2.713-79.902-12.176-164.233-51.31-254.216 6.278 63.909 5.128 125.514-1.164 185.418-25.628-29.141-54.235-57.15-86.293-82.797-7.591-50.672-21.875-103.145-45.482-157.43 4.235 43.137 4.915 85.749 3.496 127.106-71.065-48.332-155.463-86.983-257.712-108.447 86.103 48.325 154.818 98.182 211.068 149.265-37.003 7.709-75.076 12.777-113.113 16.326 50.288 12.707 99.963 17.665 148.101 16.326 34.398 35.177 63.139 70.557 86.293 107.284-64.163 11.538-129.101 14.874-194.745 10.492 75.37 36.473 150.451 49.212 225.061 44.313 19.277 39.682 32.454 80.729 41.981 122.441-56.743 5.362-118.52-8.102-188.914-25.655 63.562 58.228 132.266 83.52 200.574 90.959 3.553 28.903 5.422 57.86 5.76 87.718-315.121 224.233-231.651-529.919-725.274-651.082 406.167-251.603 1192.676 113.245 846.43 537.029zM825.227 900.939c20.091 9.774 44.48 10.349 62.972-6.996 10.554-99.306-21.77-309.203-149.265-455.959 97.235 177.214 104.361 305.538 86.293 462.952v0.003z" /> -<glyph unicode="" glyph-name="lightning-bolt" data-tags="lightning-bolt" d="M751.997 538.010h-240v389.998l-240-570.002h240v-389.998l240 570.002z" /> -<glyph unicode="" glyph-name="lightning-trio" data-tags="lightning-trio" d="M108.325 835.293l502.495-669.507-9.737 119.345 334.602-265.024-368.817 556.926 9.737-119.345-468.28 377.605zM154.981 862.677l534.951-234.022-34.35 73.432 269.994-27.688-361.378 203.188 34.35-73.431-443.566 58.52zM72.826 776.803l66.027-572.376 46.351 73.905 123.197-252.076-17.378 436.231-46.351-73.905-171.847 388.221z" /> -<glyph unicode="" glyph-name="load" data-tags="load" d="M302.94 652.513h96.971c8.511 0 15.41 8.897 15.41 19.87v139.967c0 10.975-6.899 19.87-15.41 19.87h-96.971c-8.511 0-15.41-8.895-15.41-19.87v-139.967c0-10.975 6.899-19.87 15.41-19.87zM830.643 211.235v255.582h-255.582v-255.582h-127.791l255.582-255.582 255.582 255.582zM227.627 137.355c-8.822 0-15.975 7.151-15.975 15.975v367.399c0 8.822 7.151 15.975 15.975 15.975h567.074c8.822 0 15.975-7.151 15.975-15.975v-17.161h49.713v-275.413h50.124v476.274c0 8.845-134.916 143.766-143.766 143.766h-151.717c5.399-2.198 9.169-7.151 9.169-12.919v-197.797c0-7.808-6.899-14.137-15.41-14.137h-339.014c-8.511 0-15.41 6.329-15.41 14.137v197.797c0 5.768 3.77 10.721 9.169 12.919h-135.743c-8.85 0-15.975-7.125-15.975-15.975v-766.747c0-8.85 7.125-15.975 15.975-15.975h461.169l-87.857 87.857h-273.476z" /> -<glyph unicode="" glyph-name="match" data-tags="match" d="M931.576 740.522c1.189-27.573-2.501-54.902-12.33-81.337-20.714 79.164-61.296 189.28-181.56 240.937-31.694 11.062-66.812 19.020-105.527 23.206h-0.005c81.369-99.224 55.207-173.111 10.644-245.040 1.602 85.7-74.278 116.049-166.252 88.006 142.645-0.286 126.811-107.323 94.372-201.847-16.778-32.27-28.553-66.37-28.553-104.070 0-42.228 13.446-76.934 37.048-103.68l-543.981-332.459v-47.809h119.776l526.587 327.842c10.638-3.784 22.080-5.862 34.013-5.862 56.183 0 101.73 45.669 101.73 102.002s-45.547 102.002-101.73 102.002-101.73-45.669-101.73-102.002c0-7.263 0.77-14.344 2.21-21.178l-19.331-11.814c-4.492 18.768-4.697 39.709 0.221 62.633 20.33 94.794 104.069 144.372 141.1 223.897 19.155-35.309 48.434-60.556 76.965-60.638 38.808-0.112 60.187 45.074 50.146 101.456 82.668-118.964 56.562-303.301-23.325-387.157 131.374 59.983 178.273 273.326 89.514 432.911z" /> -<glyph unicode="" glyph-name="musket" data-tags="musket" d="M897.343 785.22c-59.761 96.649-133.205 159.56-164.040 140.525-3.934-2.427-6.978-6.079-9.183-10.79-109.232-201.538-263.138-307.116-439.253-416.507-69.66-4.103-114.74-45.806-131.364-92.977l-46.701 46.608c-1.515-22.276 14.004-47.677 42.189-62.626-0.613-2.888-1.133-5.785-1.535-8.68h-0.002v-0.002c-79.783-57.426-153.876-192.412-87.763-350.215 59.173-141.244 293.42-64.676 230.044 45.928-30.022 52.391-58.393 105.948-43.895 155.015 84.67-39.373 167.271 27.022 150.434 110.378 5.469 1.787 11.105 3.556 16.93 5.302 0.895 16.519 1.61 33.257 0.66 49.334 159.497 94.44 315.529 168.848 519.36 176.049 6.319-0.653 11.882 0.349 16.488 3.192 30.835 19.035 7.387 112.824-52.369 209.464z" /> -<glyph unicode="" glyph-name="nuclear" data-tags="nuclear" d="M510.824 693.139c-216.057 0-537.114 191.797-486.248-270.206h0.002c18.191-165.237 158.907-257.388 281.64-214.061 65.837 23.241 147.986 177.591 204.608 177.591s138.771-154.352 204.608-177.591c122.73-43.324 260.99 49.197 281.64 214.061 58.022 463.294-276.831 270.206-486.25 270.206zM143.746 535.698c86.657 85.49 173.317 78.315 259.974 0-86.657-109.164-216.645-73.967-259.974 0zM608.331 535.698c86.659 78.315 173.317 85.49 259.974 0-43.329-73.967-173.317-109.164-259.974 0z" /> -<glyph unicode="" glyph-name="octopus" data-tags="octopus" d="M961.047 415.172c-45.18 48.407-108.985 59.937-134.794-26.206 60.276 40.115 121.348-53.56 67.691-95.015-43.828-33.864-122.86-38.182-172.647-10.955-61.48 33.618-107.338 75.465-140.081 132.819 113.94-27.316 238.767 2.17 285.517 90.568 127.009 240.161-126.692 401.373-227.647 243.321-35.645-55.802-19.603-122.827 70.195-118.016-58.121 43.185-3.799 127.001 53.343 90.503 46.68-29.816 44.941-103.594 19.494-154.315-30.272-60.342-120.939-101.306-189.802-49.296-68.13 129.226-18.806 324.603-215.874 388.514-290.529 94.225-389.095-350.662-35.315-410.494 0.003-0.005 0.007-0.008 0.010-0.013-58.924-1.051-110.607-16.192-183.254-51.863-196.205-96.343-156.55-409.164 43.543-375.285 68.845 11.658 102.261 100.531 1.754 130.581 32.977-59.123-55.859-94.053-83.689-3.874-22.486 72.861 42.22 149.579 104.765 169.718 60.902 19.611 110.318 21.666 164.684 11.647-73.053-68.386-112.901-160.631-84.604-246.812 88.899-270.747 383.659-164.812 325.151 13.374-20.659 62.912-82.707 92.903-135.804 20.323 70.215 17.677 100.743-77.425 36.324-98.575-52.623-17.281-120.207 27.010-131.827 82.551-15.614 74.645 39.425 154.155 109.314 190.217 44.281-70.634 77.545-97.188 166.222-144.123 171.406-90.718 425.207 72.963 287.331 220.706z" /> -<glyph unicode="" glyph-name="overhead" data-tags="overhead" d="M39.019 715.237c212.502 0 221.116-2.872 221.116-2.872 274.075 445.429 491.062-160.64 519.191-379.9l-80.285-0.348 157.064-274.176 150.828 273.335-78.112 3.221c-180.185 628.712-663.127 656.411-889.801 380.74v0z" /> -<glyph unicode="" glyph-name="perspective-dice-five" data-tags="perspective-dice-five" d="M867.542 696.107l-305.007 176.435c-28.637 16.566-75.066 16.566-103.705 0l-305.007-176.435c-22.526-13.031-27.321-32.427-14.408-48.176l347.368-198.342c17.959-3.571 37.83-3.012 55.169 1.716l335.625 192.061c18.058 16.406 14.725 38.419-10.036 52.742zM318.766 641.088c-24.917-14.784-65.314-14.784-90.229 0-24.917 14.784-24.915 38.753 0 53.537 24.917 14.784 65.314 14.784 90.229 0 24.917-14.782 24.917-38.752 0-53.537zM556.72 499.9c-24.917-14.784-65.314-14.784-90.229 0-24.917 14.784-24.915 38.753 0 53.537 24.917 14.784 65.314 14.784 90.229 0 24.917-14.784 24.917-38.753 0-53.537zM466.488 694.106c24.917 14.784 65.314 14.784 90.229 0 24.917-14.784 24.917-38.753 0-53.537s-65.314-14.784-90.229 0c-24.917 14.784-24.917 38.753 0 53.537zM556.72 781.236c-24.917-14.784-65.314-14.784-90.229 0-24.917 14.784-24.915 38.753 0 53.537 24.917 14.784 65.314 14.784 90.229 0 24.917-14.784 24.917-38.753 0-53.537zM793.795 640.567c-24.917-14.784-65.314-14.784-90.229 0s-24.915 38.753 0 53.537c24.917 14.784 65.314 14.784 90.229 0 24.917-14.784 24.915-38.752 0-53.537zM888.516 634.228l-355.188-203.256c-5.419-7.536-10.056-15.801-13.676-24.312h1.727v-381.977c9.445-9.338 24.636-10.166 41.772-0.271l293.385 169.418c28.649 16.544 51.875 56.774 51.875 89.858v314.883c0 19.145-7.789 31.682-19.895 35.658zM642.948 164.619c0.048-27.541-20.027-61.525-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.524 44.839 75.903s44.966 3.708 45.014-23.833c0-0.065 0-0.13 0-0.195zM642.948 409.639c0.048-27.541-20.027-61.524-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.525 44.839 75.903s44.966 3.708 45.014-23.833c0-0.067 0-0.132 0-0.195zM754.765 229.176c0.048-27.541-20.027-61.525-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.525 44.839 75.903s44.966 3.708 45.014-23.833c0-0.065 0-0.13 0-0.195zM754.765 474.196c0.048-27.541-20.027-61.525-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.524 44.839 75.903s44.966 3.708 45.014-23.833c0-0.065 0-0.13 0-0.195zM866.583 293.733c0.048-27.541-20.027-61.524-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.525 44.839 75.903s44.966 3.708 45.014-23.833c0-0.065 0-0.13 0-0.195zM866.583 538.753c0.048-27.541-20.027-61.525-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.525 44.839 75.903 24.812 14.379 44.966 3.708 45.014-23.833 0-0.065 0-0.13 0-0.195zM503.701 404.74c-4.215 10.409-9.978 20.502-16.833 29.414l-351.232 200.547c-13.015-3.368-21.491-16.153-21.491-36.129v-314.883c0-33.084 23.225-73.314 51.875-89.858l293.385-169.418c18.756-10.831 35.185-8.822 44.296 3.14v377.186zM245.83 241.663c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0-0.067 0-0.13 0-0.195zM245.83 486.683c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0-0.067 0-0.132 0-0.195zM469.465 112.547c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0-0.065 0-0.13 0-0.195zM469.465 357.567c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0-0.065 0-0.13 0-0.195z" /> -<glyph unicode="" glyph-name="perspective-dice-four" data-tags="perspective-dice-four" d="M867.542 696.107l-305.007 176.435c-28.637 16.566-75.066 16.566-103.705 0l-305.007-176.435c-20.366-11.78-26.233-28.766-17.632-43.553l357.488-204.12c11.961-1.64 24.491-1.537 36.373 0.337l354.606 202.922c9.341 14.986 3.645 32.404-17.117 44.413zM318.766 641.088c-24.917-14.784-65.314-14.784-90.229 0-24.917 14.784-24.915 38.753 0 53.537 24.917 14.784 65.314 14.784 90.229 0 24.917-14.782 24.917-38.752 0-53.537zM556.72 499.9c-24.917-14.784-65.314-14.784-90.229 0-24.917 14.784-24.915 38.753 0 53.537 24.917 14.784 65.314 14.784 90.229 0 24.917-14.784 24.917-38.753 0-53.537zM556.72 781.236c-24.917-14.784-65.314-14.784-90.229 0-24.917 14.784-24.915 38.753 0 53.537 24.917 14.784 65.314 14.784 90.229 0 24.917-14.784 24.917-38.753 0-53.537zM793.795 640.567c-24.917-14.784-65.314-14.784-90.229 0s-24.915 38.753 0 53.537c24.917 14.784 65.314 14.784 90.229 0 24.917-14.784 24.915-38.752 0-53.537zM883.099 635.405l-343.703-196.683c-7.814-9.173-14.451-19.905-19.324-31.103v-381.558c9.313-10.623 25.131-12.017 43.080-1.652l293.385 169.418c28.649 16.544 51.875 56.774 51.875 89.858v314.884c0 21.87-10.155 35.132-25.313 36.836zM642.948 164.619c0.048-27.541-20.027-61.525-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.524 44.839 75.903s44.966 3.708 45.014-23.833c0-0.065 0-0.13 0-0.195zM642.948 409.639c0.048-27.541-20.027-61.524-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.525 44.839 75.903s44.966 3.708 45.014-23.833c0-0.067 0-0.132 0-0.195zM754.772 352.399c0.048-27.541-20.027-61.525-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.525 44.839 75.903s44.966 3.708 45.014-23.833c0-0.065 0-0.13 0-0.195zM866.583 293.733c0.048-27.541-20.027-61.524-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.525 44.839 75.903s44.966 3.708 45.014-23.833c0-0.065 0-0.13 0-0.195zM866.583 538.753c0.048-27.541-20.027-61.525-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.525 44.839 75.903 24.812 14.379 44.966 3.708 45.014-23.833 0-0.065 0-0.13 0-0.195zM502.393 407.837c-4.978 11.379-11.775 22.272-19.775 31.525l-343.326 196.033c-15.068-1.781-25.147-15.029-25.147-36.822v-314.883c0-33.084 23.225-73.314 51.875-89.858l293.385-169.418c17.889-10.33 33.663-8.98 42.988 1.544v381.878zM245.83 241.663c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0-0.067 0-0.13 0-0.195zM245.83 364.881c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0-0.065 0-0.13 0-0.195zM245.83 486.683c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0-0.067 0-0.132 0-0.195zM469.465 112.547c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0-0.065 0-0.13 0-0.195zM469.465 235.766c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0-0.065 0-0.13 0-0.195zM469.465 357.567c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0-0.065 0-0.13 0-0.195z" /> -<glyph unicode="" glyph-name="perspective-dice-one" data-tags="perspective-dice-one" d="M867.542 696.107l-305.007 176.435c-28.637 16.566-75.066 16.566-103.705 0l-305.007-176.435c-19.535-11.299-25.732-27.386-18.616-41.73l361.313-206.305c8.641-0.977 17.525-1.059 26.205-0.227l364.315 208.478c5.646 13.837-0.845 28.994-19.499 39.784zM556.717 640.569c-24.917-14.784-65.314-14.784-90.229 0-24.917 14.784-24.917 38.753 0 53.537s65.314 14.784 90.229 0c24.917-14.784 24.917-38.753 0-53.537zM877.583 635.516l-331.728-189.831c-11.67-11.505-21.399-26.589-27.539-42.31v-375.068c8.99-12.619 25.697-14.949 44.835-3.897l293.385 169.418c28.649 16.544 51.875 56.774 51.875 89.858v314.884c0 24.427-12.671 38.11-30.829 36.946zM642.948 409.639c0.048-27.541-20.027-61.524-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.525 44.839 75.903s44.966 3.708 45.014-23.833c0-0.067 0-0.132 0-0.195zM866.583 293.733c0.048-27.541-20.027-61.524-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.525 44.839 75.903s44.966 3.708 45.014-23.833c0-0.065 0-0.13 0-0.195zM500.637 411.711c-5.282 11.028-12.255 21.461-20.31 30.217l-339.118 193.633c-16.123-0.849-27.063-14.284-27.063-36.988v-314.883c0-33.084 23.225-73.314 51.875-89.858l293.385-169.418c16.815-9.71 31.754-9.091 41.234-0.242v387.538h-0.003zM245.83 486.683c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0-0.067 0-0.132 0-0.195zM357.64 300.329c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0.002-0.067 0.002-0.132 0-0.195zM469.465 112.547c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0-0.065 0-0.13 0-0.195z" /> -<glyph unicode="" glyph-name="perspective-dice-random" data-tags="perspective-dice-random" d="M501.631 406.023h1.544c-3.658 8.745-8.401 17.243-13.96 24.972l-355.66 203.076c-11.83-4.148-19.409-16.608-19.409-35.498v-314.883c0-33.084 23.225-73.314 51.875-89.858l293.385-169.418c17.418-10.058 32.82-9.029 42.228 0.747v380.861h-0.002zM321.556 184.516l-58.557 33.809v61.368l58.557-33.809v-61.368zM371.353 320.221c-4.218-6.415-11.409-11.8-21.572-16.16l-10.38-3.832c-7.353-2.88-12.166-5.848-14.436-8.904-2.27-2.942-3.406-6.998-3.406-12.169v-7.758l-58.557 33.807v8.448c0 9.423 1.784 16.725 5.352 21.905 3.568 5.295 11.084 10.265 22.546 14.909l10.38 4.004c6.164 2.417 10.651 5.457 13.462 9.121 2.92 3.6 4.38 8.045 4.38 13.33 0 8.045-2.596 15.806-7.786 23.285-5.19 7.594-12.437 14.075-21.736 19.444-8.76 5.057-18.222 8.566-28.386 10.527-10.165 2.076-20.762 2.506-31.792 1.29v54.128c13.085-2.728 25.034-6.064 35.847-10.009s21.248-8.82 31.306-14.627c26.385-15.235 46.499-32.593 60.341-52.077 13.842-19.369 20.762-40.028 20.762-61.98 0.002-11.257-2.106-20.153-6.324-26.682zM867.542 696.107l-305.007 176.435c-28.637 16.566-75.066 16.566-103.705 0l-305.007-176.435c-24.432-14.132-28.002-35.753-10.744-52.085l338.49-193.274c18.671-4.666 40.006-4.634 58.639 0.104l338.857 193.91c16.376 16.242 12.54 37.427-11.523 51.345zM521.766 626.657l-7.37 4.129c-8.222 4.605-13.469 9.812-15.743 15.617-2.374 5.862-1.978 15.183 1.188 27.965l3.042 11.478c1.771 6.834 1.944 12.437 0.518 16.807-1.303 4.438-4.261 7.948-8.874 10.532-7.019 3.932-15.425 5.346-25.217 4.241-9.893-1.049-20.109-4.525-30.65-10.43-9.926-5.561-18.945-12.524-27.057-20.888-8.21-8.307-15.258-17.817-21.142-28.528l-47.226 26.459c10.618 10.668 21.051 19.996 31.301 27.985s21.075 15.176 32.471 21.562c29.903 16.753 57.712 26.716 83.425 29.886 25.613 3.227 47.996-0.525 67.148-11.252 9.826-5.506 16.26-11.787 19.302-18.846 2.942-7.003 3.114-16.232 0.518-27.685l-3.192-11.394c-2.116-8.152-2.557-14.015-1.321-17.592 1.136-3.52 3.961-6.545 8.473-9.072l6.769-3.792-66.363-37.183zM597.568 584.19l-53.544 29.997 66.363 37.18 53.544-29.997-66.363-37.18zM887.91 634.428l-353.92-202.53c-5.872-8.010-10.871-16.877-14.68-26.014v-378.888c9.196-11.451 25.388-13.238 43.842-2.583l293.385 169.418c28.649 16.544 51.875 56.774 51.875 89.858v314.881c0 19.464-8.047 32.108-20.502 35.858zM740.711 202.228l-58.557-33.807v61.368l58.557 33.809v-61.37zM790.508 395.435c-4.218-11.284-11.409-24.975-21.572-41.072l-10.382-15.819c-7.353-11.371-12.166-19.895-14.436-25.573-2.27-5.563-3.406-10.932-3.406-16.102v-7.758l-58.557-33.807v8.448c0 9.423 1.784 18.786 5.352 28.086 3.568 9.415 11.084 23.063 22.546 40.943l10.38 15.991c6.164 9.535 10.651 17.757 13.462 24.666 2.92 6.973 4.38 13.102 4.38 18.389 0 8.045-2.596 12.809-7.786 14.294-5.19 1.6-12.437-0.286-21.736-5.655-8.76-5.058-18.222-12.473-28.386-22.251-10.165-9.662-20.762-21.469-31.792-35.422v54.128c13.085 12.382 25.034 22.842 35.847 31.385 10.813 8.541 21.248 15.716 31.306 21.522 26.385 15.233 46.499 21.1 60.341 17.6 13.842-3.386 20.762-16.055 20.762-38.005 0.003-11.261-2.105-22.591-6.323-33.989z" /> -<glyph unicode="" glyph-name="perspective-dice-six-two" data-tags="perspective-dice-six-two" d="M503.93 404.175c-4.261 10.681-10.163 21.048-17.206 30.165l-332.586 199.443c-22.921 7.031-39.993-6.851-39.993-35.21v-314.883c0-33.084 23.225-73.314 51.875-89.858l293.385-169.418c18.918-10.923 35.464-8.782 44.526 3.455v376.306h-0.002zM357.64 300.329c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0.002-0.067 0.002-0.132 0-0.195zM867.542 696.107l-305.007 176.435c-28.637 16.566-75.066 16.566-103.705 0l-305.007-176.435c-14.715-8.513-21.848-19.742-21.441-30.897l361.542-216.806c11.795-1.592 24.135-1.495 35.852 0.326l348.741 195.505c16.999 16.307 13.349 37.801-10.977 51.872zM556.72 499.9c-24.917-14.784-65.314-14.784-90.229 0-24.917 14.784-24.915 38.753 0 53.537 24.917 14.784 65.314 14.784 90.229 0 24.917-14.784 24.917-38.753 0-53.537zM556.72 781.236c-24.917-14.784-65.314-14.784-90.229 0-24.917 14.784-24.915 38.753 0 53.537 24.917 14.784 65.314 14.784 90.229 0 24.917-14.784 24.917-38.753 0-53.537zM891.112 633.224l-355.659-199.384c-9.637-12.607-17.106-27.536-21.056-42.383v-355.797c7.25-18.8 26.342-24.19 48.754-11.247l293.385 169.418c28.649 16.544 51.875 56.774 51.875 89.858v314.883c0 17.742-6.685 29.815-17.299 34.654zM642.948 164.619c0.048-27.541-20.027-61.525-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.524 44.839 75.903s44.966 3.708 45.014-23.833c0-0.065 0-0.13 0-0.195zM754.772 352.399c0.048-27.541-20.027-61.525-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.525 44.839 75.903s44.966 3.708 45.014-23.833c0-0.065 0-0.13 0-0.195zM866.583 538.753c0.048-27.541-20.027-61.525-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.525 44.839 75.903 24.812 14.379 44.966 3.708 45.014-23.833 0-0.065 0-0.13 0-0.195z" /> -<glyph unicode="" glyph-name="perspective-dice-six" data-tags="perspective-dice-six" d="M499.169 409.162h2.639c-3.962 8.777-8.995 17.236-14.827 24.84l-351.451 200.674c-12.956-3.409-21.385-16.18-21.385-36.102v-314.883c0-33.084 23.225-73.314 51.875-89.858l293.385-169.418c15.97-9.223 30.249-9.127 39.766-1.515l-0.002 386.262zM245.83 241.663c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0-0.067 0-0.13 0-0.195zM245.83 486.683c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0-0.067 0-0.132 0-0.195zM357.64 300.329c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0.002-0.067 0.002-0.132 0-0.195zM469.465 112.547c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0-0.065 0-0.13 0-0.195zM469.465 357.567c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0-0.065 0-0.13 0-0.195zM867.542 696.107l-305.007 176.435c-28.637 16.566-75.066 16.566-103.705 0l-305.007-176.435c-22.607-13.076-27.351-32.564-14.266-48.342l347.034-198.152c13.374-2.684 27.822-3.072 41.5-1.146l357.289 204.458c8.291 14.7 2.357 31.5-17.839 43.182zM466.491 834.773c24.917 14.784 65.314 14.784 90.229 0 24.917-14.784 24.915-38.753 0-53.537-24.917-14.784-65.314-14.784-90.229 0-24.917 14.784-24.917 38.753 0 53.537zM318.766 641.088c-24.917-14.784-65.314-14.784-90.229 0-24.917 14.784-24.915 38.753 0 53.537 24.917 14.784 65.314 14.784 90.229 0 24.917-14.782 24.917-38.752 0-53.537zM347.95 570.235c-24.917 14.784-24.917 38.753 0 53.537s65.314 14.784 90.229 0c24.917-14.784 24.917-38.753 0-53.537-24.915-14.785-65.312-14.785-90.229 0zM556.72 499.9c-24.917-14.784-65.314-14.784-90.229 0-24.917 14.784-24.915 38.753 0 53.537 24.917 14.784 65.314 14.784 90.229 0 24.917-14.784 24.917-38.753 0-53.537zM585.025 710.902c-24.917 14.784-24.917 38.753 0 53.537s65.314 14.784 90.229 0c24.917-14.784 24.917-38.753 0-53.537-24.915-14.784-65.312-14.784-90.229 0zM793.795 640.567c-24.917-14.784-65.314-14.784-90.229 0s-24.915 38.753 0 53.537c24.917 14.784 65.314 14.784 90.229 0 24.917-14.784 24.915-38.752 0-53.537zM881.858 635.514l-341.081-195.183c-10.345-11.693-18.766-26.138-23.93-40.923v-368.827c8.551-14.58 26.068-17.854 46.304-6.167l293.385 169.418c28.649 16.544 51.875 56.774 51.875 89.858v314.881c0 22.461-10.713 35.837-26.554 36.944zM642.948 164.619c0.048-27.541-20.027-61.525-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.524 44.839 75.903s44.966 3.708 45.014-23.833c0-0.065 0-0.13 0-0.195zM642.948 409.639c0.048-27.541-20.027-61.524-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.525 44.839 75.903s44.966 3.708 45.014-23.833c0-0.067 0-0.132 0-0.195zM866.583 293.733c0.048-27.541-20.027-61.524-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.525 44.839 75.903s44.966 3.708 45.014-23.833c0-0.065 0-0.13 0-0.195zM866.583 538.753c0.048-27.541-20.027-61.525-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.525 44.839 75.903 24.812 14.379 44.966 3.708 45.014-23.833 0-0.065 0-0.13 0-0.195z" /> -<glyph unicode="" glyph-name="perspective-dice-three" data-tags="perspective-dice-three" d="M880.64 635.574l-338.424-193.663c-9.832-10.694-18.039-23.891-23.534-37.616v-376.51c9.076-12.166 25.593-14.274 44.47-3.374l293.385 169.418c28.649 16.544 51.875 56.774 51.875 89.858v314.883c0 23.032-11.264 36.513-27.772 37.004zM754.772 352.399c0.048-27.541-20.027-61.525-44.839-75.903s-44.966-3.708-45.014 23.833c0 0.065 0 0.13 0 0.195-0.048 27.541 20.027 61.525 44.839 75.903s44.966 3.708 45.014-23.833c0-0.065 0-0.13 0-0.195zM867.542 696.107l-305.007 176.435c-28.637 16.566-75.066 16.566-103.705 0l-305.007-176.435c-20.375-11.787-26.238-28.781-17.62-43.573l357.443-204.095c10.749-1.477 21.958-1.55 32.746-0.187l359.609 205.786c7.38 14.43 1.226 30.682-18.46 42.069zM318.766 641.088c-24.917-14.784-65.314-14.784-90.229 0-24.917 14.784-24.915 38.753 0 53.537 24.917 14.784 65.314 14.784 90.229 0 24.917-14.782 24.917-38.752 0-53.537zM556.717 640.569c-24.917-14.784-65.314-14.784-90.229 0-24.917 14.784-24.917 38.753 0 53.537s65.314 14.784 90.229 0c24.917-14.784 24.917-38.753 0-53.537zM793.795 640.567c-24.917-14.784-65.314-14.784-90.229 0s-24.915 38.753 0 53.537c24.917 14.784 65.314 14.784 90.229 0 24.917-14.784 24.915-38.752 0-53.537zM501.003 410.927c-4.821 10.245-11.099 20.002-18.364 28.41l-343.367 196.057c-15.056-1.791-25.127-15.038-25.127-36.821v-314.883c0-33.084 23.225-73.314 51.875-89.858l293.385-169.418c17.029-9.834 32.142-9.084 41.598 0.089v386.424zM245.83 241.663c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0-0.067 0-0.13 0-0.195zM469.465 357.567c-0.048-27.541-20.203-38.212-45.014-23.833s-44.887 48.362-44.839 75.903c0 0.065 0 0.13 0 0.195 0.048 27.541 20.203 38.212 45.014 23.833s44.887-48.362 44.839-75.903c0-0.065 0-0.13 0-0.195z" /> -<glyph unicode="" glyph-name="potion" data-tags="potion" d="M925.171 431.334c-10.187 51.091-54.508 69.159-95.845 61.094v196.306l22.917 18.674-12.669 8.907 61.764 63.847c-0.002 66.979-113.333 145.401-184.186 129.495l-39.179-79.723-15.016 10.557-33.525-95.212c0.349-0.797 0.718-1.574 1.076-2.364-105.652-172.69-304.208-206.845-454.12-260.081-157.24-55.847-61.228-328.739 77.371-426.174s427.975-95.468 427.325 71.398c-0.62 159.245-35.731 357.845 91.585 515.752 0.444-0.052 0.875-0.115 1.321-0.165l38.693 31.529v-187.491c-39.674-15.003-71.374-54.992-58.425-113.18l48.701-255.136 170.908 56.821-48.698 255.146zM580.929 59.030l-152.162-23.626-159.884 51.673-107.101 131.62-33.548 171.614h518.724l2.581-251.62-68.61-79.662zM837.938 360.123c-26.965 0-48.825 21.856-48.825 48.823s21.86 48.823 48.825 48.823c26.965 0 48.825-21.856 48.825-48.823s-21.861-48.823-48.825-48.823z" /> -<glyph unicode="" glyph-name="quill-ink" data-tags="quill-ink" d="M992.273 931.906c-189.98-6.983-344.077-48.068-461.856-111.437l-58.821-98.351-9.923 56.058c-21.025-14.772-40.509-30.379-58.473-46.713l-29.359-90.007-10.070 50.301c-87.16-97.557-126.152-215.543-116.307-336.136h-147.264v-98.030h80.607l-86.492-75.938-44.458-169.683 29.036-31.686h353.851l29.036 31.686-44.46 169.685-81.857 75.936h70.579v98.030h-129.752c51.076 26.462 100.668 63.074 149.773 105.388l-59.591-3.105 0.55 0.611 106.985 45.545c93.52 87.102 186.487 189.584 285.942 275.994l-48.918 10.357 113.118 42.131c53.53 40.816 109.231 75.445 168.121 99.363z" /> -<glyph unicode="" glyph-name="raven" data-tags="raven" d="M807.919 841.029c-17.659 43.456-65.143 74.632-122.442 74.632-114.471 0-122.285-72.236-181.916-109.616-194.492 69.036-237.76-288.279-164.423-504.932-30.742-63.744-61.351-151.555-87.463-269.379 113.467-61.218 237.845-77.226 363.832-19.822-12.382 75.303-28.335 137.512-43.885 190.456 49.966 25.217 119.021 29.118 172.742-28.744 0.511 61.303-43.801 85.169-90.359 84.573l-41.299 87.232c88.405 91.226 156.069 204.105 122.314 320.646-20.572 76.775 116.248 124.236 244.32 107.316-48.962 42.26-111.808 60.862-171.421 67.639zM546.457 283.617c17.5 14.896 34.948 30.702 51.828 47.291l35.28-74.52c-26.829-4.332-52.303-16.232-68.174-33.191-6.587 21.648-13.003 41.695-18.935 60.419zM740.457 822.65c-7.292 0-13.202 5.912-13.202 13.202 0 7.292 5.912 13.202 13.202 13.202s13.202-5.912 13.202-13.202c0-7.29-5.91-13.202-13.202-13.202z" /> -<glyph unicode="" glyph-name="relic-blade" data-tags="relic-blade" d="M655.362 812.18l-2.265-72.482-50.971-13.593-2.265-56.631-272.96-271.826c1.739-49.952-34.17-84.299-65.691-81.547-47.216 4.128-65.904 34.136-65.691 74.75-31.532-34.283-48.44-77.749-48.701-121.196 32.279-0.005 64.662-8.763 93.283-26.048l-5.396-19.296c-49.117-34.679-103.865-92.14-130.451-138.616-3.271-5.716-5.949-11.012-8.12-15.918l-63.678-17.816-2.973-83.133 83.133 2.988 17.964 64.246c4.763 2.133 9.889 4.741 15.405 7.896 46.294 26.482 103.479 80.908 138.2 129.876l19.376 5.421c16.705-28.361 25.493-60.388 25.607-91.953 44.623-0.008 89.985 16.964 124.587 49.834-48.232 7.088-76.588 35.267-73.621 66.824 4.854 51.593 34.868 64.748 78.151 63.426l277.494 277.492 45.305 1.121 12.448 45.307 79.282 3.398 84.959 302.429-302.409-84.955zM844.16 631.886l-78.13-2.314-12.844-46.645-117.782-4.664 3.5 117.788 51.305 13.994 2.332 73.466 209.922 58.279-58.303-209.905z" /> -<glyph unicode="" glyph-name="round-shield" data-tags="round-shield" d="M512.413 926.974c-264.47-0.060-478.817-214.503-478.758-478.974 0-0.072 0-0.144 0-0.216 0.060-264.471 214.505-478.819 478.974-478.758 264.471 0.060 478.819 214.505 478.758 478.974 0 0.072 0 0.144 0 0.216-0.059 264.471-214.503 478.819-478.974 478.758zM492.614 891.101l22.285 12.869 22.285-12.869v-25.734l-22.285-12.869-22.285 12.869v25.734zM114.153 677.466l22.285 12.869 22.285-12.869v-25.734l-22.285-12.869-22.285 12.869v25.734zM159.597 217.336l-22.285-12.869-22.285 12.869v25.734l22.285 12.869 22.285-12.869v-25.734zM533.959 4.571l-22.285-12.869-22.285 12.869v25.734l22.285 12.869 22.285-12.869v-25.734zM512.597 64.838c-211.576-0.038-383.127 171.446-383.165 383.025 0 0.047 0 0.095 0 0.142-0.038 211.575 171.446 383.125 383.025 383.163 211.576 0.038 383.127-171.446 383.165-383.025 0-0.047 0-0.094 0-0.142 0.038-211.576-171.446-383.125-383.025-383.163zM908.321 219.109l-22.285-12.869-22.285 12.869v25.734l22.285 12.869 22.285-12.869v-25.734zM909.197 651.732l-22.285-12.869-22.285 12.869v25.734l22.285 12.869 22.285-12.869v-25.734zM697.469 725.772c-46.030 30.715-100.121 50.295-158.431 54.879v-665.326c58.313 4.585 112.401 24.168 158.431 54.881v555.565zM332.191 167.171c47.372-30.489 102.956-49.318 162.701-52.428v666.493c-59.747-3.11-115.331-21.939-162.701-52.428v-561.637zM288.045 694.894c-67.085-61.043-109.19-149.059-109.171-246.906 0-0.042 0-0.082 0-0.124 0.018-97.802 42.116-185.766 109.171-246.781v493.811zM741.615 690.598v-485.217c64.39 60.841 104.573 147.029 104.557 242.608 0 0.042 0 0.082 0 0.124-0.018 95.535-40.195 181.675-104.557 242.486z" /> -<glyph unicode="" glyph-name="rune-stone" data-tags="rune-stone" d="M393.323 203.495l-2.205-1.133-203.011 395.259 1.752 0.9 93.533 326.861-231.010-234.788 159.826-628.873 436.282-103.671 118.368 109.127zM206.945 597.507l194.821-379.311 378.912-138.28 0.641 0.591 222.789 418.896-145.786 271.103-553.568 168.81-97.81-341.809zM463.331 453.514c9.704 16.808 37.071 19.177 61.126 5.289s35.686-38.773 25.983-55.582c-9.704-16.808-37.074-19.175-61.126-5.289s-35.686 38.773-25.983 55.582zM812.513 458.060c13.34 64.652 12.605 128.775-17.68 191.76 77.289-34.464 106.8-133.503 17.68-191.76zM780.53 486.194v-0.005c-56.205 135.773-185.149 265.495-330.658 230.995-125.823-29.831-10.359-160.534 131.419-195.063 156.587-38.132 336.958-166.274 217.606-292.493-110.154-116.494-317.774-4.059-300.941 135.235 35.651-65.172 163.274-170.906 240.996-86.731 108.94 117.975-155.214 186.781-244.145 225.4-91.54 39.744-277.352 171.731-161.901 265.764 171.337 139.543 482.697-59.825 447.623-283.102zM510.707 577.939c-115.311 84.681-60.784 130.255 50.956 109.69-50.62-22.717-60.493-62.212-50.956-109.69z" /> -<glyph unicode="" glyph-name="sapphire" data-tags="sapphire" d="M808.698 894.34l-633.014-220.598 37.799-668.061 633.012 220.598-37.798 668.061zM771.501 870.307c-128.803-114.583-449.559-284.909-587.435-197.138l587.435 197.138zM183.361 660.773c132.081-64.975 100.843-369.863 38.484-618.132l-38.484 618.132zM247.885 28.644l92.653 149.866 236.753 80.099c-73.252-79.352-218.718-175.38-329.406-229.966zM335.551 188.003l-21.552 393.478 372.564 130.588 21.552-393.478-372.564-130.588zM710.676 460.687l-16.479 249.268 103.123 142.872c-8.142-123.090-41.289-294.152-86.644-392.14zM570.281 396.267c-42.534 3.015-72.644 44.394-67.25 92.419s44.249 84.514 86.783 81.499c7.165-0.508 13.963-2.127 20.313-4.661-3.269 31.909-11.334 63.425-24.312 92.558h-0.003l-259.090-87.857 17.632-273.187c114.793-25.879 193.898 22.977 234.852 99.193-2.95-0.172-5.927-0.177-8.924 0.037z" /> -<glyph unicode="" glyph-name="save" data-tags="save" d="M302.94 860.619h96.971c8.511 0 15.41-8.895 15.41-19.87v-139.967c0-10.973-6.899-19.87-15.41-19.87h-96.971c-8.511 0-15.41 8.895-15.41 19.87v139.967c0 10.975 6.899 19.87 15.41 19.87zM702.852 495.216l255.582-255.582h-127.791v-255.582h-255.582v255.582h-127.791l255.582 255.582zM557.52 167.424h-329.892c-8.822 0-15.975 7.151-15.975 15.975v367.399c0 8.822 7.151 15.975 15.975 15.975h567.074c8.822 0 15.975-7.151 15.975-15.975v-140.854l99.837-99.837v424.392c0 8.845-134.916 143.766-143.766 143.766h-151.717c5.399-2.198 9.169-7.151 9.169-12.919v-197.797c0-7.808-6.899-14.137-15.41-14.137h-339.016c-8.511 0-15.41 6.329-15.41 14.137v197.797c0 5.768 3.77 10.721 9.169 12.919h-135.743c-8.85 0-15.975-7.125-15.975-15.975v-766.747c0-8.85 7.125-15.975 15.975-15.975h429.729v87.857zM848.183 227.105v-147.536h46.356c8.85 0 15.975 7.125 15.975 15.975v131.563l-62.33-0.002z" /> -<glyph unicode="" glyph-name="scroll-unfurled" data-tags="scroll-unfurled" d="M854.173 195.911h-141.775l-1.355 2.419c0.501 86.681 34.198 175.368 98.214 245.312 47.831 52.261 83.95 121.041 102.458 189.368l-82.338 49.795 76.414 13.791-86.599 51.529 104.084 17.674c-10.445 78.138-57.588 136.002-154.489 136.002-94.565-18.374-363.959-23.983-503.322-5.922-17.664 5.751-35.459 9.136-52.817 9.731-0.129 0.035-0.267 0.068-0.394 0.102 0.074-0.032 0.145-0.065 0.219-0.097-45.31 1.502-87.613-16.030-116.708-60.236-40.414-61.408 2.616-166.812 97.48-166.812 5.359 0 10.253 0.289 14.727 0.832v-0.733h118.467c-17.921-72.21-62.36-152.533-113.828-233.474-4.318-6.79-8.509-13.721-12.575-20.767l69.657-71.359-112.351-18.818c-65.349-171.651-54.745-363.552 96.403-363.552v0.002l15.634-0.11v-0.234h171.175v0.311h451.103c135.99-0.002 154.656 225.247-37.485 225.247zM452.277 87.592c-0.003 0.935-0.030 1.888-0.055 2.836 0.025-0.95 0.052-1.903 0.055-2.836zM447.891 123.38c0.027-0.119 0.047-0.232 0.074-0.351-0.027 0.117-0.047 0.231-0.074 0.347-5.374 23.696-20.779 43.454-40.897 56.175h0.007c20.114-12.721 35.516-32.477 40.89-56.171zM452.105 93.733c-0.047 0.952-0.107 1.914-0.174 2.88 0.067-0.966 0.127-1.928 0.174-2.88zM451.646 100.119c-0.089 0.952-0.18 1.908-0.287 2.875 0.107-0.967 0.199-1.923 0.287-2.875zM450.881 106.801c-0.125 0.924-0.242 1.844-0.384 2.781 0.144-0.937 0.261-1.858 0.384-2.781zM449.768 113.944c-0.144 0.814-0.269 1.615-0.426 2.437 0.157-0.822 0.282-1.624 0.426-2.437zM236.579 690.13c28.031 23.871-1.146 80.303-34.722 127.243h115.747c19.346-37.343 21.335-80.462 11.471-127.243h-92.496zM325.781 167.877c51.786 17.213 110.468-15.682 122.11-67.013 1.991-8.782 3.269-17.061 3.911-24.882 0.075 0.817 0.112 1.662 0.17 2.491-1.291-18.519-6.792-33.936-15.602-46.701h-1.034c-0.984-1.412-2.003-2.781-3.062-4.103l1.614 0.707c-14.802-19.359-37.539-32.29-64.57-40.636h-28.104l1.368 0.6c-29.614 0.008-63.612 2.798-63.612 2.798 43.925 0.703 62.862 19.294 70.065 40.598-31.298-11.376-64.654 9.072-75.146 39.264-14.161 40.748 12.502 83.784 51.893 96.877zM452.239 84.425c-0.018-0.919-0.027-1.846-0.065-2.75 0.038 0.905 0.045 1.831 0.065 2.75zM434.019 28.553c0.795 1.044 1.577 2.1 2.327 3.182-0.748-1.084-1.533-2.138-2.327-3.182z" /> -<glyph unicode="" glyph-name="seagull" data-tags="seagull" d="M745.572 222.889c161.897 72.285 273.951 246.169 212.062 477.137-52.296 195.171-162.808 210.677-269.818 106.67-47.49-46.159-142.161-43.644-156.787-112.152 226.613 90.939 275.63-64.861 100.935-93.415-235.909-38.556-346.981-330.463-589.65-336.437h-0.005c33.079-40.987 150.889-82.167 293.136-95.942l93.121-161.119c-16.802-8.671-32.223-20.238-45.263-35.016h458.4c-33.927 44.296-111.070 66.087-179.85 50.407l-87.399 151.22c59.447 9.146 117.708 24.8 171.12 48.648zM735.68 764.688c0 14.75 11.959 26.708 26.708 26.708s26.708-11.957 26.708-26.708c0.002-14.75-11.957-26.708-26.708-26.708s-26.708 11.957-26.708 26.708zM630.936 13.089c-6.069-2.573-11.994-5.491-17.735-8.768-42.316 23.794-102.151 31.281-154.913 15.313l-84.449 146.116c53.935-3.209 110.467-2.352 166.575 3.964l90.523-156.625z" /> -<glyph unicode="" glyph-name="shield" data-tags="shield" d="M511.992 928.008c49.995-48.013 200.006-143.987 299.997-143.987 0-48.013 0-143.987 0-192 0-192-150.011-480-299.997-623.987-150.011 143.987-299.997 431.987-299.997 623.987 0 48.013 0 143.987 0 192 100.016-0.025 250.002 95.975 299.997 143.987v0z" /> -<glyph unicode="" glyph-name="sickle" data-tags="sickle" d="M227.677 252.844c-39.029-3.61-54.444-24.947-58.891-51.609l108.768-104.249 1.562-1.634 0.072 0.070 14.612-14.005c36.391 3.344 57.643 20.672 53.622 52.882l-119.745 118.545zM60.708 70.881c-33.418-53.906 29.365-122.172 102.046-89.146l102.017 99.614-89.599 93.807-114.464-104.274zM514.258 909.792c705.168-552.836 33.81-816.464-175.435-585.551l-84.040-76.559 87.027-91.113 4.24 4.141c434.971-390.488 1069.432 489.632 168.208 749.082z" /> -<glyph unicode="" glyph-name="sideswipe" data-tags="sideswipe" d="M857.962 162.717c0 199.052-2.691 207.121-2.691 207.121 442.608 126.524-459.922 167.023-546.835 155.472l-0.326-75.205-256.821 147.122 256.034 141.281 3.017-73.167c657.126 12.355 803.196-181.702 547.621-502.625v0z" /> -<glyph unicode="" glyph-name="small-fire" data-tags="small-fire" d="M490.103 928.974c68.576-97.631-47.072-641.084-180.607-273.438-95.905-345.759-231.583-360.575-231.744-200.64-143.199-158.623 87.647-441.533 174.751-487.869h104.256c-91.839 80.031-153.567 155.999-164.35 271.934 94.623-18.849 143.711-41.92 162.527 124.095 121.471-173.183 201.887 98.751 274.367 214.239-3.296-80.64-6.688-186.91 45.695-259.775 17.472-24.288 66.463-32.224 109.471-31.615-19.839-32.159-89.695-138.752-34.016-178.399 55.679-39.648 66.143 0.768 51.712-32.351-26.527-41.76-45.983-78.751-118.143-108.127h112.128c118.879 37.441 223.613 183.328 189.214 271.071-44.032-37.312-87.552-61.791-122.591-59.072 98.239 144.16 75.679 291.807 29.504 442.686-40.448-144.767-66.975-164.991-109.151-199.039 58.207 137.311-170.879 428.894-293.021 506.303v0z" /> -<glyph unicode="" glyph-name="spades-card" data-tags="spades-card" d="M914.086 709.71l-370.803 214.083c-48.285 27.877-110.031 11.332-137.909-36.953l-328.213-568.484c-27.879-48.285-11.332-110.031 36.953-137.909l370.803-214.083c48.285-27.879 110.031-11.332 137.909 36.953l328.213 568.484c27.879 48.285 11.332 110.031-36.953 137.909zM472.67 839.357c12.213 21.152 39.261 28.401 60.416 16.189s28.401-39.263 16.189-60.414c-12.213-21.153-39.261-28.401-60.416-16.189s-28.401 39.263-16.189 60.414zM553.324 46.956c-12.213-21.153-39.261-28.401-60.416-16.189s-28.401 39.261-16.189 60.414c12.213 21.153 39.261 28.401 60.416 16.189s28.401-39.261 16.189-60.414zM669.091 357.751v0.010c-51.178-82.548-158.291-55.214-172.388 33.877l-6.466-158.306-148.567 85.782 129.764 82.151c-81.539-25.52-161.321 52.396-110.442 134.366 58.132 93.645 226.772 70.432 273.129 116.786-15.53-57.95 90.627-204.902 34.97-294.666z" /> -<glyph unicode="" glyph-name="speech-bubble" data-tags="speech-bubble" d="M507.455 827.648c-248.695 0-450.304-149.162-450.304-333.176 0-103.482 63.76-195.945 163.797-257.056l-27.955-211.647 201.357 146.121c36.142-6.917 74.042-10.602 113.106-10.602 248.695 0 450.304 149.17 450.304 333.184 0 184.006-201.609 333.176-450.304 333.176zM313.513 412.030c25.339 0 45.885-20.542 45.885-45.885 0-25.341-20.545-45.885-45.885-45.885s-45.885 20.545-45.885 45.885 20.545 45.885 45.885 45.885zM506.828 320.261c-25.339 0-45.885 20.545-45.885 45.885s20.545 45.885 45.885 45.885c25.339 0 45.885-20.542 45.885-45.885 0-25.341-20.545-45.885-45.885-45.885zM706.204 320.261c-25.339 0-45.885 20.545-45.885 45.885s20.545 45.885 45.885 45.885c25.339 0 45.885-20.542 45.885-45.885 0-25.341-20.543-45.885-45.885-45.885z" /> -<glyph unicode="" glyph-name="speech-bubbles" data-tags="speech-bubbles" d="M897.179 127.886c49.808 33.779 80.696 80.731 80.696 132.654 0 102.868-121.198 186.263-270.715 186.263s-270.72-83.393-270.72-186.263 121.208-186.263 270.72-186.263c36.406 0 71.125 4.956 102.834 13.923l136.825-102.136-49.64 141.821zM785.58 685.060c0 118.29-162.801 214.186-363.624 214.186s-363.624-95.89-363.624-214.186c0-55.652 36.037-106.341 95.107-144.426l-57.306-233.771 197.066 177.839c40.028-8.93 83.417-13.833 128.757-13.833 200.823 0 363.624 95.895 363.624 214.191z" /> -<glyph unicode="" glyph-name="target-arrows" data-tags="target-arrows" d="M993.081 142.696l-135.826 135.826h-139.239l-34.046 34.295c30.515 38.070 48.778 86.382 48.778 138.967 0 50.124-16.589 96.371-44.57 133.563l142.677 142.967c20.488-24.431 37.896-52.872 52.635-87.19l0.003-0.003c46.197 97.94 86.637 195.88 107.866 293.825-97.94-25.032-195.88-62.284-293.823-107.866 35.245-17.59 65.929-36.248 92.608-58.385l-142.131-142.242c-37.863 29.88-85.672 47.715-137.65 47.715-52.002 0-99.832-17.854-137.705-47.76l-141.621 142.657c26.574 21.973 57.103 40.526 92.152 58.016-97.942 45.582-195.881 82.834-293.821 107.866 21.228-97.945 61.669-195.885 107.866-293.825l0.003 0.003c14.54 33.857 31.687 61.988 51.818 86.198l142.329-143.549c-27.27-36.919-43.402-82.566-43.402-131.987 0-52.040 17.881-99.899 47.826-137.786l-35.449-35.476h-136.885l-135.826-135.826h136.992l-21.678-21.694 41.459-40.44 19.638 19.678 0.002-133.96 135.831 135.826-0.003 134.241 37.272 37.347c37.13-27.817 83.241-44.294 133.205-44.294 48.739 0 93.807 15.692 130.454 42.283l40.020-40.362-0.002-129.213 135.831-135.826 0.002 128.043 40.143-40.487 42.671 41.89-46.628 46.969h140.226zM642.74 451.784c0-27.583-8.444-53.188-22.877-74.39l-69.425 69.933 73.063 73.212c12.206-20.041 19.239-43.576 19.239-68.755zM510.368 584.155c27.1 0 52.287-8.159 73.269-22.132l-73.771-73.828-73.088 73.623c21.046 14.102 46.356 22.338 73.591 22.338zM377.996 451.784c0 24.349 6.603 47.144 18.075 66.745l71.774-72.388-67.659-67.713c-14.010 20.998-22.189 46.219-22.189 73.355zM510.368 319.412c-25.084 0-48.536 6.979-68.524 19.099l66.573 66.709 67.716-68.296c-19.379-11.12-41.819-17.512-65.765-17.512z" /> -<glyph unicode="" glyph-name="telescope" data-tags="telescope" d="M942.731 328.605c-13.755 13.755-31.48 22.192-51.676 25.685l-234.209 188.931c-19.359 19.357-48.885 24.977-81.623 18.594-2.718 7.754-6.884 14.662-12.609 20.386l-107.233 86.499 0.844 0.844c-3.899 3.899-8.418 6.966-13.399 9.284l-48.295 38.957c-14.388 14.388-37.627 16.805-62.626 9.042-1.179 7.257-4.138 13.624-9.034 18.521l-92.893 74.937c11.545 29.222 10.23 57.222-6.37 73.822-27.007 27.005-84.182 13.613-127.708-29.913s-56.92-100.703-29.913-127.708c16.556-16.554 44.45-17.904 73.586-6.461l74.996-92.972c4.898-4.899 11.269-7.858 18.527-9.037-7.763-24.999-5.346-48.238 9.041-62.624l43.432-53.841c1.555-2.327 3.306-4.52 5.282-6.548l86.871-107.69c5.723-5.725 12.629-9.891 20.383-12.609-6.383-32.74-0.763-62.267 18.594-81.626l188.941-234.225c3.495-20.188 11.931-37.905 25.682-51.654 53.355-53.355 166.316-26.896 252.31 59.098s112.451 198.955 59.098 252.31zM740.997 159.219c37.536 37.536 85.941 51.008 112.921 32.897 1.3-3.102 2.279-6.396 2.942-9.851-8.838-3.595-17.877-9.567-25.961-17.65-21.451-21.451-28.051-49.628-14.742-62.938 2.666-2.666 5.935-4.519 9.62-5.628-2.756-3.216-5.66-6.381-8.745-9.468-37.536-37.536-85.941-51.010-112.921-32.897-11.65 27.812 2.571 71.221 36.886 105.535z" /> -<glyph unicode="" glyph-name="three-keys" data-tags="three-keys" d="M392.595 412.9h233.226v-54.813h71.986v-67.629h47.826v108.793h49.474v-108.793h58.112v122.441h61.802v89.79l-524.759 0.002c-18.457 65.422-72.435 113.113-136.434 113.113l-0.005 0.008c-79.199 0-143.437-72.599-143.437-162.094s64.235-162.089 143.437-162.094c66.649 0 122.681 51.644 138.771 121.278zM210.074 412.33c-23.773 0-43.043 19.271-43.043 43.043s19.272 43.043 43.043 43.043 43.043-19.271 43.043-43.043c0-23.773-19.271-43.043-43.043-43.043zM304.258 737.566h233.226v-122.441h51.998v71.334h49.473v-71.334h125.925v51.608h-64.711v57.722h64.711v13.112h61.802v89.79h-524.757c-18.457 65.422-72.435 113.113-136.434 113.113l-0.005 0.008c-79.199 0-143.437-72.599-143.437-162.094s64.235-162.089 143.437-162.094c66.649 0 122.681 51.644 138.771 121.278zM84.411 778.343c0 52.722 36.296 95.459 81.068 95.459s81.063-42.737 81.063-95.459c0-52.722-36.296-95.459-81.063-95.459s-81.068 42.737-81.068 95.459zM1003.889 101.915v68.235h-515.429l-122.441 109.611-124.778-68.803v-184.248l124.778-66.466 122.441 120.114h240.222v-16.372h84.548v-49.474h-84.548v-56.596h275.207v94.527h-88.223v49.474l88.223-0.002zM325.036 90.878c-16.488 0-29.855 13.367-29.855 29.855s13.367 29.855 29.855 29.855 29.855-13.367 29.855-29.855-13.365-29.855-29.855-29.855z" /> -<glyph unicode="" glyph-name="tower" data-tags="tower" d="M905.017-20.080l-57.307 185.374h-78.581v376.693l122.113 151.378v221.879h-128.636v-104.655h-78.302v104.655h-130.035v-104.655h-76.9v104.655h-130.035v-104.655h-76.902v104.655h-128.648v-221.879l122.113-151.378v-376.693h-78.579l-57.307-185.374z" /> -<glyph unicode="" glyph-name="trefoil-lily" data-tags="trefoil-lily" d="M865.896 630.868c-20.909 9.976-43.708 13.882-67.272 12.276 30.257 9.589 60.159 17.836 88.993 24.035 34.32 33.323 82.476 89.066 98.678 132.955-50.046 8.638-121.271-10.591-164.481-18.982-19.468-22.232-41.13-44.112-64.076-65.451 12.853 19.391 20.674 40.81 22.465 63.588 6.259 79.677-92.646 140.318-165.061 101.406 46.476-7.614 73.979-42.614 74.319-91.345 0.55-79.105-53.337-123.020-174.608-175.127l-0.002-0.003c65.030-0.533 123.258 13.33 168.526 37.238-51.527-41.762-104.69-80.248-151.402-113.627 52.642 22.944 112.678 49.14 174.189 72.712-43.112-27.272-83.996-70.626-115.897-126.943l0.005-0.002c105.763 78.97 170.737 103.68 238.968 63.652 42.032-24.66 58.59-65.977 41.947-110.034 69.904 43.259 66.839 159.233-5.29 193.651zM439.301 483.601l0.005 0.002c-31.899 56.312-72.779 99.664-115.889 126.938 61.507-23.572 121.542-49.767 174.182-72.711-46.715 33.381-99.878 71.869-151.407 113.631 45.266-23.908 103.498-37.771 168.527-37.24l-0.002 0.003c-121.271 52.109-175.157 96.022-174.608 175.127 0.339 48.731 27.845 83.731 74.319 91.345-72.415 38.912-171.32-21.731-165.061-101.406 1.791-22.779 9.612-44.199 22.465-63.59-22.944 21.339-44.607 43.218-64.074 65.451-43.208 8.391-114.436 27.62-164.481 18.982 16.2-43.887 64.357-99.634 98.678-132.955 28.831-6.197 58.727-14.445 88.981-24.031-23.56 1.605-46.356-2.302-67.262-12.276-72.129-34.417-75.196-150.393-5.29-193.651-16.643 44.055-0.085 85.375 41.947 110.034 68.232 40.028 133.207 15.318 238.97-63.652zM654.45 243.883c-68.782 39.076-79.87 107.7-64.36 238.779l-0.003 0.003c-32.82-55.785-49.924-112.869-51.987-163.84-10.34 65.057-17.674 130.148-24.123 187.208-5.553-57.145-12.301-122.427-22.703-187.932-1.929 51.155-19.038 108.514-52.014 164.565l-0.003-0.003c15.51-131.079 4.422-199.703-64.36-238.779-42.372-24.072-86.434-17.75-116.267 18.691 2.511-82.171 104.48-137.503 170.352-92.245 18.831 12.939 33.47 30.423 43.837 51.248-7.008-30.54-15.124-60.239-24.644-88.214 14.338-41.615 33.299-112.914 65.803-151.936 29.908 35.974 54.107 105.552 65.803 151.936-9.049 28.071-16.857 58.089-23.682 89.086 10.39-21.21 25.174-39.001 44.268-52.12 65.872-45.258 167.842 10.075 170.352 92.245-29.833-36.443-73.893-42.762-116.267-18.693z" /> -<glyph unicode="" glyph-name="trident" data-tags="trident" d="M923.832 37.212l-107.543 251.042-47.877-47.877-271.064 271.064 96.74 96.74 189.121-189.119-46.685-46.685 251.044-107.542-107.543 251.042-49.013-49.013-235.784 235.782-126.645-126.644-351.162 351.162-83.138 0.003v-83.138l350.654-351.675-126.595-126.595 235.784-235.782-48.96-48.96 251.044-107.542-107.543 251.042-46.74-46.74-189.121 189.119 96.74 96.74 271.064-271.064-47.821-47.821z" /> -<glyph unicode="" glyph-name="trophy" data-tags="trophy" d="M691.8 74.138c-111.365 59.293-155.71 166.598-35.526 188.241-63.044 13.75-91.144 36.986-46.867 72.455 31.452 14.274 61.054 35.227 88.112 61.829 13.279-9.535 25.617-20.042 36.861-31.392-8.197-8.337-16.673-16.468-25.426-24.379l32.345-59.113c157.978 143.674 232.024 358.474 219.717 569.068l-54.65-15.866c0.902-15.205 1.263-30.369 1.108-45.47h-51.098c1.402 19.558 2.147 39.42 2.147 59.552h-20.286c-5.598 27.27-149.736 49.114-326.746 49.114-177.012 0-321.148-21.841-326.746-49.114h-20.265c0-20.133 0.745-39.994 2.147-59.552h-51.778c-0.241 15.891 0.007 31.806 0.753 47.7l-53.537 12.52c-17.061-213 65.93-420.314 218.606-567.952l31.229 59.113c-8.372 6.936-16.439 14.099-24.237 21.452 11.68 12.211 24.579 23.47 38.541 33.623 26.865-26.27 56.221-46.989 87.396-61.138 44.276-35.467 16.175-58.704-46.867-72.453 120.176-21.641 75.843-128.935-35.508-188.231-48.312-8.369-78.337-20.072-78.337-33.025 0-25.443 115.777-46.067 258.593-46.067s258.593 20.624 258.593 46.067c0 12.95-29.998 24.648-78.275 33.017zM511.504 884.81c129.457 0 235.042-15.859 240.585-35.746v0c0.075-0.271 0.135-0.54 0.177-0.81 0.038-0.277 0.068-0.555 0.068-0.834 0-4.517-5.16-8.847-14.613-12.856-2.701-1.146-5.753-2.265-9.136-3.354-4.228-1.361-8.972-2.678-14.192-3.942s-10.918-2.476-17.054-3.63c-1.226-0.231-2.471-0.459-3.734-0.685-2.524-0.453-5.115-0.895-7.774-1.328-1.33-0.217-2.674-0.431-4.038-0.641-6.811-1.057-14.025-2.051-21.608-2.977-1.517-0.185-3.047-0.368-4.592-0.546-10.818-1.256-22.339-2.374-34.454-3.338-6.922-0.551-14.040-1.051-21.332-1.497-10.937-0.67-22.266-1.218-33.917-1.635-17.478-0.626-35.685-0.957-54.387-0.957s-36.909 0.331-54.387 0.957c-11.652 0.418-22.981 0.967-33.917 1.635-7.292 0.446-14.41 0.947-21.332 1.497-12.116 0.964-23.636 2.081-34.454 3.338-1.545 0.179-3.077 0.362-4.592 0.546-7.582 0.925-14.797 1.919-21.608 2.977-1.361 0.212-2.708 0.426-4.038 0.641-2.658 0.433-5.25 0.875-7.774 1.328-1.261 0.226-2.506 0.454-3.734 0.685-6.136 1.154-11.832 2.367-17.054 3.63-5.22 1.265-9.964 2.581-14.192 3.942-3.383 1.089-6.435 2.208-9.136 3.354-9.455 4.009-14.613 8.339-14.613 12.856 0 0.279 0.028 0.556 0.068 0.834 0.042 0.271 0.102 0.541 0.177 0.81v0c5.543 19.887 111.128 35.746 240.585 35.746zM904.698 735.978c-11.154-119.050-55.383-231.942-129.859-325.102-10.865 12.093-22.795 23.41-35.645 33.869 55.517 74.64 95.514 176.085 111.551 291.232h53.953zM172.258 735.978c16.092-115.533 56.298-217.28 112.105-291.99-13.925-11.461-26.739-23.963-38.284-37.385-77.198 92.763-117.897 208.976-128.488 329.374h54.666z" /> -<glyph unicode="" glyph-name="underhand" data-tags="underhand" d="M34.737 210.35c205.803 0 214.146 2.781 214.146 2.781 265.435-431.388 475.584 155.574 502.825 367.922l-77.755 0.337 152.113 265.533 146.073-264.719-75.65-3.118c-174.505-608.895-642.223-635.72-861.752-368.736z" /> -<glyph unicode="" glyph-name="vase" data-tags="vase" d="M787.327 784.285c-35.616 31.001-84.052 1.669-134.328-37.906-1.545 18.437-14.042 25.924-14.042 45.908 0 0 51.382 11.692 63.896 31.948 11.197 18.116 12.948 46.985 0 63.896-40.238 52.55-159.744 51.778-191.678 51.778-31.948 0-151.45 0.77-191.678-51.778-12.948-16.91-11.197-45.784 0-63.896 12.519-20.254 63.896-31.948 63.896-31.948 0-14.638-14.247-24.003-14.176-47.664-52.451 40.121-103.080 70.86-139.008 38.361-64.318-58.166 3.737-187.526 41.667-261.392-24.214-64.181-32.35-128.434-16.305-176.574 31.948-95.847 127.796-159.744 127.796-223.628 0-31.948-31.948-31.948-31.948-63.896s63.896-95.847 159.744-95.847c95.847 0 159.744 63.896 159.744 95.847 0 31.948-31.948 31.948-31.948 63.896 0 63.896 95.847 127.796 127.796 223.628 16.052 48.156 7.903 112.438-16.331 176.641 36.465 74.496 102.462 205.58 36.904 262.627zM383.365 696.439c-33.189-33.189-62.543-74.042-85.418-117.245-31.555 53.515-88.081 134.543-43.94 175.221 29.676 27.356 109.194-32.648 122.771-43.267 1.819-4.572 3.981-9.442 6.613-14.709h-0.027zM646.445 713.089c21.083 16.561 89.81 66.862 117.635 42.179 44.692-39.635-9.527-121.126-40.14-175.241-22.81 42.898-52.003 83.435-84.982 116.412 3.055 6.109 5.516 11.625 7.487 16.65z" /> -<glyph unicode="" glyph-name="vial" data-tags="vial" d="M628.192 710.024c0-65.655 0-150.31 0-215.99h-232.404c0 65.655 0 150.31 0 215.99zM372.322 774.55h-40.307l30.268-49.216v-614.993c0-78.857 66.785-142.329 149.733-142.329s149.733 63.472 149.733 142.329v614.993l30.268 49.216h-40.307zM462.096 438.317c15.31 0 27.683-11.771 27.683-26.327s-12.373-26.403-27.683-26.403-27.758 11.821-27.758 26.403 12.423 26.327 27.758 26.327zM551.996 395.174c24.119 0 43.67-18.597 43.67-41.511s-19.551-41.511-43.67-41.511-43.67 18.597-43.67 41.511 19.551 41.511 43.67 41.511zM594.185 540.665c0.151-14.557-12.122-26.478-27.432-26.629s-27.858 11.52-28.009 26.076c0 0.176 0 0.376 0 0.552-0.151 14.557 12.122 26.478 27.432 26.629s27.858-11.52 28.009-26.076c0-0.201 0-0.376 0-0.552zM599.23 828.209c0.151-14.557-12.122-26.478-27.432-26.629s-27.858 11.52-28.009 26.076c0 0.176 0 0.376 0 0.552-0.151 14.557 12.122 26.478 27.432 26.629s27.858-11.52 28.009-26.076c0-0.176 0-0.376 0-0.552zM525.242 886.485c0-22.939-19.551-41.511-43.67-41.511s-43.67 18.597-43.67 41.511 19.551 41.511 43.67 41.511 43.67-18.572 43.67-41.511z" /> -<glyph unicode="" glyph-name="wooden-sign" data-tags="wooden-sign" d="M958.424 251.576l-12.769 142.825-299.051 7.833 296.606 19.516-17.622 197.114-295.996 7.377 320.302 20.049-3.172 146.728-391.95-8.473-2.305 82.715c-2.836 57.85-160.165 50.954-156.844-11.343l2.11-74.767-349.66-7.557 3.070-142.045 327.51-8.145-314.527-19.646-6.224-211.866 17.779-4.059-15.905-155.68 353.232 7.636 8.137-288.395h156.842l-8.13 291.785 388.569 8.399z" /> -<glyph unicode="" glyph-name="wyvern" data-tags="wyvern" d="M640.67 603.15l-0.022-0.013 0.015 0.003zM648.882 924.99c0.058-0.070 0.114-0.142 0.17-0.212l-69.736-64.753 73.688 7.494-30.742-60.142 75.971 32.098c52.214-139.708 1.239-308.067-104.956-331.985-14.847 57.436-83.649 82.035-70.546 131.009 4.398-3.191 9.437-5.655 14.999-7.145 4.343-1.164 8.707-1.649 12.985-1.542l-0.788-0.89 45.816-53.24 44.904 27.454c-15.445-3.881-57.247 10.006-62.736 36.518 7.452 5.885 13.14 14.134 15.788 24.013 0.246 0.919 0.453 1.838 0.64 2.756l20.622-40.761 10.424 33.84c15.225-11.137 24.903-27.179 22.937-42.216l33.294 58.707-144.043 59.018-115.927 95.905 34.148-62.397-96.258 39.438 70.162-62.367c-81.070-56.23-44.095-169.809-3.576-238.196-114.815 19.337-205.924 154.621-191.216 289.595l98.256 42.661-62.056 10.263 58.318 66.729-63.926-23.046c0.074 0.134 0.14 0.269 0.215 0.403-336.174-132.443-232.45-732.805-127.252-834.618-8.565 59.389-10.729 97.527-3.82 114.113 6.376-41.89 14.807-81.825 25.381-118.31l5.335 120c10.883-7.606 24.561-20.729 41.393-39.45-9.622 26.656-13.549 52.921-12.955 76.439 40.502-83.196 134.47-138.25 208.936-124.42 44.814 8.324 83.467 25.418 115.43 48.87l14.59-30.78c-40.070-10.055-45.537-65.163-29.424-110.046 3.49 39.7 22.685 59.491 43.389 64.5-13.17-31.682-9.376-61.146-6.219-88.173 20.266 24.252 42.866 47.512 47.178 78.579 17.445-14.638 24.591-42.911 2.382-77.984 52.555 30.897 63.027 83.854 15.923 115.184l-64.029 68.476c11.819 11.089 22.446 23.169 31.844 36.081l78.434-31.5c-7.876-27.336 11.643-62.923 39.472-86.48-16.080 34.519-9.635 60.060 5.117 74.084 3.254-34.721 21.245-58.293 37.405-80.001 5.447 31.281 13.559 62.888-0.428 91.829 21.998-3.115 42.338-23.098 40.613-63.652 28.702 50.585 12.184 99.333-41.541 102.889l-141.908 19.74c25.471 45.891 37.288 99.487 33.967 154.704 28.333 69.29 99.953 23.58 108.868-98.169 54.761 160.426 133.95 77.102 117.464-48.95 18.537 36.704 34.878 58.919 48.806 67.936l38.077-152.726c0.824 46.429-1.706 96.010-7.133 146.826 14.202-19.6 22.635-65.977 24.578-134.906 87.010 229.974-1.694 715.517-306.702 770.903zM377.261 167.244c-55.157-14.541-139.226 22.762-167.964 107.161 24.518 42.084 74.603 43.89 125.473-45.119-38.17 126.179 105.928 184.387 126.632 92.616-0.002-71.678-19.060-137.5-84.14-154.657zM589.976-27.415c0.028 0.045 0.053 0.090 0.082 0.135-0.017-0.010-0.033-0.020-0.050-0.030l-0.032-0.105z" /> -</font></defs></svg>
@@ -1,239 +0,0 @@
-<?xml version="1.0" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"> -<metadata></metadata> -<defs> -<font id="inconsolatamedium" horiz-adv-x="1024" > -<font-face units-per-em="2048" ascent="1679" descent="-369" /> -<missing-glyph horiz-adv-x="500" /> -<glyph horiz-adv-x="0" /> -<glyph horiz-adv-x="682" /> -<glyph unicode=" " /> -<glyph unicode="!" d="M369 98q0 50 35.5 85.5t85.5 35.5t86 -35.5t36 -85.5t-36 -85.5t-86 -35.5t-85.5 35.5t-35.5 85.5zM390 1214q0 52 14 88q13 32 37.5 49t52.5 17q31 0 58.5 -22t38.5 -66q8 -32 8 -83q0 -45 -8.5 -127.5t-10.5 -106.5l-37 -565h-103l-30 565q-4 69 -12 144t-8 107z" /> -<glyph unicode=""" d="M228 871l44 138q20 62 20 113q0 22 -6.5 65t-6.5 65q0 56 27 84.5t61 28.5q35 0 63.5 -31.5t28.5 -95.5q0 -72 -68 -259l-50 -136zM581 871l45 138q20 62 20 113q0 22 -6.5 65t-6.5 65q0 56 26.5 84.5t60.5 28.5q35 0 63.5 -31.5t28.5 -95.5q0 -72 -68 -259l-49 -136z " /> -<glyph unicode="#" d="M51 387l9 94l201 3l42 349l-223 -2l7 97l227 3l41 347l124 5l-43 -351l226 3l40 332l127 6l-41 -337l186 3l-11 -99l-187 -2l-42 -345l203 4l-11 -96l-204 -3l-45 -370l-124 -7l45 375l-227 -4l-44 -364l-120 -5l43 367zM382 487l227 4l41 345l-225 -2z" /> -<glyph unicode="$" d="M122 193l88 122q9 -5 9 -19q0 -16 7 -23q102 -109 255 -126v451q-73 26 -113 44q-61 29 -104 65t-64 73.5t-29.5 69t-8.5 63.5q0 111 89 195t230 102v123h132q2 -4 2 -7q0 -7 -7 -16t-7 -20v-78q189 -19 304 -157l-88 -111q-10 2 -11 14q0 14 -2 18l-9 12 q-70 85 -194 103v-395q110 -38 135 -49q206 -91 206 -275q0 -77 -35.5 -146.5t-115 -124t-190.5 -68.5v-128h-120v124q-221 14 -359 164zM298 931q0 -94 111 -158q34 -19 72 -34v354q-91 -11 -137 -57t-46 -105zM601 152q95 18 151 78t56 132q0 101 -102 157q-35 19 -105 41 v-408z" /> -<glyph unicode="%" d="M58 1031q0 115 67 191.5t161 76.5q95 0 162.5 -77.5t67.5 -192.5q0 -113 -66.5 -189.5t-161.5 -76.5t-162.5 77t-67.5 191zM94 0l707 1276h138l-715 -1276h-130zM182 1038q0 -49 11 -84t28 -51t33.5 -23t32.5 -7q38 0 69 35.5t31 115.5q0 51 -11 87t-29 52t-33.5 22 t-30.5 6q-38 0 -69.5 -36t-31.5 -117zM530 244q0 113 67.5 190t161.5 77q95 0 162 -76.5t67 -189.5t-67.5 -189.5t-161.5 -76.5q-95 0 -162 76t-67 189zM652 245q0 -83 33 -122.5t76 -39.5q41 0 73 37t32 120q0 89 -33 127t-74 38t-74 -38t-33 -122z" /> -<glyph unicode="&" d="M74 299q0 119 70 229t188 174q-145 176 -145 318q0 114 82 191.5t200 77.5q116 0 194.5 -77.5t78.5 -195.5q0 -100 -60 -193t-161 -148l230 -320q63 72 92 165q3 8 3 16q0 4 -1.5 12t-1.5 12q0 14 9 21l132 -91q-69 -124 -155 -239l143 -186l-120 -90l-113 181 q-64 -79 -155 -128t-191 -49q-138 0 -228.5 91.5t-90.5 228.5zM229 314q0 -88 53.5 -145.5t133.5 -57.5q38 0 78 14.5t69.5 35.5t53 42t35.5 35l13 15l-262 353q-81 -53 -127.5 -132t-46.5 -160zM329 1017q0 -100 123 -253q71 40 113.5 106t42.5 136q0 71 -42 116t-100 45 q-56 0 -96.5 -42t-40.5 -108z" /> -<glyph unicode="'" d="M422 871l45 138q20 62 20 113q0 22 -6.5 65t-6.5 65q0 56 26.5 84.5t60.5 28.5q35 0 63.5 -31.5t28.5 -95.5q0 -72 -68 -259l-49 -136z" /> -<glyph unicode="(" d="M284 529q0 281 140 506t378 329l62 -125q-7 -4 -16 -4q-4 0 -11.5 1t-10.5 1q-9 0 -19 -6q-179 -106 -280 -290.5t-101 -404.5q0 -241 118.5 -451t326.5 -331l-67 -107q-242 127 -381 364.5t-139 517.5z" /> -<glyph unicode=")" d="M148 -233q208 110 330.5 309.5t122.5 430.5q0 228 -119 424t-323 304l39 128q250 -115 399 -346t149 -504q0 -276 -152 -512t-407 -358z" /> -<glyph unicode="*" d="M85 723l53 132l330 -155l-31 362h166q-1 -12 -6 -27t-7 -28l-31 -307l325 148l55 -125l-352 -106l258 -309l-112 -89l-220 340l-230 -342l-112 91l267 307z" /> -<glyph unicode="+" d="M92 596v125h362v350h129v-350h350v-125h-350v-384h-129v384h-362z" /> -<glyph unicode="," d="M338 -283q57 53 103 128q30 48 30 85q0 19 -9.5 35.5t-17 22.5t-21.5 15q-16 11 -24 17t-20.5 27t-12.5 46q0 47 34.5 82t83.5 35q57 0 99.5 -47t42.5 -123q0 -164 -218 -385z" /> -<glyph unicode="-" d="M145 576v136h737v-136h-737z" /> -<glyph unicode="." d="M368 95q0 48 35.5 82.5t85.5 34.5t85.5 -34.5t35.5 -82.5t-35.5 -83t-85.5 -35t-85.5 34.5t-35.5 83.5z" /> -<glyph unicode="/" d="M131 -27l641 1388l122 -62l-643 -1386z" /> -<glyph unicode="0" d="M102 628q0 148 36 274t94.5 208.5t132 128.5t150.5 46q59 0 117 -27t110.5 -83.5t92 -134.5t63 -187.5t23.5 -236.5t-24.5 -234t-64.5 -180.5t-93 -125t-109 -75.5t-113 -24q-77 0 -150.5 44.5t-132.5 125t-95.5 206.5t-36.5 275zM236 653q0 -128 29 -241l449 581 q-40 82 -93 124t-108 42q-48 0 -96.5 -34t-89 -96t-66 -160.5t-25.5 -215.5zM312 282q41 -83 96.5 -128.5t113.5 -45.5q35 0 71 16.5t71.5 54.5t62.5 93t44 140t17 188q0 146 -26 256z" /> -<glyph unicode="1" d="M187 1106l327 172h96v-1167h230v-113h-603v113h237v988l-253 -72z" /> -<glyph unicode="2" d="M150 0v90q75 149 163 258t208 217q34 31 49.5 45.5t48.5 47t49.5 57t37 58.5t29.5 70t9 73q0 102 -71.5 172t-173.5 70q-75 0 -132.5 -36t-85.5 -80q-5 -8 -8.5 -23t-9.5 -24l-104 83q56 96 152 151.5t205 55.5q155 0 262.5 -104.5t107.5 -254.5q0 -65 -20 -125.5 t-58.5 -113.5t-69 -86.5t-76.5 -76.5q-6 -5 -41.5 -38t-50.5 -47.5t-49 -48t-55.5 -58.5t-50.5 -60.5t-53.5 -72t-46.5 -74.5h535q12 0 22 9q13 13 28 9v-143h-750z" /> -<glyph unicode="3" d="M141 124l108 129q9 -10 14 -29t13 -29q8 -9 19.5 -19t37.5 -27.5t63.5 -29t78.5 -11.5q110 0 183.5 76.5t73.5 183.5q0 112 -84 177.5t-216 65.5q-29 0 -64 -5v115q131 0 201 32q64 28 100 84t36 117q0 83 -63 141t-159 58q-128 0 -220 -98l-79 89q60 65 140 100.5 t166 35.5q149 0 250 -95t101 -228q0 -93 -52.5 -169t-138.5 -108q99 -36 159.5 -125.5t60.5 -203.5q0 -155 -108 -264t-285 -109q-97 0 -184.5 37.5t-151.5 108.5z" /> -<glyph unicode="4" d="M99 353v107l543 818h120v-799h164v-127h-164v-352h-149v353h-514zM240 479h375v571z" /> -<glyph unicode="5" d="M131 173l127 96q10 -7 11 -25.5t4 -23.5q4 -8 21 -24.5t46 -39t74 -38.5t93 -16q108 0 183 81.5t75 222.5q0 144 -76.5 224.5t-184.5 80.5q-66 0 -129.5 -31.5t-109.5 -89.5l-92 37l44 649h647v-129h-526l-20 -368q100 50 208 50q167 0 276.5 -114t109.5 -312 q0 -200 -115 -313t-288 -113q-115 0 -215 51.5t-163 144.5z" /> -<glyph unicode="6" d="M138 581q0 240 54 393q56 158 164.5 237t231.5 79q162 0 280 -116l-99 -110q-11 8 -18.5 24.5t-12.5 21.5q-7 7 -23 17.5t-52 23t-74 12.5q-34 0 -67.5 -8.5t-78.5 -39.5t-78.5 -82t-58.5 -145t-27 -218q42 71 115 112.5t156 41.5q68 0 130.5 -28.5t111.5 -80.5 t78.5 -132t29.5 -177q0 -191 -106.5 -309t-257.5 -118q-88 0 -168 43.5t-134 125.5q-96 145 -96 433zM286 527q-13 -177 62.5 -299t193.5 -122q89 0 153.5 75.5t64.5 216.5q0 79 -20 139t-53.5 94t-71.5 50.5t-79 16.5q-71 0 -139 -46t-111 -125z" /> -<glyph unicode="7" d="M161 1140v136h723v-79q-129 -295 -242 -600q-118 -320 -204 -597h-161q119 360 244 682q69 180 186 458h-546z" /> -<glyph unicode="8" d="M123 321q0 109 70.5 206.5t184.5 151.5q-88 45 -141 125.5t-53 173.5q0 130 100 222t245 92q140 0 236 -88t96 -214q0 -92 -55.5 -175.5t-148.5 -132.5q110 -50 178.5 -146t68.5 -207q0 -146 -113 -248t-280 -102q-164 0 -276 99.5t-112 242.5zM270 340q0 -96 72 -164 t176 -68q101 0 171 65t70 158t-74.5 171.5t-198.5 117.5q-94 -39 -155 -115.5t-61 -164.5zM322 990q0 -47 23 -91t56 -73t66 -51t56 -32l23 -10q77 41 126 108t49 139q0 80 -59 136t-144 56q-83 0 -139.5 -53t-56.5 -129z" /> -<glyph unicode="9" d="M140 866q0 182 106.5 302t258.5 120q109 0 204 -69t142 -207q44 -128 44 -358q0 -233 -54 -378q-55 -146 -163.5 -221.5t-232.5 -75.5q-166 0 -282 116l99 110q12 -7 18.5 -25t14.5 -24q7 -5 20 -13t53 -21t81 -13q76 0 144.5 43t107.5 133q46 113 52 316 q-44 -65 -114 -101.5t-149 -36.5q-144 0 -247 112.5t-103 290.5zM279 872q0 -135 66.5 -209.5t158.5 -74.5q69 0 134.5 42.5t107.5 113.5q17 186 -56.5 301.5t-187.5 115.5q-92 0 -157.5 -78t-65.5 -211z" /> -<glyph unicode=":" d="M368 95q0 48 35.5 82.5t85.5 34.5t85.5 -34.5t35.5 -82.5t-35.5 -83t-85.5 -35t-85.5 34.5t-35.5 83.5zM368 749q0 48 35.5 82.5t85.5 34.5t85.5 -35t35.5 -83t-35.5 -82.5t-85.5 -34.5t-85.5 34.5t-35.5 83.5z" /> -<glyph unicode=";" d="M338 -283q57 53 103 128q30 48 30 85q0 19 -9.5 35.5t-17 22.5t-21.5 15q-16 11 -24 17t-20.5 27t-12.5 46q0 47 34.5 82t83.5 35q57 0 99.5 -47t42.5 -123q0 -164 -218 -385zM368 749q0 48 35.5 82.5t85.5 34.5t85.5 -35t35.5 -83t-35.5 -82.5t-85.5 -34.5t-85.5 34.5 t-35.5 83.5z" /> -<glyph unicode="<" d="M71 606l873 -509v154l-716 403l711 362v145l-868 -456v-99z" /> -<glyph unicode="=" d="M92 348v126h841v-126h-841zM92 772v126h841v-126h-841z" /> -<glyph unicode=">" d="M81 97v154l716 403l-710 362v145l867 -456v-99z" /> -<glyph unicode="?" d="M131 1149q66 101 172 157.5t223 56.5q167 0 265 -105.5t98 -256.5q0 -46 -11 -87.5t-25.5 -69.5t-40.5 -58t-42.5 -45t-45.5 -38.5t-38 -31.5q-57 -51 -73 -96.5t-16 -111.5v-85h-134v85q0 82 17 138.5t79 124.5q7 8 39.5 41t48 52t38 52t32.5 68t10 73q0 91 -61.5 154 t-153.5 63q-78 0 -153 -48t-124 -129zM413 91q0 48 36 83t86 35t85.5 -35t35.5 -83t-35.5 -83t-85.5 -35t-86 34.5t-36 83.5z" /> -<glyph unicode="@" d="M64 643q0 134 30 245.5t78.5 185.5t113.5 125.5t133 74t137 22.5q113 0 207.5 -60t143.5 -167q21 -46 31.5 -101t12.5 -93t2 -101v-415h-124v78q-80 -96 -205 -96q-110 0 -188 78t-78 189q0 85 51.5 159.5t143.5 110.5q38 15 84 22.5t75.5 8.5t81.5 1h30q0 114 -80 195 t-194 81q-68 0 -132.5 -33t-117.5 -96.5t-85.5 -169t-32.5 -238.5q0 -115 26.5 -210.5t69.5 -158t100 -105.5t116.5 -62t121.5 -19q121 0 220 67l55 -99q-133 -85 -287 -85q-79 0 -154.5 23t-146 75t-123 127.5t-84.5 189t-32 251.5zM486 614q0 -67 47 -113.5t115 -46.5 q46 0 87 24t64 69q15 29 22 71.5t7.5 66.5t0.5 84v39h-34q-49 0 -78.5 -2t-73.5 -13t-76 -33q-81 -56 -81 -146z" /> -<glyph unicode="A" d="M30 -2l451 1301h16l493 -1299h-149l-141 373h-405l-124 -375h-141zM323 484h345l-180 486z" /> -<glyph unicode="B" d="M99 0v1276h362q50 0 81 -1.5t76 -10t82 -24.5q88 -38 136.5 -113t48.5 -163q0 -92 -51.5 -168.5t-137.5 -111.5q107 -36 173 -127.5t66 -203.5q0 -101 -56 -186.5t-157 -128.5q-41 -17 -90 -26t-82.5 -10.5t-89.5 -1.5h-361zM240 125h244q108 0 165 26q65 29 100.5 88 t35.5 129q0 71 -38 133t-107 95q-66 31 -191 31h-209v-502zM240 748h200q118 0 177 25q59 26 91.5 74t32.5 104q0 57 -34 106t-96 74q-57 23 -169 23h-202v-406z" /> -<glyph unicode="C" d="M83 631q0 147 32 264t81.5 188.5t115.5 119t129 66t127 18.5q127 0 233.5 -68.5t158.5 -184.5l-136 -67q-10 8 -10 20q0 3 0.5 8t0.5 7q0 10 -7 22q-40 68 -105 108t-139 40q-142 0 -241.5 -142.5t-99.5 -386.5q0 -249 102.5 -395t250.5 -146q75 0 145.5 42t114.5 114 l106 -69q-60 -98 -160 -154t-214 -56q-55 0 -109 14.5t-109.5 44.5t-103 82.5t-84.5 122t-58 169.5t-21 219z" /> -<glyph unicode="D" d="M110 -2v1278h298q97 0 165 -13.5t132 -54.5q119 -78 178 -227t59 -341q0 -211 -73 -366t-209 -225q-62 -32 -124.5 -41.5t-151.5 -9.5h-274zM246 111h130q75 0 130 11t109 47q183 124 183 452q0 333 -158 463q-53 44 -109.5 57t-131.5 13h-153v-1043z" /> -<glyph unicode="E" d="M120 0v1278h783v-127h-647v-419h534v-131h-534v-474h642v-127h-778z" /> -<glyph unicode="F" d="M159 0v1278h735v-126h-590v-401h477v-124h-477v-627h-145z" /> -<glyph unicode="G" d="M74 623q0 116 18.5 213t49.5 164t73.5 119.5t86.5 83.5t94 51t91 27t81 7q118 0 217 -57t154 -156l-101 -103q-15 9 -28 40q-30 67 -95 109t-148 42q-84 0 -161.5 -47t-125.5 -136q-64 -120 -64 -327q0 -298 121 -435q98 -112 243 -112q119 0 229 78v304h-231v124h364 v-499q-88 -65 -186 -99t-189 -34q-70 0 -137 20t-132.5 68t-114.5 119.5t-79 184t-30 251.5z" /> -<glyph unicode="H" d="M111 0v1276h159q0 -1 1 -3q2 -4 2 -6q0 -7 -6.5 -17.5t-6.5 -22.5v-497h500v546h156q2 -3 2 -9q0 -7 -7.5 -16.5t-7.5 -20.5v-1232h-145v610h-498v-608h-149z" /> -<glyph unicode="I" d="M166 -2v120h251v1038h-237v120h633v-120h-253v-1039h265v-119h-659z" /> -<glyph unicode="J" d="M101 118l95 117q6 -6 7.5 -19t5.5 -18q6 -8 27 -27.5t69 -43t96 -23.5q97 0 151 81q14 20 23 47t13.5 44t6.5 54t2 45.5v50.5v730h-245v120h583v-120h-196v-728q0 -60 -2 -96t-13.5 -89.5t-34.5 -95.5q-43 -82 -120.5 -126t-170.5 -44q-85 0 -162.5 37t-134.5 104z" /> -<glyph unicode="K" d="M87 0v1278h171q2 -13 -12 -30q-7 -9 -7 -23v-537l533 599q43 -11 106 -11h53l-482 -551l516 -727q-45 0 -90.5 -2t-68.5 -4l-23 -1l-444 647l-100 -110v-528h-152z" /> -<glyph unicode="L" d="M136 -2v1278h166q2 -14 -7 -32q-10 -18 -10 -37v-1085h615v-124h-764z" /> -<glyph unicode="M" d="M83 -2v1278h113l317 -624l321 626h108v-1280h-136v965l-276 -514h-55l-258 507v-958h-134z" /> -<glyph unicode="N" d="M103 0v1276h139l536 -945v947h152q2 -10 -6 -26q-8 -14 -8 -29v-1225h-114l-562 1006v-1004h-137z" /> -<glyph unicode="O" d="M60 640q0 144 30 259.5t76.5 187t109 119t122.5 66t121 18.5q110 0 208.5 -61t159.5 -179q78 -152 78 -415q0 -255 -76 -408q-60 -122 -159.5 -184t-209.5 -62q-62 0 -123 20t-123 68.5t-108.5 121.5t-76 189t-29.5 260zM201 659q0 -117 19.5 -211.5t51.5 -154.5 t74.5 -100t86 -56.5t88.5 -16.5q70 0 136 42.5t108 130.5q57 121 57 324q0 213 -50 337q-41 103 -112 152.5t-147 49.5q-43 0 -84.5 -14.5t-83 -51.5t-73 -91.5t-51.5 -142.5t-20 -197z" /> -<glyph unicode="P" d="M120 0v1276h389q51 0 83 -2t76 -12t82 -29q88 -45 135.5 -130.5t47.5 -185.5t-47 -184t-133 -128q-37 -18 -79.5 -27.5t-73.5 -11.5t-80 -2h-251v-564h-149zM267 689h258q97 0 148 26q54 27 84 80t30 115q0 64 -31.5 119.5t-89.5 84.5q-56 28 -157 28h-240z" /> -<glyph unicode="Q" d="M60 640q0 145 30 260.5t76.5 186.5t109 118.5t122.5 66t121 18.5q111 0 210 -61.5t159 -181.5q77 -154 77 -414q0 -255 -76 -407q-50 -102 -129.5 -162t-170.5 -77q1 -31 7 -55t20.5 -48.5t45.5 -38t77 -13.5q25 0 81.5 5t84.5 6l-4 -140q-25 0 -79 -1h-33q-29 0 -43 1 q-20 1 -55.5 3.5t-59 9.5t-46.5 18q-122 61 -122 242v9q-59 9 -113.5 35t-108.5 78t-93 123.5t-63.5 179.5t-24.5 239zM200 661q0 -117 19 -212t51 -156.5t74 -103t86.5 -59t91.5 -17.5q37 0 73.5 11t79.5 44.5t75.5 86.5t54.5 146.5t22 214.5q0 211 -52 340 q-42 105 -114 154t-148 49q-44 0 -86 -15.5t-84 -52.5t-73 -92.5t-50.5 -142.5t-19.5 -195z" /> -<glyph unicode="R" d="M115 0v1276h376q51 0 83.5 -2t77.5 -12t83 -29q86 -44 133.5 -126.5t47.5 -180.5q0 -127 -72 -226.5t-188 -130.5l295 -569h-161l-283 564h-247v-564h-145zM260 689h247q97 0 148 26q54 27 84 80t30 115q0 64 -31.5 119.5t-89.5 84.5q-56 28 -157 28h-231v-453z" /> -<glyph unicode="S" d="M106 143l85 147q9 -4 9 -20q0 -14 6 -22q47 -60 127 -100t178 -40q130 0 204.5 70t74.5 161q0 110 -107 176q-38 24 -185.5 83.5t-213.5 108.5q-136 101 -136 249q0 135 110 231t279 96q105 0 197.5 -41t156.5 -118l-90 -122q-11 3 -11 17q0 12 -5 20q-39 57 -106.5 91.5 t-153.5 34.5q-105 0 -167.5 -55t-62.5 -132q0 -115 130 -190q43 -25 127 -57.5t158 -69t123 -82.5q99 -93 99 -232q0 -50 -14 -100t-46.5 -99t-80 -86t-121 -60t-163.5 -23q-120 0 -223.5 41.5t-177.5 122.5z" /> -<glyph unicode="T" d="M64 1149v129h883v-129h-376v-1151h-145v1151h-362z" /> -<glyph unicode="U" d="M103 440v836h160q2 -6 2 -10q0 -7 -13 -28q-8 -11 -8 -27v-773q0 -121 31 -188q34 -72 99.5 -111.5t143.5 -39.5q77 0 143 38.5t100 110.5q33 69 33 196v832h136v-829q0 -87 -9.5 -149t-41.5 -122q-53 -97 -151 -148t-213 -51q-117 0 -214 51t-149 147q-32 59 -40.5 119 t-8.5 146z" /> -<glyph unicode="V" d="M51 1278h150l327 -981l310 979h141l-428 -1285h-65z" /> -<glyph unicode="W" d="M35 1276h133l138 -862l205 768h44l207 -772l116 866h121l-202 -1285h-56l-220 843l-222 -843h-59z" /> -<glyph unicode="X" d="M83 0l349 651l-342 627h154l269 -485l263 485h143l-323 -624l362 -654h-161l-284 506l-273 -506h-157z" /> -<glyph unicode="Y" d="M58 1278h163l313 -621l283 619h152l-363 -772v-504h-155v504z" /> -<glyph unicode="Z" d="M103 -2v101l643 1048h-619v129h789l-2 -101l-631 -1050h602q14 0 31.5 7.5t30.5 5.5v-140h-844z" /> -<glyph unicode="[" d="M269 -182v1554h585v-122h-455v-1315h456v-117h-586z" /> -<glyph unicode="\" d="M131 1299l122 62l641 -1388l-120 -60z" /> -<glyph unicode="]" d="M170 -65h456v1315h-455v122h585v-1554h-586v117z" /> -<glyph unicode="^" d="M191 751l313 525h44l277 -523l-109 -51l-198 358l-225 -358z" /> -<glyph unicode="_" d="M71 -39h883v-125h-883v125z" /> -<glyph unicode="`" d="M285 1323l105 51l55 -134q25 -61 58 -100q15 -17 47 -45.5t46 -45.5q24 -29 30.5 -58.5t-1.5 -50t-24 -34.5q-17 -14 -39.5 -18t-53.5 9.5t-59 46.5q-26 30 -50.5 83t-63.5 160z" /> -<glyph unicode="a" d="M100 242q0 83 54.5 155.5t160.5 111.5q55 20 133.5 30t124 11t146.5 0h30v35q0 36 -1 54.5t-8 50.5t-21 56q-54 90 -193 90q-168 0 -268 -104l-72 93q127 131 333 131q110 0 195.5 -40t130.5 -115q29 -49 37.5 -99.5t8.5 -121.5v-580h-140v103q-153 -126 -336 -126 q-141 0 -228 78.5t-87 186.5zM249 252q0 -66 53.5 -114t142.5 -48q81 0 144.5 35t101.5 75q29 31 44 66t17.5 56t2.5 54v62h-34h-73h-54h-35q-26 0 -70.5 -3.5t-74.5 -10.5q-82 -20 -123.5 -68t-41.5 -104z" /> -<glyph unicode="b" d="M122 0v1363h173q2 -10 -11 -23q-12 -10 -12 -23v-525q44 77 121.5 121.5t166.5 44.5q71 0 137 -29.5t120.5 -86.5t87 -151t32.5 -212q0 -122 -34 -220.5t-90 -158.5t-124.5 -91.5t-142.5 -31.5q-84 0 -157.5 39.5t-119.5 107.5l-52 -124h-95zM272 498q0 -136 6 -185 q7 -51 27.5 -89.5t45 -59.5t55.5 -34t54.5 -16.5t46.5 -3.5q32 0 64.5 7t72 29.5t69 58t50 98.5t20.5 145q0 94 -20.5 166t-50 112t-69.5 65t-71.5 32.5t-62.5 7.5q-70 0 -128 -36.5t-84 -99.5q-25 -61 -25 -197z" /> -<glyph unicode="c" d="M115 468q0 211 132 348.5t338 137.5q111 0 202.5 -45.5t147.5 -127.5l-104 -122q-9 7 -9.5 24.5t-3.5 23.5q-2 5 -11.5 17t-30.5 30.5t-47 34.5t-67 28t-86 12q-132 0 -220.5 -95t-88.5 -251q0 -163 91.5 -267.5t229.5 -104.5q71 0 136 29.5t112 83.5l85 -99 q-66 -72 -156 -110t-189 -38q-199 0 -330 139.5t-131 351.5z" /> -<glyph unicode="d" d="M92 476q0 103 24 187t63 138.5t91.5 91t106 52t109.5 15.5q95 0 167.5 -43.5t106.5 -117.5v564h157q1 -10 -11 -31q-8 -13 -8 -28l2 -1217q0 -54 8 -87h-146q-9 30 -9 69v81q-44 -79 -121.5 -125t-167.5 -46q-70 0 -135 30t-118.5 88.5t-86 156.5t-32.5 222zM235 500 q0 -88 17.5 -158.5t44.5 -113t63 -70.5t70 -38.5t68 -10.5q76 0 140.5 48t90.5 130q19 60 19 170q0 141 -16 200q-17 65 -60.5 108.5t-88.5 59t-91 15.5q-44 0 -86 -16.5t-82 -53t-64.5 -106t-24.5 -164.5z" /> -<glyph unicode="e" d="M100 457q0 124 35.5 222t96 157.5t136.5 90.5t162 31q61 0 117 -17t108.5 -54t91 -104t53.5 -157q10 -59 10 -117q0 -31 -3 -62h-664q3 -80 25.5 -143t54.5 -101t74.5 -62.5t82 -33.5t80.5 -9q148 0 242 105l82 -79q-59 -71 -146 -108t-189 -37q-96 0 -177.5 31.5 t-142 90.5t-95 150.5t-34.5 205.5zM247 560h515q2 19 2 37q0 92 -60 163q-72 85 -185 85q-41 0 -81.5 -14t-80.5 -45t-70 -89t-40 -137z" /> -<glyph unicode="f" d="M129 764v116h203v92q0 76 9.5 131t42.5 108q48 78 133.5 120.5t185.5 42.5q181 0 287 -128l-67 -136q-5 -1 -10.5 3.5t-6.5 13.5q-2 18 -6 24q-31 47 -85 77t-119 30q-60 0 -110 -26.5t-78 -76.5q-16 -29 -24 -68t-9 -62.5t-1 -71.5v-73h305v-116h-305v-764h-142v764 h-203z" /> -<glyph unicode="g" d="M79 -131q0 110 152 207q-75 39 -75 125q0 92 106 181q-65 42 -102 109.5t-37 143.5q0 136 104.5 233.5t245.5 97.5q131 0 222 -89q99 84 228 84q15 0 31 -1l18 -120q-24 4 -54 4q-90 0 -163 -45q47 -71 47 -159q0 -130 -99.5 -225t-237.5 -95q-62 0 -119 21 q-66 -59 -66 -105q0 -45 56 -61q48 -12 134 -12q19 0 78 1q43 2 70 2h16q29 -1 74 -8t79 -21q71 -29 108 -84t37 -119q0 -39 -14 -77.5t-46.5 -77t-80.5 -67t-123 -46.5t-166 -18q-117 0 -203.5 19.5t-132 53t-66.5 70.5t-21 78zM214 -96q0 -78 92 -114q79 -31 193 -31 q134 0 210 41q88 48 88 124q0 37 -26.5 68.5t-85.5 40.5q-31 5 -105 5t-93 1q-113 5 -157 11q-116 -64 -116 -146zM258 644q0 -85 60.5 -145.5t145.5 -60.5t145.5 60.5t60.5 145.5t-60.5 145t-145.5 60t-145.5 -60t-60.5 -145z" /> -<glyph unicode="h" d="M143 0v1361h170q1 -2 1 -6q0 -9 -13 -22q-8 -8 -8 -20v-542q55 82 137.5 134.5t173.5 52.5q81 0 147.5 -43.5t101.5 -121.5q34 -77 34 -226v-567h-145v564q0 46 -1.5 72t-13.5 66.5t-36 68.5q-50 59 -127 59q-66 0 -127.5 -41.5t-96.5 -88.5q-28 -37 -37.5 -73.5 t-9.5 -87.5v-539h-150z" /> -<glyph unicode="i" d="M205 0v118h239v699h-227v120h375v-819h219v-118h-606zM415 1238q0 44 31 74.5t75 30.5t75 -30.5t31 -74.5t-31 -74.5t-75 -30.5t-75 30.5t-31 74.5z" /> -<glyph unicode="j" d="M99 -226l95 127q7 -6 11.5 -20t6.5 -18q6 -9 17 -20.5t33.5 -30t57.5 -30.5t74 -12q61 0 111.5 31t76.5 87q24 52 24 149v778h-348v122h497v-872q0 -76 -7.5 -129t-34.5 -106q-46 -90 -135 -138.5t-193 -48.5q-87 0 -161.5 34.5t-124.5 96.5zM576 1238q0 44 31 74.5 t75 30.5t75 -30.5t31 -74.5t-31 -74.5t-75 -30.5t-75 30.5t-31 74.5z" /> -<glyph unicode="k" d="M136 -2v1363h168q2 -12 -12 -29q-7 -9 -7 -24v-803l468 435q40 -10 110 -10h53l-395 -371l460 -561h-14q-44 0 -88 -2t-67 -4l-22 -1l-382 477l-123 -115v-355h-149z" /> -<glyph unicode="l" d="M161 0v118h277v1124h-265v119h414v-1243h276v-118h-702z" /> -<glyph unicode="m" d="M78 0v935h136l-2 -92q34 51 85 83t107 32q62 0 108 -38.5t57 -97.5q27 62 84.5 99t125.5 37q97 0 146 -74q19 -29 28 -72t9.5 -65.5t0.5 -81.5v-667h-139v665q0 5 0.5 25.5t0 30.5t-1.5 26t-4 29t-8 24q-22 52 -74 52q-61 0 -109 -84q-39 -65 -39 -147v-619h-138v650 q0 90 -10 123q-11 36 -35 54t-51 18q-66 0 -113 -87q-30 -54 -30 -134v-624h-134z" /> -<glyph unicode="n" d="M140 0v935h150v-164q55 82 137.5 134.5t173.5 52.5q81 0 147.5 -43.5t101.5 -121.5q34 -77 34 -226v-567h-145v564q0 46 -1.5 72t-13.5 66.5t-36 68.5q-50 59 -127 59q-66 0 -128 -41.5t-97 -88.5q-27 -37 -36.5 -73t-9.5 -88v-539h-150z" /> -<glyph unicode="o" d="M83 461q0 106 36 199t96 157.5t141.5 101.5t169.5 37q81 0 155 -32t132.5 -92t93.5 -155.5t35 -212.5q0 -113 -34.5 -206.5t-93 -154.5t-134 -94.5t-159.5 -33.5q-88 0 -168 36.5t-139.5 99.5t-95 154.5t-35.5 195.5zM239 473q0 -167 83 -269t200 -102q111 0 191.5 94 t80.5 261q0 180 -83 277t-195 97q-114 0 -195.5 -97t-81.5 -261z" /> -<glyph unicode="p" d="M122 935h150v-143q48 76 127 120t169 44q71 0 137 -29t121 -85.5t88 -150.5t33 -213q0 -124 -34 -222.5t-90.5 -158.5t-125 -91t-142.5 -31q-85 0 -159.5 39.5t-121.5 109.5v-465h-150zM272 511q0 -84 1 -122t7 -81t19 -73q27 -62 85.5 -95.5t128.5 -33.5q31 0 63.5 7 t73 29t71.5 57.5t52 100t21 148.5q0 97 -22 170t-52.5 112t-72 63.5t-72.5 31t-61 6.5q-71 0 -130.5 -37t-86.5 -99q-25 -58 -25 -184z" /> -<glyph unicode="q" d="M87 477q0 115 34.5 209t92 152.5t129.5 90t150 31.5q42 0 80 -9t65 -23t49.5 -31.5t36.5 -34.5t23.5 -31.5t13.5 -22.5l4 -9v136h140v-1276h-147v491q-45 -79 -121.5 -125t-165.5 -46q-160 0 -272 138.5t-112 359.5zM235 498q0 -186 80 -287.5t189 -101.5q75 0 139.5 48 t90.5 130q19 60 19 170q0 159 -22 223q-28 80 -95 120t-138 40q-49 0 -94.5 -20t-84 -59t-61.5 -107t-23 -156z" /> -<glyph unicode="r" d="M203 -2v937h154l-5 -180q44 97 136.5 150t199.5 53q150 0 251 -103l-69 -141q-7 7 -13 14.5t-12 17.5t-10 15q-54 70 -155 70q-29 0 -58 -6.5t-65 -22t-72.5 -48.5t-66.5 -81q-30 -47 -45.5 -90.5t-18 -68t-2.5 -60.5v-456h-149z" /> -<glyph unicode="s" d="M117 127l84 147q10 -5 10 -19q0 -16 5 -22q22 -25 53.5 -50t99 -52.5t140.5 -27.5q102 0 171.5 41.5t69.5 106.5q0 75 -94 119q-40 18 -133 47.5t-118 38.5q-19 7 -29.5 11t-37.5 16t-45 24t-42 32.5t-38.5 42t-25 52t-10.5 63.5q0 108 100 184.5t259 76.5 q104 0 194.5 -38t154.5 -109l-86 -129q-11 3 -11 17t-4 19q-37 48 -104.5 88.5t-155.5 40.5q-81 0 -139 -36.5t-58 -91.5q0 -69 93 -114q36 -17 161 -53.5t183 -69.5q137 -77 137 -211q0 -54 -25.5 -105.5t-72.5 -93.5t-123 -67.5t-168 -25.5q-235 0 -395 148z" /> -<glyph unicode="t" d="M143 815l2 120h223l17 251l161 26q2 -13 1 -18.5t-6 -17t-6 -19.5q-4 -23 -10 -78t-10 -99l-4 -43h306v-122h-308q-18 -183 -18 -366q0 -132 6 -180q10 -78 54.5 -114.5t103.5 -36.5q95 0 209 85l46 -116q-143 -105 -299 -105q-143 0 -213 100q-25 36 -38 84t-15 81.5 t-2 88.5q0 245 19 479h-219z" /> -<glyph unicode="u" d="M127 414l2 521h148v-521q0 -136 33 -202q27 -55 75 -85t104 -30q65 0 124 39t92 100q37 68 37 185v514h149v-850q0 -54 10 -85h-155q-4 26 -4 53v19l2 71q-46 -77 -123.5 -121.5t-165.5 -44.5q-93 0 -172 50t-119 141q-17 38 -26 85t-10 77t-1 84z" /> -<glyph unicode="v" d="M81 937h177q2 -10 -2.5 -23t-4.5 -17q0 -5 4 -13l270 -684l150 348q97 225 127 389h133q-36 -167 -140 -410l-228 -534h-115z" /> -<glyph unicode="w" d="M32 937h150q4 -14 -3 -41q-6 -19 -2 -37l136 -675l161 664h90l198 -662q58 384 74 522q13 116 12 197v30h136q-60 -467 -155 -937h-138l-173 606l-165 -606h-132z" /> -<glyph unicode="x" d="M97 0l329 476l-323 461h160l246 -347l233 347h151l-304 -456l344 -481h-168l-258 364l-244 -364h-166z" /> -<glyph unicode="y" d="M46 -277l76 132q5 -4 8 -9.5t4.5 -13t3.5 -10.5q4 -8 15 -19.5t37.5 -24.5t57.5 -13q73 0 131 61q33 35 65 109l30 69l-380 931h183q1 -10 -4 -23.5t-5 -20.5q0 -4 4 -16l274 -689l179 502q52 145 70 249h154q-39 -128 -94 -271l-291 -772q-37 -99 -81 -148 q-90 -102 -234 -102q-121 0 -203 79z" /> -<glyph unicode="z" d="M103 -2v101l579 709h-537v129h728v-101l-571 -711h557q14 0 31.5 7.5t30.5 5.5v-140h-818z" /> -<glyph unicode="{" d="M108 467v114h40q93 0 138 47q53 55 53 174q0 24 -3 72t-3 74q0 182 101 274q14 13 31 24t31 19t34.5 14.5t33.5 10.5t36.5 7t34 4.5t36.5 2t34 0.5h36h33h62v-116h-71q-14 0 -49.5 0.5t-48.5 0t-36.5 -2.5t-40 -8t-32.5 -16q-82 -51 -82 -191q0 -24 3 -71.5t3 -72.5 q0 -99 -32 -164q-46 -95 -146 -138q33 -11 60.5 -32t54.5 -56.5t42.5 -95t15.5 -135.5q0 -33 -3.5 -89t-3.5 -82q0 -153 84 -211q12 -8 23.5 -14t28 -9.5t25 -6t31 -3.5t28.5 -1h34.5h33.5h76v-115h-74h-41h-41.5t-36.5 0.5t-38.5 2.5t-34 4.5t-35.5 7.5t-31 11t-33 15 t-29 20q-114 88 -114 298q0 42 4 108t4 96q0 135 -54 188q-42 41 -130 41h-42z" /> -<glyph unicode="|" d="M444 -309v1645h137v-1645h-137z" /> -<glyph unicode="}" d="M189 1188v116h62h33h36t34 -0.5t36.5 -2t34 -4.5t36.5 -7t33.5 -10.5t34.5 -14.5t31 -19t31 -24q101 -92 101 -274q0 -26 -2.5 -74t-2.5 -72q0 -119 53 -174q45 -47 137 -47h40v-114h-42q-88 0 -130 -41q-54 -53 -54 -188q0 -30 4 -96t4 -108q0 -210 -114 -298 q-14 -11 -29 -20t-33 -15t-31 -11t-35.5 -7.5t-34 -4.5t-38.5 -2.5t-36.5 -0.5h-41.5h-41h-74v115h76h33.5h34.5t28.5 1t31 3.5t25 6t28 9.5t23.5 14q84 58 84 211q0 26 -3.5 82t-3.5 89q0 76 15.5 135.5t42.5 95t54.5 56.5t60.5 32q-100 43 -146 138q-32 65 -32 164 q0 25 3 72.5t3 71.5q0 140 -82 191q-16 10 -32.5 16t-40 8t-36.5 2.5t-48.5 0t-49.5 -0.5h-71z" /> -<glyph unicode="~" d="M85 767q47 81 122 132.5t159 51.5q47 0 88.5 -16t71.5 -38.5t57.5 -45t59 -38.5t63.5 -16q46 0 85 32.5t89 100.5l94 -78q-49 -76 -123 -132.5t-161 -56.5q-46 0 -85.5 17t-68 40.5t-55 47.5t-58.5 41t-66 17q-93 0 -170 -126z" /> -<glyph unicode=" " /> -<glyph unicode="¡" d="M369 1247q0 50 35.5 85.5t85.5 35.5t86 -35.5t36 -85.5t-36 -85.5t-86 -35.5t-85.5 35.5t-35.5 85.5zM382 148q0 45 8.5 127.5t10.5 106.5l37 565h103l30 -565q4 -69 12 -144t8 -107q0 -52 -14 -88q-13 -32 -37.5 -49t-52.5 -17q-31 0 -58.5 22t-38.5 66q-8 32 -8 83z " /> -<glyph unicode="¢" d="M99 558q0 208 125.5 344t329.5 146l29 230l138 -14q1 -13 -7 -29q-9 -17 -11 -28l-22 -168q160 -32 243 -159l-90 -116q-9 6 -9 20q0 2 0.5 8t0.5 9t-2 7.5t-6 8.5q-58 69 -153 98l-95 -717h2q74 0 144.5 30t123.5 85l74 -99q-65 -71 -155 -109t-191 -38h-15l-30 -228 l-118 14l29 232q-152 42 -243.5 169.5t-91.5 303.5zM244 577q0 -131 56 -224.5t151 -131.5l89 708q-130 -8 -213 -102t-83 -250z" /> -<glyph unicode="£" d="M80 101q59 27 78 37t38.5 26t35.5 41q71 110 71 249q0 75 -31 203h-134v117h106q-14 67 -14 131q0 167 105.5 269t253.5 102q153 0 266 -104l-90 -113q-9 7 -15.5 22t-11.5 20q-8 9 -24 20.5t-52.5 25t-75.5 13.5q-89 0 -154 -66.5t-65 -186.5q0 -57 17 -133h203v-117 h-176q28 -118 28 -199q0 -153 -75 -274q30 5 55 5q70 0 176 -42.5t162 -42.5q85 0 151 57l55 -106q-106 -85 -213 -85q-54 0 -114.5 22.5t-124 45.5t-126.5 23q-106 0 -252 -77z" /> -<glyph unicode="¤" d="M139 408l115 115q-58 82 -58 184t59 185l-116 115l73 73l116 -115q82 60 186 60q100 0 183 -59l114 114l73 -73l-113 -113q61 -83 61 -187t-60 -186l112 -113l-73 -72l-112 112q-83 -59 -185 -59q-104 0 -187 61l-115 -114zM308 707q0 -85 60.5 -145.5t145.5 -60.5 t145 60.5t60 145.5t-60 145t-145 60t-145.5 -60t-60.5 -145z" /> -<glyph unicode="¥" d="M74 1278h159l297 -534l272 532h152l-357 -672v-42h276v-117h-276v-129h276v-115h-276v-201h-139v201h-287v115h287v129h-287v117h287v42z" /> -<glyph unicode="¦" d="M444 -309v710h137v-710h-137zM444 604v732h137v-732h-137z" /> -<glyph unicode="§" d="M133 64l107 125q7 -3 10 -9t4.5 -15t2.5 -12q4 -10 18 -27.5t41 -42t73 -42t99 -17.5q91 0 146.5 47.5t55.5 114.5q0 90 -94 145q-40 24 -145.5 55.5t-158.5 62.5q-130 77 -130 198q0 68 46 123.5t121 82.5q-70 43 -103.5 105t-33.5 127q0 119 96.5 205t238.5 86 q101 0 185.5 -48.5t132.5 -132.5l-115 -103q-7 5 -9.5 12t-3.5 16.5t-3 13.5q-16 44 -65 82.5t-122 38.5q-80 0 -133 -46.5t-53 -111.5q0 -94 109 -152q30 -16 103.5 -42.5t114.5 -45.5q100 -47 144 -108t44 -123q0 -63 -42 -117t-110 -81q65 -44 98.5 -107t33.5 -131 q0 -123 -98.5 -212t-250.5 -89q-103 0 -196.5 46t-157.5 129zM311 688q0 -98 110 -151q33 -16 103 -35.5t104 -33.5q34 17 54 50t20 72q0 103 -118 161q-30 15 -93 35t-87 30q-41 -14 -67 -49t-26 -79z" /> -<glyph unicode="¨" d="M230 1258q0 43 30 73t73 30t73.5 -30t30.5 -73t-30.5 -73.5t-73.5 -30.5t-73 30.5t-30 73.5zM596 1258q0 43 30 73t72 30t72.5 -30t30.5 -73t-30.5 -73.5t-72.5 -30.5t-72 30.5t-30 73.5z" /> -<glyph unicode="©" d="M28 561q0 218 146.5 371t350.5 153q100 0 191 -40.5t158 -110t106.5 -166.5t39.5 -205q0 -144 -67 -264.5t-181 -190t-248 -69.5t-248 69t-181 189.5t-67 263.5zM121 562q0 -182 119 -308.5t286 -126.5q166 0 285.5 126.5t119.5 309.5q0 182 -119 309t-285 127t-286 -127 t-120 -310zM235 565q0 130 88.5 216.5t213.5 86.5q95 0 165 -53t90 -136l-106 -41q-7 8 -7.5 24.5t-0.5 17.5q-2 8 -9.5 20t-22 28t-42.5 27t-63 11q-79 0 -135 -49t-56 -139q0 -93 56 -157t137 -64q48 0 89 25t64 67l91 -60q-43 -65 -110.5 -102.5t-142.5 -37.5 q-124 0 -211.5 93.5t-87.5 222.5z" /> -<glyph unicode="ª" d="M156 311v111h715v-111h-715zM209 740q0 55 30.5 106.5t90.5 83.5q17 9 37 16t34.5 11.5t40.5 8t36.5 5t42 2.5t37 1h41.5h37h30v25q0 71 -22 105q-39 61 -131 61q-125 0 -191 -90l-71 84q101 116 275 116q86 0 151 -34.5t96 -100.5q24 -50 24 -147v-447h-129v69 q-94 -88 -218 -88q-104 0 -172.5 62.5t-68.5 150.5zM341 746q0 -45 36 -77t93 -32q87 0 156 65q30 28 38 57t8 73v36h-34q-11 0 -41 0.5t-47.5 0.5t-42.5 -2t-44 -5q-62 -11 -92 -44.5t-30 -71.5z" /> -<glyph unicode="«" d="M138 470v48l311 302l79 -85l-247 -242l262 -286l-82 -82zM509 470v48l311 302l80 -85l-248 -242l262 -286l-82 -82z" /> -<glyph unicode="¬" d="M187 581v130h661v-389h-130v259h-531z" /> -<glyph unicode="­" d="M145 576v136h737v-136h-737z" /> -<glyph unicode="®" d="M28 561q0 218 146.5 371t350.5 153q100 0 191 -40.5t158 -110t106.5 -166.5t39.5 -205q0 -144 -67 -264.5t-181 -190t-248 -69.5t-248 69t-181 189.5t-67 263.5zM121 562q0 -182 119 -308.5t286 -126.5q166 0 285.5 126.5t119.5 309.5q0 182 -119 309t-285 127t-286 -127 t-120 -310zM318 272v598h193q92 0 141 -21q50 -21 78 -62.5t28 -90.5q0 -55 -33.5 -98.5t-86.5 -58.5l133 -256l-98 -14l-127 256h-134v-253h-94zM412 606h106q73 0 106 21q41 25 41 69q0 45 -46 72q-33 19 -106 19h-101v-181z" /> -<glyph unicode="¯" d="M253 1158v115h519v-115h-519z" /> -<glyph unicode="°" d="M247 1033q0 113 81 194t196 81t196 -81t81 -194t-81 -194t-196 -81t-196 80.5t-81 194.5zM373 1035q0 -68 45 -116t108 -48t108 48t45 117q0 68 -45 116t-108 48t-108 -48t-45 -117z" /> -<glyph unicode="±" d="M92 702v125h362v350h129v-350h350v-125h-350v-384h-129v384h-362zM94 35v129h843v-129h-843z" /> -<glyph unicode="²" d="M228 1135q45 80 126 125t175 45q120 0 196.5 -67t76.5 -162q0 -103 -95 -191q-30 -28 -86 -67.5t-114.5 -86t-108.5 -102.5h373q11 0 21 9q13 13 28 9v-129h-573v90q40 55 93 109.5t87.5 83.5t87 69.5t58.5 45.5q51 42 78.5 79t27.5 80q0 51 -42 88t-112 37 q-56 0 -104.5 -25t-77.5 -62q-6 -8 -11 -21.5t-9 -20.5z" /> -<glyph unicode="³" d="M230 647l95 106q9 -9 14 -28t15 -29q11 -11 27 -23t57 -28t85 -16q75 0 128 39t53 94q0 17 -6.5 34t-24 36t-56 31t-93.5 12q-21 0 -61 -4v103q26 -2 41 -2q91 0 130.5 31t39.5 74q0 48 -43 84.5t-110 36.5q-52 0 -103 -25t-87 -70l-75 76q52 61 123 94t149 33 q113 0 190.5 -65t77.5 -155q0 -56 -32 -99.5t-84 -60.5q65 -11 108 -61t43 -114q0 -99 -93 -168t-217 -69q-84 0 -159.5 35t-131.5 98z" /> -<glyph unicode="´" d="M417 1131l180 301l129 -87l-206 -276z" /> -<glyph unicode="µ" d="M49 -341q1 112 21 366t20 389v521h134v-555q0 -114 31 -178q26 -54 71.5 -84t95.5 -30q56 0 106 36t77 98q26 60 26 170v543h131v-698q0 -69 17 -100q22 -40 64 -40q31 0 59 24.5t41 49.5l13 25l55 -104q-32 -49 -79 -81t-101 -32q-64 0 -112 46t-56 113 q-35 -73 -103.5 -117t-147.5 -44q-75 0 -138 39.5t-95 107.5q0 -311 -2 -465h-128z" /> -<glyph unicode="¶" d="M131 1015q0 97 55 179.5t155 125.5q46 20 102.5 30t92.5 11.5t100 1.5h257v-1503h-119v1386h-155v-1386h-122v799q-155 10 -260.5 113.5t-105.5 242.5z" /> -<glyph unicode="·" d="M368 678q0 48 35.5 82.5t85.5 34.5t85.5 -34.5t35.5 -82.5t-35.5 -83t-85.5 -35t-85.5 34.5t-35.5 83.5z" /> -<glyph unicode="¸" d="M322 -286l51 85q90 -73 203 -73q53 0 73.5 15.5t20.5 34.5q0 22 -22 36q-20 13 -75 13h-60l23 175h88l-11 -97l34 -2q51 -2 79 -16q61 -30 61 -95q0 -60 -59 -106t-164 -46q-134 0 -242 76z" /> -<glyph unicode="¹" d="M253 1147l270 149h87v-667h191v-111h-522v111h204v504l-197 -50z" /> -<glyph unicode="º" d="M156 311v111h715v-111h-715zM196 885q0 171 94 280t226 109q57 0 109 -23t94.5 -66.5t68 -114.5t25.5 -160q0 -95 -27 -171t-72 -121.5t-99 -69t-112 -23.5q-127 0 -217 99t-90 261zM320 895q0 -120 55.5 -186t130.5 -66q74 0 129.5 64.5t55.5 187.5q0 125 -54.5 194.5 t-130.5 69.5t-131 -69.5t-55 -194.5z" /> -<glyph unicode="»" d="M138 207l261 286l-247 242l80 85l311 -302v-48l-324 -345zM509 207l262 286l-248 242l80 85l311 -302v-48l-324 -345z" /> -<glyph unicode="¼" d="M12 1269l217 118h69v-533h153v-89h-417v89h162v403l-157 -39zM156 -34l641 1395l97 -55l-643 -1393zM483 17v58l328 420h63v-402h103v-78h-103v-158h-93v160h-298zM590 93h192v242z" /> -<glyph unicode="½" d="M12 1269l217 118h69v-533h153v-89h-417v89h162v403l-157 -39zM156 -34l641 1395l97 -55l-643 -1393zM538 344q36 64 101 100t140 36q96 0 157.5 -53.5t61.5 -129.5q0 -82 -77 -152q-24 -22 -69 -54t-91.5 -69t-86.5 -82h298q10 0 18 7q11 11 22 7v-103h-458v72 q32 44 74.5 87.5t69.5 66.5t69.5 56t46.5 36q85 69 85 127q0 41 -33.5 70.5t-89.5 29.5q-45 0 -83.5 -20t-62.5 -49q-5 -6 -8.5 -17t-6.5 -17z" /> -<glyph unicode="¾" d="M23 873l76 85q7 -7 11 -22.5t12 -23.5q60 -53 136 -53q60 0 102.5 31t42.5 75q0 14 -5.5 27.5t-19 28.5t-44.5 24.5t-75 9.5q-25 0 -49 -3v82q11 -1 32 -1q73 0 105 25t32 59q0 38 -34.5 67.5t-88.5 29.5q-42 0 -82.5 -20t-69.5 -56l-60 60q41 49 98 75.5t119 26.5 q90 0 152.5 -52t62.5 -124q0 -45 -25.5 -80t-66.5 -48q52 -9 86 -48.5t34 -91.5q0 -79 -74 -134t-174 -55q-67 0 -128 28t-105 78zM166 -34l642 1395l97 -55l-643 -1393zM483 17v58l328 420h63v-402h103v-78h-103v-158h-93v160h-298zM590 93h192v242z" /> -<glyph unicode="¿" d="M138 335q0 46 11 87.5t25.5 69.5t40.5 58t42.5 45t45.5 38.5t38 31.5q57 51 73 96.5t16 111.5v85h134v-85q0 -82 -17 -138.5t-79 -124.5q-7 -8 -39.5 -41t-48 -52t-38 -52t-32.5 -68t-10 -73q0 -91 61.5 -154t153.5 -63q78 0 153 48t124 129l104 -97 q-66 -101 -171.5 -157.5t-222.5 -56.5q-167 0 -265.5 105.5t-98.5 256.5zM371 1245q0 48 36 83t86 35t85.5 -34.5t35.5 -83.5q0 -48 -35.5 -82.5t-85.5 -34.5t-86 34.5t-36 82.5z" /> -<glyph unicode="À" d="M30 -2l451 1301h16l493 -1299h-149l-141 373h-405l-124 -375h-141zM290 1478l81 143l313 -184l-48 -85zM323 484h345l-180 486z" /> -<glyph unicode="Á" d="M30 -2l451 1301h16l493 -1299h-149l-141 373h-405l-124 -375h-141zM318 1437l313 184l81 -143l-346 -126zM323 484h345l-180 486z" /> -<glyph unicode="Â" d="M30 -2l451 1301h16l493 -1299h-149l-141 373h-405l-124 -375h-141zM209 1417l268 204h44l253 -200l-67 -78l-212 145l-228 -139zM323 484h345l-180 486z" /> -<glyph unicode="Ã" d="M30 -2l451 1301h16l493 -1299h-149l-141 373h-405l-124 -375h-141zM177 1465q112 177 231 177q38 0 75 -18.5t52 -32t37 -36.5q61 -65 103 -65q15 0 27 4.5t24.5 17t20 21.5t23.5 32t24 33l76 -82q-60 -75 -105 -110t-98 -35q-40 0 -78.5 24t-64.5 53.5t-58.5 53.5 t-62.5 24q-37 0 -64 -28t-70 -98zM323 484h345l-180 486z" /> -<glyph unicode="Ä" d="M30 -2l451 1301h16l493 -1299h-149l-141 373h-405l-124 -375h-141zM207 1512q0 43 30 73t73 30t73.5 -30t30.5 -73t-30.5 -73t-73.5 -30t-73 30t-30 73zM323 484h345l-180 486zM573 1512q0 43 30 73t72 30t72.5 -30t30.5 -73t-30.5 -73t-72.5 -30t-72 30t-30 73z" /> -<glyph unicode="Å" d="M30 -2l440 1270q-71 8 -118.5 59.5t-47.5 120.5q0 74 54.5 127t132.5 53t133 -53t55 -127q0 -70 -49.5 -122t-121.5 -58l482 -1268h-149l-141 373h-405l-124 -375h-141zM323 484h345l-180 486zM408 1449q0 -39 25 -66.5t60 -27.5t60 27.5t25 66.5t-25 66.5t-60 27.5 t-60 -27t-25 -67z" /> -<glyph unicode="Æ" d="M9 0l401 1278h582v-127h-356l4 -419h299v-131h-297l3 -474h341v-127h-470v346h-267l-109 -346h-131zM279 465h237v686h-23z" /> -<glyph unicode="Ç" d="M83 631q0 147 32 264t81.5 188.5t115.5 119t129 66t127 18.5q127 0 233.5 -68.5t158.5 -184.5l-136 -67q-10 7 -10 20q0 3 0.5 8t0.5 7q0 10 -7 22q-40 68 -105 108t-139 40q-142 0 -241.5 -142.5t-99.5 -386.5q0 -249 102.5 -395t250.5 -146q75 0 145.5 42t114.5 114 l106 -69q-52 -86 -136.5 -140.5t-183.5 -66.5l-9 -79l34 -2q51 -2 79 -16q61 -30 61 -95q0 -60 -59 -106t-164 -46q-134 0 -242 76l51 85q90 -73 203 -73q53 0 73.5 15.5t20.5 34.5q0 22 -22 36q-20 13 -75 13h-60l20 155q-65 5 -125.5 29t-120.5 74t-104.5 122t-72 181.5 t-27.5 244.5z" /> -<glyph unicode="È" d="M120 0v1278h783v-127h-647v-419h534v-131h-534v-474h642v-127h-778zM290 1478l81 143l313 -184l-48 -85z" /> -<glyph unicode="É" d="M120 0v1278h783v-127h-647v-419h534v-131h-534v-474h642v-127h-778zM353 1437l313 184l82 -143l-347 -126z" /> -<glyph unicode="Ê" d="M120 0v1278h783v-127h-647v-419h534v-131h-534v-474h642v-127h-778zM226 1417l269 204h44l253 -200l-67 -78l-212 145l-228 -139z" /> -<glyph unicode="Ë" d="M120 0v1278h783v-127h-647v-419h534v-131h-534v-474h642v-127h-778zM221 1512q0 43 30 73t73 30t73.5 -30t30.5 -73t-30.5 -73t-73.5 -30t-73 30t-30 73zM587 1512q0 43 30 73t72 30t72.5 -30t30.5 -73t-30.5 -73t-72.5 -30t-72 30t-30 73z" /> -<glyph unicode="Ì" d="M166 -2v120h251v1038h-237v120h633v-120h-253v-1039h265v-119h-659zM290 1478l81 143l313 -184l-48 -85z" /> -<glyph unicode="Í" d="M166 -2v120h251v1038h-237v120h633v-120h-253v-1039h265v-119h-659zM353 1437l313 184l82 -143l-347 -126z" /> -<glyph unicode="Î" d="M166 -2v120h251v1038h-237v120h633v-120h-253v-1039h265v-119h-659zM207 1417l268 204h45l252 -200l-67 -78l-212 145l-228 -139z" /> -<glyph unicode="Ï" d="M166 -2v120h251v1038h-237v120h633v-120h-253v-1039h265v-119h-659zM214 1512q0 43 30 73t73 30t73.5 -30t30.5 -73t-30.5 -73t-73.5 -30t-73 30t-30 73zM580 1512q0 43 30 73t72 30t72.5 -30t30.5 -73t-30.5 -73t-72.5 -30t-72 30t-30 73z" /> -<glyph unicode="Ð" d="M62 617v118h99v541h286q94 0 160 -15t128 -61q110 -81 165 -231t55 -324q0 -210 -79 -375t-222 -232q-85 -40 -232 -40h-261v619h-99zM293 117h122q68 0 116 9.5t97 42.5q91 61 140 183t49 276q0 115 -26.5 222.5t-81.5 182.5q-31 42 -66 69t-74 37.5t-65.5 13.5t-65.5 3 h-145v-421h214v-118h-214v-500z" /> -<glyph unicode="Ñ" d="M103 0v1276h139l536 -945v947h152q2 -10 -6 -26q-8 -14 -8 -29v-1225h-114l-562 1006v-1004h-137zM186 1465q112 177 231 177q38 0 75 -18.5t52 -32t37 -36.5q30 -32 53 -48.5t49 -16.5q15 0 27 4.5t24.5 17t20 21.5t23.5 32t24 33l76 -82q-61 -75 -105 -110t-97 -35 q-40 0 -78.5 24t-64.5 53.5t-58.5 53.5t-62.5 24q-37 0 -64.5 -28.5t-70.5 -97.5z" /> -<glyph unicode="Ò" d="M60 640q0 144 30 259.5t76.5 187t109 119t122.5 66t121 18.5q110 0 208.5 -61t159.5 -179q78 -152 78 -415q0 -255 -76 -408q-60 -122 -159.5 -184t-209.5 -62q-62 0 -123 20t-123 68.5t-108.5 121.5t-76 189t-29.5 260zM201 659q0 -117 19.5 -211.5t51.5 -154.5 t74.5 -100t86 -56.5t88.5 -16.5q70 0 136 42.5t108 130.5q57 121 57 324q0 213 -50 337q-41 103 -112 152.5t-147 49.5q-43 0 -84.5 -14.5t-83 -51.5t-73 -91.5t-51.5 -142.5t-20 -197zM290 1478l81 143l313 -184l-48 -85z" /> -<glyph unicode="Ó" d="M60 640q0 144 30 259.5t76.5 187t109 119t122.5 66t121 18.5q110 0 208.5 -61t159.5 -179q78 -152 78 -415q0 -255 -76 -408q-60 -122 -159.5 -184t-209.5 -62q-62 0 -123 20t-123 68.5t-108.5 121.5t-76 189t-29.5 260zM201 659q0 -117 19.5 -211.5t51.5 -154.5 t74.5 -100t86 -56.5t88.5 -16.5q70 0 136 42.5t108 130.5q57 121 57 324q0 213 -50 337q-41 103 -112 152.5t-147 49.5q-43 0 -84.5 -14.5t-83 -51.5t-73 -91.5t-51.5 -142.5t-20 -197zM353 1437l313 184l82 -143l-347 -126z" /> -<glyph unicode="Ô" d="M60 640q0 144 30 259.5t76.5 187t109 119t122.5 66t121 18.5q110 0 208.5 -61t159.5 -179q78 -152 78 -415q0 -255 -76 -408q-60 -122 -159.5 -184t-209.5 -62q-62 0 -123 20t-123 68.5t-108.5 121.5t-76 189t-29.5 260zM201 659q0 -117 19.5 -211.5t51.5 -154.5 t74.5 -100t86 -56.5t88.5 -16.5q70 0 136 42.5t108 130.5q57 121 57 324q0 213 -50 337q-41 103 -112 152.5t-147 49.5q-43 0 -84.5 -14.5t-83 -51.5t-73 -91.5t-51.5 -142.5t-20 -197zM232 1417l268 204h44l253 -200l-67 -78l-212 145l-228 -139z" /> -<glyph unicode="Õ" d="M60 640q0 144 30 259.5t76.5 187t109 119t122.5 66t121 18.5q110 0 208.5 -61t159.5 -179q78 -152 78 -415q0 -255 -76 -408q-60 -122 -159.5 -184t-209.5 -62q-62 0 -123 20t-123 68.5t-108.5 121.5t-76 189t-29.5 260zM186 1465q112 177 231 177q38 0 75 -18.5t52 -32 t37 -36.5q30 -32 53 -48.5t49 -16.5q15 0 27 4.5t24.5 17t20 21.5t23.5 32t24 33l76 -82q-61 -75 -105 -110t-97 -35q-40 0 -78.5 24t-64.5 53.5t-58.5 53.5t-62.5 24q-37 0 -64.5 -28.5t-70.5 -97.5zM201 659q0 -117 19.5 -211.5t51.5 -154.5t74.5 -100t86 -56.5 t88.5 -16.5q70 0 136 42.5t108 130.5q57 121 57 324q0 213 -50 337q-41 103 -112 152.5t-147 49.5q-43 0 -84.5 -14.5t-83 -51.5t-73 -91.5t-51.5 -142.5t-20 -197z" /> -<glyph unicode="Ö" d="M60 640q0 144 30 259.5t76.5 187t109 119t122.5 66t121 18.5q110 0 208.5 -61t159.5 -179q78 -152 78 -415q0 -255 -76 -408q-60 -122 -159.5 -184t-209.5 -62q-62 0 -123 20t-123 68.5t-108.5 121.5t-76 189t-29.5 260zM201 659q0 -117 19.5 -211.5t51.5 -154.5 t74.5 -100t86 -56.5t88.5 -16.5q70 0 136 42.5t108 130.5q57 121 57 324q0 213 -50 337q-41 103 -112 152.5t-147 49.5q-43 0 -84.5 -14.5t-83 -51.5t-73 -91.5t-51.5 -142.5t-20 -197zM221 1512q0 43 30 73t73 30t73.5 -30t30.5 -73t-30.5 -73t-73.5 -30t-73 30t-30 73z M587 1512q0 43 30 73t72 30t72.5 -30t30.5 -73t-30.5 -73t-72.5 -30t-72 30t-30 73z" /> -<glyph unicode="×" d="M173 396l258 268l-258 273l97 93l255 -269l258 269l97 -90l-265 -274l260 -275l-96 -94l-258 273l-256 -264z" /> -<glyph unicode="Ø" d="M60 640q0 144 30 259.5t76.5 187t109 119t122.5 66t121 18.5q131 0 237 -81l94 177l110 -59l-113 -211q21 -28 40 -66q78 -152 78 -415q0 -255 -76 -408q-60 -122 -159.5 -184t-209.5 -62q-130 0 -238 81l-102 -191l-106 55l120 225q-134 175 -134 489zM201 659 q0 -223 70 -363l418 786q-78 74 -176 74q-43 0 -84.5 -14.5t-83 -51.5t-73 -91.5t-51.5 -142.5t-20 -197zM351 189q76 -69 170 -69q70 0 136 42.5t108 130.5q57 121 57 324q0 213 -50 337l-5 13z" /> -<glyph unicode="Ù" d="M103 440v836h160q2 -6 2 -10q0 -7 -13 -28q-8 -11 -8 -27v-773q0 -121 31 -188q34 -72 99.5 -111.5t143.5 -39.5q77 0 143 38.5t100 110.5q33 69 33 196v832h136v-829q0 -87 -9.5 -149t-41.5 -122q-53 -97 -151 -148t-213 -51q-117 0 -214 51t-149 147q-32 59 -40.5 119 t-8.5 146zM290 1478l81 143l313 -184l-48 -85z" /> -<glyph unicode="Ú" d="M103 440v836h160q2 -6 2 -10q0 -7 -13 -28q-8 -11 -8 -27v-773q0 -121 31 -188q34 -72 99.5 -111.5t143.5 -39.5q77 0 143 38.5t100 110.5q33 69 33 196v832h136v-829q0 -87 -9.5 -149t-41.5 -122q-53 -97 -151 -148t-213 -51q-117 0 -214 51t-149 147q-32 59 -40.5 119 t-8.5 146zM353 1437l313 184l82 -143l-347 -126z" /> -<glyph unicode="Û" d="M103 440v836h160q2 -6 2 -10q0 -7 -13 -28q-8 -11 -8 -27v-773q0 -121 31 -188q34 -72 99.5 -111.5t143.5 -39.5q77 0 143 38.5t100 110.5q33 69 33 196v832h136v-829q0 -87 -9.5 -149t-41.5 -122q-53 -97 -151 -148t-213 -51q-117 0 -214 51t-149 147q-32 59 -40.5 119 t-8.5 146zM232 1417l268 204h44l253 -200l-67 -78l-212 145l-228 -139z" /> -<glyph unicode="Ü" d="M103 440v836h160q2 -6 2 -10q0 -7 -13 -28q-8 -11 -8 -27v-773q0 -121 31 -188q34 -72 99.5 -111.5t143.5 -39.5q77 0 143 38.5t100 110.5q33 69 33 196v832h136v-829q0 -87 -9.5 -149t-41.5 -122q-53 -97 -151 -148t-213 -51q-117 0 -214 51t-149 147q-32 59 -40.5 119 t-8.5 146zM239 1512q0 43 30 73t73 30t73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73zM604 1512q0 43 30.5 73t72.5 30t72 -30t30 -73t-30 -73t-72 -30t-72.5 30t-30.5 73z" /> -<glyph unicode="Ý" d="M58 1278h163l313 -621l283 619h152l-363 -772v-504h-155v504zM353 1437l313 184l82 -143l-347 -126z" /> -<glyph unicode="Þ" d="M120 0v1276h161q1 -3 1 -8q0 -8 -11 -27q-6 -9 -6 -21v-184h244q76 0 131.5 -8t109.5 -36q88 -45 135.5 -130.5t47.5 -185.5t-47 -183.5t-133 -127.5q-53 -26 -106.5 -34t-126.5 -8h-255v-323h-145zM265 449h260q97 0 148 26q54 27 84 80t30 115q0 64 -31.5 119.5 t-89.5 84.5q-54 27 -157 27h-244v-452z" /> -<glyph unicode="ß" d="M113 0v866q0 60 1.5 96t11.5 89t30 97q46 105 136.5 163.5t197.5 58.5q152 0 261.5 -107t109.5 -254q0 -88 -43.5 -161.5t-119.5 -112.5q115 -36 184 -136.5t69 -228.5q0 -166 -109 -278.5t-267 -112.5q-119 0 -213 63l73 115q59 -47 138 -47q99 0 170.5 75t71.5 185 q0 79 -37.5 146t-97.5 104q-66 41 -180 41h-62v117h59q58 0 94 16q58 26 94 86.5t36 132.5q0 101 -65.5 170t-157.5 69q-52 0 -101.5 -26t-84.5 -77q-27 -40 -41 -93t-16 -89.5t-2 -96.5v-870h-140z" /> -<glyph unicode="à" d="M100 242q0 83 54.5 155.5t160.5 111.5q55 20 133.5 30t124 11t146.5 1h30v34q0 36 -1 54.5t-8 50.5t-21 56q-54 90 -193 90q-168 0 -268 -104l-72 93q127 131 333 131q110 0 195.5 -40t130.5 -115q29 -49 37.5 -99.5t8.5 -121.5v-580h-140v103q-153 -126 -336 -126 q-141 0 -228 78.5t-87 186.5zM249 252q0 -66 53.5 -114t142.5 -48q81 0 144.5 35t101.5 75q29 31 44 66t17.5 56t2.5 54v62h-34q-10 0 -73 0.5t-89 0t-70.5 -4t-74.5 -10.5q-82 -20 -123.5 -68t-41.5 -104zM369 1345l129 87l181 -301l-103 -62z" /> -<glyph unicode="á" d="M100 242q0 83 54.5 155.5t160.5 111.5q55 20 133.5 30t124 11t146.5 1h30v34q0 36 -1 54.5t-8 50.5t-21 56q-54 90 -193 90q-168 0 -268 -104l-72 93q127 131 333 131q110 0 195.5 -40t130.5 -115q29 -49 37.5 -99.5t8.5 -121.5v-580h-140v103q-153 -126 -336 -126 q-141 0 -228 78.5t-87 186.5zM249 252q0 -66 53.5 -114t142.5 -48q81 0 144.5 35t101.5 75q29 31 44 66t17.5 56t2.5 54v62h-34q-10 0 -73 0.5t-89 0t-70.5 -4t-74.5 -10.5q-82 -20 -123.5 -68t-41.5 -104zM417 1131l180 301l129 -87l-206 -276z" /> -<glyph unicode="â" d="M100 242q0 83 54.5 155.5t160.5 111.5q55 20 133.5 30t124 11t146.5 1h30v34q0 36 -1 54.5t-8 50.5t-21 56q-54 90 -193 90q-168 0 -268 -104l-72 93q127 131 333 131q110 0 195.5 -40t130.5 -115q29 -49 37.5 -99.5t8.5 -121.5v-580h-140v103q-153 -126 -336 -126 q-141 0 -228 78.5t-87 186.5zM249 252q0 -66 53.5 -114t142.5 -48q81 0 144.5 35t101.5 75q29 31 44 66t17.5 56t2.5 54v62h-34q-10 0 -73 0.5t-89 0t-70.5 -4t-74.5 -10.5q-82 -20 -123.5 -68t-41.5 -104zM288 1115l228 288h44l227 -290l-96 -70l-159 210l-166 -208z" /> -<glyph unicode="ã" d="M100 242q0 83 54.5 155.5t160.5 111.5q55 20 133.5 30t124 11t146.5 1h30v34q0 36 -1 54.5t-8 50.5t-21 56q-54 90 -193 90q-168 0 -268 -104l-72 93q127 131 333 131q110 0 195.5 -40t130.5 -115q29 -49 37.5 -99.5t8.5 -121.5v-580h-140v103q-153 -126 -336 -126 q-141 0 -228 78.5t-87 186.5zM205 1207q112 177 232 177q38 0 75.5 -19t51.5 -32t37 -37q60 -64 102 -64q15 0 27 4.5t24.5 17t20 21.5t23.5 32t24 33l76 -82q-61 -75 -105 -110t-97 -35q-33 0 -64 16t-55.5 38.5t-47 45.5t-48 39t-50.5 16q-37 0 -64 -28t-70 -98zM249 252 q0 -66 53.5 -114t142.5 -48q81 0 144.5 35t101.5 75q29 31 44 66t17.5 56t2.5 54v62h-34q-10 0 -73 0.5t-89 0t-70.5 -4t-74.5 -10.5q-82 -20 -123.5 -68t-41.5 -104z" /> -<glyph unicode="ä" d="M100 242q0 83 54.5 155.5t160.5 111.5q55 20 133.5 30t124 11t146.5 1h30v34q0 36 -1 54.5t-8 50.5t-21 56q-54 90 -193 90q-168 0 -268 -104l-72 93q127 131 333 131q110 0 195.5 -40t130.5 -115q29 -49 37.5 -99.5t8.5 -121.5v-580h-140v103q-153 -126 -336 -126 q-141 0 -228 78.5t-87 186.5zM249 252q0 -66 53.5 -114t142.5 -48q81 0 144.5 35t101.5 75q29 31 44 66t17.5 56t2.5 54v62h-34q-10 0 -73 0.5t-89 0t-70.5 -4t-74.5 -10.5q-82 -20 -123.5 -68t-41.5 -104zM256 1258q0 43 30.5 73t73.5 30t73 -30t30 -73t-30 -73.5 t-73 -30.5t-73.5 30.5t-30.5 73.5zM622 1258q0 43 30.5 73t72.5 30t72 -30t30 -73t-30 -73.5t-72 -30.5t-72.5 30.5t-30.5 73.5z" /> -<glyph unicode="å" d="M100 242q0 83 54.5 155.5t160.5 111.5q55 20 133.5 30t124 11t146.5 1h30v34q0 36 -1 54.5t-8 50.5t-21 56q-54 90 -193 90q-168 0 -268 -104l-72 93q127 131 333 131q110 0 195.5 -40t130.5 -115q29 -49 37.5 -99.5t8.5 -121.5v-580h-140v103q-153 -126 -336 -126 q-141 0 -228 78.5t-87 186.5zM249 252q0 -66 53.5 -114t142.5 -48q81 0 144.5 35t101.5 75q29 31 44 66t17.5 56t2.5 54v62h-34q-10 0 -73 0.5t-89 0t-70.5 -4t-74.5 -10.5q-82 -20 -123.5 -68t-41.5 -104zM337 1239q0 74 55 127t133 53t132.5 -53t54.5 -127t-54.5 -127 t-132.5 -53t-133 53t-55 127zM442 1240q0 -39 25 -66t60 -27t60 27.5t25 66.5t-25 66t-60 27t-60 -27t-25 -67z" /> -<glyph unicode="æ" d="M21 253q0 84 47.5 160t139.5 117q76 34 199 39l45 2v53q0 68 -13 105q-19 51 -59.5 81.5t-88.5 30.5q-43 0 -84.5 -23.5t-70.5 -64.5l-72 90q43 54 105 83.5t131 29.5q74 0 134.5 -34t93.5 -93q34 59 92.5 93t123.5 34q59 0 114.5 -29.5t91.5 -89.5q26 -41 38.5 -97 t14 -90.5t1.5 -99.5v-78l-426 -18v-95q0 -89 21 -135q26 -59 78 -93t113 -34q95 0 150 74l73 -84q-44 -52 -105.5 -81t-128.5 -29q-78 0 -147 37.5t-111 103.5q-33 -65 -95 -103t-136 -38q-111 0 -190 80.5t-79 195.5zM152 262q0 -66 44.5 -113t107.5 -47q44 0 81 25t54 71 q5 14 8 29t4 34t1.5 31.5t0 39t-0.5 39.5v78l-44 -2q-108 -4 -158 -30q-48 -24 -73 -66t-25 -89zM578 571l307 12v41q0 83 -19 127q-19 43 -52 67t-72 24q-74 0 -125 -77q-39 -59 -39 -159v-35z" /> -<glyph unicode="ç" d="M115 468q0 211 132 348.5t338 137.5q111 0 202.5 -45.5t147.5 -127.5l-104 -122q-9 7 -9.5 24.5t-3.5 23.5q-2 5 -11.5 17t-30.5 30.5t-47 34.5t-67 28t-86 12q-132 0 -220.5 -95t-88.5 -251q0 -163 91.5 -267.5t229.5 -104.5q71 0 136 29.5t112 83.5l85 -99 q-120 -129 -299 -146l-9 -76l34 -2q51 -2 79 -16q61 -30 61 -95q0 -60 -59 -106t-164 -46q-134 0 -242 76l51 85q90 -73 203 -73q53 0 73.5 15.5t20.5 34.5q0 22 -22 36q-20 13 -75 13h-60l20 154q-183 16 -300.5 152.5t-117.5 336.5z" /> -<glyph unicode="è" d="M100 457q0 124 35.5 222t96 157.5t136.5 90.5t162 31q61 0 117 -17t108.5 -54t91 -104t53.5 -157q15 -91 7 -179h-664q3 -80 25.5 -143t54.5 -101t74.5 -62.5t82 -33.5t80.5 -9q148 0 242 105l82 -79q-59 -71 -146 -108t-189 -37q-96 0 -177.5 31.5t-142 90.5t-95 150.5 t-34.5 205.5zM247 560h515q14 115 -58 200t-185 85q-41 0 -81.5 -14t-80.5 -45t-70 -89t-40 -137zM369 1345l129 87l181 -301l-103 -62z" /> -<glyph unicode="é" d="M100 457q0 124 35.5 222t96 157.5t136.5 90.5t162 31q61 0 117 -17t108.5 -54t91 -104t53.5 -157q15 -91 7 -179h-664q3 -80 25.5 -143t54.5 -101t74.5 -62.5t82 -33.5t80.5 -9q148 0 242 105l82 -79q-59 -71 -146 -108t-189 -37q-96 0 -177.5 31.5t-142 90.5t-95 150.5 t-34.5 205.5zM247 560h515q14 115 -58 200t-185 85q-41 0 -81.5 -14t-80.5 -45t-70 -89t-40 -137zM417 1131l180 301l129 -87l-206 -276z" /> -<glyph unicode="ê" d="M100 457q0 124 35.5 222t96 157.5t136.5 90.5t162 31q61 0 117 -17t108.5 -54t91 -104t53.5 -157q15 -91 7 -179h-664q3 -80 25.5 -143t54.5 -101t74.5 -62.5t82 -33.5t80.5 -9q148 0 242 105l82 -79q-59 -71 -146 -108t-189 -37q-96 0 -177.5 31.5t-142 90.5t-95 150.5 t-34.5 205.5zM247 560h515q14 115 -58 200t-185 85q-41 0 -81.5 -14t-80.5 -45t-70 -89t-40 -137zM274 1115l228 288h44l226 -290l-95 -70l-159 210l-166 -208z" /> -<glyph unicode="ë" d="M100 457q0 124 35.5 222t96 157.5t136.5 90.5t162 31q61 0 117 -17t108.5 -54t91 -104t53.5 -157q15 -91 7 -179h-664q3 -80 25.5 -143t54.5 -101t74.5 -62.5t82 -33.5t80.5 -9q148 0 242 105l82 -79q-59 -71 -146 -108t-189 -37q-96 0 -177.5 31.5t-142 90.5t-95 150.5 t-34.5 205.5zM233 1258q0 43 30.5 73t73.5 30t73 -30t30 -73t-30 -73.5t-73 -30.5t-73.5 30.5t-30.5 73.5zM247 560h515q14 115 -58 200t-185 85q-41 0 -81.5 -14t-80.5 -45t-70 -89t-40 -137zM599 1258q0 43 30.5 73t72.5 30t72 -30t30 -73t-30 -73.5t-72 -30.5t-72.5 30.5 t-30.5 73.5z" /> -<glyph unicode="ì" d="M205 0v118h239v699h-227v120h375v-819h219v-118h-606zM263 1345l129 87l181 -301l-103 -62z" /> -<glyph unicode="í" d="M205 0v118h239v699h-227v120h375v-819h219v-118h-606zM399 1131l181 301l129 -87l-207 -276z" /> -<glyph unicode="î" d="M205 0v118h239v699h-227v120h375v-819h219v-118h-606zM232 1115l228 288h44l226 -290l-95 -70l-160 210l-166 -208z" /> -<glyph unicode="ï" d="M205 0v118h239v699h-227v120h375v-819h219v-118h-606zM209 1258q0 43 30 73t73 30t73 -30t30 -73t-30 -73.5t-73 -30.5t-73 30.5t-30 73.5zM574 1258q0 43 30.5 73t72.5 30t72 -30t30 -73t-30 -73.5t-72 -30.5t-72.5 30.5t-30.5 73.5z" /> -<glyph unicode="ð" d="M83 456q0 208 127 354.5t299 146.5q147 0 246 -107q-61 157 -176 281l-261 -74l-37 97l213 58q-95 80 -209 131l166 34q94 -53 178 -128l221 61l35 -92l-175 -50q233 -265 233 -650q0 -218 -80 -351q-55 -92 -145 -142t-194 -50q-181 0 -311 137t-130 344zM239 476 q0 -171 83.5 -272t200.5 -101q47 0 91.5 19t86.5 59.5t67.5 116.5t25.5 177t-27 174.5t-70 111t-87 54t-88 16.5q-53 0 -102.5 -22t-90.5 -64.5t-65.5 -112t-24.5 -156.5z" /> -<glyph unicode="ñ" d="M140 0v935h150v-164q55 82 137.5 134.5t173.5 52.5q81 0 147.5 -43.5t101.5 -121.5q34 -77 34 -226v-567h-145v564q0 46 -1.5 72t-13.5 66.5t-36 68.5q-50 59 -127 59q-66 0 -128 -41.5t-97 -88.5q-27 -37 -36.5 -73t-9.5 -88v-539h-150zM175 1207q112 177 232 177 q38 0 75.5 -19t51.5 -32t37 -37q60 -64 102 -64q15 0 27 4.5t24.5 17t20 21.5t23.5 32t24 33l76 -82q-61 -75 -105 -110t-97 -35q-33 0 -64 16t-55.5 38.5t-47 45.5t-48 39t-50.5 16q-37 0 -64 -28t-70 -98z" /> -<glyph unicode="ò" d="M83 461q0 106 36 199t96 157.5t141.5 101.5t169.5 37q81 0 155 -32t132.5 -92t93.5 -155.5t35 -212.5q0 -113 -34.5 -206.5t-93 -154.5t-134 -94.5t-159.5 -33.5q-88 0 -168 36.5t-139.5 99.5t-95 154.5t-35.5 195.5zM239 473q0 -167 83 -269t200 -102q111 0 191.5 94 t80.5 261q0 180 -83 277t-195 97q-114 0 -195.5 -97t-81.5 -261zM369 1345l129 87l181 -301l-103 -62z" /> -<glyph unicode="ó" d="M83 461q0 106 36 199t96 157.5t141.5 101.5t169.5 37q81 0 155 -32t132.5 -92t93.5 -155.5t35 -212.5q0 -113 -34.5 -206.5t-93 -154.5t-134 -94.5t-159.5 -33.5q-88 0 -168 36.5t-139.5 99.5t-95 154.5t-35.5 195.5zM239 473q0 -167 83 -269t200 -102q111 0 191.5 94 t80.5 261q0 180 -83 277t-195 97q-114 0 -195.5 -97t-81.5 -261zM417 1131l180 301l129 -87l-206 -276z" /> -<glyph unicode="ô" d="M83 461q0 106 36 199t96 157.5t141.5 101.5t169.5 37q81 0 155 -32t132.5 -92t93.5 -155.5t35 -212.5q0 -113 -34.5 -206.5t-93 -154.5t-134 -94.5t-159.5 -33.5q-88 0 -168 36.5t-139.5 99.5t-95 154.5t-35.5 195.5zM239 473q0 -167 83 -269t200 -102q111 0 191.5 94 t80.5 261q0 180 -83 277t-195 97q-114 0 -195.5 -97t-81.5 -261zM274 1115l228 288h44l226 -290l-95 -70l-159 210l-166 -208z" /> -<glyph unicode="õ" d="M83 461q0 106 36 199t96 157.5t141.5 101.5t169.5 37q81 0 155 -32t132.5 -92t93.5 -155.5t35 -212.5q0 -113 -34.5 -206.5t-93 -154.5t-134 -94.5t-159.5 -33.5q-88 0 -168 36.5t-139.5 99.5t-95 154.5t-35.5 195.5zM186 1207q112 177 231 177q38 0 75.5 -19t51.5 -32 t37 -37q60 -64 102 -64q15 0 27 4.5t24.5 17t20 21.5t23.5 32t24 33l76 -82q-61 -75 -105 -110t-97 -35q-40 0 -78.5 24t-64.5 53.5t-58.5 53.5t-62.5 24q-37 0 -64.5 -28.5t-70.5 -97.5zM239 473q0 -167 83 -269t200 -102q111 0 191.5 94t80.5 261q0 180 -83 277t-195 97 q-114 0 -195.5 -97t-81.5 -261z" /> -<glyph unicode="ö" d="M83 461q0 106 36 199t96 157.5t141.5 101.5t169.5 37q81 0 155 -32t132.5 -92t93.5 -155.5t35 -212.5q0 -113 -34.5 -206.5t-93 -154.5t-134 -94.5t-159.5 -33.5q-88 0 -168 36.5t-139.5 99.5t-95 154.5t-35.5 195.5zM230 1258q0 43 30 73t73 30t73.5 -30t30.5 -73 t-30.5 -73.5t-73.5 -30.5t-73 30.5t-30 73.5zM239 473q0 -167 83 -269t200 -102q111 0 191.5 94t80.5 261q0 180 -83 277t-195 97q-114 0 -195.5 -97t-81.5 -261zM596 1258q0 43 30 73t72 30t72.5 -30t30.5 -73t-30.5 -73.5t-72.5 -30.5t-72 30.5t-30 73.5z" /> -<glyph unicode="÷" d="M145 576v136h737v-136h-737zM431 325q0 38 27 65t65 27t65 -27t27 -65t-27 -65t-65 -27t-65 27t-27 65zM431 956q0 38 27 65t65 27t65 -27t27 -65t-27 -65t-65 -27t-65 27t-27 65z" /> -<glyph unicode="ø" d="M83 461q0 106 36 199t96 157.5t141.5 101.5t169.5 37q81 0 160 -34l76 140l109 -58l-81 -149q152 -137 152 -391q0 -113 -34.5 -206.5t-93 -154.5t-134 -94.5t-159.5 -33.5q-100 0 -189 46l-83 -152l-106 55l91 167q-71 66 -111 161.5t-40 208.5zM239 473q0 -148 68 -248 l315 581q-50 25 -106 25q-114 0 -195.5 -97t-81.5 -261zM397 138q61 -36 125 -36q111 0 191.5 94t80.5 261t-76 268z" /> -<glyph unicode="ù" d="M127 414l2 521h148v-521q0 -136 33 -202q27 -55 75 -85t104 -30q65 0 124 39t92 100q37 68 37 185v514h149v-850q0 -54 10 -85h-155q-6 34 -4 72l2 71q-46 -77 -123.5 -121.5t-165.5 -44.5q-93 0 -172 50t-119 141q-17 38 -26 85t-10 77t-1 84zM369 1345l129 87l181 -301 l-103 -62z" /> -<glyph unicode="ú" d="M127 414l2 521h148v-521q0 -136 33 -202q27 -55 75 -85t104 -30q65 0 124 39t92 100q37 68 37 185v514h149v-850q0 -54 10 -85h-155q-6 34 -4 72l2 71q-46 -77 -123.5 -121.5t-165.5 -44.5q-93 0 -172 50t-119 141q-17 38 -26 85t-10 77t-1 84zM417 1131l180 301l129 -87 l-206 -276z" /> -<glyph unicode="û" d="M127 414l2 521h148v-521q0 -136 33 -202q27 -55 75 -85t104 -30q65 0 124 39t92 100q37 68 37 185v514h149v-850q0 -54 10 -85h-155q-6 34 -4 72l2 71q-46 -77 -123.5 -121.5t-165.5 -44.5q-93 0 -172 50t-119 141q-17 38 -26 85t-10 77t-1 84zM274 1115l228 288h44 l226 -290l-95 -70l-159 210l-166 -208z" /> -<glyph unicode="ü" d="M127 414l2 521h148v-521q0 -136 33 -202q27 -55 75 -85t104 -30q65 0 124 39t92 100q37 68 37 185v514h149v-850q0 -54 10 -85h-155q-6 34 -4 72l2 71q-46 -77 -123.5 -121.5t-165.5 -44.5q-93 0 -172 50t-119 141q-17 38 -26 85t-10 77t-1 84zM230 1258q0 43 30 73 t73 30t73.5 -30t30.5 -73t-30.5 -73.5t-73.5 -30.5t-73 30.5t-30 73.5zM596 1258q0 43 30 73t72 30t72.5 -30t30.5 -73t-30.5 -73.5t-72.5 -30.5t-72 30.5t-30 73.5z" /> -<glyph unicode="ý" d="M46 -277l76 132q5 -4 8 -9.5t4.5 -13t3.5 -10.5q4 -8 15 -19.5t37.5 -24.5t57.5 -13q73 0 131 61q33 35 65 109l30 69l-380 931h183q1 -10 -4 -23.5t-5 -20.5q0 -4 4 -16l274 -689l179 502q52 145 70 249h154q-39 -128 -94 -271l-291 -772q-37 -99 -81 -148 q-90 -102 -234 -102q-121 0 -203 79zM417 1131l180 301l129 -87l-206 -276z" /> -<glyph unicode="þ" d="M124 -341v1702h162q0 -14 -7 -32t-7 -35v-502q48 76 127 120t169 44q71 0 137 -29t121 -85.5t88 -150.5t33 -213q0 -124 -34 -222.5t-90.5 -158.5t-125 -91t-142.5 -31q-85 0 -159.5 39.5t-121.5 109.5v-465h-150zM272 511q0 -84 1 -122t7 -81t19 -73q27 -62 85.5 -95.5 t128.5 -33.5q31 0 63.5 7t73 29t71.5 57.5t52 100t21 148.5q0 97 -22 170t-52.5 112t-72 63.5t-72.5 31t-61 6.5q-71 0 -130.5 -37t-86.5 -99q-25 -58 -25 -184z" /> -<glyph unicode="ÿ" d="M46 -277l76 132q5 -4 8 -9.5t4.5 -13t3.5 -10.5q4 -8 15 -19.5t37.5 -24.5t57.5 -13q73 0 131 61q33 35 65 109l30 69l-380 931h183q1 -10 -4 -23.5t-5 -20.5q0 -4 4 -16l274 -689l179 502q52 145 70 249h154q-39 -128 -94 -271l-291 -772q-37 -99 -81 -148 q-90 -102 -234 -102q-121 0 -203 79zM230 1258q0 43 30 73t73 30t73.5 -30t30.5 -73t-30.5 -73.5t-73.5 -30.5t-73 30.5t-30 73.5zM596 1258q0 43 30 73t72 30t72.5 -30t30.5 -73t-30.5 -73.5t-72.5 -30.5t-72 30.5t-30 73.5z" /> -<glyph unicode="Œ" d="M19 639q0 288 69 449q47 109 118 157.5t144 48.5q100 0 168 -74v58h474v-127h-347v-419h294v-131h-294v-474h341v-127h-470v64q-64 -78 -167 -78q-86 0 -164.5 63.5t-119.5 196.5q-46 144 -46 393zM150 664q0 -272 57 -412q31 -76 74.5 -108.5t85.5 -32.5q53 0 93.5 42.5 t55.5 111.5v728q-10 30 -23 58t-33.5 58t-49 48t-61.5 18q-47 0 -89.5 -41t-69.5 -121q-40 -117 -40 -349z" /> -<glyph unicode="œ" d="M12 484q0 193 58 301q44 83 114.5 126.5t146.5 43.5q57 0 107 -24.5t83 -69.5q39 45 93.5 69.5t114.5 24.5q78 0 146.5 -44t100.5 -133q7 -19 12 -39t8 -43.5t5 -41t2.5 -46.5t0.5 -43v-47v-43v-23h-467q1 -175 30 -240q26 -59 76.5 -88t111.5 -29q116 0 185 80l73 -88 q-108 -111 -262 -111q-132 0 -233 84q-90 -83 -203 -83q-44 0 -86.5 15t-86.5 54t-73 98q-57 119 -57 340zM136 504q0 -159 30 -252q25 -77 70 -113.5t97 -36.5q41 0 72 22t31 58q0 7 -6.5 46t-13 108t-6.5 147q0 67 4.5 124.5t9 91.5t4.5 43q0 39 -29 64t-70 25 q-45 0 -87.5 -31t-69.5 -88q-36 -76 -36 -208zM539 569h343v18q0 43 -1 64t-8 55.5t-22 59.5q-22 38 -59.5 57.5t-79.5 19.5q-46 0 -87.5 -26t-63.5 -85q-24 -58 -22 -163z" /> -<glyph unicode="Ÿ" d="M58 1278h163l313 -621l283 619h152l-363 -772v-504h-155v504zM221 1512q0 43 30 73t73 30t73.5 -30t30.5 -73t-30.5 -73t-73.5 -30t-73 30t-30 73zM587 1512q0 43 30 73t72 30t72.5 -30t30.5 -73t-30.5 -73t-72.5 -30t-72 30t-30 73z" /> -<glyph unicode="ˆ" d="M274 1115l228 288h44l226 -290l-95 -70l-159 210l-166 -208z" /> -<glyph unicode="˜" d="M186 1207q112 177 231 177q38 0 75.5 -19t51.5 -32t37 -37q60 -64 102 -64q15 0 27 4.5t24.5 17t20 21.5t23.5 32t24 33l76 -82q-61 -75 -105 -110t-97 -35q-40 0 -78.5 24t-64.5 53.5t-58.5 53.5t-62.5 24q-37 0 -64.5 -28.5t-70.5 -97.5z" /> -<glyph unicode=" " horiz-adv-x="821" /> -<glyph unicode=" " horiz-adv-x="1642" /> -<glyph unicode=" " horiz-adv-x="821" /> -<glyph unicode=" " horiz-adv-x="1642" /> -<glyph unicode=" " horiz-adv-x="547" /> -<glyph unicode=" " horiz-adv-x="410" /> -<glyph unicode=" " horiz-adv-x="273" /> -<glyph unicode=" " horiz-adv-x="273" /> -<glyph unicode=" " horiz-adv-x="205" /> -<glyph unicode=" " horiz-adv-x="328" /> -<glyph unicode=" " horiz-adv-x="91" /> -<glyph unicode="‐" d="M145 576v136h737v-136h-737z" /> -<glyph unicode="‑" d="M145 576v136h737v-136h-737z" /> -<glyph unicode="‒" d="M145 576v136h737v-136h-737z" /> -<glyph unicode="–" horiz-adv-x="1311" d="M145 576v136h1024v-136h-1024z" /> -<glyph unicode="—" horiz-adv-x="2335" d="M145 576v136h2048v-136h-2048z" /> -<glyph unicode="‘" d="M373 921q0 164 218 385l70 -62q-59 -54 -103 -127q-30 -48 -30 -86q0 -19 9.5 -35t16.5 -21.5t22 -15.5t24 -17t21 -28t12 -46q0 -47 -34.5 -82t-83.5 -35q-57 0 -99.5 47t-42.5 123z" /> -<glyph unicode="’" d="M338 813q59 54 103 127q30 48 30 86q0 19 -9.5 35.5t-17 22.5t-21.5 15q-16 11 -24 17t-20.5 27t-12.5 46q0 47 34.5 82t83.5 35q57 0 99.5 -47t42.5 -123q0 -164 -218 -385z" /> -<glyph unicode="‚" d="M338 -283q57 53 103 128q30 48 30 85q0 19 -9.5 35.5t-17 22.5t-21.5 15q-16 11 -24 17t-20.5 27t-12.5 46q0 47 34.5 82t83.5 35q57 0 99.5 -47t42.5 -123q0 -164 -218 -385z" /> -<glyph unicode="“" d="M161 921q0 165 217 385l71 -62q-59 -54 -103 -127q-30 -48 -30 -86q0 -19 9.5 -35t16.5 -21.5t22 -15.5t24 -17t21 -28t12 -46q0 -47 -34.5 -82t-83.5 -35q-57 0 -99.5 47t-42.5 123zM585 921q0 164 218 385l70 -62q-59 -54 -103 -127q-30 -48 -30 -86q0 -19 9.5 -35 t16.5 -21.5t22 -15.5t24 -17t21 -28t12 -46q0 -47 -34.5 -82t-83.5 -35q-57 0 -99.5 47t-42.5 123z" /> -<glyph unicode="”" d="M125 813q59 54 103 127q31 50 31 86q0 19 -9.5 35.5t-17 22.5t-21.5 15q-16 11 -24 17t-20.5 27t-12.5 46q0 47 34.5 82t83.5 35q57 0 99.5 -47t42.5 -123q0 -164 -218 -385zM550 813q59 54 103 127q30 48 30 86q0 19 -9.5 35.5t-17 22.5t-21.5 15q-16 11 -24 17 t-20.5 27t-12.5 46q0 47 34.5 82t83.5 35q57 0 99.5 -47t42.5 -123q0 -164 -218 -385z" /> -<glyph unicode="„" d="M125 -283q57 53 103 128q31 50 31 85q0 19 -9.5 35.5t-17 22.5t-21.5 15q-16 11 -24 17t-20.5 27t-12.5 46q0 47 34.5 82t83.5 35q57 0 99.5 -47t42.5 -123q0 -164 -218 -385zM550 -283q57 53 103 128q30 48 30 85q0 19 -9.5 35.5t-17 22.5t-21.5 15q-16 11 -24 17 t-20.5 27t-12.5 46q0 47 34.5 82t83.5 35q57 0 99.5 -47t42.5 -123q0 -164 -218 -385z" /> -<glyph unicode="•" d="M350 607q0 71 50.5 121t123.5 50t123.5 -50t50.5 -121t-50.5 -121t-123.5 -50q-72 0 -123 50t-51 121z" /> -<glyph unicode="…" d="M14 95q0 48 35.5 82.5t85.5 34.5t85.5 -34.5t35.5 -82.5t-35.5 -83t-85.5 -35t-85.5 34.5t-35.5 83.5zM368 95q0 48 35.5 82.5t85.5 34.5t85.5 -34.5t35.5 -82.5t-35.5 -83t-85.5 -35t-85.5 34.5t-35.5 83.5zM721 95q0 48 35.5 82.5t85.5 34.5t85.5 -34.5t35.5 -82.5 t-35.5 -83t-85.5 -35t-85.5 34.5t-35.5 83.5z" /> -<glyph unicode=" " horiz-adv-x="328" /> -<glyph unicode="‹" d="M297 470v48l311 302l80 -85l-248 -242l262 -286l-82 -82z" /> -<glyph unicode="›" d="M297 207l262 286l-248 242l80 85l311 -302v-48l-324 -345z" /> -<glyph unicode=" " horiz-adv-x="410" /> -<glyph unicode="€" d="M67 447l27 119h82v32q0 78 5 132h-114l27 118h104q24 119 73 202q38 66 88.5 114t105 73.5t106 37t103.5 11.5q168 0 277 -111l-51 -139q-8 7 -10.5 21.5t-7.5 20.5q-91 91 -216 91q-105 0 -197 -68t-134 -213l-10 -40h506l-44 -118h-479q-5 -58 -5 -121q0 -29 1 -43h421 l-46 -119h-364q21 -125 84 -209q51 -70 123 -104t148 -34q126 0 219 84l58 -103q-119 -104 -286 -104q-54 0 -108 12t-115 45t-109.5 83.5t-87.5 135.5t-55 194h-119z" /> -<glyph unicode="™" d="M36 1218v82h453v-82h-184v-563h-93v563h-176zM548 655v645h72l147 -297l77 148l77 149h67v-645h-86v440l-62 -112l-61 -109l-32 2l-113 219v-440h-86z" /> -<glyph unicode="◼" horiz-adv-x="931" d="M0 0v932h932v-932h-932z" /> -</font> -</defs></svg>
@@ -1,167 +0,0 @@
------ -permalink: glyph -filters_pre: -- erb -title: "Glyph" -subtitle: "A Rapid Document Authoring Framework" -type: project -github: glyph -links: -- "Repository": http://www.github.com/h3rald/glyph/ -- "Download": http://www.rubygems.org/gems/glyph -- "Documentation": /glyph/book/ -- "User Group": http://groups.google.com/group/glyph-framework -status: Active -version: 0.5.3.1 ------ - -<%= render 'project_data', :tag => 'glyph' %> - -<section class="section"> -<p>Glyph is a <em>Rapid Document Authoring Framework</em>.</p> -<p>With Glyph, creating and maintaining any kind of document becomes as easy as… <em>programming</em>. Glyph enables you to minimize text duplication, focus on content rather than presentation, manage references seamlessly and automate tedious tasks through a simple but effective macro language, specifically geared towards customization and extensibility.</p> - - <section class="section"> -<header><h1 id="h_1" class="toc">Main Features</h1></header> -<section class="section"> -<header><h1 id="h_2" class="toc">Command Line Interface</h1></header> -<p>Glyph is 100% command line. Its interface resambles <a href="http://git-scm.com/">Git’s</a> for its simplicity and power (thanks to the <a href="http://github.com/davetron5000/gli">gli</a> gem). Here are some example commands:</p> -<ul> - <li><code>glyph init</code> — to initialize a new Glyph project in the current (empty) directory.</li> - <li><code>glyph add introduction.textile</code> — to create a new file called <em>introduction.textile</em>.</li> - <li><code>glyph compile</code> — to compile the current document into a single <span class="caps">HTML</span> file.</li> - <li><code>glyph compile --auto</code> — to keep recompiling the current document every time a file is changed.</li> - <li><code>glyph compile -f pdf</code> — to compile the current document into <span class="caps">HTML</span> and then transform it into <span class="caps">PDF</span>.</li> - <li><code>glyph compile readme.glyph</code> — to compile a <em>readme.glyph</em> located in the current directory into a single <span class="caps">HTML</span> file.</li> - <li><code>glyph outline -l 2</code> — Display the document outline, up to second-level headers.</li> - <li><code>glyph stats</code> — Display project statistics.</li> -</ul> - -</section> - - <section class="section"> -<header><h1 id="h_3" class="toc">Minimalist Syntax</h1></header> -<p>Glyph syntax rules can be explained using Glyph itself:</p> - - <div class="CodeRay"> - <div class="code"><pre><span class="line-numbers"> <a href="#n1" name="n1">1</a></span>section[ -<span class="line-numbers"> <a href="#n2" name="n2">2</a></span> @title[Something about Glyph] -<span class="line-numbers"> <a href="#n3" name="n3">3</a></span> txt[ -<span class="line-numbers"> <a href="#n4" name="n4">4</a></span>You can use Glyph macros in conjunction -<span class="line-numbers"> <a href="#n5" name="n5">5</a></span>with _Textile_ or _Markdown_ to -<span class="line-numbers"> <a href="#n6" name="n6">6</a></span>produce HTML files effortlessly. -<span class="line-numbers"> <a href="#n7" name="n7">7</a></span> ] -<span class="line-numbers"> <a href="#n8" name="n8">8</a></span> p[Alternatively, you can just use em[Glyph itself] to generate HTML tags.] -<span class="line-numbers"> <a href="#n9" name="n9">9</a></span> section[ -<span class="line-numbers"><strong><a href="#n10" name="n10">10</a></strong></span> @title[What about PDFs?] -<span class="line-numbers"><a href="#n11" name="n11">11</a></span> @id[pdf] -<span class="line-numbers"><a href="#n12" name="n12">12</a></span> p[ -<span class="line-numbers"><a href="#n13" name="n13">13</a></span>Once you have a single, well-formatted HTML -<span class="line-numbers"><a href="#n14" name="n14">14</a></span>file, converting it to PDF is -<span class="line-numbers"><a href="#n15" name="n15">15</a></span>extremely easy with a free 3rd-party -<span class="line-numbers"><a href="#n16" name="n16">16</a></span>renderer like =>[http://www.princexml.com|Prince] -<span class="line-numbers"><a href="#n17" name="n17">17</a></span>or =>[http://code.google.com/p/wkhtmltopdf/|wkhtmltopdf]. -<span class="line-numbers"><a href="#n18" name="n18">18</a></span> ] -<span class="line-numbers"><a href="#n19" name="n19">19</a></span> ] -<span class="line-numbers"><strong><a href="#n20" name="n20">20</a></strong></span>]</pre></div> -</div> - -<p>The Glyph code above corresponds to the following HTML code:</p> - <div class="CodeRay"> - <div class="code"><pre><span class="line-numbers"> <a href="#n1" name="n1">1</a></span><span class="tag"><div</span> <span class="attribute-name">class</span>=<span class="string"><span class="delimiter">"</span><span class="content">section</span><span class="delimiter">"</span></span><span class="tag">></span> -<span class="line-numbers"> <a href="#n2" name="n2">2</a></span> <span class="tag"><h2</span> <span class="attribute-name">id</span>=<span class="string"><span class="delimiter">"</span><span class="content">h_10</span><span class="delimiter">"</span></span><span class="tag">></span>Something about Glyph<span class="tag"></h2></span> -<span class="line-numbers"> <a href="#n3" name="n3">3</a></span> <span class="tag"><p></span> -<span class="line-numbers"> <a href="#n4" name="n4">4</a></span> You can use Glyph macros in conjunction with -<span class="line-numbers"> <a href="#n5" name="n5">5</a></span> <span class="tag"><em></span>Textile<span class="tag"></em></span> or <span class="tag"><em></span>Markdown<span class="tag"></em></span> to -<span class="line-numbers"> <a href="#n6" name="n6">6</a></span> produce HTML files effortlessly. -<span class="line-numbers"> <a href="#n7" name="n7">7</a></span> <span class="tag"></p></span> -<span class="line-numbers"> <a href="#n8" name="n8">8</a></span> <span class="tag"><p></span> -<span class="line-numbers"> <a href="#n9" name="n9">9</a></span> Alternatively, you can just use <span class="tag"><em></span>Glyph itself<span class="tag"></em></span> -<span class="line-numbers"><strong><a href="#n10" name="n10">10</a></strong></span> to generate HTML tags. -<span class="line-numbers"><a href="#n11" name="n11">11</a></span> <span class="tag"></p></span> -<span class="line-numbers"><a href="#n12" name="n12">12</a></span> <span class="tag"><div</span> <span class="attribute-name">class</span>=<span class="string"><span class="delimiter">"</span><span class="content">section</span><span class="delimiter">"</span></span><span class="tag">></span> -<span class="line-numbers"><a href="#n13" name="n13">13</a></span> <span class="tag"><h3</span> <span class="attribute-name">id</span>=<span class="string"><span class="delimiter">"</span><span class="content">pdf</span><span class="delimiter">"</span></span><span class="tag">></span>What about PDFs?<span class="tag"></h3></span> -<span class="line-numbers"><a href="#n14" name="n14">14</a></span> <span class="tag"><p></span> -<span class="line-numbers"><a href="#n15" name="n15">15</a></span> Once you have a single, well-formatted HTML -<span class="line-numbers"><a href="#n16" name="n16">16</a></span> file, converting it to PDF is -<span class="line-numbers"><a href="#n17" name="n17">17</a></span> extremely easy with a free 3rd-party renderer -<span class="line-numbers"><a href="#n18" name="n18">18</a></span> like <span class="tag"><a</span> <span class="attribute-name">href</span>=<span class="string"><span class="delimiter">"</span><span class="content">http://www.princexml.com</span><span class="delimiter">"</span></span><span class="tag">></span>Prince<span class="tag"></a></span> -<span class="line-numbers"><a href="#n19" name="n19">19</a></span> or <span class="tag"><a</span> <span class="attribute-name">href</span>=<span class="string"><span class="delimiter">"</span><span class="content">http://code.google.com/p/wkhtmltopdf/</span><span class="delimiter">"</span></span><span class="tag">></span>wkhtmltopdf<span class="tag"></a></span>. -<span class="line-numbers"><strong><a href="#n20" name="n20">20</a></strong></span> <span class="tag"></p></span> -<span class="line-numbers"><a href="#n21" name="n21">21</a></span> <span class="tag"></div></span> -<span class="line-numbers"><a href="#n22" name="n22">22</a></span><span class="tag"></div></span></pre></div> -</div> - -</section> - - <section class="section"> -<header><h1 id="h_4" class="toc">Content Reuse</h1></header> -<p>Finding yourself repeating the same sentence over an over? Glyph allows you to create snippets. Within snippets. Within other snippets (and so on, for a long long time…) as long as you don’t define a snippet by defining itself, which would be kinda nasty (and Glyph would complain!):</p> - <div class="CodeRay"> - <div class="code"><pre><span class="line-numbers"><a href="#n1" name="n1">1</a></span>snippet:[entities|snippets and macros] -<span class="line-numbers"><a href="#n2" name="n2">2</a></span>snippet:[custom_definitions| -<span class="line-numbers"><a href="#n3" name="n3">3</a></span> p[Glyph allows you to define your own &[entities].] -<span class="line-numbers"><a href="#n4" name="n4">4</a></span>] -<span class="line-numbers"><a href="#n5" name="n5">5</a></span>&[custom_definitions]</pre></div> -</div> - - <p>...which results in:</p> - <div class="CodeRay"> - <div class="code"><pre><span class="line-numbers"><a href="#n1" name="n1">1</a></span><span class="tag"><p></span>Glyph allows you to define your own snippets and macros.<span class="tag"></p></span></pre></div> -</div> - - <p>If yourself dreaming about <em>parametric</em> snippets, just create your own macros (see the <a href="http://github.com/h3rald/glyph/blob/master/book/text/changelog.glyph">source</a> of Glyph’s changelog, just to have an idea).</p> - -</section> - <section class="section"> -<header><h1 id="h_5" class="toc">Automation of Common Tasks</h1></header> -<p>If you’re writing a book, you shouldn’t have to worry about pagination, headers, footers, table of contents, section numbering or similar. Glyph understands you, and will take care of everything for you (with a little help from CSS3, sometimes).</p> - -</section> - <section class="section"> -<header><h1 id="h_6" class="toc">Reference Validation</h1></header> -<p>Feel free to add plenty of links, snippets, bookmarks, … if Glyph doesn’t find something, it will definitely complain. Broken references are a thing on the past, and you don’t need to worry about it.</p> - -</section> - <section class="section"> -<header><h1 id="h_7" class="toc">Extreme Extensibility</h1></header> -<ul> - <li>You miss a <code>!!!</code> macro to format really, <em>really</em> important things? Create it. In under 3 seconds, in Ruby or Glyph itself. And yes, you can use special characters, too.</li> - <li>You want your own, very special special <code>glyph create --everything</code> command to create all <em>you</em> need in a Glyph project? You can do it. Using your own Rake tasks, too.</li> - <li>You want Glyph to output <span class="caps">ODF</span> files? You can do it, and you’ll be able to run <code>glyph generate -f odf</code>. This would probably require a little more time, but it’s trivial, from a technical point of view.</li> -</ul> - -</section> - <section class="section"> -<header><h1 id="h_8" class="toc">Convention over Configuration</h1></header> -<p>Put your text files in <code>/text</code>, your images in <code>/images</code>, add custom macros in a <code>macro</code> folder within your <code>/lib</code> folder… you get the picture: Glyph has its special places.</p> -<p>Nonetheless, you also have 1 (<em>one</em>) configuration file to customize to your heart’s content (with smart defaults).</p> - -</section> - <section class="section"> -<header><h1 id="h_9" class="toc">Free and Open Source</h1></header> -<p>Glyph is 100% Open Source Software, developed using the Ruby Programming Language and licensed under the very permissive terms of the <a href="http://www.opensource.org/licenses/mit-license.php"><span class="caps">MIT</span> License</a>.</p> -<p>If you have Ruby installed, just run <code>gem install glyph</code>. That’s all it takes.</p> - -</section> - -</section> - <section class="section"> -<header><h1 id="h_10" class="toc">Resources</h1></header> -<ul> - <li>Home Page: <a href="http://www.h3rald.com/glyph/">http://www.h3rald.com/glyph/</a></li> - <li>Repository: <a href="http://www.github.com/h3rald/glyph/">http://www.github.com/h3rald/glyph/</a></li> - <li>Bug Tracking: <a href="http://www.github.com/h3rald/glyph/issues">http://www.github.com/h3rald/glyph/issues</a></li> - <li>Development Wiki <a href="http://wiki.github.com/h3rald/glyph">http://wiki.github.com/h3rald/glyph</a></li> - <li>RubyGem Download <a href="http://www.rubygems.org/gems/glyph">http://www.rubygems.org/gems/glyph</a></li> - <li>Book (<span class="caps">PDF</span>): <a href="http://github.com/downloads/h3rald/glyph/glyph.pdf">http://github.com/downloads/h3rald/glyph/glyph.pdf</a></li> - <li>Book (Web): <a href="http://www.h3rald.com/glyph/book/">http://www.h3rald.com/glyph/book/</a></li> - <li>Reference Documentation: <a href="http://rubydoc.info/gems/glyph/">http://rubydoc.info/gems/glyph/</a></li> - <li>User Group: <a href="http://groups.google.com/group/glyph-framework">http://groups.google.com/group/glyph-framework</a></li> -</ul> - -</section> - -</section> - -<%= render 'project_updates', :tag => 'glyph' %>
@@ -1,7 +1,6 @@
----- -permalink: t_2 -title: Glyph – Acknowledgements -type: page +title: "Glyph – Acknowledgements" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/license.html">← License</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/getting_started/create_project.html">Creating your first Glyph Project →</a></nav> <p>Glyph was designed and developed by <a href="http://www.h3rald.com">Fabio Cevasco</a> (h3rald).</p>@@ -16,4 +15,4 @@ <li><a href="http://www.taylored-software.com/">Tammy Cravit</a> (tammycravit)</li>
<li><a href="https://github.com/grv87">Basil Peace</a> (grv87)</li> </ul> -<nav class="navigation"><a href="/glyph/book/license.html">← License</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/getting_started/create_project.html">Creating your first Glyph Project →</a></nav>+<nav class="navigation"><a href="/glyph/book/license.html">← License</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/getting_started/create_project.html">Creating your first Glyph Project →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_58 -title: Glyph – Changelog -type: page +title: "Glyph – Changelog" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/config/output.html">← <code>output.*</code></a> | <a href="/glyph/book/index.html">Contents</a> | </nav>@@ -889,4 +888,4 @@ <header><h1 id="h_322" class="toc">v0.1.0 – April 8th 2010</h1></header>
Initial release. </section> -<nav class="navigation"><a href="/glyph/book/config/output.html">← <code>output.*</code></a> | <a href="/glyph/book/index.html">Contents</a> | </nav>+<nav class="navigation"><a href="/glyph/book/config/output.html">← <code>output.*</code></a> | <a href="/glyph/book/index.html">Contents</a> | </nav>
@@ -1,7 +1,6 @@
----- -permalink: compile -title: Glyph – Compiling a project -type: page +title: "Glyph – Compiling a project" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/text_editing/evaluation.html">← Simple Programming and Code Evaluation</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/compiling/lite_mode.html">Compiling single Glyph files →</a></nav> <p>By default, a Glyph project can be “compiled” into an <span class="caps">HTML</span> document. Additionally, Glyph can also be used to produce documents in the following formats:</p>@@ -80,4 +79,4 @@
</aside> </section> -<nav class="navigation"><a href="/glyph/book/text_editing/evaluation.html">← Simple Programming and Code Evaluation</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/compiling/lite_mode.html">Compiling single Glyph files →</a></nav>+<nav class="navigation"><a href="/glyph/book/text_editing/evaluation.html">← Simple Programming and Code Evaluation</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/compiling/lite_mode.html">Compiling single Glyph files →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: lite_mode -title: Glyph – Compiling single Glyph files -type: page +title: "Glyph – Compiling single Glyph files" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/compiling/compiling.html">← Compiling a project</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/compiling/programmatic_usage.html">Using Glyph programmatically →</a></nav> <p>Glyph's primary goal is to author complex documents like books or manuals. In order to do so, a Glyph project is required to keep everything organized and automated via a set of predefined conventions, exactly like Ruby on Rails or other similar frameworks do.</p>@@ -23,4 +22,4 @@ <li>The files included through the <a href="/glyph/book/macros/macros_core.html#m_include"><code>include</code></a> macro must be referenced with their absolute path, or a path relative to the current directory.</li>
</ul> </section> -<nav class="navigation"><a href="/glyph/book/compiling/compiling.html">← Compiling a project</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/compiling/programmatic_usage.html">Using Glyph programmatically →</a></nav>+<nav class="navigation"><a href="/glyph/book/compiling/compiling.html">← Compiling a project</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/compiling/programmatic_usage.html">Using Glyph programmatically →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_25 -title: Glyph – Using Glyph programmatically -type: page +title: "Glyph – Using Glyph programmatically" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/compiling/lite_mode.html">← Compiling single Glyph files</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/stats/stats.html">Using the stats command →</a></nav> <p>Besides using Glyph from the command line, you can also use it straight from your code. Glyph’s public <a href="http://rubydoc.info/gems/glyph"><span class="caps">API</span></a> is simple and can be used to:</p>@@ -97,4 +96,4 @@ </tr>
</table> </section> -<nav class="navigation"><a href="/glyph/book/compiling/lite_mode.html">← Compiling single Glyph files</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/stats/stats.html">Using the stats command →</a></nav>+<nav class="navigation"><a href="/glyph/book/compiling/lite_mode.html">← Compiling single Glyph files</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/stats/stats.html">Using the stats command →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: cfg_document -title: Glyph – <code>document.*</code> -type: page +title: "Glyph – <code>document.*</code>" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/macros/macros_structure.html">← Structure Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/config/filters.html"><code>filters.*</code> →</a></nav> The following configuration settings are related to the current Glyph document. Therefore, you should update them right after creating a project.@@ -170,4 +169,4 @@ </code>
</td> </tr> </table> -<nav class="navigation"><a href="/glyph/book/macros/macros_structure.html">← Structure Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/config/filters.html"><code>filters.*</code> →</a></nav>+<nav class="navigation"><a href="/glyph/book/macros/macros_structure.html">← Structure Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/config/filters.html"><code>filters.*</code> →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: cfg_filters -title: Glyph – <code>filters.*</code> -type: page +title: "Glyph – <code>filters.*</code>" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/config/document.html">← <code>document.*</code></a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/config/options.html"><code>options.*</code> →</a></nav> These settings are used to configure some special options related to output filters and highlighters.@@ -98,4 +97,4 @@ </code>
</td> </tr> </table> -<nav class="navigation"><a href="/glyph/book/config/document.html">← <code>document.*</code></a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/config/options.html"><code>options.*</code> →</a></nav>+<nav class="navigation"><a href="/glyph/book/config/document.html">← <code>document.*</code></a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/config/options.html"><code>options.*</code> →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: cfg_options -title: Glyph – <code>options.*</code> -type: page +title: "Glyph – <code>options.*</code>" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/config/filters.html">← <code>filters.*</code></a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/config/output.html"><code>output.*</code> →</a></nav> The following configuration settings are used to enable or disable specific Glyph functionalities and behaviors.@@ -109,4 +108,4 @@ </code>
</td> </tr> </table> -<nav class="navigation"><a href="/glyph/book/config/filters.html">← <code>filters.*</code></a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/config/output.html"><code>output.*</code> →</a></nav>+<nav class="navigation"><a href="/glyph/book/config/filters.html">← <code>filters.*</code></a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/config/output.html"><code>output.*</code> →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: cfg_output -title: Glyph – <code>output.*</code> -type: page +title: "Glyph – <code>output.*</code>" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/config/options.html">← <code>options.*</code></a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/changelog.html">Changelog →</a></nav>@@ -640,4 +639,4 @@ </tr>
</table> </section> -<nav class="navigation"><a href="/glyph/book/config/options.html">← <code>options.*</code></a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/changelog.html">Changelog →</a></nav>+<nav class="navigation"><a href="/glyph/book/config/options.html">← <code>options.*</code></a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/changelog.html">Changelog →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_34 -title: Glyph – Bookmarks and Headers -type: page +title: "Glyph – Bookmarks and Headers" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/extending/params_attrs.html">← Parameters and Attributes</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/placeholders.html">Using Placeholders →</a></nav> <p>The <a href="http://rubydoc.info/gems/glyph/Macro"><code>Glyph::Macro</code></a> class also includes a few methods to check and store bookmarks and headers. Consider for example the following source code for the <a href="/glyph/book/macros/macros_inline.html#m_anchor"><code>anchor</code></a> macro:</p>@@ -19,4 +18,4 @@ </div>
<p>The <code>bookmark?</code> method can be used to check the existance of a particular ID within the whole document, while the <code>bookmark</code> method is used to store bookmark IDs and titles. In a similar way, you can use <code>header?</code> and <code>header</code> methods to check the existance of headers within the documents or store new ones.</p> -<nav class="navigation"><a href="/glyph/book/extending/params_attrs.html">← Parameters and Attributes</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/placeholders.html">Using Placeholders →</a></nav>+<nav class="navigation"><a href="/glyph/book/extending/params_attrs.html">← Parameters and Attributes</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/placeholders.html">Using Placeholders →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: custom_command -title: Glyph – Defining Custom Commands -type: page +title: "Glyph – Defining Custom Commands" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/extending/output_format.html">← Custom Output Formats</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/troubleshooting/errors_generic.html">Generic Errors →</a></nav> <p>Glyph relies on <a href="http://davetron5000.github.com/gli/"><span class="caps">GLI</span></a> for defining commands. This useful library provides a high-level framework for creating command-line interface similar to <a href="http://git-scm.com/">Git</a>, its <span class="caps">DSL</span> takes care of pretty much everything, from managing command line arguments and options to providing an interactive help system.</p>@@ -55,4 +54,4 @@ <span class="line-numbers"><a href="#n3" name="n3">3</a></span>-- Done.</pre></div>
</div> </section> -<nav class="navigation"><a href="/glyph/book/extending/output_format.html">← Custom Output Formats</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/troubleshooting/errors_generic.html">Generic Errors →</a></nav>+<nav class="navigation"><a href="/glyph/book/extending/output_format.html">← Custom Output Formats</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/troubleshooting/errors_generic.html">Generic Errors →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_40 -title: Glyph – Defining Custom Commands and Tasks -type: page +title: "Glyph – Defining Custom Commands and Tasks" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/extending/further_reading.html">← Further Reading</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/task.html">Defining Custom Tasks →</a></nav> <p>In most cases, you can extend Glyph just by creating your own <a href="/glyph/book/extending/macro_def.html#macro_def">custom macros</a>. In some cases though, you may want to further customize Glyph to fit the needs of your project, in terms of creating <a href="/glyph/book/extending/command.html#custom_command">custom commands</a> and <a href="/glyph/book/extending/task.html#custom_task">custom tasks</a>.</p>@@ -41,4 +40,4 @@
</aside> </section> -<nav class="navigation"><a href="/glyph/book/extending/further_reading.html">← Further Reading</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/task.html">Defining Custom Tasks →</a></nav>+<nav class="navigation"><a href="/glyph/book/extending/further_reading.html">← Further Reading</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/task.html">Defining Custom Tasks →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_39 -title: Glyph – Further Reading -type: page +title: "Glyph – Further Reading" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/extending/layouts.html">← Layouts</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/commands_tasks.html">Defining Custom Commands and Tasks →</a></nav> <p>For more examples on how to create more complex macros, have a look at the <a href="http://github.com/h3rald/glyph/tree/master/macros/">source code</a> of the existing ones.</p>@@ -13,4 +12,4 @@ <li><a href="http://rubydoc.info/gems/glyph/Glyph/Interpreter"><code>Glyph::Interpreter</code></a></li>
<li><a href="http://rubydoc.info/gems/glyph/Glyph/Document"><code>Glyph::Document</code></a></li> <li><a href="http://rubydoc.info/gems/glyph/Glyph/Macro"><code>Glyph::Macro</code></a></li> </ul> -<nav class="navigation"><a href="/glyph/book/extending/layouts.html">← Layouts</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/commands_tasks.html">Defining Custom Commands and Tasks →</a></nav>+<nav class="navigation"><a href="/glyph/book/extending/layouts.html">← Layouts</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/commands_tasks.html">Defining Custom Commands and Tasks →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_31 -title: Glyph – A quick look at Glyph's internals -type: page +title: "Glyph – A quick look at Glyph's internals" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/stats/links.html">← Link Statistics</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/macro_def.html">Defining Custom Macros →</a></nav> <p>If you plan on extending Glyph, knowing how it works inside helps. It is not mandatory by any means, but it definitely helps, especially when creating complex macros.</p>@@ -86,4 +85,4 @@ <span class="line-numbers"><a href="#n8" name="n8">8</a></span><span class="tag"></div></span></pre></div>
</div> </section> -<nav class="navigation"><a href="/glyph/book/stats/links.html">← Link Statistics</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/macro_def.html">Defining Custom Macros →</a></nav>+<nav class="navigation"><a href="/glyph/book/stats/links.html">← Link Statistics</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/macro_def.html">Defining Custom Macros →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: interpreting -title: Glyph – Interpreting Glyph Code -type: page +title: "Glyph – Interpreting Glyph Code" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/extending/validators.html">← Using Validators</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/layouts.html">Layouts →</a></nav>@@ -89,4 +88,4 @@ <p>Within the <a href="/glyph/book/macros/macros_core.html#m_define_"><code>define:</code></a> macro, it is possible to use a special syntax to call the <code>raw_attr</code> or <code>raw_param</code> methods: <br />
<code>{{</code><em>parameter_number</em> or <em>attribute_name</em><code>}}</code></p> </section> -<nav class="navigation"><a href="/glyph/book/extending/validators.html">← Using Validators</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/layouts.html">Layouts →</a></nav>+<nav class="navigation"><a href="/glyph/book/extending/validators.html">← Using Validators</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/layouts.html">Layouts →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: layouts -title: Glyph – Layouts -type: page +title: "Glyph – Layouts" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/extending/interpreting.html">← Interpreting Glyph Code</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/further_reading.html">Further Reading →</a></nav> <p>When generating <a href="/glyph/book/text_editing/topics.html#topics">topic</a>-based outputs, Glyph uses <em>layouts</em> to render topics as standalone documents. By default, the following two layout are used:</p>@@ -79,4 +78,4 @@ </aside>
</section> -<nav class="navigation"><a href="/glyph/book/extending/interpreting.html">← Interpreting Glyph Code</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/further_reading.html">Further Reading →</a></nav>+<nav class="navigation"><a href="/glyph/book/extending/interpreting.html">← Interpreting Glyph Code</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/further_reading.html">Further Reading →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: macro_def -title: Glyph – Defining Custom Macros -type: page +title: "Glyph – Defining Custom Macros" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/extending/internals.html">← A quick look at Glyph's internals</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/params_attrs.html">Parameters and Attributes →</a></nav> <p>Glyph was created wih extensibility in mind. You can freely extend Glyph Language by creating or overriding macros, to do whatever you like. Macro definitions are written in pure Ruby code and placed in <code>.rb</code> files within the <code>lib/macros/</code> folder of your project.</p>@@ -113,4 +112,4 @@
Note the different tags used to render the note. </section> -<nav class="navigation"><a href="/glyph/book/extending/internals.html">← A quick look at Glyph's internals</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/params_attrs.html">Parameters and Attributes →</a></nav>+<nav class="navigation"><a href="/glyph/book/extending/internals.html">← A quick look at Glyph's internals</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/params_attrs.html">Parameters and Attributes →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_42 -title: Glyph – Custom Output Formats -type: page +title: "Glyph – Custom Output Formats" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/extending/task.html">← Defining Custom Tasks</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/command.html">Defining Custom Commands →</a></nav> <p>As shown in <a href="/glyph/book/extending/commands_tasks.html#cmd_tasks_arch">How Commands and Tasks work</a>, the <a href="/glyph/book/ref_commands.html#c_compile"><code>compile</code></a> command command calls specific tasks defined in the <code>generate:</code> Rake namespace to generate output files in a particular format.</p>@@ -75,4 +74,4 @@ <p>In this case, this task does not actually renders files in a different format, it just moves the files generated by the @generate:web5@ task in different subdirectories.</p>
<p>Additionally, it also generates the <a href="http://www.h3rald.com/glyph/">Glyph project page</a> from the book's introduction (note the usage of a raw custom layout macro).</p> </section> -<nav class="navigation"><a href="/glyph/book/extending/task.html">← Defining Custom Tasks</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/command.html">Defining Custom Commands →</a></nav>+<nav class="navigation"><a href="/glyph/book/extending/task.html">← Defining Custom Tasks</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/command.html">Defining Custom Commands →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_33 -title: Glyph – Parameters and Attributes -type: page +title: "Glyph – Parameters and Attributes" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/extending/macro_def.html">← Defining Custom Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/bookmarks_headers.html">Bookmarks and Headers →</a></nav> <p>Perhaps the most common things to do in a macro definition is accessing parameters and attributes. When doing so, it is important to consider whether we want to retrieve the <em>raw value</em> of and attribute or parameter or its <em>expanded value</em>. The difference between the two will become clearer in the following sections and also in the <a href="/glyph/book/extending/interpreting.html#interpreting">Interpreting Glyph Code</a> section.</p>@@ -72,4 +71,4 @@ <li><code>raw_attribute</code> (or <code>raw_attr</code>): Returns the attribute value of the attribute specified by name.</li>
</ul> </section> -<nav class="navigation"><a href="/glyph/book/extending/macro_def.html">← Defining Custom Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/bookmarks_headers.html">Bookmarks and Headers →</a></nav>+<nav class="navigation"><a href="/glyph/book/extending/macro_def.html">← Defining Custom Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/bookmarks_headers.html">Bookmarks and Headers →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_35 -title: Glyph – Using Placeholders -type: page +title: "Glyph – Using Placeholders" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/extending/bookmarks_headers.html">← Bookmarks and Headers</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/validators.html">Using Validators →</a></nav> <p>Sometimes you may need to access some data that will not be available until the entire document has been fully parsed and analyzed. For example, in order to be able to validate internal links, it is necessary to know in advance if the bookmark ID referenced in the link exists or not, either before (that’s easy) or even <em>after</em> the link.</p>@@ -41,4 +40,4 @@ </div>
<p>If there’s already a bookmark stored in the current document, then it is possible to retrieve its title and use it as link text. Otherwise, it is necessary to wait until the entire document has been fully processed and then check if the bookmark exists. To do so, use the <code>placeholder</code> method. When called, this method returns an unique placeholder, which is then substituted with the value of the block, right before the document is finalized.</p> <p>Within the <code>placeholder</code> block, the <code>document</code> parameter is, by all means, the fully analyzed document.</p> -<nav class="navigation"><a href="/glyph/book/extending/bookmarks_headers.html">← Bookmarks and Headers</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/validators.html">Using Validators →</a></nav>+<nav class="navigation"><a href="/glyph/book/extending/bookmarks_headers.html">← Bookmarks and Headers</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/validators.html">Using Validators →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: custom_task -title: Glyph – Defining Custom Tasks -type: page +title: "Glyph – Defining Custom Tasks" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/extending/commands_tasks.html">← Defining Custom Commands and Tasks</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/output_format.html">Custom Output Formats →</a></nav> <p>Glyph relies on <a href="http://rake.rubyforge.org/">Rake</a> to perform most of its core operations. Typically, Rake tasks are used do define the high level logic that is used by Glyph commands to, for example, compile a project or load configuration files.</p>@@ -44,4 +43,4 @@ <p>That’s it. Note that this task is pretty useless without a command that calls it, and it won’t even show up if you run <code>rake -T</code> within your project directory. <span class="fmi">for more information on <mark>creating custom commands</mark>, see <a href="/glyph/book/extending/command.html#custom_command">Defining Custom Commands</a></span>.</p>
</section> -<nav class="navigation"><a href="/glyph/book/extending/commands_tasks.html">← Defining Custom Commands and Tasks</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/output_format.html">Custom Output Formats →</a></nav>+<nav class="navigation"><a href="/glyph/book/extending/commands_tasks.html">← Defining Custom Commands and Tasks</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/output_format.html">Custom Output Formats →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_36 -title: Glyph – Using Validators -type: page +title: "Glyph – Using Validators" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/extending/placeholders.html">← Using Placeholders</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/interpreting.html">Interpreting Glyph Code →</a></nav> <p>If you need to make sure that a macro is used properly, consider using <a href="http://rubydoc.info/gems/glyph/Glyph/Macro/Validators">validators</a>. These methods can be used anywhere within the macro code to check whether certain conditions are met or not. Some default validators are provided to check the number of parameters of a macro, and they are actually used in some system macros.</p>@@ -18,4 +17,4 @@ <p>Even if you consider all the possibilities within the scope of the default macros provided with Glyph, this could still make the <code>box</code> macro unusable within custom macros.</p>
<p>For the specific cases where a macro does not make sense unless is within another (e.g. the <a href="/glyph/book/macros/macros_core.html#m_eq"><code>eq</code></a> macro), a <code>within</code> validator is used. Note though, that this validator only checks that the macro is used within another, but it is not necessarily its child.</p> </aside> -<nav class="navigation"><a href="/glyph/book/extending/placeholders.html">← Using Placeholders</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/interpreting.html">Interpreting Glyph Code →</a></nav>+<nav class="navigation"><a href="/glyph/book/extending/placeholders.html">← Using Placeholders</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/interpreting.html">Interpreting Glyph Code →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: cfg -title: Glyph – Project Configuration -type: page +title: "Glyph – Project Configuration" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/getting_started/structure.html">← Document Structure</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/glyph_files.html"><code>.glyph</code> files →</a></nav>@@ -42,4 +41,4 @@ <p>Note that this guessing is far from being foolproof: If you type something like <em>{:test, 2}</em>, for example, you’ll get an error.</p>
</aside> <p>There are plenty of configuration settings that can be modified, but most of them are best if left alone (and in the System Configuration file).</p> <p>For a complete reference, see <a href="/glyph/book/document.html#cfg_ref">Configuration Reference</a>. For everyday use, you may just want to change the settings defined in the <a href="/glyph/book/config/document.html#cfg_document"><code>document.*</code></a> namespace.</p> -<nav class="navigation"><a href="/glyph/book/getting_started/structure.html">← Document Structure</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/glyph_files.html"><code>.glyph</code> files →</a></nav>+<nav class="navigation"><a href="/glyph/book/getting_started/structure.html">← Document Structure</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/glyph_files.html"><code>.glyph</code> files →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_3 -title: Glyph – Creating your first Glyph Project -type: page +title: "Glyph – Creating your first Glyph Project" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/acknowledgements.html">← Acknowledgements</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/getting_started/structure.html">Document Structure →</a></nav> <p>To install Glyph, simply run <code>gem install glyph</code>, like with any other Ruby gem. Then, create a new directory and initialize a new Glyph project, like so:</p>@@ -39,4 +38,4 @@ <ul>
<li><code>config.yml</code> — containing your <a href="/glyph/book/getting_started/configuration.html#cfg">Project Configuration</a>.</li> <li><code>document.glyph</code> — containing the <a href="/glyph/book/getting_started/structure.html#struct">structure</a> of your document.</li> </ul> -<nav class="navigation"><a href="/glyph/book/acknowledgements.html">← Acknowledgements</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/getting_started/structure.html">Document Structure →</a></nav>+<nav class="navigation"><a href="/glyph/book/acknowledgements.html">← Acknowledgements</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/getting_started/structure.html">Document Structure →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: struct -title: Glyph – Document Structure -type: page +title: "Glyph – Document Structure" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/getting_started/create_project.html">← Creating your first Glyph Project</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/getting_started/configuration.html">Project Configuration →</a></nav>@@ -55,4 +54,4 @@ <li>The <a href="/glyph/book/macros/macros_structure.html#m_book"><code>book</code></a> macro wraps every other macro and is used to create the document header and default title page.</li>
<li>Then, the <code>@frontmatter</code>, <code>@bodymatter</code>, and <code>@backmatter</code> attributes are used to divide the portions of your document according to the rules of <a href="http://en.wikipedia.org/wiki/Book_design">book design</a>. They are not mandatory, but they can be used, for example, to number your appendixes with letters instead of numbers and similar.</li> <li><code>preface</code>, <code>chapter</code>, <code>appendix</code> are just a way to wrap content in <code><div></code> tags, from an <span class="caps">HTML</span> point of view (or <code><section></code> tags, in HTML5), but they are also necessary to nest the content of your document and generate the Table of Contents automatically, together through <code>@title</code> attributes.</li> </ul> -<nav class="navigation"><a href="/glyph/book/getting_started/create_project.html">← Creating your first Glyph Project</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/getting_started/configuration.html">Project Configuration →</a></nav>+<nav class="navigation"><a href="/glyph/book/getting_started/create_project.html">← Creating your first Glyph Project</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/getting_started/configuration.html">Project Configuration →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: index -title: Glyph Documentation -type: page +title: "Glyph Documentation" +content-type: page ----- <nav class="contents"> <h1 class="toc-header" id="toc">Table of Contents</h1>@@ -22,4 +21,4 @@ <li class="backmatter appendix"><a href="/glyph/book/ref_commands.html#cmd_ref">Command Reference</a></li><li class="backmatter appendix">Macro Reference</li><li><ol><li class="appendix section"><a href="/glyph/book/macros/macros_core.html#h_139">Core Macros</a></li><li class="appendix section"><a href="/glyph/book/macros/macros_block.html#h_215">Block Macros</a></li><li class="appendix section"><a href="/glyph/book/macros/macros_inline.html#h_240">Inline Macros</a></li><li class="appendix section"><a href="/glyph/book/macros/macros_filters.html#f_macros">Filter Macros</a></li><li class="appendix section"><a href="/glyph/book/macros/macros_structure.html#h_266">Structure Macros</a></li></ol></li>
<li class="backmatter appendix">Configuration Reference</li><li><ol><li class="appendix section"><a href="/glyph/book/config/document.html#cfg_document"><code>document.*</code></a></li><li class="appendix section"><a href="/glyph/book/config/filters.html#cfg_filters"><code>filters.*</code></a></li><li class="appendix section"><a href="/glyph/book/config/options.html#cfg_options"><code>options.*</code></a></li><li class="appendix section"><a href="/glyph/book/config/output.html#cfg_output"><code>output.*</code></a></li></ol></li> <li class="backmatter appendix"><a href="/glyph/book/changelog.html#h_297">Changelog</a></li> </ol> -</nav>+</nav>
@@ -1,7 +1,6 @@
----- -permalink: t_0 -title: Glyph – Introduction -type: page +title: "Glyph – Introduction" +content-type: page ----- <nav class="navigation"> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/license.html">License →</a></nav> <section class="section">@@ -150,4 +149,4 @@
</section> </section> -<nav class="navigation"> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/license.html">License →</a></nav>+<nav class="navigation"> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/license.html">License →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_1 -title: Glyph – License -type: page +title: "Glyph – License" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/introduction.html">← Introduction</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/acknowledgements.html">Acknowledgements →</a></nav> <p>Copyright © 2010-2012 <strong>Fabio Cevasco</strong>, <a href="http://www.h3rald.com">http://www.h3rald.com</a></p>@@ -21,4 +20,4 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. </p> -<nav class="navigation"><a href="/glyph/book/introduction.html">← Introduction</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/acknowledgements.html">Acknowledgements →</a></nav>+<nav class="navigation"><a href="/glyph/book/introduction.html">← Introduction</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/acknowledgements.html">Acknowledgements →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_50 -title: Glyph – Block Macros -type: page +title: "Glyph – Block Macros" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/macros/macros_core.html">← Core Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/macros/macros_inline.html">Inline Macros →</a></nav>@@ -318,4 +317,4 @@ <p><strong>Example:</strong> <code>title[]</code></p>
</section> -<nav class="navigation"><a href="/glyph/book/macros/macros_core.html">← Core Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/macros/macros_inline.html">Inline Macros →</a></nav>+<nav class="navigation"><a href="/glyph/book/macros/macros_core.html">← Core Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/macros/macros_inline.html">Inline Macros →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_49 -title: Glyph – Core Macros -type: page +title: "Glyph – Core Macros" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/ref_commands.html">← Command Reference</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/macros/macros_block.html">Block Macros →</a></nav>@@ -1095,4 +1094,4 @@ </section>
</section> -<nav class="navigation"><a href="/glyph/book/ref_commands.html">← Command Reference</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/macros/macros_block.html">Block Macros →</a></nav>+<nav class="navigation"><a href="/glyph/book/ref_commands.html">← Command Reference</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/macros/macros_block.html">Block Macros →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: f_macros -title: Glyph – Filter Macros -type: page +title: "Glyph – Filter Macros" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/macros/macros_inline.html">← Inline Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/macros/macros_structure.html">Structure Macros →</a></nav>@@ -241,4 +240,4 @@ </section>
</section> -<nav class="navigation"><a href="/glyph/book/macros/macros_inline.html">← Inline Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/macros/macros_structure.html">Structure Macros →</a></nav>+<nav class="navigation"><a href="/glyph/book/macros/macros_inline.html">← Inline Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/macros/macros_structure.html">Structure Macros →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_51 -title: Glyph – Inline Macros -type: page +title: "Glyph – Inline Macros" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/macros/macros_block.html">← Block Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/macros/macros_filters.html">Filter Macros →</a></nav>@@ -139,4 +138,4 @@ <p><strong>Example:</strong> <code>todo[Remember to do this.]</code></p>
</section> -<nav class="navigation"><a href="/glyph/book/macros/macros_block.html">← Block Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/macros/macros_filters.html">Filter Macros →</a></nav>+<nav class="navigation"><a href="/glyph/book/macros/macros_block.html">← Block Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/macros/macros_filters.html">Filter Macros →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_53 -title: Glyph – Structure Macros -type: page +title: "Glyph – Structure Macros" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/macros/macros_filters.html">← Filter Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/config/document.html"><code>document.*</code> →</a></nav>@@ -369,4 +368,4 @@ </section>
</section> -<nav class="navigation"><a href="/glyph/book/macros/macros_filters.html">← Filter Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/config/document.html"><code>document.*</code> →</a></nav>+<nav class="navigation"><a href="/glyph/book/macros/macros_filters.html">← Filter Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/config/document.html"><code>document.*</code> →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: cmd_ref -title: Glyph – Command Reference -type: page +title: "Glyph – Command Reference" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/troubleshooting/errors_macro.html">← Macro Errors</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/macros/macros_core.html">Core Macros →</a></nav> <p>Glyph’s command-line interface has been built using the <a href="http://github.com/davetron5000/gli">gli</a> (Git-like interface) gem. Therefore, Glyph commands are all written like this:</p>@@ -363,4 +362,4 @@ Prints all the todo items saved using the <a href="/glyph/book/macros/macros_inline.html#m_todo"><code>todo</code></a> macro.
<p><strong>Example:</strong> <code>glyph todo</code></p> </section> -<nav class="navigation"><a href="/glyph/book/troubleshooting/errors_macro.html">← Macro Errors</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/macros/macros_core.html">Core Macros →</a></nav>+<nav class="navigation"><a href="/glyph/book/troubleshooting/errors_macro.html">← Macro Errors</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/macros/macros_core.html">Core Macros →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: stats_bookmarks -title: Glyph – Bookmark Statistics -type: page +title: "Glyph – Bookmark Statistics" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/stats/snippets.html">← Snippet Statistics</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/stats/links.html">Link Statistics →</a></nav>@@ -65,4 +64,4 @@
</section> </section> -<nav class="navigation"><a href="/glyph/book/stats/snippets.html">← Snippet Statistics</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/stats/links.html">Link Statistics →</a></nav>+<nav class="navigation"><a href="/glyph/book/stats/snippets.html">← Snippet Statistics</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/stats/links.html">Link Statistics →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: stats_links -title: Glyph – Link Statistics -type: page +title: "Glyph – Link Statistics" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/stats/bookmarks.html">← Bookmark Statistics</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/internals.html">A quick look at Glyph's internals →</a></nav>@@ -106,4 +105,4 @@
</section> </section> -<nav class="navigation"><a href="/glyph/book/stats/bookmarks.html">← Bookmark Statistics</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/internals.html">A quick look at Glyph's internals →</a></nav>+<nav class="navigation"><a href="/glyph/book/stats/bookmarks.html">← Bookmark Statistics</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/extending/internals.html">A quick look at Glyph's internals →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: stats_macros -title: Glyph – Macro Statistics -type: page +title: "Glyph – Macro Statistics" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/stats/stats.html">← Using the stats command</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/stats/snippets.html">Snippet Statistics →</a></nav>@@ -89,4 +88,4 @@
</section> </section> -<nav class="navigation"><a href="/glyph/book/stats/stats.html">← Using the stats command</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/stats/snippets.html">Snippet Statistics →</a></nav>+<nav class="navigation"><a href="/glyph/book/stats/stats.html">← Using the stats command</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/stats/snippets.html">Snippet Statistics →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: stats_snippets -title: Glyph – Snippet Statistics -type: page +title: "Glyph – Snippet Statistics" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/stats/macros.html">← Macro Statistics</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/stats/bookmarks.html">Bookmark Statistics →</a></nav>@@ -66,4 +65,4 @@
</section> </section> -<nav class="navigation"><a href="/glyph/book/stats/macros.html">← Macro Statistics</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/stats/bookmarks.html">Bookmark Statistics →</a></nav>+<nav class="navigation"><a href="/glyph/book/stats/macros.html">← Macro Statistics</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/stats/bookmarks.html">Bookmark Statistics →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_26 -title: Glyph – Using the stats command -type: page +title: "Glyph – Using the stats command" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/compiling/programmatic_usage.html">← Using Glyph programmatically</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/stats/macros.html">Macro Statistics →</a></nav>@@ -69,4 +68,4 @@ <span class="line-numbers"><strong><a href="#n30" name="n30">30</a></strong></span>-- Total Internal Links: 87
<span class="line-numbers"><a href="#n31" name="n31">31</a></span>-- Total External Links: 97</pre></div> </div> -<nav class="navigation"><a href="/glyph/book/compiling/programmatic_usage.html">← Using Glyph programmatically</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/stats/macros.html">Macro Statistics →</a></nav>+<nav class="navigation"><a href="/glyph/book/compiling/programmatic_usage.html">← Using Glyph programmatically</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/stats/macros.html">Macro Statistics →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: attribute_intro -title: Glyph – Macro attributes -type: page +title: "Glyph – Macro attributes" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/text_editing/macro_intro.html">← Introducing Glyph Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/macro_composition.html">Macro Composition →</a></nav> <p>Although a macro can take any number of parameters, they are often no more than two or three, for readibility reasons: parameters have no name, but their position within a macro is significant.</p>@@ -30,4 +29,4 @@ <aside class="note">
<span class="note-title">Note</span>Like parameters, attributes can contain other macros, too. </aside> -<nav class="navigation"><a href="/glyph/book/text_editing/macro_intro.html">← Introducing Glyph Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/macro_composition.html">Macro Composition →</a></nav>+<nav class="navigation"><a href="/glyph/book/text_editing/macro_intro.html">← Introducing Glyph Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/macro_composition.html">Macro Composition →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: source_code -title: Glyph – Source Code -type: page +title: "Glyph – Source Code" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/text_editing/images.html">← Images and Figures</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/raw_html.html">Textile or Markdown →</a></nav> <p>If you’re a programmer, chances are that you’re going to include some source code in your articles and books. Glyph offers two ways to format code blocks effortlessly: the <a href="/glyph/book/macros/macros_block.html#m_codeblock"><code>codeblock</code></a> macro, which simply wraps text into <code><pre></code> and <code><code></code> tags, or the <a href="/glyph/book/macros/macros_filters.html#m_highlight"><code>highlight</code></a> macro. The last one requires either <a href="http://coderay.rubychan.de/">Coderay</a> or <a href="http://ultraviolet.rubyforge.org/">Ultraviolet</a>, but it provides syntax highlighting for the most common programming languages.</p>@@ -52,4 +51,4 @@ <li>You must always escape pipes (<code>|</code>) with the code or the highlight macro.</li>
</ul> </aside> -<nav class="navigation"><a href="/glyph/book/text_editing/images.html">← Images and Figures</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/raw_html.html">Textile or Markdown →</a></nav>+<nav class="navigation"><a href="/glyph/book/text_editing/images.html">← Images and Figures</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/raw_html.html">Textile or Markdown →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: cond_macros -title: Glyph – Conditional Macros -type: page +title: "Glyph – Conditional Macros" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/text_editing/inclusions.html">← Content Reuse</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/evaluation.html">Simple Programming and Code Evaluation →</a></nav> <p>Sometimes you may want text to be included in a document only if certain conditions are satisfied. For example, you may want to display a disclaimer section only if the document is a draft (see the <a href="/glyph/book/config/document.html#s_document_draft"><code>document.draft</code></a> setting), or use a particular stylesheet only if when you generate a <span class="caps">PDF</span> document.</p>@@ -47,4 +46,4 @@ <li>A conditional expression is not satisfied if it evaluates to an empty string or the string “false”.</li>
</ul> </section> -<nav class="navigation"><a href="/glyph/book/text_editing/inclusions.html">← Content Reuse</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/evaluation.html">Simple Programming and Code Evaluation →</a></nav>+<nav class="navigation"><a href="/glyph/book/text_editing/inclusions.html">← Content Reuse</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/evaluation.html">Simple Programming and Code Evaluation →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: esc_quot -title: Glyph – Escaping and Quoting -type: page +title: "Glyph – Escaping and Quoting" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/text_editing/macro_composition.html">← Macro Composition</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/sections.html">Sections and Headers →</a></nav> <p>Glyph doesn’t require any special control characters like LaTeX, and its macro syntax is very straightforward and liberal. This however comes with a price: because square brackets are used as delimiters, you must escape any square bracket in your text with a backslash. That’s not <em>too</em> bad if you think about it, unless you’re writing programming code, in which case escaping every single square bracket can be painful.</p>@@ -94,4 +93,4 @@ <td>An escaped dot evaluates to nothing. Useful to separate macro identifiers from other characters: <br /><code>_\/=>[#link|This link is emphasized using Textile]_ </code>
</td> </tr> </table> -<nav class="navigation"><a href="/glyph/book/text_editing/macro_composition.html">← Macro Composition</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/sections.html">Sections and Headers →</a></nav>+<nav class="navigation"><a href="/glyph/book/text_editing/macro_composition.html">← Macro Composition</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/sections.html">Sections and Headers →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_22 -title: Glyph – Simple Programming and Code Evaluation -type: page +title: "Glyph – Simple Programming and Code Evaluation" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/text_editing/conditionals.html">← Conditional Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/compiling/compiling.html">Compiling a project →</a></nav> <section class="section">@@ -68,4 +67,4 @@ <p>The scope for the code evaluation is the Kernel module, (with all inclusions required by Glyph itself).</p>
<p>Although it is possible to retrieve Glyph configuration settings in this way (e.g. <code>%[cfg('document.author')]</code>), the <a href="/glyph/book/macros/macros_core.html#m_config"><code>config</code></a> macro (aliased to <code>$</code>) makes things slightly simpler (e.g. <code>$[document.author]</code>).</p> </section> -<nav class="navigation"><a href="/glyph/book/text_editing/conditionals.html">← Conditional Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/compiling/compiling.html">Compiling a project →</a></nav>+<nav class="navigation"><a href="/glyph/book/text_editing/conditionals.html">← Conditional Macros</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/compiling/compiling.html">Compiling a project →</a></nav>
@@ -1,10 +1,9 @@
----- -permalink: t_6 -title: Glyph – <code>.glyph</code> files -type: page +title: "Glyph – <code>.glyph</code> files" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/getting_started/configuration.html">← Project Configuration</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/macro_intro.html">Introducing Glyph Macros →</a></nav> <p>The <code>text</code> folder of any Glyph folder contains all the text source files used to produce a document. Although there are no restrictions on the extension of the files in this folder, you may want to use <code>.glyph</code>, especially if <a href="http://www.vim.org">Vim</a> is your favorite text editor.</p> <p>The reason is simple: a Glyph syntax file is <a href="http://www.vim.org/scripts/script.php?script_id=3086">available on vim.org</a>. Although not essential, syntax highlighting does help when editing Glyph files.</p> <p>If you use TextMate, you may want to check out Eric Givens’ <a href="http://github.com/darthzippy/glyph.tmbundle">Glyph TextMate Bundle</a>.</p> -<nav class="navigation"><a href="/glyph/book/getting_started/configuration.html">← Project Configuration</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/macro_intro.html">Introducing Glyph Macros →</a></nav>+<nav class="navigation"><a href="/glyph/book/getting_started/configuration.html">← Project Configuration</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/macro_intro.html">Introducing Glyph Macros →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: img_fig -title: Glyph – Images and Figures -type: page +title: "Glyph – Images and Figures" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/text_editing/links.html">← Links and Bookmarks</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/code.html">Source Code →</a></nav> <p>Same as for <a href="/glyph/book/text_editing/links.html#links">links</a>, you can also include images and figures using Textile or Markdown. If you want additional features, you can use the <a href="/glyph/book/macros/macros_block.html#m_image"><code>image</code></a> macro and the <a href="/glyph/book/macros/macros_block.html#m_figure"><code>figure</code></a> macro, as shown in the following example:</p>@@ -39,4 +38,4 @@ <aside class="note">
<span class="note-title">Note</span>In future releases, figures will be numbered automatically and included in a <em>List of Figures</em> section. </aside> -<nav class="navigation"><a href="/glyph/book/text_editing/links.html">← Links and Bookmarks</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/code.html">Source Code →</a></nav>+<nav class="navigation"><a href="/glyph/book/text_editing/links.html">← Links and Bookmarks</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/code.html">Source Code →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: incl -title: Glyph – Content Reuse -type: page +title: "Glyph – Content Reuse" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/text_editing/stylesheets.html">← Adding Stylesheets</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/conditionals.html">Conditional Macros →</a></nav> <section class="section">@@ -43,4 +42,4 @@ <span class="note-title">Tip</span>Snippets (or any other macro) can be nested within other snippets. Glyph takes care of checking if you nested snippets or macros mutually and warns you as necessary.
</aside> -<nav class="navigation"><a href="/glyph/book/text_editing/stylesheets.html">← Adding Stylesheets</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/conditionals.html">Conditional Macros →</a></nav>+<nav class="navigation"><a href="/glyph/book/text_editing/stylesheets.html">← Adding Stylesheets</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/conditionals.html">Conditional Macros →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: links -title: Glyph – Links and Bookmarks -type: page +title: "Glyph – Links and Bookmarks" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/text_editing/topics.html">← Topics</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/images.html">Images and Figures →</a></nav> <p>Lightweight markups let you create internal and external links in a very easy way, and you can still do so in Glyph. However, if you do so:</p>@@ -64,4 +63,4 @@ <aside class="important">
<span class="note-title">Important</span>Enabling URL validation may significantly slow down compilation if a lot of external links are present. </aside> -<nav class="navigation"><a href="/glyph/book/text_editing/topics.html">← Topics</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/images.html">Images and Figures →</a></nav>+<nav class="navigation"><a href="/glyph/book/text_editing/topics.html">← Topics</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/images.html">Images and Figures →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: composition -title: Glyph – Macro Composition -type: page +title: "Glyph – Macro Composition" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/text_editing/attribute_intro.html">← Macro attributes</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/esc_quot.html">Escaping and Quoting →</a></nav> <p>Glyph macros can be <em>composed</em> with other using the <code>/</code> character. Macro composition can be used instead of nesting, provided that macro containers (also called <em>dispatchers</em> in certain situations) take only one parameter and no attributes.</p>@@ -30,4 +29,4 @@ <ul>
<li>The <a href="/glyph/book/macros/macros_core.html#m_s"><code>s</code></a> macro, used to call almost any method of the Ruby String class.</li> <li>The <a href="/glyph/book/macros/macros_core.html#m_xml"><code>xml</code></a> macro, used to render raw <span class="caps">XML</span> tags.</li> </ul> -<nav class="navigation"><a href="/glyph/book/text_editing/attribute_intro.html">← Macro attributes</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/esc_quot.html">Escaping and Quoting →</a></nav>+<nav class="navigation"><a href="/glyph/book/text_editing/attribute_intro.html">← Macro attributes</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/esc_quot.html">Escaping and Quoting →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: macro_intro -title: Glyph – Introducing Glyph Macros -type: page +title: "Glyph – Introducing Glyph Macros" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/text_editing/glyph_files.html">← <code>.glyph</code> files</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/attribute_intro.html">Macro attributes →</a></nav>@@ -18,4 +17,4 @@ <ul>
<li><code>=>[#test|Test Section]</code></li> <li><code>link[#test|Test Section]</code></li> </ul> -<nav class="navigation"><a href="/glyph/book/text_editing/glyph_files.html">← <code>.glyph</code> files</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/attribute_intro.html">Macro attributes →</a></nav>+<nav class="navigation"><a href="/glyph/book/text_editing/glyph_files.html">← <code>.glyph</code> files</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/attribute_intro.html">Macro attributes →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_17 -title: Glyph – Textile or Markdown -type: page +title: "Glyph – Textile or Markdown" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/text_editing/code.html">← Source Code</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/xml_fallback.html">XML Fallback →</a></nav> <p>@@ -37,4 +36,4 @@ <aside class="important">
<span class="note-title">Important</span>Be careful when using block-level HTML with Textile and Markdown: sometimes it may be necessary to add extra empty lines or escape tags. </aside> -<nav class="navigation"><a href="/glyph/book/text_editing/code.html">← Source Code</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/xml_fallback.html">XML Fallback →</a></nav>+<nav class="navigation"><a href="/glyph/book/text_editing/code.html">← Source Code</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/xml_fallback.html">XML Fallback →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_12 -title: Glyph – Section Aliases -type: page +title: "Glyph – Section Aliases" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/text_editing/sections.html">← Sections and Headers</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/topics.html">Topics →</a></nav> <p>There are <em>a lot</em> of macros that can be used in the same way as <code>section</code>, one for each element commonly used in <a href="http://en.wikipedia.org/wiki/Book_design">book design</a>.</p>@@ -44,4 +43,4 @@ <aside class="note">
<span class="note-title">Note</span><code>frontmatter</code>, <code>bodymatter</code> and <code>backmatter</code> are also macro identifiers, but they are also exposed as attributes for the <a href="/glyph/book/macros/macros_structure.html#m_book"><code>book</code></a> macro and the <a href="/glyph/book/macros/macros_structure.html#m_article"><code>article</code></a> macro, so if you're using either of these two macros as your root macro for your document, there's no need to use them explicitly. </aside> -<nav class="navigation"><a href="/glyph/book/text_editing/sections.html">← Sections and Headers</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/topics.html">Topics →</a></nav>+<nav class="navigation"><a href="/glyph/book/text_editing/sections.html">← Sections and Headers</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/topics.html">Topics →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: sec_head -title: Glyph – Sections and Headers -type: page +title: "Glyph – Sections and Headers" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/text_editing/esc_quot.html">← Escaping and Quoting</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/section_aliases.html">Section Aliases →</a></nav>@@ -62,4 +61,4 @@
</aside> </section> -<nav class="navigation"><a href="/glyph/book/text_editing/esc_quot.html">← Escaping and Quoting</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/section_aliases.html">Section Aliases →</a></nav>+<nav class="navigation"><a href="/glyph/book/text_editing/esc_quot.html">← Escaping and Quoting</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/section_aliases.html">Section Aliases →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: stylesheets -title: Glyph – Adding Stylesheets -type: page +title: "Glyph – Adding Stylesheets" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/text_editing/xml_fallback.html">← XML Fallback</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/inclusions.html">Content Reuse →</a></nav> <p>Currently, Glyph does not provide any native way to format text and pages. The reason is that there's absolutely no need for that: CSS does the job just fine. In particular, CSS3 offers specific attributes and elements that can be used specifically for paginated documents. That's no replacement for LaTeX by any means, but it is enough if you're not looking for advanced typographical features.</p>@@ -51,4 +50,4 @@ </tr>
</table> </section> -<nav class="navigation"><a href="/glyph/book/text_editing/xml_fallback.html">← XML Fallback</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/inclusions.html">Content Reuse →</a></nav>+<nav class="navigation"><a href="/glyph/book/text_editing/xml_fallback.html">← XML Fallback</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/inclusions.html">Content Reuse →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: topics -title: Glyph – Topics -type: page +title: "Glyph – Topics" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/text_editing/section_aliases.html">← Section Aliases</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/links.html">Links and Bookmarks →</a></nav> <p>Sections can also be used to create <em>topics</em>. In a technical writing context, the term topic identifies a single page of an online help (e.g. a Compiled <span class="caps">HTML</span> file, or <span class="caps">CHM</span>). Topics should generally be:</p>@@ -36,4 +35,4 @@ <li>The topic file is rendered according to a specific <a href="/glyph/book/extending/layouts.html#layouts">layout</a>.</li>
<li>The location of the topic is the same as the location of the included file, mirrored in the output folder.</li> <li>Glyph takes care of changing the file extensions and resolving links automatically, regardless of the output target.</li> </ul> -<nav class="navigation"><a href="/glyph/book/text_editing/section_aliases.html">← Section Aliases</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/links.html">Links and Bookmarks →</a></nav>+<nav class="navigation"><a href="/glyph/book/text_editing/section_aliases.html">← Section Aliases</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/links.html">Links and Bookmarks →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_18 -title: Glyph – XML Fallback -type: page +title: "Glyph – XML Fallback" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/text_editing/raw_html.html">← Textile or Markdown</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/stylesheets.html">Adding Stylesheets →</a></nav> <p>Sure Textile and Markdown are great, but sometimes you may want to just use HTML, without the extra verbosity, of course. Take tables for example: Textile offers an easy way to create them, but things may get dirty when you need to have multiple paragraphs or lists within cells.</p>@@ -100,4 +99,4 @@ <p><span class="note-title">Tip</span>You can change this list by modifying the <a href="/glyph/book/config/options.html#s_options_xml_blacklist"><code>options.xml_blacklist</code></a> setting.</p>
</aside> </section> -<nav class="navigation"><a href="/glyph/book/text_editing/raw_html.html">← Textile or Markdown</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/stylesheets.html">Adding Stylesheets →</a></nav>+<nav class="navigation"><a href="/glyph/book/text_editing/raw_html.html">← Textile or Markdown</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/stylesheets.html">Adding Stylesheets →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_46 -title: Glyph – Command Errors -type: page +title: "Glyph – Command Errors" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/troubleshooting/errors_parser.html">← Parsing Errors</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/troubleshooting/errors_macro.html">Macro Errors →</a></nav>@@ -74,4 +73,4 @@ <td>Returned by the <a href="/glyph/book/ref_commands.html#c_config"><code>config</code></a> command when attempting to override a setting in the <code>system.*</code> namespace.</td>
</tr> </table> -<nav class="navigation"><a href="/glyph/book/troubleshooting/errors_parser.html">← Parsing Errors</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/troubleshooting/errors_macro.html">Macro Errors →</a></nav>+<nav class="navigation"><a href="/glyph/book/troubleshooting/errors_parser.html">← Parsing Errors</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/troubleshooting/errors_macro.html">Macro Errors →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_44 -title: Glyph – Generic Errors -type: page +title: "Glyph – Generic Errors" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/extending/command.html">← Defining Custom Commands</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/troubleshooting/errors_parser.html">Parsing Errors →</a></nav>@@ -106,4 +105,4 @@ <td>Returned by the <a href="/glyph/book/ref_commands.html#c_stats"><code>stats</code></a> command if the specified snippet is defined but unused.</td>
</tr> </table> -<nav class="navigation"><a href="/glyph/book/extending/command.html">← Defining Custom Commands</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/troubleshooting/errors_parser.html">Parsing Errors →</a></nav>+<nav class="navigation"><a href="/glyph/book/extending/command.html">← Defining Custom Commands</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/troubleshooting/errors_parser.html">Parsing Errors →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_47 -title: Glyph – Macro Errors -type: page +title: "Glyph – Macro Errors" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/troubleshooting/errors_command.html">← Command Errors</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/ref_commands.html">Command Reference →</a></nav> <p>The following errors are displayed in the form:</p>@@ -184,4 +183,4 @@ <td>Returned if a macro was used in the wrong place.</td>
</tr> </table> -<nav class="navigation"><a href="/glyph/book/troubleshooting/errors_command.html">← Command Errors</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/ref_commands.html">Command Reference →</a></nav>+<nav class="navigation"><a href="/glyph/book/troubleshooting/errors_command.html">← Command Errors</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/ref_commands.html">Command Reference →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_45 -title: Glyph – Parsing Errors -type: page +title: "Glyph – Parsing Errors" +content-type: page ----- <nav class="navigation"><a href="/glyph/book/troubleshooting/errors_generic.html">← Generic Errors</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/troubleshooting/errors_command.html">Command Errors →</a></nav>@@ -58,4 +57,4 @@ <td>Returned if a parameter delimiter is outside a macro or inside an attribute.</td>
</tr> </table> -<nav class="navigation"><a href="/glyph/book/troubleshooting/errors_generic.html">← Generic Errors</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/troubleshooting/errors_command.html">Command Errors →</a></nav>+<nav class="navigation"><a href="/glyph/book/troubleshooting/errors_generic.html">← Generic Errors</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/troubleshooting/errors_command.html">Command Errors →</a></nav>
@@ -1,76 +0,0 @@
------ -permalink: h3rald -filters_pre: -- erb -- redcloth -title: "H3RALD Web Site" -subtitle: "The site you're looking at" -type: project -github: h3rald -links: -- "Source": http://github.com/h3rald/h3rald/tree/master -- "Tracking": http://github.com/h3rald/h3rald/issues -status: Active -version: 8.4.0 ------ - -<%= render 'project_data', :tag => 'website' %> - -The H3RALD.com domain was bought in March 2004 and since than has always been my home on the Internet. Through the years, a total of 8 versions of this web site has been released, each featuring some change in the backend. - -Currently, this web site is fully static (minus a few Ajax calls) and is powered by the "Nanoc":http://nanoc.stoneship.org/, a very flexible web publishing system written in Ruby. - -<div class="spacer-50"></div> -<div class="spacer-50"></div> - -h3. Releases - -h4. Version 8 (September 2009 – now) -* Web Server: "Apache":http://www.apache.org, "Nginx":http://wiki.nginx.org/Main (from version 8.3 onwards) -* Database: n/a -* Framework/CMS/Other: "Nanoc":http://www.h3rald.com -* Programming Language: "Ruby":http://www.ruby-lang.org - -h4. Version 7 (July 2007 – September 2009) -* Web Server: "Apache":http://www.apache.org -* Database: "MySQL":http://www.mysql.com -* Framework/CMS/Other: "Ruby on Rails":http://www.rubyonrails.org + "Typo":http://www.typosphere.org -* Programming Language: "Ruby":http://www.ruby-lang.org - -h4. Version 6 (December 2005 – July 2007) -* Web Server: "Apache":http://www.apache.org -* Database: "MySQL":http://www.mysql.com -* Framework/CMS/Other: "CakePHP":http://www.cakephp.com -* Programming Language: "PHP":http://www.php.net - -h4. Version 5 (April 2005 – December 2005) -* Web Server: "Apache":http://www.apache.org -* Database: "SQLite":http://www.sqlite.org -* Framework/CMS/Other: "Prado":http://www.xisc.com/ -* Programming Language: "PHP":http://www.php.net - -h4. Version 4 (February 2005 – April 2005) -* Web Server: "Apache":http://www.apache.org -* Database: "MySQL":http://www.mysql.com -* Framework/CMS/Other: n/a -* Programming Language: "PHP":http://www.php.net - -h4. Version 3 (November 2005 – February 2005) -* Web Server: "Apache":http://www.apache.org -* Database: "MySQL":http://www.mysql.com -* Framework/CMS/Other: "XOOPS":http://www.xoops.org/ -* Programming Language: "PHP":http://www.php.net - -h4. Version 2 (May 2004 – November 2004) -* Web Server: "Apache":http://www.apache.org -* Database: n/a -* Framework/CMS/Other: n/a -* Programming Language: "PHP":http://www.php.net - -h4. Version 1 (March 2004 – May 2004) -* Web Server: "Apache":http://www.apache.org -* Database: n/a -* Framework/CMS/Other: n/a -* Programming Language: n/a - -<%= render 'project_updates', :tag => 'website' %>
@@ -1,116 +0,0 @@
------ -permalink: hastyscribe -filters_pre: -- erb -title_tag: HastyScribe -type: project -github: hastyscribe -links: -- "User Guide": /hastyscribe/HastyScribe_UserGuide.htm -- "Download": https://github.com/h3rald/hastyscribe/releases/v1.6.0 -- "Source": https://github.com/h3rald/hastyscribe -status: Active -version: 1.6.0 ------ - -<div class="jumbotron"> - <p style="text-align:center;"><i class="hastyscribe" style="font-size: 180%; color: #000"></i></p> - <p class="donthyphenate">A simple, self-contained, command-line program able to convert <a href="http://daringfireball.net/projects/markdown">markdown</a> files into self-contained HTML pages, automatically embedding all the needed fonts, stylesheets and images.</p> -</div> - -<div class="row donthyphenate" style="text-align: center; margin: auto;"> - <div class="col-md-4" style="padding: 2em;"> - <div class="row"> - <i class="h3-os-apple fa-3x"></i> - <i class="h3-os-linux fa-3x"></i> - <i class="h3-os-win-04 fa-3x"></i> - </div> - <div class="row"> - <h3 class="centered">Cross Platform</h3> - <p>Download the precompiled HastyScribe binaries for OS X, Linux, and Windows, or build directly from the source.</p> - </div> - </div> - <div class="col-md-4" style="padding: 2em;"> - <div class="row"> - <i class="h3-terminal fa-3x"></i> - </div> - <div class="row"> - <h3 class="centered">Command Line</h3> - <p>HastyScribe is a command-line application that doesn't need anything else but a single, small, executable file.</p> - </div> - </div> - <div class="col-md-4" style="padding: 2em;"> - <div class="row"> - <i class="fa fa-mobile fa-3x"></i> - <i class="fa fa-tablet fa-3x"></i> - <i class="fa fa-desktop fa-3x"></i> - </div> - <div class="row"> - <h3 class="centered">Responsive</h3> - <p>HastyScribe generates valid, self-contained, responsive HTML5 documents that can be viewed with any major modern broswer, and look great on any device.</p> - </div> - </div> -</div> - -<div class="row"> - <div class="col-md-6"> - <div class="panel panel-default"> - <div class="panel-heading">Usage & Syntax</div> - <div class="panel-body"> - <p>Run HastyScribe from the command line like this:</p> - <p><code><strong>hastyscribe</strong> <em>MyMarkdownFile.md</em></code></p> - </div> - </div> - </div> - <div class="col-md-6"> - <div class="panel panel-default"> - <div class="panel-heading">Example & Documentation</div> - <div class="panel-body"> - <p>View/download the <strong><a href="/hastyscribe/HastyScribe_UserGuide.htm">HastyScribe User Guide</a></strong></p> - <p>generated with HastyScribe (<a href="https://raw.githubusercontent.com/h3rald/hastyscribe/master/doc/HastyScribe_UserGuide.md">source</a>)</p> - </div> - </div> - </div> -</div> - -<div class="row" style="margin:auto; text-align:center;"> -<div class="btn-group"> - <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown"> - <span class="fa-download"></span> Download <span class="caret"></span> - </button> - <ul class="dropdown-menu" role="menu" style="text-align: left;"> - <li> - <a href="https://github.com/h3rald/hastyscribe/releases/download/v1.6.0/hastyscribe_v1.6.0_macosx_x64.zip"> - <i class="h3-os-apple"></i> HastyScribe for OS X (x64) - </a> - </li> - <li> - <a href="https://github.com/h3rald/hastyscribe/releases/download/v1.6.0/hastyscribe_v1.6.0_linux_x64.zip"> - <i class="h3-os-linux"></i> HastyScribe for Linux (x64) - </a> - </li> - <li> - <a href="https://github.com/h3rald/hastyscribe/releases/download/v1.6.0/hastyscribe_v1.6.0_linux_x86.zip"> - <i class="h3-os-linux"></i> HastyScribe for Linux (x86) - </a> - </li> - <li> - <a href="https://github.com/h3rald/hastyscribe/releases/download/v1.6.0/hastyscribe_v1.6.0_linux_arm.zip"> - <i class="h3-os-linux"></i> HastyScribe for Linux (ARM) - </a> - </li> - <li> - <a href="https://github.com/h3rald/hastyscribe/releases/download/v1.6.0/hastyscribe_v1.6.0_windows_x64.zip"> - <i class="h3-os-win-04"></i> HastyScribe for Windows (x64) - </a> - </li> - </ul> -</div> - <a href="https://github.com/h3rald/hastyscribe" - class="btn btn-success" style="margin:20px;"> - <i class="fa fa-github"></i> View on Github</a> -</div> - -<div class="row" style="margin:auto; text-align: center;"> - — <i class="hastyscribe"></i> is open source software, licensed under the terms of the <a href="http://opensource.org/licenses/MIT">MIT License.</a> — -</div>
@@ -1,5 +0,0 @@
-# HastyStyles - -Stylesheets for [HastyScribe](https://h3rald.com/hastyscribe). - -See [HastyScribe's License](https://github.com/h3rald/hastyscribe/blob/master/LICENSE.md) for licensing details.
@@ -1,435 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="350.7547" - height="102.312" - id="svg2" - version="1.1" - inkscape:version="0.48.2 r9819" - sodipodi:docname="hastyscribe.svg"> - <defs - id="defs4"> - <inkscape:path-effect - effect="skeletal" - id="path-effect3615" - is_visible="true" - pattern="m 109.248,2.090991 c 0,1.154821 -24.456,2.09099 -54.624,2.09099 C 24.45599,4.181981 0,3.245812 0,2.090991 0,0.936169 24.45599,0 54.624,0 c 30.168,0 54.624,0.936169 54.624,2.090991 z" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3594" - is_visible="true" - pattern="m 109.248,1.215991 c 0,0.671572 -24.456,1.21599 -54.624,1.21599 C 24.45599,2.431981 0,1.887563 0,1.215991 0,0.544418 24.45599,0 54.624,0 c 30.168,0 54.624,0.544418 54.624,1.215991 z" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3539" - is_visible="true" - pattern="m 109.248,1.590991 c 0,0.878679 -24.456,1.59099 -54.624,1.59099 C 24.45599,3.181981 0,2.46967 0,1.590991 0,0.712311 24.45599,0 54.624,0 c 30.168,0 54.624,0.712311 54.624,1.590991 z" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3529" - is_visible="true" - pattern="m 109.248,1.590991 c 0,0.878679 -24.456,1.59099 -54.624,1.59099 C 24.45599,3.181981 0,2.46967 0,1.590991 0,0.712311 24.45599,0 54.624,0 c 30.168,0 54.624,0.712311 54.624,1.590991 z" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3485" - is_visible="true" - pattern="m 95.81296,3.00521 c 0,1.65973 -21.44846,3.0052 -47.90648,3.0052 C 21.44846,6.01041 0,4.66494 0,3.00521 0,1.34548 21.44846,0 47.90648,0 74.3645,0 95.81296,1.34548 95.81296,3.00521 z" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3475" - is_visible="true" - pattern="m 95.81296,3.00521 c 0,1.65973 -21.44846,3.0052 -47.90648,3.0052 C 21.44846,6.01041 0,4.66494 0,3.00521 0,1.34548 21.44846,0 47.90648,0 74.3645,0 95.81296,1.34548 95.81296,3.00521 z" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3465" - is_visible="true" - pattern="m 95.81296,3.00521 c 0,1.65973 -21.44846,3.0052 -47.90648,3.0052 C 21.44846,6.01041 0,4.66494 0,3.00521 0,1.34548 21.44846,0 47.90648,0 74.3645,0 95.81296,1.34548 95.81296,3.00521 z" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3455" - is_visible="true" - pattern="m 95.81296,3.00521 c 0,1.65973 -21.44846,3.0052 -47.90648,3.0052 C 21.44846,6.01041 0,4.66494 0,3.00521 0,1.34548 21.44846,0 47.90648,0 74.3645,0 95.81296,1.34548 95.81296,3.00521 z" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3445" - is_visible="true" - pattern="m 95.81296,3.00521 c 0,1.65973 -21.44846,3.0052 -47.90648,3.0052 C 21.44846,6.01041 0,4.66494 0,3.00521 0,1.34548 21.44846,0 47.90648,0 74.3645,0 95.81296,1.34548 95.81296,3.00521 z" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3435" - is_visible="true" - pattern="m 95.81296,3.00521 c 0,1.65973 -21.44846,3.0052 -47.90648,3.0052 C 21.44846,6.01041 0,4.66494 0,3.00521 0,1.34548 21.44846,0 47.90648,0 74.3645,0 95.81296,1.34548 95.81296,3.00521 z" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3425" - is_visible="true" - pattern="m 95.81296,3.00521 c 0,1.65973 -21.44846,3.0052 -47.90648,3.0052 C 21.44846,6.01041 0,4.66494 0,3.00521 0,1.34548 21.44846,0 47.90648,0 74.3645,0 95.81296,1.34548 95.81296,3.00521 z" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3405" - is_visible="true" - pattern="m 95.81296,3.00521 c 0,1.65973 -21.44846,3.0052 -47.90648,3.0052 C 21.44846,6.01041 0,4.66494 0,3.00521 0,1.34548 21.44846,0 47.90648,0 74.3645,0 95.81296,1.34548 95.81296,3.00521 z" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3395" - is_visible="true" - pattern="m 95.81296,3.00521 c 0,1.65973 -21.44846,3.0052 -47.90648,3.0052 C 21.44846,6.01041 0,4.66494 0,3.00521 0,1.34548 21.44846,0 47.90648,0 74.3645,0 95.81296,1.34548 95.81296,3.00521 z" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3385" - is_visible="true" - pattern="m 96.696843,1.7677731 c 0,1.65973 -21.44846,3.0052 -47.90648,3.0052 -26.45802,0 -47.90647952,-1.34547 -47.90647952,-3.0052 0,-1.65972997 21.44845952,-3.00521 47.90647952,-3.00521 26.45802,0 47.90648,1.34548003 47.90648,3.00521 z" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3306" - is_visible="true" - pattern="m 214.5,3.2500001 c 0,1.7949249 -48.01746,3.25 -107.25,3.25 C 48.01746,6.5000001 0,5.044925 0,3.2500001 0,1.4550742 48.01746,0 107.25,0 166.48254,0 214.5,1.4550742 214.5,3.2500001 z" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3284" - is_visible="true" - pattern="m 175.00892,1.944544 c 0,1.073941 -39.17708,1.944543 -87.50446,1.944543 C 39.17708,3.889087 0,3.018485 0,1.944544 0,0.870602 39.17708,0 87.50446,0 c 48.32738,0 87.50446,0.870602 87.50446,1.944544 z" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3272" - is_visible="true" - pattern="m 175.00892,1.944544 c 0,1.073941 -39.17708,1.944543 -87.50446,1.944543 C 39.17708,3.889087 0,3.018485 0,1.944544 0,0.870602 39.17708,0 87.50446,0 c 48.32738,0 87.50446,0.870602 87.50446,1.944544 z" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3196" - is_visible="true" - pattern="M 0,0 1,0" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3192" - is_visible="true" - pattern="M 0,0 1,0" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3163" - is_visible="true" - pattern="m 94.896651,1.5881911 c 0,1.577954 -21.18652,2.857142 -47.32143,2.857142 -26.1349,0 -47.32143066,-1.279188 -47.32143066,-2.857142 0,-1.57795602 21.18653066,-2.857143 47.32143066,-2.857143 26.13491,0 47.32143,1.27918698 47.32143,2.857143 z" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - <inkscape:path-effect - effect="skeletal" - id="path-effect3141" - is_visible="true" - pattern="m 94.64286,2.857143 c 0,1.577954 -21.18652,2.857142 -47.32143,2.857142 C 21.18653,5.714285 0,4.435097 0,2.857143 0,1.279187 21.18653,0 47.32143,0 73.45634,0 94.64286,1.279187 94.64286,2.857143 z" - copytype="single_stretched" - prop_scale="1" - scale_y_rel="false" - spacing="0" - normal_offset="0" - tang_offset="0" - prop_units="false" - vertical_pattern="false" - fuse_tolerance="0" /> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="2.8284271" - inkscape:cx="176.24123" - inkscape:cy="60.011188" - inkscape:document-units="px" - inkscape:current-layer="layer1" - showgrid="false" - inkscape:window-width="1366" - inkscape:window-height="720" - inkscape:window-x="0" - inkscape:window-y="0" - inkscape:window-maximized="1" - fit-margin-top="0" - fit-margin-left="0" - fit-margin-right="0" - fit-margin-bottom="0" /> - <metadata - id="metadata7"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g - inkscape:label="Layer 1" - inkscape:groupmode="layer" - id="layer1" - transform="translate(-177.38916,-82.362228)"> - <g - style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Mr Bedfort;-inkscape-font-specification:Mr Bedfort" - id="text2985" - transform="translate(2.4748737,-3.8890873)"> - <path - d="m 192.26629,131.03531 -1.296,-5.616 c -3.552,-1.19997 -7.19999,-2.51997 -10.944,-3.96 -0.048,3e-5 -0.072,0.024 -0.072,0.072 0.048,1.00803 4.15201,4.17602 12.312,9.504 m 6.12,-3.24 c 0.95999,4.22402 1.55999,6.96002 1.8,8.208 11.42398,6.96001 18.74397,10.464 21.96,10.512 l -3.888,-13.896 c -6.43202,-1.24798 -13.05602,-2.85598 -19.872,-4.824 m -5.472,-36.791995 -0.288,4.608 c 0,4.464045 1.512,13.320035 4.536,26.567995 6.23999,1.92003 12.79198,3.57602 19.656,4.968 -1.96802,-7.43997 -3.40802,-13.84796 -4.32,-19.224 -0.91202,-5.42395 -1.36802,-11.207947 -1.368,-17.351995 0.096,-0.527945 1.03198,-1.367944 2.808,-2.52 1.82397,-1.199942 3.11997,-1.799941 3.888,-1.8 0.38397,5.9e-5 0.57597,0.264058 0.576,0.792 l -0.36,5.04 c -3e-5,7.776045 2.01597,19.872035 6.048,36.287995 5.66396,0.86402 10.94396,1.36802 15.84,1.512 0.33595,2e-5 0.50395,0.16802 0.504,0.504 -5e-5,0.28802 -1.05605,1.00802 -3.168,2.16 -2.11205,1.15202 -3.36004,1.72802 -3.744,1.728 -2.25604,2e-5 -4.94404,-0.19198 -8.064,-0.576 l 2.808,10.08 c -4e-5,0.81601 -1.70404,2.208 -5.112,4.176 -3.84003,0 -11.37602,-3.33599 -22.608,-10.008 0.47999,2.68801 0.76799,5.04001 0.864,7.056 -0.096,0.096 -1.05601,0.576 -2.88,1.44 -1.82401,0.864 -2.85601,1.296 -3.096,1.296 -0.624,0 -0.936,-0.456 -0.936,-1.368 -0.432,-4.55999 -1.056,-8.99999 -1.872,-13.32 -4.896,-3.16798 -9.07199,-6.04798 -12.528,-8.64 -3.45599,-2.63997 -5.18398,-4.24797 -5.184,-4.824 2e-5,-0.76797 1.58401,-2.08797 4.752,-3.96 l 0.216,-0.144 c 3.26401,1.53603 6.48,2.88003 9.648,4.032 -2.736,-10.41596 -4.104,-17.49595 -4.104,-21.239995 0,-1.679952 0.192,-2.99995 0.576,-3.96 0.096,-0.143949 1.152,-0.815949 3.168,-2.016 2.016,-1.199946 3.168,-1.799946 3.456,-1.8 0.192,5.4e-5 0.288,0.168054 0.288,0.504" - style="font-size:72px" - id="path2996" - inkscape:connector-curvature="0" /> - <path - d="m 252.92404,126.35531 c 0.14399,-0.28798 1.43999,-0.43198 3.888,-0.432 2.49598,2e-5 3.74398,0.36002 3.744,1.08 -2e-5,0.14402 -0.14402,0.43202 -0.432,0.864 -1.68002,2.30402 -2.52001,4.70402 -2.52,7.2 -10e-6,2.49601 0.57598,4.56001 1.728,6.192 1.19998,1.58401 2.71198,2.37601 4.536,2.376 2.97598,1e-5 5.99997,-2.11199 9.072,-6.336 l 0.504,0.864 c -3.74403,5.95201 -7.87202,8.928 -12.384,8.928 -3.40801,0 -6.02401,-1.752 -7.848,-5.256 -0.76801,1.15201 -2.01601,2.23201 -3.744,3.24 -1.728,1.008 -3.36,1.512 -4.896,1.512 -4.176,0 -6.264,-1.752 -6.264,-5.256 0,-2.73599 1.152,-5.59199 3.456,-8.568 2.352,-3.02398 4.656,-4.53598 6.912,-4.536 0.19199,2e-5 0.28799,0.072 0.288,0.216 -1e-5,0.14402 -0.096,0.31202 -0.288,0.504 -1.008,0.52802 -1.872,1.63202 -2.592,3.312 -0.672,1.63202 -1.008,3.31201 -1.008,5.04 0,3.50401 1.344,5.25601 4.032,5.256 0.76799,1e-5 1.48799,-0.19199 2.16,-0.576 0.71999,-0.43199 1.15199,-1.03199 1.296,-1.8 -0.62401,-1.67999 -0.93601,-3.43199 -0.936,-5.256 -1e-5,-1.82398 0.072,-3.35998 0.216,-4.608 0.38399,-2.63998 0.74399,-3.95998 1.08,-3.96" - style="font-size:72px" - id="path2998" - inkscape:connector-curvature="0" /> - <path - d="m 294.68629,137.29931 0.504,0.864 c -2.01602,3.21601 -4.44002,5.66401 -7.272,7.344 -2.83201,1.728 -5.52001,2.592 -8.064,2.592 -5.136,0 -8.544,-2.208 -10.224,-6.624 10e-6,-0.23999 0.55201,-1.03199 1.656,-2.376 1.104,-1.34399 1.824,-2.01599 2.16,-2.016 0.384,10e-6 0.6,0.12001 0.648,0.36 0.288,1.53601 1.08,3.16801 2.376,4.896 1.344,1.72801 2.568,2.592 3.672,2.592 1.72799,0 2.61599,-0.47999 2.664,-1.44 -10e-6,-1.48799 -1.75201,-3.74399 -5.256,-6.768 -1.296,-1.15199 -2.496,-2.61598 -3.6,-4.392 -1.056,-1.82398 -1.584,-3.69598 -1.584,-5.616 0,-0.38398 0.072,-0.64798 0.216,-0.792 2.112,-1.91997 3.504,-2.87997 4.176,-2.88 0.528,3e-5 0.792,0.40803 0.792,1.224 0.048,1.77602 0.792,3.62402 2.232,5.544 1.48799,1.87202 2.92799,3.67202 4.32,5.4 1.43999,1.72801 2.15999,3.45601 2.16,5.184 -1e-5,1.68001 -0.84001,3.19201 -2.52,4.536 3.93599,-0.096 7.58398,-2.63999 10.944,-7.632" - style="font-size:72px" - id="path3000" - inkscape:connector-curvature="0" /> - <path - d="m 297.54717,110.51531 c 0.76799,22.56002 4.24799,33.84001 10.44,33.84 2.63998,1e-5 5.80798,-2.35199 9.504,-7.056 l 0.504,0.864 c -4.51202,6.72 -8.83202,10.08 -12.96,10.08 -4.08001,0 -7.39201,-3.12 -9.936,-9.36 -2.544,-6.28798 -3.888,-14.63997 -4.032,-25.056 0,0 -0.34643,-5.07125 0,-4.827 0.096,-3.64796 0.264,-5.22895 0.504,-8.493 0,-0.43195 0.216,-0.71995 0.648,-0.863995 2.88,-1.151954 4.488,-1.727953 4.824,-1.728 0.384,4.7e-5 0.57599,0.216047 0.576,0.648 -0.096,2.400045 -0.14401,4.584045 -0.144,6.551995" - style="font-size:72px" - id="path3002" - inkscape:connector-curvature="0" - sodipodi:nodetypes="csccscccccccc" /> - <path - d="m 332.78442,168.97931 c -2e-5,3.98398 1.17598,7.72797 3.528,11.232 2.35198,3.50397 4.53597,5.25596 6.552,5.256 1.72797,-4e-5 2.59197,-1.53603 2.592,-4.608 -3e-5,-2.25603 -0.84003,-5.71203 -2.52,-10.368 -0.62403,-1.72802 -1.56003,-4.29602 -2.808,-7.704 -1.24802,-3.36001 -2.23202,-6.07201 -2.952,-8.136 -2.92802,4.46399 -4.39202,9.23999 -4.392,14.328 m 15.84,5.544 c -3e-5,4.70397 -0.79203,8.20797 -2.376,10.512 -1.58403,2.35196 -3.60003,3.52796 -6.048,3.528 -3.12002,-4e-5 -6.00002,-1.68004 -8.64,-5.04 -2.59201,-3.31203 -3.88801,-7.44003 -3.888,-12.384 0.33599,-3.40802 1.24799,-6.55201 2.736,-9.432 1.53598,-2.88001 3.57598,-5.85601 6.12,-8.928 -1.63202,-4.464 -2.76002,-7.99199 -3.384,-10.584 -2.06402,2.64 -4.44001,3.96 -7.128,3.96 -2.68801,0 -5.04001,-1.36799 -7.056,-4.104 -2.016,-2.73599 -3.024,-6.67199 -3.024,-11.808 0,-0.52798 0.384,-0.88798 1.152,-1.08 2.304,-0.47998 3.62399,-0.71998 3.96,-0.72 0.57599,2e-5 0.86399,0.28802 0.864,0.864 -10e-6,4.36802 0.98399,7.80001 2.952,10.296 1.24799,1.53601 2.80799,2.30401 4.68,2.304 1.00798,1e-5 2.06398,-0.45599 3.168,-1.368 -0.72002,-3.21599 -1.08002,-5.90398 -1.08,-8.064 -2e-5,-2.20798 0.50398,-3.81598 1.512,-4.824 2.06398,-1.19998 3.21598,-1.79998 3.456,-1.8 0.47998,2e-5 0.71998,0.36002 0.72,1.08 -2e-5,5.23202 0.95998,10.75201 2.88,16.56 l 1.224,3.816 c 3.59997,-3.88799 6.33597,-7.22399 8.208,-10.008 l 0.504,0.864 c -1.15203,1.82401 -2.20803,3.31201 -3.168,4.464 -0.96003,1.15201 -1.99203,2.352 -3.096,3.6 -1.05603,1.248 -1.72803,2.04 -2.016,2.376 3.50397,10.03199 5.42397,15.91199 5.76,17.64 0.67197,3.40798 1.00797,6.16798 1.008,8.28" - style="font-size:72px" - id="path3004" - inkscape:connector-curvature="0" /> - <path - d="m 353.24817,99.139315 c -1e-5,4.608045 2.73599,8.904035 8.208,12.887995 2.54398,-6.52796 3.81598,-11.71195 3.816,-15.551995 -2e-5,-1.67995 -0.55202,-3.239948 -1.656,-4.68 -1.10401,-1.439946 -2.35201,-2.159945 -3.744,-2.16 -1.34401,5.5e-5 -2.56801,0.720054 -3.672,2.16 -1.05601,1.440052 -1.82401,2.88005 -2.304,4.32 -0.43201,1.392047 -0.64801,2.400046 -0.648,3.024 m -9.36,46.943995 c -0.336,0.336 -0.624,0.504 -0.864,0.504 -0.384,0 -0.57599,-0.192 -0.576,-0.576 10e-6,-0.384 0.096,-0.696 0.288,-0.936 2.16,-2.39999 4.704,-6.02399 7.632,-10.872 2.92799,-4.84798 5.61599,-9.88797 8.064,-15.12 -6.144,-4.27197 -9.216,-8.63996 -9.216,-13.104 0,-2.97595 0.696,-5.99995 2.088,-9.071995 1.43999,-3.071949 3.33599,-5.615946 5.688,-7.632 2.39999,-2.015942 4.67999,-3.023941 6.84,-3.024 2.20798,5.9e-5 3.69598,0.528058 4.464,1.584 0.81598,1.008056 1.22398,2.496054 1.224,4.464 -2e-5,3.696049 -2.23202,10.608045 -6.696,20.735995 1.58398,1.05604 3.69598,2.35203 6.336,3.888 2.68798,1.48803 4.96797,2.78403 6.84,3.888 1.91997,1.10403 3.83997,2.37603 5.76,3.816 3.93596,3.02402 5.90396,6.31202 5.904,9.864 -4e-5,3.50401 -1.82404,6.79201 -5.472,9.864 -3.64803,3.024 -7.34403,4.536 -11.088,4.536 -5.90402,0 -11.16001,-3.072 -15.768,-9.216 -0.52801,-0.71999 -0.79201,-1.31999 -0.792,-1.8 -1e-5,-0.52799 0.59999,-1.27199 1.8,-2.232 1.19999,-1.00798 2.13599,-1.51198 2.808,-1.512 0.14399,2e-5 0.26399,0.072 0.36,0.216 1.29599,2.25601 3.62398,4.65601 6.984,7.2 3.35998,2.54401 6.64797,3.816 9.864,3.816 3.98397,-0.288 5.97597,-2.25599 5.976,-5.904 -3e-5,-3.07199 -1.75203,-5.95198 -5.256,-8.64 -2.59203,-1.96798 -5.78402,-4.03198 -9.576,-6.192 -3.79202,-2.20797 -6.40801,-3.79197 -7.848,-4.752 -5.80801,12.19202 -11.064,20.92801 -15.768,26.208" - style="font-size:72px" - id="path3006" - inkscape:connector-curvature="0" /> - <path - d="m 405.29629,127.93931 c -10e-6,-1.43998 -0.91201,-2.15998 -2.736,-2.16 -1.82401,2e-5 -3.336,0.81602 -4.536,2.448 -1.2,1.63202 -1.8,3.72002 -1.8,6.264 0,2.49601 0.96,4.77601 2.88,6.84 1.96799,2.01601 4.89599,3.02401 8.784,3.024 2.44798,1e-5 4.82398,-0.57599 7.128,-1.728 2.35198,-1.19999 4.34398,-2.97599 5.976,-5.328 l 0.504,0.864 c -1.72802,3.12001 -4.39202,5.54401 -7.992,7.272 -3.55202,1.728 -7.15201,2.592 -10.8,2.592 -3.6,0 -6.552,-0.768 -8.856,-2.304 -2.256,-1.48799 -3.384,-3.64799 -3.384,-6.48 0,-3.59999 1.416,-7.00798 4.248,-10.224 2.88,-3.21598 6.45599,-4.82397 10.728,-4.824 1.48799,3e-5 2.59199,0.38403 3.312,1.152 0.71999,0.72002 1.07999,1.70402 1.08,2.952 -10e-6,1.20002 -0.43201,2.40002 -1.296,3.6 -0.86401,1.15202 -1.84801,1.72802 -2.952,1.728 -0.57601,2e-5 -1.17601,-0.21598 -1.8,-0.648 -0.57601,-0.47998 -0.86401,-0.86398 -0.864,-1.152 -1e-5,-0.33598 0.11999,-0.59998 0.36,-0.792 0.23999,-0.23998 0.52799,-0.45598 0.864,-0.648 0.76799,-0.38398 1.15199,-1.19998 1.152,-2.448" - style="font-size:72px" - id="path3008" - inkscape:connector-curvature="0" /> - <path - d="m 426.27304,133.33931 -1.368,-0.072 c -0.48,2e-5 -0.816,0.21602 -1.008,0.648 -0.576,1.44001 -1.488,3.07201 -2.736,4.896 l -0.576,-0.792 c 0.96,-1.29599 1.704,-2.92799 2.232,-4.896 0,-0.38398 -0.168,-0.64798 -0.504,-0.792 -2.16,-0.71998 -3.24,-2.61598 -3.24,-5.688 0,-0.67198 0.576,-1.29598 1.728,-1.872 1.152,-0.62397 2.112,-0.93597 2.88,-0.936 0.768,3e-5 1.152,0.33603 1.152,1.008 0,3.60002 1.68,5.40002 5.04,5.4 0.81599,2e-5 1.46399,-0.072 1.944,-0.216 0.52799,-0.19198 0.81599,-0.28798 0.864,-0.288 0.47999,2e-5 0.71999,0.36002 0.72,1.08 -1e-5,0.67202 -0.19201,1.15202 -0.576,1.44 -0.33601,0.24002 -0.72001,0.79202 -1.152,1.656 -0.43201,0.81602 -0.64801,1.77601 -0.648,2.88 -10e-6,2.16001 0.62399,3.86401 1.872,5.112 1.29599,1.20001 2.87999,1.80001 4.752,1.8 1.91998,1e-5 3.81598,-0.55199 5.688,-1.656 1.87198,-1.10399 3.50398,-2.68799 4.896,-4.752 l 0.504,0.864 c -1.68002,2.92801 -4.00802,5.28001 -6.984,7.056 -2.97601,1.776 -5.64001,2.664 -7.992,2.664 -4.80001,0 -7.2,-2.184 -7.2,-6.552 0,-0.81599 0.288,-1.91999 0.864,-3.312 0.576,-1.39199 1.152,-2.56799 1.728,-3.528 l 0.864,-1.44 c -1e-5,-0.19198 -0.072,-0.28798 -0.216,-0.288 -1.536,0.38402 -2.712,0.57602 -3.528,0.576" - style="font-size:72px" - id="path3010" - inkscape:connector-curvature="0" /> - <path - d="m 448.15429,129.09131 c -0.24,2.01602 -0.36,3.67202 -0.36,4.968 0,4.56001 0.864,8.11201 2.592,10.656 1.776,2.496 3.912,3.744 6.408,3.744 2.54399,0 5.06399,-0.888 7.56,-2.664 2.49598,-1.72799 4.82398,-4.27199 6.984,-7.632 l -0.504,-0.864 c -3.74402,5.13601 -7.20001,7.704 -10.368,7.704 -2.01601,0 -3.64801,-1.07999 -4.896,-3.24 -1.248,-2.15999 -1.872,-5.08799 -1.872,-8.784 0,-1.91998 0.168,-3.86398 0.504,-5.832 0,-0.43198 -0.192,-0.64798 -0.576,-0.648 -0.336,2e-5 -1.944,0.57602 -4.824,1.728 -0.432,0.14402 -0.648,0.43202 -0.648,0.864 m 5.976,-15.48 c 0.768,0.81604 1.152,1.80003 1.152,2.952 0,1.15203 -0.384,2.13603 -1.152,2.952 -0.72,0.81603 -1.608,1.22403 -2.664,1.224 -1.008,3e-5 -1.872,-0.40797 -2.592,-1.224 -0.72,-0.81597 -1.08,-1.79997 -1.08,-2.952 0,-1.15197 0.36,-2.13596 1.08,-2.952 0.72,-0.81596 1.584,-1.22396 2.592,-1.224 1.056,4e-5 1.944,0.40804 2.664,1.224" - style="font-size:72px" - id="path3012" - inkscape:connector-curvature="0" /> - <path - d="m 485.05429,131.61131 c -0.57601,2e-5 -0.86401,0.57602 -0.864,1.728 -1e-5,1.15202 0.45599,2.52001 1.368,4.104 0.95999,1.53601 2.15999,2.76001 3.6,3.672 0.048,-0.23999 0.072,-0.59999 0.072,-1.08 -2e-5,-2.11199 -0.40802,-4.03199 -1.224,-5.76 -0.81601,-1.77598 -1.80001,-2.66398 -2.952,-2.664 m -13.464,-24.912 c 0,9.60003 1.104,17.76003 3.312,24.48 2.16,-5.90398 3.24,-13.79997 3.24,-23.688 0,-4.27195 -0.264,-7.79995 -0.792,-10.583995 -0.528,-2.783949 -1.248,-4.175948 -2.16,-4.176 -1.2,5.2e-5 -2.112,1.296051 -2.736,3.888 -0.576,2.544046 -0.864,5.904045 -0.864,10.079995 m 11.448,-6.839995 c -1e-5,4.704045 -0.81601,10.320035 -2.448,16.847995 -1.58401,6.52803 -3.312,11.83202 -5.184,15.912 1.488,4.22401 3.192,7.48801 5.112,9.792 1.91999,2.25601 3.67199,3.384 5.256,3.384 1.58399,0 2.63999,-0.984 3.168,-2.952 -2.16001,-0.95999 -4.00801,-2.49599 -5.544,-4.608 -1.48801,-2.11199 -2.23201,-4.22398 -2.232,-6.336 -1e-5,-1.10398 0.26399,-1.99198 0.792,-2.664 0.52799,-0.67198 1.29599,-1.00798 2.304,-1.008 2.49599,2e-5 4.41598,0.96002 5.76,2.88 1.39198,1.87202 2.08798,4.12801 2.088,6.768 -2e-5,1.48801 -0.24002,2.90401 -0.72,4.248 0.47998,0.14401 1.03198,0.21601 1.656,0.216 2.63998,10e-6 4.99198,-1.67999 7.056,-5.04 l 0.576,0.72 c -2.16002,3.69601 -4.87202,5.54401 -8.136,5.544 -0.38402,1e-5 -0.96002,-0.048 -1.728,-0.144 -1.68002,3.12 -4.22401,4.68 -7.632,4.68 -3.93601,0 -7.536,-2.352 -10.8,-7.056 -1.584,-2.35199 -2.856,-5.56799 -3.816,-9.648 -1.00799,-4.12798 -1.51199,-8.71197 -1.512,-13.752 1e-5,-5.03996 0.43201,-9.59996 1.296,-13.68 0.816,-4.07995 2.064,-7.439947 3.744,-10.079995 1.68,-2.639946 3.6,-3.959945 5.76,-3.96 3.45599,5.5e-5 5.18399,3.312052 5.184,9.936" - style="font-size:72px" - id="path3014" - inkscape:connector-curvature="0" /> - <path - d="m 507.60829,123.90731 0.072,-0.936 c 0,-0.57597 -0.648,-0.86397 -1.944,-0.864 -1.296,3e-5 -2.472,0.38403 -3.528,1.152 -1.008,0.76803 -1.512,1.80002 -1.512,3.096 0,2.30402 1.656,3.45602 4.968,3.456 0.528,2e-5 1.056,-0.072 1.584,-0.216 0.576,-0.19198 1.15199,-0.28798 1.728,-0.288 0.57599,2e-5 0.86399,0.19202 0.864,0.576 -10e-6,0.048 -0.19201,0.16802 -0.576,0.36 -0.38401,0.14402 -0.86401,0.38402 -1.44,0.72 -0.528,0.33602 -1.08,0.76802 -1.656,1.296 -1.344,1.24802 -2.016,2.95201 -2.016,5.112 0,2.16001 0.648,3.81601 1.944,4.968 1.296,1.10401 2.97599,1.65601 5.04,1.656 2.06399,1e-5 4.17599,-0.59999 6.336,-1.8 2.15998,-1.19999 3.91198,-2.83199 5.256,-4.896 l 0.504,0.864 c -1.82402,3.16801 -4.36802,5.66401 -7.632,7.488 -3.21601,1.872 -6.16801,2.808 -8.856,2.808 -2.64,0 -4.68,-0.552 -6.12,-1.656 -1.392,-1.104 -2.088,-2.51999 -2.088,-4.248 0,-1.77599 0.432,-3.40799 1.296,-4.896 0.864,-1.48799 1.608,-2.54399 2.232,-3.168 0.672,-0.67198 1.152,-1.12798 1.44,-1.368 0.336,-0.28798 0.504,-0.47998 0.504,-0.576 0,-0.14398 -0.024,-0.21598 -0.072,-0.216 -1.536,0.57602 -3.024,0.86402 -4.464,0.864 -2.54399,2e-5 -3.81599,-1.03198 -3.816,-3.096 10e-6,-2.78398 1.58401,-5.18398 4.752,-7.2 3.168,-2.01597 5.928,-3.02397 8.28,-3.024 2.39999,3e-5 3.59999,0.57603 3.6,1.728 -10e-6,0.72003 -0.38401,1.48803 -1.152,2.304 -0.76801,0.81603 -1.46401,1.22402 -2.088,1.224 -0.96001,2e-5 -1.44,-0.40797 -1.44,-1.224" - style="font-size:72px" - id="path3016" - inkscape:connector-curvature="0" /> - </g> - <text - xml:space="preserve" - style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Mr Bedfort;-inkscape-font-specification:Mr Bedfort" - x="280.36783" - y="13.975874" - id="text3571" - sodipodi:linespacing="125%"><tspan - sodipodi:role="line" - id="tspan3573" - x="280.36783" - y="13.975874" /></text> - <path - style="fill:#000000;fill-rule:evenodd;stroke:none" - d="m 276.75,111.61218 c -0.062,-0.10605 0.47322,-0.57025 1.59549,-1.30986 1.12227,-0.73962 2.83517,-1.74928 5.14912,-2.87634 2.31396,-1.12705 5.23317,-2.36484 8.72928,-3.58292 3.49612,-1.21809 7.57288,-2.41014 12.10282,-3.56665 5.29159,-1.356964 11.2593,-2.645671 17.8127,-3.77833 6.5534,-1.13266 13.69274,-2.107799 21.29668,-2.923166 13.6861,-1.469306 28.92628,-2.380741 45.12695,-2.564811 7.48334,-0.08532 15.17519,-0.01986 23.01544,0.228726 7.83331,0.248363 15.50876,0.670338 22.96757,1.249471 14.91973,1.157298 28.99799,2.958036 41.70319,5.435636 6.10413,1.18678 11.93104,2.505454 17.3507,4.046354 5.41967,1.54091 10.43231,3.30315 14.96468,5.26335 4.14424,1.78957 7.90575,3.80773 11.05901,6.10879 1.44224,1.04451 2.77287,2.17198 3.91991,3.37075 1.14705,1.19877 2.11104,2.4686 2.86463,3.78536 0.74331,1.30732 1.24741,2.66357 1.51149,3.98591 0.29531,1.49422 0.27601,2.91397 0.0749,4.17543 0,0 0,0 0,1e-5 -0.26193,1.58879 -0.76778,2.89966 -1.3013,3.97778 -0.53351,1.07811 -1.09803,1.92407 -1.58629,2.57643 -0.97652,1.30472 -1.62582,1.85533 -1.73197,1.77308 -0.10615,-0.0822 0.33329,-0.80192 1.06412,-2.19564 0.36541,-0.69686 0.79857,-1.56559 1.19128,-2.61631 0.39271,-1.05072 0.74828,-2.28418 0.85293,-3.69974 0,0 0,0 0,0 0.0889,-1.11521 0.017,-2.34265 -0.31561,-3.58976 -0.29254,-1.10785 -0.79826,-2.24089 -1.50136,-3.34044 -0.71275,-1.12323 -1.6256,-2.20112 -2.71732,-3.22876 -1.09172,-1.02764 -2.36285,-2.00485 -3.74912,-2.9432 -3.04492,-2.044 -6.68511,-3.81983 -10.75587,-5.43975 -4.4589,-1.77147 -9.38304,-3.35407 -14.72097,-4.73659 -5.33794,-1.38251 -11.09017,-2.56417 -17.1505,-3.64809 -12.5856,-2.243348 -26.52387,-3.873111 -41.33532,-4.948246 -7.40193,-0.536719 -15.0176,-0.935525 -22.79128,-1.181916 -7.78059,-0.246609 -15.41535,-0.331409 -22.84651,-0.284966 -16.08872,0.101187 -31.21046,0.835968 -44.80677,2.057202 -7.55887,0.679961 -14.64536,1.491799 -21.15379,2.44103 -6.50842,0.949236 -12.43928,2.034476 -17.71412,3.174876 -4.52939,0.98465 -8.58945,1.97169 -12.08459,2.97545 -3.49514,1.00376 -6.42931,2.01807 -8.78769,2.92513 -2.35838,0.90706 -4.14502,1.70014 -5.36478,2.22749 -1.21977,0.52735 -1.87573,0.78328 -1.93773,0.67723 z" - id="path3613" - inkscape:path-effect="#path-effect3615" - inkscape:original-d="M 523.375,136.98718 C 559.96543,89.767541 331.70398,79.484611 276.75,111.61218" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cc" /> - </g> -</svg>
@@ -1,82 +0,0 @@
-.todo { .mix-red-badge("todo");} -.fixme { .mix-red-badge("fixme");} -.deadline { .mix-red-badge("deadline");} -.important { .mix-red-badge("important");} -.urgent { .mix-red-badge("urgent");} -.verify { .mix-yellow-badge("verify");} -.draftcomment { .mix-green-badge("comment")} - -.red-circle {.mix-circle(@bright-red)} -.green-circle {.mix-circle(@bright-green)} -.yellow-circle {.mix-circle(@bright-yellow)} -.gray-circle {.mix-circle(@gray)} - -.star { .mix-symbol(@fa-var-star, @bright-yellow)} -.heart {.mix-symbol(@fa-var-heart, @bright-red)} -.square {.mix-symbol(@fa-var-square-o, @bright-red)} -.check {.mix-symbol(@fa-var-check-square-o, @bright-green)} -.lock {.mix-symbol(@fa-var-lock, @bright-yellow)} -.unlock {.mix-symbol(@fa-var-unlock, @bright-yellow)} -.bug {.mix-symbol(@fa-var-bug, @bright-red)} -.tag {.mix-symbol(@fa-var-tag, @bright-yellow)} -.tags {.mix-symbol(@fa-var-tags, @bright-yellow)} -.date {.mix-symbol(@fa-var-calendar, @bright-blue)} -.time {.mix-symbol(@fa-var-clock-o, @bright-blue)} -.attachment {.mix-symbol(@fa-var-paperclip, @text-color)} -.geo {.mix-symbol(@fa-var-map-marker, @bright-red)} -.danger {.mix-symbol(@fa-var-exclamation-triangle, @bright-red)} -.question {.mix-symbol(@fa-var-question-circle, @bright-blue)} -.phone {.mix-symbol(@fa-var-phone, @text-color)} -.email {.mix-symbol(@fa-var-envelope, @text-color)} -.fax {.mix-symbol(@fa-var-fax, @text-color)} -.website {.mix-symbol(@fa-var-globe, @text-color)} - -.hastyscribe { - .mix-symbol("H", @text-color, 180%); - &:before { - font-family: "HastyScribe"; - font-size: 1.8em; - margin-right: -2%; - vertical-align: middle; - } -} - -.btc {.mix-symbol(@fa-var-btc, @text-color, 90%, "")} -.eur {.mix-symbol(@fa-var-eur, @text-color, 90%, "")} -.usd {.mix-symbol(@fa-var-usd, @text-color, 90%, "")} -.gbp {.mix-symbol(@fa-var-gbp, @text-color, 90%, "")} -.jpy {.mix-symbol(@fa-var-jpy, @text-color, 90%, "")} -.inr {.mix-symbol(@fa-var-inr, @text-color, 90%, "")} -.krw {.mix-symbol(@fa-var-krw, @text-color, 90%, "")} -.rub {.mix-symbol(@fa-var-rub, @text-color, 90%, "")} -.try {.mix-symbol(@fa-var-try, @text-color, 90%, "")} - -.copy {.mix-symbol(@fa-var-copyright, @text-color)} -.reg {.mix-symbol(@fa-var-registered, @text-color)} -.tm {.mix-symbol(@fa-var-trademark, @text-color)} -.red-flag {.mix-symbol(@fa-var-flag, @bright-red)} -.green-flag {.mix-symbol(@fa-var-flag, @bright-green)} -.yellow-flag {.mix-symbol(@fa-var-flag, @bright-yellow)} -.story {.mix-symbol(@fa-var-comment, @bright-blue)} -.feature {.mix-symbol(@fa-var-check-circle, @bright-green)} -.project {.mix-symbol(@fa-var-briefcase, @dark-yellow)} -.user {.mix-symbol(@fa-var-user, @bright-blue)} -.add {.mix-symbol(@fa-var-plus-circle, @bright-green)} -.remove {.mix-symbol(@fa-var-minus-circle, @bright-red)} - -.html5 {.mix-symbol(@fa-var-html5, @bright-red)} -.css3 {.mix-symbol(@fa-var-css3, @bright-blue)} -.apple {.mix-symbol(@fa-var-apple, @gray-a)} -.windows {.mix-symbol(@fa-var-windows, @bright-blue)} -.linux {.mix-symbol(@fa-var-linux, #000)} -.android {.mix-symbol(@fa-var-android, #A4C739)} - -.idea {.mix-symbol(@fa-var-lightbulb-o, @bright-yellow)} -.sticky {.mix-symbol(@fa-var-sticky-note, @bright-yellow)} -.link {.mix-symbol(@fa-var-link, @bright-blue)} - -.chrome {.mix-symbol(@fa-var-chrome, @bright-yellow)} -.firefox {.mix-symbol(@fa-var-firefox, @bright-orange)} -.ie {.mix-symbol(@fa-var-internet-explorer, @bright-blue)} -.opera {.mix-symbol(@fa-var-opera, @bright-red)} -.safari {.mix-symbol(@fa-var-safari, @bright-blue)}
@@ -1,43 +0,0 @@
-.note { .mix-titled-block(@lighter-blue, @dark-blue, @light-blue, @fa-var-thumb-tack);} -.tip {.mix-titled-block(@lighter-green, @dark-green, @light-green, @fa-var-check-circle);} -.warning {.mix-titled-block(@lighter-yellow, @dark-yellow, @light-yellow, @fa-var-exclamation-triangle);} - -.sidebar {.mix-titled-block(@light-gray, @gray-5, @light-gray, @fa-var-info-circle);} -.output {.mix-box(@light-gray, @gray-5, @light-gray);} - -.terminal { - .mix-box(@gray-2, @gray-e, @gray-c); - padding: 0 3px; - border: 2px solid @gray-9; - border-top: 10px solid @gray-9; - p, p:first-child { - margin-top: 0; - margin-bottom: 0; - text-shadow: none; - font-weight: normal; - font-family: @monospace-font; - font-size: 85%; - color: @gray-e; - &:before { - font-family: @monospace-font; - font-style: normal; - font-weight: bold; - color: @dark-green; - content: "$ "; - } - } -} - -.terminal-su { - .terminal; - p, p:first-child { - &:before { - color: @bright-red; - content: "# "; - } - } -} - -div .terminal { - margin: 2px auto; -}
@@ -1,200 +0,0 @@
-/* Lists */ - -ul, ol { - padding-left: 30px; -} - -li p { - margin: 0 auto; -} - -.unstyled li { - list-style-type: none; -} - -dl { - - dt { - font-weight: bold; - } - - dd { - padding: 0 0 0.2em 0; - } -} - -/* Headings */ - -h1, h2, h3, h4, h5, h6 { - color: @heading-color; - border-bottom: 1px solid @gray-d; -} - -h1 { - text-align: center; -} - -/* Blocks */ - -blockquote { - border-left: 3px solid #dedede; - padding: 0px 10px; - margin: 10px 0; - font-style: italic; -} - -pre { - .mix-box(@light-gray, @dark-gray, @gray-c); - margin: auto; - font-family: @monospace-font; - padding: 0; - code { - box-shadow: none; - background: @light-gray; - padding: 0px 2px 0 2px; - border: none; - line-height: 1.2em; - } - .hljs { - padding: 0 3px; - } -} - -.responsive { - @media screen and (max-width: 639px) { - width: 100%; - overflow-y: hidden; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - td { - white-space: nowrap; - } - } -} - -table { - border-collapse:collapse; - margin: 15px auto; - border-spacing:0; - empty-cells:show; - thead { - background: @light-gray; - color:#222; - text-align:left; - vertical-align:bottom; - } - td, th { - background-color:transparent; - border:1px solid @gray; - font-size:inherit; - margin:0; - overflow:visible; - padding:6px 12px; - } -} - -address { - font-style: italic; - color: @gray; -} - -hr { - border: 0; - height: 1px; - background-image: -webkit-linear-gradient(left, rgba(99,99,99,0), rgba(99,99,99,0.75), rgba(99,99,99,0)); - background-image: -moz-linear-gradient(left, rgba(99,99,99,0), rgba(99,99,99,0.75), rgba(99,99,99,0)); - background-image: -ms-linear-gradient(left, rgba(99,99,99,0), rgba(99,99,99,0.75), rgba(99,99,99,0)); - background-image: -o-linear-gradient(left, rgba(99,99,99,0), rgba(99,99,99,0.75), rgba(99,99,99,0)); -} - -.center { - margin: auto; - text-align: center; -} - -/* Inline */ - -[class^="fa-"] { - font-family: "FontAwesome"; -} - -code, span.code { - .mix-inline-box(@light-gray, @dark-gray, @light-gray); - margin: 2px 0px; - font-family: @monospace-font; - font-size: 85%; - .mix-hyphens(none); -} - -kbd, span.kbd { - .mix-inline-box(@light-gray, @dark-gray, @gray); - font-family: @monospace-font; - font-weight: bold; - border-right: 1px solid @gray-b; - border-bottom: 1px solid @gray-b; - line-height: 1em; - font-size: 80%; - .mix-hyphens(none); -} - -mark, span.mark { - padding: 0 1px; - color: @gray-2; -} - -abbr, span.abbr { - font-variant: small-caps; - font-weight: bolder; - .mix-hyphens(none); - &:hover { - cursor: help; - } -} - -samp, span.samp { - font-size: 90%; - .mix-inline-box(@light-gray, @dark-gray, @light-gray); - .mix-hyphens(none); -} - -var, span.var { - font-size: 90%; - font-family: @monospace-font; - font-weight: bold; - font-style: normal; - .mix-hyphens(none); -} - -cite, span.cite { - font-weight: bold; - font-style: italic; - .mix-hyphens(none); -} - -q, span.q { - font-style: italic; - color: @gray-6; - .mix-hyphens(none); -} - -span.tt, span.cmd, -span.opt, span.arg, span.kwd, -span.ext, span.file, span.dir { - font-size: 90%; - font-family: @monospace-font; - .mix-hyphens(none); -} - -span.ext, span.kwd { - font-weight: bold; -} - -/* Links */ - -a,a:visited { - color: @link-color; - text-decoration:none; - &:hover { - text-decoration:underline; - } -}
@@ -1,677 +0,0 @@
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ - -.@{fa-css-prefix}-glass:before { content: @fa-var-glass; } -.@{fa-css-prefix}-music:before { content: @fa-var-music; } -.@{fa-css-prefix}-search:before { content: @fa-var-search; } -.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope-o; } -.@{fa-css-prefix}-heart:before { content: @fa-var-heart; } -.@{fa-css-prefix}-star:before { content: @fa-var-star; } -.@{fa-css-prefix}-star-o:before { content: @fa-var-star-o; } -.@{fa-css-prefix}-user:before { content: @fa-var-user; } -.@{fa-css-prefix}-film:before { content: @fa-var-film; } -.@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; } -.@{fa-css-prefix}-th:before { content: @fa-var-th; } -.@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; } -.@{fa-css-prefix}-check:before { content: @fa-var-check; } -.@{fa-css-prefix}-remove:before, -.@{fa-css-prefix}-close:before, -.@{fa-css-prefix}-times:before { content: @fa-var-times; } -.@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; } -.@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; } -.@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; } -.@{fa-css-prefix}-signal:before { content: @fa-var-signal; } -.@{fa-css-prefix}-gear:before, -.@{fa-css-prefix}-cog:before { content: @fa-var-cog; } -.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-o; } -.@{fa-css-prefix}-home:before { content: @fa-var-home; } -.@{fa-css-prefix}-file-o:before { content: @fa-var-file-o; } -.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock-o; } -.@{fa-css-prefix}-road:before { content: @fa-var-road; } -.@{fa-css-prefix}-download:before { content: @fa-var-download; } -.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-circle-o-down; } -.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-circle-o-up; } -.@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; } -.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle-o; } -.@{fa-css-prefix}-rotate-right:before, -.@{fa-css-prefix}-repeat:before { content: @fa-var-repeat; } -.@{fa-css-prefix}-refresh:before { content: @fa-var-refresh; } -.@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; } -.@{fa-css-prefix}-lock:before { content: @fa-var-lock; } -.@{fa-css-prefix}-flag:before { content: @fa-var-flag; } -.@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; } -.@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; } -.@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; } -.@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; } -.@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; } -.@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; } -.@{fa-css-prefix}-tag:before { content: @fa-var-tag; } -.@{fa-css-prefix}-tags:before { content: @fa-var-tags; } -.@{fa-css-prefix}-book:before { content: @fa-var-book; } -.@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; } -.@{fa-css-prefix}-print:before { content: @fa-var-print; } -.@{fa-css-prefix}-camera:before { content: @fa-var-camera; } -.@{fa-css-prefix}-font:before { content: @fa-var-font; } -.@{fa-css-prefix}-bold:before { content: @fa-var-bold; } -.@{fa-css-prefix}-italic:before { content: @fa-var-italic; } -.@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; } -.@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; } -.@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; } -.@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; } -.@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; } -.@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; } -.@{fa-css-prefix}-list:before { content: @fa-var-list; } -.@{fa-css-prefix}-dedent:before, -.@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; } -.@{fa-css-prefix}-indent:before { content: @fa-var-indent; } -.@{fa-css-prefix}-video-camera:before { content: @fa-var-video-camera; } -.@{fa-css-prefix}-photo:before, -.@{fa-css-prefix}-image:before, -.@{fa-css-prefix}-picture-o:before { content: @fa-var-picture-o; } -.@{fa-css-prefix}-pencil:before { content: @fa-var-pencil; } -.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; } -.@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; } -.@{fa-css-prefix}-tint:before { content: @fa-var-tint; } -.@{fa-css-prefix}-edit:before, -.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pencil-square-o; } -.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square-o; } -.@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square-o; } -.@{fa-css-prefix}-arrows:before { content: @fa-var-arrows; } -.@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; } -.@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; } -.@{fa-css-prefix}-backward:before { content: @fa-var-backward; } -.@{fa-css-prefix}-play:before { content: @fa-var-play; } -.@{fa-css-prefix}-pause:before { content: @fa-var-pause; } -.@{fa-css-prefix}-stop:before { content: @fa-var-stop; } -.@{fa-css-prefix}-forward:before { content: @fa-var-forward; } -.@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; } -.@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; } -.@{fa-css-prefix}-eject:before { content: @fa-var-eject; } -.@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; } -.@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; } -.@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; } -.@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; } -.@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; } -.@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; } -.@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; } -.@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; } -.@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; } -.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle-o; } -.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle-o; } -.@{fa-css-prefix}-ban:before { content: @fa-var-ban; } -.@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; } -.@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; } -.@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; } -.@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; } -.@{fa-css-prefix}-mail-forward:before, -.@{fa-css-prefix}-share:before { content: @fa-var-share; } -.@{fa-css-prefix}-expand:before { content: @fa-var-expand; } -.@{fa-css-prefix}-compress:before { content: @fa-var-compress; } -.@{fa-css-prefix}-plus:before { content: @fa-var-plus; } -.@{fa-css-prefix}-minus:before { content: @fa-var-minus; } -.@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; } -.@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; } -.@{fa-css-prefix}-gift:before { content: @fa-var-gift; } -.@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; } -.@{fa-css-prefix}-fire:before { content: @fa-var-fire; } -.@{fa-css-prefix}-eye:before { content: @fa-var-eye; } -.@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; } -.@{fa-css-prefix}-warning:before, -.@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; } -.@{fa-css-prefix}-plane:before { content: @fa-var-plane; } -.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; } -.@{fa-css-prefix}-random:before { content: @fa-var-random; } -.@{fa-css-prefix}-comment:before { content: @fa-var-comment; } -.@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; } -.@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; } -.@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; } -.@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; } -.@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; } -.@{fa-css-prefix}-folder:before { content: @fa-var-folder; } -.@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; } -.@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-v; } -.@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-h; } -.@{fa-css-prefix}-bar-chart-o:before, -.@{fa-css-prefix}-bar-chart:before { content: @fa-var-bar-chart; } -.@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; } -.@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; } -.@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; } -.@{fa-css-prefix}-key:before { content: @fa-var-key; } -.@{fa-css-prefix}-gears:before, -.@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; } -.@{fa-css-prefix}-comments:before { content: @fa-var-comments; } -.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-o-up; } -.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-o-down; } -.@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; } -.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart-o; } -.@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out; } -.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin-square; } -.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumb-tack; } -.@{fa-css-prefix}-external-link:before { content: @fa-var-external-link; } -.@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in; } -.@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; } -.@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; } -.@{fa-css-prefix}-upload:before { content: @fa-var-upload; } -.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon-o; } -.@{fa-css-prefix}-phone:before { content: @fa-var-phone; } -.@{fa-css-prefix}-square-o:before { content: @fa-var-square-o; } -.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark-o; } -.@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; } -.@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; } -.@{fa-css-prefix}-facebook-f:before, -.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; } -.@{fa-css-prefix}-github:before { content: @fa-var-github; } -.@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; } -.@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; } -.@{fa-css-prefix}-feed:before, -.@{fa-css-prefix}-rss:before { content: @fa-var-rss; } -.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; } -.@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; } -.@{fa-css-prefix}-bell:before { content: @fa-var-bell; } -.@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; } -.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-o-right; } -.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-o-left; } -.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-o-up; } -.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-o-down; } -.@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; } -.@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; } -.@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; } -.@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; } -.@{fa-css-prefix}-globe:before { content: @fa-var-globe; } -.@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; } -.@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; } -.@{fa-css-prefix}-filter:before { content: @fa-var-filter; } -.@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; } -.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; } -.@{fa-css-prefix}-group:before, -.@{fa-css-prefix}-users:before { content: @fa-var-users; } -.@{fa-css-prefix}-chain:before, -.@{fa-css-prefix}-link:before { content: @fa-var-link; } -.@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; } -.@{fa-css-prefix}-flask:before { content: @fa-var-flask; } -.@{fa-css-prefix}-cut:before, -.@{fa-css-prefix}-scissors:before { content: @fa-var-scissors; } -.@{fa-css-prefix}-copy:before, -.@{fa-css-prefix}-files-o:before { content: @fa-var-files-o; } -.@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; } -.@{fa-css-prefix}-save:before, -.@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-o; } -.@{fa-css-prefix}-square:before { content: @fa-var-square; } -.@{fa-css-prefix}-navicon:before, -.@{fa-css-prefix}-reorder:before, -.@{fa-css-prefix}-bars:before { content: @fa-var-bars; } -.@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; } -.@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; } -.@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; } -.@{fa-css-prefix}-underline:before { content: @fa-var-underline; } -.@{fa-css-prefix}-table:before { content: @fa-var-table; } -.@{fa-css-prefix}-magic:before { content: @fa-var-magic; } -.@{fa-css-prefix}-truck:before { content: @fa-var-truck; } -.@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; } -.@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; } -.@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; } -.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; } -.@{fa-css-prefix}-money:before { content: @fa-var-money; } -.@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; } -.@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; } -.@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; } -.@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; } -.@{fa-css-prefix}-columns:before { content: @fa-var-columns; } -.@{fa-css-prefix}-unsorted:before, -.@{fa-css-prefix}-sort:before { content: @fa-var-sort; } -.@{fa-css-prefix}-sort-down:before, -.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-desc; } -.@{fa-css-prefix}-sort-up:before, -.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-asc; } -.@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; } -.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; } -.@{fa-css-prefix}-rotate-left:before, -.@{fa-css-prefix}-undo:before { content: @fa-var-undo; } -.@{fa-css-prefix}-legal:before, -.@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; } -.@{fa-css-prefix}-dashboard:before, -.@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer; } -.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment-o; } -.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments-o; } -.@{fa-css-prefix}-flash:before, -.@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; } -.@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; } -.@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; } -.@{fa-css-prefix}-paste:before, -.@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; } -.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb-o; } -.@{fa-css-prefix}-exchange:before { content: @fa-var-exchange; } -.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download; } -.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload; } -.@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; } -.@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; } -.@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; } -.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell-o; } -.@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; } -.@{fa-css-prefix}-cutlery:before { content: @fa-var-cutlery; } -.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-text-o; } -.@{fa-css-prefix}-building-o:before { content: @fa-var-building-o; } -.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital-o; } -.@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; } -.@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; } -.@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; } -.@{fa-css-prefix}-beer:before { content: @fa-var-beer; } -.@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; } -.@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; } -.@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; } -.@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; } -.@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; } -.@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; } -.@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; } -.@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; } -.@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; } -.@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; } -.@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; } -.@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; } -.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; } -.@{fa-css-prefix}-mobile-phone:before, -.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; } -.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle-o; } -.@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; } -.@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; } -.@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; } -.@{fa-css-prefix}-circle:before { content: @fa-var-circle; } -.@{fa-css-prefix}-mail-reply:before, -.@{fa-css-prefix}-reply:before { content: @fa-var-reply; } -.@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; } -.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder-o; } -.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open-o; } -.@{fa-css-prefix}-smile-o:before { content: @fa-var-smile-o; } -.@{fa-css-prefix}-frown-o:before { content: @fa-var-frown-o; } -.@{fa-css-prefix}-meh-o:before { content: @fa-var-meh-o; } -.@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; } -.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard-o; } -.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag-o; } -.@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; } -.@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; } -.@{fa-css-prefix}-code:before { content: @fa-var-code; } -.@{fa-css-prefix}-mail-reply-all:before, -.@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; } -.@{fa-css-prefix}-star-half-empty:before, -.@{fa-css-prefix}-star-half-full:before, -.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-o; } -.@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; } -.@{fa-css-prefix}-crop:before { content: @fa-var-crop; } -.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-fork; } -.@{fa-css-prefix}-unlink:before, -.@{fa-css-prefix}-chain-broken:before { content: @fa-var-chain-broken; } -.@{fa-css-prefix}-question:before { content: @fa-var-question; } -.@{fa-css-prefix}-info:before { content: @fa-var-info; } -.@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; } -.@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; } -.@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; } -.@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; } -.@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; } -.@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; } -.@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; } -.@{fa-css-prefix}-shield:before { content: @fa-var-shield; } -.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar-o; } -.@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; } -.@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; } -.@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; } -.@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; } -.@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; } -.@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; } -.@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; } -.@{fa-css-prefix}-html5:before { content: @fa-var-html5; } -.@{fa-css-prefix}-css3:before { content: @fa-var-css3; } -.@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; } -.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; } -.@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; } -.@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; } -.@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; } -.@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; } -.@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; } -.@{fa-css-prefix}-ticket:before { content: @fa-var-ticket; } -.@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; } -.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square-o; } -.@{fa-css-prefix}-level-up:before { content: @fa-var-level-up; } -.@{fa-css-prefix}-level-down:before { content: @fa-var-level-down; } -.@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; } -.@{fa-css-prefix}-pencil-square:before { content: @fa-var-pencil-square; } -.@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square; } -.@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; } -.@{fa-css-prefix}-compass:before { content: @fa-var-compass; } -.@{fa-css-prefix}-toggle-down:before, -.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-o-down; } -.@{fa-css-prefix}-toggle-up:before, -.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-o-up; } -.@{fa-css-prefix}-toggle-right:before, -.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-o-right; } -.@{fa-css-prefix}-euro:before, -.@{fa-css-prefix}-eur:before { content: @fa-var-eur; } -.@{fa-css-prefix}-gbp:before { content: @fa-var-gbp; } -.@{fa-css-prefix}-dollar:before, -.@{fa-css-prefix}-usd:before { content: @fa-var-usd; } -.@{fa-css-prefix}-rupee:before, -.@{fa-css-prefix}-inr:before { content: @fa-var-inr; } -.@{fa-css-prefix}-cny:before, -.@{fa-css-prefix}-rmb:before, -.@{fa-css-prefix}-yen:before, -.@{fa-css-prefix}-jpy:before { content: @fa-var-jpy; } -.@{fa-css-prefix}-ruble:before, -.@{fa-css-prefix}-rouble:before, -.@{fa-css-prefix}-rub:before { content: @fa-var-rub; } -.@{fa-css-prefix}-won:before, -.@{fa-css-prefix}-krw:before { content: @fa-var-krw; } -.@{fa-css-prefix}-bitcoin:before, -.@{fa-css-prefix}-btc:before { content: @fa-var-btc; } -.@{fa-css-prefix}-file:before { content: @fa-var-file; } -.@{fa-css-prefix}-file-text:before { content: @fa-var-file-text; } -.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-asc; } -.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-desc; } -.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-asc; } -.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-desc; } -.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-asc; } -.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-desc; } -.@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; } -.@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; } -.@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; } -.@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; } -.@{fa-css-prefix}-xing:before { content: @fa-var-xing; } -.@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; } -.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube-play; } -.@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; } -.@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; } -.@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; } -.@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; } -.@{fa-css-prefix}-adn:before { content: @fa-var-adn; } -.@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; } -.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket-square; } -.@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; } -.@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; } -.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-down; } -.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-up; } -.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-left; } -.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-right; } -.@{fa-css-prefix}-apple:before { content: @fa-var-apple; } -.@{fa-css-prefix}-windows:before { content: @fa-var-windows; } -.@{fa-css-prefix}-android:before { content: @fa-var-android; } -.@{fa-css-prefix}-linux:before { content: @fa-var-linux; } -.@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; } -.@{fa-css-prefix}-skype:before { content: @fa-var-skype; } -.@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; } -.@{fa-css-prefix}-trello:before { content: @fa-var-trello; } -.@{fa-css-prefix}-female:before { content: @fa-var-female; } -.@{fa-css-prefix}-male:before { content: @fa-var-male; } -.@{fa-css-prefix}-gittip:before, -.@{fa-css-prefix}-gratipay:before { content: @fa-var-gratipay; } -.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun-o; } -.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon-o; } -.@{fa-css-prefix}-archive:before { content: @fa-var-archive; } -.@{fa-css-prefix}-bug:before { content: @fa-var-bug; } -.@{fa-css-prefix}-vk:before { content: @fa-var-vk; } -.@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; } -.@{fa-css-prefix}-renren:before { content: @fa-var-renren; } -.@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; } -.@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; } -.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-circle-o-right; } -.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-circle-o-left; } -.@{fa-css-prefix}-toggle-left:before, -.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-o-left; } -.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle-o; } -.@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; } -.@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; } -.@{fa-css-prefix}-turkish-lira:before, -.@{fa-css-prefix}-try:before { content: @fa-var-try; } -.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square-o; } -.@{fa-css-prefix}-space-shuttle:before { content: @fa-var-space-shuttle; } -.@{fa-css-prefix}-slack:before { content: @fa-var-slack; } -.@{fa-css-prefix}-envelope-square:before { content: @fa-var-envelope-square; } -.@{fa-css-prefix}-wordpress:before { content: @fa-var-wordpress; } -.@{fa-css-prefix}-openid:before { content: @fa-var-openid; } -.@{fa-css-prefix}-institution:before, -.@{fa-css-prefix}-bank:before, -.@{fa-css-prefix}-university:before { content: @fa-var-university; } -.@{fa-css-prefix}-mortar-board:before, -.@{fa-css-prefix}-graduation-cap:before { content: @fa-var-graduation-cap; } -.@{fa-css-prefix}-yahoo:before { content: @fa-var-yahoo; } -.@{fa-css-prefix}-google:before { content: @fa-var-google; } -.@{fa-css-prefix}-reddit:before { content: @fa-var-reddit; } -.@{fa-css-prefix}-reddit-square:before { content: @fa-var-reddit-square; } -.@{fa-css-prefix}-stumbleupon-circle:before { content: @fa-var-stumbleupon-circle; } -.@{fa-css-prefix}-stumbleupon:before { content: @fa-var-stumbleupon; } -.@{fa-css-prefix}-delicious:before { content: @fa-var-delicious; } -.@{fa-css-prefix}-digg:before { content: @fa-var-digg; } -.@{fa-css-prefix}-pied-piper:before { content: @fa-var-pied-piper; } -.@{fa-css-prefix}-pied-piper-alt:before { content: @fa-var-pied-piper-alt; } -.@{fa-css-prefix}-drupal:before { content: @fa-var-drupal; } -.@{fa-css-prefix}-joomla:before { content: @fa-var-joomla; } -.@{fa-css-prefix}-language:before { content: @fa-var-language; } -.@{fa-css-prefix}-fax:before { content: @fa-var-fax; } -.@{fa-css-prefix}-building:before { content: @fa-var-building; } -.@{fa-css-prefix}-child:before { content: @fa-var-child; } -.@{fa-css-prefix}-paw:before { content: @fa-var-paw; } -.@{fa-css-prefix}-spoon:before { content: @fa-var-spoon; } -.@{fa-css-prefix}-cube:before { content: @fa-var-cube; } -.@{fa-css-prefix}-cubes:before { content: @fa-var-cubes; } -.@{fa-css-prefix}-behance:before { content: @fa-var-behance; } -.@{fa-css-prefix}-behance-square:before { content: @fa-var-behance-square; } -.@{fa-css-prefix}-steam:before { content: @fa-var-steam; } -.@{fa-css-prefix}-steam-square:before { content: @fa-var-steam-square; } -.@{fa-css-prefix}-recycle:before { content: @fa-var-recycle; } -.@{fa-css-prefix}-automobile:before, -.@{fa-css-prefix}-car:before { content: @fa-var-car; } -.@{fa-css-prefix}-cab:before, -.@{fa-css-prefix}-taxi:before { content: @fa-var-taxi; } -.@{fa-css-prefix}-tree:before { content: @fa-var-tree; } -.@{fa-css-prefix}-spotify:before { content: @fa-var-spotify; } -.@{fa-css-prefix}-deviantart:before { content: @fa-var-deviantart; } -.@{fa-css-prefix}-soundcloud:before { content: @fa-var-soundcloud; } -.@{fa-css-prefix}-database:before { content: @fa-var-database; } -.@{fa-css-prefix}-file-pdf-o:before { content: @fa-var-file-pdf-o; } -.@{fa-css-prefix}-file-word-o:before { content: @fa-var-file-word-o; } -.@{fa-css-prefix}-file-excel-o:before { content: @fa-var-file-excel-o; } -.@{fa-css-prefix}-file-powerpoint-o:before { content: @fa-var-file-powerpoint-o; } -.@{fa-css-prefix}-file-photo-o:before, -.@{fa-css-prefix}-file-picture-o:before, -.@{fa-css-prefix}-file-image-o:before { content: @fa-var-file-image-o; } -.@{fa-css-prefix}-file-zip-o:before, -.@{fa-css-prefix}-file-archive-o:before { content: @fa-var-file-archive-o; } -.@{fa-css-prefix}-file-sound-o:before, -.@{fa-css-prefix}-file-audio-o:before { content: @fa-var-file-audio-o; } -.@{fa-css-prefix}-file-movie-o:before, -.@{fa-css-prefix}-file-video-o:before { content: @fa-var-file-video-o; } -.@{fa-css-prefix}-file-code-o:before { content: @fa-var-file-code-o; } -.@{fa-css-prefix}-vine:before { content: @fa-var-vine; } -.@{fa-css-prefix}-codepen:before { content: @fa-var-codepen; } -.@{fa-css-prefix}-jsfiddle:before { content: @fa-var-jsfiddle; } -.@{fa-css-prefix}-life-bouy:before, -.@{fa-css-prefix}-life-buoy:before, -.@{fa-css-prefix}-life-saver:before, -.@{fa-css-prefix}-support:before, -.@{fa-css-prefix}-life-ring:before { content: @fa-var-life-ring; } -.@{fa-css-prefix}-circle-o-notch:before { content: @fa-var-circle-o-notch; } -.@{fa-css-prefix}-ra:before, -.@{fa-css-prefix}-rebel:before { content: @fa-var-rebel; } -.@{fa-css-prefix}-ge:before, -.@{fa-css-prefix}-empire:before { content: @fa-var-empire; } -.@{fa-css-prefix}-git-square:before { content: @fa-var-git-square; } -.@{fa-css-prefix}-git:before { content: @fa-var-git; } -.@{fa-css-prefix}-y-combinator-square:before, -.@{fa-css-prefix}-yc-square:before, -.@{fa-css-prefix}-hacker-news:before { content: @fa-var-hacker-news; } -.@{fa-css-prefix}-tencent-weibo:before { content: @fa-var-tencent-weibo; } -.@{fa-css-prefix}-qq:before { content: @fa-var-qq; } -.@{fa-css-prefix}-wechat:before, -.@{fa-css-prefix}-weixin:before { content: @fa-var-weixin; } -.@{fa-css-prefix}-send:before, -.@{fa-css-prefix}-paper-plane:before { content: @fa-var-paper-plane; } -.@{fa-css-prefix}-send-o:before, -.@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane-o; } -.@{fa-css-prefix}-history:before { content: @fa-var-history; } -.@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle-thin; } -.@{fa-css-prefix}-header:before { content: @fa-var-header; } -.@{fa-css-prefix}-paragraph:before { content: @fa-var-paragraph; } -.@{fa-css-prefix}-sliders:before { content: @fa-var-sliders; } -.@{fa-css-prefix}-share-alt:before { content: @fa-var-share-alt; } -.@{fa-css-prefix}-share-alt-square:before { content: @fa-var-share-alt-square; } -.@{fa-css-prefix}-bomb:before { content: @fa-var-bomb; } -.@{fa-css-prefix}-soccer-ball-o:before, -.@{fa-css-prefix}-futbol-o:before { content: @fa-var-futbol-o; } -.@{fa-css-prefix}-tty:before { content: @fa-var-tty; } -.@{fa-css-prefix}-binoculars:before { content: @fa-var-binoculars; } -.@{fa-css-prefix}-plug:before { content: @fa-var-plug; } -.@{fa-css-prefix}-slideshare:before { content: @fa-var-slideshare; } -.@{fa-css-prefix}-twitch:before { content: @fa-var-twitch; } -.@{fa-css-prefix}-yelp:before { content: @fa-var-yelp; } -.@{fa-css-prefix}-newspaper-o:before { content: @fa-var-newspaper-o; } -.@{fa-css-prefix}-wifi:before { content: @fa-var-wifi; } -.@{fa-css-prefix}-calculator:before { content: @fa-var-calculator; } -.@{fa-css-prefix}-paypal:before { content: @fa-var-paypal; } -.@{fa-css-prefix}-google-wallet:before { content: @fa-var-google-wallet; } -.@{fa-css-prefix}-cc-visa:before { content: @fa-var-cc-visa; } -.@{fa-css-prefix}-cc-mastercard:before { content: @fa-var-cc-mastercard; } -.@{fa-css-prefix}-cc-discover:before { content: @fa-var-cc-discover; } -.@{fa-css-prefix}-cc-amex:before { content: @fa-var-cc-amex; } -.@{fa-css-prefix}-cc-paypal:before { content: @fa-var-cc-paypal; } -.@{fa-css-prefix}-cc-stripe:before { content: @fa-var-cc-stripe; } -.@{fa-css-prefix}-bell-slash:before { content: @fa-var-bell-slash; } -.@{fa-css-prefix}-bell-slash-o:before { content: @fa-var-bell-slash-o; } -.@{fa-css-prefix}-trash:before { content: @fa-var-trash; } -.@{fa-css-prefix}-copyright:before { content: @fa-var-copyright; } -.@{fa-css-prefix}-at:before { content: @fa-var-at; } -.@{fa-css-prefix}-eyedropper:before { content: @fa-var-eyedropper; } -.@{fa-css-prefix}-paint-brush:before { content: @fa-var-paint-brush; } -.@{fa-css-prefix}-birthday-cake:before { content: @fa-var-birthday-cake; } -.@{fa-css-prefix}-area-chart:before { content: @fa-var-area-chart; } -.@{fa-css-prefix}-pie-chart:before { content: @fa-var-pie-chart; } -.@{fa-css-prefix}-line-chart:before { content: @fa-var-line-chart; } -.@{fa-css-prefix}-lastfm:before { content: @fa-var-lastfm; } -.@{fa-css-prefix}-lastfm-square:before { content: @fa-var-lastfm-square; } -.@{fa-css-prefix}-toggle-off:before { content: @fa-var-toggle-off; } -.@{fa-css-prefix}-toggle-on:before { content: @fa-var-toggle-on; } -.@{fa-css-prefix}-bicycle:before { content: @fa-var-bicycle; } -.@{fa-css-prefix}-bus:before { content: @fa-var-bus; } -.@{fa-css-prefix}-ioxhost:before { content: @fa-var-ioxhost; } -.@{fa-css-prefix}-angellist:before { content: @fa-var-angellist; } -.@{fa-css-prefix}-cc:before { content: @fa-var-cc; } -.@{fa-css-prefix}-shekel:before, -.@{fa-css-prefix}-sheqel:before, -.@{fa-css-prefix}-ils:before { content: @fa-var-ils; } -.@{fa-css-prefix}-meanpath:before { content: @fa-var-meanpath; } -.@{fa-css-prefix}-buysellads:before { content: @fa-var-buysellads; } -.@{fa-css-prefix}-connectdevelop:before { content: @fa-var-connectdevelop; } -.@{fa-css-prefix}-dashcube:before { content: @fa-var-dashcube; } -.@{fa-css-prefix}-forumbee:before { content: @fa-var-forumbee; } -.@{fa-css-prefix}-leanpub:before { content: @fa-var-leanpub; } -.@{fa-css-prefix}-sellsy:before { content: @fa-var-sellsy; } -.@{fa-css-prefix}-shirtsinbulk:before { content: @fa-var-shirtsinbulk; } -.@{fa-css-prefix}-simplybuilt:before { content: @fa-var-simplybuilt; } -.@{fa-css-prefix}-skyatlas:before { content: @fa-var-skyatlas; } -.@{fa-css-prefix}-cart-plus:before { content: @fa-var-cart-plus; } -.@{fa-css-prefix}-cart-arrow-down:before { content: @fa-var-cart-arrow-down; } -.@{fa-css-prefix}-diamond:before { content: @fa-var-diamond; } -.@{fa-css-prefix}-ship:before { content: @fa-var-ship; } -.@{fa-css-prefix}-user-secret:before { content: @fa-var-user-secret; } -.@{fa-css-prefix}-motorcycle:before { content: @fa-var-motorcycle; } -.@{fa-css-prefix}-street-view:before { content: @fa-var-street-view; } -.@{fa-css-prefix}-heartbeat:before { content: @fa-var-heartbeat; } -.@{fa-css-prefix}-venus:before { content: @fa-var-venus; } -.@{fa-css-prefix}-mars:before { content: @fa-var-mars; } -.@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; } -.@{fa-css-prefix}-intersex:before, -.@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; } -.@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender-alt; } -.@{fa-css-prefix}-venus-double:before { content: @fa-var-venus-double; } -.@{fa-css-prefix}-mars-double:before { content: @fa-var-mars-double; } -.@{fa-css-prefix}-venus-mars:before { content: @fa-var-venus-mars; } -.@{fa-css-prefix}-mars-stroke:before { content: @fa-var-mars-stroke; } -.@{fa-css-prefix}-mars-stroke-v:before { content: @fa-var-mars-stroke-v; } -.@{fa-css-prefix}-mars-stroke-h:before { content: @fa-var-mars-stroke-h; } -.@{fa-css-prefix}-neuter:before { content: @fa-var-neuter; } -.@{fa-css-prefix}-genderless:before { content: @fa-var-genderless; } -.@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook-official; } -.@{fa-css-prefix}-pinterest-p:before { content: @fa-var-pinterest-p; } -.@{fa-css-prefix}-whatsapp:before { content: @fa-var-whatsapp; } -.@{fa-css-prefix}-server:before { content: @fa-var-server; } -.@{fa-css-prefix}-user-plus:before { content: @fa-var-user-plus; } -.@{fa-css-prefix}-user-times:before { content: @fa-var-user-times; } -.@{fa-css-prefix}-hotel:before, -.@{fa-css-prefix}-bed:before { content: @fa-var-bed; } -.@{fa-css-prefix}-viacoin:before { content: @fa-var-viacoin; } -.@{fa-css-prefix}-train:before { content: @fa-var-train; } -.@{fa-css-prefix}-subway:before { content: @fa-var-subway; } -.@{fa-css-prefix}-medium:before { content: @fa-var-medium; } -.@{fa-css-prefix}-yc:before, -.@{fa-css-prefix}-y-combinator:before { content: @fa-var-y-combinator; } -.@{fa-css-prefix}-optin-monster:before { content: @fa-var-optin-monster; } -.@{fa-css-prefix}-opencart:before { content: @fa-var-opencart; } -.@{fa-css-prefix}-expeditedssl:before { content: @fa-var-expeditedssl; } -.@{fa-css-prefix}-battery-4:before, -.@{fa-css-prefix}-battery-full:before { content: @fa-var-battery-full; } -.@{fa-css-prefix}-battery-3:before, -.@{fa-css-prefix}-battery-three-quarters:before { content: @fa-var-battery-three-quarters; } -.@{fa-css-prefix}-battery-2:before, -.@{fa-css-prefix}-battery-half:before { content: @fa-var-battery-half; } -.@{fa-css-prefix}-battery-1:before, -.@{fa-css-prefix}-battery-quarter:before { content: @fa-var-battery-quarter; } -.@{fa-css-prefix}-battery-0:before, -.@{fa-css-prefix}-battery-empty:before { content: @fa-var-battery-empty; } -.@{fa-css-prefix}-mouse-pointer:before { content: @fa-var-mouse-pointer; } -.@{fa-css-prefix}-i-cursor:before { content: @fa-var-i-cursor; } -.@{fa-css-prefix}-object-group:before { content: @fa-var-object-group; } -.@{fa-css-prefix}-object-ungroup:before { content: @fa-var-object-ungroup; } -.@{fa-css-prefix}-sticky-note:before { content: @fa-var-sticky-note; } -.@{fa-css-prefix}-sticky-note-o:before { content: @fa-var-sticky-note-o; } -.@{fa-css-prefix}-cc-jcb:before { content: @fa-var-cc-jcb; } -.@{fa-css-prefix}-cc-diners-club:before { content: @fa-var-cc-diners-club; } -.@{fa-css-prefix}-clone:before { content: @fa-var-clone; } -.@{fa-css-prefix}-balance-scale:before { content: @fa-var-balance-scale; } -.@{fa-css-prefix}-hourglass-o:before { content: @fa-var-hourglass-o; } -.@{fa-css-prefix}-hourglass-1:before, -.@{fa-css-prefix}-hourglass-start:before { content: @fa-var-hourglass-start; } -.@{fa-css-prefix}-hourglass-2:before, -.@{fa-css-prefix}-hourglass-half:before { content: @fa-var-hourglass-half; } -.@{fa-css-prefix}-hourglass-3:before, -.@{fa-css-prefix}-hourglass-end:before { content: @fa-var-hourglass-end; } -.@{fa-css-prefix}-hourglass:before { content: @fa-var-hourglass; } -.@{fa-css-prefix}-hand-grab-o:before, -.@{fa-css-prefix}-hand-rock-o:before { content: @fa-var-hand-rock-o; } -.@{fa-css-prefix}-hand-stop-o:before, -.@{fa-css-prefix}-hand-paper-o:before { content: @fa-var-hand-paper-o; } -.@{fa-css-prefix}-hand-scissors-o:before { content: @fa-var-hand-scissors-o; } -.@{fa-css-prefix}-hand-lizard-o:before { content: @fa-var-hand-lizard-o; } -.@{fa-css-prefix}-hand-spock-o:before { content: @fa-var-hand-spock-o; } -.@{fa-css-prefix}-hand-pointer-o:before { content: @fa-var-hand-pointer-o; } -.@{fa-css-prefix}-hand-peace-o:before { content: @fa-var-hand-peace-o; } -.@{fa-css-prefix}-trademark:before { content: @fa-var-trademark; } -.@{fa-css-prefix}-registered:before { content: @fa-var-registered; } -.@{fa-css-prefix}-creative-commons:before { content: @fa-var-creative-commons; } -.@{fa-css-prefix}-gg:before { content: @fa-var-gg; } -.@{fa-css-prefix}-gg-circle:before { content: @fa-var-gg-circle; } -.@{fa-css-prefix}-tripadvisor:before { content: @fa-var-tripadvisor; } -.@{fa-css-prefix}-odnoklassniki:before { content: @fa-var-odnoklassniki; } -.@{fa-css-prefix}-odnoklassniki-square:before { content: @fa-var-odnoklassniki-square; } -.@{fa-css-prefix}-get-pocket:before { content: @fa-var-get-pocket; } -.@{fa-css-prefix}-wikipedia-w:before { content: @fa-var-wikipedia-w; } -.@{fa-css-prefix}-safari:before { content: @fa-var-safari; } -.@{fa-css-prefix}-chrome:before { content: @fa-var-chrome; } -.@{fa-css-prefix}-firefox:before { content: @fa-var-firefox; } -.@{fa-css-prefix}-opera:before { content: @fa-var-opera; } -.@{fa-css-prefix}-internet-explorer:before { content: @fa-var-internet-explorer; } -.@{fa-css-prefix}-tv:before, -.@{fa-css-prefix}-television:before { content: @fa-var-television; } -.@{fa-css-prefix}-contao:before { content: @fa-var-contao; } -.@{fa-css-prefix}-500px:before { content: @fa-var-500px; } -.@{fa-css-prefix}-amazon:before { content: @fa-var-amazon; } -.@{fa-css-prefix}-calendar-plus-o:before { content: @fa-var-calendar-plus-o; } -.@{fa-css-prefix}-calendar-minus-o:before { content: @fa-var-calendar-minus-o; } -.@{fa-css-prefix}-calendar-times-o:before { content: @fa-var-calendar-times-o; } -.@{fa-css-prefix}-calendar-check-o:before { content: @fa-var-calendar-check-o; } -.@{fa-css-prefix}-industry:before { content: @fa-var-industry; } -.@{fa-css-prefix}-map-pin:before { content: @fa-var-map-pin; } -.@{fa-css-prefix}-map-signs:before { content: @fa-var-map-signs; } -.@{fa-css-prefix}-map-o:before { content: @fa-var-map-o; } -.@{fa-css-prefix}-map:before { content: @fa-var-map; } -.@{fa-css-prefix}-commenting:before { content: @fa-var-commenting; } -.@{fa-css-prefix}-commenting-o:before { content: @fa-var-commenting-o; } -.@{fa-css-prefix}-houzz:before { content: @fa-var-houzz; } -.@{fa-css-prefix}-vimeo:before { content: @fa-var-vimeo; } -.@{fa-css-prefix}-black-tie:before { content: @fa-var-black-tie; } -.@{fa-css-prefix}-fonticons:before { content: @fa-var-fonticons; }
@@ -1,688 +0,0 @@
-// Variables -// -------------------------- - -@fa-font-path: "../fonts"; -@fa-font-size-base: 14px; -@fa-line-height-base: 1; -//@fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.4.0/fonts"; // for referencing Bootstrap CDN font files directly -@fa-css-prefix: fa; -@fa-version: "4.4.0"; -@fa-border-color: #eee; -@fa-inverse: #fff; -@fa-li-width: (30em / 14); - -@fa-var-500px: "\f26e"; -@fa-var-adjust: "\f042"; -@fa-var-adn: "\f170"; -@fa-var-align-center: "\f037"; -@fa-var-align-justify: "\f039"; -@fa-var-align-left: "\f036"; -@fa-var-align-right: "\f038"; -@fa-var-amazon: "\f270"; -@fa-var-ambulance: "\f0f9"; -@fa-var-anchor: "\f13d"; -@fa-var-android: "\f17b"; -@fa-var-angellist: "\f209"; -@fa-var-angle-double-down: "\f103"; -@fa-var-angle-double-left: "\f100"; -@fa-var-angle-double-right: "\f101"; -@fa-var-angle-double-up: "\f102"; -@fa-var-angle-down: "\f107"; -@fa-var-angle-left: "\f104"; -@fa-var-angle-right: "\f105"; -@fa-var-angle-up: "\f106"; -@fa-var-apple: "\f179"; -@fa-var-archive: "\f187"; -@fa-var-area-chart: "\f1fe"; -@fa-var-arrow-circle-down: "\f0ab"; -@fa-var-arrow-circle-left: "\f0a8"; -@fa-var-arrow-circle-o-down: "\f01a"; -@fa-var-arrow-circle-o-left: "\f190"; -@fa-var-arrow-circle-o-right: "\f18e"; -@fa-var-arrow-circle-o-up: "\f01b"; -@fa-var-arrow-circle-right: "\f0a9"; -@fa-var-arrow-circle-up: "\f0aa"; -@fa-var-arrow-down: "\f063"; -@fa-var-arrow-left: "\f060"; -@fa-var-arrow-right: "\f061"; -@fa-var-arrow-up: "\f062"; -@fa-var-arrows: "\f047"; -@fa-var-arrows-alt: "\f0b2"; -@fa-var-arrows-h: "\f07e"; -@fa-var-arrows-v: "\f07d"; -@fa-var-asterisk: "\f069"; -@fa-var-at: "\f1fa"; -@fa-var-automobile: "\f1b9"; -@fa-var-backward: "\f04a"; -@fa-var-balance-scale: "\f24e"; -@fa-var-ban: "\f05e"; -@fa-var-bank: "\f19c"; -@fa-var-bar-chart: "\f080"; -@fa-var-bar-chart-o: "\f080"; -@fa-var-barcode: "\f02a"; -@fa-var-bars: "\f0c9"; -@fa-var-battery-0: "\f244"; -@fa-var-battery-1: "\f243"; -@fa-var-battery-2: "\f242"; -@fa-var-battery-3: "\f241"; -@fa-var-battery-4: "\f240"; -@fa-var-battery-empty: "\f244"; -@fa-var-battery-full: "\f240"; -@fa-var-battery-half: "\f242"; -@fa-var-battery-quarter: "\f243"; -@fa-var-battery-three-quarters: "\f241"; -@fa-var-bed: "\f236"; -@fa-var-beer: "\f0fc"; -@fa-var-behance: "\f1b4"; -@fa-var-behance-square: "\f1b5"; -@fa-var-bell: "\f0f3"; -@fa-var-bell-o: "\f0a2"; -@fa-var-bell-slash: "\f1f6"; -@fa-var-bell-slash-o: "\f1f7"; -@fa-var-bicycle: "\f206"; -@fa-var-binoculars: "\f1e5"; -@fa-var-birthday-cake: "\f1fd"; -@fa-var-bitbucket: "\f171"; -@fa-var-bitbucket-square: "\f172"; -@fa-var-bitcoin: "\f15a"; -@fa-var-black-tie: "\f27e"; -@fa-var-bold: "\f032"; -@fa-var-bolt: "\f0e7"; -@fa-var-bomb: "\f1e2"; -@fa-var-book: "\f02d"; -@fa-var-bookmark: "\f02e"; -@fa-var-bookmark-o: "\f097"; -@fa-var-briefcase: "\f0b1"; -@fa-var-btc: "\f15a"; -@fa-var-bug: "\f188"; -@fa-var-building: "\f1ad"; -@fa-var-building-o: "\f0f7"; -@fa-var-bullhorn: "\f0a1"; -@fa-var-bullseye: "\f140"; -@fa-var-bus: "\f207"; -@fa-var-buysellads: "\f20d"; -@fa-var-cab: "\f1ba"; -@fa-var-calculator: "\f1ec"; -@fa-var-calendar: "\f073"; -@fa-var-calendar-check-o: "\f274"; -@fa-var-calendar-minus-o: "\f272"; -@fa-var-calendar-o: "\f133"; -@fa-var-calendar-plus-o: "\f271"; -@fa-var-calendar-times-o: "\f273"; -@fa-var-camera: "\f030"; -@fa-var-camera-retro: "\f083"; -@fa-var-car: "\f1b9"; -@fa-var-caret-down: "\f0d7"; -@fa-var-caret-left: "\f0d9"; -@fa-var-caret-right: "\f0da"; -@fa-var-caret-square-o-down: "\f150"; -@fa-var-caret-square-o-left: "\f191"; -@fa-var-caret-square-o-right: "\f152"; -@fa-var-caret-square-o-up: "\f151"; -@fa-var-caret-up: "\f0d8"; -@fa-var-cart-arrow-down: "\f218"; -@fa-var-cart-plus: "\f217"; -@fa-var-cc: "\f20a"; -@fa-var-cc-amex: "\f1f3"; -@fa-var-cc-diners-club: "\f24c"; -@fa-var-cc-discover: "\f1f2"; -@fa-var-cc-jcb: "\f24b"; -@fa-var-cc-mastercard: "\f1f1"; -@fa-var-cc-paypal: "\f1f4"; -@fa-var-cc-stripe: "\f1f5"; -@fa-var-cc-visa: "\f1f0"; -@fa-var-certificate: "\f0a3"; -@fa-var-chain: "\f0c1"; -@fa-var-chain-broken: "\f127"; -@fa-var-check: "\f00c"; -@fa-var-check-circle: "\f058"; -@fa-var-check-circle-o: "\f05d"; -@fa-var-check-square: "\f14a"; -@fa-var-check-square-o: "\f046"; -@fa-var-chevron-circle-down: "\f13a"; -@fa-var-chevron-circle-left: "\f137"; -@fa-var-chevron-circle-right: "\f138"; -@fa-var-chevron-circle-up: "\f139"; -@fa-var-chevron-down: "\f078"; -@fa-var-chevron-left: "\f053"; -@fa-var-chevron-right: "\f054"; -@fa-var-chevron-up: "\f077"; -@fa-var-child: "\f1ae"; -@fa-var-chrome: "\f268"; -@fa-var-circle: "\f111"; -@fa-var-circle-o: "\f10c"; -@fa-var-circle-o-notch: "\f1ce"; -@fa-var-circle-thin: "\f1db"; -@fa-var-clipboard: "\f0ea"; -@fa-var-clock-o: "\f017"; -@fa-var-clone: "\f24d"; -@fa-var-close: "\f00d"; -@fa-var-cloud: "\f0c2"; -@fa-var-cloud-download: "\f0ed"; -@fa-var-cloud-upload: "\f0ee"; -@fa-var-cny: "\f157"; -@fa-var-code: "\f121"; -@fa-var-code-fork: "\f126"; -@fa-var-codepen: "\f1cb"; -@fa-var-coffee: "\f0f4"; -@fa-var-cog: "\f013"; -@fa-var-cogs: "\f085"; -@fa-var-columns: "\f0db"; -@fa-var-comment: "\f075"; -@fa-var-comment-o: "\f0e5"; -@fa-var-commenting: "\f27a"; -@fa-var-commenting-o: "\f27b"; -@fa-var-comments: "\f086"; -@fa-var-comments-o: "\f0e6"; -@fa-var-compass: "\f14e"; -@fa-var-compress: "\f066"; -@fa-var-connectdevelop: "\f20e"; -@fa-var-contao: "\f26d"; -@fa-var-copy: "\f0c5"; -@fa-var-copyright: "\f1f9"; -@fa-var-creative-commons: "\f25e"; -@fa-var-credit-card: "\f09d"; -@fa-var-crop: "\f125"; -@fa-var-crosshairs: "\f05b"; -@fa-var-css3: "\f13c"; -@fa-var-cube: "\f1b2"; -@fa-var-cubes: "\f1b3"; -@fa-var-cut: "\f0c4"; -@fa-var-cutlery: "\f0f5"; -@fa-var-dashboard: "\f0e4"; -@fa-var-dashcube: "\f210"; -@fa-var-database: "\f1c0"; -@fa-var-dedent: "\f03b"; -@fa-var-delicious: "\f1a5"; -@fa-var-desktop: "\f108"; -@fa-var-deviantart: "\f1bd"; -@fa-var-diamond: "\f219"; -@fa-var-digg: "\f1a6"; -@fa-var-dollar: "\f155"; -@fa-var-dot-circle-o: "\f192"; -@fa-var-download: "\f019"; -@fa-var-dribbble: "\f17d"; -@fa-var-dropbox: "\f16b"; -@fa-var-drupal: "\f1a9"; -@fa-var-edit: "\f044"; -@fa-var-eject: "\f052"; -@fa-var-ellipsis-h: "\f141"; -@fa-var-ellipsis-v: "\f142"; -@fa-var-empire: "\f1d1"; -@fa-var-envelope: "\f0e0"; -@fa-var-envelope-o: "\f003"; -@fa-var-envelope-square: "\f199"; -@fa-var-eraser: "\f12d"; -@fa-var-eur: "\f153"; -@fa-var-euro: "\f153"; -@fa-var-exchange: "\f0ec"; -@fa-var-exclamation: "\f12a"; -@fa-var-exclamation-circle: "\f06a"; -@fa-var-exclamation-triangle: "\f071"; -@fa-var-expand: "\f065"; -@fa-var-expeditedssl: "\f23e"; -@fa-var-external-link: "\f08e"; -@fa-var-external-link-square: "\f14c"; -@fa-var-eye: "\f06e"; -@fa-var-eye-slash: "\f070"; -@fa-var-eyedropper: "\f1fb"; -@fa-var-facebook: "\f09a"; -@fa-var-facebook-f: "\f09a"; -@fa-var-facebook-official: "\f230"; -@fa-var-facebook-square: "\f082"; -@fa-var-fast-backward: "\f049"; -@fa-var-fast-forward: "\f050"; -@fa-var-fax: "\f1ac"; -@fa-var-feed: "\f09e"; -@fa-var-female: "\f182"; -@fa-var-fighter-jet: "\f0fb"; -@fa-var-file: "\f15b"; -@fa-var-file-archive-o: "\f1c6"; -@fa-var-file-audio-o: "\f1c7"; -@fa-var-file-code-o: "\f1c9"; -@fa-var-file-excel-o: "\f1c3"; -@fa-var-file-image-o: "\f1c5"; -@fa-var-file-movie-o: "\f1c8"; -@fa-var-file-o: "\f016"; -@fa-var-file-pdf-o: "\f1c1"; -@fa-var-file-photo-o: "\f1c5"; -@fa-var-file-picture-o: "\f1c5"; -@fa-var-file-powerpoint-o: "\f1c4"; -@fa-var-file-sound-o: "\f1c7"; -@fa-var-file-text: "\f15c"; -@fa-var-file-text-o: "\f0f6"; -@fa-var-file-video-o: "\f1c8"; -@fa-var-file-word-o: "\f1c2"; -@fa-var-file-zip-o: "\f1c6"; -@fa-var-files-o: "\f0c5"; -@fa-var-film: "\f008"; -@fa-var-filter: "\f0b0"; -@fa-var-fire: "\f06d"; -@fa-var-fire-extinguisher: "\f134"; -@fa-var-firefox: "\f269"; -@fa-var-flag: "\f024"; -@fa-var-flag-checkered: "\f11e"; -@fa-var-flag-o: "\f11d"; -@fa-var-flash: "\f0e7"; -@fa-var-flask: "\f0c3"; -@fa-var-flickr: "\f16e"; -@fa-var-floppy-o: "\f0c7"; -@fa-var-folder: "\f07b"; -@fa-var-folder-o: "\f114"; -@fa-var-folder-open: "\f07c"; -@fa-var-folder-open-o: "\f115"; -@fa-var-font: "\f031"; -@fa-var-fonticons: "\f280"; -@fa-var-forumbee: "\f211"; -@fa-var-forward: "\f04e"; -@fa-var-foursquare: "\f180"; -@fa-var-frown-o: "\f119"; -@fa-var-futbol-o: "\f1e3"; -@fa-var-gamepad: "\f11b"; -@fa-var-gavel: "\f0e3"; -@fa-var-gbp: "\f154"; -@fa-var-ge: "\f1d1"; -@fa-var-gear: "\f013"; -@fa-var-gears: "\f085"; -@fa-var-genderless: "\f22d"; -@fa-var-get-pocket: "\f265"; -@fa-var-gg: "\f260"; -@fa-var-gg-circle: "\f261"; -@fa-var-gift: "\f06b"; -@fa-var-git: "\f1d3"; -@fa-var-git-square: "\f1d2"; -@fa-var-github: "\f09b"; -@fa-var-github-alt: "\f113"; -@fa-var-github-square: "\f092"; -@fa-var-gittip: "\f184"; -@fa-var-glass: "\f000"; -@fa-var-globe: "\f0ac"; -@fa-var-google: "\f1a0"; -@fa-var-google-plus: "\f0d5"; -@fa-var-google-plus-square: "\f0d4"; -@fa-var-google-wallet: "\f1ee"; -@fa-var-graduation-cap: "\f19d"; -@fa-var-gratipay: "\f184"; -@fa-var-group: "\f0c0"; -@fa-var-h-square: "\f0fd"; -@fa-var-hacker-news: "\f1d4"; -@fa-var-hand-grab-o: "\f255"; -@fa-var-hand-lizard-o: "\f258"; -@fa-var-hand-o-down: "\f0a7"; -@fa-var-hand-o-left: "\f0a5"; -@fa-var-hand-o-right: "\f0a4"; -@fa-var-hand-o-up: "\f0a6"; -@fa-var-hand-paper-o: "\f256"; -@fa-var-hand-peace-o: "\f25b"; -@fa-var-hand-pointer-o: "\f25a"; -@fa-var-hand-rock-o: "\f255"; -@fa-var-hand-scissors-o: "\f257"; -@fa-var-hand-spock-o: "\f259"; -@fa-var-hand-stop-o: "\f256"; -@fa-var-hdd-o: "\f0a0"; -@fa-var-header: "\f1dc"; -@fa-var-headphones: "\f025"; -@fa-var-heart: "\f004"; -@fa-var-heart-o: "\f08a"; -@fa-var-heartbeat: "\f21e"; -@fa-var-history: "\f1da"; -@fa-var-home: "\f015"; -@fa-var-hospital-o: "\f0f8"; -@fa-var-hotel: "\f236"; -@fa-var-hourglass: "\f254"; -@fa-var-hourglass-1: "\f251"; -@fa-var-hourglass-2: "\f252"; -@fa-var-hourglass-3: "\f253"; -@fa-var-hourglass-end: "\f253"; -@fa-var-hourglass-half: "\f252"; -@fa-var-hourglass-o: "\f250"; -@fa-var-hourglass-start: "\f251"; -@fa-var-houzz: "\f27c"; -@fa-var-html5: "\f13b"; -@fa-var-i-cursor: "\f246"; -@fa-var-ils: "\f20b"; -@fa-var-image: "\f03e"; -@fa-var-inbox: "\f01c"; -@fa-var-indent: "\f03c"; -@fa-var-industry: "\f275"; -@fa-var-info: "\f129"; -@fa-var-info-circle: "\f05a"; -@fa-var-inr: "\f156"; -@fa-var-instagram: "\f16d"; -@fa-var-institution: "\f19c"; -@fa-var-internet-explorer: "\f26b"; -@fa-var-intersex: "\f224"; -@fa-var-ioxhost: "\f208"; -@fa-var-italic: "\f033"; -@fa-var-joomla: "\f1aa"; -@fa-var-jpy: "\f157"; -@fa-var-jsfiddle: "\f1cc"; -@fa-var-key: "\f084"; -@fa-var-keyboard-o: "\f11c"; -@fa-var-krw: "\f159"; -@fa-var-language: "\f1ab"; -@fa-var-laptop: "\f109"; -@fa-var-lastfm: "\f202"; -@fa-var-lastfm-square: "\f203"; -@fa-var-leaf: "\f06c"; -@fa-var-leanpub: "\f212"; -@fa-var-legal: "\f0e3"; -@fa-var-lemon-o: "\f094"; -@fa-var-level-down: "\f149"; -@fa-var-level-up: "\f148"; -@fa-var-life-bouy: "\f1cd"; -@fa-var-life-buoy: "\f1cd"; -@fa-var-life-ring: "\f1cd"; -@fa-var-life-saver: "\f1cd"; -@fa-var-lightbulb-o: "\f0eb"; -@fa-var-line-chart: "\f201"; -@fa-var-link: "\f0c1"; -@fa-var-linkedin: "\f0e1"; -@fa-var-linkedin-square: "\f08c"; -@fa-var-linux: "\f17c"; -@fa-var-list: "\f03a"; -@fa-var-list-alt: "\f022"; -@fa-var-list-ol: "\f0cb"; -@fa-var-list-ul: "\f0ca"; -@fa-var-location-arrow: "\f124"; -@fa-var-lock: "\f023"; -@fa-var-long-arrow-down: "\f175"; -@fa-var-long-arrow-left: "\f177"; -@fa-var-long-arrow-right: "\f178"; -@fa-var-long-arrow-up: "\f176"; -@fa-var-magic: "\f0d0"; -@fa-var-magnet: "\f076"; -@fa-var-mail-forward: "\f064"; -@fa-var-mail-reply: "\f112"; -@fa-var-mail-reply-all: "\f122"; -@fa-var-male: "\f183"; -@fa-var-map: "\f279"; -@fa-var-map-marker: "\f041"; -@fa-var-map-o: "\f278"; -@fa-var-map-pin: "\f276"; -@fa-var-map-signs: "\f277"; -@fa-var-mars: "\f222"; -@fa-var-mars-double: "\f227"; -@fa-var-mars-stroke: "\f229"; -@fa-var-mars-stroke-h: "\f22b"; -@fa-var-mars-stroke-v: "\f22a"; -@fa-var-maxcdn: "\f136"; -@fa-var-meanpath: "\f20c"; -@fa-var-medium: "\f23a"; -@fa-var-medkit: "\f0fa"; -@fa-var-meh-o: "\f11a"; -@fa-var-mercury: "\f223"; -@fa-var-microphone: "\f130"; -@fa-var-microphone-slash: "\f131"; -@fa-var-minus: "\f068"; -@fa-var-minus-circle: "\f056"; -@fa-var-minus-square: "\f146"; -@fa-var-minus-square-o: "\f147"; -@fa-var-mobile: "\f10b"; -@fa-var-mobile-phone: "\f10b"; -@fa-var-money: "\f0d6"; -@fa-var-moon-o: "\f186"; -@fa-var-mortar-board: "\f19d"; -@fa-var-motorcycle: "\f21c"; -@fa-var-mouse-pointer: "\f245"; -@fa-var-music: "\f001"; -@fa-var-navicon: "\f0c9"; -@fa-var-neuter: "\f22c"; -@fa-var-newspaper-o: "\f1ea"; -@fa-var-object-group: "\f247"; -@fa-var-object-ungroup: "\f248"; -@fa-var-odnoklassniki: "\f263"; -@fa-var-odnoklassniki-square: "\f264"; -@fa-var-opencart: "\f23d"; -@fa-var-openid: "\f19b"; -@fa-var-opera: "\f26a"; -@fa-var-optin-monster: "\f23c"; -@fa-var-outdent: "\f03b"; -@fa-var-pagelines: "\f18c"; -@fa-var-paint-brush: "\f1fc"; -@fa-var-paper-plane: "\f1d8"; -@fa-var-paper-plane-o: "\f1d9"; -@fa-var-paperclip: "\f0c6"; -@fa-var-paragraph: "\f1dd"; -@fa-var-paste: "\f0ea"; -@fa-var-pause: "\f04c"; -@fa-var-paw: "\f1b0"; -@fa-var-paypal: "\f1ed"; -@fa-var-pencil: "\f040"; -@fa-var-pencil-square: "\f14b"; -@fa-var-pencil-square-o: "\f044"; -@fa-var-phone: "\f095"; -@fa-var-phone-square: "\f098"; -@fa-var-photo: "\f03e"; -@fa-var-picture-o: "\f03e"; -@fa-var-pie-chart: "\f200"; -@fa-var-pied-piper: "\f1a7"; -@fa-var-pied-piper-alt: "\f1a8"; -@fa-var-pinterest: "\f0d2"; -@fa-var-pinterest-p: "\f231"; -@fa-var-pinterest-square: "\f0d3"; -@fa-var-plane: "\f072"; -@fa-var-play: "\f04b"; -@fa-var-play-circle: "\f144"; -@fa-var-play-circle-o: "\f01d"; -@fa-var-plug: "\f1e6"; -@fa-var-plus: "\f067"; -@fa-var-plus-circle: "\f055"; -@fa-var-plus-square: "\f0fe"; -@fa-var-plus-square-o: "\f196"; -@fa-var-power-off: "\f011"; -@fa-var-print: "\f02f"; -@fa-var-puzzle-piece: "\f12e"; -@fa-var-qq: "\f1d6"; -@fa-var-qrcode: "\f029"; -@fa-var-question: "\f128"; -@fa-var-question-circle: "\f059"; -@fa-var-quote-left: "\f10d"; -@fa-var-quote-right: "\f10e"; -@fa-var-ra: "\f1d0"; -@fa-var-random: "\f074"; -@fa-var-rebel: "\f1d0"; -@fa-var-recycle: "\f1b8"; -@fa-var-reddit: "\f1a1"; -@fa-var-reddit-square: "\f1a2"; -@fa-var-refresh: "\f021"; -@fa-var-registered: "\f25d"; -@fa-var-remove: "\f00d"; -@fa-var-renren: "\f18b"; -@fa-var-reorder: "\f0c9"; -@fa-var-repeat: "\f01e"; -@fa-var-reply: "\f112"; -@fa-var-reply-all: "\f122"; -@fa-var-retweet: "\f079"; -@fa-var-rmb: "\f157"; -@fa-var-road: "\f018"; -@fa-var-rocket: "\f135"; -@fa-var-rotate-left: "\f0e2"; -@fa-var-rotate-right: "\f01e"; -@fa-var-rouble: "\f158"; -@fa-var-rss: "\f09e"; -@fa-var-rss-square: "\f143"; -@fa-var-rub: "\f158"; -@fa-var-ruble: "\f158"; -@fa-var-rupee: "\f156"; -@fa-var-safari: "\f267"; -@fa-var-save: "\f0c7"; -@fa-var-scissors: "\f0c4"; -@fa-var-search: "\f002"; -@fa-var-search-minus: "\f010"; -@fa-var-search-plus: "\f00e"; -@fa-var-sellsy: "\f213"; -@fa-var-send: "\f1d8"; -@fa-var-send-o: "\f1d9"; -@fa-var-server: "\f233"; -@fa-var-share: "\f064"; -@fa-var-share-alt: "\f1e0"; -@fa-var-share-alt-square: "\f1e1"; -@fa-var-share-square: "\f14d"; -@fa-var-share-square-o: "\f045"; -@fa-var-shekel: "\f20b"; -@fa-var-sheqel: "\f20b"; -@fa-var-shield: "\f132"; -@fa-var-ship: "\f21a"; -@fa-var-shirtsinbulk: "\f214"; -@fa-var-shopping-cart: "\f07a"; -@fa-var-sign-in: "\f090"; -@fa-var-sign-out: "\f08b"; -@fa-var-signal: "\f012"; -@fa-var-simplybuilt: "\f215"; -@fa-var-sitemap: "\f0e8"; -@fa-var-skyatlas: "\f216"; -@fa-var-skype: "\f17e"; -@fa-var-slack: "\f198"; -@fa-var-sliders: "\f1de"; -@fa-var-slideshare: "\f1e7"; -@fa-var-smile-o: "\f118"; -@fa-var-soccer-ball-o: "\f1e3"; -@fa-var-sort: "\f0dc"; -@fa-var-sort-alpha-asc: "\f15d"; -@fa-var-sort-alpha-desc: "\f15e"; -@fa-var-sort-amount-asc: "\f160"; -@fa-var-sort-amount-desc: "\f161"; -@fa-var-sort-asc: "\f0de"; -@fa-var-sort-desc: "\f0dd"; -@fa-var-sort-down: "\f0dd"; -@fa-var-sort-numeric-asc: "\f162"; -@fa-var-sort-numeric-desc: "\f163"; -@fa-var-sort-up: "\f0de"; -@fa-var-soundcloud: "\f1be"; -@fa-var-space-shuttle: "\f197"; -@fa-var-spinner: "\f110"; -@fa-var-spoon: "\f1b1"; -@fa-var-spotify: "\f1bc"; -@fa-var-square: "\f0c8"; -@fa-var-square-o: "\f096"; -@fa-var-stack-exchange: "\f18d"; -@fa-var-stack-overflow: "\f16c"; -@fa-var-star: "\f005"; -@fa-var-star-half: "\f089"; -@fa-var-star-half-empty: "\f123"; -@fa-var-star-half-full: "\f123"; -@fa-var-star-half-o: "\f123"; -@fa-var-star-o: "\f006"; -@fa-var-steam: "\f1b6"; -@fa-var-steam-square: "\f1b7"; -@fa-var-step-backward: "\f048"; -@fa-var-step-forward: "\f051"; -@fa-var-stethoscope: "\f0f1"; -@fa-var-sticky-note: "\f249"; -@fa-var-sticky-note-o: "\f24a"; -@fa-var-stop: "\f04d"; -@fa-var-street-view: "\f21d"; -@fa-var-strikethrough: "\f0cc"; -@fa-var-stumbleupon: "\f1a4"; -@fa-var-stumbleupon-circle: "\f1a3"; -@fa-var-subscript: "\f12c"; -@fa-var-subway: "\f239"; -@fa-var-suitcase: "\f0f2"; -@fa-var-sun-o: "\f185"; -@fa-var-superscript: "\f12b"; -@fa-var-support: "\f1cd"; -@fa-var-table: "\f0ce"; -@fa-var-tablet: "\f10a"; -@fa-var-tachometer: "\f0e4"; -@fa-var-tag: "\f02b"; -@fa-var-tags: "\f02c"; -@fa-var-tasks: "\f0ae"; -@fa-var-taxi: "\f1ba"; -@fa-var-television: "\f26c"; -@fa-var-tencent-weibo: "\f1d5"; -@fa-var-terminal: "\f120"; -@fa-var-text-height: "\f034"; -@fa-var-text-width: "\f035"; -@fa-var-th: "\f00a"; -@fa-var-th-large: "\f009"; -@fa-var-th-list: "\f00b"; -@fa-var-thumb-tack: "\f08d"; -@fa-var-thumbs-down: "\f165"; -@fa-var-thumbs-o-down: "\f088"; -@fa-var-thumbs-o-up: "\f087"; -@fa-var-thumbs-up: "\f164"; -@fa-var-ticket: "\f145"; -@fa-var-times: "\f00d"; -@fa-var-times-circle: "\f057"; -@fa-var-times-circle-o: "\f05c"; -@fa-var-tint: "\f043"; -@fa-var-toggle-down: "\f150"; -@fa-var-toggle-left: "\f191"; -@fa-var-toggle-off: "\f204"; -@fa-var-toggle-on: "\f205"; -@fa-var-toggle-right: "\f152"; -@fa-var-toggle-up: "\f151"; -@fa-var-trademark: "\f25c"; -@fa-var-train: "\f238"; -@fa-var-transgender: "\f224"; -@fa-var-transgender-alt: "\f225"; -@fa-var-trash: "\f1f8"; -@fa-var-trash-o: "\f014"; -@fa-var-tree: "\f1bb"; -@fa-var-trello: "\f181"; -@fa-var-tripadvisor: "\f262"; -@fa-var-trophy: "\f091"; -@fa-var-truck: "\f0d1"; -@fa-var-try: "\f195"; -@fa-var-tty: "\f1e4"; -@fa-var-tumblr: "\f173"; -@fa-var-tumblr-square: "\f174"; -@fa-var-turkish-lira: "\f195"; -@fa-var-tv: "\f26c"; -@fa-var-twitch: "\f1e8"; -@fa-var-twitter: "\f099"; -@fa-var-twitter-square: "\f081"; -@fa-var-umbrella: "\f0e9"; -@fa-var-underline: "\f0cd"; -@fa-var-undo: "\f0e2"; -@fa-var-university: "\f19c"; -@fa-var-unlink: "\f127"; -@fa-var-unlock: "\f09c"; -@fa-var-unlock-alt: "\f13e"; -@fa-var-unsorted: "\f0dc"; -@fa-var-upload: "\f093"; -@fa-var-usd: "\f155"; -@fa-var-user: "\f007"; -@fa-var-user-md: "\f0f0"; -@fa-var-user-plus: "\f234"; -@fa-var-user-secret: "\f21b"; -@fa-var-user-times: "\f235"; -@fa-var-users: "\f0c0"; -@fa-var-venus: "\f221"; -@fa-var-venus-double: "\f226"; -@fa-var-venus-mars: "\f228"; -@fa-var-viacoin: "\f237"; -@fa-var-video-camera: "\f03d"; -@fa-var-vimeo: "\f27d"; -@fa-var-vimeo-square: "\f194"; -@fa-var-vine: "\f1ca"; -@fa-var-vk: "\f189"; -@fa-var-volume-down: "\f027"; -@fa-var-volume-off: "\f026"; -@fa-var-volume-up: "\f028"; -@fa-var-warning: "\f071"; -@fa-var-wechat: "\f1d7"; -@fa-var-weibo: "\f18a"; -@fa-var-weixin: "\f1d7"; -@fa-var-whatsapp: "\f232"; -@fa-var-wheelchair: "\f193"; -@fa-var-wifi: "\f1eb"; -@fa-var-wikipedia-w: "\f266"; -@fa-var-windows: "\f17a"; -@fa-var-won: "\f159"; -@fa-var-wordpress: "\f19a"; -@fa-var-wrench: "\f0ad"; -@fa-var-xing: "\f168"; -@fa-var-xing-square: "\f169"; -@fa-var-y-combinator: "\f23b"; -@fa-var-y-combinator-square: "\f1d4"; -@fa-var-yahoo: "\f19e"; -@fa-var-yc: "\f23b"; -@fa-var-yc-square: "\f1d4"; -@fa-var-yelp: "\f1e9"; -@fa-var-yen: "\f157"; -@fa-var-youtube: "\f167"; -@fa-var-youtube-play: "\f16a"; -@fa-var-youtube-square: "\f166"; -
@@ -1,83 +0,0 @@
-.headings h1 { - font-size: 2em; -} -.headings h2 { - font-size: 1.5em; - counter-reset:h3; - counter-increment: h2; -} -.headings h2::before { - content: counter(h2) "\00A0\00A0"; -} -.headings h3 { - font-size: 1.2em; - counter-reset:h4; - counter-increment: h3; -} -.headings h3::before { - content: counter(h2) "." counter(h3) "\00A0\00A0"; -} -.headings h4 { - font-size: 1.1em; - counter-reset:h5; - counter-increment: h4; -} -.headings h4::before { - content: counter(h2) "." counter(h3) "." counter(h4) "\00A0\00A0"; -} -.headings h5 { - font-size: 1em; - counter-reset:h6; - counter-increment: h5; -} -.headings h5::before { - content: counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) "\00A0\00A0"; -} -.headings h6 { - font-size: 1em; - counter-increment: h6; -} -.headings h6::before { - content: counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) "." counter(h6) "\00A0\00A0"; -} - -/***************/ - -.headings #toc { - counter-reset: toc2; -} - -.headings #toc li li a { - counter-reset:toc3; - counter-increment: toc2; -} -.headings #toc li li a::before { - content: counter(toc2) "\00A0\00A0"; -} -.headings #toc li li li a { - counter-reset:toc4; - counter-increment: toc3; -} -.headings #toc li li li a::before { - content: counter(toc2) "." counter(toc3) "\00A0\00A0"; -} -.headings #toc li li li li a { - counter-reset:toc5; - counter-increment: toc4; -} -.headings #toc li li li li a::before { - content: counter(toc2) "." counter(toc3) "." counter(toc4) "\00A0\00A0"; -} -.headings #toc li li li li li a { - counter-reset:toc6; - counter-increment: toc5; -} -.headings #toc li li li li li a::before { - content: counter(toc2) "." counter(toc3) "." counter(toc4) "." counter(toc5) "\00A0\00A0"; -} -.headings #toc li li li li li li a { - counter-increment: toc6; -} -.headings #toc li li li li li li a::before { - content: counter(toc2) "." counter(toc3) "." counter(toc4) "." counter(toc5) "." counter(toc6) "\00A0\00A0"; -}
@@ -1,53 +0,0 @@
-body { - background-color:#fff; - margin: 0 auto; - height:100%; - zoom: 1; - letter-spacing: normal; - word-spacing: normal; - color:@text-color; - font:15px @sans-font; - line-height:1.4; - -webkit-font-smoothing:antialiased; - width: 960px; - .mix-hyphens(auto); - text-align: justify; -} - -@media screen and (max-width: 659px) { - body { - width: 100%; - } -} - -@media screen and (min-width: 660px) { - body { - width: 660px; - } -} - -#main, #footer, #header { - width: 94%; - margin:auto; -} - -#footer { - border-top: 1px solid @gray-d; - text-align: center; - font-size: 75%; - p { - line-height: 0.6em; - } -} - -#toc { - margin-top: -10px; - ul { - list-style-type: none; - padding-left: 20px; - } - & > ul { - padding-left: 0; - } -} -
@@ -1,51 +0,0 @@
-a[href^="http://"], -a[href^="https://"], -a[href^="ftp://"], -a[href^="sftp://"]{ .mix-link-icon(@fa-var-globe);} -a[href^="mailto:"] { .mix-link-icon(@fa-var-envelope);} -a[href^="tel:"] { .mix-link-icon(@fa-var-phone);} -a[href^="skype://"], a[href*="skype.com"] { .mix-link-icon(@fa-var-skype);} -a[href*="twitter.com"] { .mix-link-icon(@fa-var-twitter); } -a[href*="linkedin.com"] { .mix-link-icon(@fa-var-linkedin-square); } -a[href*="foursquare.com"] { .mix-link-icon(@fa-var-foursquare); } -a[href*="facebook.com"] { .mix-link-icon(@fa-var-facebook-square); } -a[href*="flickr.com"] { .mix-link-icon(@fa-var-flickr); } -a[href*="github.com"] { .mix-link-icon(@fa-var-github); } -a[href*="stackoverflow.com"] { .mix-link-icon(@fa-var-stack-overflow); } -a[href*="youtube.com"] { .mix-link-icon(@fa-var-youtube); } -a[href*="dropbox.com"] { .mix-link-icon(@fa-var-dropbox); } -a[href*="instagram.com"] { .mix-link-icon(@fa-var-instagram); } -a[href*="google.com"] { .mix-link-icon(@fa-var-google); } -a[href*="plus.google.com"] { .mix-link-icon(@fa-var-google-plus-square); } -a[href*="yahoo.com"] { .mix-link-icon(@fa-var-yahoo); } -a[href*="tumblr.com"] { .mix-link-icon(@fa-var-tumblr-square); } -a[href*="vimeo.com"] { .mix-link-icon(@fa-var-vimeo-square); } -a[href*="bitbucket.com"] { .mix-link-icon(@fa-var-bitbucket); } -a[href*="pinterest.com"] { .mix-link-icon(@fa-var-pinterest); } -a[href*="reddit.com"] { .mix-link-icon(@fa-var-reddit); } -a[href*="digg.com"] { .mix-link-icon(@fa-var-digg); } -a[href*="news.ycombinator.com"] { .mix-link-icon(@fa-var-hacker-news); } -a[href*="jsfiddle.com"] { .mix-link-icon(@fa-var-jsfiddle); } -a[href*="deviantart.com"] { .mix-link-icon(@fa-var-deviantart); } -a[href^="git@"] { .mix-link-icon(@fa-var-git); } -a[href*="wikipedia.com"] { .mix-link-icon(@fa-var-wikipedia-w); } - -#footer a:before { content: ""; } - -a[href="#document-top"] { - vertical-align: super; - font-weight: normal; - font-size: 15px; - .mix-link-icon(@fa-var-angle-double-up); - float:right; -} - -#footer a { - &:hover { - text-decoration: none; - } - &:after { - content: none; - } -} -
@@ -1,122 +0,0 @@
-.mix-box (@bg-color, @fg-color, @border-color) { - -moz-background-clip:padding; - -webkit-background-clip:padding-box; - background-clip:padding-box; - -webkit-border-radius:3px; - -moz-border-radius:3px; - border-radius:3px; - margin: 10px auto; - padding:2px 4px 0 4px; - box-shadow:0 1px 3px rgba(0,0,0,0.1); - text-shadow: 0 1px 0 rgba(255,255,255,0.8); - color:@fg-color; - background-color:@bg-color; - border:1px solid @border-color; - a { - color: @dark-blue; - } - p { - margin: 0 auto; - } -} - -.mix-no-border-radius { - -webkit-border-radius: 0px; - -moz-border-radius: 0px; - border-radius: 0px; -} - -.mix-inline-box (@bg-color, @fg-color, @border-color) { - color: @fg-color; - background-color: @bg-color; - padding:0 3px 0; - display: inline-block; - width: auto; - margin: 1px; - -webkit-border-radius:2px; - -moz-border-radius:2px; - border-radius:2px; - -moz-background-clip:padding; - -webkit-background-clip:padding-box; - background-clip:padding-box; - text-shadow: 0 1px 0 rgba(255,255,255,0.8); - box-shadow:0 1px 3px rgba(0,0,0,0.1); -} - -.mix-badge (@text, @color, @bg-color){ - color: @color; - &:before { - .mix-inline-box(@bg-color, @color, @color); - -webkit-border-radius:4px; - -moz-border-radius:4px; - border-radius:4px; - padding: 1px 1px 3px 1px; - line-height: 90%; - width: 50px; - text-align: center; - margin-right: 3px; - box-shadow: none; - font-variant: small-caps; - font-weight: bold; - content: @text; - } -} - - -.mix-titled-block (@bg-color, @fg-color, @border-color, @icon){ - .mix-box(@bg-color, @fg-color, @border-color); - font-size: 90%; - p { - margin: 0 auto; - &:first-child { - font-weight: bold; - color: @fg-color; - .mix-symbol(@icon, @fg-color) - } - } - a { - color: darken(@fg-color, 15%); - } -} - -.mix-red-badge (@text){ - .mix-badge(@text, @bright-red, @lighter-red); -} - -.mix-green-badge (@text){ - .mix-badge(@text, @dark-green, @lighter-green); -} - -.mix-yellow-badge (@text){ - .mix-badge(@text, @dark-yellow, @lighter-yellow); -} - -.mix-symbol (@symbol, @color, @size:100%, @space:" "){ - &:before { - font-family: "FontAwesome"; - font-style: normal; - font-weight: normal; - font-size: @size; - color: @color; - content: @symbol @space; - } -} - -.mix-circle (@color, @size:100%){ - .mix-symbol(@fa-var-circle, @color, @size); -} - -.mix-hyphens (@val) { - -webkit-hyphens: @val; - -moz-hyphens: @val; - -ms-hyphens: @val; - -o-hyphens: @val; - hyphens: @val; -} - -.mix-link-icon (@icon, @space:"\202F") { - &:before { - content: @icon @space; - font-family: "FontAwesome"; - } -}
@@ -1,406 +0,0 @@
-/*! normalize.css v2.1.3 | MIT License | git.io/normalize */ - -/* ========================================================================== - HTML5 display definitions - ========================================================================== */ - -/** - * Correct `block` display not defined in IE 8/9. - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section, -summary { - display: block; -} - -/** - * Correct `inline-block` display not defined in IE 8/9. - */ - -audio, -canvas, -video { - display: inline-block; -} - -/** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ - -audio:not([controls]) { - display: none; - height: 0; -} - -/** - * Address `[hidden]` styling not present in IE 8/9. - * Hide the `template` element in IE, Safari, and Firefox < 22. - */ - -[hidden], -template { - display: none; -} - -/* ========================================================================== - Base - ========================================================================== */ - -/** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. - */ - -html { - font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; /* 2 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} - -/** - * Remove default margin. - */ - -body { - margin: 0; -} - -/* ========================================================================== - Links - ========================================================================== */ - -/** - * Remove the gray background color from active links in IE 10. - */ - -a { - background: transparent; -} - -/** - * Address `outline` inconsistency between Chrome and other browsers. - */ - -a:focus { - outline: thin dotted; -} - -/** - * Improve readability when focused and also mouse hovered in all browsers. - */ - -a:active, -a:hover { - outline: 0; -} - -/* ========================================================================== - Typography - ========================================================================== */ - -/** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari 5, and Chrome. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/** - * Address styling not present in IE 8/9, Safari 5, and Chrome. - */ - -abbr[title] { - border-bottom: 1px dotted; -} - -/** - * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. - */ - -b, -strong { - font-weight: bold; -} - -/** - * Address styling not present in Safari 5 and Chrome. - */ - -dfn { - font-style: italic; -} - -/** - * Address differences between Firefox and other browsers. - */ - -hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; -} - -/** - * Address styling not present in IE 8/9. - */ - -mark { - background: #ff0; - color: #000; -} - -/** - * Correct font family set oddly in Safari 5 and Chrome. - */ - -code, -kbd, -pre, -samp { - font-family: monospace, serif; - font-size: 1em; -} - -/** - * Improve readability of pre-formatted text in all browsers. - */ - -pre { - white-space: pre-wrap; -} - -/** - * Set consistent quote types. - */ - -q { - quotes: "\201C" "\201D" "\2018" "\2019"; -} - -/** - * Address inconsistent and variable font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -/* ========================================================================== - Embedded content - ========================================================================== */ - -/** - * Remove border when inside `a` element in IE 8/9. - */ - -img { - border: 0; -} - -/** - * Correct overflow displayed oddly in IE 9. - */ - -svg:not(:root) { - overflow: hidden; -} - -/* ========================================================================== - Figures - ========================================================================== */ - -/** - * Address margin not present in IE 8/9 and Safari 5. - */ - -figure { - margin: 0; -} - -/* ========================================================================== - Forms - ========================================================================== */ - -/** - * Define consistent border, margin, and padding. - */ - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -/** - * 1. Correct `color` not being inherited in IE 8/9. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. - */ - -legend { - border: 0; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * 1. Correct font family not being inherited in all browsers. - * 2. Correct font size not being inherited in all browsers. - * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. - */ - -button, -input, -select, -textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 2 */ - margin: 0; /* 3 */ -} - -/** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ - -button, -input { - line-height: normal; -} - -/** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. - * Correct `select` style inheritance in Firefox 4+ and Opera. - */ - -button, -select { - text-transform: none; -} - -/** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. - */ - -button, -html input[type="button"], /* 1 */ -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; /* 2 */ - cursor: pointer; /* 3 */ -} - -/** - * Re-set default cursor for disabled elements. - */ - -button[disabled], -html input[disabled] { - cursor: default; -} - -/** - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. - */ - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome - * (include `-moz` to future-proof). - */ - -input[type="search"] { - -webkit-appearance: textfield; /* 1 */ - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; /* 2 */ - box-sizing: content-box; -} - -/** - * Remove inner padding and search cancel button in Safari 5 and Chrome - * on OS X. - */ - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * Remove inner padding and border in Firefox 4+. - */ - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -/** - * 1. Remove default vertical scrollbar in IE 8/9. - * 2. Improve readability and alignment in all browsers. - */ - -textarea { - overflow: auto; /* 1 */ - vertical-align: top; /* 2 */ -} - -/* ========================================================================== - Tables - ========================================================================== */ - -/** - * Remove most spacing between table cells. - */ - -table { - border-collapse: collapse; - border-spacing: 0; -}
@@ -1,161 +0,0 @@
-@media print { - - body { - width: 700px; - } - - @prince-pdf { - prince-pdf-page-mode: show-bookmarks; - } - - - /* Table of Contents */ - - #toc { - width: 650px; - list-style-type: none; - } - #toc ul { - list-style-type: none; - padding-left: 20px; - margin-left: 0; - } - - #toc li { - padding-left: 0; - margin-left: 0; - padding-bottom: 0.2em; - } - - #toc a { - text-decoration: none; - } - - #toc a::after { - content: leader(".") target-counter(attr(href), page); } - - #toc a[href="#preface"]::after { - content: leader(".") target-counter(attr(href), page, lower-roman); } - - #toc a { - color: #000; } - - #toc > li { - margin: 0.2em 0; - line-height: 1.2em; - font-weight: bold; - padding-bottom: 0.4em; - font-size: 110%; - } - - #toc > li > ul > li { - font-weight: normal; - font-size: 100%; - } - - #toc li li li li li li { - display: none; /* None sane of mind would EVER want more than five TOC levels. */ - } - - #toc > li { - counter-increment: toc1; - counter-reset: toc2; - } - #toc > li > a::before { - content: counter(toc1) " "; - } - #toc > li > a[href="#preface"]::before { - counter-reset: toc1; - content: ""; - } - #toc > li > ul > li { - counter-increment: toc2; - counter-reset: toc3; - } - #toc > li > ul > li > a::before { - content: counter(toc1) "." counter(toc2) " "; - } - - #toc > li > ul > li > ul > li { - counter-increment: toc3; - counter-reset: toc4; - } - #toc > li > ul > li > ul > li > a::before { - content: counter(toc1) "." counter(toc2) "." counter(toc3) " "; - } - #toc > li > ul > li > ul > li > ul > li { - counter-increment: toc4; - counter-reset: toc5; - } - #toc > li > ul > li > ul > li > ul > li > a::before { - content: counter(toc1) "." counter(toc2) "." counter(toc3) "." counter(toc4) " "; - } - #toc > li > ul > li > ul > li > ul > li > ul > li { - counter-increment: toc5; - counter-reset: toc6; - } - #toc > li > ul > li > ul > li > ul > li > ul > li > a::before { - content: counter(toc1) "." counter(toc2) "." counter(toc3) "." counter(toc4) "." counter(toc5) " "; - } - - a[href="#document-top"] { - display: none; - } - - h1 { - margin-bottom: 50px; - string-set: title content(); - border-bottom: 0; - } - - h2 { - margin-bottom: 30px; - page-break-before: always; - border-bottom: 0; - - } - - h2, h3, h4, h5, h6 { - page-break-after: avoid; - prince-bookmark-state: closed; - } - - #footer { - // For some reason the HastyScribe font is not displayed correctly. - display: none; - } - - @page:first { - @top-center { - content: ""; - } - } - - @page { - size: A4; - margin: 50pt 30pt 50pt 30pt; - padding-top: 20pt; - @top-center { - font-family: 'Arial'; - font-size: 0.8em; - content: string(title); - } - } - - @page:left { - @bottom-left { - content: counter(page); - font-family: "Arial", "Sans Serif"; - font-size: 0.8em; - } - } - @page:right { - @bottom-right { - content: counter(page); - font-family: "Arial", "Sans Serif"; - font-size: 0.8em; - } - } - - -}
@@ -1,59 +0,0 @@
- -/* Fonts */ - -@sans-font: "Source Sans Pro", "Calibri", "Helvetica", "Arial", "Freesans", "Clean", sans-serif; -@monospace-font: "Source Code Pro", "Monaco", "DejaVu Sans Mono", "Courier New", monospace; - -/* Colors */ - -@link-color: #4183c4; - -@lighter-red: #f8d8d8; -@light-red: #EFA4A4; -@dark-red: #9c2400; -@red: #da9797; -@bright-red: #CC3300; - -@lighter-blue:#d8ebf8; -@light-blue:#A4D1EF; -@dark-blue:#264c72; -@blue:#97c1da; -@bright-blue: #0F4BFF; - -@lighter-green: #d8f5cd; -@light-green: #B0EB99; -@dark-green: #009926; -@green: #a5d792; -@bright-green: #00CC33; - -@gray-e: #eee; -@gray-d: #ddd; -@gray-c: #ccc; -@gray-b: #bbb; -@gray-a: #aaa; -@gray-9: #999; -@gray-8: #888; -@gray-7: #777; -@gray-6: #666; -@gray-5: #555; -@gray-4: #444; -@gray-3: #333; -@gray-2: #222; -@gray-1: #111; - -@gray: @gray-9; -@light-gray:#f8f8f8; -@dark-gray: @gray-3; -@text-color: @gray-3; -@heading-color: @gray-1; - -@dark-yellow:#705400; -@lighter-yellow:#FFEBAD; -@light-yellow:#FFDB70; -@yellow:#E6AC00; -@bright-yellow: #F5B800; - -@dark-orange:#B84900; -@light-orange:#FFF599; -@orange:#FF944D; -@bright-orange: #FF6600;
@@ -1,1 +0,0 @@
-/*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a{background:transparent}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.mix-no-border-radius{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}body{background-color:#fff;margin:0 auto;height:100%;zoom:1;letter-spacing:normal;word-spacing:normal;color:#333;font:15px "Source Sans Pro","Calibri","Helvetica","Arial","Freesans","Clean",sans-serif;line-height:1.4;-webkit-font-smoothing:antialiased;width:960px;-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;-o-hyphens:auto;hyphens:auto;text-align:justify}@media screen and (max-width:659px){body{width:100%}}@media screen and (min-width:660px){body{width:660px}}#main,#footer,#header{width:94%;margin:auto}#footer{border-top:1px solid #ddd;text-align:center;font-size:75%}#footer p{line-height:.6em}#toc{margin-top:-10px}#toc ul{list-style-type:none;padding-left:20px}#toc>ul{padding-left:0}ul,ol{padding-left:30px}li p{margin:0 auto}.unstyled li{list-style-type:none}dl dt{font-weight:bold}dl dd{padding:0 0 .2em 0}h1,h2,h3,h4,h5,h6{color:#111;border-bottom:1px solid #ddd}h1{text-align:center}blockquote{border-left:3px solid #dedede;padding:0 10px;margin:10px 0;font-style:italic}pre{-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;margin:10px auto;padding:2px 4px 0 4px;box-shadow:0 1px 3px rgba(0,0,0,0.1);text-shadow:0 1px 0 rgba(255,255,255,0.8);color:#333;background-color:#f8f8f8;border:1px solid #ccc;margin:auto;font-family:"Source Code Pro","Monaco","DejaVu Sans Mono","Courier New",monospace;padding:0}pre a{color:#264c72}pre p{margin:0 auto}pre code{box-shadow:none;background:#f8f8f8;padding:0 2px 0 2px;border:none;line-height:1.2em}pre .hljs{padding:0 3px}@media screen and (max-width:639px){.responsive{width:100%;overflow-y:hidden;overflow-x:auto;-webkit-overflow-scrolling:touch}.responsive td{white-space:nowrap}}table{border-collapse:collapse;margin:15px auto;border-spacing:0;empty-cells:show}table thead{background:#f8f8f8;color:#222;text-align:left;vertical-align:bottom}table td,table th{background-color:transparent;border:1px solid #999;font-size:inherit;margin:0;overflow:visible;padding:6px 12px}address{font-style:italic;color:#999}hr{border:0;height:1px;background-image:-webkit-linear-gradient(left, rgba(99,99,99,0), rgba(99,99,99,0.75), rgba(99,99,99,0));background-image:-moz-linear-gradient(left, rgba(99,99,99,0), rgba(99,99,99,0.75), rgba(99,99,99,0));background-image:-ms-linear-gradient(left, rgba(99,99,99,0), rgba(99,99,99,0.75), rgba(99,99,99,0));background-image:-o-linear-gradient(left, rgba(99,99,99,0), rgba(99,99,99,0.75), rgba(99,99,99,0))}.center{margin:auto;text-align:center}[class^="fa-"]{font-family:"FontAwesome"}code,span.code{color:#333;background-color:#f8f8f8;padding:0 3px 0;display:inline-block;width:auto;margin:1px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;text-shadow:0 1px 0 rgba(255,255,255,0.8);box-shadow:0 1px 3px rgba(0,0,0,0.1);margin:2px 0;font-family:"Source Code Pro","Monaco","DejaVu Sans Mono","Courier New",monospace;font-size:85%;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-o-hyphens:none;hyphens:none}kbd,span.kbd{color:#333;background-color:#f8f8f8;padding:0 3px 0;display:inline-block;width:auto;margin:1px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;text-shadow:0 1px 0 rgba(255,255,255,0.8);box-shadow:0 1px 3px rgba(0,0,0,0.1);font-family:"Source Code Pro","Monaco","DejaVu Sans Mono","Courier New",monospace;font-weight:bold;border-right:1px solid #bbb;border-bottom:1px solid #bbb;line-height:1em;font-size:80%;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-o-hyphens:none;hyphens:none}mark,span.mark{padding:0 1px;color:#222}abbr,span.abbr{font-variant:small-caps;font-weight:bolder;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-o-hyphens:none;hyphens:none}abbr:hover,span.abbr:hover{cursor:help}samp,span.samp{font-size:90%;color:#333;background-color:#f8f8f8;padding:0 3px 0;display:inline-block;width:auto;margin:1px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;text-shadow:0 1px 0 rgba(255,255,255,0.8);box-shadow:0 1px 3px rgba(0,0,0,0.1);-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-o-hyphens:none;hyphens:none}var,span.var{font-size:90%;font-family:"Source Code Pro","Monaco","DejaVu Sans Mono","Courier New",monospace;font-weight:bold;font-style:normal;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-o-hyphens:none;hyphens:none}cite,span.cite{font-weight:bold;font-style:italic;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-o-hyphens:none;hyphens:none}q,span.q{font-style:italic;color:#666;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-o-hyphens:none;hyphens:none}span.tt,span.cmd,span.opt,span.arg,span.kwd,span.ext,span.file,span.dir{font-size:90%;font-family:"Source Code Pro","Monaco","DejaVu Sans Mono","Courier New",monospace;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-o-hyphens:none;hyphens:none}span.ext,span.kwd{font-weight:bold}a,a:visited{color:#4183c4;text-decoration:none}a:hover,a:visited:hover{text-decoration:underline}a[href^="http://"]:before,a[href^="https://"]:before,a[href^="ftp://"]:before,a[href^="sftp://"]:before{content:"\f0ac" "\202F";font-family:"FontAwesome"}a[href^="mailto:"]:before{content:"\f0e0" "\202F";font-family:"FontAwesome"}a[href^="tel:"]:before{content:"\f095" "\202F";font-family:"FontAwesome"}a[href^="skype://"]:before,a[href*="skype.com"]:before{content:"\f17e" "\202F";font-family:"FontAwesome"}a[href*="twitter.com"]:before{content:"\f099" "\202F";font-family:"FontAwesome"}a[href*="linkedin.com"]:before{content:"\f08c" "\202F";font-family:"FontAwesome"}a[href*="foursquare.com"]:before{content:"\f180" "\202F";font-family:"FontAwesome"}a[href*="facebook.com"]:before{content:"\f082" "\202F";font-family:"FontAwesome"}a[href*="flickr.com"]:before{content:"\f16e" "\202F";font-family:"FontAwesome"}a[href*="github.com"]:before{content:"\f09b" "\202F";font-family:"FontAwesome"}a[href*="stackoverflow.com"]:before{content:"\f16c" "\202F";font-family:"FontAwesome"}a[href*="youtube.com"]:before{content:"\f167" "\202F";font-family:"FontAwesome"}a[href*="dropbox.com"]:before{content:"\f16b" "\202F";font-family:"FontAwesome"}a[href*="instagram.com"]:before{content:"\f16d" "\202F";font-family:"FontAwesome"}a[href*="google.com"]:before{content:"\f1a0" "\202F";font-family:"FontAwesome"}a[href*="plus.google.com"]:before{content:"\f0d4" "\202F";font-family:"FontAwesome"}a[href*="yahoo.com"]:before{content:"\f19e" "\202F";font-family:"FontAwesome"}a[href*="tumblr.com"]:before{content:"\f174" "\202F";font-family:"FontAwesome"}a[href*="vimeo.com"]:before{content:"\f194" "\202F";font-family:"FontAwesome"}a[href*="bitbucket.com"]:before{content:"\f171" "\202F";font-family:"FontAwesome"}a[href*="pinterest.com"]:before{content:"\f0d2" "\202F";font-family:"FontAwesome"}a[href*="reddit.com"]:before{content:"\f1a1" "\202F";font-family:"FontAwesome"}a[href*="digg.com"]:before{content:"\f1a6" "\202F";font-family:"FontAwesome"}a[href*="news.ycombinator.com"]:before{content:"\f1d4" "\202F";font-family:"FontAwesome"}a[href*="jsfiddle.com"]:before{content:"\f1cc" "\202F";font-family:"FontAwesome"}a[href*="deviantart.com"]:before{content:"\f1bd" "\202F";font-family:"FontAwesome"}a[href^="git@"]:before{content:"\f1d3" "\202F";font-family:"FontAwesome"}a[href*="wikipedia.com"]:before{content:"\f266" "\202F";font-family:"FontAwesome"}#footer a:before{content:""}a[href="#document-top"]{vertical-align:super;font-weight:normal;font-size:15px;float:right}a[href="#document-top"]:before{content:"\f102" "\202F";font-family:"FontAwesome"}#footer a:hover{text-decoration:none}#footer a:after{content:none}.note{-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;margin:10px auto;padding:2px 4px 0 4px;box-shadow:0 1px 3px rgba(0,0,0,0.1);text-shadow:0 1px 0 rgba(255,255,255,0.8);color:#264c72;background-color:#d8ebf8;border:1px solid #a4d1ef;font-size:90%}.note a{color:#264c72}.note p{margin:0 auto}.note p{margin:0 auto}.note p:first-child{font-weight:bold;color:#264c72}.note p:first-child:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#264c72;content:"\f08d" " "}.note a{color:#132639}.tip{-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;margin:10px auto;padding:2px 4px 0 4px;box-shadow:0 1px 3px rgba(0,0,0,0.1);text-shadow:0 1px 0 rgba(255,255,255,0.8);color:#009926;background-color:#d8f5cd;border:1px solid #b0eb99;font-size:90%}.tip a{color:#264c72}.tip p{margin:0 auto}.tip p{margin:0 auto}.tip p:first-child{font-weight:bold;color:#009926}.tip p:first-child:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#009926;content:"\f058" " "}.tip a{color:#004d13}.warning{-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;margin:10px auto;padding:2px 4px 0 4px;box-shadow:0 1px 3px rgba(0,0,0,0.1);text-shadow:0 1px 0 rgba(255,255,255,0.8);color:#705400;background-color:#ffebad;border:1px solid #ffdb70;font-size:90%}.warning a{color:#264c72}.warning p{margin:0 auto}.warning p{margin:0 auto}.warning p:first-child{font-weight:bold;color:#705400}.warning p:first-child:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#705400;content:"\f071" " "}.warning a{color:#241b00}.sidebar{-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;margin:10px auto;padding:2px 4px 0 4px;box-shadow:0 1px 3px rgba(0,0,0,0.1);text-shadow:0 1px 0 rgba(255,255,255,0.8);color:#555;background-color:#f8f8f8;border:1px solid #f8f8f8;font-size:90%}.sidebar a{color:#264c72}.sidebar p{margin:0 auto}.sidebar p{margin:0 auto}.sidebar p:first-child{font-weight:bold;color:#555}.sidebar p:first-child:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#555;content:"\f05a" " "}.sidebar a{color:#2f2f2f}.output{-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;margin:10px auto;padding:2px 4px 0 4px;box-shadow:0 1px 3px rgba(0,0,0,0.1);text-shadow:0 1px 0 rgba(255,255,255,0.8);color:#555;background-color:#f8f8f8;border:1px solid #f8f8f8}.output a{color:#264c72}.output p{margin:0 auto}.terminal{-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;margin:10px auto;padding:2px 4px 0 4px;box-shadow:0 1px 3px rgba(0,0,0,0.1);text-shadow:0 1px 0 rgba(255,255,255,0.8);color:#eee;background-color:#222;border:1px solid #ccc;padding:0 3px;border:2px solid #999;border-top:10px solid #999}.terminal a{color:#264c72}.terminal p{margin:0 auto}.terminal p,.terminal p:first-child{margin-top:0;margin-bottom:0;text-shadow:none;font-weight:normal;font-family:"Source Code Pro","Monaco","DejaVu Sans Mono","Courier New",monospace;font-size:85%;color:#eee}.terminal p:before,.terminal p:first-child:before{font-family:"Source Code Pro","Monaco","DejaVu Sans Mono","Courier New",monospace;font-style:normal;font-weight:bold;color:#009926;content:"$ "}.terminal-su{-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;margin:10px auto;padding:2px 4px 0 4px;box-shadow:0 1px 3px rgba(0,0,0,0.1);text-shadow:0 1px 0 rgba(255,255,255,0.8);color:#eee;background-color:#222;border:1px solid #ccc;padding:0 3px;border:2px solid #999;border-top:10px solid #999}.terminal-su a{color:#264c72}.terminal-su p{margin:0 auto}.terminal-su p,.terminal-su p:first-child{margin-top:0;margin-bottom:0;text-shadow:none;font-weight:normal;font-family:"Source Code Pro","Monaco","DejaVu Sans Mono","Courier New",monospace;font-size:85%;color:#eee}.terminal-su p:before,.terminal-su p:first-child:before{font-family:"Source Code Pro","Monaco","DejaVu Sans Mono","Courier New",monospace;font-style:normal;font-weight:bold;color:#009926;content:"$ "}.terminal-su p:before,.terminal-su p:first-child:before{color:#c30;content:"# "}div .terminal{margin:2px auto}.todo{color:#c30}.todo:before{color:#c30;background-color:#f8d8d8;padding:0 3px 0;display:inline-block;width:auto;margin:1px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;text-shadow:0 1px 0 rgba(255,255,255,0.8);box-shadow:0 1px 3px rgba(0,0,0,0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:1px 1px 3px 1px;line-height:90%;width:50px;text-align:center;margin-right:3px;box-shadow:none;font-variant:small-caps;font-weight:bold;content:"todo"}.fixme{color:#c30}.fixme:before{color:#c30;background-color:#f8d8d8;padding:0 3px 0;display:inline-block;width:auto;margin:1px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;text-shadow:0 1px 0 rgba(255,255,255,0.8);box-shadow:0 1px 3px rgba(0,0,0,0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:1px 1px 3px 1px;line-height:90%;width:50px;text-align:center;margin-right:3px;box-shadow:none;font-variant:small-caps;font-weight:bold;content:"fixme"}.deadline{color:#c30}.deadline:before{color:#c30;background-color:#f8d8d8;padding:0 3px 0;display:inline-block;width:auto;margin:1px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;text-shadow:0 1px 0 rgba(255,255,255,0.8);box-shadow:0 1px 3px rgba(0,0,0,0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:1px 1px 3px 1px;line-height:90%;width:50px;text-align:center;margin-right:3px;box-shadow:none;font-variant:small-caps;font-weight:bold;content:"deadline"}.important{color:#c30}.important:before{color:#c30;background-color:#f8d8d8;padding:0 3px 0;display:inline-block;width:auto;margin:1px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;text-shadow:0 1px 0 rgba(255,255,255,0.8);box-shadow:0 1px 3px rgba(0,0,0,0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:1px 1px 3px 1px;line-height:90%;width:50px;text-align:center;margin-right:3px;box-shadow:none;font-variant:small-caps;font-weight:bold;content:"important"}.urgent{color:#c30}.urgent:before{color:#c30;background-color:#f8d8d8;padding:0 3px 0;display:inline-block;width:auto;margin:1px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;text-shadow:0 1px 0 rgba(255,255,255,0.8);box-shadow:0 1px 3px rgba(0,0,0,0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:1px 1px 3px 1px;line-height:90%;width:50px;text-align:center;margin-right:3px;box-shadow:none;font-variant:small-caps;font-weight:bold;content:"urgent"}.verify{color:#705400}.verify:before{color:#705400;background-color:#ffebad;padding:0 3px 0;display:inline-block;width:auto;margin:1px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;text-shadow:0 1px 0 rgba(255,255,255,0.8);box-shadow:0 1px 3px rgba(0,0,0,0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:1px 1px 3px 1px;line-height:90%;width:50px;text-align:center;margin-right:3px;box-shadow:none;font-variant:small-caps;font-weight:bold;content:"verify"}.draftcomment{color:#009926}.draftcomment:before{color:#009926;background-color:#d8f5cd;padding:0 3px 0;display:inline-block;width:auto;margin:1px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;text-shadow:0 1px 0 rgba(255,255,255,0.8);box-shadow:0 1px 3px rgba(0,0,0,0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:1px 1px 3px 1px;line-height:90%;width:50px;text-align:center;margin-right:3px;box-shadow:none;font-variant:small-caps;font-weight:bold;content:"comment"}.red-circle:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#c30;content:"\f111" " "}.green-circle:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#0c3;content:"\f111" " "}.yellow-circle:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#f5b800;content:"\f111" " "}.gray-circle:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#999;content:"\f111" " "}.star:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#f5b800;content:"\f005" " "}.heart:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#c30;content:"\f004" " "}.square:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#c30;content:"\f096" " "}.check:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#0c3;content:"\f046" " "}.lock:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#f5b800;content:"\f023" " "}.unlock:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#f5b800;content:"\f09c" " "}.bug:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#c30;content:"\f188" " "}.tag:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#f5b800;content:"\f02b" " "}.tags:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#f5b800;content:"\f02c" " "}.date:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#0f4bff;content:"\f073" " "}.time:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#0f4bff;content:"\f017" " "}.attachment:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#333;content:"\f0c6" " "}.geo:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#c30;content:"\f041" " "}.danger:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#c30;content:"\f071" " "}.question:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#0f4bff;content:"\f059" " "}.phone:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#333;content:"\f095" " "}.email:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#333;content:"\f0e0" " "}.fax:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#333;content:"\f1ac" " "}.website:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#333;content:"\f0ac" " "}.hastyscribe:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:180%;color:#333;content:"H" " "}.hastyscribe:before{font-family:"HastyScribe";font-size:1.8em;margin-right:-2%;vertical-align:middle}.btc:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:90%;color:#333;content:"\f15a" ""}.eur:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:90%;color:#333;content:"\f153" ""}.usd:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:90%;color:#333;content:"\f155" ""}.gbp:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:90%;color:#333;content:"\f154" ""}.jpy:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:90%;color:#333;content:"\f157" ""}.inr:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:90%;color:#333;content:"\f156" ""}.krw:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:90%;color:#333;content:"\f159" ""}.rub:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:90%;color:#333;content:"\f158" ""}.try:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:90%;color:#333;content:"\f195" ""}.copy:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#333;content:"\f1f9" " "}.reg:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#333;content:"\f25d" " "}.tm:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#333;content:"\f25c" " "}.red-flag:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#c30;content:"\f024" " "}.green-flag:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#0c3;content:"\f024" " "}.yellow-flag:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#f5b800;content:"\f024" " "}.story:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#0f4bff;content:"\f075" " "}.feature:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#0c3;content:"\f058" " "}.project:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#705400;content:"\f0b1" " "}.user:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#0f4bff;content:"\f007" " "}.add:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#0c3;content:"\f055" " "}.remove:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#c30;content:"\f056" " "}.html5:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#c30;content:"\f13b" " "}.css3:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#0f4bff;content:"\f13c" " "}.apple:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#aaa;content:"\f179" " "}.windows:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#0f4bff;content:"\f17a" " "}.linux:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#000;content:"\f17c" " "}.android:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#a4c739;content:"\f17b" " "}.idea:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#f5b800;content:"\f0eb" " "}.sticky:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#f5b800;content:"\f249" " "}.link:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#0f4bff;content:"\f0c1" " "}.chrome:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#f5b800;content:"\f268" " "}.firefox:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#f60;content:"\f269" " "}.ie:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#0f4bff;content:"\f26b" " "}.opera:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#c30;content:"\f26a" " "}.safari:before{font-family:"FontAwesome";font-style:normal;font-weight:normal;font-size:100%;color:#0f4bff;content:"\f267" " "}.headings h1{font-size:2em}.headings h2{font-size:1.5em;counter-reset:h3;counter-increment:h2}.headings h2::before{content:counter(h2) "\00A0\00A0"}.headings h3{font-size:1.2em;counter-reset:h4;counter-increment:h3}.headings h3::before{content:counter(h2) "." counter(h3) "\00A0\00A0"}.headings h4{font-size:1.1em;counter-reset:h5;counter-increment:h4}.headings h4::before{content:counter(h2) "." counter(h3) "." counter(h4) "\00A0\00A0"}.headings h5{font-size:1em;counter-reset:h6;counter-increment:h5}.headings h5::before{content:counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) "\00A0\00A0"}.headings h6{font-size:1em;counter-increment:h6}.headings h6::before{content:counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) "." counter(h6) "\00A0\00A0"}.headings #toc{counter-reset:toc2}.headings #toc li li a{counter-reset:toc3;counter-increment:toc2}.headings #toc li li a::before{content:counter(toc2) "\00A0\00A0"}.headings #toc li li li a{counter-reset:toc4;counter-increment:toc3}.headings #toc li li li a::before{content:counter(toc2) "." counter(toc3) "\00A0\00A0"}.headings #toc li li li li a{counter-reset:toc5;counter-increment:toc4}.headings #toc li li li li a::before{content:counter(toc2) "." counter(toc3) "." counter(toc4) "\00A0\00A0"}.headings #toc li li li li li a{counter-reset:toc6;counter-increment:toc5}.headings #toc li li li li li a::before{content:counter(toc2) "." counter(toc3) "." counter(toc4) "." counter(toc5) "\00A0\00A0"}.headings #toc li li li li li li a{counter-increment:toc6}.headings #toc li li li li li li a::before{content:counter(toc2) "." counter(toc3) "." counter(toc4) "." counter(toc5) "." counter(toc6) "\00A0\00A0"}@media print{body{width:700px}@prince-pdf{prince-pdf-page-mode:show-bookmarks}#toc{width:650px;list-style-type:none}#toc ul{list-style-type:none;padding-left:20px;margin-left:0}#toc li{padding-left:0;margin-left:0;padding-bottom:.2em}#toc a{text-decoration:none}#toc a::after{content:leader(".") target-counter(attr(href), page)}#toc a[href="#preface"]::after{content:leader(".") target-counter(attr(href), page, lower-roman)}#toc a{color:#000}#toc>li{margin:.2em 0;line-height:1.2em;font-weight:bold;padding-bottom:.4em;font-size:110%}#toc>li>ul>li{font-weight:normal;font-size:100%}#toc li li li li li li{display:none}#toc>li{counter-increment:toc1;counter-reset:toc2}#toc>li>a::before{content:counter(toc1) " "}#toc>li>a[href="#preface"]::before{counter-reset:toc1;content:""}#toc>li>ul>li{counter-increment:toc2;counter-reset:toc3}#toc>li>ul>li>a::before{content:counter(toc1) "." counter(toc2) " "}#toc>li>ul>li>ul>li{counter-increment:toc3;counter-reset:toc4}#toc>li>ul>li>ul>li>a::before{content:counter(toc1) "." counter(toc2) "." counter(toc3) " "}#toc>li>ul>li>ul>li>ul>li{counter-increment:toc4;counter-reset:toc5}#toc>li>ul>li>ul>li>ul>li>a::before{content:counter(toc1) "." counter(toc2) "." counter(toc3) "." counter(toc4) " "}#toc>li>ul>li>ul>li>ul>li>ul>li{counter-increment:toc5;counter-reset:toc6}#toc>li>ul>li>ul>li>ul>li>ul>li>a::before{content:counter(toc1) "." counter(toc2) "." counter(toc3) "." counter(toc4) "." counter(toc5) " "}a[href="#document-top"]{display:none}h1{margin-bottom:50px;string-set:title content();border-bottom:0}h2{margin-bottom:30px;page-break-before:always;border-bottom:0}h2,h3,h4,h5,h6{page-break-after:avoid;prince-bookmark-state:closed}#footer{display:none}@page :first{@top-center{content:""}}@page{size:A4;margin:50pt 30pt 50pt 30pt;padding-top:20pt;@top-center{font-family:'Arial';font-size:.8em;content:string(title)}}@page :left{@bottom-left{content:counter(page);font-family:"Arial","Sans Serif";font-size:.8em}}@page :right{@bottom-right{content:counter(page);font-family:"Arial","Sans Serif";font-size:.8em}}}
@@ -1,12 +0,0 @@
-@import "_normalize.less"; -@import "_variables.less"; -@import "_fa-variables.less"; -@import "_fa-icons.less"; -@import "_mixins.less"; -@import "_layout.less"; -@import "_elements.less"; -@import "_links.less"; -@import "_blocks.less"; -@import "_badges.less"; -@import "_headings.less"; -@import "_printing.less";
@@ -1,33 +0,0 @@
------ -permalink: herald-vim-color-scheme -title: "herald.vim" -subtitle: "An easy to read, portable and pretty Vim Color Scheme" -type: project ------ -*herald* is a dark color scheme for "Vim":http://www.vim.org which aims to be easy to read, eye-appealing, portable on multiple terminals, and suitable for source code highlighting in multiple languages. - -You can get the latest version *"HERE":/files/herald.vim* (direct link). - -h3. Changelog - -* *v0.2.1* -** Improved readability in search highlights -** Delimiters are now rendered like operators -* *v0.2.0* -** Support for 8 and 16 color modes -** Fixed completion menu colors -** Improved readability for Visual mode -** Specified highlighting for all the most common Vim syntax groups -* *v0.1.0* -** Initial Release - -h3. Screenshot - -!/images/herald.vim/herald_vim_example.png! - -h3. Resources - -* "First Announcement":/articles/herald-vim-color-scheme -* "0.2.1 Release Annoucement":/articles/herald-vim-021 -* "Script Page":http://www.vim.org/scripts/script.php?script_id=2684 [on Vim.org] -* "File History":http://github.com/h3rald/stash/commits/master/.vim/colors/herald.vim [on GitHub]
@@ -1,39 +0,0 @@
------ -permalink: home -filters_pre: -- erb -title: Home -type: page -feed: '/' -feed_url: "http://feeds.feedburner.com/h3rald" -feed_title: 'Latest Articles' ------ -<% -max_items = 15 - -latest = latest_articles 6 -popular = popular_articles 10 - -%> -<div class="row"> - <div class="col-md-8" id="main-content"> - <%= render 'article_intro', :item => latest[0], :classes => "hyphenate", :extended => true %> - <%= render 'article_intro', :item => latest[1], :classes => "hyphenate", :extended => false %> - <%= render 'article_intro', :item => latest[2], :classes => "hyphenate", :extended => false %> - <%= render 'article_intro', :item => latest[3], :classes => "hyphenate", :extended => false %> - <%= render 'article_intro', :item => latest[4], :classes => "hyphenate", :extended => false %> - <%= render 'article_intro', :item => latest[5], :classes => "hyphenate", :extended => false %> - <p><a href="/archives/">← Older Articles</a></p> - </div><!-- #main-content end --> - <div class="col-md-4" id="secondary-content"> - <span class="featured"><i class="h3-fire"></i> popular</span> - <%= render 'article_box', :item => popular[0], :classes => "hyphenate", :extended => true %> - <%= render 'article_box', :item => popular[1], :classes => "hyphenate", :extended => false %> - <%= render 'article_box', :item => popular[2], :classes => "hyphenate", :extended => false %> - <%= render 'article_box', :item => popular[3], :classes => "hyphenate", :extended => false %> - <%= render 'article_box', :item => popular[4], :classes => "hyphenate", :extended => false %> - <%= render 'article_box', :item => popular[5], :classes => "hyphenate", :extended => false %> - <%= render 'article_box', :item => popular[6], :classes => "hyphenate", :extended => false %> - <%= render 'article_box', :item => popular[7], :classes => "hyphenate", :extended => false %> - </div><!-- #secondary-content-end --> -</div>
@@ -1,12 +0,0 @@
-/*! - * Bootstrap v3.3.4 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -/*! - * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=2b3bdc340744aeea5a18) - * Config saved to config.json and https://gist.github.com/2b3bdc340744aeea5a18 - */ -if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(t){"use strict";var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.alert");n||i.data("bs.alert",n=new o(this)),"string"==typeof e&&n[e].call(i)})}var i='[data-dismiss="alert"]',o=function(e){t(e).on("click",i,this.close)};o.VERSION="3.3.2",o.TRANSITION_DURATION=150,o.prototype.close=function(e){function i(){a.detach().trigger("closed.bs.alert").remove()}var n=t(this),s=n.attr("data-target");s||(s=n.attr("href"),s=s&&s.replace(/.*(?=#[^\s]*$)/,""));var a=t(s);e&&e.preventDefault(),a.length||(a=n.closest(".alert")),a.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(a.removeClass("in"),t.support.transition&&a.hasClass("fade")?a.one("bsTransitionEnd",i).emulateTransitionEnd(o.TRANSITION_DURATION):i())};var n=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=o,t.fn.alert.noConflict=function(){return t.fn.alert=n,this},t(document).on("click.bs.alert.data-api",i,o.prototype.close)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.button"),s="object"==typeof e&&e;n||o.data("bs.button",n=new i(this,s)),"toggle"==e?n.toggle():e&&n.setState(e)})}var i=function(e,o){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,o),this.isLoading=!1};i.VERSION="3.3.2",i.DEFAULTS={loadingText:"loading..."},i.prototype.setState=function(e){var i="disabled",o=this.$element,n=o.is("input")?"val":"html",s=o.data();e+="Text",null==s.resetText&&o.data("resetText",o[n]()),setTimeout(t.proxy(function(){o[n](null==s[e]?this.options[e]:s[e]),"loadingText"==e?(this.isLoading=!0,o.addClass(i).attr(i,i)):this.isLoading&&(this.isLoading=!1,o.removeClass(i).removeAttr(i))},this),0)},i.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")&&(i.prop("checked")&&this.$element.hasClass("active")?t=!1:e.find(".active").removeClass("active")),t&&i.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));t&&this.$element.toggleClass("active")};var o=t.fn.button;t.fn.button=e,t.fn.button.Constructor=i,t.fn.button.noConflict=function(){return t.fn.button=o,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(i){var o=t(i.target);o.hasClass("btn")||(o=o.closest(".btn")),e.call(o,"toggle"),i.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.carousel"),s=t.extend({},i.DEFAULTS,o.data(),"object"==typeof e&&e),a="string"==typeof e?e:s.slide;n||o.data("bs.carousel",n=new i(this,s)),"number"==typeof e?n.to(e):a?n[a]():s.interval&&n.pause().cycle()})}var i=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};i.VERSION="3.3.2",i.TRANSITION_DURATION=600,i.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},i.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},i.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},i.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},i.prototype.getItemForDirection=function(t,e){var i=this.getItemIndex(e),o="prev"==t&&0===i||"next"==t&&i==this.$items.length-1;if(o&&!this.options.wrap)return e;var n="prev"==t?-1:1,s=(i+n)%this.$items.length;return this.$items.eq(s)},i.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(".item.active"));return t>this.$items.length-1||0>t?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",this.$items.eq(t))},i.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},i.prototype.next=function(){return this.sliding?void 0:this.slide("next")},i.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},i.prototype.slide=function(e,o){var n=this.$element.find(".item.active"),s=o||this.getItemForDirection(e,n),a=this.interval,r="next"==e?"left":"right",l=this;if(s.hasClass("active"))return this.sliding=!1;var h=s[0],d=t.Event("slide.bs.carousel",{relatedTarget:h,direction:r});if(this.$element.trigger(d),!d.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var p=t(this.$indicators.children()[this.getItemIndex(s)]);p&&p.addClass("active")}var c=t.Event("slid.bs.carousel",{relatedTarget:h,direction:r});return t.support.transition&&this.$element.hasClass("slide")?(s.addClass(e),s[0].offsetWidth,n.addClass(r),s.addClass(r),n.one("bsTransitionEnd",function(){s.removeClass([e,r].join(" ")).addClass("active"),n.removeClass(["active",r].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(c)},0)}).emulateTransitionEnd(i.TRANSITION_DURATION)):(n.removeClass("active"),s.addClass("active"),this.sliding=!1,this.$element.trigger(c)),a&&this.cycle(),this}};var o=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=i,t.fn.carousel.noConflict=function(){return t.fn.carousel=o,this};var n=function(i){var o,n=t(this),s=t(n.attr("data-target")||(o=n.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,""));if(s.hasClass("carousel")){var a=t.extend({},s.data(),n.data()),r=n.attr("data-slide-to");r&&(a.interval=!1),e.call(s,a),r&&s.data("bs.carousel").to(r),i.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",n).on("click.bs.carousel.data-api","[data-slide-to]",n),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var i=t(this);e.call(i,i.data())})})}(jQuery),+function(t){"use strict";function e(e){e&&3===e.which||(t(n).remove(),t(s).each(function(){var o=t(this),n=i(o),s={relatedTarget:this};n.hasClass("open")&&(n.trigger(e=t.Event("hide.bs.dropdown",s)),e.isDefaultPrevented()||(o.attr("aria-expanded","false"),n.removeClass("open").trigger("hidden.bs.dropdown",s)))}))}function i(e){var i=e.attr("data-target");i||(i=e.attr("href"),i=i&&/#[A-Za-z]/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var o=i&&t(i);return o&&o.length?o:e.parent()}function o(e){return this.each(function(){var i=t(this),o=i.data("bs.dropdown");o||i.data("bs.dropdown",o=new a(this)),"string"==typeof e&&o[e].call(i)})}var n=".dropdown-backdrop",s='[data-toggle="dropdown"]',a=function(e){t(e).on("click.bs.dropdown",this.toggle)};a.VERSION="3.3.2",a.prototype.toggle=function(o){var n=t(this);if(!n.is(".disabled, :disabled")){var s=i(n),a=s.hasClass("open");if(e(),!a){"ontouchstart"in document.documentElement&&!s.closest(".navbar-nav").length&&t('<div class="dropdown-backdrop"/>').insertAfter(t(this)).on("click",e);var r={relatedTarget:this};if(s.trigger(o=t.Event("show.bs.dropdown",r)),o.isDefaultPrevented())return;n.trigger("focus").attr("aria-expanded","true"),s.toggleClass("open").trigger("shown.bs.dropdown",r)}return!1}},a.prototype.keydown=function(e){if(/(38|40|27|32)/.test(e.which)&&!/input|textarea/i.test(e.target.tagName)){var o=t(this);if(e.preventDefault(),e.stopPropagation(),!o.is(".disabled, :disabled")){var n=i(o),a=n.hasClass("open");if(!a&&27!=e.which||a&&27==e.which)return 27==e.which&&n.find(s).trigger("focus"),o.trigger("click");var r=" li:not(.disabled):visible a",l=n.find('[role="menu"]'+r+', [role="listbox"]'+r);if(l.length){var h=l.index(e.target);38==e.which&&h>0&&h--,40==e.which&&h<l.length-1&&h++,~h||(h=0),l.eq(h).trigger("focus")}}}};var r=t.fn.dropdown;t.fn.dropdown=o,t.fn.dropdown.Constructor=a,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=r,this},t(document).on("click.bs.dropdown.data-api",e).on("click.bs.dropdown.data-api",".dropdown form",function(t){t.stopPropagation()}).on("click.bs.dropdown.data-api",s,a.prototype.toggle).on("keydown.bs.dropdown.data-api",s,a.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',a.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',a.prototype.keydown)}(jQuery),+function(t){"use strict";function e(e,o){return this.each(function(){var n=t(this),s=n.data("bs.modal"),a=t.extend({},i.DEFAULTS,n.data(),"object"==typeof e&&e);s||n.data("bs.modal",s=new i(this,a)),"string"==typeof e?s[e](o):a.show&&s.show(o)})}var i=function(e,i){this.options=i,this.$body=t(document.body),this.$element=t(e),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,t.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};i.VERSION="3.3.2",i.TRANSITION_DURATION=300,i.BACKDROP_TRANSITION_DURATION=150,i.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},i.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},i.prototype.show=function(e){var o=this,n=t.Event("show.bs.modal",{relatedTarget:e});this.$element.trigger(n),this.isShown||n.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',t.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){o.$element.one("mouseup.dismiss.bs.modal",function(e){t(e.target).is(o.$element)&&(o.ignoreBackdropClick=!0)})}),this.backdrop(function(){var n=t.support.transition&&o.$element.hasClass("fade");o.$element.parent().length||o.$element.appendTo(o.$body),o.$element.show().scrollTop(0),o.adjustDialog(),n&&o.$element[0].offsetWidth,o.$element.addClass("in").attr("aria-hidden",!1),o.enforceFocus();var s=t.Event("shown.bs.modal",{relatedTarget:e});n?o.$dialog.one("bsTransitionEnd",function(){o.$element.trigger("focus").trigger(s)}).emulateTransitionEnd(i.TRANSITION_DURATION):o.$element.trigger("focus").trigger(s)}))},i.prototype.hide=function(e){e&&e.preventDefault(),e=t.Event("hide.bs.modal"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),t(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),t.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",t.proxy(this.hideModal,this)).emulateTransitionEnd(i.TRANSITION_DURATION):this.hideModal())},i.prototype.enforceFocus=function(){t(document).off("focusin.bs.modal").on("focusin.bs.modal",t.proxy(function(t){this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},i.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",t.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},i.prototype.resize=function(){this.isShown?t(window).on("resize.bs.modal",t.proxy(this.handleUpdate,this)):t(window).off("resize.bs.modal")},i.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass("modal-open"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger("hidden.bs.modal")})},i.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},i.prototype.backdrop=function(e){var o=this,n=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var s=t.support.transition&&n;if(this.$backdrop=t('<div class="modal-backdrop '+n+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",t.proxy(function(t){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),s&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!e)return;s?this.$backdrop.one("bsTransitionEnd",e).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION):e()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var a=function(){o.removeBackdrop(),e&&e()};t.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",a).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION):a()}else e&&e()},i.prototype.handleUpdate=function(){this.adjustDialog()},i.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},i.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},i.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},i.prototype.setScrollbar=function(){var t=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",t+this.scrollbarWidth)},i.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},i.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var o=t.fn.modal;t.fn.modal=e,t.fn.modal.Constructor=i,t.fn.modal.noConflict=function(){return t.fn.modal=o,this},t(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(i){var o=t(this),n=o.attr("href"),s=t(o.attr("data-target")||n&&n.replace(/.*(?=#[^\s]+$)/,"")),a=s.data("bs.modal")?"toggle":t.extend({remote:!/#/.test(n)&&n},s.data(),o.data());o.is("a")&&i.preventDefault(),s.one("show.bs.modal",function(t){t.isDefaultPrevented()||s.one("hidden.bs.modal",function(){o.is(":visible")&&o.trigger("focus")})}),e.call(s,a,this)})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.tooltip"),s="object"==typeof e&&e;(n||!/destroy|hide/.test(e))&&(n||o.data("bs.tooltip",n=new i(this,s)),"string"==typeof e&&n[e]())})}var i=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.init("tooltip",t,e)};i.VERSION="3.3.2",i.TRANSITION_DURATION=150,i.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},i.prototype.init=function(e,i,o){if(this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(o),this.$viewport=this.options.viewport&&t(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var n=this.options.trigger.split(" "),s=n.length;s--;){var a=n[s];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var r="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(r+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},i.prototype.getDelegateOptions=function(){var e={},i=this.getDefaults();return this._options&&t.each(this._options,function(t,o){i[t]!=o&&(e[t]=o)}),e},i.prototype.enter=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i&&i.$tip&&i.$tip.is(":visible")?void(i.hoverState="in"):(i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),clearTimeout(i.timeout),i.hoverState="in",i.options.delay&&i.options.delay.show?void(i.timeout=setTimeout(function(){"in"==i.hoverState&&i.show()},i.options.delay.show)):i.show())},i.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),clearTimeout(i.timeout),i.hoverState="out",i.options.delay&&i.options.delay.hide?void(i.timeout=setTimeout(function(){"out"==i.hoverState&&i.hide()},i.options.delay.hide)):i.hide()},i.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var o=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!o)return;var n=this,s=this.tip(),a=this.getUID(this.type);this.setContent(),s.attr("id",a),this.$element.attr("aria-describedby",a),this.options.animation&&s.addClass("fade");var r="function"==typeof this.options.placement?this.options.placement.call(this,s[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,h=l.test(r);h&&(r=r.replace(l,"")||"top"),s.detach().css({top:0,left:0,display:"block"}).addClass(r).data("bs."+this.type,this),this.options.container?s.appendTo(this.options.container):s.insertAfter(this.$element);var d=this.getPosition(),p=s[0].offsetWidth,c=s[0].offsetHeight;if(h){var f=r,u=this.options.container?t(this.options.container):this.$element.parent(),g=this.getPosition(u);r="bottom"==r&&d.bottom+c>g.bottom?"top":"top"==r&&d.top-c<g.top?"bottom":"right"==r&&d.right+p>g.width?"left":"left"==r&&d.left-p<g.left?"right":r,s.removeClass(f).addClass(r)}var m=this.getCalculatedOffset(r,d,p,c);this.applyPlacement(m,r);var v=function(){var t=n.hoverState;n.$element.trigger("shown.bs."+n.type),n.hoverState=null,"out"==t&&n.leave(n)};t.support.transition&&this.$tip.hasClass("fade")?s.one("bsTransitionEnd",v).emulateTransitionEnd(i.TRANSITION_DURATION):v()}},i.prototype.applyPlacement=function(e,i){var o=this.tip(),n=o[0].offsetWidth,s=o[0].offsetHeight,a=parseInt(o.css("margin-top"),10),r=parseInt(o.css("margin-left"),10);isNaN(a)&&(a=0),isNaN(r)&&(r=0),e.top=e.top+a,e.left=e.left+r,t.offset.setOffset(o[0],t.extend({using:function(t){o.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),o.addClass("in");var l=o[0].offsetWidth,h=o[0].offsetHeight;"top"==i&&h!=s&&(e.top=e.top+s-h);var d=this.getViewportAdjustedDelta(i,e,l,h);d.left?e.left+=d.left:e.top+=d.top;var p=/top|bottom/.test(i),c=p?2*d.left-n+l:2*d.top-s+h,f=p?"offsetWidth":"offsetHeight";o.offset(e),this.replaceArrow(c,o[0][f],p)},i.prototype.replaceArrow=function(t,e,i){this.arrow().css(i?"left":"top",50*(1-t/e)+"%").css(i?"top":"left","")},i.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();t.find(".tooltip-inner")[this.options.html?"html":"text"](e),t.removeClass("fade in top bottom left right")},i.prototype.hide=function(e){function o(){"in"!=n.hoverState&&s.detach(),n.$element.removeAttr("aria-describedby").trigger("hidden.bs."+n.type),e&&e()}var n=this,s=t(this.$tip),a=t.Event("hide.bs."+this.type);return this.$element.trigger(a),a.isDefaultPrevented()?void 0:(s.removeClass("in"),t.support.transition&&s.hasClass("fade")?s.one("bsTransitionEnd",o).emulateTransitionEnd(i.TRANSITION_DURATION):o(),this.hoverState=null,this)},i.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},i.prototype.hasContent=function(){return this.getTitle()},i.prototype.getPosition=function(e){e=e||this.$element;var i=e[0],o="BODY"==i.tagName,n=i.getBoundingClientRect();null==n.width&&(n=t.extend({},n,{width:n.right-n.left,height:n.bottom-n.top}));var s=o?{top:0,left:0}:e.offset(),a={scroll:o?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},r=o?{width:t(window).width(),height:t(window).height()}:null;return t.extend({},n,a,r,s)},i.prototype.getCalculatedOffset=function(t,e,i,o){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-i/2}:"top"==t?{top:e.top-o,left:e.left+e.width/2-i/2}:"left"==t?{top:e.top+e.height/2-o/2,left:e.left-i}:{top:e.top+e.height/2-o/2,left:e.left+e.width}},i.prototype.getViewportAdjustedDelta=function(t,e,i,o){var n={top:0,left:0};if(!this.$viewport)return n;var s=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(t)){var r=e.top-s-a.scroll,l=e.top+s-a.scroll+o;r<a.top?n.top=a.top-r:l>a.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;h<a.left?n.left=a.left-h:d>a.width&&(n.left=a.left+a.width-d)}return n},i.prototype.getTitle=function(){var t,e=this.$element,i=this.options;return t=e.attr("data-original-title")||("function"==typeof i.title?i.title.call(e[0]):i.title)},i.prototype.getUID=function(t){do t+=~~(1e6*Math.random());while(document.getElementById(t));return t},i.prototype.tip=function(){return this.$tip=this.$tip||t(this.options.template)},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},i.prototype.enable=function(){this.enabled=!0},i.prototype.disable=function(){this.enabled=!1},i.prototype.toggleEnabled=function(){this.enabled=!this.enabled},i.prototype.toggle=function(e){var i=this;e&&(i=t(e.currentTarget).data("bs."+this.type),i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i))),i.tip().hasClass("in")?i.leave(i):i.enter(i)},i.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type)})};var o=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=i,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=o,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.popover"),s="object"==typeof e&&e;(n||!/destroy|hide/.test(e))&&(n||o.data("bs.popover",n=new i(this,s)),"string"==typeof e&&n[e]())})}var i=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");i.VERSION="3.3.2",i.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),i.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),i.prototype.constructor=i,i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof i?"html":"append":"text"](i),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},i.prototype.hasContent=function(){return this.getTitle()||this.getContent()},i.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var o=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=i,t.fn.popover.noConflict=function(){return t.fn.popover=o,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.tab");n||o.data("bs.tab",n=new i(this)),"string"==typeof e&&n[e]()})}var i=function(e){this.element=t(e)};i.VERSION="3.3.2",i.TRANSITION_DURATION=150,i.prototype.show=function(){var e=this.element,i=e.closest("ul:not(.dropdown-menu)"),o=e.data("target");if(o||(o=e.attr("href"),o=o&&o.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var n=i.find(".active:last a"),s=t.Event("hide.bs.tab",{relatedTarget:e[0]}),a=t.Event("show.bs.tab",{relatedTarget:n[0]});if(n.trigger(s),e.trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){var r=t(o);this.activate(e.closest("li"),i),this.activate(r,r.parent(),function(){n.trigger({type:"hidden.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:n[0]})})}}},i.prototype.activate=function(e,o,n){function s(){a.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),r?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),n&&n()}var a=o.find("> .active"),r=n&&t.support.transition&&(a.length&&a.hasClass("fade")||!!o.find("> .fade").length);a.length&&r?a.one("bsTransitionEnd",s).emulateTransitionEnd(i.TRANSITION_DURATION):s(),a.removeClass("in")};var o=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=i,t.fn.tab.noConflict=function(){return t.fn.tab=o,this};var n=function(i){i.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',n).on("click.bs.tab.data-api",'[data-toggle="pill"]',n)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.affix"),s="object"==typeof e&&e;n||o.data("bs.affix",n=new i(this,s)),"string"==typeof e&&n[e]()})}var i=function(e,o){this.options=t.extend({},i.DEFAULTS,o),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};i.VERSION="3.3.2",i.RESET="affix affix-top affix-bottom",i.DEFAULTS={offset:0,target:window},i.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return i>n?"top":!1;if("bottom"==this.affixed)return null!=i?n+this.unpin<=s.top?!1:"bottom":t-o>=n+a?!1:"bottom";var r=null==this.affixed,l=r?n:s.top,h=r?a:e;return null!=i&&i>=n?"top":null!=o&&l+h>=t-o?"bottom":!1},i.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(i.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},i.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},i.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),o=this.options.offset,n=o.top,s=o.bottom,a=t(document.body).height();"object"!=typeof o&&(s=n=o),"function"==typeof n&&(n=o.top(this.$element)),"function"==typeof s&&(s=o.bottom(this.$element));var r=this.getState(a,e,n,s);if(this.affixed!=r){null!=this.unpin&&this.$element.css("top","");var l="affix"+(r?"-"+r:""),h=t.Event(l+".bs.affix");if(this.$element.trigger(h),h.isDefaultPrevented())return;this.affixed=r,this.unpin="bottom"==r?this.getPinnedOffset():null,this.$element.removeClass(i.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==r&&this.$element.offset({top:a-e-s})}};var o=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=i,t.fn.affix.noConflict=function(){return t.fn.affix=o,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var i=t(this),o=i.data();o.offset=o.offset||{},null!=o.offsetBottom&&(o.offset.bottom=o.offsetBottom),null!=o.offsetTop&&(o.offset.top=o.offsetTop),e.call(i,o)})})}(jQuery),+function(t){"use strict";function e(e){var i,o=e.attr("data-target")||(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,"");return t(o)}function i(e){return this.each(function(){var i=t(this),n=i.data("bs.collapse"),s=t.extend({},o.DEFAULTS,i.data(),"object"==typeof e&&e);!n&&s.toggle&&/show|hide/.test(e)&&(s.toggle=!1),n||i.data("bs.collapse",n=new o(this,s)),"string"==typeof e&&n[e]()})}var o=function(e,i){this.$element=t(e),this.options=t.extend({},o.DEFAULTS,i),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};o.VERSION="3.3.2",o.TRANSITION_DURATION=350,o.DEFAULTS={toggle:!0},o.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},o.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,n=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(n&&n.length&&(e=n.data("bs.collapse"),e&&e.transitioning))){var s=t.Event("show.bs.collapse");if(this.$element.trigger(s),!s.isDefaultPrevented()){n&&n.length&&(i.call(n,"hide"),e||n.data("bs.collapse",null));var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var r=function(){this.$element.removeClass("collapsing").addClass("collapse in")[a](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return r.call(this);var l=t.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(o.TRANSITION_DURATION)[a](this.$element[0][l])}}}},o.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var n=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return t.support.transition?void this.$element[i](0).one("bsTransitionEnd",t.proxy(n,this)).emulateTransitionEnd(o.TRANSITION_DURATION):n.call(this)}}},o.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},o.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(i,o){var n=t(o); -this.addAriaAndCollapsedClass(e(n),n)},this)).end()},o.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var n=t.fn.collapse;t.fn.collapse=i,t.fn.collapse.Constructor=o,t.fn.collapse.noConflict=function(){return t.fn.collapse=n,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(o){var n=t(this);n.attr("data-target")||o.preventDefault();var s=e(n),a=s.data("bs.collapse"),r=a?"toggle":n.data();i.call(s,r)})}(jQuery),+function(t){"use strict";function e(i,o){this.$body=t(document.body),this.$scrollElement=t(t(i).is(document.body)?window:i),this.options=t.extend({},e.DEFAULTS,o),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function i(i){return this.each(function(){var o=t(this),n=o.data("bs.scrollspy"),s="object"==typeof i&&i;n||o.data("bs.scrollspy",n=new e(this,s)),"string"==typeof i&&n[i]()})}e.VERSION="3.3.2",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,i="offset",o=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(i="position",o=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),n=e.data("target")||e.attr("href"),s=/^#./.test(n)&&t(n);return s&&s.length&&s.is(":visible")&&[[s[i]().top+o,n]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),e>=o)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e<n[0])return this.activeTarget=null,this.clear();for(t=n.length;t--;)a!=s[t]&&e>=n[t]&&(void 0===n[t+1]||e<=n[t+1])&&this.activate(s[t])},e.prototype.activate=function(e){this.activeTarget=e,this.clear();var i=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',o=t(i).parents("li").addClass("active");o.parent(".dropdown-menu").length&&(o=o.closest("li.dropdown").addClass("active")),o.trigger("activate.bs.scrollspy")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var o=t.fn.scrollspy;t.fn.scrollspy=i,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=o,this},t(window).on("load.bs.scrollspy.data-api",function(){t('[data-spy="scroll"]').each(function(){var e=t(this);i.call(e,e.data())})})}(jQuery),+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]};return!1}t.fn.emulateTransitionEnd=function(e){var i=!1,o=this;t(this).one("bsTransitionEnd",function(){i=!0});var n=function(){i||t(o).trigger(t.support.transition.end)};return setTimeout(n,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){return t(e.target).is(this)?e.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery);
@@ -1,145 +0,0 @@
-/** - * @version: 1.0 Alpha-1 - * @author: Coolite Inc. http://www.coolite.com/ - * @date: 2008-05-13 - * @copyright: Copyright (c) 2006-2008, Coolite Inc. (http://www.coolite.com/). All rights reserved. - * @license: Licensed under The MIT License. See license.txt and http://www.datejs.com/license/. - * @website: http://www.datejs.com/ - */ -Date.CultureInfo={name:"en-US",englishName:"English (United States)",nativeName:"English (United States)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"M/d/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\+|aft(er)?|from|hence)/i,subtract:/^(\-|bef(ore)?|ago)/i,yesterday:/^yes(terday)?/i,today:/^t(od(ay)?)?/i,tomorrow:/^tom(orrow)?/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^mn|min(ute)?s?/i,hour:/^h(our)?s?/i,week:/^w(eek)?s?/i,month:/^m(onth)?s?/i,day:/^d(ay)?s?/i,year:/^y(ear)?s?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\.?m?\.?|p\.?m?\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\s*(\+|\-)\s*\d\d\d\d?)|gmt|utc)/i,ordinalSuffix:/^\s*(st|nd|rd|th)/i,timeContext:/^\s*(\:|a(?!u|p)|p)/i},timezones:[{name:"UTC",offset:"-000"},{name:"GMT",offset:"-000"},{name:"EST",offset:"-0500"},{name:"EDT",offset:"-0400"},{name:"CST",offset:"-0600"},{name:"CDT",offset:"-0500"},{name:"MST",offset:"-0700"},{name:"MDT",offset:"-0600"},{name:"PST",offset:"-0800"},{name:"PDT",offset:"-0700"}]}; -(function(){var $D=Date,$P=$D.prototype,$C=$D.CultureInfo,p=function(s,l){if(!l){l=2;} -return("000"+s).slice(l*-1);};$P.clearTime=function(){this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;};$P.setTimeToNow=function(){var n=new Date();this.setHours(n.getHours());this.setMinutes(n.getMinutes());this.setSeconds(n.getSeconds());this.setMilliseconds(n.getMilliseconds());return this;};$D.today=function(){return new Date().clearTime();};$D.compare=function(date1,date2){if(isNaN(date1)||isNaN(date2)){throw new Error(date1+" - "+date2);}else if(date1 instanceof Date&&date2 instanceof Date){return(date1<date2)?-1:(date1>date2)?1:0;}else{throw new TypeError(date1+" - "+date2);}};$D.equals=function(date1,date2){return(date1.compareTo(date2)===0);};$D.getDayNumberFromName=function(name){var n=$C.dayNames,m=$C.abbreviatedDayNames,o=$C.shortestDayNames,s=name.toLowerCase();for(var i=0;i<n.length;i++){if(n[i].toLowerCase()==s||m[i].toLowerCase()==s||o[i].toLowerCase()==s){return i;}} -return-1;};$D.getMonthNumberFromName=function(name){var n=$C.monthNames,m=$C.abbreviatedMonthNames,s=name.toLowerCase();for(var i=0;i<n.length;i++){if(n[i].toLowerCase()==s||m[i].toLowerCase()==s){return i;}} -return-1;};$D.isLeapYear=function(year){return((year%4===0&&year%100!==0)||year%400===0);};$D.getDaysInMonth=function(year,month){return[31,($D.isLeapYear(year)?29:28),31,30,31,30,31,31,30,31,30,31][month];};$D.getTimezoneAbbreviation=function(offset){var z=$C.timezones,p;for(var i=0;i<z.length;i++){if(z[i].offset===offset){return z[i].name;}} -return null;};$D.getTimezoneOffset=function(name){var z=$C.timezones,p;for(var i=0;i<z.length;i++){if(z[i].name===name.toUpperCase()){return z[i].offset;}} -return null;};$P.clone=function(){return new Date(this.getTime());};$P.compareTo=function(date){return Date.compare(this,date);};$P.equals=function(date){return Date.equals(this,date||new Date());};$P.between=function(start,end){return this.getTime()>=start.getTime()&&this.getTime()<=end.getTime();};$P.isAfter=function(date){return this.compareTo(date||new Date())===1;};$P.isBefore=function(date){return(this.compareTo(date||new Date())===-1);};$P.isToday=function(){return this.isSameDay(new Date());};$P.isSameDay=function(date){return this.clone().clearTime().equals(date.clone().clearTime());};$P.addMilliseconds=function(value){this.setMilliseconds(this.getMilliseconds()+value);return this;};$P.addSeconds=function(value){return this.addMilliseconds(value*1000);};$P.addMinutes=function(value){return this.addMilliseconds(value*60000);};$P.addHours=function(value){return this.addMilliseconds(value*3600000);};$P.addDays=function(value){this.setDate(this.getDate()+value);return this;};$P.addWeeks=function(value){return this.addDays(value*7);};$P.addMonths=function(value){var n=this.getDate();this.setDate(1);this.setMonth(this.getMonth()+value);this.setDate(Math.min(n,$D.getDaysInMonth(this.getFullYear(),this.getMonth())));return this;};$P.addYears=function(value){return this.addMonths(value*12);};$P.add=function(config){if(typeof config=="number"){this._orient=config;return this;} -var x=config;if(x.milliseconds){this.addMilliseconds(x.milliseconds);} -if(x.seconds){this.addSeconds(x.seconds);} -if(x.minutes){this.addMinutes(x.minutes);} -if(x.hours){this.addHours(x.hours);} -if(x.weeks){this.addWeeks(x.weeks);} -if(x.months){this.addMonths(x.months);} -if(x.years){this.addYears(x.years);} -if(x.days){this.addDays(x.days);} -return this;};var $y,$m,$d;$P.getWeek=function(){var a,b,c,d,e,f,g,n,s,w;$y=(!$y)?this.getFullYear():$y;$m=(!$m)?this.getMonth()+1:$m;$d=(!$d)?this.getDate():$d;if($m<=2){a=$y-1;b=(a/4|0)-(a/100|0)+(a/400|0);c=((a-1)/4|0)-((a-1)/100|0)+((a-1)/400|0);s=b-c;e=0;f=$d-1+(31*($m-1));}else{a=$y;b=(a/4|0)-(a/100|0)+(a/400|0);c=((a-1)/4|0)-((a-1)/100|0)+((a-1)/400|0);s=b-c;e=s+1;f=$d+((153*($m-3)+2)/5)+58+s;} -g=(a+b)%7;d=(f+g-e)%7;n=(f+3-d)|0;if(n<0){w=53-((g-s)/5|0);}else if(n>364+s){w=1;}else{w=(n/7|0)+1;} -$y=$m=$d=null;return w;};$P.getISOWeek=function(){$y=this.getUTCFullYear();$m=this.getUTCMonth()+1;$d=this.getUTCDate();return p(this.getWeek());};$P.setWeek=function(n){return this.moveToDayOfWeek(1).addWeeks(n-this.getWeek());};$D._validate=function(n,min,max,name){if(typeof n=="undefined"){return false;}else if(typeof n!="number"){throw new TypeError(n+" is not a Number.");}else if(n<min||n>max){throw new RangeError(n+" is not a valid value for "+name+".");} -return true;};$D.validateMillisecond=function(value){return $D._validate(value,0,999,"millisecond");};$D.validateSecond=function(value){return $D._validate(value,0,59,"second");};$D.validateMinute=function(value){return $D._validate(value,0,59,"minute");};$D.validateHour=function(value){return $D._validate(value,0,23,"hour");};$D.validateDay=function(value,year,month){return $D._validate(value,1,$D.getDaysInMonth(year,month),"day");};$D.validateMonth=function(value){return $D._validate(value,0,11,"month");};$D.validateYear=function(value){return $D._validate(value,0,9999,"year");};$P.set=function(config){if($D.validateMillisecond(config.millisecond)){this.addMilliseconds(config.millisecond-this.getMilliseconds());} -if($D.validateSecond(config.second)){this.addSeconds(config.second-this.getSeconds());} -if($D.validateMinute(config.minute)){this.addMinutes(config.minute-this.getMinutes());} -if($D.validateHour(config.hour)){this.addHours(config.hour-this.getHours());} -if($D.validateMonth(config.month)){this.addMonths(config.month-this.getMonth());} -if($D.validateYear(config.year)){this.addYears(config.year-this.getFullYear());} -if($D.validateDay(config.day,this.getFullYear(),this.getMonth())){this.addDays(config.day-this.getDate());} -if(config.timezone){this.setTimezone(config.timezone);} -if(config.timezoneOffset){this.setTimezoneOffset(config.timezoneOffset);} -if(config.week&&$D._validate(config.week,0,53,"week")){this.setWeek(config.week);} -return this;};$P.moveToFirstDayOfMonth=function(){return this.set({day:1});};$P.moveToLastDayOfMonth=function(){return this.set({day:$D.getDaysInMonth(this.getFullYear(),this.getMonth())});};$P.moveToNthOccurrence=function(dayOfWeek,occurrence){var shift=0;if(occurrence>0){shift=occurrence-1;} -else if(occurrence===-1){this.moveToLastDayOfMonth();if(this.getDay()!==dayOfWeek){this.moveToDayOfWeek(dayOfWeek,-1);} -return this;} -return this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek,+1).addWeeks(shift);};$P.moveToDayOfWeek=function(dayOfWeek,orient){var diff=(dayOfWeek-this.getDay()+7*(orient||+1))%7;return this.addDays((diff===0)?diff+=7*(orient||+1):diff);};$P.moveToMonth=function(month,orient){var diff=(month-this.getMonth()+12*(orient||+1))%12;return this.addMonths((diff===0)?diff+=12*(orient||+1):diff);};$P.getOrdinalNumber=function(){return Math.ceil((this.clone().clearTime()-new Date(this.getFullYear(),0,1))/86400000)+1;};$P.getTimezone=function(){return $D.getTimezoneAbbreviation(this.getUTCOffset());};$P.setTimezoneOffset=function(offset){var here=this.getTimezoneOffset(),there=Number(offset)*-6/10;return this.addMinutes(there-here);};$P.setTimezone=function(offset){return this.setTimezoneOffset($D.getTimezoneOffset(offset));};$P.hasDaylightSavingTime=function(){return(Date.today().set({month:0,day:1}).getTimezoneOffset()!==Date.today().set({month:6,day:1}).getTimezoneOffset());};$P.isDaylightSavingTime=function(){return(this.hasDaylightSavingTime()&&new Date().getTimezoneOffset()===Date.today().set({month:6,day:1}).getTimezoneOffset());};$P.getUTCOffset=function(){var n=this.getTimezoneOffset()*-10/6,r;if(n<0){r=(n-10000).toString();return r.charAt(0)+r.substr(2);}else{r=(n+10000).toString();return"+"+r.substr(1);}};$P.getElapsed=function(date){return(date||new Date())-this;};if(!$P.toISOString){$P.toISOString=function(){function f(n){return n<10?'0'+n:n;} -return'"'+this.getUTCFullYear()+'-'+ -f(this.getUTCMonth()+1)+'-'+ -f(this.getUTCDate())+'T'+ -f(this.getUTCHours())+':'+ -f(this.getUTCMinutes())+':'+ -f(this.getUTCSeconds())+'Z"';};} -$P._toString=$P.toString;$P.toString=function(format){var x=this;if(format&&format.length==1){var c=$C.formatPatterns;x.t=x.toString;switch(format){case"d":return x.t(c.shortDate);case"D":return x.t(c.longDate);case"F":return x.t(c.fullDateTime);case"m":return x.t(c.monthDay);case"r":return x.t(c.rfc1123);case"s":return x.t(c.sortableDateTime);case"t":return x.t(c.shortTime);case"T":return x.t(c.longTime);case"u":return x.t(c.universalSortableDateTime);case"y":return x.t(c.yearMonth);}} -var ord=function(n){switch(n*1){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}};return format?format.replace(/(\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S)/g,function(m){if(m.charAt(0)==="\\"){return m.replace("\\","");} -x.h=x.getHours;switch(m){case"hh":return p(x.h()<13?(x.h()===0?12:x.h()):(x.h()-12));case"h":return x.h()<13?(x.h()===0?12:x.h()):(x.h()-12);case"HH":return p(x.h());case"H":return x.h();case"mm":return p(x.getMinutes());case"m":return x.getMinutes();case"ss":return p(x.getSeconds());case"s":return x.getSeconds();case"yyyy":return p(x.getFullYear(),4);case"yy":return p(x.getFullYear());case"dddd":return $C.dayNames[x.getDay()];case"ddd":return $C.abbreviatedDayNames[x.getDay()];case"dd":return p(x.getDate());case"d":return x.getDate();case"MMMM":return $C.monthNames[x.getMonth()];case"MMM":return $C.abbreviatedMonthNames[x.getMonth()];case"MM":return p((x.getMonth()+1));case"M":return x.getMonth()+1;case"t":return x.h()<12?$C.amDesignator.substring(0,1):$C.pmDesignator.substring(0,1);case"tt":return x.h()<12?$C.amDesignator:$C.pmDesignator;case"S":return ord(x.getDate());default:return m;}}):this._toString();};}()); -(function(){var $D=Date,$P=$D.prototype,$C=$D.CultureInfo,$N=Number.prototype;$P._orient=+1;$P._nth=null;$P._is=false;$P._same=false;$P._isSecond=false;$N._dateElement="day";$P.next=function(){this._orient=+1;return this;};$D.next=function(){return $D.today().next();};$P.last=$P.prev=$P.previous=function(){this._orient=-1;return this;};$D.last=$D.prev=$D.previous=function(){return $D.today().last();};$P.is=function(){this._is=true;return this;};$P.same=function(){this._same=true;this._isSecond=false;return this;};$P.today=function(){return this.same().day();};$P.weekday=function(){if(this._is){this._is=false;return(!this.is().sat()&&!this.is().sun());} -return false;};$P.at=function(time){return(typeof time==="string")?$D.parse(this.toString("d")+" "+time):this.set(time);};$N.fromNow=$N.after=function(date){var c={};c[this._dateElement]=this;return((!date)?new Date():date.clone()).add(c);};$N.ago=$N.before=function(date){var c={};c[this._dateElement]=this*-1;return((!date)?new Date():date.clone()).add(c);};var dx=("sunday monday tuesday wednesday thursday friday saturday").split(/\s/),mx=("january february march april may june july august september october november december").split(/\s/),px=("Millisecond Second Minute Hour Day Week Month Year").split(/\s/),pxf=("Milliseconds Seconds Minutes Hours Date Week Month FullYear").split(/\s/),nth=("final first second third fourth fifth").split(/\s/),de;$P.toObject=function(){var o={};for(var i=0;i<px.length;i++){o[px[i].toLowerCase()]=this["get"+pxf[i]]();} -return o;};$D.fromObject=function(config){config.week=null;return Date.today().set(config);};var df=function(n){return function(){if(this._is){this._is=false;return this.getDay()==n;} -if(this._nth!==null){if(this._isSecond){this.addSeconds(this._orient*-1);} -this._isSecond=false;var ntemp=this._nth;this._nth=null;var temp=this.clone().moveToLastDayOfMonth();this.moveToNthOccurrence(n,ntemp);if(this>temp){throw new RangeError($D.getDayName(n)+" does not occur "+ntemp+" times in the month of "+$D.getMonthName(temp.getMonth())+" "+temp.getFullYear()+".");} -return this;} -return this.moveToDayOfWeek(n,this._orient);};};var sdf=function(n){return function(){var t=$D.today(),shift=n-t.getDay();if(n===0&&$C.firstDayOfWeek===1&&t.getDay()!==0){shift=shift+7;} -return t.addDays(shift);};};for(var i=0;i<dx.length;i++){$D[dx[i].toUpperCase()]=$D[dx[i].toUpperCase().substring(0,3)]=i;$D[dx[i]]=$D[dx[i].substring(0,3)]=sdf(i);$P[dx[i]]=$P[dx[i].substring(0,3)]=df(i);} -var mf=function(n){return function(){if(this._is){this._is=false;return this.getMonth()===n;} -return this.moveToMonth(n,this._orient);};};var smf=function(n){return function(){return $D.today().set({month:n,day:1});};};for(var j=0;j<mx.length;j++){$D[mx[j].toUpperCase()]=$D[mx[j].toUpperCase().substring(0,3)]=j;$D[mx[j]]=$D[mx[j].substring(0,3)]=smf(j);$P[mx[j]]=$P[mx[j].substring(0,3)]=mf(j);} -var ef=function(j){return function(){if(this._isSecond){this._isSecond=false;return this;} -if(this._same){this._same=this._is=false;var o1=this.toObject(),o2=(arguments[0]||new Date()).toObject(),v="",k=j.toLowerCase();for(var m=(px.length-1);m>-1;m--){v=px[m].toLowerCase();if(o1[v]!=o2[v]){return false;} -if(k==v){break;}} -return true;} -if(j.substring(j.length-1)!="s"){j+="s";} -return this["add"+j](this._orient);};};var nf=function(n){return function(){this._dateElement=n;return this;};};for(var k=0;k<px.length;k++){de=px[k].toLowerCase();$P[de]=$P[de+"s"]=ef(px[k]);$N[de]=$N[de+"s"]=nf(de);} -$P._ss=ef("Second");var nthfn=function(n){return function(dayOfWeek){if(this._same){return this._ss(arguments[0]);} -if(dayOfWeek||dayOfWeek===0){return this.moveToNthOccurrence(dayOfWeek,n);} -this._nth=n;if(n===2&&(dayOfWeek===undefined||dayOfWeek===null)){this._isSecond=true;return this.addSeconds(this._orient);} -return this;};};for(var l=0;l<nth.length;l++){$P[nth[l]]=(l===0)?nthfn(-1):nthfn(l);}}()); -(function(){Date.Parsing={Exception:function(s){this.message="Parse error at '"+s.substring(0,10)+" ...'";}};var $P=Date.Parsing;var _=$P.Operators={rtoken:function(r){return function(s){var mx=s.match(r);if(mx){return([mx[0],s.substring(mx[0].length)]);}else{throw new $P.Exception(s);}};},token:function(s){return function(s){return _.rtoken(new RegExp("^\s*"+s+"\s*"))(s);};},stoken:function(s){return _.rtoken(new RegExp("^"+s));},until:function(p){return function(s){var qx=[],rx=null;while(s.length){try{rx=p.call(this,s);}catch(e){qx.push(rx[0]);s=rx[1];continue;} -break;} -return[qx,s];};},many:function(p){return function(s){var rx=[],r=null;while(s.length){try{r=p.call(this,s);}catch(e){return[rx,s];} -rx.push(r[0]);s=r[1];} -return[rx,s];};},optional:function(p){return function(s){var r=null;try{r=p.call(this,s);}catch(e){return[null,s];} -return[r[0],r[1]];};},not:function(p){return function(s){try{p.call(this,s);}catch(e){return[null,s];} -throw new $P.Exception(s);};},ignore:function(p){return p?function(s){var r=null;r=p.call(this,s);return[null,r[1]];}:null;},product:function(){var px=arguments[0],qx=Array.prototype.slice.call(arguments,1),rx=[];for(var i=0;i<px.length;i++){rx.push(_.each(px[i],qx));} -return rx;},cache:function(rule){var cache={},r=null;return function(s){try{r=cache[s]=(cache[s]||rule.call(this,s));}catch(e){r=cache[s]=e;} -if(r instanceof $P.Exception){throw r;}else{return r;}};},any:function(){var px=arguments;return function(s){var r=null;for(var i=0;i<px.length;i++){if(px[i]==null){continue;} -try{r=(px[i].call(this,s));}catch(e){r=null;} -if(r){return r;}} -throw new $P.Exception(s);};},each:function(){var px=arguments;return function(s){var rx=[],r=null;for(var i=0;i<px.length;i++){if(px[i]==null){continue;} -try{r=(px[i].call(this,s));}catch(e){throw new $P.Exception(s);} -rx.push(r[0]);s=r[1];} -return[rx,s];};},all:function(){var px=arguments,_=_;return _.each(_.optional(px));},sequence:function(px,d,c){d=d||_.rtoken(/^\s*/);c=c||null;if(px.length==1){return px[0];} -return function(s){var r=null,q=null;var rx=[];for(var i=0;i<px.length;i++){try{r=px[i].call(this,s);}catch(e){break;} -rx.push(r[0]);try{q=d.call(this,r[1]);}catch(ex){q=null;break;} -s=q[1];} -if(!r){throw new $P.Exception(s);} -if(q){throw new $P.Exception(q[1]);} -if(c){try{r=c.call(this,r[1]);}catch(ey){throw new $P.Exception(r[1]);}} -return[rx,(r?r[1]:s)];};},between:function(d1,p,d2){d2=d2||d1;var _fn=_.each(_.ignore(d1),p,_.ignore(d2));return function(s){var rx=_fn.call(this,s);return[[rx[0][0],r[0][2]],rx[1]];};},list:function(p,d,c){d=d||_.rtoken(/^\s*/);c=c||null;return(p instanceof Array?_.each(_.product(p.slice(0,-1),_.ignore(d)),p.slice(-1),_.ignore(c)):_.each(_.many(_.each(p,_.ignore(d))),px,_.ignore(c)));},set:function(px,d,c){d=d||_.rtoken(/^\s*/);c=c||null;return function(s){var r=null,p=null,q=null,rx=null,best=[[],s],last=false;for(var i=0;i<px.length;i++){q=null;p=null;r=null;last=(px.length==1);try{r=px[i].call(this,s);}catch(e){continue;} -rx=[[r[0]],r[1]];if(r[1].length>0&&!last){try{q=d.call(this,r[1]);}catch(ex){last=true;}}else{last=true;} -if(!last&&q[1].length===0){last=true;} -if(!last){var qx=[];for(var j=0;j<px.length;j++){if(i!=j){qx.push(px[j]);}} -p=_.set(qx,d).call(this,q[1]);if(p[0].length>0){rx[0]=rx[0].concat(p[0]);rx[1]=p[1];}} -if(rx[1].length<best[1].length){best=rx;} -if(best[1].length===0){break;}} -if(best[0].length===0){return best;} -if(c){try{q=c.call(this,best[1]);}catch(ey){throw new $P.Exception(best[1]);} -best[1]=q[1];} -return best;};},forward:function(gr,fname){return function(s){return gr[fname].call(this,s);};},replace:function(rule,repl){return function(s){var r=rule.call(this,s);return[repl,r[1]];};},process:function(rule,fn){return function(s){var r=rule.call(this,s);return[fn.call(this,r[0]),r[1]];};},min:function(min,rule){return function(s){var rx=rule.call(this,s);if(rx[0].length<min){throw new $P.Exception(s);} -return rx;};}};var _generator=function(op){return function(){var args=null,rx=[];if(arguments.length>1){args=Array.prototype.slice.call(arguments);}else if(arguments[0]instanceof Array){args=arguments[0];} -if(args){for(var i=0,px=args.shift();i<px.length;i++){args.unshift(px[i]);rx.push(op.apply(null,args));args.shift();return rx;}}else{return op.apply(null,arguments);}};};var gx="optional not ignore cache".split(/\s/);for(var i=0;i<gx.length;i++){_[gx[i]]=_generator(_[gx[i]]);} -var _vector=function(op){return function(){if(arguments[0]instanceof Array){return op.apply(null,arguments[0]);}else{return op.apply(null,arguments);}};};var vx="each any all".split(/\s/);for(var j=0;j<vx.length;j++){_[vx[j]]=_vector(_[vx[j]]);}}());(function(){var $D=Date,$P=$D.prototype,$C=$D.CultureInfo;var flattenAndCompact=function(ax){var rx=[];for(var i=0;i<ax.length;i++){if(ax[i]instanceof Array){rx=rx.concat(flattenAndCompact(ax[i]));}else{if(ax[i]){rx.push(ax[i]);}}} -return rx;};$D.Grammar={};$D.Translator={hour:function(s){return function(){this.hour=Number(s);};},minute:function(s){return function(){this.minute=Number(s);};},second:function(s){return function(){this.second=Number(s);};},meridian:function(s){return function(){this.meridian=s.slice(0,1).toLowerCase();};},timezone:function(s){return function(){var n=s.replace(/[^\d\+\-]/g,"");if(n.length){this.timezoneOffset=Number(n);}else{this.timezone=s.toLowerCase();}};},day:function(x){var s=x[0];return function(){this.day=Number(s.match(/\d+/)[0]);};},month:function(s){return function(){this.month=(s.length==3)?"jan feb mar apr may jun jul aug sep oct nov dec".indexOf(s)/4:Number(s)-1;};},year:function(s){return function(){var n=Number(s);this.year=((s.length>2)?n:(n+(((n+2000)<$C.twoDigitYearMax)?2000:1900)));};},rday:function(s){return function(){switch(s){case"yesterday":this.days=-1;break;case"tomorrow":this.days=1;break;case"today":this.days=0;break;case"now":this.days=0;this.now=true;break;}};},finishExact:function(x){x=(x instanceof Array)?x:[x];for(var i=0;i<x.length;i++){if(x[i]){x[i].call(this);}} -var now=new Date();if((this.hour||this.minute)&&(!this.month&&!this.year&&!this.day)){this.day=now.getDate();} -if(!this.year){this.year=now.getFullYear();} -if(!this.month&&this.month!==0){this.month=now.getMonth();} -if(!this.day){this.day=1;} -if(!this.hour){this.hour=0;} -if(!this.minute){this.minute=0;} -if(!this.second){this.second=0;} -if(this.meridian&&this.hour){if(this.meridian=="p"&&this.hour<12){this.hour=this.hour+12;}else if(this.meridian=="a"&&this.hour==12){this.hour=0;}} -if(this.day>$D.getDaysInMonth(this.year,this.month)){throw new RangeError(this.day+" is not a valid value for days.");} -var r=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second);if(this.timezone){r.set({timezone:this.timezone});}else if(this.timezoneOffset){r.set({timezoneOffset:this.timezoneOffset});} -return r;},finish:function(x){x=(x instanceof Array)?flattenAndCompact(x):[x];if(x.length===0){return null;} -for(var i=0;i<x.length;i++){if(typeof x[i]=="function"){x[i].call(this);}} -var today=$D.today();if(this.now&&!this.unit&&!this.operator){return new Date();}else if(this.now){today=new Date();} -var expression=!!(this.days&&this.days!==null||this.orient||this.operator);var gap,mod,orient;orient=((this.orient=="past"||this.operator=="subtract")?-1:1);if(!this.now&&"hour minute second".indexOf(this.unit)!=-1){today.setTimeToNow();} -if(this.month||this.month===0){if("year day hour minute second".indexOf(this.unit)!=-1){this.value=this.month+1;this.month=null;expression=true;}} -if(!expression&&this.weekday&&!this.day&&!this.days){var temp=Date[this.weekday]();this.day=temp.getDate();if(!this.month){this.month=temp.getMonth();} -this.year=temp.getFullYear();} -if(expression&&this.weekday&&this.unit!="month"){this.unit="day";gap=($D.getDayNumberFromName(this.weekday)-today.getDay());mod=7;this.days=gap?((gap+(orient*mod))%mod):(orient*mod);} -if(this.month&&this.unit=="day"&&this.operator){this.value=(this.month+1);this.month=null;} -if(this.value!=null&&this.month!=null&&this.year!=null){this.day=this.value*1;} -if(this.month&&!this.day&&this.value){today.set({day:this.value*1});if(!expression){this.day=this.value*1;}} -if(!this.month&&this.value&&this.unit=="month"&&!this.now){this.month=this.value;expression=true;} -if(expression&&(this.month||this.month===0)&&this.unit!="year"){this.unit="month";gap=(this.month-today.getMonth());mod=12;this.months=gap?((gap+(orient*mod))%mod):(orient*mod);this.month=null;} -if(!this.unit){this.unit="day";} -if(!this.value&&this.operator&&this.operator!==null&&this[this.unit+"s"]&&this[this.unit+"s"]!==null){this[this.unit+"s"]=this[this.unit+"s"]+((this.operator=="add")?1:-1)+(this.value||0)*orient;}else if(this[this.unit+"s"]==null||this.operator!=null){if(!this.value){this.value=1;} -this[this.unit+"s"]=this.value*orient;} -if(this.meridian&&this.hour){if(this.meridian=="p"&&this.hour<12){this.hour=this.hour+12;}else if(this.meridian=="a"&&this.hour==12){this.hour=0;}} -if(this.weekday&&!this.day&&!this.days){var temp=Date[this.weekday]();this.day=temp.getDate();if(temp.getMonth()!==today.getMonth()){this.month=temp.getMonth();}} -if((this.month||this.month===0)&&!this.day){this.day=1;} -if(!this.orient&&!this.operator&&this.unit=="week"&&this.value&&!this.day&&!this.month){return Date.today().setWeek(this.value);} -if(expression&&this.timezone&&this.day&&this.days){this.day=this.days;} -return(expression)?today.add(this):today.set(this);}};var _=$D.Parsing.Operators,g=$D.Grammar,t=$D.Translator,_fn;g.datePartDelimiter=_.rtoken(/^([\s\-\.\,\/\x27]+)/);g.timePartDelimiter=_.stoken(":");g.whiteSpace=_.rtoken(/^\s*/);g.generalDelimiter=_.rtoken(/^(([\s\,]|at|@|on)+)/);var _C={};g.ctoken=function(keys){var fn=_C[keys];if(!fn){var c=$C.regexPatterns;var kx=keys.split(/\s+/),px=[];for(var i=0;i<kx.length;i++){px.push(_.replace(_.rtoken(c[kx[i]]),kx[i]));} -fn=_C[keys]=_.any.apply(null,px);} -return fn;};g.ctoken2=function(key){return _.rtoken($C.regexPatterns[key]);};g.h=_.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2]|[1-9])/),t.hour));g.hh=_.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2])/),t.hour));g.H=_.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3]|[0-9])/),t.hour));g.HH=_.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3])/),t.hour));g.m=_.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/),t.minute));g.mm=_.cache(_.process(_.rtoken(/^[0-5][0-9]/),t.minute));g.s=_.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/),t.second));g.ss=_.cache(_.process(_.rtoken(/^[0-5][0-9]/),t.second));g.hms=_.cache(_.sequence([g.H,g.m,g.s],g.timePartDelimiter));g.t=_.cache(_.process(g.ctoken2("shortMeridian"),t.meridian));g.tt=_.cache(_.process(g.ctoken2("longMeridian"),t.meridian));g.z=_.cache(_.process(_.rtoken(/^((\+|\-)\s*\d\d\d\d)|((\+|\-)\d\d\:?\d\d)/),t.timezone));g.zz=_.cache(_.process(_.rtoken(/^((\+|\-)\s*\d\d\d\d)|((\+|\-)\d\d\:?\d\d)/),t.timezone));g.zzz=_.cache(_.process(g.ctoken2("timezone"),t.timezone));g.timeSuffix=_.each(_.ignore(g.whiteSpace),_.set([g.tt,g.zzz]));g.time=_.each(_.optional(_.ignore(_.stoken("T"))),g.hms,g.timeSuffix);g.d=_.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1]|\d)/),_.optional(g.ctoken2("ordinalSuffix"))),t.day));g.dd=_.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1])/),_.optional(g.ctoken2("ordinalSuffix"))),t.day));g.ddd=g.dddd=_.cache(_.process(g.ctoken("sun mon tue wed thu fri sat"),function(s){return function(){this.weekday=s;};}));g.M=_.cache(_.process(_.rtoken(/^(1[0-2]|0\d|\d)/),t.month));g.MM=_.cache(_.process(_.rtoken(/^(1[0-2]|0\d)/),t.month));g.MMM=g.MMMM=_.cache(_.process(g.ctoken("jan feb mar apr may jun jul aug sep oct nov dec"),t.month));g.y=_.cache(_.process(_.rtoken(/^(\d\d?)/),t.year));g.yy=_.cache(_.process(_.rtoken(/^(\d\d)/),t.year));g.yyy=_.cache(_.process(_.rtoken(/^(\d\d?\d?\d?)/),t.year));g.yyyy=_.cache(_.process(_.rtoken(/^(\d\d\d\d)/),t.year));_fn=function(){return _.each(_.any.apply(null,arguments),_.not(g.ctoken2("timeContext")));};g.day=_fn(g.d,g.dd);g.month=_fn(g.M,g.MMM);g.year=_fn(g.yyyy,g.yy);g.orientation=_.process(g.ctoken("past future"),function(s){return function(){this.orient=s;};});g.operator=_.process(g.ctoken("add subtract"),function(s){return function(){this.operator=s;};});g.rday=_.process(g.ctoken("yesterday tomorrow today now"),t.rday);g.unit=_.process(g.ctoken("second minute hour day week month year"),function(s){return function(){this.unit=s;};});g.value=_.process(_.rtoken(/^\d\d?(st|nd|rd|th)?/),function(s){return function(){this.value=s.replace(/\D/g,"");};});g.expression=_.set([g.rday,g.operator,g.value,g.unit,g.orientation,g.ddd,g.MMM]);_fn=function(){return _.set(arguments,g.datePartDelimiter);};g.mdy=_fn(g.ddd,g.month,g.day,g.year);g.ymd=_fn(g.ddd,g.year,g.month,g.day);g.dmy=_fn(g.ddd,g.day,g.month,g.year);g.date=function(s){return((g[$C.dateElementOrder]||g.mdy).call(this,s));};g.format=_.process(_.many(_.any(_.process(_.rtoken(/^(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),function(fmt){if(g[fmt]){return g[fmt];}else{throw $D.Parsing.Exception(fmt);}}),_.process(_.rtoken(/^[^dMyhHmstz]+/),function(s){return _.ignore(_.stoken(s));}))),function(rules){return _.process(_.each.apply(null,rules),t.finishExact);});var _F={};var _get=function(f){return _F[f]=(_F[f]||g.format(f)[0]);};g.formats=function(fx){if(fx instanceof Array){var rx=[];for(var i=0;i<fx.length;i++){rx.push(_get(fx[i]));} -return _.any.apply(null,rx);}else{return _get(fx);}};g._formats=g.formats(["\"yyyy-MM-ddTHH:mm:ssZ\"","yyyy-MM-ddTHH:mm:ssZ","yyyy-MM-ddTHH:mm:ssz","yyyy-MM-ddTHH:mm:ss","yyyy-MM-ddTHH:mmZ","yyyy-MM-ddTHH:mmz","yyyy-MM-ddTHH:mm","ddd, MMM dd, yyyy H:mm:ss tt","ddd MMM d yyyy HH:mm:ss zzz","MMddyyyy","ddMMyyyy","Mddyyyy","ddMyyyy","Mdyyyy","dMyyyy","yyyy","Mdyy","dMyy","d"]);g._start=_.process(_.set([g.date,g.time,g.expression],g.generalDelimiter,g.whiteSpace),t.finish);g.start=function(s){try{var r=g._formats.call({},s);if(r[1].length===0){return r;}}catch(e){} -return g._start.call({},s);};$D._parse=$D.parse;$D.parse=function(s){var r=null;if(!s){return null;} -if(s instanceof Date){return s;} -try{r=$D.Grammar.start.call({},s.replace(/^\s*(\S*(\s+\S+)*)\s*$/,"$1"));}catch(e){return null;} -return((r[1].length===0)?r[0]:null);};$D.getParseFunction=function(fx){var fn=$D.Grammar.formats(fx);return function(s){var r=null;try{r=fn.call({},s);}catch(e){return null;} -return((r[1].length===0)?r[0]:null);};};$D.parseExact=function(s,fx){return $D.getParseFunction(fx)(s);};}());
@@ -1,1 +0,0 @@
-(function(a,c,b){if(typeof module!=="undefined"&&module.exports){module.exports=b()}else{if(typeof define==="function"&&define.amd){define(b)}else{c[a]=b()}}})("Fingerprint",this,function(){var a=function(b){var c,d;c=Array.prototype.forEach;d=Array.prototype.map;this.each=function(k,j,h){if(k===null){return}if(c&&k.forEach===c){k.forEach(j,h)}else{if(k.length===+k.length){for(var g=0,e=k.length;g<e;g++){if(j.call(h,k[g],g,k)==={}){return}}}else{for(var f in k){if(k.hasOwnProperty(f)){if(j.call(h,k[f],f,k)==={}){return}}}}}};this.map=function(h,g,f){var e=[];if(h==null){return e}if(d&&h.map===d){return h.map(g,f)}this.each(h,function(k,i,j){e[e.length]=g.call(f,k,i,j)});return e};if(typeof b=="object"){this.hasher=b.hasher;this.screen_resolution=b.screen_resolution;this.canvas=b.canvas;this.ie_activex=b.ie_activex}else{if(typeof b=="function"){this.hasher=b}}};a.prototype={get:function(){var c=[];c.push(navigator.userAgent);c.push(navigator.language);c.push(screen.colorDepth);if(this.screen_resolution){var b=this.getScreenResolution();if(typeof b!=="undefined"){c.push(this.getScreenResolution().join("x"))}}c.push(new Date().getTimezoneOffset());c.push(this.hasSessionStorage());c.push(this.hasLocalStorage());c.push(!!window.indexedDB);if(document.body){c.push(typeof(document.body.addBehavior))}else{c.push(typeof undefined)}c.push(typeof(window.openDatabase));c.push(navigator.cpuClass);c.push(navigator.platform);c.push(navigator.doNotTrack);c.push(this.getPluginsString());if(this.canvas&&this.isCanvasSupported()){c.push(this.getCanvasFingerprint())}if(this.hasher){return this.hasher(c.join("###"),31)}else{return this.murmurhash3_32_gc(c.join("###"),31)}},murmurhash3_32_gc:function(j,f){var k,l,h,b,e,c,g,d;k=j.length&3;l=j.length-k;h=f;e=3432918353;c=461845907;d=0;while(d<l){g=((j.charCodeAt(d)&255))|((j.charCodeAt(++d)&255)<<8)|((j.charCodeAt(++d)&255)<<16)|((j.charCodeAt(++d)&255)<<24);++d;g=((((g&65535)*e)+((((g>>>16)*e)&65535)<<16)))&4294967295;g=(g<<15)|(g>>>17);g=((((g&65535)*c)+((((g>>>16)*c)&65535)<<16)))&4294967295;h^=g;h=(h<<13)|(h>>>19);b=((((h&65535)*5)+((((h>>>16)*5)&65535)<<16)))&4294967295;h=(((b&65535)+27492)+((((b>>>16)+58964)&65535)<<16))}g=0;switch(k){case 3:g^=(j.charCodeAt(d+2)&255)<<16;case 2:g^=(j.charCodeAt(d+1)&255)<<8;case 1:g^=(j.charCodeAt(d)&255);g=(((g&65535)*e)+((((g>>>16)*e)&65535)<<16))&4294967295;g=(g<<15)|(g>>>17);g=(((g&65535)*c)+((((g>>>16)*c)&65535)<<16))&4294967295;h^=g}h^=j.length;h^=h>>>16;h=(((h&65535)*2246822507)+((((h>>>16)*2246822507)&65535)<<16))&4294967295;h^=h>>>13;h=((((h&65535)*3266489909)+((((h>>>16)*3266489909)&65535)<<16)))&4294967295;h^=h>>>16;return h>>>0},hasLocalStorage:function(){try{return !!window.localStorage}catch(b){return true}},hasSessionStorage:function(){try{return !!window.sessionStorage}catch(b){return true}},isCanvasSupported:function(){var b=document.createElement("canvas");return !!(b.getContext&&b.getContext("2d"))},isIE:function(){if(navigator.appName==="Microsoft Internet Explorer"){return true}else{if(navigator.appName==="Netscape"&&/Trident/.test(navigator.userAgent)){return true}}return false},getPluginsString:function(){if(this.isIE()&&this.ie_activex){return this.getIEPluginsString()}else{return this.getRegularPluginsString()}},getRegularPluginsString:function(){return this.map(navigator.plugins,function(c){var b=this.map(c,function(d){return[d.type,d.suffixes].join("~")}).join(",");return[c.name,c.description,b].join("::")},this).join(";")},getIEPluginsString:function(){if(window.ActiveXObject){var b=["ShockwaveFlash.ShockwaveFlash","AcroPDF.PDF","PDF.PdfCtrl","QuickTime.QuickTime","rmocx.RealPlayer G2 Control","rmocx.RealPlayer G2 Control.1","RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)","RealVideo.RealVideo(tm) ActiveX Control (32-bit)","RealPlayer","SWCtl.SWCtl","WMPlayer.OCX","AgControl.AgControl","Skype.Detection"];return this.map(b,function(c){try{new ActiveXObject(c);return c}catch(d){return null}}).join(";")}else{return""}},getScreenResolution:function(){return[screen.height,screen.width]},getCanvasFingerprint:function(){var d=document.createElement("canvas");var c=d.getContext("2d");var b="http://valve.github.io";c.textBaseline="top";c.font="14px 'Arial'";c.textBaseline="alphabetic";c.fillStyle="#f60";c.fillRect(125,1,62,20);c.fillStyle="#069";c.fillText(b,2,15);c.fillStyle="rgba(102, 204, 0, 0.7)";c.fillText(b,4,17);return d.toDataURL()}};return a});
@@ -1,1 +0,0 @@
-!function(e){"undefined"!=typeof exports?e(exports):(window.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return window.hljs}))}(function(e){function n(e){return e.replace(/&/gm,"&").replace(/</gm,"<").replace(/>/gm,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){var n=(e.className+" "+(e.parentNode?e.parentNode.className:"")).split(/\s+/);return n=n.map(function(e){return e.replace(/^lang(uage)?-/,"")}),n.filter(function(e){return N(e)||/no(-?)highlight|plain|text/.test(e)})[0]}function i(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function o(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3==i.nodeType?a+=i.nodeValue.length:1==i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function u(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset<r[0].offset?e:r:"start"==r[0].event?e:r:e.length?e:r}function o(e){function r(e){return" "+e.nodeName+'="'+n(e.value)+'"'}l+="<"+t(e)+Array.prototype.map.call(e.attributes,r).join("")+">"}function u(e){l+="</"+t(e)+">"}function c(e){("start"==e.event?o:u)(e.node)}for(var s=0,l="",f=[];e.length||r.length;){var g=i();if(l+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){f.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g==e&&g.length&&g[0].offset==s);f.reverse().forEach(o)}else"start"==g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return l+n(a.substr(s))}function c(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,o){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");u[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?c("keyword",a.k):Object.keys(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\b\w+\b/,!0),o&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&o.tE&&(a.tE+=(a.e?"|":"")+o.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(i(e,n))}):s.push("self"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,o);var l=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=l.length?t(l.join("|"),!0):{exec:function(){return null}}}}r(e)}function s(e,t,a,i){function o(e,n){for(var t=0;t<n.c.length;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function f(e,n){return!a&&r(n.iR,e)}function g(e,n){var t=E.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function p(e,n,t,r){var a=r?"":x.classPrefix,i='<span class="'+a,o=t?"":"</span>";return i+=e+'">',i+n+o}function d(){if(!L.k)return n(y);var e="",t=0;L.lR.lastIndex=0;for(var r=L.lR.exec(y);r;){e+=n(y.substr(t,r.index-t));var a=g(L,r);a?(B+=a[1],e+=p(a[0],n(r[0]))):e+=n(r[0]),t=L.lR.lastIndex,r=L.lR.exec(y)}return e+n(y.substr(t))}function h(){if(L.sL&&!w[L.sL])return n(y);var e=L.sL?s(L.sL,y,!0,M[L.sL]):l(y);return L.r>0&&(B+=e.r),"continuous"==L.subLanguageMode&&(M[L.sL]=e.top),p(e.language,e.value,!1,!0)}function b(){return void 0!==L.sL?h():d()}function v(e,t){var r=e.cN?p(e.cN,"",!0):"";e.rB?(k+=r,y=""):e.eB?(k+=n(t)+r,y=""):(k+=r,y=t),L=Object.create(e,{parent:{value:L}})}function m(e,t){if(y+=e,void 0===t)return k+=b(),0;var r=o(t,L);if(r)return k+=b(),v(r,t),r.rB?0:t.length;var a=u(L,t);if(a){var i=L;i.rE||i.eE||(y+=t),k+=b();do L.cN&&(k+="</span>"),B+=L.r,L=L.parent;while(L!=a.parent);return i.eE&&(k+=n(t)),y="",a.starts&&v(a.starts,""),i.rE?0:t.length}if(f(t,L))throw new Error('Illegal lexeme "'+t+'" for mode "'+(L.cN||"<unnamed>")+'"');return y+=t,t.length||1}var E=N(e);if(!E)throw new Error('Unknown language: "'+e+'"');c(E);var R,L=i||E,M={},k="";for(R=L;R!=E;R=R.parent)R.cN&&(k=p(R.cN,"",!0)+k);var y="",B=0;try{for(var C,j,I=0;;){if(L.t.lastIndex=I,C=L.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}for(m(t.substr(I)),R=L;R.parent;R=R.parent)R.cN&&(k+="</span>");return{r:B,value:k,language:e,top:L}}catch(S){if(-1!=S.message.indexOf("Illegal"))return{r:0,value:n(t)};throw S}}function l(e,t){t=t||x.languages||Object.keys(w);var r={r:0,value:n(e)},a=r;return t.forEach(function(n){if(N(n)){var t=s(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}}),a.language&&(r.second_best=a),r}function f(e){return x.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,function(e,n){return n.replace(/\t/g,x.tabReplace)})),x.useBR&&(e=e.replace(/\n/g,"<br>")),e}function g(e,n,t){var r=n?E[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function p(e){var n=a(e);if(!/no(-?)highlight|plain|text/.test(n)){var t;x.useBR?(t=document.createElementNS("http://www.w3.org/1999/xhtml","div"),t.innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n")):t=e;var r=t.textContent,i=n?s(n,r,!0):l(r),c=o(t);if(c.length){var p=document.createElementNS("http://www.w3.org/1999/xhtml","div");p.innerHTML=i.value,i.value=u(c,o(p),r)}i.value=f(i.value),e.innerHTML=i.value,e.className=g(e.className,n,i.language),e.result={language:i.language,re:i.r},i.second_best&&(e.second_best={language:i.second_best.language,re:i.second_best.r})}}function d(e){x=i(x,e)}function h(){if(!h.called){h.called=!0;var e=document.querySelectorAll("pre code");Array.prototype.forEach.call(e,p)}}function b(){addEventListener("DOMContentLoaded",h,!1),addEventListener("load",h,!1)}function v(n,t){var r=w[n]=t(e);r.aliases&&r.aliases.forEach(function(e){E[e]=n})}function m(){return Object.keys(w)}function N(e){return w[e]||w[E[e]]}var x={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},w={},E={};return e.highlight=s,e.highlightAuto=l,e.fixMarkup=f,e.highlightBlock=p,e.configure=d,e.initHighlighting=h,e.initHighlightingOnLoad=b,e.registerLanguage=v,e.listLanguages=m,e.getLanguage=N,e.inherit=i,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="\\b(0[xX][a-fA-F0-9]+|(\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e});hljs.registerLanguage("ini",function(e){return{cI:!0,i:/\S/,c:[e.C(";","$"),{cN:"title",b:"^\\[",e:"\\]"},{cN:"setting",b:"^[a-z0-9\\[\\]_-]+[ \\t]*=[ \\t]*",e:"$",c:[{cN:"value",eW:!0,k:"on off true false yes no",c:[e.QSM,e.NM],r:0}]}]}});hljs.registerLanguage("json",function(e){var t={literal:"true false null"},i=[e.QSM,e.CNM],l={cN:"value",e:",",eW:!0,eE:!0,c:i,k:t},c={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:!0,eE:!0,c:[e.BE],i:"\\n",starts:l}],i:"\\S"},n={b:"\\[",e:"\\]",c:[e.inherit(l,{cN:null})],i:"\\S"};return i.splice(i.length,0,c,n),{c:i,k:t,i:"\\S"}});hljs.registerLanguage("powershell",function(e){var t={b:"`[\\s\\S]",r:0},r={cN:"variable",v:[{b:/\$[\w\d][\w\d_:]*/}]},o={cN:"string",b:/"/,e:/"/,c:[t,r,{cN:"variable",b:/\$[A-z]/,e:/[^A-z]/}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["ps"],l:/-?[A-z\.\-]+/,cI:!0,k:{keyword:"if else foreach return function do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch",literal:"$null $true $false",built_in:"Add-Content Add-History Add-Member Add-PSSnapin Clear-Content Clear-Item Clear-Item Property Clear-Variable Compare-Object ConvertFrom-SecureString Convert-Path ConvertTo-Html ConvertTo-SecureString Copy-Item Copy-ItemProperty Export-Alias Export-Clixml Export-Console Export-Csv ForEach-Object Format-Custom Format-List Format-Table Format-Wide Get-Acl Get-Alias Get-AuthenticodeSignature Get-ChildItem Get-Command Get-Content Get-Credential Get-Culture Get-Date Get-EventLog Get-ExecutionPolicy Get-Help Get-History Get-Host Get-Item Get-ItemProperty Get-Location Get-Member Get-PfxCertificate Get-Process Get-PSDrive Get-PSProvider Get-PSSnapin Get-Service Get-TraceSource Get-UICulture Get-Unique Get-Variable Get-WmiObject Group-Object Import-Alias Import-Clixml Import-Csv Invoke-Expression Invoke-History Invoke-Item Join-Path Measure-Command Measure-Object Move-Item Move-ItemProperty New-Alias New-Item New-ItemProperty New-Object New-PSDrive New-Service New-TimeSpan New-Variable Out-Default Out-File Out-Host Out-Null Out-Printer Out-String Pop-Location Push-Location Read-Host Remove-Item Remove-ItemProperty Remove-PSDrive Remove-PSSnapin Remove-Variable Rename-Item Rename-ItemProperty Resolve-Path Restart-Service Resume-Service Select-Object Select-String Set-Acl Set-Alias Set-AuthenticodeSignature Set-Content Set-Date Set-ExecutionPolicy Set-Item Set-ItemProperty Set-Location Set-PSDebug Set-Service Set-TraceSource Set-Variable Sort-Object Split-Path Start-Service Start-Sleep Start-Transcript Stop-Process Stop-Service Stop-Transcript Suspend-Service Tee-Object Test-Path Trace-Command Update-FormatData Update-TypeData Where-Object Write-Debug Write-Error Write-Host Write-Output Write-Progress Write-Verbose Write-Warning",operator:"-ne -eq -lt -gt -ge -le -not -like -notlike -match -notmatch -contains -notcontains -in -notin -replace"},c:[e.HCM,e.NM,o,a,r]}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>]/,c:[{cN:"operator",bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate savepoint release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke",e:/;/,eW:!0,k:{keyword:"abs absolute acos action add adddate addtime aes_decrypt aes_encrypt after aggregate all allocate alter analyze and any are as asc ascii asin assertion at atan atan2 atn2 authorization authors avg backup before begin benchmark between bin binlog bit_and bit_count bit_length bit_or bit_xor both by cache call cascade cascaded case cast catalog ceil ceiling chain change changed char_length character_length charindex charset check checksum checksum_agg choose close coalesce coercibility collate collation collationproperty column columns columns_updated commit compress concat concat_ws concurrent connect connection connection_id consistent constraint constraints continue contributors conv convert convert_tz corresponding cos cot count count_big crc32 create cross cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime data database databases datalength date_add date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts datetimeoffsetfromparts day dayname dayofmonth dayofweek dayofyear deallocate declare decode default deferrable deferred degrees delayed delete des_decrypt des_encrypt des_key_file desc describe descriptor diagnostics difference disconnect distinct distinctrow div do domain double drop dumpfile each else elt enclosed encode encrypt end end-exec engine engines eomonth errors escape escaped event eventdata events except exception exec execute exists exp explain export_set extended external extract fast fetch field fields find_in_set first first_value floor flush for force foreign format found found_rows from from_base64 from_days from_unixtime full function get get_format get_lock getdate getutcdate global go goto grant grants greatest group group_concat grouping grouping_id gtid_subset gtid_subtract handler having help hex high_priority hosts hour ident_current ident_incr ident_seed identified identity if ifnull ignore iif ilike immediate in index indicator inet6_aton inet6_ntoa inet_aton inet_ntoa infile initially inner innodb input insert install instr intersect into is is_free_lock is_ipv4 is_ipv4_compat is_ipv4_mapped is_not is_not_null is_used_lock isdate isnull isolation join key kill language last last_day last_insert_id last_value lcase lead leading least leaves left len lenght level like limit lines ln load load_file local localtime localtimestamp locate lock log log10 log2 logfile logs low_priority lower lpad ltrim make_set makedate maketime master master_pos_wait match matched max md5 medium merge microsecond mid min minute mod mode module month monthname mutex name_const names national natural nchar next no no_write_to_binlog not now nullif nvarchar oct octet_length of old_password on only open optimize option optionally or ord order outer outfile output pad parse partial partition password patindex percent_rank percentile_cont percentile_disc period_add period_diff pi plugin position pow power pragma precision prepare preserve primary prior privileges procedure procedure_analyze processlist profile profiles public publishingservername purge quarter query quick quote quotename radians rand read references regexp relative relaylog release release_lock rename repair repeat replace replicate reset restore restrict return returns reverse revoke right rlike rollback rollup round row row_count rows rpad rtrim savepoint schema scroll sec_to_time second section select serializable server session session_user set sha sha1 sha2 share show sign sin size slave sleep smalldatetimefromparts snapshot some soname soundex sounds_like space sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sql_variant_property sqlstate sqrt square start starting status std stddev stddev_pop stddev_samp stdev stdevp stop str str_to_date straight_join strcmp string stuff subdate substr substring subtime subtring_index sum switchoffset sysdate sysdatetime sysdatetimeoffset system_user sysutcdatetime table tables tablespace tan temporary terminated tertiary_weights then time time_format time_to_sec timediff timefromparts timestamp timestampadd timestampdiff timezone_hour timezone_minute to to_base64 to_days to_seconds todatetimeoffset trailing transaction translation trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse ucase uncompress uncompressed_length unhex unicode uninstall union unique unix_timestamp unknown unlock update upgrade upped upper usage use user user_resources using utc_date utc_time utc_timestamp uuid uuid_short validate_password_strength value values var var_pop var_samp variables variance varp version view warnings week weekday weekofyear weight_string when whenever where with work write xml xor year yearweek zon",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int integer interval number numeric real serial smallint varchar varying int8 serial8 text"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage("javascript",function(e){return{aliases:["js"],k:{keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},c:[{cN:"pi",r:10,v:[{b:/^\s*('|")use strict('|")/},{b:/^\s*('|")use asm('|")/}]},e.ASM,e.QSM,{cN:"string",b:"`",e:"`",c:[e.BE,{cN:"subst",b:"\\$\\{",e:"\\}"}]},e.CLCM,e.CBCM,{cN:"number",b:"\\b(0[xXbBoO][a-fA-F0-9]+|(\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",r:0},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{b:/</,e:/>\s*[);\]]/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,c:[e.CLCM,e.CBCM],i:/["'\(]/}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+e.IR,r:0},{bK:"import",e:"[;$]",k:"import from as",c:[e.ASM,e.QSM]},{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]}]}});hljs.registerLanguage("tcl",function(e){return{aliases:["tk"],k:"after append apply array auto_execok auto_import auto_load auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd chan clock close concat continue dde dict encoding eof error eval exec exit expr fblocked fconfigure fcopy file fileevent filename flush for foreach format gets glob global history http if incr info interp join lappend|10 lassign|10 lindex|10 linsert|10 list llength|10 load lrange|10 lrepeat|10 lreplace|10 lreverse|10 lsearch|10 lset|10 lsort|10 mathfunc mathop memory msgcat namespace open package parray pid pkg::create pkg_mkIndex platform platform::shell proc puts pwd read refchan regexp registry regsub|10 rename return safe scan seek set socket source split string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter tcl_wordBreakBefore tcltest tclvars tell time tm trace unknown unload unset update uplevel upvar variable vwait while",c:[e.C(";[ \\t]*#","$"),e.C("^[ \\t]*#","$"),{bK:"proc",e:"[\\{]",eE:!0,c:[{cN:"symbol",b:"[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",e:"[ \\t\\n\\r]",eW:!0,eE:!0}]},{cN:"variable",eE:!0,v:[{b:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*\\(([a-zA-Z0-9_])*\\)",e:"[^a-zA-Z0-9_\\}\\$]"},{b:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",e:"(\\))?[^a-zA-Z0-9_\\}\\$]"}]},{cN:"string",c:[e.BE],v:[e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},{cN:"number",v:[e.BNM,e.CNM]}]}});hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},s={b:"->{",e:"}"},n={cN:"variable",v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,r:0}]},i=e.C("^(__END__|__DATA__)","\\n$",{r:5}),o=[e.BE,r,n],a=[n,e.HCM,i,e.C("^\\=\\w","\\=cut",{eW:!0}),s,{cN:"string",c:o,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,i,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"sub",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",r:5},{cN:"operator",b:"-\\w\\b",r:0}];return r.c=a,s.c=a,{aliases:["pl"],k:t,c:a}});hljs.registerLanguage("erb",function(e){return{sL:"xml",subLanguageMode:"continuous",c:[e.C("<%#","%>"),{b:"<%[%=-]?",e:"[%-]?%>",sL:"ruby",eB:!0,eE:!0}]}});hljs.registerLanguage("swift",function(e){var i={keyword:"class deinit enum extension func import init let protocol static struct subscript typealias var break case continue default do else fallthrough if in for return switch where while as dynamicType is new super self Self Type __COLUMN__ __FILE__ __FUNCTION__ __LINE__ associativity didSet get infix inout left mutating none nonmutating operator override postfix precedence prefix right set unowned unowned safe unsafe weak willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue assert bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal false filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced join lexicographicalCompare map max maxElement min minElement nil numericCast partition posix print println quickSort reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith strideof strideofValue swap swift toString transcode true underestimateCount unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafePointers withVaList"},t={cN:"type",b:"\\b[A-Z][\\w']*",r:0},n=e.C("/\\*","\\*/",{c:["self"]}),r={cN:"subst",b:/\\\(/,e:"\\)",k:i,c:[]},s={cN:"number",b:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",r:0},o=e.inherit(e.QSM,{c:[r,e.BE]});return r.c=[s],{k:i,c:[o,e.CLCM,n,t,s,{cN:"func",bK:"func",e:"{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/,i:/\(/}),{cN:"generics",b:/</,e:/>/,i:/>/},{cN:"params",b:/\(/,e:/\)/,endsParent:!0,k:i,c:["self",s,o,e.CBCM,{b:":"}],i:/["']/}],i:/\[|%/},{cN:"class",bK:"struct protocol class extension enum",k:i,e:"\\{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/})]},{cN:"preprocessor",b:"(@assignment|@class_protocol|@exported|@final|@lazy|@noreturn|@NSCopying|@NSManaged|@objc|@optional|@required|@auto_closure|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix)"}]}});hljs.registerLanguage("lisp",function(b){var e="[a-zA-Z_\\-\\+\\*\\/\\<\\=\\>\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*",c="\\|[^]*?\\|",r="(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|\\-)?\\d+)?",a={cN:"shebang",b:"^#!",e:"$"},i={cN:"literal",b:"\\b(t{1}|nil)\\b"},l={cN:"number",v:[{b:r,r:0},{b:"#(b|B)[0-1]+(/[0-1]+)?"},{b:"#(o|O)[0-7]+(/[0-7]+)?"},{b:"#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?"},{b:"#(c|C)\\("+r+" +"+r,e:"\\)"}]},t=b.inherit(b.QSM,{i:null}),d=b.C(";","$",{r:0}),n={cN:"variable",b:"\\*",e:"\\*"},u={cN:"keyword",b:"[:&]"+e},N={b:e,r:0},o={b:c},s={b:"\\(",e:"\\)",c:["self",i,t,l,N]},v={cN:"quoted",c:[l,t,n,u,s,N],v:[{b:"['`]\\(",e:"\\)"},{b:"\\(quote ",e:"\\)",k:"quote"},{b:"'"+c}]},f={cN:"quoted",v:[{b:"'"+e},{b:"#'"+e+"(::"+e+")*"}]},g={cN:"list",b:"\\(\\s*",e:"\\)"},q={eW:!0,r:0};return g.c=[{cN:"keyword",v:[{b:e},{b:c}]},q],q.c=[v,f,g,i,l,t,d,n,u,o,N],{i:/\S/,c:[l,a,i,t,d,v,f,g,N]}});hljs.registerLanguage("d",function(e){var r={keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},t="(0|[1-9][\\d_]*)",a="(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)",i="0[bB][01_]+",n="([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)",c="0[xX]"+n,_="([eE][+-]?"+a+")",d="("+a+"(\\.\\d*|"+_+")|\\d+\\."+a+a+"|\\."+t+_+"?)",o="(0[xX]("+n+"\\."+n+"|\\.?"+n+")[pP][+-]?"+a+")",s="("+t+"|"+i+"|"+c+")",l="("+o+"|"+d+")",u="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};",b={cN:"number",b:"\\b"+s+"(L|u|U|Lu|LU|uL|UL)?",r:0},f={cN:"number",b:"\\b("+l+"([fF]|L|i|[fF]i|Li)?|"+s+"(i|[fF]i|Li))",r:0},g={cN:"string",b:"'("+u+"|.)",e:"'",i:"."},h={b:u,r:0},p={cN:"string",b:'"',c:[h],e:'"[cwd]?'},w={cN:"string",b:'[rq]"',e:'"[cwd]?',r:5},N={cN:"string",b:"`",e:"`[cwd]?"},A={cN:"string",b:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',r:10},F={cN:"string",b:'q"\\{',e:'\\}"'},m={cN:"shebang",b:"^#!",e:"$",r:5},y={cN:"preprocessor",b:"#(line)",e:"$",r:5},L={cN:"keyword",b:"@[a-zA-Z_][a-zA-Z_\\d]*"},v=e.C("\\/\\+","\\+\\/",{c:["self"],r:10});return{l:e.UIR,k:r,c:[e.CLCM,e.CBCM,v,A,p,w,N,F,f,b,g,m,y,L]}});hljs.registerLanguage("scss",function(e){{var t="[a-zA-Z-][a-zA-Z0-9_-]*",i={cN:"variable",b:"(\\$"+t+")\\b"},r={cN:"function",b:t+"\\(",rB:!0,eE:!0,e:"\\("},o={cN:"hexcolor",b:"#[0-9A-Fa-f]+"};({cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:!0,i:"[^\\s]",starts:{cN:"value",eW:!0,eE:!0,c:[r,o,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"important",b:"!important"}]}})}return{cI:!0,i:"[=/|']",c:[e.CLCM,e.CBCM,r,{cN:"id",b:"\\#[A-Za-z0-9_-]+",r:0},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"tag",b:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",r:0},{cN:"pseudo",b:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{cN:"pseudo",b:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},i,{cN:"attribute",b:"\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",i:"[^\\s]"},{cN:"value",b:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{cN:"value",b:":",e:";",c:[r,i,o,e.CSSNM,e.QSM,e.ASM,{cN:"important",b:"!important"}]},{cN:"at_rule",b:"@",e:"[{;]",k:"mixin include extend for if else each while charset import debug media page content font-face namespace warn",c:[r,i,e.QSM,e.ASM,o,e.CSSNM,{cN:"preprocessor",b:"\\s[A-Za-z0-9_.-]+",r:0}]}]}});hljs.registerLanguage("scheme",function(e){var t="[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+",r="(\\-|\\+)?\\d+([./]\\d+)?",i=r+"[+\\-]"+r+"i",a={built_in:"case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char<? char=? char>=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci<? string-ci=? string-ci>=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string<? string=? string>=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"},n={cN:"shebang",b:"^#!",e:"$"},c={cN:"literal",b:"(#t|#f|#\\\\"+t+"|#\\\\.)"},l={cN:"number",v:[{b:r,r:0},{b:i,r:0},{b:"#b[0-1]+(/[0-1]+)?"},{b:"#o[0-7]+(/[0-7]+)?"},{b:"#x[0-9a-f]+(/[0-9a-f]+)?"}]},s=e.QSM,o=[e.C(";","$",{r:0}),e.C("#\\|","\\|#")],u={b:t,r:0},p={cN:"variable",b:"'"+t},d={eW:!0,r:0},g={cN:"list",v:[{b:"\\(",e:"\\)"},{b:"\\[",e:"\\]"}],c:[{cN:"keyword",b:t,l:t,k:a},d]};return d.c=[c,l,s,u,p,g].concat(o),{i:/\S/,c:[n,l,s,p,g].concat(o)}});hljs.registerLanguage("nginx",function(e){var r={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},b={eW:!0,l:"[a-z/_]+",k:{built_in:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{cN:"url",b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"title",b:e.UIR,starts:b}],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("asciidoc",function(e){return{aliases:["adoc"],c:[e.C("^/{4,}\\n","\\n/{4,}$",{r:10}),e.C("^//","$",{r:0}),{cN:"title",b:"^\\.\\w.*$"},{b:"^[=\\*]{4,}\\n",e:"\\n^[=\\*]{4,}$",r:10},{cN:"header",b:"^(={1,5}) .+?( \\1)?$",r:10},{cN:"header",b:"^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$",r:10},{cN:"attribute",b:"^:.+?:",e:"\\s",eE:!0,r:10},{cN:"attribute",b:"^\\[.+?\\]$",r:0},{cN:"blockquote",b:"^_{4,}\\n",e:"\\n_{4,}$",r:10},{cN:"code",b:"^[\\-\\.]{4,}\\n",e:"\\n[\\-\\.]{4,}$",r:10},{b:"^\\+{4,}\\n",e:"\\n\\+{4,}$",c:[{b:"<",e:">",sL:"xml",r:0}],r:10},{cN:"bullet",b:"^(\\*+|\\-+|\\.+|[^\\n]+?::)\\s+"},{cN:"label",b:"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+",r:10},{cN:"strong",b:"\\B\\*(?![\\*\\s])",e:"(\\n{2}|\\*)",c:[{b:"\\\\*\\w",r:0}]},{cN:"emphasis",b:"\\B'(?!['\\s])",e:"(\\n{2}|')",c:[{b:"\\\\'\\w",r:0}],r:0},{cN:"emphasis",b:"_(?![_\\s])",e:"(\\n{2}|_)",r:0},{cN:"smartquote",v:[{b:"``.+?''"},{b:"`.+?'"}]},{cN:"code",b:"(`.+?`|\\+.+?\\+)",r:0},{cN:"code",b:"^[ \\t]",e:"$",r:0},{cN:"horizontal_rule",b:"^'{3,}[ \\t]*$",r:10},{b:"(link:)?(http|https|ftp|file|irc|image:?):\\S+\\[.*?\\]",rB:!0,c:[{b:"(link|image:?):",r:0},{cN:"link_url",b:"\\w",e:"[^\\[]+",r:0},{cN:"link_label",b:"\\[",e:"\\]",eB:!0,eE:!0,r:0}],r:10}]}});hljs.registerLanguage("php",function(e){var c={cN:"variable",b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},i={cN:"preprocessor",b:/<\?(php)?|\?>/},a={cN:"string",c:[e.BE,i],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},n={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.CLCM,e.HCM,e.C("/\\*","\\*/",{c:[{cN:"phpdoc",b:"\\s@[A-Za-z]+"},i]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:"<<<['\"]?\\w+['\"]?$",e:"^\\w+;",c:[e.BE]},i,c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,a,n]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},a,n]}});hljs.registerLanguage("cpp",function(t){var i={keyword:"false int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using true class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue wchar_t inline delete alignof char16_t char32_t constexpr decltype noexcept nullptr static_assert thread_local restrict _Bool complex _Complex _Imaginary intmax_t uintmax_t int8_t uint8_t int16_t uint16_t int32_t uint32_t int64_t uint64_t int_least8_t uint_least8_t int_least16_t uint_least16_t int_least32_t uint_least32_t int_least64_t uint_least64_t int_fast8_t uint_fast8_t int_fast16_t uint_fast16_t int_fast32_t uint_fast32_t int_fast64_t uint_fast64_t intptr_t uintptr_t atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong atomic_wchar_t atomic_char16_t atomic_char32_t atomic_intmax_t atomic_uintmax_t atomic_intptr_t atomic_uintptr_t atomic_size_t atomic_ptrdiff_t atomic_int_least8_t atomic_int_least16_t atomic_int_least32_t atomic_int_least64_t atomic_uint_least8_t atomic_uint_least16_t atomic_uint_least32_t atomic_uint_least64_t atomic_int_fast8_t atomic_int_fast16_t atomic_int_fast32_t atomic_int_fast64_t atomic_uint_fast8_t atomic_uint_fast16_t atomic_uint_fast32_t atomic_uint_fast64_t",built_in:"std string cin cout cerr clog stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf"};return{aliases:["c","cc","h","c++","h++","hpp"],k:i,i:"</",c:[t.CLCM,t.CBCM,t.QSM,{cN:"string",b:"'\\\\?.",e:"'",i:"."},{cN:"number",b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},t.CNM,{cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line pragma",c:[{b:/\\\n/,r:0},{b:'include\\s*[<"]',e:'[>"]',k:"include",i:"\\n"},t.CLCM]},{b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:i,c:["self"]},{b:t.IR+"::",k:i},{bK:"new throw return else",r:0},{cN:"function",b:"("+t.IR+"\\s+)+"+t.IR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:i,c:[{b:t.IR+"\\s*\\(",rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:i,r:0,c:[t.CBCM]},t.CLCM,t.CBCM]}]}});hljs.registerLanguage("java",function(e){var a=e.UIR+"(<"+e.UIR+">)?",t="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private",c="(\\b(0b[01_]+)|\\b0[xX][a-fA-F0-9_]+|(\\b[\\d_]+(\\.[\\d_]*)?|\\.[\\d_]+)([eE][-+]?\\d+)?)[lLfF]?",r={cN:"number",b:c,r:0};return{aliases:["jsp"],k:t,i:/<\//,c:[{cN:"javadoc",b:"/\\*\\*",e:"\\*/",r:0,c:[{cN:"javadoctag",b:"(^|\\s)@[A-Za-z]+"}]},e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return",r:0},{cN:"function",b:"("+a+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:t,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:t,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},r,{cN:"annotation",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("tex",function(c){var e={cN:"command",b:"\\\\[a-zA-Zа-яА-я]+[\\*]?"},m={cN:"command",b:"\\\\[^a-zA-Zа-яА-я0-9]"},r={cN:"special",b:"[{}\\[\\]\\&#~]",r:0};return{c:[{b:"\\\\[a-zA-Zа-яА-я]+[\\*]? *= *-?\\d*\\.?\\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?",rB:!0,c:[e,m,{cN:"number",b:" *=",e:"-?\\d*\\.?\\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?",eB:!0}],r:10},e,m,r,{cN:"formula",b:"\\$\\$",e:"\\$\\$",c:[e,m,r],r:0},{cN:"formula",b:"\\$",e:"\\$",c:[e,m,r],r:0},c.C("%","$",{r:0})]}});hljs.registerLanguage("coffeescript",function(e){var c={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",reserved:"case default function var void with const let enum export import native __hasProp __extends __slice __bind __indexOf",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",t={cN:"subst",b:/#\{/,e:/}/,k:c},r=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,t]},{b:/"/,e:/"/,c:[e.BE,t]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[t,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{cN:"property",b:"@"+n},{b:"`",e:"`",eB:!0,eE:!0,sL:"javascript"}];t.c=r;var i=e.inherit(e.TM,{b:n}),s="(\\(.*\\))?\\s*\\B[-=]>",o={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(r)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:r.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+s,e:"[-=]>",rB:!0,c:[i,o]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:s,e:"[-=]>",rB:!0,c:[o]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[i]},i]},{cN:"attribute",b:n+":",e:":",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage("vala",function(e){return{k:{keyword:"char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 uint16 uint32 uint64 float double bool struct enum string void weak unowned owned async signal static abstract interface override while do for foreach else switch case break default return try catch public private protected internal using new this get set const stdout stdin stderr var",built_in:"DBus GLib CCode Gee Object",literal:"false true null"},c:[{cN:"class",bK:"class interface delegate namespace",e:"{",eE:!0,i:"[^,:\\n\\s\\.]",c:[e.UTM]},e.CLCM,e.CBCM,{cN:"string",b:'"""',e:'"""',r:5},e.ASM,e.QSM,e.CNM,{cN:"preprocessor",b:"^#",e:"$",r:2},{cN:"constant",b:" [A-Z_]+ ",r:0}]}});hljs.registerLanguage("http",function(t){return{aliases:["https"],i:"\\S",c:[{cN:"status",b:"^HTTP/[0-9\\.]+",e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{cN:"request",b:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{cN:"string",e:"$"}},{b:"\\n\\n",starts:{sL:"",eW:!0}}]}});hljs.registerLanguage("go",function(e){var t={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer",constant:"true false iota nil",typename:"bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],k:t,i:"</",c:[e.CLCM,e.CBCM,e.QSM,{cN:"string",b:"'",e:"[^\\\\]'"},{cN:"string",b:"`",e:"`"},{cN:"number",b:e.CNR+"[dflsi]?",r:0},e.CNM]}});hljs.registerLanguage("vim",function(e){return{l:/[!#@\w]+/,k:{keyword:"N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope cp cpf cq cr cs cst cu cuna cunme cw d|0 delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu g|0 go gr grepa gu gv ha h|0 helpf helpg helpt hi hid his i|0 ia iabc if ij il im imapc ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs n|0 new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf q|0 quita qa r|0 rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv s|0 sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync t|0 tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up v|0 ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank",built_in:"abs acos add and append argc argidx argv asin atan atan2 browse browsedir bufexists buflisted bufloaded bufname bufnr bufwinnr byte2line byteidx call ceil changenr char2nr cindent clearmatches col complete complete_add complete_check confirm copy cos cosh count cscope_connection cursor deepcopy delete did_filetype diff_filler diff_hlID empty escape eval eventhandler executable exists exp expand extend feedkeys filereadable filewritable filter finddir findfile float2nr floor fmod fnameescape fnamemodify foldclosed foldclosedend foldlevel foldtext foldtextresult foreground function garbagecollect get getbufline getbufvar getchar getcharmod getcmdline getcmdpos getcmdtype getcwd getfontname getfperm getfsize getftime getftype getline getloclist getmatches getpid getpos getqflist getreg getregtype gettabvar gettabwinvar getwinposx getwinposy getwinvar glob globpath has has_key haslocaldir hasmapto histadd histdel histget histnr hlexists hlID hostname iconv indent index input inputdialog inputlist inputrestore inputsave inputsecret insert invert isdirectory islocked items join keys len libcall libcallnr line line2byte lispindent localtime log log10 luaeval map maparg mapcheck match matchadd matcharg matchdelete matchend matchlist matchstr max min mkdir mode mzeval nextnonblank nr2char or pathshorten pow prevnonblank printf pumvisible py3eval pyeval range readfile reltime reltimestr remote_expr remote_foreground remote_peek remote_read remote_send remove rename repeat resolve reverse round screenattr screenchar screencol screenrow search searchdecl searchpair searchpairpos searchpos server2client serverlist setbufvar setcmdpos setline setloclist setmatches setpos setqflist setreg settabvar settabwinvar setwinvar sha256 shellescape shiftwidth simplify sin sinh sort soundfold spellbadword spellsuggest split sqrt str2float str2nr strchars strdisplaywidth strftime stridx string strlen strpart strridx strtrans strwidth submatch substitute synconcealed synID synIDattr synIDtrans synstack system tabpagebuflist tabpagenr tabpagewinnr tagfiles taglist tan tanh tempname tolower toupper tr trunc type undofile undotree values virtcol visualmode wildmenumode winbufnr wincol winheight winline winnr winrestcmd winrestview winsaveview winwidth writefile xor"},i:/[{:]/,c:[e.NM,e.ASM,{cN:"string",b:/"((\\")|[^"\n])*("|\n)/},{cN:"variable",b:/[bwtglsav]:[\w\d_]*/},{cN:"function",bK:"function function!",e:"$",r:0,c:[e.TM,{cN:"params",b:"\\(",e:"\\)"}]}]}});hljs.registerLanguage("dos",function(e){var r=e.C(/@?rem\b/,/$/,{r:10}),t={cN:"label",b:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)",r:0};return{aliases:["bat","cmd"],cI:!0,k:{flow:"if else goto for in do call exit not exist errorlevel defined",operator:"equ neq lss leq gtr geq",keyword:"shift cd dir echo setlocal endlocal set pause copy",stream:"prn nul lpt3 lpt2 lpt1 con com4 com3 com2 com1 aux",winutils:"ping net ipconfig taskkill xcopy ren del",built_in:"append assoc at attrib break cacls cd chcp chdir chkdsk chkntfs cls cmd color comp compact convert date dir diskcomp diskcopy doskey erase fs find findstr format ftype graftabl help keyb label md mkdir mode more move path pause print popd pushd promt rd recover rem rename replace restore rmdir shiftsort start subst time title tree type ver verify vol"},c:[{cN:"envvar",b:/%%[^ ]|%[^ ]+?%|![^ ]+?!/},{cN:"function",b:t.b,e:"goto:eof",c:[e.inherit(e.TM,{b:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),r]},{cN:"number",b:"\\b\\d+",r:0},r]}});hljs.registerLanguage("xml",function(t){var e="[A-Za-z0-9\\._:-]+",s={b:/<\?(php)?(?!\w)/,e:/\?>/,sL:"php",subLanguageMode:"continuous"},c={eW:!0,i:/</,r:0,c:[s,{cN:"attribute",b:e,r:0},{b:"=",r:0,c:[{cN:"value",c:[s],v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s\/>]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xsl","plist"],cI:!0,c:[{cN:"doctype",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},t.C("<!--","-->",{r:10}),{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{title:"style"},c:[c],starts:{e:"</style>",rE:!0,sL:"css"}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{title:"script"},c:[c],starts:{e:"</script>",rE:!0,sL:""}},s,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"title",b:/[^ \/><\n\t]+/,r:0},c]}]}});hljs.registerLanguage("r",function(e){var r="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{c:[e.HCM,{b:r,l:r,k:{keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},r:0},{cN:"number",b:"0[xX][0-9a-fA-F]+[Li]?\\b",r:0},{cN:"number",b:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",r:0},{cN:"number",b:"\\d+\\.(?!\\d)(?:i\\b)?",r:0},{cN:"number",b:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{cN:"number",b:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{b:"`",e:"`",r:0},{cN:"string",c:[e.BE],v:[{b:'"',e:'"'},{b:"'",e:"'"}]}]}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/-?[a-z\.]+/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",operator:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"shebang",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,e.NM,s,a,t]}});hljs.registerLanguage("haskell",function(e){var c=[e.C("--","$"),e.C("{-","-}",{c:["self"]})],a={cN:"pragma",b:"{-#",e:"#-}"},i={cN:"preprocessor",b:"^#",e:"$"},n={cN:"type",b:"\\b[A-Z][\\w']*",r:0},t={cN:"container",b:"\\(",e:"\\)",i:'"',c:[a,i,{cN:"type",b:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TM,{b:"[_a-z][\\w']*"})].concat(c)},l={cN:"container",b:"{",e:"}",c:t.c};return{aliases:["hs"],k:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",c:[{cN:"module",b:"\\bmodule\\b",e:"where",k:"module where",c:[t].concat(c),i:"\\W\\.|;"},{cN:"import",b:"\\bimport\\b",e:"$",k:"import|0 qualified as hiding",c:[t].concat(c),i:"\\W\\.|;"},{cN:"class",b:"^(\\s*)?(class|instance)\\b",e:"where",k:"class family instance where",c:[n,t].concat(c)},{cN:"typedef",b:"\\b(data|(new)?type)\\b",e:"$",k:"data family type newtype deriving",c:[a,n,t,l].concat(c)},{cN:"default",bK:"default",e:"$",c:[n,t].concat(c)},{cN:"infix",bK:"infix infixl infixr",e:"$",c:[e.CNM].concat(c)},{cN:"foreign",b:"\\bforeign\\b",e:"$",k:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",c:[n,e.QSM].concat(c)},{cN:"shebang",b:"#!\\/usr\\/bin\\/env runhaskell",e:"$"},a,i,e.QSM,e.CNM,n,e.inherit(e.TM,{b:"^[_a-z][\\w']*"}),{b:"->|<-"}].concat(c)}});hljs.registerLanguage("cs",function(e){var r="abstract as base bool break byte case catch char checked const continue decimal dynamic default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long null when object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async protected public private internal ascending descending from get group into join let orderby partial select set value var where yield",t=e.IR+"(<"+e.IR+">)?";return{aliases:["csharp"],k:r,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"xmlDocTag",v:[{b:"///",r:0},{b:"<!--|-->"},{b:"</?",e:">"}]}]}),e.CLCM,e.CBCM,{cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line region endregion pragma checksum"},{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},e.ASM,e.QSM,e.CNM,{bK:"class namespace interface",e:/[{;=]/,i:/[^\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"new return throw await",r:0},{cN:"function",b:"("+t+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage("python",function(e){var r={cN:"prompt",b:/^(>>>|\.\.\.) /},b={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[r],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[r],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},e.ASM,e.QSM]},l={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},c={cN:"params",b:/\(/,e:/\)/,c:["self",r,l,b]};return{aliases:["py","gyp"],k:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},i:/(<\/|->|\?)/,c:[r,l,b,e.HCM,{v:[{cN:"function",bK:"def",r:10},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,c]},{cN:"decorator",b:/@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"chunk",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"header",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\-\-\-/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+\+\+/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"change",b:"^\\!",e:"$"}]}});hljs.registerLanguage("less",function(e){var r="[\\w-]+",t="("+r+"|@{"+r+"})",a=[],c=[],n=function(e){return{cN:"string",b:"~?"+e+".*?"+e}},i=function(e,r,t){return{cN:e,b:r,r:t}},s=function(r,t,a){return e.inherit({cN:r,b:t+"\\(",e:"\\(",rB:!0,eE:!0,r:0},a)},b={b:"\\(",e:"\\)",c:c,r:0};c.push(e.CLCM,e.CBCM,n("'"),n('"'),e.CSSNM,i("hexcolor","#[0-9A-Fa-f]+\\b"),s("function","(url|data-uri)",{starts:{cN:"string",e:"[\\)\\n]",eE:!0}}),s("function",r),b,i("variable","@@?"+r,10),i("variable","@{"+r+"}"),i("built_in","~?`[^`]*?`"),{cN:"attribute",b:r+"\\s*:",e:":",rB:!0,eE:!0});var o=c.concat({b:"{",e:"}",c:a}),u={bK:"when",eW:!0,c:[{bK:"and not"}].concat(c)},C={cN:"attribute",b:t,e:":",eE:!0,c:[e.CLCM,e.CBCM],i:/\S/,starts:{e:"[;}]",rE:!0,c:c,i:"[<=$]"}},l={cN:"at_rule",b:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{e:"[;{}]",rE:!0,c:c,r:0}},d={cN:"variable",v:[{b:"@"+r+"\\s*:",r:15},{b:"@"+r}],starts:{e:"[;}]",rE:!0,c:o}},p={v:[{b:"[\\.#:&\\[]",e:"[;{}]"},{b:t+"[^;]*{",e:"{"}],rB:!0,rE:!0,i:"[<='$\"]",c:[e.CLCM,e.CBCM,u,i("keyword","all\\b"),i("variable","@{"+r+"}"),i("tag",t+"%?",0),i("id","#"+t),i("class","\\."+t,0),i("keyword","&",0),s("pseudo",":not"),s("keyword",":extend"),i("pseudo","::?"+t),{cN:"attr_selector",b:"\\[",e:"\\]"},{b:"\\(",e:"\\)",c:o},{b:"!important"}]};return a.push(e.CLCM,e.CBCM,l,d,p,C),{cI:!0,i:"[=>'/<($\"]",c:a}});hljs.registerLanguage("erlang",function(e){var r="[a-z'][a-zA-Z0-9_']*",c="("+r+":"+r+"|"+r+")",a={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},n=e.C("%","$"),i={cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",r:0},b={b:"fun\\s+"+r+"/\\d+"},d={b:c+"\\(",e:"\\)",rB:!0,r:0,c:[{cN:"function_name",b:c,r:0},{b:"\\(",e:"\\)",eW:!0,rE:!0,r:0}]},o={cN:"tuple",b:"{",e:"}",r:0},t={cN:"variable",b:"\\b_([A-Z][A-Za-z0-9_]*)?",r:0},l={cN:"variable",b:"[A-Z][a-zA-Z0-9_]*",r:0},f={b:"#"+e.UIR,r:0,rB:!0,c:[{cN:"record_name",b:"#"+e.UIR,r:0},{b:"{",e:"}",r:0}]},s={bK:"fun receive if try case",e:"end",k:a};s.c=[n,b,e.inherit(e.ASM,{cN:""}),s,d,e.QSM,i,o,t,l,f];var u=[n,b,s,d,e.QSM,i,o,t,l,f];d.c[1].c=u,o.c=u,f.c[1].c=u;var v={cN:"params",b:"\\(",e:"\\)",c:u};return{aliases:["erl"],k:a,i:"(</|\\*=|\\+=|-=|/\\*|\\*/|\\(\\*|\\*\\))",c:[{cN:"function",b:"^"+r+"\\s*\\(",e:"->",rB:!0,i:"\\(|#|//|/\\*|\\\\|:|;",c:[v,e.inherit(e.TM,{b:r})],starts:{e:";|\\.",k:a,c:u}},n,{cN:"pp",b:"^-",e:"\\.",r:0,eE:!0,rB:!0,l:"-"+e.IR,k:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec",c:[v]},i,e.QSM,f,t,l,o,{b:/\.$/}]}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",a={cN:"function",b:c+"\\(",rB:!0,eE:!0,e:"\\("},r={cN:"rule",b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{cN:"value",eW:!0,eE:!0,c:[a,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"hexcolor",b:"#[0-9A-Fa-f]+"},{cN:"important",b:"!important"}]}}]};return{cI:!0,i:/[=\/|']/,c:[e.CBCM,r,{cN:"id",b:/\#[A-Za-z0-9_-]+/},{cN:"class",b:/\.[A-Za-z0-9_-]+/,r:0},{cN:"attr_selector",b:/\[/,e:/\]/,i:"$"},{cN:"pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"']+/},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",c:[{cN:"keyword",b:/\S+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[a,e.ASM,e.QSM,e.CSSNM]}]},{cN:"tag",b:c,r:0},{cN:"rules",b:"{",e:"}",i:/\S/,r:0,c:[e.CBCM,r]}]}});hljs.registerLanguage("rust",function(e){var t=e.inherit(e.CBCM);return t.c.push("self"),{aliases:["rs"],k:{keyword:"alignof as be box break const continue crate do else enum extern false fn for if impl in let loop match mod mut offsetof once priv proc pub pure ref return self sizeof static struct super trait true type typeof unsafe unsized use virtual while yield int i8 i16 i32 i64 uint u8 u32 u64 float f32 f64 str char bool",built_in:"assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln!"},l:e.IR+"!?",i:"</",c:[e.CLCM,t,e.inherit(e.QSM,{i:null}),{cN:"string",b:/r(#*)".*?"\1(?!#)/},{cN:"string",b:/'\\?(x\w{2}|u\w{4}|U\w{8}|.)'/},{b:/'[a-zA-Z_][a-zA-Z0-9_]*/},{cN:"number",b:/\b(0[xbo][A-Fa-f0-9_]+|\d[\d_]*(\.[0-9_]+)?([eE][+-]?[0-9_]+)?)([uif](8|16|32|64|size))?/,r:0},{cN:"function",bK:"fn",e:"(\\(|<)",eE:!0,c:[e.UTM]},{cN:"preprocessor",b:"#\\!?\\[",e:"\\]"},{bK:"type",e:"(=|<)",c:[e.UTM],i:"\\S"},{bK:"trait enum",e:"({|<)",c:[e.UTM],i:"\\S"},{b:e.IR+"::"},{b:"->"}]}});hljs.registerLanguage("scala",function(e){var t={cN:"annotation",b:"@[A-Za-z]+"},a={cN:"string",b:'u?r?"""',e:'"""',r:10},r={cN:"symbol",b:"'\\w[\\w\\d_]*(?!')"},c={cN:"type",b:"\\b[A-Z][A-Za-z0-9_]*",r:0},i={cN:"title",b:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,r:0},l={cN:"class",bK:"class object trait type",e:/[:={\[(\n;]/,c:[{cN:"keyword",bK:"extends with",r:10},i]},n={cN:"function",bK:"def val",e:/[:={\[(\n;]/,c:[i]};return{k:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},c:[e.CLCM,e.CBCM,a,e.QSM,r,c,n,l,e.CNM,t]}});hljs.registerLanguage("nimrod",function(t){return{aliases:["nim"],k:{keyword:"addr and as asm bind block break|0 case|0 cast const|0 continue|0 converter discard distinct|10 div do elif else|0 end|0 enum|0 except export finally for from generic if|0 import|0 in include|0 interface is isnot|10 iterator|10 let|0 macro method|10 mixin mod nil not notin|10 object|0 of or out proc|10 ptr raise ref|10 return shl shr static template|10 try|0 tuple type|0 using|0 var|0 when while|0 with without xor yield",literal:"shared guarded stdin stdout stderr result|10 true false"},c:[{cN:"decorator",b:/{\./,e:/\.}/,r:10},{cN:"string",b:/[a-zA-Z]\w*"/,e:/"/,c:[{b:/""/}]},{cN:"string",b:/([a-zA-Z]\w*)?"""/,e:/"""/},t.QSM,{cN:"type",b:/\b[A-Z]\w+\b/,r:0},{cN:"type",b:/\b(int|int8|int16|int32|int64|uint|uint8|uint16|uint32|uint64|float|float32|float64|bool|char|string|cstring|pointer|expr|stmt|void|auto|any|range|array|openarray|varargs|seq|set|clong|culong|cchar|cschar|cshort|cint|csize|clonglong|cfloat|cdouble|clongdouble|cuchar|cushort|cuint|culonglong|cstringarray|semistatic)\b/},{cN:"number",b:/\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/,r:0},{cN:"number",b:/\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/,r:0},{cN:"number",b:/\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/,r:0},{cN:"number",b:/\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/,r:0},t.HCM]}});hljs.registerLanguage("elixir",function(e){var n="[a-zA-Z_][a-zA-Z0-9_]*(\\!|\\?)?",r="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",b="and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote",c={cN:"subst",b:"#\\{",e:"}",l:n,k:b},a={cN:"string",c:[e.BE,c],v:[{b:/'/,e:/'/},{b:/"/,e:/"/}]},i={cN:"function",bK:"def defp defmacro",e:/\B\b/,c:[e.inherit(e.TM,{b:n,endsParent:!0})]},s=e.inherit(i,{cN:"class",bK:"defmodule defrecord",e:/\bdo\b|$|;/}),l=[a,e.HCM,s,i,{cN:"constant",b:"(\\b[A-Z_]\\w*(.)?)+",r:0},{cN:"symbol",b:":",c:[a,{b:r}],r:0},{cN:"symbol",b:n+":",r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{b:"->"},{b:"("+e.RSR+")\\s*",c:[e.HCM,{cN:"regexp",i:"\\n",c:[e.BE,c],v:[{b:"/",e:"/[a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}],r:0}];return c.c=l,{l:n,k:b,c:l}});hljs.registerLanguage("sml",function(e){return{aliases:["ml"],k:{keyword:"abstype and andalso as case datatype do else end eqtype exception fn fun functor handle if in include infix infixr let local nonfix of op open orelse raise rec sharing sig signature struct structure then type val with withtype where while",built_in:"array bool char exn int list option order real ref string substring vector unit word",literal:"true false NONE SOME LESS EQUAL GREATER nil"},i:/\/\/|>>/,l:"[a-z_]\\w*!?",c:[{cN:"literal",b:"\\[(\\|\\|)?\\]|\\(\\)"},e.C("\\(\\*","\\*\\)",{c:["self"]}),{cN:"symbol",b:"'[A-Za-z_](?!')[\\w']*"},{cN:"tag",b:"`[A-Z][\\w']*"},{cN:"type",b:"\\b[A-Z][\\w']*",r:0},{b:"[a-z_]\\w*'[\\w']*"},e.inherit(e.ASM,{cN:"char",r:0}),e.inherit(e.QSM,{i:null}),{cN:"number",b:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",r:0},{b:/[-=]>/}]}});hljs.registerLanguage("smalltalk",function(a){var r="[a-z][a-zA-Z0-9_]*",s={cN:"char",b:"\\$.{1}"},c={cN:"symbol",b:"#"+a.UIR};return{aliases:["st"],k:"self super nil true false thisContext",c:[a.C('"','"'),a.ASM,{cN:"class",b:"\\b[A-Z][A-Za-z0-9_]*",r:0},{cN:"method",b:r+":",r:0},a.CNM,c,s,{cN:"localvars",b:"\\|[ ]*"+r+"([ ]+"+r+")*[ ]*\\|",rB:!0,e:/\|/,i:/\S/,c:[{b:"(\\|[ ]*)?"+r}]},{cN:"array",b:"\\#\\(",e:"\\)",c:[a.ASM,s,a.CNM,c]}]}});hljs.registerLanguage("apache",function(e){var r={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"tag",b:"</?",e:">"},{cN:"keyword",b:/\w+/,r:0,k:{common:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"sqbracket",b:"\\s\\[",e:"\\]$"},{cN:"cbracket",b:"[\\$%]\\{",e:"\\}",c:["self",r]},r,e.QSM]}}],i:/\S/}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"header",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"blockquote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{cN:"horizontal_rule",b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"link_label",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link_url",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"link_reference",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:"^\\[.+\\]:",rB:!0,c:[{cN:"link_reference",b:"\\[",e:"\\]:",eB:!0,eE:!0,starts:{cN:"link_url",e:"$"}}]}]}});hljs.registerLanguage("ocaml",function(e){return{aliases:["ml"],k:{keyword:"and as assert asr begin class constraint do done downto else end exception external for fun function functor if in include inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method mod module mutable new object of open! open or private rec sig struct then to try type val! val virtual when while with parser value",built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit in_channel out_channel ref",literal:"true false"},i:/\/\/|>>/,l:"[a-z_]\\w*!?",c:[{cN:"literal",b:"\\[(\\|\\|)?\\]|\\(\\)"},e.C("\\(\\*","\\*\\)",{c:["self"]}),{cN:"symbol",b:"'[A-Za-z_](?!')[\\w']*"},{cN:"tag",b:"`[A-Z][\\w']*"},{cN:"type",b:"\\b[A-Z][\\w']*",r:0},{b:"[a-z_]\\w*'[\\w']*"},e.inherit(e.ASM,{cN:"char",r:0}),e.inherit(e.QSM,{i:null}),{cN:"number",b:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",r:0},{b:/[-=]>/}]}});hljs.registerLanguage("fortran",function(e){var t={cN:"params",b:"\\(",e:"\\)"},n={constant:".False. .True.",type:"integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image"};return{cI:!0,aliases:["f90","f95"],k:n,c:[e.inherit(e.ASM,{cN:"string",r:0}),e.inherit(e.QSM,{cN:"string",r:0}),{cN:"function",bK:"subroutine function program",i:"[${=\\n]",c:[e.UTM,t]},e.C("!","$",{r:0}),{cN:"number",b:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",r:0}]}});hljs.registerLanguage("makefile",function(e){var a={cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]};return{aliases:["mk","mak"],c:[e.HCM,{b:/^\w+\s*\W*=/,rB:!0,r:0,starts:{cN:"constant",e:/\s*\W*=/,eE:!0,starts:{e:/$/,r:0,c:[a]}}},{cN:"title",b:/^[\w]+:\s*$/},{cN:"phony",b:/^\.PHONY:/,e:/$/,k:".PHONY",l:/[\.\w]+/},{b:/^\t+/,e:/$/,r:0,c:[e.QSM,a]}]}});hljs.registerLanguage("ruby",function(e){var c="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r="and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",b={cN:"yardoctag",b:"@[A-Za-z]+"},a={cN:"value",b:"#<",e:">"},n=[e.C("#","$",{c:[b]}),e.C("^\\=begin","^\\=end",{c:[b],r:10}),e.C("^__END__","\\n$")],s={cN:"subst",b:"#\\{",e:"}",k:r},t={cN:"string",c:[e.BE,s],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/}]},i={cN:"params",b:"\\(",e:"\\)",k:r},d=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{cN:"inheritance",b:"<\\s*",c:[{cN:"parent",b:"("+e.IR+"::)?"+e.IR}]}].concat(n)},{cN:"function",bK:"def",e:" |$|;",r:0,c:[e.inherit(e.TM,{b:c}),i].concat(n)},{cN:"constant",b:"(::)?(\\b[A-Z]\\w*(::)?)+",r:0},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":",c:[t,{b:c}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{b:"("+e.RSR+")\\s*",c:[a,{cN:"regexp",c:[e.BE,s],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(n),r:0}].concat(n);s.c=d,i.c=d;var o="[>?]>",l="[\\w#]+\\(\\w+\\):\\d+:\\d+>",u="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",N=[{b:/^\s*=>/,cN:"status",starts:{e:"$",c:d}},{cN:"prompt",b:"^("+o+"|"+l+"|"+u+")",starts:{e:"$",c:d}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,c:n.concat(N).concat(d)}});hljs.registerLanguage("objectivec",function(e){var t={cN:"built_in",b:"(AV|CA|CF|CG|CI|MK|MP|NS|UI)\\w+"},i={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},o=/[a-zA-Z@][a-zA-Z0-9_]*/,n="@interface @class @protocol @implementation";return{aliases:["m","mm","objc","obj-c"],k:i,l:o,i:"</",c:[t,e.CLCM,e.CBCM,e.CNM,e.QSM,{cN:"string",v:[{b:'@"',e:'"',i:"\\n",c:[e.BE]},{b:"'",e:"[^\\\\]'",i:"[^\\\\][^']"}]},{cN:"preprocessor",b:"#",e:"$",c:[{cN:"title",v:[{b:'"',e:'"'},{b:"<",e:">"}]}]},{cN:"class",b:"("+n.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:n,l:o,c:[e.UTM]},{cN:"variable",b:"\\."+e.UIR,r:0}]}});
@@ -1,37 +0,0 @@
-$(document).ready(function() { - // Manage dates - $('.timeago').timeago(); - // Search - $("#h3rald-search-btn").click(function(){ - h3rald_search(); - }) - $("#h3rald-search-box").keydown(function(e){ - q = $("#h3rald-search-box").val(); - if (q.length == 1){ - $("#h3rald-search-results").addClass("hidden"); - $("#main").show(); - } - if (e.which == 13) { - e.preventDefault(); - h3rald_search(); - } - }) - var navHeight = $('.navbar-collapse').height(); - - $('.navbar-collapse').on('show.bs.collapse', function(){ - if($(this).height() != 0){ - navHeight = $(this).height(); - } - $('body').animate({ - 'padding-top': parseInt($("body").css("padding-top")) + navHeight - }, 300); - }); - - $('.navbar-collapse').on('hide.bs.collapse', function(){ - navHeight = $(this).height(); - $('body').animate({ - 'padding-top': parseInt($("body").css("padding-top")) - navHeight - }, 300); - }); -}); -
@@ -1,205 +0,0 @@
-/* - * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ - * - * Uses the built in easing capabilities added In jQuery 1.1 - * to offer multiple easing options - * - * TERMS OF USE - jQuery Easing - * - * Open source under the BSD License. - * - * Copyright © 2008 George McGinley Smith - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * Neither the name of the author nor the names of contributors may be used to endorse - * or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * -*/ - -// t: current time, b: begInnIng value, c: change In value, d: duration -jQuery.easing['jswing'] = jQuery.easing['swing']; - -jQuery.extend( jQuery.easing, -{ - def: 'easeOutQuad', - swing: function (x, t, b, c, d) { - //alert(jQuery.easing.default); - return jQuery.easing[jQuery.easing.def](x, t, b, c, d); - }, - easeInQuad: function (x, t, b, c, d) { - return c*(t/=d)*t + b; - }, - easeOutQuad: function (x, t, b, c, d) { - return -c *(t/=d)*(t-2) + b; - }, - easeInOutQuad: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t + b; - return -c/2 * ((--t)*(t-2) - 1) + b; - }, - easeInCubic: function (x, t, b, c, d) { - return c*(t/=d)*t*t + b; - }, - easeOutCubic: function (x, t, b, c, d) { - return c*((t=t/d-1)*t*t + 1) + b; - }, - easeInOutCubic: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t + b; - return c/2*((t-=2)*t*t + 2) + b; - }, - easeInQuart: function (x, t, b, c, d) { - return c*(t/=d)*t*t*t + b; - }, - easeOutQuart: function (x, t, b, c, d) { - return -c * ((t=t/d-1)*t*t*t - 1) + b; - }, - easeInOutQuart: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t*t + b; - return -c/2 * ((t-=2)*t*t*t - 2) + b; - }, - easeInQuint: function (x, t, b, c, d) { - return c*(t/=d)*t*t*t*t + b; - }, - easeOutQuint: function (x, t, b, c, d) { - return c*((t=t/d-1)*t*t*t*t + 1) + b; - }, - easeInOutQuint: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; - return c/2*((t-=2)*t*t*t*t + 2) + b; - }, - easeInSine: function (x, t, b, c, d) { - return -c * Math.cos(t/d * (Math.PI/2)) + c + b; - }, - easeOutSine: function (x, t, b, c, d) { - return c * Math.sin(t/d * (Math.PI/2)) + b; - }, - easeInOutSine: function (x, t, b, c, d) { - return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; - }, - easeInExpo: function (x, t, b, c, d) { - return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; - }, - easeOutExpo: function (x, t, b, c, d) { - return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; - }, - easeInOutExpo: function (x, t, b, c, d) { - if (t==0) return b; - if (t==d) return b+c; - if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; - return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; - }, - easeInCirc: function (x, t, b, c, d) { - return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; - }, - easeOutCirc: function (x, t, b, c, d) { - return c * Math.sqrt(1 - (t=t/d-1)*t) + b; - }, - easeInOutCirc: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; - return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; - }, - easeInElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; - }, - easeOutElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; - }, - easeInOutElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; - return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; - }, - easeInBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - return c*(t/=d)*t*((s+1)*t - s) + b; - }, - easeOutBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; - }, - easeInOutBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; - return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; - }, - easeInBounce: function (x, t, b, c, d) { - return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b; - }, - easeOutBounce: function (x, t, b, c, d) { - if ((t/=d) < (1/2.75)) { - return c*(7.5625*t*t) + b; - } else if (t < (2/2.75)) { - return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; - } else if (t < (2.5/2.75)) { - return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; - } else { - return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; - } - }, - easeInOutBounce: function (x, t, b, c, d) { - if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; - return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; - } -}); - -/* - * - * TERMS OF USE - EASING EQUATIONS - * - * Open source under the BSD License. - * - * Copyright © 2001 Robert Penner - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * Neither the name of the author nor the names of contributors may be used to endorse - * or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * - */
@@ -1,123 +0,0 @@
-/* - * timeago: a jQuery plugin, version: 0.7.2 (2009-07-30) - * @requires jQuery v1.2 or later - * - * Timeago is a jQuery plugin that makes it easy to support automatically - * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago"). - * - * For usage and examples, visit: - * http://timeago.yarp.com/ - * - * Licensed under the MIT: - * http://www.opensource.org/licenses/mit-license.php - * - * Copyright (c) 2008-2009, Ryan McGeary (ryanonjavascript -[at]- mcgeary [*dot*] org) - */ -(function($) { - $.timeago = function(timestamp) { - if (timestamp instanceof Date) return inWords(timestamp); - else if (typeof timestamp == "string") return inWords($.timeago.parse(timestamp)); - else return inWords($.timeago.parse($(timestamp).attr("title"))); - }; - var $t = $.timeago; - - $.extend($.timeago, { - settings: { - refreshMillis: 60000, - allowFuture: false, - strings: { - prefixAgo: null, - prefixFromNow: null, - suffixAgo: "ago", - suffixFromNow: "from now", - ago: null, // DEPRECATED, use suffixAgo - fromNow: null, // DEPRECATED, use suffixFromNow - seconds: "less than a minute", - minute: "about a minute", - minutes: "%d minutes", - hour: "about an hour", - hours: "about %d hours", - day: "a day", - days: "%d days", - month: "about a month", - months: "%d months", - year: "about a year", - years: "%d years" - } - }, - inWords: function(distanceMillis) { - var $l = this.settings.strings; - var prefix = $l.prefixAgo; - var suffix = $l.suffixAgo || $l.ago; - if (this.settings.allowFuture) { - if (distanceMillis < 0) { - prefix = $l.prefixFromNow; - suffix = $l.suffixFromNow || $l.fromNow; - } - distanceMillis = Math.abs(distanceMillis); - } - - var seconds = distanceMillis / 1000; - var minutes = seconds / 60; - var hours = minutes / 60; - var days = hours / 24; - var years = days / 365; - - var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) || - seconds < 90 && substitute($l.minute, 1) || - minutes < 45 && substitute($l.minutes, Math.round(minutes)) || - minutes < 90 && substitute($l.hour, 1) || - hours < 24 && substitute($l.hours, Math.round(hours)) || - hours < 48 && substitute($l.day, 1) || - days < 30 && substitute($l.days, Math.floor(days)) || - days < 60 && substitute($l.month, 1) || - days < 365 && substitute($l.months, Math.floor(days / 30)) || - years < 2 && substitute($l.year, 1) || - substitute($l.years, Math.floor(years)); - - return $.trim([prefix, words, suffix].join(" ")); - }, - parse: function(iso8601) { - var s = $.trim(iso8601); - s = s.replace(/-/,"/").replace(/-/,"/"); - s = s.replace(/T/," ").replace(/Z/," UTC"); - s = s.replace(/([\+-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400 - return new Date(s); - } - }); - - $.fn.timeago = function() { - var self = this; - self.each(refresh); - - var $s = $t.settings; - if ($s.refreshMillis > 0) { - setInterval(function() { self.each(refresh); }, $s.refreshMillis); - } - return self; - }; - - function refresh() { - var date = $t.parse(this.title); - if (!isNaN(date)) { - $(this).text(inWords(date)); - } - return this; - } - - function inWords(date) { - return $t.inWords(distance(date)); - } - - function distance(date) { - return (new Date().getTime() - date.getTime()); - } - - function substitute(stringOrFunction, value) { - var string = $.isFunction(stringOrFunction) ? stringOrFunction(value) : stringOrFunction; - return string.replace(/%d/i, value); - } - - // fix for IE6 suckage - document.createElement('abbr'); -})(jQuery);
@@ -1,4 +0,0 @@
-/*! jQuery v2.1.3 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=mb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=nb(b);function qb(){}qb.prototype=d.filters=d.pseudos,d.setFilters=new qb,g=gb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?gb.error(a):z(a,i).slice(0)};function rb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c) -},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),f.removeChild(c),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b)) -},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec=/#.*$/,fc=/([?&])_=[^&]*/,gc=/^(.*?):[ \t]*([^\r\n]*)$/gm,hc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ic=/^(?:GET|HEAD)$/,jc=/^\/\//,kc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,lc={},mc={},nc="*/".concat("*"),oc=a.location.href,pc=kc.exec(oc.toLowerCase())||[];function qc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function rc(a,b,c,d){var e={},f=a===mc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function sc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function tc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function uc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:oc,type:"GET",isLocal:hc.test(pc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":nc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?sc(sc(a,n.ajaxSettings),b):sc(n.ajaxSettings,a)},ajaxPrefilter:qc(lc),ajaxTransport:qc(mc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=gc.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||oc)+"").replace(ec,"").replace(jc,pc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=kc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===pc[1]&&h[2]===pc[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(pc[3]||("http:"===pc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),rc(lc,k,b,v),2===t)return v;i=n.event&&k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!ic.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=fc.test(d)?d.replace(fc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+nc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=rc(mc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=tc(k,v,f)),u=uc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var vc=/%20/g,wc=/\[\]$/,xc=/\r?\n/g,yc=/^(?:submit|button|image|reset|file)$/i,zc=/^(?:input|select|textarea|keygen)/i;function Ac(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||wc.test(a)?d(a,e):Ac(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Ac(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Ac(c,a[c],b,e);return d.join("&").replace(vc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&zc.test(this.nodeName)&&!yc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(xc,"\r\n")}}):{name:b.name,value:c.replace(xc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Bc=0,Cc={},Dc={0:200,1223:204},Ec=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Cc)Cc[a]()}),k.cors=!!Ec&&"withCredentials"in Ec,k.ajax=Ec=!!Ec,n.ajaxTransport(function(a){var b;return k.cors||Ec&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Bc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Cc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Dc[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Cc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Fc=[],Gc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Fc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Gc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Gc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Gc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Fc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Hc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Hc)return Hc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Ic=a.document.documentElement;function Jc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Jc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Ic;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Ic})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Jc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Kc=a.jQuery,Lc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Lc),b&&a.jQuery===n&&(a.jQuery=Kc),n},typeof b===U&&(a.jQuery=a.$=n),n});
@@ -1,20 +0,0 @@
-function h3rald_search(){ - var q = $("#h3rald-search-box"); - var rs = $("#h3rald-search-results"); - $.get("https://www.googleapis.com/customsearch/v1?key=AIzaSyD3AAPBIEBeujPRhfEAEp0rxm0_gBVm104&cx=003503231605187715852:_cygcrnuzrg&q="+q.val(), function( data ) { - rs.empty(); - var info = data.searchInformation; - $("main").hide(); - rs.removeClass("hidden"); - rs.append("<h2>Search results:</h2>"); - $.each(data.items, function(i, e){ - var res = $("<section class=\"search-result\"></section>"); - var rel_url = e.link.replace(/^https?:\/\/h3rald.com/, ''); - var link = function(title){ return "<a href=\""+rel_url+"\">"+title+"</a>"} - res.append("<h3>"+link(e.htmlTitle)+"</h3>"); - res.append("<p class=\"search-result-link\">"+link("h3rald.com"+rel_url)+"</p>"); - res.append("<p class=\"search-result-snippet\">"+e.htmlSnippet.replace("<br>", "")+"</p>"); - rs.append(res); - }); - }); -}
@@ -1,122 +0,0 @@
------ -permalink: litestore -filters_pre: -- erb -title_tag: LiteStore -type: project -github: litestore -links: -- "User Guide": /litestore/LiteStore_UserGuide.htm -- "Download": https://github.com/h3rald/litestore/releases/v1.1.1 -- "Source": https://github.com/h3rald/litestore -status: Active -version: 1.1.1 ------ - -<div class="jumbotron"> - <h2 class="centered"> - LiteStore<br> - <img src="/images/litestore/litestore.png" style="margin-left:-35px" /> - </h2> - <p class="donthyphenate">A lightweight, self-contained, RESTful, multi-format NoSQL document store server written in <a href="http://nim-lang.org">Nim</a> and powered by a <a href="http://www.sqlite.org">SQLite</a> backend for storage. It aims to be a very simple and lightweight backend ideal for prototyping and testing REST APIs and client-side, single-page applications. </p> -</div> - -<div class="row donthyphenate" style="text-align: center; margin: auto;"> - <div class="col-md-4" style="padding: 2em;"> - <div class="row"> - <i class="h3-os-apple fa-3x"></i> - <i class="h3-os-linux fa-3x"></i> - <i class="h3-os-win-04 fa-3x"></i> - </div> - <div class="row"> - <h3 class="centered">Cross Platform</h3> - <p>Download the precompiled LiteStore binaries for OS X, Linux, and Windows, or build directly from the source.</p> - </div> - </div> - <div class="col-md-4" style="padding: 2em;"> - <div class="row"> - <i class="fa fa-archive fa-3x"></i> - </div> - <div class="row"> - <h3 class="centered">Self-Contained</h3> - <p>LiteStore is a command-line application that doesn't need anything else but a single, small, executable file.</p> - </div> - </div> - <div class="col-md-4" style="padding: 2em;"> - <div class="row"> - <i class="fa fa-cogs fa-3x"></i> - </div> - <div class="row"> - <h3 class="centered">RESTFul</h3> - <p>LiteStore exposes a simple RESTful HTTP APIs, perfect for prototyping SPAs.</p> - </div> - </div> -</div> - -<div class="row"> - <div class="col-md-6"> - <div class="panel panel-default"> - <div class="panel-heading">Usage & Syntax</div> - <div class="panel-body"> - <p>Run LiteStore from the command line like this:</p> - <p><code><strong>litestore</strong> -s:<em>MyDataStore.db</em></code></p> - </div> - </div> - </div> - <div class="col-md-6"> - <div class="panel panel-default"> - <div class="panel-heading">Documentation</div> - <div class="panel-body"> - <p>View/download the <strong><a href="/litestore/LiteStore_UserGuide.htm">LiteStore User Guide</a></strong></p> - <p>(generated with <a href="/hastyscribe/">HastyScribe</a>)</p> - </div> - </div> - </div> -</div> - -<div class="row" style="margin:auto; text-align:center;"> -<div class="btn-group"> - <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown"> - <span class="fa fa-download"></span> Download <span class="caret"></span> - </button> - <ul class="dropdown-menu" role="menu" style="text-align: left;"> - <li> - <a href="https://github.com/h3rald/litestore/releases/download/v1.1.1/litestore_v1.1.1_macosx_x64.zip"> - <i class="h3-os-apple"></i> LiteStore for OS X (x64) - </a> - </li> - <li> - <a href="https://github.com/h3rald/litestore/releases/download/v1.1.1/litestore_v1.1.1_linux_x64.zip"> - <i class="h3-os-linux"></i> LiteStore for Linux (x64) - </a> - </li> - <li> - <a href="https://github.com/h3rald/litestore/releases/download/v1.1.1/litestore_v1.1.1_linux_x86.zip"> - <i class="h3-os-linux"></i> LiteStore for Linux (x86) - </a> - </li> - <li> - <a href="https://github.com/h3rald/litestore/releases/download/v1.1.1/litestore_v1.1.1_linux_arm.zip"> - <i class="h3-os-linux"></i> LiteStore for Linux (ARM) - </a> - </li> - <li> - <a href="https://github.com/h3rald/litestore/releases/download/v1.1.1/litestore_v1.1.1_windows_x64.zip"> - <i class="h3-os-win-04"></i> LiteStore for Windows (x64) - </a> - </li> - <li> - <a href="https://github.com/h3rald/litestore/releases/download/v1.1.1/litestore_v1.1.1_windows_x86.zip"> - <i class="h3-os-win-04"></i> LiteStore for Windows (x86) - </a> - </li> - </ul> -</div> - <a href="https://github.com/h3rald/litestore" - class="btn btn-success" style="margin:20px;"> - <i class="fa fa-github"></i> View on Github</a> -</div> - -<div class="row" style="margin:auto; text-align: center;"> - — <em>LiteStore</em> is open source software, licensed under the terms of the <a href="http://opensource.org/licenses/MIT">MIT License.</a> — -</div>
@@ -1,40 +0,0 @@
------ -permalink: projects -title: Projects -type: page ------ -<div class="projects-page"> - -h3. "H3RALD Web Site":/h3rald/ - -This very web site, in its 8th incarnation. H3RALD.com has been operative since 2004 and through the years its backend changed from being pure vanilla HTML, to server-side PHP (Prado and CakePHP) to Ruby (Rails, Nanoc). - -h3. "HastyScribe":/hastyscribe/ - -A self-contained Markdown compiler that can generate self-contained HTML files, useful for writing essays, reports, meeting notes, etc. - -h3. "LiteStore":/litestore/ - -A lightweight, self-contained, RESTful, multi-format NoSQL document store server written in Nim and powered by a SQLite backend for storage. - -h3. "Glyph":/glyph/ - -A _Rapid Document Authoring Framework_ written in Ruby that can be used to create and manage books and articles. - -h3. "Ruby Compendium":/ruby-compendium/ - -A free book aiming to help beginners learn about Ruby. It doesn't focus on learning the language, but rather on its vast ecosystem and freely available resources. - -h3. "RawLine":/rawline/ - -Rawline is a Ruby library which provides a subset of the functionality of the C Readline library. Being implemented in pure Ruby, it gives Ruby developers much more control over key bindings and word completion. - -h3. "Concatenative":/concatenative/ - -A Ruby DSL for concatenative programming. Although quite slow if compared to other concatenative languages like Factor, it implements all the most common concatenative combinator and makes it possible to use Ruby objects in a concatenative way. - -h3. "Herald Vim Color Scheme":/herald-vim-color-scheme/ - -A dark, easy-to-read color scheme for the Vim text editor. It can be used with 255, 16 or 8 colors. - -</div>
@@ -1,89 +0,0 @@
------ -permalink: rawline -filters_pre: -- erb -- redcloth -title: "RawLine" -subtitle: A pure-ruby alternative to ReadLine -type: project -github: rawline -links: -- "Documentation": http://rawline.rubyforge.org -- "Download": http://rubyforge.org/projects/rawline -- "Source": http://github.com/h3rald/rawline/tree/master -- "Tracking": http://h3rald.lighthouseapp.com/projects/26374-rawline/overview -status: On Hold -version: 0.3.2 ------ - -<%= render 'project_data', :tag => 'rawline' %> - -RawLine is a 100% Ruby alternative to the ReadLine library, providing some of its most popular features such as: -* Basic line editing operations -* Word completion -* History Management -* Custom key/key sequences bindings - -h3. Installation - -The simplest method to install RawLine is to install the gem: - -<% highlight :text do %>gem install rawline<% end %> - -h3. Usage - - -Editor initialization: - -<% highlight :ruby do %> -require 'rawline' -editor = RawLine::Editor.new -<% end %> - -Key binding: - -<% highlight :ruby do %> -editor.bind(:ctrl_z) { editor.undo } -editor.bind(:up_arrow) { editor.history_back } -editor.bind(:ctrl_x) { puts "Exiting..."; exit } -<% end %> - -Setup word completion - -<% highlight :ruby do %> -editor.completion_proc = lambda do |word| - if word - ['select', 'update', 'delete', 'debug', 'destroy'].find_all { |e| e.match(/^#{Regexp.escape(word)}/) } - end -end - -editor.completion_append_string = " " -<% end %> - -Read input: - -<% highlight :ruby do %>editor.read("=> ", true)<% end %> - -h3. Replacing Readline - -Simply include the RawLine (or Rawline) module: - -<% highlight :ruby do %>include Rawline<% end %> - -…and you’ll get: - -<% highlight :ruby do %> -readline(prompt, add_history) # RawLine::Editor#read(prompt, add_history) -HISTORY # RawLine::Editor#history -FILENAME_COMPLETION_PROC # Rawline::Editor#filename_completion_proc -# ... -<% end %> - -but also: - -<% highlight :ruby do %>Rawline.editor # RawLine::Editor<% end %> - -...which opens a world of endless possibilities! ;-) - -<%= render 'project_updates', :tag => 'rawline' %> -
@@ -1,6 +0,0 @@
---- -permalink: 'rss' -type: 'feed' -title: 'H3RALD - Articles (RSS Feed)' ---- -<%= rss_feed %>
@@ -1,21 +1,14 @@
------ -permalink: ruby-compendium -filters_pre: -- erb +----- title: "Ruby Compendium" +content-type: project subtitle: "An Essential Guide to the Ruby Ecosystem" -type: project github: ruby-compendium -links: -- "Download": https://github.com/h3rald/ruby-compendium/downloads -- "Read Online": /ruby-compendium/book -- "Source": https://github.com/h3rald/ruby-compendium -- "Tracking": http://github.com/h3rald/ruby-compendium/issues -status: On Hold +inactive: true +home: /ruby-compendium/ +docs: /ruby-compendium/book/ +summary: "A free book aiming to help beginners learn about Ruby. It doesn’t focus on learning the language, but rather on its vast ecosystem and freely available resources." version: 0.2.0 ----- - -<%= render 'project_data', :tag => 'ruby-compendium' %> <p>This book was written by Fabio Cevasco and it is licensed under a <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0 Unported License</a>.</p> <p>This book was authored using <a href="http://www.h3rald.com/glyph">Glyph</a> and the <span class="caps">PDF</span> version was produced with <a href="http://www.princexml.org">Prince <span class="caps">XML</span></a>.</p>@@ -26,4 +19,12 @@ <li><a href="http://blog.dio.jp/">Akira Matsuda</a></li>
<li><a href="http://www.bitcetera.com/">Sven Schwyn</a></li> </ul> -<%= render 'project_updates', :tag => 'ruby-compendium' %> + +<h3>Latest Updates</h3> + +<ul><li><a href="/articles/ruby-compendium-020/">Ruby Compendium v0.2.0 released</a></li> + <li><a href="/articles/introducing-ruby-compendium/">Introducing the Ruby Compendium</a></li> +</ul> + + +
@@ -1,7 +1,6 @@
----- -permalink: books -title: Ruby Compendium – Books -type: page +title: "Ruby Compendium – Books" +content-type: page ----- <nav class="navigation"><a href="/ruby-compendium/book/web-sites.html">← Web Sites</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/podcasts.html">Podcasts and Screencasts →</a></nav>@@ -28,4 +27,4 @@ <li><a href="http://pragprog.com/categories/ruby_and_rails">Ruby books by Pragmatic Programmers</a></li>
</ul> </aside> -<nav class="navigation"><a href="/ruby-compendium/book/web-sites.html">← Web Sites</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/podcasts.html">Podcasts and Screencasts →</a></nav>+<nav class="navigation"><a href="/ruby-compendium/book/web-sites.html">← Web Sites</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/podcasts.html">Podcasts and Screencasts →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: core-stdlib -title: Ruby Compendium – The Core and the Standard Library -type: page +title: "Ruby Compendium – The Core and the Standard Library" +content-type: page ----- <nav class="navigation"><a href="/ruby-compendium/book/syntax.html">← Syntax</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/features.html">Advanced Language Features →</a></nav> <p>By default, Ruby always loads its core classes and modules when a script is executed. This means that in all Ruby programs you can always instantiate core objects like:</p>@@ -29,4 +28,4 @@ </ul>
<p>Overwhelmed? Don’t know where to start? Familiarize yourself with the <a href="http://www.ruby-doc.org/core/classes/Enumerable.html">Enumerable</a> module; you won’t regret it!</p> </aside> -<nav class="navigation"><a href="/ruby-compendium/book/syntax.html">← Syntax</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/features.html">Advanced Language Features →</a></nav>+<nav class="navigation"><a href="/ruby-compendium/book/syntax.html">← Syntax</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/features.html">Advanced Language Features →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: features -title: Ruby Compendium – Advanced Language Features -type: page +title: "Ruby Compendium – Advanced Language Features" +content-type: page ----- <nav class="navigation"><a href="/ruby-compendium/book/core-stdlib.html">← The Core and the Standard Library</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/gems.html">Ruby Gems →</a></nav> <p>One of the best things about Ruby is that you’re not stuck with a single programming paradigm. Even though everything in Ruby is an object (thereby making it a fully object-oriented language), nothing forbids you to program procedurally, or even use typical functional constructs.</p>@@ -29,4 +28,4 @@
</aside> -<nav class="navigation"><a href="/ruby-compendium/book/core-stdlib.html">← The Core and the Standard Library</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/gems.html">Ruby Gems →</a></nav>+<nav class="navigation"><a href="/ruby-compendium/book/core-stdlib.html">← The Core and the Standard Library</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/gems.html">Ruby Gems →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_9 -title: Ruby Compendium – What you can use for... -type: page +title: "Ruby Compendium – What you can use for..." +content-type: page ----- <nav class="navigation"><a href="/ruby-compendium/book/gems.html">← Ruby Gems</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/resources.html">Resources →</a></nav> <p>You could spend hours on the RubyGems web site to find what you’re looking for sometimes. Not because you can’t find it, but because often there are too many alternative libraries that overlap in terms of functionalities offered.</p>@@ -350,4 +349,4 @@ <li>Documentation: <a href="http://www.rubydoc.info/gems/xml-simple">http://www.rubydoc.info/gems/xml-simple</a></li>
</ul> </section> -<nav class="navigation"><a href="/ruby-compendium/book/gems.html">← Ruby Gems</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/resources.html">Resources →</a></nav>+<nav class="navigation"><a href="/ruby-compendium/book/gems.html">← Ruby Gems</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/resources.html">Resources →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: gems -title: Ruby Compendium – Ruby Gems -type: page +title: "Ruby Compendium – Ruby Gems" +content-type: page ----- <nav class="navigation"><a href="/ruby-compendium/book/features.html">← Advanced Language Features</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/gem-tips.html">What you can use for... →</a></nav> <p>Sure, the <a href="/ruby-compendium/book/core-stdlib.html#core-stdlib">Standard Library</a> is quite large but… no, it does not have everything you need. Luckily, it’s full of gems out there! Rubygems is Ruby’s packaging system, and the best way to distribute your own libraries and applications.</p>@@ -18,4 +17,4 @@ <div class="box-title">What happened to RubyForge?</div>
<p>If you started to learn Ruby a few years ago, the <a href="http://www.rubyforge.org">RubyForge</a> was <em>the</em> place to find user-created ruby code and gems. The site is still there, but nowadays Rubyists prefer using <a href="http://www.github.com">GitHub</a> as host for their source code repositories and RubyGems.org as the home for their gems.</p> </aside> -<nav class="navigation"><a href="/ruby-compendium/book/features.html">← Advanced Language Features</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/gem-tips.html">What you can use for... →</a></nav>+<nav class="navigation"><a href="/ruby-compendium/book/features.html">← Advanced Language Features</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/gem-tips.html">What you can use for... →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: implementations -title: Ruby Compendium – Versions and Implementations -type: page +title: "Ruby Compendium – Versions and Implementations" +content-type: page ----- <nav class="navigation"><a href="/ruby-compendium/book/ten-good-things.html">← 10 Good Things about Ruby</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/syntax.html">Syntax →</a></nav> <p>One thing that may appear unusual and even discouraging to newcomers is the different versions and implementations of the language. Ruby has two version branches:</p>@@ -81,4 +80,4 @@ <div class="box-title">Try'em All!</div>
<p>Don’t know which Ruby to choose? You don’t have to! <a href="/ruby-compendium/book/rubyists.html#wayneeseguin"></a> created <a href="https://rvm.beginrescueend.com/">Ruby Version Manager</a> (<span class="caps">RVM</span>) to allow you to install, upgrade and manage several Ruby installation seamlessly on the same computer. If you’re on OS X or Linux, that is. If you’re on a Windows computer, <a href="https://github.com/vertiginous/pik">Pik</a> provides something similar.</p> </aside> -<nav class="navigation"><a href="/ruby-compendium/book/ten-good-things.html">← 10 Good Things about Ruby</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/syntax.html">Syntax →</a></nav>+<nav class="navigation"><a href="/ruby-compendium/book/ten-good-things.html">← 10 Good Things about Ruby</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/syntax.html">Syntax →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: index -title: Ruby Compendium -type: page +title: "Ruby Compendium" +content-type: page ----- <nav class="contents"> <h1 class="toc-header" id="toc">Table of Contents</h1>@@ -12,4 +11,4 @@ <li class="bodymatter chapter"><a href="/ruby-compendium/book/gems.html#gems">Ruby Gems</a></li><li><ol><li class="bodymatter section"><a href="/ruby-compendium/book/gem-tips.html#h_17">What you can use for...</a></li></ol></li>
<li class="bodymatter chapter"><a href="/ruby-compendium/book/resources.html#resources">Resources</a></li><li><ol><li class="bodymatter section"><a href="/ruby-compendium/book/web-sites.html#websites">Web Sites</a></li><li class="bodymatter section"><a href="/ruby-compendium/book/books.html#books">Books</a></li><li class="bodymatter section"><a href="/ruby-compendium/book/podcasts.html#podcasts">Podcasts and Screencasts</a></li></ol></li> <li class="backmatter appendix"><a href="/ruby-compendium/book/rubyists.html#h_32">Notable Rubyists</a></li> </ol> -</nav>+</nav>
@@ -1,7 +1,6 @@
----- -permalink: t_0 -title: Ruby Compendium – So you want to learn Ruby... -type: page +title: "Ruby Compendium – So you want to learn Ruby..." +content-type: page ----- <nav class="navigation"> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/notes.html">About this Book →</a></nav> <p>…or maybe not. Maybe you’re <em>thinking</em> about it, but you’re not entirely convinced it’s a good idea. Maybe you have an annoying co-worker who constantly raves about it and made you curious. Whatever the case, this tiny book is about telling you all you need to know about the language before you actually start getting your hands dirty.</p>@@ -9,4 +8,4 @@ <p>There are many different ways to learn new programming languages. Typically, you’d start reading tutorials online, try a few example programs, maybe buy a book and start reading it. That’s what most people do nowadays, and it works, in the end. The downside of this is that you may spend weeks or even months trying to get the hang of the language, spend a lot of time trying to find information about it, ask dumb questions in forums and mailing lists, re-invent the wheel only to find out —months later— that someone already made a library which does exactly the same thing as yours, but in a much better way.</p>
<p>You can learn through mistakes, but there’s no harm in starting with the right foot.</p> <p>This <em>Ruby Compendium</em> gives you an overview of the Ruby Ecosystem from 10,000ft. It briefly describes the language, its libraries, and what resources you can find online. By the time you finish reading this, you will <em>not</em> know how to write Ruby programs (yet) but you’ll definitely know <em>how to learn</em> this amazing and powerful language and where to look for information and help.</p> <p>Close your editor now, relax, and enjoy!</p> -<nav class="navigation"> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/notes.html">About this Book →</a></nav>+<nav class="navigation"> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/notes.html">About this Book →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_2 -title: Ruby Compendium – Quick Tour -type: page +title: "Ruby Compendium – Quick Tour" +content-type: page ----- <nav class="navigation"><a href="/ruby-compendium/book/notes.html">← About this Book</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/ten-good-things.html">10 Good Things about Ruby →</a></nav> <p>Ruby is a relatively new programming language. It was created by <a href="/ruby-compendium/book/rubyists.html#matz">Yukihiro Matzumoto</a> (aka “Matz”) in 1995, but it took another ten years to become popular outside Japan, thanks to the <em>Ruby on Rails</em> web framework.</p>@@ -14,4 +13,4 @@ <li>If you are interested in benchmarks between Ruby implementations and other languages, the <a href="http://shootout.alioth.debian.org/">Computer Language Benchmark Game</a> is a good place to start.</li>
</ul> </aside> -<nav class="navigation"><a href="/ruby-compendium/book/notes.html">← About this Book</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/ten-good-things.html">10 Good Things about Ruby →</a></nav>+<nav class="navigation"><a href="/ruby-compendium/book/notes.html">← About this Book</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/ten-good-things.html">10 Good Things about Ruby →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_1 -title: Ruby Compendium – About this Book -type: page +title: "Ruby Compendium – About this Book" +content-type: page ----- <nav class="navigation"><a href="/ruby-compendium/book/intro.html">← So you want to learn Ruby...</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/language.html">Quick Tour →</a></nav> <p>This book was written by Fabio Cevasco and it is licensed under a <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0 Unported License</a>.</p>@@ -12,4 +11,4 @@ <ul>
<li><a href="http://blog.dio.jp/">Akira Matsuda</a></li> <li><a href="http://www.bitcetera.com/">Sven Schwyn</a></li> </ul> -<nav class="navigation"><a href="/ruby-compendium/book/intro.html">← So you want to learn Ruby...</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/language.html">Quick Tour →</a></nav>+<nav class="navigation"><a href="/ruby-compendium/book/intro.html">← So you want to learn Ruby...</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/language.html">Quick Tour →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: podcasts -title: Ruby Compendium – Podcasts and Screencasts -type: page +title: "Ruby Compendium – Podcasts and Screencasts" +content-type: page ----- <nav class="navigation"><a href="/ruby-compendium/book/books.html">← Books</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/rubyists.html">Notable Rubyists →</a></nav>@@ -16,4 +15,4 @@
<p><strong><a href="http://www.rubypulse.com/">Ruby Pulse</a></strong> – Free Ruby-related podcasts.</p> <p><strong><a href="http://ruby-kickstart.com/">Ruby Kickstart</a></strong> – Hours of free screencast to teach you how to program in Ruby, with loads of free material, quizzes, and goodies.</p> -<nav class="navigation"><a href="/ruby-compendium/book/books.html">← Books</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/rubyists.html">Notable Rubyists →</a></nav>+<nav class="navigation"><a href="/ruby-compendium/book/books.html">← Books</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/rubyists.html">Notable Rubyists →</a></nav>
@@ -1,10 +1,9 @@
----- -permalink: resources -title: Ruby Compendium – Resources -type: page +title: "Ruby Compendium – Resources" +content-type: page ----- <nav class="navigation"><a href="/ruby-compendium/book/gem-tips.html">← What you can use for...</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/web-sites.html">Web Sites →</a></nav> <p>There are a lot of resources out there to help you get started or stay up-to-date with Ruby. The Ruby community is active and supportive, as long as you ask nicely.</p> <p>The following section contains a small set of hand-picked web sites, books and podcasts which you should definitely have a look at. For even more community resources, check out the <a href="http://www.ruby-lang.org/en/community/">Community Page</a> on the Official Ruby Web Site.</p> -<nav class="navigation"><a href="/ruby-compendium/book/gem-tips.html">← What you can use for...</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/web-sites.html">Web Sites →</a></nav>+<nav class="navigation"><a href="/ruby-compendium/book/gem-tips.html">← What you can use for...</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/web-sites.html">Web Sites →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: t_14 -title: Ruby Compendium – Notable Rubyists -type: page +title: "Ruby Compendium – Notable Rubyists" +content-type: page ----- <nav class="navigation"><a href="/ruby-compendium/book/podcasts.html">← Podcasts and Screencasts</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | </nav>@@ -269,4 +268,4 @@ Maintainer of Hackety Hack, creator of rstat.us.
</div> </section> -<nav class="navigation"><a href="/ruby-compendium/book/podcasts.html">← Podcasts and Screencasts</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | </nav>+<nav class="navigation"><a href="/ruby-compendium/book/podcasts.html">← Podcasts and Screencasts</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | </nav>
@@ -1,7 +1,6 @@
----- -permalink: syntax -title: Ruby Compendium – Syntax -type: page +title: "Ruby Compendium – Syntax" +content-type: page ----- <nav class="navigation"><a href="/ruby-compendium/book/implementations.html">← Versions and Implementations</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/core-stdlib.html">The Core and the Standard Library →</a></nav> <p>@@ -77,4 +76,4 @@ <div class="box-title">Trying out Ruby...</div>
If your hands are itching to try writing Ruby code, but you don't want to install it just yet, head over to <a href="http://tryruby.org/">Try Ruby!</a>, a unique way to try the language right in your browser. Or, if you already installed Ruby, follow the <a href="http://www.ruby-lang.org/en/documentation/quickstart/">Ruby in 20 minutes</a> tutorial, using Interactive RuBy (IRB). </aside> -<nav class="navigation"><a href="/ruby-compendium/book/implementations.html">← Versions and Implementations</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/core-stdlib.html">The Core and the Standard Library →</a></nav>+<nav class="navigation"><a href="/ruby-compendium/book/implementations.html">← Versions and Implementations</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/core-stdlib.html">The Core and the Standard Library →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: ten-good-things -title: Ruby Compendium – 10 Good Things about Ruby -type: page +title: "Ruby Compendium – 10 Good Things about Ruby" +content-type: page ----- <nav class="navigation"><a href="/ruby-compendium/book/language.html">← Quick Tour</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/implementations.html">Versions and Implementations →</a></nav> <ol>@@ -21,4 +20,4 @@ <div class="box-title">If you want to know more...</div>
For general information on Ruby and more introductory material, head over to the <a href="http://www.ruby-lang.org/">Official Ruby Web Site</a>, in particular to the <a href="http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/">Ruby from Other Languages</a> articles, if you are already familiar with C, C++, Java, PHP, Perl, or Python. </aside> -<nav class="navigation"><a href="/ruby-compendium/book/language.html">← Quick Tour</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/implementations.html">Versions and Implementations →</a></nav>+<nav class="navigation"><a href="/ruby-compendium/book/language.html">← Quick Tour</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/implementations.html">Versions and Implementations →</a></nav>
@@ -1,7 +1,6 @@
----- -permalink: websites -title: Ruby Compendium – Web Sites -type: page +title: "Ruby Compendium – Web Sites" +content-type: page ----- <nav class="navigation"><a href="/ruby-compendium/book/resources.html">← Resources</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/books.html">Books →</a></nav>@@ -29,4 +28,4 @@ <p><strong><a href="http://rubycommitters.org/">RubyCommitters.org</a></strong> – List of all the Ruby core committers. Created by <a href="/ruby-compendium/book/rubyists.html#tenderlove">Aaron Petterson</a>.</p>
<p><strong><a href="http://rubylang.info/">RubyLang.info</a></strong> – <em>“RubyLang.info is a community driven web site, dedicated to helping both new and experienced Ruby developers.”</em></p> -<nav class="navigation"><a href="/ruby-compendium/book/resources.html">← Resources</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/books.html">Books →</a></nav>+<nav class="navigation"><a href="/ruby-compendium/book/resources.html">← Resources</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/books.html">Books →</a></nav>
@@ -1,6582 +0,0 @@
-/*! - * Bootstrap v3.3.4 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -/*! - * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=2b3bdc340744aeea5a18) - * Config saved to config.json and https://gist.github.com/2b3bdc340744aeea5a18 - */ -/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ -html { - font-family: sans-serif; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; -} -body { - margin: 0; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} -audio, -canvas, -progress, -video { - display: inline-block; - vertical-align: baseline; -} -audio:not([controls]) { - display: none; - height: 0; -} -[hidden], -template { - display: none; -} -a { - background-color: transparent; -} -a:active, -a:hover { - outline: 0; -} -abbr[title] { - border-bottom: 1px dotted; -} -b, -strong { - font-weight: bold; -} -dfn { - font-style: italic; -} -h1 { - font-size: 2em; - margin: 0.67em 0; -} -mark { - background: #ff0; - color: #000; -} -small { - font-size: 80%; -} -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - border: 0; -} -svg:not(:root) { - overflow: hidden; -} -figure { - margin: 1em 40px; -} -hr { - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; - box-sizing: content-box; - height: 0; -} -pre { - overflow: auto; -} -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} -button, -input, -optgroup, -select, -textarea { - color: inherit; - font: inherit; - margin: 0; -} -button { - overflow: visible; -} -button, -select { - text-transform: none; -} -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} -button[disabled], -html input[disabled] { - cursor: default; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} -input { - line-height: normal; -} -input[type="checkbox"], -input[type="radio"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0; -} -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} -input[type="search"] { - -webkit-appearance: textfield; - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; - box-sizing: content-box; -} -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} -legend { - border: 0; - padding: 0; -} -textarea { - overflow: auto; -} -optgroup { - font-weight: bold; -} -table { - border-collapse: collapse; - border-spacing: 0; -} -td, -th { - padding: 0; -} -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@media print { - *, - *:before, - *:after { - background: transparent !important; - color: #000 !important; - -webkit-box-shadow: none !important; - box-shadow: none !important; - text-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - a[href^="#"]:after, - a[href^="javascript:"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - select { - background: #fff !important; - } - .navbar { - display: none; - } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; - } - .label { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table td, - .table th { - background-color: #fff !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; - } -} -@font-face { - font-family: 'Glyphicons Halflings'; - src: url('../fonts/glyphicons-halflings-regular.eot'); - src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); -} -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - font-style: normal; - font-weight: normal; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.glyphicon-asterisk:before { - content: "\2a"; -} -.glyphicon-plus:before { - content: "\2b"; -} -.glyphicon-euro:before, -.glyphicon-eur:before { - content: "\20ac"; -} -.glyphicon-minus:before { - content: "\2212"; -} -.glyphicon-cloud:before { - content: "\2601"; -} -.glyphicon-envelope:before { - content: "\2709"; -} -.glyphicon-pencil:before { - content: "\270f"; -} -.glyphicon-glass:before { - content: "\e001"; -} -.glyphicon-music:before { - content: "\e002"; -} -.glyphicon-search:before { - content: "\e003"; -} -.glyphicon-heart:before { - content: "\e005"; -} -.glyphicon-star:before { - content: "\e006"; -} -.glyphicon-star-empty:before { - content: "\e007"; -} -.glyphicon-user:before { - content: "\e008"; -} -.glyphicon-film:before { - content: "\e009"; -} -.glyphicon-th-large:before { - content: "\e010"; -} -.glyphicon-th:before { - content: "\e011"; -} -.glyphicon-th-list:before { - content: "\e012"; -} -.glyphicon-ok:before { - content: "\e013"; -} -.glyphicon-remove:before { - content: "\e014"; -} -.glyphicon-zoom-in:before { - content: "\e015"; -} -.glyphicon-zoom-out:before { - content: "\e016"; -} -.glyphicon-off:before { - content: "\e017"; -} -.glyphicon-signal:before { - content: "\e018"; -} -.glyphicon-cog:before { - content: "\e019"; -} -.glyphicon-trash:before { - content: "\e020"; -} -.glyphicon-home:before { - content: "\e021"; -} -.glyphicon-file:before { - content: "\e022"; -} -.glyphicon-time:before { - content: "\e023"; -} -.glyphicon-road:before { - content: "\e024"; -} -.glyphicon-download-alt:before { - content: "\e025"; -} -.glyphicon-download:before { - content: "\e026"; -} -.glyphicon-upload:before { - content: "\e027"; -} -.glyphicon-inbox:before { - content: "\e028"; -} -.glyphicon-play-circle:before { - content: "\e029"; -} -.glyphicon-repeat:before { - content: "\e030"; -} -.glyphicon-refresh:before { - content: "\e031"; -} -.glyphicon-list-alt:before { - content: "\e032"; -} -.glyphicon-lock:before { - content: "\e033"; -} -.glyphicon-flag:before { - content: "\e034"; -} -.glyphicon-headphones:before { - content: "\e035"; -} -.glyphicon-volume-off:before { - content: "\e036"; -} -.glyphicon-volume-down:before { - content: "\e037"; -} -.glyphicon-volume-up:before { - content: "\e038"; -} -.glyphicon-qrcode:before { - content: "\e039"; -} -.glyphicon-barcode:before { - content: "\e040"; -} -.glyphicon-tag:before { - content: "\e041"; -} -.glyphicon-tags:before { - content: "\e042"; -} -.glyphicon-book:before { - content: "\e043"; -} -.glyphicon-bookmark:before { - content: "\e044"; -} -.glyphicon-print:before { - content: "\e045"; -} -.glyphicon-camera:before { - content: "\e046"; -} -.glyphicon-font:before { - content: "\e047"; -} -.glyphicon-bold:before { - content: "\e048"; -} -.glyphicon-italic:before { - content: "\e049"; -} -.glyphicon-text-height:before { - content: "\e050"; -} -.glyphicon-text-width:before { - content: "\e051"; -} -.glyphicon-align-left:before { - content: "\e052"; -} -.glyphicon-align-center:before { - content: "\e053"; -} -.glyphicon-align-right:before { - content: "\e054"; -} -.glyphicon-align-justify:before { - content: "\e055"; -} -.glyphicon-list:before { - content: "\e056"; -} -.glyphicon-indent-left:before { - content: "\e057"; -} -.glyphicon-indent-right:before { - content: "\e058"; -} -.glyphicon-facetime-video:before { - content: "\e059"; -} -.glyphicon-picture:before { - content: "\e060"; -} -.glyphicon-map-marker:before { - content: "\e062"; -} -.glyphicon-adjust:before { - content: "\e063"; -} -.glyphicon-tint:before { - content: "\e064"; -} -.glyphicon-edit:before { - content: "\e065"; -} -.glyphicon-share:before { - content: "\e066"; -} -.glyphicon-check:before { - content: "\e067"; -} -.glyphicon-move:before { - content: "\e068"; -} -.glyphicon-step-backward:before { - content: "\e069"; -} -.glyphicon-fast-backward:before { - content: "\e070"; -} -.glyphicon-backward:before { - content: "\e071"; -} -.glyphicon-play:before { - content: "\e072"; -} -.glyphicon-pause:before { - content: "\e073"; -} -.glyphicon-stop:before { - content: "\e074"; -} -.glyphicon-forward:before { - content: "\e075"; -} -.glyphicon-fast-forward:before { - content: "\e076"; -} -.glyphicon-step-forward:before { - content: "\e077"; -} -.glyphicon-eject:before { - content: "\e078"; -} -.glyphicon-chevron-left:before { - content: "\e079"; -} -.glyphicon-chevron-right:before { - content: "\e080"; -} -.glyphicon-plus-sign:before { - content: "\e081"; -} -.glyphicon-minus-sign:before { - content: "\e082"; -} -.glyphicon-remove-sign:before { - content: "\e083"; -} -.glyphicon-ok-sign:before { - content: "\e084"; -} -.glyphicon-question-sign:before { - content: "\e085"; -} -.glyphicon-info-sign:before { - content: "\e086"; -} -.glyphicon-screenshot:before { - content: "\e087"; -} -.glyphicon-remove-circle:before { - content: "\e088"; -} -.glyphicon-ok-circle:before { - content: "\e089"; -} -.glyphicon-ban-circle:before { - content: "\e090"; -} -.glyphicon-arrow-left:before { - content: "\e091"; -} -.glyphicon-arrow-right:before { - content: "\e092"; -} -.glyphicon-arrow-up:before { - content: "\e093"; -} -.glyphicon-arrow-down:before { - content: "\e094"; -} -.glyphicon-share-alt:before { - content: "\e095"; -} -.glyphicon-resize-full:before { - content: "\e096"; -} -.glyphicon-resize-small:before { - content: "\e097"; -} -.glyphicon-exclamation-sign:before { - content: "\e101"; -} -.glyphicon-gift:before { - content: "\e102"; -} -.glyphicon-leaf:before { - content: "\e103"; -} -.glyphicon-fire:before { - content: "\e104"; -} -.glyphicon-eye-open:before { - content: "\e105"; -} -.glyphicon-eye-close:before { - content: "\e106"; -} -.glyphicon-warning-sign:before { - content: "\e107"; -} -.glyphicon-plane:before { - content: "\e108"; -} -.glyphicon-calendar:before { - content: "\e109"; -} -.glyphicon-random:before { - content: "\e110"; -} -.glyphicon-comment:before { - content: "\e111"; -} -.glyphicon-magnet:before { - content: "\e112"; -} -.glyphicon-chevron-up:before { - content: "\e113"; -} -.glyphicon-chevron-down:before { - content: "\e114"; -} -.glyphicon-retweet:before { - content: "\e115"; -} -.glyphicon-shopping-cart:before { - content: "\e116"; -} -.glyphicon-folder-close:before { - content: "\e117"; -} -.glyphicon-folder-open:before { - content: "\e118"; -} -.glyphicon-resize-vertical:before { - content: "\e119"; -} -.glyphicon-resize-horizontal:before { - content: "\e120"; -} -.glyphicon-hdd:before { - content: "\e121"; -} -.glyphicon-bullhorn:before { - content: "\e122"; -} -.glyphicon-bell:before { - content: "\e123"; -} -.glyphicon-certificate:before { - content: "\e124"; -} -.glyphicon-thumbs-up:before { - content: "\e125"; -} -.glyphicon-thumbs-down:before { - content: "\e126"; -} -.glyphicon-hand-right:before { - content: "\e127"; -} -.glyphicon-hand-left:before { - content: "\e128"; -} -.glyphicon-hand-up:before { - content: "\e129"; -} -.glyphicon-hand-down:before { - content: "\e130"; -} -.glyphicon-circle-arrow-right:before { - content: "\e131"; -} -.glyphicon-circle-arrow-left:before { - content: "\e132"; -} -.glyphicon-circle-arrow-up:before { - content: "\e133"; -} -.glyphicon-circle-arrow-down:before { - content: "\e134"; -} -.glyphicon-globe:before { - content: "\e135"; -} -.glyphicon-wrench:before { - content: "\e136"; -} -.glyphicon-tasks:before { - content: "\e137"; -} -.glyphicon-filter:before { - content: "\e138"; -} -.glyphicon-briefcase:before { - content: "\e139"; -} -.glyphicon-fullscreen:before { - content: "\e140"; -} -.glyphicon-dashboard:before { - content: "\e141"; -} -.glyphicon-paperclip:before { - content: "\e142"; -} -.glyphicon-heart-empty:before { - content: "\e143"; -} -.glyphicon-link:before { - content: "\e144"; -} -.glyphicon-phone:before { - content: "\e145"; -} -.glyphicon-pushpin:before { - content: "\e146"; -} -.glyphicon-usd:before { - content: "\e148"; -} -.glyphicon-gbp:before { - content: "\e149"; -} -.glyphicon-sort:before { - content: "\e150"; -} -.glyphicon-sort-by-alphabet:before { - content: "\e151"; -} -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; -} -.glyphicon-sort-by-order:before { - content: "\e153"; -} -.glyphicon-sort-by-order-alt:before { - content: "\e154"; -} -.glyphicon-sort-by-attributes:before { - content: "\e155"; -} -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; -} -.glyphicon-unchecked:before { - content: "\e157"; -} -.glyphicon-expand:before { - content: "\e158"; -} -.glyphicon-collapse-down:before { - content: "\e159"; -} -.glyphicon-collapse-up:before { - content: "\e160"; -} -.glyphicon-log-in:before { - content: "\e161"; -} -.glyphicon-flash:before { - content: "\e162"; -} -.glyphicon-log-out:before { - content: "\e163"; -} -.glyphicon-new-window:before { - content: "\e164"; -} -.glyphicon-record:before { - content: "\e165"; -} -.glyphicon-save:before { - content: "\e166"; -} -.glyphicon-open:before { - content: "\e167"; -} -.glyphicon-saved:before { - content: "\e168"; -} -.glyphicon-import:before { - content: "\e169"; -} -.glyphicon-export:before { - content: "\e170"; -} -.glyphicon-send:before { - content: "\e171"; -} -.glyphicon-floppy-disk:before { - content: "\e172"; -} -.glyphicon-floppy-saved:before { - content: "\e173"; -} -.glyphicon-floppy-remove:before { - content: "\e174"; -} -.glyphicon-floppy-save:before { - content: "\e175"; -} -.glyphicon-floppy-open:before { - content: "\e176"; -} -.glyphicon-credit-card:before { - content: "\e177"; -} -.glyphicon-transfer:before { - content: "\e178"; -} -.glyphicon-cutlery:before { - content: "\e179"; -} -.glyphicon-header:before { - content: "\e180"; -} -.glyphicon-compressed:before { - content: "\e181"; -} -.glyphicon-earphone:before { - content: "\e182"; -} -.glyphicon-phone-alt:before { - content: "\e183"; -} -.glyphicon-tower:before { - content: "\e184"; -} -.glyphicon-stats:before { - content: "\e185"; -} -.glyphicon-sd-video:before { - content: "\e186"; -} -.glyphicon-hd-video:before { - content: "\e187"; -} -.glyphicon-subtitles:before { - content: "\e188"; -} -.glyphicon-sound-stereo:before { - content: "\e189"; -} -.glyphicon-sound-dolby:before { - content: "\e190"; -} -.glyphicon-sound-5-1:before { - content: "\e191"; -} -.glyphicon-sound-6-1:before { - content: "\e192"; -} -.glyphicon-sound-7-1:before { - content: "\e193"; -} -.glyphicon-copyright-mark:before { - content: "\e194"; -} -.glyphicon-registration-mark:before { - content: "\e195"; -} -.glyphicon-cloud-download:before { - content: "\e197"; -} -.glyphicon-cloud-upload:before { - content: "\e198"; -} -.glyphicon-tree-conifer:before { - content: "\e199"; -} -.glyphicon-tree-deciduous:before { - content: "\e200"; -} -.glyphicon-cd:before { - content: "\e201"; -} -.glyphicon-save-file:before { - content: "\e202"; -} -.glyphicon-open-file:before { - content: "\e203"; -} -.glyphicon-level-up:before { - content: "\e204"; -} -.glyphicon-copy:before { - content: "\e205"; -} -.glyphicon-paste:before { - content: "\e206"; -} -.glyphicon-alert:before { - content: "\e209"; -} -.glyphicon-equalizer:before { - content: "\e210"; -} -.glyphicon-king:before { - content: "\e211"; -} -.glyphicon-queen:before { - content: "\e212"; -} -.glyphicon-pawn:before { - content: "\e213"; -} -.glyphicon-bishop:before { - content: "\e214"; -} -.glyphicon-knight:before { - content: "\e215"; -} -.glyphicon-baby-formula:before { - content: "\e216"; -} -.glyphicon-tent:before { - content: "\26fa"; -} -.glyphicon-blackboard:before { - content: "\e218"; -} -.glyphicon-bed:before { - content: "\e219"; -} -.glyphicon-apple:before { - content: "\f8ff"; -} -.glyphicon-erase:before { - content: "\e221"; -} -.glyphicon-hourglass:before { - content: "\231b"; -} -.glyphicon-lamp:before { - content: "\e223"; -} -.glyphicon-duplicate:before { - content: "\e224"; -} -.glyphicon-piggy-bank:before { - content: "\e225"; -} -.glyphicon-scissors:before { - content: "\e226"; -} -.glyphicon-bitcoin:before { - content: "\e227"; -} -.glyphicon-btc:before { - content: "\e227"; -} -.glyphicon-xbt:before { - content: "\e227"; -} -.glyphicon-yen:before { - content: "\00a5"; -} -.glyphicon-jpy:before { - content: "\00a5"; -} -.glyphicon-ruble:before { - content: "\20bd"; -} -.glyphicon-rub:before { - content: "\20bd"; -} -.glyphicon-scale:before { - content: "\e230"; -} -.glyphicon-ice-lolly:before { - content: "\e231"; -} -.glyphicon-ice-lolly-tasted:before { - content: "\e232"; -} -.glyphicon-education:before { - content: "\e233"; -} -.glyphicon-option-horizontal:before { - content: "\e234"; -} -.glyphicon-option-vertical:before { - content: "\e235"; -} -.glyphicon-menu-hamburger:before { - content: "\e236"; -} -.glyphicon-modal-window:before { - content: "\e237"; -} -.glyphicon-oil:before { - content: "\e238"; -} -.glyphicon-grain:before { - content: "\e239"; -} -.glyphicon-sunglasses:before { - content: "\e240"; -} -.glyphicon-text-size:before { - content: "\e241"; -} -.glyphicon-text-color:before { - content: "\e242"; -} -.glyphicon-text-background:before { - content: "\e243"; -} -.glyphicon-object-align-top:before { - content: "\e244"; -} -.glyphicon-object-align-bottom:before { - content: "\e245"; -} -.glyphicon-object-align-horizontal:before { - content: "\e246"; -} -.glyphicon-object-align-left:before { - content: "\e247"; -} -.glyphicon-object-align-vertical:before { - content: "\e248"; -} -.glyphicon-object-align-right:before { - content: "\e249"; -} -.glyphicon-triangle-right:before { - content: "\e250"; -} -.glyphicon-triangle-left:before { - content: "\e251"; -} -.glyphicon-triangle-bottom:before { - content: "\e252"; -} -.glyphicon-triangle-top:before { - content: "\e253"; -} -.glyphicon-console:before { - content: "\e254"; -} -.glyphicon-superscript:before { - content: "\e255"; -} -.glyphicon-subscript:before { - content: "\e256"; -} -.glyphicon-menu-left:before { - content: "\e257"; -} -.glyphicon-menu-right:before { - content: "\e258"; -} -.glyphicon-menu-down:before { - content: "\e259"; -} -.glyphicon-menu-up:before { - content: "\e260"; -} -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -html { - font-size: 10px; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.42857143; - color: #333333; - background-color: #ffffff; -} -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} -a { - color: #337ab7; - text-decoration: none; -} -a:hover, -a:focus { - color: #23527c; - text-decoration: underline; -} -a:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -figure { - margin: 0; -} -img { - vertical-align: middle; -} -.img-responsive, -.thumbnail > img, -.thumbnail a > img, -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - max-width: 100%; - height: auto; -} -.img-rounded { - border-radius: 6px; -} -.img-thumbnail { - padding: 4px; - line-height: 1.42857143; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; - display: inline-block; - max-width: 100%; - height: auto; -} -.img-circle { - border-radius: 50%; -} -hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eeeeee; -} -.sr-only { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} -[role="button"] { - cursor: pointer; -} -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - font-family: inherit; - font-weight: 500; - line-height: 1.1; - color: inherit; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small, -.h1 small, -.h2 small, -.h3 small, -.h4 small, -.h5 small, -.h6 small, -h1 .small, -h2 .small, -h3 .small, -h4 .small, -h5 .small, -h6 .small, -.h1 .small, -.h2 .small, -.h3 .small, -.h4 .small, -.h5 .small, -.h6 .small { - font-weight: normal; - line-height: 1; - color: #777777; -} -h1, -.h1, -h2, -.h2, -h3, -.h3 { - margin-top: 20px; - margin-bottom: 10px; -} -h1 small, -.h1 small, -h2 small, -.h2 small, -h3 small, -.h3 small, -h1 .small, -.h1 .small, -h2 .small, -.h2 .small, -h3 .small, -.h3 .small { - font-size: 65%; -} -h4, -.h4, -h5, -.h5, -h6, -.h6 { - margin-top: 10px; - margin-bottom: 10px; -} -h4 small, -.h4 small, -h5 small, -.h5 small, -h6 small, -.h6 small, -h4 .small, -.h4 .small, -h5 .small, -.h5 .small, -h6 .small, -.h6 .small { - font-size: 75%; -} -h1, -.h1 { - font-size: 36px; -} -h2, -.h2 { - font-size: 30px; -} -h3, -.h3 { - font-size: 24px; -} -h4, -.h4 { - font-size: 18px; -} -h5, -.h5 { - font-size: 14px; -} -h6, -.h6 { - font-size: 12px; -} -p { - margin: 0 0 10px; -} -.lead { - margin-bottom: 20px; - font-size: 16px; - font-weight: 300; - line-height: 1.4; -} -@media (min-width: 768px) { - .lead { - font-size: 21px; - } -} -small, -.small { - font-size: 85%; -} -mark, -.mark { - background-color: #fcf8e3; - padding: .2em; -} -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-center { - text-align: center; -} -.text-justify { - text-align: justify; -} -.text-nowrap { - white-space: nowrap; -} -.text-lowercase { - text-transform: lowercase; -} -.text-uppercase { - text-transform: uppercase; -} -.text-capitalize { - text-transform: capitalize; -} -.text-muted { - color: #777777; -} -.text-primary { - color: #337ab7; -} -a.text-primary:hover { - color: #286090; -} -.text-success { - color: #3c763d; -} -a.text-success:hover { - color: #2b542c; -} -.text-info { - color: #31708f; -} -a.text-info:hover { - color: #245269; -} -.text-warning { - color: #8a6d3b; -} -a.text-warning:hover { - color: #66512c; -} -.text-danger { - color: #a94442; -} -a.text-danger:hover { - color: #843534; -} -.bg-primary { - color: #fff; - background-color: #337ab7; -} -a.bg-primary:hover { - background-color: #286090; -} -.bg-success { - background-color: #dff0d8; -} -a.bg-success:hover { - background-color: #c1e2b3; -} -.bg-info { - background-color: #d9edf7; -} -a.bg-info:hover { - background-color: #afd9ee; -} -.bg-warning { - background-color: #fcf8e3; -} -a.bg-warning:hover { - background-color: #f7ecb5; -} -.bg-danger { - background-color: #f2dede; -} -a.bg-danger:hover { - background-color: #e4b9b9; -} -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eeeeee; -} -ul, -ol { - margin-top: 0; - margin-bottom: 10px; -} -ul ul, -ol ul, -ul ol, -ol ol { - margin-bottom: 0; -} -.list-unstyled { - padding-left: 0; - list-style: none; -} -.list-inline { - padding-left: 0; - list-style: none; - margin-left: -5px; -} -.list-inline > li { - display: inline-block; - padding-left: 5px; - padding-right: 5px; -} -dl { - margin-top: 0; - margin-bottom: 20px; -} -dt, -dd { - line-height: 1.42857143; -} -dt { - font-weight: bold; -} -dd { - margin-left: 0; -} -@media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #777777; -} -.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 10px 20px; - margin: 0 0 20px; - font-size: 17.5px; - border-left: 5px solid #eeeeee; -} -blockquote p:last-child, -blockquote ul:last-child, -blockquote ol:last-child { - margin-bottom: 0; -} -blockquote footer, -blockquote small, -blockquote .small { - display: block; - font-size: 80%; - line-height: 1.42857143; - color: #777777; -} -blockquote footer:before, -blockquote small:before, -blockquote .small:before { - content: '\2014 \00A0'; -} -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; - text-align: right; -} -.blockquote-reverse footer:before, -blockquote.pull-right footer:before, -.blockquote-reverse small:before, -blockquote.pull-right small:before, -.blockquote-reverse .small:before, -blockquote.pull-right .small:before { - content: ''; -} -.blockquote-reverse footer:after, -blockquote.pull-right footer:after, -.blockquote-reverse small:after, -blockquote.pull-right small:after, -.blockquote-reverse .small:after, -blockquote.pull-right .small:after { - content: '\00A0 \2014'; -} -address { - margin-bottom: 20px; - font-style: normal; - line-height: 1.42857143; -} -code, -kbd, -pre, -samp { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; -} -code { - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - background-color: #f9f2f4; - border-radius: 4px; -} -kbd { - padding: 2px 4px; - font-size: 90%; - color: #ffffff; - background-color: #333333; - border-radius: 3px; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); -} -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: bold; - -webkit-box-shadow: none; - box-shadow: none; -} -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 1.42857143; - word-break: break-all; - word-wrap: break-word; - color: #333333; - background-color: #f5f5f5; - border: 1px solid #cccccc; - border-radius: 4px; -} -pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -.container { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -@media (min-width: 768px) { - .container { - width: 750px; - } -} -@media (min-width: 992px) { - .container { - width: 970px; - } -} -@media (min-width: 1200px) { - .container { - width: 1170px; - } -} -.container-fluid { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -.row { - margin-left: -15px; - margin-right: -15px; -} -.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { - position: relative; - min-height: 1px; - padding-left: 15px; - padding-right: 15px; -} -.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { - float: left; -} -.col-xs-12 { - width: 100%; -} -.col-xs-11 { - width: 91.66666667%; -} -.col-xs-10 { - width: 83.33333333%; -} -.col-xs-9 { - width: 75%; -} -.col-xs-8 { - width: 66.66666667%; -} -.col-xs-7 { - width: 58.33333333%; -} -.col-xs-6 { - width: 50%; -} -.col-xs-5 { - width: 41.66666667%; -} -.col-xs-4 { - width: 33.33333333%; -} -.col-xs-3 { - width: 25%; -} -.col-xs-2 { - width: 16.66666667%; -} -.col-xs-1 { - width: 8.33333333%; -} -.col-xs-pull-12 { - right: 100%; -} -.col-xs-pull-11 { - right: 91.66666667%; -} -.col-xs-pull-10 { - right: 83.33333333%; -} -.col-xs-pull-9 { - right: 75%; -} -.col-xs-pull-8 { - right: 66.66666667%; -} -.col-xs-pull-7 { - right: 58.33333333%; -} -.col-xs-pull-6 { - right: 50%; -} -.col-xs-pull-5 { - right: 41.66666667%; -} -.col-xs-pull-4 { - right: 33.33333333%; -} -.col-xs-pull-3 { - right: 25%; -} -.col-xs-pull-2 { - right: 16.66666667%; -} -.col-xs-pull-1 { - right: 8.33333333%; -} -.col-xs-pull-0 { - right: auto; -} -.col-xs-push-12 { - left: 100%; -} -.col-xs-push-11 { - left: 91.66666667%; -} -.col-xs-push-10 { - left: 83.33333333%; -} -.col-xs-push-9 { - left: 75%; -} -.col-xs-push-8 { - left: 66.66666667%; -} -.col-xs-push-7 { - left: 58.33333333%; -} -.col-xs-push-6 { - left: 50%; -} -.col-xs-push-5 { - left: 41.66666667%; -} -.col-xs-push-4 { - left: 33.33333333%; -} -.col-xs-push-3 { - left: 25%; -} -.col-xs-push-2 { - left: 16.66666667%; -} -.col-xs-push-1 { - left: 8.33333333%; -} -.col-xs-push-0 { - left: auto; -} -.col-xs-offset-12 { - margin-left: 100%; -} -.col-xs-offset-11 { - margin-left: 91.66666667%; -} -.col-xs-offset-10 { - margin-left: 83.33333333%; -} -.col-xs-offset-9 { - margin-left: 75%; -} -.col-xs-offset-8 { - margin-left: 66.66666667%; -} -.col-xs-offset-7 { - margin-left: 58.33333333%; -} -.col-xs-offset-6 { - margin-left: 50%; -} -.col-xs-offset-5 { - margin-left: 41.66666667%; -} -.col-xs-offset-4 { - margin-left: 33.33333333%; -} -.col-xs-offset-3 { - margin-left: 25%; -} -.col-xs-offset-2 { - margin-left: 16.66666667%; -} -.col-xs-offset-1 { - margin-left: 8.33333333%; -} -.col-xs-offset-0 { - margin-left: 0%; -} -@media (min-width: 768px) { - .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { - float: left; - } - .col-sm-12 { - width: 100%; - } - .col-sm-11 { - width: 91.66666667%; - } - .col-sm-10 { - width: 83.33333333%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-8 { - width: 66.66666667%; - } - .col-sm-7 { - width: 58.33333333%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-5 { - width: 41.66666667%; - } - .col-sm-4 { - width: 33.33333333%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-2 { - width: 16.66666667%; - } - .col-sm-1 { - width: 8.33333333%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-pull-11 { - right: 91.66666667%; - } - .col-sm-pull-10 { - right: 83.33333333%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-8 { - right: 66.66666667%; - } - .col-sm-pull-7 { - right: 58.33333333%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-5 { - right: 41.66666667%; - } - .col-sm-pull-4 { - right: 33.33333333%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-2 { - right: 16.66666667%; - } - .col-sm-pull-1 { - right: 8.33333333%; - } - .col-sm-pull-0 { - right: auto; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-push-11 { - left: 91.66666667%; - } - .col-sm-push-10 { - left: 83.33333333%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-8 { - left: 66.66666667%; - } - .col-sm-push-7 { - left: 58.33333333%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-5 { - left: 41.66666667%; - } - .col-sm-push-4 { - left: 33.33333333%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-2 { - left: 16.66666667%; - } - .col-sm-push-1 { - left: 8.33333333%; - } - .col-sm-push-0 { - left: auto; - } - .col-sm-offset-12 { - margin-left: 100%; - } - .col-sm-offset-11 { - margin-left: 91.66666667%; - } - .col-sm-offset-10 { - margin-left: 83.33333333%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-8 { - margin-left: 66.66666667%; - } - .col-sm-offset-7 { - margin-left: 58.33333333%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-5 { - margin-left: 41.66666667%; - } - .col-sm-offset-4 { - margin-left: 33.33333333%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-2 { - margin-left: 16.66666667%; - } - .col-sm-offset-1 { - margin-left: 8.33333333%; - } - .col-sm-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 992px) { - .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { - float: left; - } - .col-md-12 { - width: 100%; - } - .col-md-11 { - width: 91.66666667%; - } - .col-md-10 { - width: 83.33333333%; - } - .col-md-9 { - width: 75%; - } - .col-md-8 { - width: 66.66666667%; - } - .col-md-7 { - width: 58.33333333%; - } - .col-md-6 { - width: 50%; - } - .col-md-5 { - width: 41.66666667%; - } - .col-md-4 { - width: 33.33333333%; - } - .col-md-3 { - width: 25%; - } - .col-md-2 { - width: 16.66666667%; - } - .col-md-1 { - width: 8.33333333%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-pull-11 { - right: 91.66666667%; - } - .col-md-pull-10 { - right: 83.33333333%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-8 { - right: 66.66666667%; - } - .col-md-pull-7 { - right: 58.33333333%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-5 { - right: 41.66666667%; - } - .col-md-pull-4 { - right: 33.33333333%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-2 { - right: 16.66666667%; - } - .col-md-pull-1 { - right: 8.33333333%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-push-12 { - left: 100%; - } - .col-md-push-11 { - left: 91.66666667%; - } - .col-md-push-10 { - left: 83.33333333%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-8 { - left: 66.66666667%; - } - .col-md-push-7 { - left: 58.33333333%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-5 { - left: 41.66666667%; - } - .col-md-push-4 { - left: 33.33333333%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-2 { - left: 16.66666667%; - } - .col-md-push-1 { - left: 8.33333333%; - } - .col-md-push-0 { - left: auto; - } - .col-md-offset-12 { - margin-left: 100%; - } - .col-md-offset-11 { - margin-left: 91.66666667%; - } - .col-md-offset-10 { - margin-left: 83.33333333%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-8 { - margin-left: 66.66666667%; - } - .col-md-offset-7 { - margin-left: 58.33333333%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-5 { - margin-left: 41.66666667%; - } - .col-md-offset-4 { - margin-left: 33.33333333%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-2 { - margin-left: 16.66666667%; - } - .col-md-offset-1 { - margin-left: 8.33333333%; - } - .col-md-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 1200px) { - .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { - float: left; - } - .col-lg-12 { - width: 100%; - } - .col-lg-11 { - width: 91.66666667%; - } - .col-lg-10 { - width: 83.33333333%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-8 { - width: 66.66666667%; - } - .col-lg-7 { - width: 58.33333333%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-5 { - width: 41.66666667%; - } - .col-lg-4 { - width: 33.33333333%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-2 { - width: 16.66666667%; - } - .col-lg-1 { - width: 8.33333333%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-pull-11 { - right: 91.66666667%; - } - .col-lg-pull-10 { - right: 83.33333333%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-8 { - right: 66.66666667%; - } - .col-lg-pull-7 { - right: 58.33333333%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-5 { - right: 41.66666667%; - } - .col-lg-pull-4 { - right: 33.33333333%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-2 { - right: 16.66666667%; - } - .col-lg-pull-1 { - right: 8.33333333%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-push-11 { - left: 91.66666667%; - } - .col-lg-push-10 { - left: 83.33333333%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-8 { - left: 66.66666667%; - } - .col-lg-push-7 { - left: 58.33333333%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-5 { - left: 41.66666667%; - } - .col-lg-push-4 { - left: 33.33333333%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-2 { - left: 16.66666667%; - } - .col-lg-push-1 { - left: 8.33333333%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-offset-12 { - margin-left: 100%; - } - .col-lg-offset-11 { - margin-left: 91.66666667%; - } - .col-lg-offset-10 { - margin-left: 83.33333333%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-8 { - margin-left: 66.66666667%; - } - .col-lg-offset-7 { - margin-left: 58.33333333%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-5 { - margin-left: 41.66666667%; - } - .col-lg-offset-4 { - margin-left: 33.33333333%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-2 { - margin-left: 16.66666667%; - } - .col-lg-offset-1 { - margin-left: 8.33333333%; - } - .col-lg-offset-0 { - margin-left: 0%; - } -} -table { - background-color: transparent; -} -caption { - padding-top: 8px; - padding-bottom: 8px; - color: #777777; - text-align: left; -} -th { - text-align: left; -} -.table { - width: 100%; - max-width: 100%; - margin-bottom: 20px; -} -.table > thead > tr > th, -.table > tbody > tr > th, -.table > tfoot > tr > th, -.table > thead > tr > td, -.table > tbody > tr > td, -.table > tfoot > tr > td { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #dddddd; -} -.table > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #dddddd; -} -.table > caption + thead > tr:first-child > th, -.table > colgroup + thead > tr:first-child > th, -.table > thead:first-child > tr:first-child > th, -.table > caption + thead > tr:first-child > td, -.table > colgroup + thead > tr:first-child > td, -.table > thead:first-child > tr:first-child > td { - border-top: 0; -} -.table > tbody + tbody { - border-top: 2px solid #dddddd; -} -.table .table { - background-color: #ffffff; -} -.table-condensed > thead > tr > th, -.table-condensed > tbody > tr > th, -.table-condensed > tfoot > tr > th, -.table-condensed > thead > tr > td, -.table-condensed > tbody > tr > td, -.table-condensed > tfoot > tr > td { - padding: 5px; -} -.table-bordered { - border: 1px solid #dddddd; -} -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #dddddd; -} -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} -.table-striped > tbody > tr:nth-of-type(odd) { - background-color: #f9f9f9; -} -.table-hover > tbody > tr:hover { - background-color: #f5f5f5; -} -table col[class*="col-"] { - position: static; - float: none; - display: table-column; -} -table td[class*="col-"], -table th[class*="col-"] { - position: static; - float: none; - display: table-cell; -} -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; -} -.table-hover > tbody > tr > td.active:hover, -.table-hover > tbody > tr > th.active:hover, -.table-hover > tbody > tr.active:hover > td, -.table-hover > tbody > tr:hover > .active, -.table-hover > tbody > tr.active:hover > th { - background-color: #e8e8e8; -} -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #dff0d8; -} -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td, -.table-hover > tbody > tr:hover > .success, -.table-hover > tbody > tr.success:hover > th { - background-color: #d0e9c6; -} -.table > thead > tr > td.info, -.table > tbody > tr > td.info, -.table > tfoot > tr > td.info, -.table > thead > tr > th.info, -.table > tbody > tr > th.info, -.table > tfoot > tr > th.info, -.table > thead > tr.info > td, -.table > tbody > tr.info > td, -.table > tfoot > tr.info > td, -.table > thead > tr.info > th, -.table > tbody > tr.info > th, -.table > tfoot > tr.info > th { - background-color: #d9edf7; -} -.table-hover > tbody > tr > td.info:hover, -.table-hover > tbody > tr > th.info:hover, -.table-hover > tbody > tr.info:hover > td, -.table-hover > tbody > tr:hover > .info, -.table-hover > tbody > tr.info:hover > th { - background-color: #c4e3f3; -} -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; -} -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td, -.table-hover > tbody > tr:hover > .warning, -.table-hover > tbody > tr.warning:hover > th { - background-color: #faf2cc; -} -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #f2dede; -} -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td, -.table-hover > tbody > tr:hover > .danger, -.table-hover > tbody > tr.danger:hover > th { - background-color: #ebcccc; -} -.table-responsive { - overflow-x: auto; - min-height: 0.01%; -} -@media screen and (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #dddddd; - } - .table-responsive > .table { - margin-bottom: 0; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} -fieldset { - padding: 0; - margin: 0; - border: 0; - min-width: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -label { - display: inline-block; - max-width: 100%; - margin-bottom: 5px; - font-weight: bold; -} -input[type="search"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - line-height: normal; -} -input[type="file"] { - display: block; -} -input[type="range"] { - display: block; - width: 100%; -} -select[multiple], -select[size] { - height: auto; -} -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -output { - display: block; - padding-top: 7px; - font-size: 14px; - line-height: 1.42857143; - color: #555555; -} -.form-control { - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555555; - background-color: #ffffff; - background-image: none; - border: 1px solid #cccccc; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; - -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; -} -.form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); -} -.form-control::-moz-placeholder { - color: #999999; - opacity: 1; -} -.form-control:-ms-input-placeholder { - color: #999999; -} -.form-control::-webkit-input-placeholder { - color: #999999; -} -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - background-color: #eeeeee; - opacity: 1; -} -.form-control[disabled], -fieldset[disabled] .form-control { - cursor: not-allowed; -} -textarea.form-control { - height: auto; -} -input[type="search"] { - -webkit-appearance: none; -} -@media screen and (-webkit-min-device-pixel-ratio: 0) { - input[type="date"], - input[type="time"], - input[type="datetime-local"], - input[type="month"] { - line-height: 34px; - } - input[type="date"].input-sm, - input[type="time"].input-sm, - input[type="datetime-local"].input-sm, - input[type="month"].input-sm, - .input-group-sm input[type="date"], - .input-group-sm input[type="time"], - .input-group-sm input[type="datetime-local"], - .input-group-sm input[type="month"] { - line-height: 30px; - } - input[type="date"].input-lg, - input[type="time"].input-lg, - input[type="datetime-local"].input-lg, - input[type="month"].input-lg, - .input-group-lg input[type="date"], - .input-group-lg input[type="time"], - .input-group-lg input[type="datetime-local"], - .input-group-lg input[type="month"] { - line-height: 46px; - } -} -.form-group { - margin-bottom: 15px; -} -.radio, -.checkbox { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px; -} -.radio label, -.checkbox label { - min-height: 20px; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; -} -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-left: -20px; - margin-top: 4px \9; -} -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} -.radio-inline, -.checkbox-inline { - position: relative; - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - vertical-align: middle; - font-weight: normal; - cursor: pointer; -} -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"].disabled, -input[type="checkbox"].disabled, -fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"] { - cursor: not-allowed; -} -.radio-inline.disabled, -.checkbox-inline.disabled, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} -.radio.disabled label, -.checkbox.disabled label, -fieldset[disabled] .radio label, -fieldset[disabled] .checkbox label { - cursor: not-allowed; -} -.form-control-static { - padding-top: 7px; - padding-bottom: 7px; - margin-bottom: 0; - min-height: 34px; -} -.form-control-static.input-lg, -.form-control-static.input-sm { - padding-left: 0; - padding-right: 0; -} -.input-sm { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-sm { - height: 30px; - line-height: 30px; -} -textarea.input-sm, -select[multiple].input-sm { - height: auto; -} -.form-group-sm .form-control { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.form-group-sm .form-control { - height: 30px; - line-height: 30px; -} -textarea.form-group-sm .form-control, -select[multiple].form-group-sm .form-control { - height: auto; -} -.form-group-sm .form-control-static { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - min-height: 32px; -} -.input-lg { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-lg { - height: 46px; - line-height: 46px; -} -textarea.input-lg, -select[multiple].input-lg { - height: auto; -} -.form-group-lg .form-control { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.form-group-lg .form-control { - height: 46px; - line-height: 46px; -} -textarea.form-group-lg .form-control, -select[multiple].form-group-lg .form-control { - height: auto; -} -.form-group-lg .form-control-static { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - min-height: 38px; -} -.has-feedback { - position: relative; -} -.has-feedback .form-control { - padding-right: 42.5px; -} -.form-control-feedback { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: block; - width: 34px; - height: 34px; - line-height: 34px; - text-align: center; - pointer-events: none; -} -.input-lg + .form-control-feedback { - width: 46px; - height: 46px; - line-height: 46px; -} -.input-sm + .form-control-feedback { - width: 30px; - height: 30px; - line-height: 30px; -} -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, -.has-success.radio label, -.has-success.checkbox label, -.has-success.radio-inline label, -.has-success.checkbox-inline label { - color: #3c763d; -} -.has-success .form-control { - border-color: #3c763d; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-success .form-control:focus { - border-color: #2b542c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; -} -.has-success .input-group-addon { - color: #3c763d; - border-color: #3c763d; - background-color: #dff0d8; -} -.has-success .form-control-feedback { - color: #3c763d; -} -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, -.has-warning.radio label, -.has-warning.checkbox label, -.has-warning.radio-inline label, -.has-warning.checkbox-inline label { - color: #8a6d3b; -} -.has-warning .form-control { - border-color: #8a6d3b; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-warning .form-control:focus { - border-color: #66512c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; -} -.has-warning .input-group-addon { - color: #8a6d3b; - border-color: #8a6d3b; - background-color: #fcf8e3; -} -.has-warning .form-control-feedback { - color: #8a6d3b; -} -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline, -.has-error.radio label, -.has-error.checkbox label, -.has-error.radio-inline label, -.has-error.checkbox-inline label { - color: #a94442; -} -.has-error .form-control { - border-color: #a94442; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-error .form-control:focus { - border-color: #843534; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; -} -.has-error .input-group-addon { - color: #a94442; - border-color: #a94442; - background-color: #f2dede; -} -.has-error .form-control-feedback { - color: #a94442; -} -.has-feedback label ~ .form-control-feedback { - top: 25px; -} -.has-feedback label.sr-only ~ .form-control-feedback { - top: 0; -} -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #737373; -} -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .form-control-static { - display: inline-block; - } - .form-inline .input-group { - display: inline-table; - vertical-align: middle; - } - .form-inline .input-group .input-group-addon, - .form-inline .input-group .input-group-btn, - .form-inline .input-group .form-control { - width: auto; - } - .form-inline .input-group > .form-control { - width: 100%; - } - .form-inline .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio label, - .form-inline .checkbox label { - padding-left: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .form-inline .has-feedback .form-control-feedback { - top: 0; - } -} -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - margin-top: 0; - margin-bottom: 0; - padding-top: 7px; -} -.form-horizontal .radio, -.form-horizontal .checkbox { - min-height: 27px; -} -.form-horizontal .form-group { - margin-left: -15px; - margin-right: -15px; -} -@media (min-width: 768px) { - .form-horizontal .control-label { - text-align: right; - margin-bottom: 0; - padding-top: 7px; - } -} -.form-horizontal .has-feedback .form-control-feedback { - right: 15px; -} -@media (min-width: 768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 14.333333px; - } -} -@media (min-width: 768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 6px; - } -} -.btn { - display: inline-block; - margin-bottom: 0; - font-weight: normal; - text-align: center; - vertical-align: middle; - -ms-touch-action: manipulation; - touch-action: manipulation; - cursor: pointer; - background-image: none; - border: 1px solid transparent; - white-space: nowrap; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - border-radius: 4px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.btn:focus, -.btn:active:focus, -.btn.active:focus, -.btn.focus, -.btn:active.focus, -.btn.active.focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn:hover, -.btn:focus, -.btn.focus { - color: #333333; - text-decoration: none; -} -.btn:active, -.btn.active { - outline: 0; - background-image: none; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - cursor: not-allowed; - pointer-events: none; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; -} -.btn-default { - color: #333333; - background-color: #ffffff; - border-color: #cccccc; -} -.btn-default:hover, -.btn-default:focus, -.btn-default.focus, -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - color: #333333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - background-image: none; -} -.btn-default.disabled, -.btn-default[disabled], -fieldset[disabled] .btn-default, -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus, -.btn-default.disabled:active, -.btn-default[disabled]:active, -fieldset[disabled] .btn-default:active, -.btn-default.disabled.active, -.btn-default[disabled].active, -fieldset[disabled] .btn-default.active { - background-color: #ffffff; - border-color: #cccccc; -} -.btn-default .badge { - color: #ffffff; - background-color: #333333; -} -.btn-primary { - color: #ffffff; - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary:hover, -.btn-primary:focus, -.btn-primary.focus, -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - color: #ffffff; - background-color: #286090; - border-color: #204d74; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - background-image: none; -} -.btn-primary.disabled, -.btn-primary[disabled], -fieldset[disabled] .btn-primary, -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus, -.btn-primary.disabled:active, -.btn-primary[disabled]:active, -fieldset[disabled] .btn-primary:active, -.btn-primary.disabled.active, -.btn-primary[disabled].active, -fieldset[disabled] .btn-primary.active { - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary .badge { - color: #337ab7; - background-color: #ffffff; -} -.btn-success { - color: #ffffff; - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success:hover, -.btn-success:focus, -.btn-success.focus, -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - color: #ffffff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - background-image: none; -} -.btn-success.disabled, -.btn-success[disabled], -fieldset[disabled] .btn-success, -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled.focus, -.btn-success[disabled].focus, -fieldset[disabled] .btn-success.focus, -.btn-success.disabled:active, -.btn-success[disabled]:active, -fieldset[disabled] .btn-success:active, -.btn-success.disabled.active, -.btn-success[disabled].active, -fieldset[disabled] .btn-success.active { - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success .badge { - color: #5cb85c; - background-color: #ffffff; -} -.btn-info { - color: #ffffff; - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info:hover, -.btn-info:focus, -.btn-info.focus, -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - color: #ffffff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - background-image: none; -} -.btn-info.disabled, -.btn-info[disabled], -fieldset[disabled] .btn-info, -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled.focus, -.btn-info[disabled].focus, -fieldset[disabled] .btn-info.focus, -.btn-info.disabled:active, -.btn-info[disabled]:active, -fieldset[disabled] .btn-info:active, -.btn-info.disabled.active, -.btn-info[disabled].active, -fieldset[disabled] .btn-info.active { - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info .badge { - color: #5bc0de; - background-color: #ffffff; -} -.btn-warning { - color: #ffffff; - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning:hover, -.btn-warning:focus, -.btn-warning.focus, -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - color: #ffffff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - background-image: none; -} -.btn-warning.disabled, -.btn-warning[disabled], -fieldset[disabled] .btn-warning, -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled.focus, -.btn-warning[disabled].focus, -fieldset[disabled] .btn-warning.focus, -.btn-warning.disabled:active, -.btn-warning[disabled]:active, -fieldset[disabled] .btn-warning:active, -.btn-warning.disabled.active, -.btn-warning[disabled].active, -fieldset[disabled] .btn-warning.active { - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning .badge { - color: #f0ad4e; - background-color: #ffffff; -} -.btn-danger { - color: #ffffff; - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger:hover, -.btn-danger:focus, -.btn-danger.focus, -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - color: #ffffff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - background-image: none; -} -.btn-danger.disabled, -.btn-danger[disabled], -fieldset[disabled] .btn-danger, -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled.focus, -.btn-danger[disabled].focus, -fieldset[disabled] .btn-danger.focus, -.btn-danger.disabled:active, -.btn-danger[disabled]:active, -fieldset[disabled] .btn-danger:active, -.btn-danger.disabled.active, -.btn-danger[disabled].active, -fieldset[disabled] .btn-danger.active { - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger .badge { - color: #d9534f; - background-color: #ffffff; -} -.btn-link { - color: #337ab7; - font-weight: normal; - border-radius: 0; -} -.btn-link, -.btn-link:active, -.btn-link.active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} -.btn-link, -.btn-link:hover, -.btn-link:focus, -.btn-link:active { - border-color: transparent; -} -.btn-link:hover, -.btn-link:focus { - color: #23527c; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:hover, -.btn-link[disabled]:focus, -fieldset[disabled] .btn-link:focus { - color: #777777; - text-decoration: none; -} -.btn-lg, -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -.btn-sm, -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-xs, -.btn-group-xs > .btn { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-block { - display: block; - width: 100%; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - display: none; -} -.collapse.in { - display: block; -} -tr.collapse.in { - display: table-row; -} -tbody.collapse.in { - display: table-row-group; -} -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition-property: height, visibility; - -o-transition-property: height, visibility; - transition-property: height, visibility; - -webkit-transition-duration: 0.35s; - -o-transition-duration: 0.35s; - transition-duration: 0.35s; - -webkit-transition-timing-function: ease; - -o-transition-timing-function: ease; - transition-timing-function: ease; -} -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px dashed; - border-right: 4px solid transparent; - border-left: 4px solid transparent; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle:focus { - outline: 0; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - font-size: 14px; - text-align: left; - background-color: #ffffff; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.42857143; - color: #333333; - white-space: nowrap; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - text-decoration: none; - color: #262626; - background-color: #f5f5f5; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #ffffff; - text-decoration: none; - outline: 0; - background-color: #337ab7; -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #777777; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: not-allowed; -} -.open > .dropdown-menu { - display: block; -} -.open > a { - outline: 0; -} -.dropdown-menu-right { - left: auto; - right: 0; -} -.dropdown-menu-left { - left: 0; - right: auto; -} -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.42857143; - color: #777777; - white-space: nowrap; -} -.dropdown-backdrop { - position: fixed; - left: 0; - right: 0; - bottom: 0; - top: 0; - z-index: 990; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid; - content: ""; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px; -} -@media (min-width: 768px) { - .navbar-right .dropdown-menu { - left: auto; - right: 0; - } - .navbar-right .dropdown-menu-left { - left: 0; - right: auto; - } -} -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; -} -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - float: left; -} -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover, -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus, -.btn-group > .btn:active, -.btn-group-vertical > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn.active { - z-index: 2; -} -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; -} -.btn-toolbar { - margin-left: -5px; -} -.btn-toolbar .btn-group, -.btn-toolbar .input-group { - float: left; -} -.btn-toolbar > .btn, -.btn-toolbar > .btn-group, -.btn-toolbar > .input-group { - margin-left: 5px; -} -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} -.btn-group > .btn:first-child { - margin-left: 0; -} -.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.btn-group > .btn-group { - float: left; -} -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; -} -.btn-group > .btn-lg + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; -} -.btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn-group.open .dropdown-toggle.btn-link { - -webkit-box-shadow: none; - box-shadow: none; -} -.btn .caret { - margin-left: 0; -} -.btn-lg .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; -} -.dropup .btn-lg .caret { - border-width: 0 5px 5px; -} -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group, -.btn-group-vertical > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; -} -.btn-group-vertical > .btn-group > .btn { - float: none; -} -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-bottom-left-radius: 4px; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; -} -.btn-group-justified > .btn, -.btn-group-justified > .btn-group { - float: none; - display: table-cell; - width: 1%; -} -.btn-group-justified > .btn-group .btn { - width: 100%; -} -.btn-group-justified > .btn-group .dropdown-menu { - left: auto; -} -[data-toggle="buttons"] > .btn input[type="radio"], -[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], -[data-toggle="buttons"] > .btn input[type="checkbox"], -[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} -.input-group { - position: relative; - display: table; - border-collapse: separate; -} -.input-group[class*="col-"] { - float: none; - padding-left: 0; - padding-right: 0; -} -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-group-lg > .form-control, -select.input-group-lg > .input-group-addon, -select.input-group-lg > .input-group-btn > .btn { - height: 46px; - line-height: 46px; -} -textarea.input-group-lg > .form-control, -textarea.input-group-lg > .input-group-addon, -textarea.input-group-lg > .input-group-btn > .btn, -select[multiple].input-group-lg > .form-control, -select[multiple].input-group-lg > .input-group-addon, -select[multiple].input-group-lg > .input-group-btn > .btn { - height: auto; -} -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-group-sm > .form-control, -select.input-group-sm > .input-group-addon, -select.input-group-sm > .input-group-btn > .btn { - height: 30px; - line-height: 30px; -} -textarea.input-group-sm > .form-control, -textarea.input-group-sm > .input-group-addon, -textarea.input-group-sm > .input-group-btn > .btn, -select[multiple].input-group-sm > .form-control, -select[multiple].input-group-sm > .input-group-addon, -select[multiple].input-group-sm > .input-group-btn > .btn { - height: auto; -} -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; -} -.input-group-addon:not(:first-child):not(:last-child), -.input-group-btn:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; -} -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} -.input-group-addon { - padding: 6px 12px; - font-size: 14px; - font-weight: normal; - line-height: 1; - color: #555555; - text-align: center; - background-color: #eeeeee; - border: 1px solid #cccccc; - border-radius: 4px; -} -.input-group-addon.input-sm { - padding: 5px 10px; - font-size: 12px; - border-radius: 3px; -} -.input-group-addon.input-lg { - padding: 10px 16px; - font-size: 18px; - border-radius: 6px; -} -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.input-group-addon:first-child { - border-right: 0; -} -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child), -.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.input-group-addon:last-child { - border-left: 0; -} -.input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap; -} -.input-group-btn > .btn { - position: relative; -} -.input-group-btn > .btn + .btn { - margin-left: -1px; -} -.input-group-btn > .btn:hover, -.input-group-btn > .btn:focus, -.input-group-btn > .btn:active { - z-index: 2; -} -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group { - margin-right: -1px; -} -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group { - margin-left: -1px; -} -.nav { - margin-bottom: 0; - padding-left: 0; - list-style: none; -} -.nav > li { - position: relative; - display: block; -} -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} -.nav > li.disabled > a { - color: #777777; -} -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #777777; - text-decoration: none; - background-color: transparent; - cursor: not-allowed; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #eeeeee; - border-color: #337ab7; -} -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.nav > li > a > img { - max-width: none; -} -.nav-tabs { - border-bottom: 1px solid #dddddd; -} -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; -} -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #555555; - background-color: #ffffff; - border: 1px solid #dddddd; - border-bottom-color: transparent; - cursor: default; -} -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} -.nav-tabs.nav-justified > li { - float: none; -} -.nav-tabs.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-tabs.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-tabs.nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs.nav-justified > .active > a, -.nav-tabs.nav-justified > .active > a:hover, -.nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #dddddd; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #dddddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs.nav-justified > .active > a, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #ffffff; - } -} -.nav-pills > li { - float: left; -} -.nav-pills > li > a { - border-radius: 4px; -} -.nav-pills > li + li { - margin-left: 2px; -} -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #ffffff; - background-color: #337ab7; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} -.nav-justified { - width: 100%; -} -.nav-justified > li { - float: none; -} -.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs-justified { - border-bottom: 0; -} -.nav-tabs-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs-justified > .active > a, -.nav-tabs-justified > .active > a:hover, -.nav-tabs-justified > .active > a:focus { - border: 1px solid #dddddd; -} -@media (min-width: 768px) { - .nav-tabs-justified > li > a { - border-bottom: 1px solid #dddddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus { - border-bottom-color: #ffffff; - } -} -.tab-content > .tab-pane { - display: none; -} -.tab-content > .active { - display: block; -} -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.navbar { - position: relative; - min-height: 50px; - margin-bottom: 20px; - border: 1px solid transparent; -} -@media (min-width: 768px) { - .navbar { - border-radius: 4px; - } -} -@media (min-width: 768px) { - .navbar-header { - float: left; - } -} -.navbar-collapse { - overflow-x: visible; - padding-right: 15px; - padding-left: 15px; - border-top: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-overflow-scrolling: touch; -} -.navbar-collapse.in { - overflow-y: auto; -} -@media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - -webkit-box-shadow: none; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-fixed-top .navbar-collapse, - .navbar-static-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - padding-left: 0; - padding-right: 0; - } -} -.navbar-fixed-top .navbar-collapse, -.navbar-fixed-bottom .navbar-collapse { - max-height: 340px; -} -@media (max-device-width: 480px) and (orientation: landscape) { - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - max-height: 200px; - } -} -.container > .navbar-header, -.container-fluid > .navbar-header, -.container > .navbar-collapse, -.container-fluid > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; -} -@media (min-width: 768px) { - .container > .navbar-header, - .container-fluid > .navbar-header, - .container > .navbar-collapse, - .container-fluid > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } -} -.navbar-static-top { - z-index: 1000; - border-width: 0 0 1px; -} -@media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; - } -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; -} -@media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } -} -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; -} -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0; -} -.navbar-brand { - float: left; - padding: 15px 15px; - font-size: 18px; - line-height: 20px; - height: 50px; -} -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} -.navbar-brand > img { - display: block; -} -@media (min-width: 768px) { - .navbar > .container .navbar-brand, - .navbar > .container-fluid .navbar-brand { - margin-left: -15px; - } -} -.navbar-toggle { - position: relative; - float: right; - margin-right: 15px; - padding: 9px 10px; - margin-top: 8px; - margin-bottom: 8px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.navbar-toggle:focus { - outline: 0; -} -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} -@media (min-width: 768px) { - .navbar-toggle { - display: none; - } -} -.navbar-nav { - margin: 7.5px -15px; -} -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px; -} -@media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 20px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } -} -@media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 15px; - padding-bottom: 15px; - } -} -.navbar-form { - margin-left: -15px; - margin-right: -15px; - padding: 10px 15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - margin-top: 8px; - margin-bottom: 8px; -} -@media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .navbar-form .form-control-static { - display: inline-block; - } - .navbar-form .input-group { - display: inline-table; - vertical-align: middle; - } - .navbar-form .input-group .input-group-addon, - .navbar-form .input-group .input-group-btn, - .navbar-form .input-group .form-control { - width: auto; - } - .navbar-form .input-group > .form-control { - width: 100%; - } - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio label, - .navbar-form .checkbox label { - padding-left: 0; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .navbar-form .has-feedback .form-control-feedback { - top: 0; - } -} -@media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; - } - .navbar-form .form-group:last-child { - margin-bottom: 0; - } -} -@media (min-width: 768px) { - .navbar-form { - width: auto; - border: 0; - margin-left: 0; - margin-right: 0; - padding-top: 0; - padding-bottom: 0; - -webkit-box-shadow: none; - box-shadow: none; - } -} -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - margin-bottom: 0; - border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.navbar-btn { - margin-top: 8px; - margin-bottom: 8px; -} -.navbar-btn.btn-sm { - margin-top: 10px; - margin-bottom: 10px; -} -.navbar-btn.btn-xs { - margin-top: 14px; - margin-bottom: 14px; -} -.navbar-text { - margin-top: 15px; - margin-bottom: 15px; -} -@media (min-width: 768px) { - .navbar-text { - float: left; - margin-left: 15px; - margin-right: 15px; - } -} -@media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - margin-right: -15px; - } - .navbar-right ~ .navbar-right { - margin-right: 0; - } -} -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7; -} -.navbar-default .navbar-brand { - color: #777777; -} -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #5e5e5e; - background-color: transparent; -} -.navbar-default .navbar-text { - color: #777777; -} -.navbar-default .navbar-nav > li > a { - color: #777777; -} -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #333333; - background-color: transparent; -} -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #555555; - background-color: #e7e7e7; -} -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #cccccc; - background-color: transparent; -} -.navbar-default .navbar-toggle { - border-color: #dddddd; -} -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #dddddd; -} -.navbar-default .navbar-toggle .icon-bar { - background-color: #888888; -} -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e7e7e7; -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - background-color: #e7e7e7; - color: #555555; -} -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777777; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333333; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555555; - background-color: #e7e7e7; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #cccccc; - background-color: transparent; - } -} -.navbar-default .navbar-link { - color: #777777; -} -.navbar-default .navbar-link:hover { - color: #333333; -} -.navbar-default .btn-link { - color: #777777; -} -.navbar-default .btn-link:hover, -.navbar-default .btn-link:focus { - color: #333333; -} -.navbar-default .btn-link[disabled]:hover, -fieldset[disabled] .navbar-default .btn-link:hover, -.navbar-default .btn-link[disabled]:focus, -fieldset[disabled] .navbar-default .btn-link:focus { - color: #cccccc; -} -.navbar-inverse { - background-color: #222222; - border-color: #080808; -} -.navbar-inverse .navbar-brand { - color: #9d9d9d; -} -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #ffffff; - background-color: transparent; -} -.navbar-inverse .navbar-text { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #ffffff; - background-color: transparent; -} -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #ffffff; - background-color: #080808; -} -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444444; - background-color: transparent; -} -.navbar-inverse .navbar-toggle { - border-color: #333333; -} -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #333333; -} -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #ffffff; -} -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #101010; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - background-color: #080808; - color: #ffffff; -} -@media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #9d9d9d; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #ffffff; - background-color: transparent; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #ffffff; - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444444; - background-color: transparent; - } -} -.navbar-inverse .navbar-link { - color: #9d9d9d; -} -.navbar-inverse .navbar-link:hover { - color: #ffffff; -} -.navbar-inverse .btn-link { - color: #9d9d9d; -} -.navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link:focus { - color: #ffffff; -} -.navbar-inverse .btn-link[disabled]:hover, -fieldset[disabled] .navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link[disabled]:focus, -fieldset[disabled] .navbar-inverse .btn-link:focus { - color: #444444; -} -.breadcrumb { - padding: 8px 15px; - margin-bottom: 20px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px; -} -.breadcrumb > li { - display: inline-block; -} -.breadcrumb > li + li:before { - content: "/\00a0"; - padding: 0 5px; - color: #cccccc; -} -.breadcrumb > .active { - color: #777777; -} -.pagination { - display: inline-block; - padding-left: 0; - margin: 20px 0; - border-radius: 4px; -} -.pagination > li { - display: inline; -} -.pagination > li > a, -.pagination > li > span { - position: relative; - float: left; - padding: 6px 12px; - line-height: 1.42857143; - text-decoration: none; - color: #337ab7; - background-color: #ffffff; - border: 1px solid #dddddd; - margin-left: -1px; -} -.pagination > li:first-child > a, -.pagination > li:first-child > span { - margin-left: 0; - border-bottom-left-radius: 4px; - border-top-left-radius: 4px; -} -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-bottom-right-radius: 4px; - border-top-right-radius: 4px; -} -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - color: #23527c; - background-color: #eeeeee; - border-color: #dddddd; -} -.pagination > .active > a, -.pagination > .active > span, -.pagination > .active > a:hover, -.pagination > .active > span:hover, -.pagination > .active > a:focus, -.pagination > .active > span:focus { - z-index: 2; - color: #ffffff; - background-color: #337ab7; - border-color: #337ab7; - cursor: default; -} -.pagination > .disabled > span, -.pagination > .disabled > span:hover, -.pagination > .disabled > span:focus, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #777777; - background-color: #ffffff; - border-color: #dddddd; - cursor: not-allowed; -} -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 18px; -} -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-bottom-left-radius: 6px; - border-top-left-radius: 6px; -} -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-bottom-right-radius: 6px; - border-top-right-radius: 6px; -} -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 5px 10px; - font-size: 12px; -} -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-bottom-left-radius: 3px; - border-top-left-radius: 3px; -} -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-bottom-right-radius: 3px; - border-top-right-radius: 3px; -} -.pager { - padding-left: 0; - margin: 20px 0; - list-style: none; - text-align: center; -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 15px; -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #777777; - background-color: #ffffff; - cursor: not-allowed; -} -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #ffffff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; -} -a.label:hover, -a.label:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.label:empty { - display: none; -} -.btn .label { - position: relative; - top: -1px; -} -.label-default { - background-color: #777777; -} -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #5e5e5e; -} -.label-primary { - background-color: #337ab7; -} -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #286090; -} -.label-success { - background-color: #5cb85c; -} -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #449d44; -} -.label-info { - background-color: #5bc0de; -} -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #31b0d5; -} -.label-warning { - background-color: #f0ad4e; -} -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #ec971f; -} -.label-danger { - background-color: #d9534f; -} -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #c9302c; -} -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - color: #ffffff; - line-height: 1; - vertical-align: baseline; - white-space: nowrap; - text-align: center; - background-color: #777777; - border-radius: 10px; -} -.badge:empty { - display: none; -} -.btn .badge { - position: relative; - top: -1px; -} -.btn-xs .badge, -.btn-group-xs > .btn .badge { - top: 0; - padding: 1px 5px; -} -a.badge:hover, -a.badge:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.list-group-item.active > .badge, -.nav-pills > .active > a > .badge { - color: #337ab7; - background-color: #ffffff; -} -.list-group-item > .badge { - float: right; -} -.list-group-item > .badge + .badge { - margin-right: 5px; -} -.nav-pills > li > a > .badge { - margin-left: 3px; -} -.jumbotron { - padding: 30px 15px; - margin-bottom: 30px; - color: inherit; - background-color: #eeeeee; -} -.jumbotron h1, -.jumbotron .h1 { - color: inherit; -} -.jumbotron p { - margin-bottom: 15px; - font-size: 21px; - font-weight: 200; -} -.jumbotron > hr { - border-top-color: #d5d5d5; -} -.container .jumbotron, -.container-fluid .jumbotron { - border-radius: 6px; -} -.jumbotron .container { - max-width: 100%; -} -@media screen and (min-width: 768px) { - .jumbotron { - padding: 48px 0; - } - .container .jumbotron, - .container-fluid .jumbotron { - padding-left: 60px; - padding-right: 60px; - } - .jumbotron h1, - .jumbotron .h1 { - font-size: 63px; - } -} -.thumbnail { - display: block; - padding: 4px; - margin-bottom: 20px; - line-height: 1.42857143; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 4px; - -webkit-transition: border 0.2s ease-in-out; - -o-transition: border 0.2s ease-in-out; - transition: border 0.2s ease-in-out; -} -.thumbnail > img, -.thumbnail a > img { - margin-left: auto; - margin-right: auto; -} -a.thumbnail:hover, -a.thumbnail:focus, -a.thumbnail.active { - border-color: #337ab7; -} -.thumbnail .caption { - padding: 9px; - color: #333333; -} -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; -} -.alert h4 { - margin-top: 0; - color: inherit; -} -.alert .alert-link { - font-weight: bold; -} -.alert > p, -.alert > ul { - margin-bottom: 0; -} -.alert > p + p { - margin-top: 5px; -} -.alert-dismissable, -.alert-dismissible { - padding-right: 35px; -} -.alert-dismissable .close, -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #3c763d; -} -.alert-success hr { - border-top-color: #c9e2b3; -} -.alert-success .alert-link { - color: #2b542c; -} -.alert-info { - background-color: #d9edf7; - border-color: #bce8f1; - color: #31708f; -} -.alert-info hr { - border-top-color: #a6e1ec; -} -.alert-info .alert-link { - color: #245269; -} -.alert-warning { - background-color: #fcf8e3; - border-color: #faebcc; - color: #8a6d3b; -} -.alert-warning hr { - border-top-color: #f7e1b5; -} -.alert-warning .alert-link { - color: #66512c; -} -.alert-danger { - background-color: #f2dede; - border-color: #ebccd1; - color: #a94442; -} -.alert-danger hr { - border-top-color: #e4b9c0; -} -.alert-danger .alert-link { - color: #843534; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-o-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - overflow: hidden; - height: 20px; - margin-bottom: 20px; - background-color: #f5f5f5; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} -.progress-bar { - float: left; - width: 0%; - height: 100%; - font-size: 12px; - line-height: 20px; - color: #ffffff; - text-align: center; - background-color: #337ab7; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress-striped .progress-bar, -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - background-size: 40px 40px; -} -.progress.active .progress-bar, -.progress-bar.active { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-bar-success { - background-color: #5cb85c; -} -.progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-info { - background-color: #5bc0de; -} -.progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-warning { - background-color: #f0ad4e; -} -.progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-danger { - background-color: #d9534f; -} -.progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} -.media, -.media-body { - zoom: 1; - overflow: hidden; -} -.media-body { - width: 10000px; -} -.media-object { - display: block; -} -.media-right, -.media > .pull-right { - padding-left: 10px; -} -.media-left, -.media > .pull-left { - padding-right: 10px; -} -.media-left, -.media-right, -.media-body { - display: table-cell; - vertical-align: top; -} -.media-middle { - vertical-align: middle; -} -.media-bottom { - vertical-align: bottom; -} -.media-heading { - margin-top: 0; - margin-bottom: 5px; -} -.media-list { - padding-left: 0; - list-style: none; -} -.list-group { - margin-bottom: 20px; - padding-left: 0; -} -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #ffffff; - border: 1px solid #dddddd; -} -.list-group-item:first-child { - border-top-right-radius: 4px; - border-top-left-radius: 4px; -} -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -a.list-group-item { - color: #555555; -} -a.list-group-item .list-group-item-heading { - color: #333333; -} -a.list-group-item:hover, -a.list-group-item:focus { - text-decoration: none; - color: #555555; - background-color: #f5f5f5; -} -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { - background-color: #eeeeee; - color: #777777; - cursor: not-allowed; -} -.list-group-item.disabled .list-group-item-heading, -.list-group-item.disabled:hover .list-group-item-heading, -.list-group-item.disabled:focus .list-group-item-heading { - color: inherit; -} -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text { - color: #777777; -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #ffffff; - background-color: #337ab7; - border-color: #337ab7; -} -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading, -.list-group-item.active .list-group-item-heading > small, -.list-group-item.active:hover .list-group-item-heading > small, -.list-group-item.active:focus .list-group-item-heading > small, -.list-group-item.active .list-group-item-heading > .small, -.list-group-item.active:hover .list-group-item-heading > .small, -.list-group-item.active:focus .list-group-item-heading > .small { - color: inherit; -} -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #c7ddef; -} -.list-group-item-success { - color: #3c763d; - background-color: #dff0d8; -} -a.list-group-item-success { - color: #3c763d; -} -a.list-group-item-success .list-group-item-heading { - color: inherit; -} -a.list-group-item-success:hover, -a.list-group-item-success:focus { - color: #3c763d; - background-color: #d0e9c6; -} -a.list-group-item-success.active, -a.list-group-item-success.active:hover, -a.list-group-item-success.active:focus { - color: #fff; - background-color: #3c763d; - border-color: #3c763d; -} -.list-group-item-info { - color: #31708f; - background-color: #d9edf7; -} -a.list-group-item-info { - color: #31708f; -} -a.list-group-item-info .list-group-item-heading { - color: inherit; -} -a.list-group-item-info:hover, -a.list-group-item-info:focus { - color: #31708f; - background-color: #c4e3f3; -} -a.list-group-item-info.active, -a.list-group-item-info.active:hover, -a.list-group-item-info.active:focus { - color: #fff; - background-color: #31708f; - border-color: #31708f; -} -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3; -} -a.list-group-item-warning { - color: #8a6d3b; -} -a.list-group-item-warning .list-group-item-heading { - color: inherit; -} -a.list-group-item-warning:hover, -a.list-group-item-warning:focus { - color: #8a6d3b; - background-color: #faf2cc; -} -a.list-group-item-warning.active, -a.list-group-item-warning.active:hover, -a.list-group-item-warning.active:focus { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b; -} -.list-group-item-danger { - color: #a94442; - background-color: #f2dede; -} -a.list-group-item-danger { - color: #a94442; -} -a.list-group-item-danger .list-group-item-heading { - color: inherit; -} -a.list-group-item-danger:hover, -a.list-group-item-danger:focus { - color: #a94442; - background-color: #ebcccc; -} -a.list-group-item-danger.active, -a.list-group-item-danger.active:hover, -a.list-group-item-danger.active:focus { - color: #fff; - background-color: #a94442; - border-color: #a94442; -} -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} -.panel { - margin-bottom: 20px; - background-color: #ffffff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); -} -.panel-body { - padding: 15px; -} -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel-heading > .dropdown .dropdown-toggle { - color: inherit; -} -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; - color: inherit; -} -.panel-title > a, -.panel-title > small, -.panel-title > .small, -.panel-title > small > a, -.panel-title > .small > a { - color: inherit; -} -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #dddddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .list-group, -.panel > .panel-collapse > .list-group { - margin-bottom: 0; -} -.panel > .list-group .list-group-item, -.panel > .panel-collapse > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; -} -.panel > .list-group:first-child .list-group-item:first-child, -.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .list-group:last-child .list-group-item:last-child, -.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} -.list-group + .panel-footer { - border-top-width: 0; -} -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; -} -.panel > .table caption, -.panel > .table-responsive > .table caption, -.panel > .panel-collapse > .table caption { - padding-left: 15px; - padding-right: 15px; -} -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 3px; -} -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 3px; -} -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #dddddd; -} -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; -} -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; -} -.panel > .table-bordered > thead > tr > th:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, -.panel > .table-bordered > tbody > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, -.panel > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-bordered > thead > tr > td:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, -.panel > .table-bordered > tbody > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, -.panel > .table-bordered > tfoot > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; -} -.panel > .table-bordered > thead > tr > th:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, -.panel > .table-bordered > tbody > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, -.panel > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-bordered > thead > tr > td:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, -.panel > .table-bordered > tbody > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, -.panel > .table-bordered > tfoot > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; -} -.panel > .table-bordered > thead > tr:first-child > td, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, -.panel > .table-bordered > tbody > tr:first-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, -.panel > .table-bordered > thead > tr:first-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, -.panel > .table-bordered > tbody > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; -} -.panel > .table-bordered > tbody > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, -.panel > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-bordered > tbody > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, -.panel > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; -} -.panel > .table-responsive { - border: 0; - margin-bottom: 0; -} -.panel-group { - margin-bottom: 20px; -} -.panel-group .panel { - margin-bottom: 0; - border-radius: 4px; -} -.panel-group .panel + .panel { - margin-top: 5px; -} -.panel-group .panel-heading { - border-bottom: 0; -} -.panel-group .panel-heading + .panel-collapse > .panel-body, -.panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #dddddd; -} -.panel-group .panel-footer { - border-top: 0; -} -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #dddddd; -} -.panel-default { - border-color: #dddddd; -} -.panel-default > .panel-heading { - color: #333333; - background-color: #f5f5f5; - border-color: #dddddd; -} -.panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #dddddd; -} -.panel-default > .panel-heading .badge { - color: #f5f5f5; - background-color: #333333; -} -.panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #dddddd; -} -.panel-primary { - border-color: #337ab7; -} -.panel-primary > .panel-heading { - color: #ffffff; - background-color: #337ab7; - border-color: #337ab7; -} -.panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #337ab7; -} -.panel-primary > .panel-heading .badge { - color: #337ab7; - background-color: #ffffff; -} -.panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #337ab7; -} -.panel-success { - border-color: #d6e9c6; -} -.panel-success > .panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #d6e9c6; -} -.panel-success > .panel-heading .badge { - color: #dff0d8; - background-color: #3c763d; -} -.panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #d6e9c6; -} -.panel-info { - border-color: #bce8f1; -} -.panel-info > .panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #bce8f1; -} -.panel-info > .panel-heading .badge { - color: #d9edf7; - background-color: #31708f; -} -.panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #bce8f1; -} -.panel-warning { - border-color: #faebcc; -} -.panel-warning > .panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #faebcc; -} -.panel-warning > .panel-heading .badge { - color: #fcf8e3; - background-color: #8a6d3b; -} -.panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #faebcc; -} -.panel-danger { - border-color: #ebccd1; -} -.panel-danger > .panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ebccd1; -} -.panel-danger > .panel-heading .badge { - color: #f2dede; - background-color: #a94442; -} -.panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ebccd1; -} -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; -} -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - left: 0; - bottom: 0; - height: 100%; - width: 100%; - border: 0; -} -.embed-responsive-16by9 { - padding-bottom: 56.25%; -} -.embed-responsive-4by3 { - padding-bottom: 75%; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} -.well-lg { - padding: 24px; - border-radius: 6px; -} -.well-sm { - padding: 9px; - border-radius: 3px; -} -.close { - float: right; - font-size: 21px; - font-weight: bold; - line-height: 1; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover, -.close:focus { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.5; - filter: alpha(opacity=50); -} -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} -.modal-open { - overflow: hidden; -} -.modal { - display: none; - overflow: hidden; - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - -webkit-overflow-scrolling: touch; - outline: 0; -} -.modal.fade .modal-dialog { - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - -o-transform: translate(0, -25%); - transform: translate(0, -25%); - -webkit-transition: -webkit-transform 0.3s ease-out; - -o-transition: -o-transform 0.3s ease-out; - transition: transform 0.3s ease-out; -} -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); -} -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} -.modal-content { - position: relative; - background-color: #ffffff; - border: 1px solid #999999; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - -webkit-background-clip: padding-box; - background-clip: padding-box; - outline: 0; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} -.modal-backdrop.fade { - opacity: 0; - filter: alpha(opacity=0); -} -.modal-backdrop.in { - opacity: 0.5; - filter: alpha(opacity=50); -} -.modal-header { - padding: 15px; - border-bottom: 1px solid #e5e5e5; - min-height: 16.42857143px; -} -.modal-header .close { - margin-top: -2px; -} -.modal-title { - margin: 0; - line-height: 1.42857143; -} -.modal-body { - position: relative; - padding: 15px; -} -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} -.modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} -@media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - } - .modal-sm { - width: 300px; - } -} -@media (min-width: 992px) { - .modal-lg { - width: 900px; - } -} -.tooltip { - position: absolute; - z-index: 1070; - display: block; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 12px; - font-weight: normal; - line-height: 1.4; - opacity: 0; - filter: alpha(opacity=0); -} -.tooltip.in { - opacity: 0.9; - filter: alpha(opacity=90); -} -.tooltip.top { - margin-top: -3px; - padding: 5px 0; -} -.tooltip.right { - margin-left: 3px; - padding: 0 5px; -} -.tooltip.bottom { - margin-top: 3px; - padding: 5px 0; -} -.tooltip.left { - margin-left: -3px; - padding: 0 5px; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - border-radius: 4px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.top-left .tooltip-arrow { - bottom: 0; - right: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.top-right .tooltip-arrow { - bottom: 0; - left: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.tooltip.bottom-left .tooltip-arrow { - top: 0; - right: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.tooltip.bottom-right .tooltip-arrow { - top: 0; - left: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 276px; - padding: 1px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - font-weight: normal; - line-height: 1.42857143; - text-align: left; - background-color: #ffffff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - white-space: normal; -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 14px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; -} -.popover-content { - padding: 9px 14px; -} -.popover > .arrow, -.popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover > .arrow { - border-width: 11px; -} -.popover > .arrow:after { - border-width: 10px; - content: ""; -} -.popover.top > .arrow { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: #999999; - border-top-color: rgba(0, 0, 0, 0.25); - bottom: -11px; -} -.popover.top > .arrow:after { - content: " "; - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #ffffff; -} -.popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: #999999; - border-right-color: rgba(0, 0, 0, 0.25); -} -.popover.right > .arrow:after { - content: " "; - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #ffffff; -} -.popover.bottom > .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999999; - border-bottom-color: rgba(0, 0, 0, 0.25); - top: -11px; -} -.popover.bottom > .arrow:after { - content: " "; - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #ffffff; -} -.popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999999; - border-left-color: rgba(0, 0, 0, 0.25); -} -.popover.left > .arrow:after { - content: " "; - right: 1px; - border-right-width: 0; - border-left-color: #ffffff; - bottom: -10px; -} -.carousel { - position: relative; -} -.carousel-inner { - position: relative; - overflow: hidden; - width: 100%; -} -.carousel-inner > .item { - display: none; - position: relative; - -webkit-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - line-height: 1; -} -@media all and (transform-3d), (-webkit-transform-3d) { - .carousel-inner > .item { - -webkit-transition: -webkit-transform 0.6s ease-in-out; - -o-transition: -o-transform 0.6s ease-in-out; - transition: transform 0.6s ease-in-out; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-perspective: 1000; - perspective: 1000; - } - .carousel-inner > .item.next, - .carousel-inner > .item.active.right { - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - left: 0; - } - .carousel-inner > .item.prev, - .carousel-inner > .item.active.left { - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - left: 0; - } - .carousel-inner > .item.next.left, - .carousel-inner > .item.prev.right, - .carousel-inner > .item.active { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - left: 0; - } -} -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} -.carousel-inner > .active { - left: 0; -} -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel-inner > .next { - left: 100%; -} -.carousel-inner > .prev { - left: -100%; -} -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} -.carousel-inner > .active.left { - left: -100%; -} -.carousel-inner > .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 0; - left: 0; - bottom: 0; - width: 15%; - opacity: 0.5; - filter: alpha(opacity=50); - font-size: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); -} -.carousel-control.left { - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); -} -.carousel-control.right { - left: auto; - right: 0; - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); -} -.carousel-control:hover, -.carousel-control:focus { - outline: 0; - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} -.carousel-control .icon-prev, -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-left, -.carousel-control .glyphicon-chevron-right { - position: absolute; - top: 50%; - z-index: 5; - display: inline-block; -} -.carousel-control .icon-prev, -.carousel-control .glyphicon-chevron-left { - left: 50%; - margin-left: -10px; -} -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-right { - right: 50%; - margin-right: -10px; -} -.carousel-control .icon-prev, -.carousel-control .icon-next { - width: 20px; - height: 20px; - margin-top: -10px; - line-height: 1; - font-family: serif; -} -.carousel-control .icon-prev:before { - content: '\2039'; -} -.carousel-control .icon-next:before { - content: '\203a'; -} -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - margin-left: -30%; - padding-left: 0; - list-style: none; - text-align: center; -} -.carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - border: 1px solid #ffffff; - border-radius: 10px; - cursor: pointer; - background-color: #000 \9; - background-color: rgba(0, 0, 0, 0); -} -.carousel-indicators .active { - margin: 0; - width: 12px; - height: 12px; - background-color: #ffffff; -} -.carousel-caption { - position: absolute; - left: 15%; - right: 15%; - bottom: 20px; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); -} -.carousel-caption .btn { - text-shadow: none; -} -@media screen and (min-width: 768px) { - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -15px; - font-size: 30px; - } - .carousel-control .glyphicon-chevron-left, - .carousel-control .icon-prev { - margin-left: -15px; - } - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next { - margin-right: -15px; - } - .carousel-caption { - left: 20%; - right: 20%; - padding-bottom: 30px; - } - .carousel-indicators { - bottom: 20px; - } -} -.clearfix:before, -.clearfix:after, -.dl-horizontal dd:before, -.dl-horizontal dd:after, -.container:before, -.container:after, -.container-fluid:before, -.container-fluid:after, -.row:before, -.row:after, -.form-horizontal .form-group:before, -.form-horizontal .form-group:after, -.btn-toolbar:before, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after, -.nav:before, -.nav:after, -.navbar:before, -.navbar:after, -.navbar-header:before, -.navbar-header:after, -.navbar-collapse:before, -.navbar-collapse:after, -.pager:before, -.pager:after, -.panel-body:before, -.panel-body:after, -.modal-footer:before, -.modal-footer:after { - content: " "; - display: table; -} -.clearfix:after, -.dl-horizontal dd:after, -.container:after, -.container-fluid:after, -.row:after, -.form-horizontal .form-group:after, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:after, -.nav:after, -.navbar:after, -.navbar-header:after, -.navbar-collapse:after, -.pager:after, -.panel-body:after, -.modal-footer:after { - clear: both; -} -.center-block { - display: block; - margin-left: auto; - margin-right: auto; -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} -.hide { - display: none !important; -} -.show { - display: block !important; -} -.invisible { - visibility: hidden; -} -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.hidden { - display: none !important; -} -.affix { - position: fixed; -} -@-ms-viewport { - width: device-width; -} -.visible-xs, -.visible-sm, -.visible-md, -.visible-lg { - display: none !important; -} -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; -} -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - table.visible-xs { - display: table; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} -@media (max-width: 767px) { - .visible-xs-block { - display: block !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline { - display: inline !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline-block { - display: inline-block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - table.visible-sm { - display: table; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-block { - display: block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline { - display: inline !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline-block { - display: inline-block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - table.visible-md { - display: table; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-block { - display: block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline { - display: inline !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline-block { - display: inline-block !important; - } -} -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - table.visible-lg { - display: table; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} -@media (min-width: 1200px) { - .visible-lg-block { - display: block !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline { - display: inline !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline-block { - display: inline-block !important; - } -} -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } -} -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } -} -.visible-print { - display: none !important; -} -@media print { - .visible-print { - display: block !important; - } - table.visible-print { - display: table; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } -} -.visible-print-block { - display: none !important; -} -@media print { - .visible-print-block { - display: block !important; - } -} -.visible-print-inline { - display: none !important; -} -@media print { - .visible-print-inline { - display: inline !important; - } -} -.visible-print-inline-block { - display: none !important; -} -@media print { - .visible-print-inline-block { - display: inline-block !important; - } -} -@media print { - .hidden-print { - display: none !important; - } -}
@@ -1,35 +0,0 @@
-/* Generated by Font Squirrel (http://www.fontsquirrel.com) on April 18, 2015 */ - -@font-face { - font-family: 'Calendas Plus'; - src: url('../fonts/calendas_plus-eot.eot'); - src: url('../fonts/calendas_plus-eot.eot?#iefix') format('embedded-opentype'), - url('../fonts/calendas_plus-woff2.woff2') format('woff2'), - url('../fonts/calendas_plus-woff.woff') format('woff'), - url('../fonts/calendas_plus-ttf.ttf') format('truetype'); - font-weight: normal; - font-style: normal; - -} -@font-face { - font-family: 'Calendas Plus'; - src: url('../fonts/calendas_plus_bold-eot.eot'); - src: url('../fonts/calendas_plus_bold-eot.eot?#iefix') format('embedded-opentype'), - url('../fonts/calendas_plus_bold-woff2.woff2') format('woff2'), - url('../fonts/calendas_plus_bold-woff.woff') format('woff'), - url('../fonts/calendas_plus_bold-ttf.ttf') format('truetype'); - font-weight: bold; - font-style: normal; - -} -@font-face { - font-family: 'Calendas Plus'; - src: url('../fonts/calendas_plus_italic-eot.eot'); - src: url('../fonts/calendas_plus_italic-eot.eot?#iefix') format('embedded-opentype'), - url('../fonts/calendas_plus_italic-woff2.woff2') format('woff2'), - url('../fonts/calendas_plus_italic-woff.woff') format('woff'), - url('../fonts/calendas_plus_italic-ttf.ttf') format('truetype'); - font-weight: normal; - font-style: italic; - -}
@@ -1,144 +0,0 @@
-/* - * Based on: https://github.com/pie4dan/CodeRay-GitHub-Theme/blob/master/coderay.css - */ -.CodeRay { - background-color: #FFF; - border: 1px solid #CCC; - font-family: @font-family-code; - color: #000; - padding: 1em 0px 1em 1em; -} -.CodeRay pre, .CodeRay code { - padding: 0; - margin: 0; -} - -div.CodeRay { - padding: 0; -} - -span.CodeRay { white-space: pre; border: 0px; padding: 2px } - -table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px } -table.CodeRay td { - padding: 1em 0.5em; - vertical-align: top; -} - -.CodeRay .line-numbers, .CodeRay .no { - border: 1px solid #ECECEC; - margin: 0 inherit; - background-color: #ECECEC; - color: #AAA; - padding: 0px 7px; - text-align: right; -} -.CodeRay .line-numbers tt { font-weight: bold } -.CodeRay .line-numbers .highlighted { color: red } -.CodeRay .line { display: block; float: left; width: 100%; } -.CodeRay .no { padding: 0px 4px } -.CodeRay .code { width: 100% } - -ol.CodeRay { font-size: 10pt } -ol.CodeRay li { white-space: pre } - -.CodeRay .code pre { overflow: auto } - -.CodeRay .debug { color:white ! important; background:blue ! important; } - -.CodeRay .attribute-name-fat { color:#00C } -.CodeRay .attribute-name { color:#007 } -.CodeRay .annotation { color:#f08 } -.CodeRay .attribute-value { color:#700 } -.CodeRay .attribute-value-fat { color:#C00 } -.CodeRay .binary { color:#509; font-weight:bold } -.CodeRay .comment { color:#998; font-style: italic;} - -.CodeRay .char { color:#04D } -.CodeRay .ch .content { color:#04D } -.CodeRay .ch .delimiter { color:#039 } - -.CodeRay .class { color:#458; font-weight:bold } -.CodeRay .complex { color:#A08; font-weight:bold } -.CodeRay .constant { color:teal; } -.CodeRay .color { color:#0A0 } -.CodeRay .class-variable { color:#369 } -.CodeRay .decorator { color:#B0B; } -.CodeRay .definition { color:#099; font-weight:bold } -.CodeRay .directive { color:#088; font-weight:bold } -.CodeRay .delimiter { color:black } -.CodeRay .doc { color:#970 } -.CodeRay .doc-type { color:#34b } -.CodeRay .doc-string { color:#D42; font-weight:bold } -.CodeRay .escape { color:#666; font-weight:bold } -.CodeRay .entity { color:#800; font-weight:bold } -.CodeRay .error { color:#F00; background-color:#FAA } -.CodeRay .exception { color:#C00; font-weight:bold } -.CodeRay .float { color:#099; } -.CodeRay .function { color:#900; font-weight:bold } -.CodeRay .global-variable { color:teal; font-weight:bold } -.CodeRay .hex { color:#058; font-weight:bold } -.CodeRay .imaginary { color:#099; } -.CodeRay .include { color:#B44; font-weight:bold } - -.CodeRay .inline { color: black } -.CodeRay .inline .inline { background: #ccc } -.CodeRay .inline .inline .inline { background: #bbb } -.CodeRay .inline .inline-delimiter { color: #D14; } -.CodeRay .inline-delimiter { color: #D14; } - -.CodeRay .imaginary { color:#f00; } -.CodeRay .include { color:#B2B; font-weight:bold } -.CodeRay .instance-variable { color:teal } -.CodeRay .label { color:#970; font-weight:bold } -.CodeRay .local-variable { color:#963 } -.CodeRay .octal { color:#40E; font-weight:bold } -.CodeRay .operator-fat { color:#000; font-weight:bold } -.CodeRay .operator { } -.CodeRay .predefined-constant { font-weight:bold } -.CodeRay .predefined { color:#369; font-weight:bold } -.CodeRay .preprocessor { color:#579; } -.CodeRay .pseudo-class { color:#00C; font-weight:bold } -.CodeRay .predefined-type { color:#074; font-weight:bold } -.CodeRay .reserved, .keyword { color:#000; font-weight:bold } - -.CodeRay .key { color: #808; } -.CodeRay .key .delimiter { color: #606; } -.CodeRay .key .char { color: #80f; } -.CodeRay .value { color: #088; } - -.CodeRay .regexp { background-color:#fff0ff } -.CodeRay .regexp .content { color:#808 } -.CodeRay .regexp .delimiter { color:#404 } -.CodeRay .regexp .modifier { color:#C2C } -.CodeRay .regexp .function { color:#404; font-weight: bold } - -.CodeRay .string { color: #D20; } -.CodeRay .string .content { color: #D14; } -.CodeRay .string .char { color: #D14; } -.CodeRay .string .delimiter { color: #D14; } - -.CodeRay .shell { color:#D14 } -.CodeRay .shell .content { } -.CodeRay .shell .delimiter { color:#D14 } - -.CodeRay .symbol { color:#990073 } -.CodeRay .symbol .content { color:#A60 } -.CodeRay .symbol .delimiter { color:#630 } - -.CodeRay .tag { color:#070 } -.CodeRay .tag-fat { color:#070; font-weight:bold } -.CodeRay .tag-special { color:#D70; font-weight:bold } -.CodeRay .type { color:#339; font-weight:bold } -.CodeRay .variable { color:#036 } -.CodeRay .xml-text { color:#444 } - -.CodeRay .insert { background: #afa; } -.CodeRay .delete { background: #faa; } -.CodeRay .change { color: #aaf; background: #007; } -.CodeRay .head { color: #f8f; background: #505 } - -.CodeRay .insert .insert { color: #080; font-weight:bold } -.CodeRay .delete .delete { color: #800; font-weight:bold } -.CodeRay .change .change { color: #66f; } -.CodeRay .head .head { color: #f4f; }
@@ -1,68 +0,0 @@
-@font-family-text: 'Calendas Plus', serif; -@text-size: 1em; -@dark-text: #000; -@normal-text: #111; -@light-text: #444; -@light-text-alt: #f3f3f3; - -@font-family-code: 'Inconsolata', monospace; -@code-size: 13px; - -@link-color: #b5190c; -@link-hover-color: darken(@link-color, 10%); - -@navbar-bkg: darken(#3a3a3a, 10%); -@navbar-link-color: lighten(@link-color, 25%); -@navbar-link-hover-color: lighten(@link-hover-color, 25%); - -.hyphens, .hyphenate { - -moz-hyphens: auto; - -webkit-hyphens: auto; - -ms-hyphens: auto; - hyphens: auto; -} - -.no-hyphens, .donthyphenate { - -moz-hyphens: none; - -webkit-hyphens: none; - -ms-hyphens: none; - hyphens: none; -} - -.normal-ligatures { - -moz-font-feature-settings: "liga","pnum", "frac", "zero"; - -webkit-font-feature-settings: "liga", "pnum", "frac", "zero"; - -ms-font-feature-settings: "liga", "pnum", "frac", "zero"; - font-feature-settings: "liga", "pnum", "frac", "zero"; -} -.fancy-ligatures { - -moz-font-feature-settings:"liga", "dlig", "hlig", "clig", "calt", "swsh", "onum", "pnum", "frac", "zero", "hist", "salt"; - -webkit-font-feature-settings:"liga", "dlig", "hlig", "clig", "calt", "swsh", "onum", "pnum", "frac", "zero", "hist", "salt"; - -ms-font-feature-settings:"liga", "dlig", "hlig", "clig", "calt", "swsh", "onum", "pnum", "frac", "zero", "hist", "salt"; - font-feature-settings:"liga", "dlig", "hlig", "clig", "calt", "swsh", "onum", "pnum", "frac", "zero", "hist", "salt"; -} - -.ordn { - -moz-font-feature-settings: "ordn"; - -ms-font-feature-settings: "ordn"; - -webkit-font-feature-settings: "ordn"; - font-feature-settings: "ordn"; -} -.smcp, .caps { - -moz-font-feature-settings: "smcp"; - -ms-font-feature-settings: "smcp"; - -webkit-font-feature-settings: "smcp"; - font-feature-settings: "smcp"; -} -.subs { - -moz-font-feature-settings: "subs"; - -ms-font-feature-settings: "subs"; - -webkit-font-feature-settings: "subs"; - font-feature-settings: "subs"; -} -.sups { - -moz-font-feature-settings: "sups"; - -ms-font-feature-settings: "sups"; - -webkit-font-feature-settings: "sups"; - font-feature-settings: "sups"; -}
@@ -1,219 +0,0 @@
-@media (min-width: 768px) { - .navbar .container { - width: 98%; - } - .navbar-form.navbar-right { - width: 147px; - margin-right: -48px; - } - .navbar-form .input-group { - float: right; - width: 320px; - } -} -@media (max-width: 930px) { - .navbar-form.navbar-right { - margin-right: -26px; - } - .navbar-form .input-group { - float: right; - width: 140px; - } -} - -@media ( max-width : 767px) { - .nav-container { - padding: 0; - } - .navbar-form .input-group { - float:none; - width: 100%; - } - .navbar-fixed-top { - position: absolute; - } -} - -html, body { - height: 100%; -} -body { - padding-top: 70px; -} - -img { max-width: 100%; } - -a, a:link, a:visited, a:active { - color: @link-color; - word-break: break-word; - text-decoration: none; -} - -a:hover { - color: @link-hover-color; - text-decoration: none; -} - -q:before, q:after { - content: ""; -} - -q, blockquote { - color: #999; - font-style: italic; -} - -dt { - font-weight: 300; - font-size: 20px; -} - -figure { - margin: 2px; - border: 1px solid #999; - padding: 2px; - color: #999; - font-size: 80%; - text-align: center; -} - -figure[style="float: right;"], img[style^="float:right"]{ - margin-left: 10px; -} - -figure[style="float: left;"], img[style^="float:left"]{ - margin-right: 10px; -} - -#site-footer, .navbar, .navbar-collapse { - box-shadow: 0px 0px 20px 2px @navbar-bkg; - text-shadow: 0 1px 1px #111; - color: @light-text-alt; - background: @navbar-bkg; - a, a:link, a:visited, a:active { - margin: inherit 1px; - color: @navbar-link-color; - i { - font-size: 20px; - vertical-align: text-top; - color: @light-text-alt; - } - } - .nav a:hover { - text-decoration: none; - background: @navbar-bkg; - color: @navbar-link-hover-color; - } -} - -.navbar { - height: 60px; - .container { - padding-top: 5px; - } - .nav { - background: @navbar-bkg; - } - .navbar-toggle { - border-color: #555; - } - .icon-bar { - background: #555; - } - h1 { - position: relative; - margin: 0 0 0 15px; - padding: 0; - } - .input-group { - box-shadow: 0px 1px 1px 0px #111; - } - .btn, input[type=text] { - border-radius: 0; - } -} - -.jumbotron { - background-color: #fff; -} - -article table { - &:extend(.table); - &:extend(.table-striped); - &:extend(.table-bordered); -} - -main { - padding-bottom: 50px; -} - -#site-footer { - padding-top: 5px; - font-size: 13px; - color: @light-text-alt; - h2 { - color: @light-text-alt; - } - .copyright { - text-align: center; - margin: auto; - } - - .contact-list ul { - list-style-type: none; - } - .license-logo { - text-align: center; - margin: 15px auto; - } -} - -.article-aggregation { - margin: 20px 0; -} - -.pubdate, .read { - font-style: italic; -} - -.read { - margin-bottom: 20px; -} - -.featured { - display: block; - font-style: italic; - text-align: right; - font-size: 130%; - color: #555; -} - -#header-row { - margin-top: 15px; -} - -.article-info { - font-style: italic; -} - -.hyphenate, .hyphens { - text-align: justify; - -} - -article p[style*="right"] { - margin: 0.5em 0 0.5em 1em; -} - -article p[style*="left"] { - margin: 0.5em 1em 0.5em 0; -} - -#body-text .navigation { - margin: auto; - text-align: center; -} - -.main-title h1 { - margin-top: 0; -}
@@ -1,1801 +0,0 @@
-/*! - * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */ -/* FONT PATH - * -------------------------- */ -@font-face { - font-family: 'FontAwesome'; - src: url('../fonts/fontawesome-eot.eot?v=4.3.0'); - src: url('../fonts/fontawesome-eot.eot?#iefix&v=4.3.0') format('embedded-opentype'), url('../fonts/fontawesome-woff2.woff2?v=4.3.0') format('woff2'), url('../fonts/fontawesome-woff.woff?v=4.3.0') format('woff'), url('../fonts/fontawesome-ttf.ttf?v=4.3.0') format('truetype'), url('../fonts/fontawesome-svg.svg?v=4.3.0#fontawesomeregular') format('svg'); - font-weight: normal; - font-style: normal; -} -.fa { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); -} -/* makes the font 33% larger relative to the icon container */ -.fa-lg { - font-size: 1.33333333em; - line-height: 0.75em; - vertical-align: -15%; -} -.fa-2x { - font-size: 2em; -} -.fa-3x { - font-size: 3em; -} -.fa-4x { - font-size: 4em; -} -.fa-5x { - font-size: 5em; -} -.fa-fw { - width: 1.28571429em; - text-align: center; -} -.fa-ul { - padding-left: 0; - margin-left: 2.14285714em; - list-style-type: none; -} -.fa-ul > li { - position: relative; -} -.fa-li { - position: absolute; - left: -2.14285714em; - width: 2.14285714em; - top: 0.14285714em; - text-align: center; -} -.fa-li.fa-lg { - left: -1.85714286em; -} -.fa-border { - padding: .2em .25em .15em; - border: solid 0.08em #eeeeee; - border-radius: .1em; -} -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.fa.pull-left { - margin-right: .3em; -} -.fa.pull-right { - margin-left: .3em; -} -.fa-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear; -} -.fa-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); - animation: fa-spin 1s infinite steps(8); -} -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -.fa-rotate-90 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); -} -.fa-rotate-180 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} -.fa-rotate-270 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); -} -.fa-flip-horizontal { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); - -webkit-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1); -} -.fa-flip-vertical { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1); -} -:root .fa-rotate-90, -:root .fa-rotate-180, -:root .fa-rotate-270, -:root .fa-flip-horizontal, -:root .fa-flip-vertical { - filter: none; -} -.fa-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; -} -.fa-stack-1x, -.fa-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; -} -.fa-stack-1x { - line-height: inherit; -} -.fa-stack-2x { - font-size: 2em; -} -.fa-inverse { - color: #ffffff; -} -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -.fa-glass:before { - content: "\f000"; -} -.fa-music:before { - content: "\f001"; -} -.fa-search:before { - content: "\f002"; -} -.fa-envelope-o:before { - content: "\f003"; -} -.fa-heart:before { - content: "\f004"; -} -.fa-star:before { - content: "\f005"; -} -.fa-star-o:before { - content: "\f006"; -} -.fa-user:before { - content: "\f007"; -} -.fa-film:before { - content: "\f008"; -} -.fa-th-large:before { - content: "\f009"; -} -.fa-th:before { - content: "\f00a"; -} -.fa-th-list:before { - content: "\f00b"; -} -.fa-check:before { - content: "\f00c"; -} -.fa-remove:before, -.fa-close:before, -.fa-times:before { - content: "\f00d"; -} -.fa-search-plus:before { - content: "\f00e"; -} -.fa-search-minus:before { - content: "\f010"; -} -.fa-power-off:before { - content: "\f011"; -} -.fa-signal:before { - content: "\f012"; -} -.fa-gear:before, -.fa-cog:before { - content: "\f013"; -} -.fa-trash-o:before { - content: "\f014"; -} -.fa-home:before { - content: "\f015"; -} -.fa-file-o:before { - content: "\f016"; -} -.fa-clock-o:before { - content: "\f017"; -} -.fa-road:before { - content: "\f018"; -} -.fa-download:before { - content: "\f019"; -} -.fa-arrow-circle-o-down:before { - content: "\f01a"; -} -.fa-arrow-circle-o-up:before { - content: "\f01b"; -} -.fa-inbox:before { - content: "\f01c"; -} -.fa-play-circle-o:before { - content: "\f01d"; -} -.fa-rotate-right:before, -.fa-repeat:before { - content: "\f01e"; -} -.fa-refresh:before { - content: "\f021"; -} -.fa-list-alt:before { - content: "\f022"; -} -.fa-lock:before { - content: "\f023"; -} -.fa-flag:before { - content: "\f024"; -} -.fa-headphones:before { - content: "\f025"; -} -.fa-volume-off:before { - content: "\f026"; -} -.fa-volume-down:before { - content: "\f027"; -} -.fa-volume-up:before { - content: "\f028"; -} -.fa-qrcode:before { - content: "\f029"; -} -.fa-barcode:before { - content: "\f02a"; -} -.fa-tag:before { - content: "\f02b"; -} -.fa-tags:before { - content: "\f02c"; -} -.fa-book:before { - content: "\f02d"; -} -.fa-bookmark:before { - content: "\f02e"; -} -.fa-print:before { - content: "\f02f"; -} -.fa-camera:before { - content: "\f030"; -} -.fa-font:before { - content: "\f031"; -} -.fa-bold:before { - content: "\f032"; -} -.fa-italic:before { - content: "\f033"; -} -.fa-text-height:before { - content: "\f034"; -} -.fa-text-width:before { - content: "\f035"; -} -.fa-align-left:before { - content: "\f036"; -} -.fa-align-center:before { - content: "\f037"; -} -.fa-align-right:before { - content: "\f038"; -} -.fa-align-justify:before { - content: "\f039"; -} -.fa-list:before { - content: "\f03a"; -} -.fa-dedent:before, -.fa-outdent:before { - content: "\f03b"; -} -.fa-indent:before { - content: "\f03c"; -} -.fa-video-camera:before { - content: "\f03d"; -} -.fa-photo:before, -.fa-image:before, -.fa-picture-o:before { - content: "\f03e"; -} -.fa-pencil:before { - content: "\f040"; -} -.fa-map-marker:before { - content: "\f041"; -} -.fa-adjust:before { - content: "\f042"; -} -.fa-tint:before { - content: "\f043"; -} -.fa-edit:before, -.fa-pencil-square-o:before { - content: "\f044"; -} -.fa-share-square-o:before { - content: "\f045"; -} -.fa-check-square-o:before { - content: "\f046"; -} -.fa-arrows:before { - content: "\f047"; -} -.fa-step-backward:before { - content: "\f048"; -} -.fa-fast-backward:before { - content: "\f049"; -} -.fa-backward:before { - content: "\f04a"; -} -.fa-play:before { - content: "\f04b"; -} -.fa-pause:before { - content: "\f04c"; -} -.fa-stop:before { - content: "\f04d"; -} -.fa-forward:before { - content: "\f04e"; -} -.fa-fast-forward:before { - content: "\f050"; -} -.fa-step-forward:before { - content: "\f051"; -} -.fa-eject:before { - content: "\f052"; -} -.fa-chevron-left:before { - content: "\f053"; -} -.fa-chevron-right:before { - content: "\f054"; -} -.fa-plus-circle:before { - content: "\f055"; -} -.fa-minus-circle:before { - content: "\f056"; -} -.fa-times-circle:before { - content: "\f057"; -} -.fa-check-circle:before { - content: "\f058"; -} -.fa-question-circle:before { - content: "\f059"; -} -.fa-info-circle:before { - content: "\f05a"; -} -.fa-crosshairs:before { - content: "\f05b"; -} -.fa-times-circle-o:before { - content: "\f05c"; -} -.fa-check-circle-o:before { - content: "\f05d"; -} -.fa-ban:before { - content: "\f05e"; -} -.fa-arrow-left:before { - content: "\f060"; -} -.fa-arrow-right:before { - content: "\f061"; -} -.fa-arrow-up:before { - content: "\f062"; -} -.fa-arrow-down:before { - content: "\f063"; -} -.fa-mail-forward:before, -.fa-share:before { - content: "\f064"; -} -.fa-expand:before { - content: "\f065"; -} -.fa-compress:before { - content: "\f066"; -} -.fa-plus:before { - content: "\f067"; -} -.fa-minus:before { - content: "\f068"; -} -.fa-asterisk:before { - content: "\f069"; -} -.fa-exclamation-circle:before { - content: "\f06a"; -} -.fa-gift:before { - content: "\f06b"; -} -.fa-leaf:before { - content: "\f06c"; -} -.fa-fire:before { - content: "\f06d"; -} -.fa-eye:before { - content: "\f06e"; -} -.fa-eye-slash:before { - content: "\f070"; -} -.fa-warning:before, -.fa-exclamation-triangle:before { - content: "\f071"; -} -.fa-plane:before { - content: "\f072"; -} -.fa-calendar:before { - content: "\f073"; -} -.fa-random:before { - content: "\f074"; -} -.fa-comment:before { - content: "\f075"; -} -.fa-magnet:before { - content: "\f076"; -} -.fa-chevron-up:before { - content: "\f077"; -} -.fa-chevron-down:before { - content: "\f078"; -} -.fa-retweet:before { - content: "\f079"; -} -.fa-shopping-cart:before { - content: "\f07a"; -} -.fa-folder:before { - content: "\f07b"; -} -.fa-folder-open:before { - content: "\f07c"; -} -.fa-arrows-v:before { - content: "\f07d"; -} -.fa-arrows-h:before { - content: "\f07e"; -} -.fa-bar-chart-o:before, -.fa-bar-chart:before { - content: "\f080"; -} -.fa-twitter-square:before { - content: "\f081"; -} -.fa-facebook-square:before { - content: "\f082"; -} -.fa-camera-retro:before { - content: "\f083"; -} -.fa-key:before { - content: "\f084"; -} -.fa-gears:before, -.fa-cogs:before { - content: "\f085"; -} -.fa-comments:before { - content: "\f086"; -} -.fa-thumbs-o-up:before { - content: "\f087"; -} -.fa-thumbs-o-down:before { - content: "\f088"; -} -.fa-star-half:before { - content: "\f089"; -} -.fa-heart-o:before { - content: "\f08a"; -} -.fa-sign-out:before { - content: "\f08b"; -} -.fa-linkedin-square:before { - content: "\f08c"; -} -.fa-thumb-tack:before { - content: "\f08d"; -} -.fa-external-link:before { - content: "\f08e"; -} -.fa-sign-in:before { - content: "\f090"; -} -.fa-trophy:before { - content: "\f091"; -} -.fa-github-square:before { - content: "\f092"; -} -.fa-upload:before { - content: "\f093"; -} -.fa-lemon-o:before { - content: "\f094"; -} -.fa-phone:before { - content: "\f095"; -} -.fa-square-o:before { - content: "\f096"; -} -.fa-bookmark-o:before { - content: "\f097"; -} -.fa-phone-square:before { - content: "\f098"; -} -.fa-twitter:before { - content: "\f099"; -} -.fa-facebook-f:before, -.fa-facebook:before { - content: "\f09a"; -} -.fa-github:before { - content: "\f09b"; -} -.fa-unlock:before { - content: "\f09c"; -} -.fa-credit-card:before { - content: "\f09d"; -} -.fa-rss:before { - content: "\f09e"; -} -.fa-hdd-o:before { - content: "\f0a0"; -} -.fa-bullhorn:before { - content: "\f0a1"; -} -.fa-bell:before { - content: "\f0f3"; -} -.fa-certificate:before { - content: "\f0a3"; -} -.fa-hand-o-right:before { - content: "\f0a4"; -} -.fa-hand-o-left:before { - content: "\f0a5"; -} -.fa-hand-o-up:before { - content: "\f0a6"; -} -.fa-hand-o-down:before { - content: "\f0a7"; -} -.fa-arrow-circle-left:before { - content: "\f0a8"; -} -.fa-arrow-circle-right:before { - content: "\f0a9"; -} -.fa-arrow-circle-up:before { - content: "\f0aa"; -} -.fa-arrow-circle-down:before { - content: "\f0ab"; -} -.fa-globe:before { - content: "\f0ac"; -} -.fa-wrench:before { - content: "\f0ad"; -} -.fa-tasks:before { - content: "\f0ae"; -} -.fa-filter:before { - content: "\f0b0"; -} -.fa-briefcase:before { - content: "\f0b1"; -} -.fa-arrows-alt:before { - content: "\f0b2"; -} -.fa-group:before, -.fa-users:before { - content: "\f0c0"; -} -.fa-chain:before, -.fa-link:before { - content: "\f0c1"; -} -.fa-cloud:before { - content: "\f0c2"; -} -.fa-flask:before { - content: "\f0c3"; -} -.fa-cut:before, -.fa-scissors:before { - content: "\f0c4"; -} -.fa-copy:before, -.fa-files-o:before { - content: "\f0c5"; -} -.fa-paperclip:before { - content: "\f0c6"; -} -.fa-save:before, -.fa-floppy-o:before { - content: "\f0c7"; -} -.fa-square:before { - content: "\f0c8"; -} -.fa-navicon:before, -.fa-reorder:before, -.fa-bars:before { - content: "\f0c9"; -} -.fa-list-ul:before { - content: "\f0ca"; -} -.fa-list-ol:before { - content: "\f0cb"; -} -.fa-strikethrough:before { - content: "\f0cc"; -} -.fa-underline:before { - content: "\f0cd"; -} -.fa-table:before { - content: "\f0ce"; -} -.fa-magic:before { - content: "\f0d0"; -} -.fa-truck:before { - content: "\f0d1"; -} -.fa-pinterest:before { - content: "\f0d2"; -} -.fa-pinterest-square:before { - content: "\f0d3"; -} -.fa-google-plus-square:before { - content: "\f0d4"; -} -.fa-google-plus:before { - content: "\f0d5"; -} -.fa-money:before { - content: "\f0d6"; -} -.fa-caret-down:before { - content: "\f0d7"; -} -.fa-caret-up:before { - content: "\f0d8"; -} -.fa-caret-left:before { - content: "\f0d9"; -} -.fa-caret-right:before { - content: "\f0da"; -} -.fa-columns:before { - content: "\f0db"; -} -.fa-unsorted:before, -.fa-sort:before { - content: "\f0dc"; -} -.fa-sort-down:before, -.fa-sort-desc:before { - content: "\f0dd"; -} -.fa-sort-up:before, -.fa-sort-asc:before { - content: "\f0de"; -} -.fa-envelope:before { - content: "\f0e0"; -} -.fa-linkedin:before { - content: "\f0e1"; -} -.fa-rotate-left:before, -.fa-undo:before { - content: "\f0e2"; -} -.fa-legal:before, -.fa-gavel:before { - content: "\f0e3"; -} -.fa-dashboard:before, -.fa-tachometer:before { - content: "\f0e4"; -} -.fa-comment-o:before { - content: "\f0e5"; -} -.fa-comments-o:before { - content: "\f0e6"; -} -.fa-flash:before, -.fa-bolt:before { - content: "\f0e7"; -} -.fa-sitemap:before { - content: "\f0e8"; -} -.fa-umbrella:before { - content: "\f0e9"; -} -.fa-paste:before, -.fa-clipboard:before { - content: "\f0ea"; -} -.fa-lightbulb-o:before { - content: "\f0eb"; -} -.fa-exchange:before { - content: "\f0ec"; -} -.fa-cloud-download:before { - content: "\f0ed"; -} -.fa-cloud-upload:before { - content: "\f0ee"; -} -.fa-user-md:before { - content: "\f0f0"; -} -.fa-stethoscope:before { - content: "\f0f1"; -} -.fa-suitcase:before { - content: "\f0f2"; -} -.fa-bell-o:before { - content: "\f0a2"; -} -.fa-coffee:before { - content: "\f0f4"; -} -.fa-cutlery:before { - content: "\f0f5"; -} -.fa-file-text-o:before { - content: "\f0f6"; -} -.fa-building-o:before { - content: "\f0f7"; -} -.fa-hospital-o:before { - content: "\f0f8"; -} -.fa-ambulance:before { - content: "\f0f9"; -} -.fa-medkit:before { - content: "\f0fa"; -} -.fa-fighter-jet:before { - content: "\f0fb"; -} -.fa-beer:before { - content: "\f0fc"; -} -.fa-h-square:before { - content: "\f0fd"; -} -.fa-plus-square:before { - content: "\f0fe"; -} -.fa-angle-double-left:before { - content: "\f100"; -} -.fa-angle-double-right:before { - content: "\f101"; -} -.fa-angle-double-up:before { - content: "\f102"; -} -.fa-angle-double-down:before { - content: "\f103"; -} -.fa-angle-left:before { - content: "\f104"; -} -.fa-angle-right:before { - content: "\f105"; -} -.fa-angle-up:before { - content: "\f106"; -} -.fa-angle-down:before { - content: "\f107"; -} -.fa-desktop:before { - content: "\f108"; -} -.fa-laptop:before { - content: "\f109"; -} -.fa-tablet:before { - content: "\f10a"; -} -.fa-mobile-phone:before, -.fa-mobile:before { - content: "\f10b"; -} -.fa-circle-o:before { - content: "\f10c"; -} -.fa-quote-left:before { - content: "\f10d"; -} -.fa-quote-right:before { - content: "\f10e"; -} -.fa-spinner:before { - content: "\f110"; -} -.fa-circle:before { - content: "\f111"; -} -.fa-mail-reply:before, -.fa-reply:before { - content: "\f112"; -} -.fa-github-alt:before { - content: "\f113"; -} -.fa-folder-o:before { - content: "\f114"; -} -.fa-folder-open-o:before { - content: "\f115"; -} -.fa-smile-o:before { - content: "\f118"; -} -.fa-frown-o:before { - content: "\f119"; -} -.fa-meh-o:before { - content: "\f11a"; -} -.fa-gamepad:before { - content: "\f11b"; -} -.fa-keyboard-o:before { - content: "\f11c"; -} -.fa-flag-o:before { - content: "\f11d"; -} -.fa-flag-checkered:before { - content: "\f11e"; -} -.fa-terminal:before { - content: "\f120"; -} -.fa-code:before { - content: "\f121"; -} -.fa-mail-reply-all:before, -.fa-reply-all:before { - content: "\f122"; -} -.fa-star-half-empty:before, -.fa-star-half-full:before, -.fa-star-half-o:before { - content: "\f123"; -} -.fa-location-arrow:before { - content: "\f124"; -} -.fa-crop:before { - content: "\f125"; -} -.fa-code-fork:before { - content: "\f126"; -} -.fa-unlink:before, -.fa-chain-broken:before { - content: "\f127"; -} -.fa-question:before { - content: "\f128"; -} -.fa-info:before { - content: "\f129"; -} -.fa-exclamation:before { - content: "\f12a"; -} -.fa-superscript:before { - content: "\f12b"; -} -.fa-subscript:before { - content: "\f12c"; -} -.fa-eraser:before { - content: "\f12d"; -} -.fa-puzzle-piece:before { - content: "\f12e"; -} -.fa-microphone:before { - content: "\f130"; -} -.fa-microphone-slash:before { - content: "\f131"; -} -.fa-shield:before { - content: "\f132"; -} -.fa-calendar-o:before { - content: "\f133"; -} -.fa-fire-extinguisher:before { - content: "\f134"; -} -.fa-rocket:before { - content: "\f135"; -} -.fa-maxcdn:before { - content: "\f136"; -} -.fa-chevron-circle-left:before { - content: "\f137"; -} -.fa-chevron-circle-right:before { - content: "\f138"; -} -.fa-chevron-circle-up:before { - content: "\f139"; -} -.fa-chevron-circle-down:before { - content: "\f13a"; -} -.fa-html5:before { - content: "\f13b"; -} -.fa-css3:before { - content: "\f13c"; -} -.fa-anchor:before { - content: "\f13d"; -} -.fa-unlock-alt:before { - content: "\f13e"; -} -.fa-bullseye:before { - content: "\f140"; -} -.fa-ellipsis-h:before { - content: "\f141"; -} -.fa-ellipsis-v:before { - content: "\f142"; -} -.fa-rss-square:before { - content: "\f143"; -} -.fa-play-circle:before { - content: "\f144"; -} -.fa-ticket:before { - content: "\f145"; -} -.fa-minus-square:before { - content: "\f146"; -} -.fa-minus-square-o:before { - content: "\f147"; -} -.fa-level-up:before { - content: "\f148"; -} -.fa-level-down:before { - content: "\f149"; -} -.fa-check-square:before { - content: "\f14a"; -} -.fa-pencil-square:before { - content: "\f14b"; -} -.fa-external-link-square:before { - content: "\f14c"; -} -.fa-share-square:before { - content: "\f14d"; -} -.fa-compass:before { - content: "\f14e"; -} -.fa-toggle-down:before, -.fa-caret-square-o-down:before { - content: "\f150"; -} -.fa-toggle-up:before, -.fa-caret-square-o-up:before { - content: "\f151"; -} -.fa-toggle-right:before, -.fa-caret-square-o-right:before { - content: "\f152"; -} -.fa-euro:before, -.fa-eur:before { - content: "\f153"; -} -.fa-gbp:before { - content: "\f154"; -} -.fa-dollar:before, -.fa-usd:before { - content: "\f155"; -} -.fa-rupee:before, -.fa-inr:before { - content: "\f156"; -} -.fa-cny:before, -.fa-rmb:before, -.fa-yen:before, -.fa-jpy:before { - content: "\f157"; -} -.fa-ruble:before, -.fa-rouble:before, -.fa-rub:before { - content: "\f158"; -} -.fa-won:before, -.fa-krw:before { - content: "\f159"; -} -.fa-bitcoin:before, -.fa-btc:before { - content: "\f15a"; -} -.fa-file:before { - content: "\f15b"; -} -.fa-file-text:before { - content: "\f15c"; -} -.fa-sort-alpha-asc:before { - content: "\f15d"; -} -.fa-sort-alpha-desc:before { - content: "\f15e"; -} -.fa-sort-amount-asc:before { - content: "\f160"; -} -.fa-sort-amount-desc:before { - content: "\f161"; -} -.fa-sort-numeric-asc:before { - content: "\f162"; -} -.fa-sort-numeric-desc:before { - content: "\f163"; -} -.fa-thumbs-up:before { - content: "\f164"; -} -.fa-thumbs-down:before { - content: "\f165"; -} -.fa-youtube-square:before { - content: "\f166"; -} -.fa-youtube:before { - content: "\f167"; -} -.fa-xing:before { - content: "\f168"; -} -.fa-xing-square:before { - content: "\f169"; -} -.fa-youtube-play:before { - content: "\f16a"; -} -.fa-dropbox:before { - content: "\f16b"; -} -.fa-stack-overflow:before { - content: "\f16c"; -} -.fa-instagram:before { - content: "\f16d"; -} -.fa-flickr:before { - content: "\f16e"; -} -.fa-adn:before { - content: "\f170"; -} -.fa-bitbucket:before { - content: "\f171"; -} -.fa-bitbucket-square:before { - content: "\f172"; -} -.fa-tumblr:before { - content: "\f173"; -} -.fa-tumblr-square:before { - content: "\f174"; -} -.fa-long-arrow-down:before { - content: "\f175"; -} -.fa-long-arrow-up:before { - content: "\f176"; -} -.fa-long-arrow-left:before { - content: "\f177"; -} -.fa-long-arrow-right:before { - content: "\f178"; -} -.fa-apple:before { - content: "\f179"; -} -.fa-windows:before { - content: "\f17a"; -} -.fa-android:before { - content: "\f17b"; -} -.fa-linux:before { - content: "\f17c"; -} -.fa-dribbble:before { - content: "\f17d"; -} -.fa-skype:before { - content: "\f17e"; -} -.fa-foursquare:before { - content: "\f180"; -} -.fa-trello:before { - content: "\f181"; -} -.fa-female:before { - content: "\f182"; -} -.fa-male:before { - content: "\f183"; -} -.fa-gittip:before, -.fa-gratipay:before { - content: "\f184"; -} -.fa-sun-o:before { - content: "\f185"; -} -.fa-moon-o:before { - content: "\f186"; -} -.fa-archive:before { - content: "\f187"; -} -.fa-bug:before { - content: "\f188"; -} -.fa-vk:before { - content: "\f189"; -} -.fa-weibo:before { - content: "\f18a"; -} -.fa-renren:before { - content: "\f18b"; -} -.fa-pagelines:before { - content: "\f18c"; -} -.fa-stack-exchange:before { - content: "\f18d"; -} -.fa-arrow-circle-o-right:before { - content: "\f18e"; -} -.fa-arrow-circle-o-left:before { - content: "\f190"; -} -.fa-toggle-left:before, -.fa-caret-square-o-left:before { - content: "\f191"; -} -.fa-dot-circle-o:before { - content: "\f192"; -} -.fa-wheelchair:before { - content: "\f193"; -} -.fa-vimeo-square:before { - content: "\f194"; -} -.fa-turkish-lira:before, -.fa-try:before { - content: "\f195"; -} -.fa-plus-square-o:before { - content: "\f196"; -} -.fa-space-shuttle:before { - content: "\f197"; -} -.fa-slack:before { - content: "\f198"; -} -.fa-envelope-square:before { - content: "\f199"; -} -.fa-wordpress:before { - content: "\f19a"; -} -.fa-openid:before { - content: "\f19b"; -} -.fa-institution:before, -.fa-bank:before, -.fa-university:before { - content: "\f19c"; -} -.fa-mortar-board:before, -.fa-graduation-cap:before { - content: "\f19d"; -} -.fa-yahoo:before { - content: "\f19e"; -} -.fa-google:before { - content: "\f1a0"; -} -.fa-reddit:before { - content: "\f1a1"; -} -.fa-reddit-square:before { - content: "\f1a2"; -} -.fa-stumbleupon-circle:before { - content: "\f1a3"; -} -.fa-stumbleupon:before { - content: "\f1a4"; -} -.fa-delicious:before { - content: "\f1a5"; -} -.fa-digg:before { - content: "\f1a6"; -} -.fa-pied-piper:before { - content: "\f1a7"; -} -.fa-pied-piper-alt:before { - content: "\f1a8"; -} -.fa-drupal:before { - content: "\f1a9"; -} -.fa-joomla:before { - content: "\f1aa"; -} -.fa-language:before { - content: "\f1ab"; -} -.fa-fax:before { - content: "\f1ac"; -} -.fa-building:before { - content: "\f1ad"; -} -.fa-child:before { - content: "\f1ae"; -} -.fa-paw:before { - content: "\f1b0"; -} -.fa-spoon:before { - content: "\f1b1"; -} -.fa-cube:before { - content: "\f1b2"; -} -.fa-cubes:before { - content: "\f1b3"; -} -.fa-behance:before { - content: "\f1b4"; -} -.fa-behance-square:before { - content: "\f1b5"; -} -.fa-steam:before { - content: "\f1b6"; -} -.fa-steam-square:before { - content: "\f1b7"; -} -.fa-recycle:before { - content: "\f1b8"; -} -.fa-automobile:before, -.fa-car:before { - content: "\f1b9"; -} -.fa-cab:before, -.fa-taxi:before { - content: "\f1ba"; -} -.fa-tree:before { - content: "\f1bb"; -} -.fa-spotify:before { - content: "\f1bc"; -} -.fa-deviantart:before { - content: "\f1bd"; -} -.fa-soundcloud:before { - content: "\f1be"; -} -.fa-database:before { - content: "\f1c0"; -} -.fa-file-pdf-o:before { - content: "\f1c1"; -} -.fa-file-word-o:before { - content: "\f1c2"; -} -.fa-file-excel-o:before { - content: "\f1c3"; -} -.fa-file-powerpoint-o:before { - content: "\f1c4"; -} -.fa-file-photo-o:before, -.fa-file-picture-o:before, -.fa-file-image-o:before { - content: "\f1c5"; -} -.fa-file-zip-o:before, -.fa-file-archive-o:before { - content: "\f1c6"; -} -.fa-file-sound-o:before, -.fa-file-audio-o:before { - content: "\f1c7"; -} -.fa-file-movie-o:before, -.fa-file-video-o:before { - content: "\f1c8"; -} -.fa-file-code-o:before { - content: "\f1c9"; -} -.fa-vine:before { - content: "\f1ca"; -} -.fa-codepen:before { - content: "\f1cb"; -} -.fa-jsfiddle:before { - content: "\f1cc"; -} -.fa-life-bouy:before, -.fa-life-buoy:before, -.fa-life-saver:before, -.fa-support:before, -.fa-life-ring:before { - content: "\f1cd"; -} -.fa-circle-o-notch:before { - content: "\f1ce"; -} -.fa-ra:before, -.fa-rebel:before { - content: "\f1d0"; -} -.fa-ge:before, -.fa-empire:before { - content: "\f1d1"; -} -.fa-git-square:before { - content: "\f1d2"; -} -.fa-git:before { - content: "\f1d3"; -} -.fa-hacker-news:before { - content: "\f1d4"; -} -.fa-tencent-weibo:before { - content: "\f1d5"; -} -.fa-qq:before { - content: "\f1d6"; -} -.fa-wechat:before, -.fa-weixin:before { - content: "\f1d7"; -} -.fa-send:before, -.fa-paper-plane:before { - content: "\f1d8"; -} -.fa-send-o:before, -.fa-paper-plane-o:before { - content: "\f1d9"; -} -.fa-history:before { - content: "\f1da"; -} -.fa-genderless:before, -.fa-circle-thin:before { - content: "\f1db"; -} -.fa-header:before { - content: "\f1dc"; -} -.fa-paragraph:before { - content: "\f1dd"; -} -.fa-sliders:before { - content: "\f1de"; -} -.fa-share-alt:before { - content: "\f1e0"; -} -.fa-share-alt-square:before { - content: "\f1e1"; -} -.fa-bomb:before { - content: "\f1e2"; -} -.fa-soccer-ball-o:before, -.fa-futbol-o:before { - content: "\f1e3"; -} -.fa-tty:before { - content: "\f1e4"; -} -.fa-binoculars:before { - content: "\f1e5"; -} -.fa-plug:before { - content: "\f1e6"; -} -.fa-slideshare:before { - content: "\f1e7"; -} -.fa-twitch:before { - content: "\f1e8"; -} -.fa-yelp:before { - content: "\f1e9"; -} -.fa-newspaper-o:before { - content: "\f1ea"; -} -.fa-wifi:before { - content: "\f1eb"; -} -.fa-calculator:before { - content: "\f1ec"; -} -.fa-paypal:before { - content: "\f1ed"; -} -.fa-google-wallet:before { - content: "\f1ee"; -} -.fa-cc-visa:before { - content: "\f1f0"; -} -.fa-cc-mastercard:before { - content: "\f1f1"; -} -.fa-cc-discover:before { - content: "\f1f2"; -} -.fa-cc-amex:before { - content: "\f1f3"; -} -.fa-cc-paypal:before { - content: "\f1f4"; -} -.fa-cc-stripe:before { - content: "\f1f5"; -} -.fa-bell-slash:before { - content: "\f1f6"; -} -.fa-bell-slash-o:before { - content: "\f1f7"; -} -.fa-trash:before { - content: "\f1f8"; -} -.fa-copyright:before { - content: "\f1f9"; -} -.fa-at:before { - content: "\f1fa"; -} -.fa-eyedropper:before { - content: "\f1fb"; -} -.fa-paint-brush:before { - content: "\f1fc"; -} -.fa-birthday-cake:before { - content: "\f1fd"; -} -.fa-area-chart:before { - content: "\f1fe"; -} -.fa-pie-chart:before { - content: "\f200"; -} -.fa-line-chart:before { - content: "\f201"; -} -.fa-lastfm:before { - content: "\f202"; -} -.fa-lastfm-square:before { - content: "\f203"; -} -.fa-toggle-off:before { - content: "\f204"; -} -.fa-toggle-on:before { - content: "\f205"; -} -.fa-bicycle:before { - content: "\f206"; -} -.fa-bus:before { - content: "\f207"; -} -.fa-ioxhost:before { - content: "\f208"; -} -.fa-angellist:before { - content: "\f209"; -} -.fa-cc:before { - content: "\f20a"; -} -.fa-shekel:before, -.fa-sheqel:before, -.fa-ils:before { - content: "\f20b"; -} -.fa-meanpath:before { - content: "\f20c"; -} -.fa-buysellads:before { - content: "\f20d"; -} -.fa-connectdevelop:before { - content: "\f20e"; -} -.fa-dashcube:before { - content: "\f210"; -} -.fa-forumbee:before { - content: "\f211"; -} -.fa-leanpub:before { - content: "\f212"; -} -.fa-sellsy:before { - content: "\f213"; -} -.fa-shirtsinbulk:before { - content: "\f214"; -} -.fa-simplybuilt:before { - content: "\f215"; -} -.fa-skyatlas:before { - content: "\f216"; -} -.fa-cart-plus:before { - content: "\f217"; -} -.fa-cart-arrow-down:before { - content: "\f218"; -} -.fa-diamond:before { - content: "\f219"; -} -.fa-ship:before { - content: "\f21a"; -} -.fa-user-secret:before { - content: "\f21b"; -} -.fa-motorcycle:before { - content: "\f21c"; -} -.fa-street-view:before { - content: "\f21d"; -} -.fa-heartbeat:before { - content: "\f21e"; -} -.fa-venus:before { - content: "\f221"; -} -.fa-mars:before { - content: "\f222"; -} -.fa-mercury:before { - content: "\f223"; -} -.fa-transgender:before { - content: "\f224"; -} -.fa-transgender-alt:before { - content: "\f225"; -} -.fa-venus-double:before { - content: "\f226"; -} -.fa-mars-double:before { - content: "\f227"; -} -.fa-venus-mars:before { - content: "\f228"; -} -.fa-mars-stroke:before { - content: "\f229"; -} -.fa-mars-stroke-v:before { - content: "\f22a"; -} -.fa-mars-stroke-h:before { - content: "\f22b"; -} -.fa-neuter:before { - content: "\f22c"; -} -.fa-facebook-official:before { - content: "\f230"; -} -.fa-pinterest-p:before { - content: "\f231"; -} -.fa-whatsapp:before { - content: "\f232"; -} -.fa-server:before { - content: "\f233"; -} -.fa-user-plus:before { - content: "\f234"; -} -.fa-user-times:before { - content: "\f235"; -} -.fa-hotel:before, -.fa-bed:before { - content: "\f236"; -} -.fa-viacoin:before { - content: "\f237"; -} -.fa-train:before { - content: "\f238"; -} -.fa-subway:before { - content: "\f239"; -} -.fa-medium:before { - content: "\f23a"; -}
@@ -1,125 +0,0 @@
-/* - -github.com style (c) Vasily Polovnyov <vast@whiteants.net> - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - color: #333; - background: #f8f8f8; - -webkit-text-size-adjust: none; -} - -.hljs-comment, -.diff .hljs-header, -.hljs-javadoc { - color: #998; - font-style: italic; -} - -.hljs-keyword, -.css .rule .hljs-keyword, -.hljs-winutils, -.nginx .hljs-title, -.hljs-subst, -.hljs-request, -.hljs-status { - color: #333; - font-weight: bold; -} - -.hljs-number, -.hljs-hexcolor, -.ruby .hljs-constant { - color: #008080; -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-phpdoc, -.hljs-dartdoc, -.tex .hljs-formula { - color: #d14; -} - -.hljs-title, -.hljs-id, -.scss .hljs-preprocessor { - color: #900; - font-weight: bold; -} - -.hljs-list .hljs-keyword, -.hljs-subst { - font-weight: normal; -} - -.hljs-class .hljs-title, -.hljs-type, -.vhdl .hljs-literal, -.tex .hljs-command { - color: #458; - font-weight: bold; -} - -.hljs-tag, -.hljs-tag .hljs-title, -.hljs-rule .hljs-property, -.django .hljs-tag .hljs-keyword { - color: #000080; - font-weight: normal; -} - -.hljs-attribute, -.hljs-variable, -.lisp .hljs-body, -.hljs-name { - color: #008080; -} - -.hljs-regexp { - color: #009926; -} - -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.lisp .hljs-keyword, -.clojure .hljs-keyword, -.scheme .hljs-keyword, -.tex .hljs-special, -.hljs-prompt { - color: #990073; -} - -.hljs-built_in { - color: #0086b3; -} - -.hljs-preprocessor, -.hljs-pragma, -.hljs-pi, -.hljs-doctype, -.hljs-shebang, -.hljs-cdata { - color: #999; - font-weight: bold; -} - -.hljs-deletion { - background: #fdd; -} - -.hljs-addition { - background: #dfd; -} - -.diff .hljs-change { - background: #0086b3; -} - -.hljs-chunk { - color: #aaa; -}
@@ -1,45 +0,0 @@
-@font-face { - font-family: 'H3RALD'; - src:url('../fonts/h3rald-eot.eot'); - src:url('../fonts/h3rald-eot.eot?#iefix') format('embedded-opentype'), - url('../fonts/h3rald-ttf.ttf') format('truetype'), - url('../fonts/h3rald-woff.woff') format('woff'), - url('../fonts/h3rald-svg.svg#h3rald') format('svg'); - font-weight: normal; - font-style: normal; -} - -.h3rald { - font-family: "H3RALD"; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: "\e7c4"; - display: inline; -} - -.h3rald:before { - content: "\e7c4"; -} - -.h3rald-header, .navbar a.h3rald.h3rald-header { - font-size: 50px; - color: @light-text-alt; - text-shadow: 0 1px 1px #111; - &:hover { - text-decoration: none; - } -} - -.h3rald-footer { - position: relative; - top: 3px; - font-size: 15px; - color: #fff; -} -
@@ -1,1085 +0,0 @@
- - -@font-face { - font-family: 'h3raldicons'; - src: url('../fonts/h3raldicons-eot.eot?shwbn9'); - src: url('../fonts/h3raldicons-eot.eot?shwbn9#iefix') format('embedded-opentype'), - url('../fonts/h3raldicons-ttf.ttf?shwbn9') format('truetype'), - url('../fonts/h3raldicons-woff.woff?shwbn9') format('woff'), - url('../fonts/h3raldicons-svg.svg?shwbn9#h3raldicons') format('svg'); - font-weight: normal; - font-style: normal; -} - -[class^="h3-"], [class*=" h3-"], .h3raldicon { - /* use !important to prevent issues with browser extensions that change fonts */ - font-family: 'h3raldicons' !important; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -/* Variables */ - - -@h3-css3-01: "\e900"; -@h3-html5-01: "\e901"; -@h3-prog-golang01: "\e902"; -@h3-prog-bash02: "\e903"; -@h3-prog-perl: "\e904"; -@h3-prog-rails: "\e905"; -@h3-prog-drupal: "\e907"; -@h3-prog-php01: "\e908"; -@h3-prog-nodejs01: "\e909"; -@h3-prog-nodejs02: "\e90a"; -@h3-prog-jquery: "\e90b"; -@h3-prog-lua01: "\e90c"; -@h3-prog-visualstudio: "\e90d"; -@h3-prog-java: "\e90e"; -@h3-prog-js02: "\e90f"; -@h3-prog-objc: "\e910"; -@h3-prog-ccplusplus: "\e911"; -@h3-prog-cplusplus: "\e912"; -@h3-prog-csharp: "\e913"; -@h3-prog-js01: "\e914"; -@h3-prog-ruby: "\e915"; -@h3-prog-c: "\e916"; -@h3-github-01: "\e918"; -@h3-instagram: "\e919"; -@h3-github-02: "\e91a"; -@h3-angularjs: "\e91b"; -@h3-prog-cakephp: "\e91d"; -@h3-dropbox: "\e91e"; -@h3-tl-toolbox: "\e91f"; -@h3-vc-fossil: "\e920"; -@h3-vc-bitbucket-01: "\e921"; -@h3-vc-git: "\e922"; -@h3-dbs-mongodb: "\e923"; -@h3-dbs-mysql: "\e924"; -@h3-os-apple: "\e925"; -@h3-os-linux: "\e926"; -@h3-os-win-04: "\e927"; -@h3-os-ios: "\e928"; -@h3-brw-chrome: "\e929"; -@h3-dbs-sqlite: "\e92a"; -@h3-os-osx_1: "\e92b"; -@h3-brw-firefox: "\e92c"; -@h3-brw-safari-01: "\e92d"; -@h3-brw-safari-02: "\e92e"; -@h3-brw-explorer: "\e92f"; -@h3-brw-opera: "\e930"; -@h3-android: "\e931"; -@h3-hc-book-02: "\e932"; -@h3-lb-book-01: "\e933"; -@h3-lb-book-02: "\e934"; -@h3-calendar-empty: "\e936"; -@h3-terminal: "\e937"; -@h3-clock: "\e938"; -@h3-windows: "\e939"; -@h3-twitter: "\e93b"; -@h3-twitter-alt: "\e93c"; -@h3-stumble_upon: "\e93d"; -@h3-skype: "\e93e"; -@h3-share: "\e93f"; -@h3-reddit: "\e940"; -@h3-rss: "\e941"; -@h3-paypal: "\e942"; -@h3-mail: "\e943"; -@h3-amazon: "\e944"; -@h3-tags: "\e945"; -@h3-pin-3: "\e947"; -@h3-tag: "\e948"; -@h3-tablet: "\e949"; -@h3-mobile: "\e94b"; -@h3-google: "\e94c"; -@h3-gmail: "\e94d"; -@h3-foursquare_2: "\e94e"; -@h3-com-laptop: "\e950"; -@h3-foursquare_1: "\e951"; -@h3-linkedin: "\e952"; -@h3-anchor: "\e906"; -@h3-axe: "\e917"; -@h3-battered-axe: "\e91c"; -@h3-bolt-shield: "\e935"; -@h3-book: "\e93a"; -@h3-broadsword: "\e946"; -@h3-broken-shield: "\e94a"; -@h3-burning-embers: "\e94f"; -@h3-campfire: "\e954"; -@h3-candle-fire: "\e957"; -@h3-candle: "\e958"; -@h3-capitol: "\e95a"; -@h3-castle-emblem: "\e95d"; -@h3-clockwork: "\e969"; -@h3-clovers-card: "\e96b"; -@h3-cog: "\e970"; -@h3-cracked-shield: "\e976"; -@h3-crossed-axes: "\e979"; -@h3-crossed-sabres: "\e97c"; -@h3-crossed-swords: "\e97d"; -@h3-crystal-ball: "\e982"; -@h3-daggers: "\e989"; -@h3-diamond: "\e992"; -@h3-diamonds-card: "\e993"; -@h3-diamonds: "\e994"; -@h3-dice-five: "\e995"; -@h3-dice-four: "\e996"; -@h3-dice-one: "\e997"; -@h3-dice-six: "\e998"; -@h3-dice-three: "\e999"; -@h3-dice-two: "\e99a"; -@h3-emerald: "\e9af"; -@h3-eye-shield: "\e9b4"; -@h3-feather-wing: "\e9bb"; -@h3-feathered-wing: "\e9bc"; -@h3-fire-shield: "\e9c1"; -@h3-fire: "\e9c3"; -@h3-fizzing-flask: "\e9c6"; -@h3-flame-symbol: "\e9c7"; -@h3-flat-hammer: "\e9cc"; -@h3-forging: "\e9d3"; -@h3-gear-hammer: "\e9db"; -@h3-hammer: "\e9ee"; -@h3-hand-emblem: "\e9ef"; -@h3-hearts-card: "\e9f9"; -@h3-heavy-shield: "\e9fd"; -@h3-helmet: "\e9fe"; -@h3-help: "\e9ff"; -@h3-hydra: "\ea0b"; -@h3-ice-cube: "\ea0c"; -@h3-jigsaw-piece: "\ea12"; -@h3-kettlebell: "\ea14"; -@h3-key: "\ea16"; -@h3-knife: "\ea19"; -@h3-large-hammer: "\ea1d"; -@h3-leaf: "\ea21"; -@h3-lightning-bolt: "\ea2d"; -@h3-lightning-trio: "\ea30"; -@h3-load: "\ea34"; -@h3-match: "\ea3a"; -@h3-musket: "\ea49"; -@h3-nuclear: "\ea4d"; -@h3-octopus: "\ea50"; -@h3-overhead: "\ea54"; -@h3-perspective-dice-five: "\ea59"; -@h3-perspective-dice-four: "\ea5a"; -@h3-perspective-dice-one: "\ea5b"; -@h3-perspective-dice-random: "\ea5c"; -@h3-perspective-dice-six-two: "\ea5d"; -@h3-perspective-dice-six: "\ea5e"; -@h3-perspective-dice-three: "\ea5f"; -@h3-potion: "\ea72"; -@h3-quill-ink: "\ea75"; -@h3-raven: "\ea7a"; -@h3-relic-blade: "\ea7e"; -@h3-round-shield: "\ea87"; -@h3-rune-stone: "\ea89"; -@h3-sapphire: "\ea8b"; -@h3-save: "\ea8d"; -@h3-scroll-unfurled: "\ea8f"; -@h3-seagull: "\ea92"; -@h3-shield: "\ea96"; -@h3-sickle: "\ea9d"; -@h3-sideswipe: "\ea9e"; -@h3-small-fire: "\eaa3"; -@h3-spades-card: "\eaa9"; -@h3-speech-bubble: "\eaad"; -@h3-speech-bubbles: "\eaae"; -@h3-target-arrows: "\eac3"; -@h3-telescope: "\eac7"; -@h3-three-keys: "\eacc"; -@h3-tower: "\ead2"; -@h3-trefoil-lily: "\ead4"; -@h3-trident: "\ead5"; -@h3-trophy: "\ead7"; -@h3-underhand: "\eadc"; -@h3-vase: "\eade"; -@h3-vial: "\eae1"; -@h3-wooden-sign: "\eae9"; -@h3-wyvern: "\eaeb"; - -/* Classes */ - -.h3-css3-01 { - &:before { - content: @h3-css3-01; - } -} -.h3-html5-01 { - &:before { - content: @h3-html5-01; - } -} -.h3-prog-golang01 { - &:before { - content: @h3-prog-golang01; - } -} -.h3-prog-bash02 { - &:before { - content: @h3-prog-bash02; - } -} -.h3-prog-perl { - &:before { - content: @h3-prog-perl; - } -} -.h3-prog-rails { - &:before { - content: @h3-prog-rails; - } -} -.h3-prog-drupal { - &:before { - content: @h3-prog-drupal; - } -} -.h3-prog-php01 { - &:before { - content: @h3-prog-php01; - } -} -.h3-prog-nodejs01 { - &:before { - content: @h3-prog-nodejs01; - } -} -.h3-prog-nodejs02 { - &:before { - content: @h3-prog-nodejs02; - } -} -.h3-prog-jquery { - &:before { - content: @h3-prog-jquery; - } -} -.h3-prog-lua01 { - &:before { - content: @h3-prog-lua01; - } -} -.h3-prog-visualstudio { - &:before { - content: @h3-prog-visualstudio; - } -} -.h3-prog-java { - &:before { - content: @h3-prog-java; - } -} -.h3-prog-js02 { - &:before { - content: @h3-prog-js02; - } -} -.h3-prog-objc { - &:before { - content: @h3-prog-objc; - } -} -.h3-prog-ccplusplus { - &:before { - content: @h3-prog-ccplusplus; - } -} -.h3-prog-cplusplus { - &:before { - content: @h3-prog-cplusplus; - } -} -.h3-prog-csharp { - &:before { - content: @h3-prog-csharp; - } -} -.h3-prog-js01 { - &:before { - content: @h3-prog-js01; - } -} -.h3-prog-ruby { - &:before { - content: @h3-prog-ruby; - } -} -.h3-prog-c { - &:before { - content: @h3-prog-c; - } -} -.h3-github-01 { - &:before { - content: @h3-github-01; - } -} -.h3-instagram { - &:before { - content: @h3-instagram; - } -} -.h3-github-02 { - &:before { - content: @h3-github-02; - } -} -.h3-angularjs { - &:before { - content: @h3-angularjs; - } -} -.h3-prog-cakephp { - &:before { - content: @h3-prog-cakephp; - } -} -.h3-dropbox { - &:before { - content: @h3-dropbox; - } -} -.h3-tl-toolbox { - &:before { - content: @h3-tl-toolbox; - } -} -.h3-vc-fossil { - &:before { - content: @h3-vc-fossil; - } -} -.h3-vc-bitbucket-01 { - &:before { - content: @h3-vc-bitbucket-01; - } -} -.h3-vc-git { - &:before { - content: @h3-vc-git; - } -} -.h3-dbs-mongodb { - &:before { - content: @h3-dbs-mongodb; - } -} -.h3-dbs-mysql { - &:before { - content: @h3-dbs-mysql; - } -} -.h3-os-apple { - &:before { - content: @h3-os-apple; - } -} -.h3-os-linux { - &:before { - content: @h3-os-linux; - } -} -.h3-os-win-04 { - &:before { - content: @h3-os-win-04; - } -} -.h3-os-ios { - &:before { - content: @h3-os-ios; - } -} -.h3-brw-chrome { - &:before { - content: @h3-brw-chrome; - } -} -.h3-dbs-sqlite { - &:before { - content: @h3-dbs-sqlite; - } -} -.h3-os-osx_1 { - &:before { - content: @h3-os-osx_1; - } -} -.h3-brw-firefox { - &:before { - content: @h3-brw-firefox; - } -} -.h3-brw-safari-01 { - &:before { - content: @h3-brw-safari-01; - } -} -.h3-brw-safari-02 { - &:before { - content: @h3-brw-safari-02; - } -} -.h3-brw-explorer { - &:before { - content: @h3-brw-explorer; - } -} -.h3-brw-opera { - &:before { - content: @h3-brw-opera; - } -} -.h3-android { - &:before { - content: @h3-android; - } -} -.h3-hc-book-02 { - &:before { - content: @h3-hc-book-02; - } -} -.h3-lb-book-01 { - &:before { - content: @h3-lb-book-01; - } -} -.h3-lb-book-02 { - &:before { - content: @h3-lb-book-02; - } -} -.h3-calendar-empty { - &:before { - content: @h3-calendar-empty; - } -} -.h3-terminal { - &:before { - content: @h3-terminal; - } -} -.h3-clock { - &:before { - content: @h3-clock; - } -} -.h3-windows { - &:before { - content: @h3-windows; - } -} -.h3-twitter { - &:before { - content: @h3-twitter; - } -} -.h3-twitter-alt { - &:before { - content: @h3-twitter-alt; - } -} -.h3-stumble_upon { - &:before { - content: @h3-stumble_upon; - } -} -.h3-skype { - &:before { - content: @h3-skype; - } -} -.h3-share { - &:before { - content: @h3-share; - } -} -.h3-reddit { - &:before { - content: @h3-reddit; - } -} -.h3-rss { - &:before { - content: @h3-rss; - } -} -.h3-paypal { - &:before { - content: @h3-paypal; - } -} -.h3-mail { - &:before { - content: @h3-mail; - } -} -.h3-amazon { - &:before { - content: @h3-amazon; - } -} -.h3-tags { - &:before { - content: @h3-tags; - } -} -.h3-pin-3 { - &:before { - content: @h3-pin-3; - } -} -.h3-tag { - &:before { - content: @h3-tag; - } -} -.h3-tablet { - &:before { - content: @h3-tablet; - } -} -.h3-mobile { - &:before { - content: @h3-mobile; - } -} -.h3-google { - &:before { - content: @h3-google; - } -} -.h3-gmail { - &:before { - content: @h3-gmail; - } -} -.h3-foursquare_2 { - &:before { - content: @h3-foursquare_2; - } -} -.h3-com-laptop { - &:before { - content: @h3-com-laptop; - } -} -.h3-foursquare_1 { - &:before { - content: @h3-foursquare_1; - } -} -.h3-linkedin { - &:before { - content: @h3-linkedin; - } -} -.h3-anchor { - &:before { - content: @h3-anchor; - } -} -.h3-axe { - &:before { - content: @h3-axe; - } -} -.h3-battered-axe { - &:before { - content: @h3-battered-axe; - } -} -.h3-bolt-shield { - &:before { - content: @h3-bolt-shield; - } -} -.h3-book { - &:before { - content: @h3-book; - } -} -.h3-broadsword { - &:before { - content: @h3-broadsword; - } -} -.h3-broken-shield { - &:before { - content: @h3-broken-shield; - } -} -.h3-burning-embers { - &:before { - content: @h3-burning-embers; - } -} -.h3-campfire { - &:before { - content: @h3-campfire; - } -} -.h3-candle-fire { - &:before { - content: @h3-candle-fire; - } -} -.h3-candle { - &:before { - content: @h3-candle; - } -} -.h3-capitol { - &:before { - content: @h3-capitol; - } -} -.h3-castle-emblem { - &:before { - content: @h3-castle-emblem; - } -} -.h3-clockwork { - &:before { - content: @h3-clockwork; - } -} -.h3-clovers-card { - &:before { - content: @h3-clovers-card; - } -} -.h3-cog { - &:before { - content: @h3-cog; - } -} -.h3-cracked-shield { - &:before { - content: @h3-cracked-shield; - } -} -.h3-crossed-axes { - &:before { - content: @h3-crossed-axes; - } -} -.h3-crossed-sabres { - &:before { - content: @h3-crossed-sabres; - } -} -.h3-crossed-swords { - &:before { - content: @h3-crossed-swords; - } -} -.h3-crystal-ball { - &:before { - content: @h3-crystal-ball; - } -} -.h3-daggers { - &:before { - content: @h3-daggers; - } -} -.h3-diamond { - &:before { - content: @h3-diamond; - } -} -.h3-diamonds-card { - &:before { - content: @h3-diamonds-card; - } -} -.h3-diamonds { - &:before { - content: @h3-diamonds; - } -} -.h3-dice-five { - &:before { - content: @h3-dice-five; - } -} -.h3-dice-four { - &:before { - content: @h3-dice-four; - } -} -.h3-dice-one { - &:before { - content: @h3-dice-one; - } -} -.h3-dice-six { - &:before { - content: @h3-dice-six; - } -} -.h3-dice-three { - &:before { - content: @h3-dice-three; - } -} -.h3-dice-two { - &:before { - content: @h3-dice-two; - } -} -.h3-emerald { - &:before { - content: @h3-emerald; - } -} -.h3-eye-shield { - &:before { - content: @h3-eye-shield; - } -} -.h3-feather-wing { - &:before { - content: @h3-feather-wing; - } -} -.h3-feathered-wing { - &:before { - content: @h3-feathered-wing; - } -} -.h3-fire-shield { - &:before { - content: @h3-fire-shield; - } -} -.h3-fire { - &:before { - content: @h3-fire; - } -} -.h3-fizzing-flask { - &:before { - content: @h3-fizzing-flask; - } -} -.h3-flame-symbol { - &:before { - content: @h3-flame-symbol; - } -} -.h3-flat-hammer { - &:before { - content: @h3-flat-hammer; - } -} -.h3-forging { - &:before { - content: @h3-forging; - } -} -.h3-gear-hammer { - &:before { - content: @h3-gear-hammer; - } -} -.h3-hammer { - &:before { - content: @h3-hammer; - } -} -.h3-hand-emblem { - &:before { - content: @h3-hand-emblem; - } -} -.h3-hearts-card { - &:before { - content: @h3-hearts-card; - } -} -.h3-heavy-shield { - &:before { - content: @h3-heavy-shield; - } -} -.h3-helmet { - &:before { - content: @h3-helmet; - } -} -.h3-help { - &:before { - content: @h3-help; - } -} -.h3-hydra { - &:before { - content: @h3-hydra; - } -} -.h3-ice-cube { - &:before { - content: @h3-ice-cube; - } -} -.h3-jigsaw-piece { - &:before { - content: @h3-jigsaw-piece; - } -} -.h3-kettlebell { - &:before { - content: @h3-kettlebell; - } -} -.h3-key { - &:before { - content: @h3-key; - } -} -.h3-knife { - &:before { - content: @h3-knife; - } -} -.h3-large-hammer { - &:before { - content: @h3-large-hammer; - } -} -.h3-leaf { - &:before { - content: @h3-leaf; - } -} -.h3-lightning-bolt { - &:before { - content: @h3-lightning-bolt; - } -} -.h3-lightning-trio { - &:before { - content: @h3-lightning-trio; - } -} -.h3-load { - &:before { - content: @h3-load; - } -} -.h3-match { - &:before { - content: @h3-match; - } -} -.h3-musket { - &:before { - content: @h3-musket; - } -} -.h3-nuclear { - &:before { - content: @h3-nuclear; - } -} -.h3-octopus { - &:before { - content: @h3-octopus; - } -} -.h3-overhead { - &:before { - content: @h3-overhead; - } -} -.h3-perspective-dice-five { - &:before { - content: @h3-perspective-dice-five; - } -} -.h3-perspective-dice-four { - &:before { - content: @h3-perspective-dice-four; - } -} -.h3-perspective-dice-one { - &:before { - content: @h3-perspective-dice-one; - } -} -.h3-perspective-dice-random { - &:before { - content: @h3-perspective-dice-random; - } -} -.h3-perspective-dice-six-two { - &:before { - content: @h3-perspective-dice-six-two; - } -} -.h3-perspective-dice-six { - &:before { - content: @h3-perspective-dice-six; - } -} -.h3-perspective-dice-three { - &:before { - content: @h3-perspective-dice-three; - } -} -.h3-potion { - &:before { - content: @h3-potion; - } -} -.h3-quill-ink { - &:before { - content: @h3-quill-ink; - } -} -.h3-raven { - &:before { - content: @h3-raven; - } -} -.h3-relic-blade { - &:before { - content: @h3-relic-blade; - } -} -.h3-round-shield { - &:before { - content: @h3-round-shield; - } -} -.h3-rune-stone { - &:before { - content: @h3-rune-stone; - } -} -.h3-sapphire { - &:before { - content: @h3-sapphire; - } -} -.h3-save { - &:before { - content: @h3-save; - } -} -.h3-scroll-unfurled { - &:before { - content: @h3-scroll-unfurled; - } -} -.h3-seagull { - &:before { - content: @h3-seagull; - } -} -.h3-shield { - &:before { - content: @h3-shield; - } -} -.h3-sickle { - &:before { - content: @h3-sickle; - } -} -.h3-sideswipe { - &:before { - content: @h3-sideswipe; - } -} -.h3-small-fire { - &:before { - content: @h3-small-fire; - } -} -.h3-spades-card { - &:before { - content: @h3-spades-card; - } -} -.h3-speech-bubble { - &:before { - content: @h3-speech-bubble; - } -} -.h3-speech-bubbles { - &:before { - content: @h3-speech-bubbles; - } -} -.h3-target-arrows { - &:before { - content: @h3-target-arrows; - } -} -.h3-telescope { - &:before { - content: @h3-telescope; - } -} -.h3-three-keys { - &:before { - content: @h3-three-keys; - } -} -.h3-tower { - &:before { - content: @h3-tower; - } -} -.h3-trefoil-lily { - &:before { - content: @h3-trefoil-lily; - } -} -.h3-trident { - &:before { - content: @h3-trident; - } -} -.h3-trophy { - &:before { - content: @h3-trophy; - } -} -.h3-underhand { - &:before { - content: @h3-underhand; - } -} -.h3-vase { - &:before { - content: @h3-vase; - } -} -.h3-vial { - &:before { - content: @h3-vial; - } -} -.h3-wooden-sign { - &:before { - content: @h3-wooden-sign; - } -} -.h3-wyvern { - &:before { - content: @h3-wyvern; - } -} -
@@ -1,26 +0,0 @@
-@font-face { - font-family: 'HastyScribe'; - src:url('../fonts/hastyscribe-eot.eot'); - src:url('../fonts/hastyscribe-eot.eot?#iefix') format('embedded-opentype'), - url('../fonts/hastyscribe-ttf.ttf') format('truetype'), - url('../fonts/hastyscribe-woff.woff') format('woff'), - url('../fonts/hastyscribe-svg.svg#hastyscribe') format('svg'); - font-weight: normal; - font-style: normal; -} - -.hastyscribe:before { - font-family: "HastyScribe"; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - font-size: 150%; - vertical-align: bottom; - line-height: 0.7; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - display: inline; - content: "H"; -}
@@ -1,15 +0,0 @@
-/* Generated by Font Squirrel (http://www.fontsquirrel.com) on April 19, 2015 */ - - -@font-face { - font-family: 'Inconsolata'; - src: url('../fonts/inconsolata-eot.eot'); - src: url('../fonts/inconsolata-eot.eot?#iefix') format('embedded-opentype'), - url('../fonts/inconsolata-woff2.woff2') format('woff2'), - url('../fonts/inconsolata-woff.woff') format('woff'), - url('../fonts/inconsolata-ttf.ttf') format('truetype'), - url('../fonts/inconsolata-svg#inconsolatamedium.svg#Inconsolata') format('svg'); - font-weight: normal; - font-style: normal; - -}
@@ -1,255 +0,0 @@
-body { - font-family: @font-family-text; - .normal-ligatures; - .hyphens; -} - -.container h1, -.container h2, -.container h3, -.container h4, -.container h5, -.container h6, -.container h1 > a, -.container h2 > a { - .fancy-ligatures; - color: @dark-text; - text-decoration: none; -} - -a { - .fancy-ligatures; -} - -code, pre { - .no-hyphens; -} - -sup { - .sups; -} - -sub { - .subs; -} - -article, #legacy-comments, #disqus_thread { - line-height: 1.4em; - font-size: 16px; - color: @normal-text; - - p { - margin: 1em 0; - } - - li, dt, dd { - line-height: 1.8em - } - .article-info li, .dropdown-menu li { - &:before { - content: none; - } - } - dt { - margin-top: 1.8em; - } -} - -/* Headings */ - -#main-content > article h2 { - line-height: 1em; - font-size: 1.6em; -} -#main-content > article h3 { - margin-top: 0; - line-height: 1em; - font-size: 1.3em; - color: lighten(@text-color, 20%); - font-style: italic; -} - -article.page > header h1 { - font-size: 2em; - margin-top: 0; - margin-bottom: 0; -} - -#secondary-content > article h2 { - line-height: 1.2em; - font-size: 1.3em; -} - -#secondary-content > article h3 { - margin-top: 0; - line-height: 1em; - color: lighten(@text-color, 20%); - font-size: 1em; - font-style: italic; - } - -#body-text section header h1, -footer h2, -#body-text h2 { - font-size: 1.8em; -} -h1 > code { - font-size: 0.9em; - border:none; - color: #000; - background:none; -} - -article.page > header h2, -#body-text section section header h1, -#body-text h3, -h1.toc-header { - margin-top: 1.2em; - font-size: 1.5em; - font-style: italic; -} - -article.page > header h2 { - margin: 0 0 1em 0; - font-size: 1.3em; - line-height: 1.2em; - color: #999; -} - -#body-text section section section header h1, -#body-text h4 { - margin-top: 1.2em; - font-size: 1.3em; -} - -#body-text section section section section header h1, -#body-text h5 { - margin-top: 1em; - font-size: 1em; - font-style: italic; -} - -#body-text section section section section section header h1, -#body-text h6 { - margin-top: 1em; - font-size: 1em; -} - -h1, h2, h3, h4, h5, h6 { - line-height: 1.2em; - text-align: left; - border-bottom: none; - font-weight: 400; -} - -#body-text .projects-page h3 { - .h3-vial; - margin-top: 1.2em; - font-size: 1.5em; - color: @link-color; - &:hover { - color: @link-hover-color; - } -} - -.article-aggregation i { - &:before { - color: #b3b3b3; - } -} - -/* HastyStyles Overrides */ - -article #body-text { - h2, h3, h4, h5, h6 { - .h3-hc-book-02; - &:before { - .h3raldicon; - color: lighten(@dark-text, 70%); - font-style: normal !important; - } - } - h2.centered, h3.centered, h4.centered, h5.centered, h6.centered { - text-align: center; - margin: auto; - &:before { - content: none; - } - } - -} - -a[href^="http://"], -a[href^="https://"], -a[href^="ftp://"], -a[href^="sftp://"]{ - &:before { - content: none; - } -} - -.article-info .tag, -code .tag, -ul.dropdown-menu a, -a[href].btn, -footer a[href] { - &:before { - content: ""; - } -} - -a.btn { color: #fff; } -a.btn-default { color: #333; } - -code, .code, pre, pre code { - font-size: @code-size; - line-height: 1.4em; - .tag { - &:before { - content: none; - } - } -} - -.navbar .input-group { - box-shadow: none; -} - -.hastyscribe { - margin-right: 1%; -} - -dl { - clear: both; - - dt { - float: none; - clear: none; - width: 20%; - text-align: right; - font-weight: bold; - } - - dd { - margin: 0 0 0 22%; - padding: 0 0 0.5em 0; - } -} - -.note, .tip, .warning, -.sidebar, .terminal, .terminal-su, -pre, blockquote { - max-width: 850px; -} - -hr { - border: 0; - height: 1em; - background-image: none; - position: relative; - &:before { - content: "\2749\00a0\00a0\2749\00a0\00a0\2749"; - font-size: 0.6em; - padding-left: 48%; - } -}
@@ -1,65 +0,0 @@
-/* Google Custom Search Engine */ - -.gsc-search-button input.gsc-search-button-v2 { - height: 29px; - width: 71px; - margin-top: 4px; -} - -.gsc-srarch-box, .gs-title, .gs-visibleUrl, .gsc-result-info { - font-family: @font-family-text; -} - -.gs-snippet { - margin-left: 8px; -} - -.gsc-input { - padding: 0; -} - -.gsc-cursor-page { - color: #428BCA; -} - -.gsc-cursor-page:hover { - color: #2a6496; -} - -.gsc-cursor-page.gsc-cursor-current-page { - color: #333; -} - -.gsc-input .gsc-input-box { - height: 29px; -} -.gsc-search-box-tools .gsc-search-box .gsc-input { - padding-right: 5px !important; -} - -.gsc-search-box tr, { - padding: 0; -} - -#___gcse_1 .gsc-control-cse { - padding: 0; -} - -#___gcse_0 { - margin-top: 15px; -} - -/* Disqus */ - -#disqus_thread { - margin: 0 10px; - #dsq-content { - font-size: 0.93em; - .dsq-request-user-name small, .dsq-subscribe small, .dsq-sharing-options span small { - font-size: 0.8em; - } - .dsq-comment-body { - margin: 0 10px; - } - } -}
@@ -1,21832 +0,0 @@
-{ - "metadata": { - "name": "h3rald-font", - "lastOpened": 1450964180974, - "created": 1450964175818 - }, - "iconSets": [ - { - "selection": [ - { - "order": 209, - "id": 74, - "prevSize": 32, - "code": 59648, - "name": "css3-01", - "tempChar": "" - }, - { - "order": 210, - "id": 73, - "prevSize": 32, - "code": 59649, - "name": "html5-01", - "tempChar": "" - }, - { - "order": 211, - "id": 72, - "prevSize": 32, - "code": 59650, - "name": "prog-golang01", - "tempChar": "" - }, - { - "order": 212, - "id": 71, - "prevSize": 32, - "code": 59651, - "name": "prog-bash02", - "tempChar": "" - }, - { - "order": 213, - "id": 70, - "prevSize": 32, - "code": 59652, - "name": "prog-perl", - "tempChar": "" - }, - { - "order": 214, - "id": 69, - "prevSize": 32, - "code": 59653, - "name": "prog-rails", - "tempChar": "" - }, - { - "order": 215, - "id": 68, - "prevSize": 32, - "code": 59655, - "name": "prog-drupal", - "tempChar": "" - }, - { - "order": 216, - "id": 67, - "prevSize": 32, - "code": 59656, - "name": "prog-php01", - "tempChar": "" - }, - { - "order": 217, - "id": 66, - "prevSize": 32, - "code": 59657, - "name": "prog-nodejs01", - "tempChar": "" - }, - { - "order": 218, - "id": 65, - "prevSize": 32, - "code": 59658, - "name": "prog-nodejs02", - "tempChar": "" - }, - { - "order": 219, - "id": 64, - "prevSize": 32, - "code": 59659, - "name": "prog-jquery", - "tempChar": "" - }, - { - "order": 220, - "id": 63, - "prevSize": 32, - "code": 59660, - "name": "prog-lua01", - "tempChar": "" - }, - { - "order": 221, - "id": 62, - "prevSize": 32, - "code": 59661, - "name": "prog-visualstudio", - "tempChar": "" - }, - { - "order": 222, - "id": 61, - "prevSize": 32, - "code": 59662, - "name": "prog-java", - "tempChar": "" - }, - { - "order": 223, - "id": 60, - "prevSize": 32, - "code": 59663, - "name": "prog-js02", - "tempChar": "" - }, - { - "order": 224, - "id": 59, - "prevSize": 32, - "code": 59664, - "name": "prog-objc", - "tempChar": "" - }, - { - "order": 225, - "id": 58, - "prevSize": 32, - "code": 59665, - "name": "prog-ccplusplus", - "tempChar": "" - }, - { - "order": 226, - "id": 57, - "prevSize": 32, - "code": 59666, - "name": "prog-cplusplus", - "tempChar": "" - }, - { - "order": 227, - "id": 56, - "prevSize": 32, - "code": 59667, - "name": "prog-csharp", - "tempChar": "" - }, - { - "order": 228, - "id": 55, - "prevSize": 32, - "code": 59668, - "name": "prog-js01", - "tempChar": "" - }, - { - "order": 229, - "id": 54, - "prevSize": 32, - "code": 59669, - "name": "prog-ruby", - "tempChar": "" - }, - { - "order": 230, - "id": 53, - "prevSize": 32, - "code": 59670, - "name": "prog-c", - "tempChar": "" - }, - { - "order": 231, - "id": 52, - "prevSize": 32, - "code": 59672, - "name": "github-01", - "tempChar": "" - }, - { - "order": 232, - "id": 51, - "prevSize": 32, - "code": 59673, - "name": "instagram", - "tempChar": "" - }, - { - "order": 233, - "id": 50, - "prevSize": 32, - "code": 59674, - "name": "github-02", - "tempChar": "" - }, - { - "order": 234, - "id": 49, - "prevSize": 32, - "code": 59675, - "name": "angularjs", - "tempChar": "" - }, - { - "order": 235, - "id": 48, - "prevSize": 32, - "code": 59677, - "name": "prog-cakephp", - "tempChar": "" - }, - { - "order": 236, - "id": 47, - "prevSize": 32, - "code": 59678, - "name": "dropbox", - "tempChar": "" - }, - { - "order": 237, - "id": 46, - "prevSize": 32, - "code": 59679, - "name": "tl-toolbox", - "tempChar": "" - }, - { - "order": 238, - "id": 45, - "prevSize": 32, - "code": 59680, - "name": "vc-fossil", - "tempChar": "" - }, - { - "order": 239, - "id": 44, - "prevSize": 32, - "code": 59681, - "name": "vc-bitbucket-01", - "tempChar": "" - }, - { - "order": 240, - "id": 43, - "prevSize": 32, - "code": 59682, - "name": "vc-git", - "tempChar": "" - }, - { - "order": 241, - "id": 42, - "prevSize": 32, - "code": 59683, - "name": "dbs-mongodb", - "tempChar": "" - }, - { - "order": 242, - "id": 41, - "prevSize": 32, - "code": 59684, - "name": "dbs-mysql", - "tempChar": "" - }, - { - "order": 243, - "id": 40, - "prevSize": 32, - "code": 59685, - "name": "os-apple", - "tempChar": "" - }, - { - "order": 244, - "id": 39, - "prevSize": 32, - "code": 59686, - "name": "os-linux", - "tempChar": "" - }, - { - "order": 245, - "id": 38, - "prevSize": 32, - "code": 59687, - "name": "os-win-04", - "tempChar": "" - }, - { - "order": 246, - "id": 37, - "prevSize": 32, - "code": 59688, - "name": "os-ios", - "tempChar": "" - }, - { - "order": 247, - "id": 36, - "prevSize": 32, - "code": 59689, - "name": "brw-chrome", - "tempChar": "" - }, - { - "order": 248, - "id": 35, - "prevSize": 32, - "code": 59690, - "name": "dbs-sqlite", - "tempChar": "" - }, - { - "order": 249, - "id": 34, - "prevSize": 32, - "code": 59691, - "name": "os-osx_1", - "tempChar": "" - }, - { - "order": 250, - "id": 33, - "prevSize": 32, - "code": 59692, - "name": "brw-firefox", - "tempChar": "" - }, - { - "order": 251, - "id": 32, - "prevSize": 32, - "code": 59693, - "name": "brw-safari-01", - "tempChar": "" - }, - { - "order": 252, - "id": 31, - "prevSize": 32, - "code": 59694, - "name": "brw-safari-02", - "tempChar": "" - }, - { - "order": 253, - "id": 30, - "prevSize": 32, - "code": 59695, - "name": "brw-explorer", - "tempChar": "" - }, - { - "order": 254, - "id": 29, - "prevSize": 32, - "code": 59696, - "name": "brw-opera", - "tempChar": "" - }, - { - "order": 255, - "id": 28, - "prevSize": 32, - "code": 59697, - "name": "android", - "tempChar": "" - }, - { - "order": 256, - "id": 27, - "prevSize": 32, - "code": 59698, - "name": "hc-book-02", - "tempChar": "" - }, - { - "order": 257, - "id": 26, - "prevSize": 32, - "code": 59699, - "name": "lb-book-01", - "tempChar": "" - }, - { - "order": 258, - "id": 25, - "prevSize": 32, - "code": 59700, - "name": "lb-book-02", - "tempChar": "" - }, - { - "order": 259, - "id": 24, - "prevSize": 32, - "code": 59702, - "name": "calendar-empty", - "tempChar": "" - }, - { - "order": 260, - "id": 23, - "prevSize": 32, - "code": 59703, - "name": "terminal", - "tempChar": "" - }, - { - "order": 261, - "id": 22, - "prevSize": 32, - "code": 59704, - "name": "clock", - "tempChar": "" - }, - { - "order": 262, - "id": 21, - "prevSize": 32, - "code": 59705, - "name": "windows", - "tempChar": "" - }, - { - "order": 263, - "id": 20, - "prevSize": 32, - "code": 59707, - "name": "twitter", - "tempChar": "" - }, - { - "order": 264, - "id": 19, - "prevSize": 32, - "code": 59708, - "name": "twitter-alt", - "tempChar": "" - }, - { - "order": 265, - "id": 18, - "prevSize": 32, - "code": 59709, - "name": "stumble_upon", - "tempChar": "" - }, - { - "order": 266, - "id": 17, - "prevSize": 32, - "code": 59710, - "name": "skype", - "tempChar": "" - }, - { - "order": 267, - "id": 16, - "prevSize": 32, - "code": 59711, - "name": "share", - "tempChar": "" - }, - { - "order": 268, - "id": 15, - "prevSize": 32, - "code": 59712, - "name": "reddit", - "tempChar": "" - }, - { - "order": 269, - "id": 14, - "prevSize": 32, - "code": 59713, - "name": "rss", - "tempChar": "" - }, - { - "order": 270, - "id": 13, - "prevSize": 32, - "code": 59714, - "name": "paypal", - "tempChar": "" - }, - { - "order": 271, - "id": 12, - "prevSize": 32, - "code": 59715, - "name": "mail", - "tempChar": "" - }, - { - "order": 272, - "id": 11, - "prevSize": 32, - "code": 59716, - "name": "amazon", - "tempChar": "" - }, - { - "order": 273, - "id": 10, - "prevSize": 32, - "code": 59717, - "name": "tags", - "tempChar": "" - }, - { - "order": 274, - "id": 9, - "prevSize": 32, - "code": 59719, - "name": "pin-3", - "tempChar": "" - }, - { - "order": 275, - "id": 8, - "prevSize": 32, - "code": 59720, - "name": "tag", - "tempChar": "" - }, - { - "order": 276, - "id": 7, - "prevSize": 32, - "code": 59721, - "name": "tablet", - "tempChar": "" - }, - { - "order": 277, - "id": 6, - "prevSize": 32, - "code": 59723, - "name": "mobile", - "tempChar": "" - }, - { - "order": 278, - "id": 5, - "prevSize": 32, - "code": 59724, - "name": "google", - "tempChar": "" - }, - { - "order": 279, - "id": 4, - "prevSize": 32, - "code": 59725, - "name": "gmail", - "tempChar": "" - }, - { - "order": 280, - "id": 3, - "prevSize": 32, - "code": 59726, - "name": "foursquare_2", - "tempChar": "" - }, - { - "order": 281, - "id": 2, - "prevSize": 32, - "code": 59728, - "name": "com-laptop", - "tempChar": "" - }, - { - "order": 282, - "id": 1, - "prevSize": 32, - "code": 59729, - "name": "foursquare_1", - "tempChar": "" - }, - { - "order": 283, - "id": 0, - "prevSize": 32, - "code": 59730, - "name": "linkedin", - "tempChar": "" - } - ], - "id": 2, - "metadata": { - "name": "Untitled Set", - "importSize": { - "width": 512, - "height": 512 - } - }, - "height": 1024, - "prevSize": 32, - "icons": [ - { - "id": 74, - "paths": [ - "M408.128 93.364v44.036h-112.604v-136.398h112.604v48.26h-64.344v44.102h64.344zM523.882 49.262h44.984v-48.26h-112.616c0 0 0 24.224 0 48.26 15.066 15.066 22.922 22.278 44.712 44.068-12.738 0-44.712 0.044-44.712 0.042v44.028h112.616v-44.036l-44.984-44.102zM683.492 49.262h44.98v-48.26h-112.612c0 0 0 24.224 0 48.26 15.062 15.066 22.922 22.278 44.71 44.068-12.73 0-44.71 0.044-44.71 0.042v44.028h112.614v-44.036l-44.982-44.102zM876.79 202.224l-68.406 740.972-296.386 79.8-296.392-79.8-68.396-740.972h729.58zM738.954 352.888h-458.464l11.058 89.478h232.55l-224.502 93.502 7.036 87.46 315.024 1.016-7.042 116.622-103.728 29.108-99.368-25.084-6.030-72.39h-92.822l12.064 139.752 187.336 55.298 186-54.292 24.134-277.488h-210.99l0.52-0.224 218.172-93.278 9.052-89.48z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "css3-01" - ] - }, - { - "id": 73, - "paths": [ - "M217.338 1.002h46.064v45.512h42.138v-45.512h46.068v137.818h-46.064v-46.152h-42.138v46.152h-46.064v-137.818h-0.004zM412.182 46.706h-40.55v-45.704h127.188v45.704h-40.57v92.114h-46.064v-92.114h-0.004zM519.004 1.002h48.040l29.542 48.426 29.518-48.426h48.046v137.818h-45.876v-68.308l-31.69 49h-0.79l-31.712-49v68.308h-45.078v-137.818zM697.080 1.002h46.076v92.266h64.782v45.552h-110.858v-137.818zM149.974 201.852l65.892 739.066 295.688 82.080 296.508-82.198 65.962-738.95h-724.050zM736.578 377.24l-4.126 45.954-1.812 20.376h-346.868l8.284 92.814h330.332l-2.212 24.344-22.664 253.944-185.928 51.552-185.678-51.548-12.702-142.322h90.994l6.454 72.292 101.032 27.23 101.102-27.28 10.514-117.562h-314.144l-24.448-274.108h454.040l-2.17 24.314z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "html5-01" - ] - }, - { - "id": 72, - "paths": [ - "M544.76 482.454c-177.17 16.418-359.712 54.262-543.76 66.198 27.962-28.628 85.342-24.944 137.124-33.094 90.956-14.322 205.29-24.004 307.338-37.836 32.928-4.458 75.876-22.258 99.298 4.732zM369.81 548.65c-59.318 6.736-109.502 10.096-160.76 14.188-34.782 2.78-72.624-4.324-94.574 18.914 72.566 19.752 160.884-12.492 236.42-9.458 10.372-8.584 125.712 10.13 174.948-33.094-40.36-25.598-98.312 2.896-156.034 9.45zM899.38 614.854c-46.426 40.928-69.664 71.76-137.124 56.738-21.674-21.276-19.078-58.020-18.912-61.47 1.064-21.858 15.344-49.18 14.18-70.92-10.43 36.886-71.178 48.54-70.92 80.376-47.962 32.42-87.694 73.074-174.948 66.196-46.15-57.212 23.562-152.418 61.472-198.586 16.842-20.526 33.742-42.176 52.006-61.47 40.014-42.268 45.91-56.58 99.296-80.384 80.484-35.862 112.838 59.668 61.462 108.754-19.71 5.034-20.85 1.23-42.548 0 19.436-19.196 15.070-56.804 23.636-75.65-0.524-8.934-15.628-3.278-14.182-14.19-76.858 31.264-126.444 88.144-170.214 156.044-18.44 28.594-38.684 56.996-42.558 104.012 0.524 8.934 15.626 3.286 14.188 14.19 5.232 0.15 10.198 0.034 14.97-0.284v-0.108h1.722c76.618-5.948 95.712-69.422 139.336-108.364-29.768-13.382-60.564 28.196-89.834 4.732 24.704-46.816 94.49-31.148 156.030-47.284 4.888 15.438 11.984 10.024 0 23.636 64.232-46.508 100.486-185.8 236.42-160.76 40.496 106.4-49.086 208.010-113.478 264.792zM979.756 387.888c-91.486 19.196-175.772 117.978-203.316 231.688 61.17 19.312 100.444-50.026 146.578-75.65 26.954-40.638 77.358-98.176 56.738-156.038z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-golang01" - ] - }, - { - "id": 71, - "paths": [ - "M155.108 592.11l202.378-79.726v-1.222l-202.378-80.336v-88.928l309.078 136.758v65.614l-309.078 136.758v-88.918zM868.892 687.774v79.726h-365.492v-79.726h365.492zM937.834 1h-851.668c-46.842 0-85.166 38.326-85.166 85.166v851.666c0 46.842 38.324 85.166 85.166 85.166h851.668c46.842 0 85.166-38.324 85.166-85.166v-851.666c0-46.84-38.324-85.166-85.166-85.166zM937.834 937.834h-851.668v-723.918h851.668v723.918z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-bash02" - ] - }, - { - "id": 70, - "paths": [ - "M905.27 977.432c-0.284-3.396-0.474-6.792-0.284-10.176 1.598-2.586-2.19-21.054-8.546-40.688-10.114-31.214-10.878-36.204-5.692-57.366 0.902-3.674 2.302-15.882 2.846-27.254 1.042-21.818 2.036-27.312 7.734-41.498 5.112-12.714 6.612-18.33 7.322-31.33 0.81-15.102-0.97-23.976-6.51-37.022-5.494-12.892-6.206-18.792-3.666-32.546 2.746-14.904 2.746-49.87 0-61.024-2.714-11.11-4.116-51.346-3.656-102.936l5.692-63.066c8.776-34.124 14.116-46.38 21.154-46.38 6.452 0 12.518 10.536 16.688 29.7 2.554 17.774 1.27 36.006 4.474 53.702 4.154 24.438-2.494 48.888-15.056 69.974-7.452 13.076-10.014 22.47-8.132 29.302 1.5 5.432 7.054 11.516 11.384 12.61 1.882 0.474 4.254-0.276 6.916-1.624 3.32-1.668 6.696-5.83 18.308-23.198 7.888-11.768 15.386-24.208 16.688-27.666 10.834-47.496 11.278-82.568 5.288-129.376 0-30.406-4.208-41.774-25.226-64.688-39.324-48.974-62.046-91.972-84.626-149.72-7.782-12.946-19.134-28.646-27.666-38.248-13.282-14.95-21.214-29.762-28.476-52.080-10.474-26.564-19.442-57.962-34.988-80.962-14.65-16.404-28.306-34.414-49.638-42.722-27.030-12.654-48.514-10.542-78.926-8.944-22.532 4.706-43.494 15.172-65.102 22.776-33.41 13.114-65.552 35.532-79.332 69.578-3.458 7.552-18.6 32.026-26.45 43.12-14.698 17.146-33.334 31.216-52.072 43.534-23.266 13.834-42.248 32.12-65.092 62.662-23.090 31.736-25.102 59.326-36.618 95.2-17.75 18.784-31.79-7.122-27.26-25.224 10.856-43.792 30.382-83.302 27.666-129.782-6.726-61.208-31.942-142.912-104.564-147.684-16.22 0.046-20.834 2.616-39.058 19.12-12.204 11.056-20.314 14.812-40.274 19.93-23.826 5.852-49.256 1.806-71.604 12.21-10.696 6.266-23.602 25.362-26.45 39.058-2.364 11.43 3.32 22.746 14.652 28.882 22.83 10.734 61.79 2.74 66.724 34.582-7.774 33.748-28.89 57.052-27.666 90.732-1.5 36.846 3.176 67.282 5.692 103.34 3.306 44.192 35.232 67.626 57.366 104.558 33.312 42.522 92.454 86.944 149.314 69.578 19.732-6.38 27.642-5.256 34.988 5.288 5.012 7.2 5.722 13.816 2.846 29.692-3.498 19.388-3.458 56.204 0 76.9 2.57 15.34 4.476 38.652 4.476 51.666 0 10.658 2.112 23.976 4.88 34.994 1.806 7.178 2.126 14.698 2.854 39.058 0.482 16.45 1.346 32.524 2.036 35.798 2.294 11.154 1.79 20.228-3.26 54.932-2.134 14.676-9.556 41.514-14.644 52.882-2.748 6.144-9.816 20.49-15.868 32.142-0.688 1.308-0.994 2.042-1.63 3.252-7.054 0.734-10.612 1.56-11.162 2.448h-272.136v45.572h940.14v-45.568h-76.798zM558.348 732.504c4.53-4.368 14.33-14.084 21.568-21.558 14.972-15.478 15.372-16.252 19.12-38.248 3.412-19.938 3.488-20.26 17.498-40.688 5.018-7.306 7.398-13.956 13.428-36.618 5.56-20.948 8.070-26.134 12.608-28.476 2.174-1.118 3.688-1.728 5.288-1.622 1.608 0.1 3.114 1.042 4.888 2.434 4.996 3.932 6.174 8.354 8.944 38.246 1.456 15.6 3.306 35.17 4.476 43.534 5.14 36.946 5.954 48.514 4.476 61.032-0.758 6.426-1.54 19.716-2.036 29.288-1.392 26.968-5.226 38.92-19.932 64.284-4.49 7.742-9.992 17.726-12.21 22.378-4.398 9.242-9.112 15.46-13.832 17.902-4.622 2.394-10.682 1.952-16.68-1.216-8.262-4.376-23.29-16.020-30.512-23.602-7.726-8.112-11.026-12.486-19.938-28.484-10.13-18.18-11.392-21.99-11.392-30.1 0-10.606 3.862-18.47 14.238-28.486zM569.74 926.982c-5.54 5.492-9.358 8.064-20.336 13.42-15.12 7.376-20.826 12.18-21.972 18.316-0.458 2.494 0.304 4.444 1.222 6.502-51.46-0.466-102.958 1.324-154.61 5.294 2.968-14.598 5.9-30.198 6.51-41.094 0.59-10.244 1.982-21.996 3.666-30.106 1.522-7.338 3.038-19.594 3.658-27.26 1.454-18.002 2.862-23.244 11.392-41.498 3.878-8.3 8.278-19.274 9.77-24.414 2.602-8.982 2.67-10.726 2.44-37.024-0.222-23.9 0.33-28.804 2.442-41.498 4.192-25.186 6.128-32.692 14.238-49.232 11.032-22.478 11.966-25.906 13.022-46.38 1.232-23.856 5.134-36.234 13.42-44.75 4.66-4.804 8.698-7.32 16.272-8.132 2.534-0.284 5.546 0 8.952 0 14.368-0.044 20.788 1.906 25.224 7.728 4.17 5.456 4.628 12.18 1.224 26.854-1.53 6.58-3.436 18.5-4.070 26.442-1.4 17.414-4.438 27.314-12.204 41.094-9.892 17.574-10.162 19.104-10.176 48.414-0.008 23.536 0.192 25.938 2.44 32.954 1.354 4.184 4.024 9.808 6.106 12.608 4.614 6.236 18.37 18.034 32.954 28.484 14.13 10.124 30.182 25.7 39.876 38.652 10.284 13.626 25.004 27.108 26.848 44.75 0.032 12.9-7.474 29.166-18.308 39.876zM602.7 967.67c5.976-3.742 10.298-8.478 13.834-15.87 4.116-8.644 7.298-12.974 11.392-12.616 4.092 0.36 8.768 5.532 15.048 15.048 5.47 8.292 10.704 13.71 15.868 17.092-18.828-1.534-37.352-2.72-56.142-3.654zM871.628 865.14c-0.666 12.508-0.92 14.13-7.736 34.176-9.992 29.394-12.294 37.978-14.238 52.882-1.522 11.706-2.694 16.266-6.632 25.232h-122.054c-14.092-1.668-28.154-3.182-42.188-4.482 6.978-3.886 11.668-12.862 13.834-27.666 1.054-7.208 1.018-10.466-0.406-18.714-3.26-18.888-7.758-26.242-21.162-37.428-4.522-3.78-9.458-8.692-10.978-10.986-4.046-6.098-5.302-14.154-3.664-21.966 1.996-9.51 11.292-26.372 21.972-40.68 9.554-12.838 14.59-20.856 22.372-35.804 2.93-5.61 7.252-11.11 13.832-17.904 5.28-5.448 11.064-13.066 13.022-16.678l3.252-6.512v-37.022c-0.122-26.396 1.4-51.98 4.888-78.116 2.892-31.338 14.010-56.066 29.29-82.998 8.752-18.054 12.846-23.198 20.344-23.198 10.044 0 16.158 11.14 19.12 34.582 3.38 23.030 14.582 42.722 21.566 64.696 4.246 15.638 7.3 22.678 17.086 42.31 9.294 18.622 17.128 39.386 19.532 52.080 1.272 6.708 1.624 16.012 1.624 35.4 0 28.552 0.956 39.914 4.474 54.512 2.668 11.088 3.974 42.9 2.85 64.284z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-perl" - ] - }, - { - "id": 69, - "paths": [ - "M1023 203.524l-22.506 33.758c0 0-56.266-63.758-159.388-52.514-103.148 11.252-285.034 116.272-313.17 346.922-28.128 230.648 82.514 481.93 82.514 481.93h-498.808c0 0-13.124-82.512 18.754-240.028 31.872-157.52 78.754-262.53 159.388-412.552 80.634-150.014 210.022-273.78 397.546-290.648 187.528-16.882 335.67 133.132 335.67 133.132zM12.252 762.34l-11.252 93.766 91.886 11.246 16.884-97.512-97.518-7.5zM192.276 482.936l-86.256-33.76-28.128 78.752 88.136 28.128 26.248-73.12zM338.548 244.786l-65.638-43.132-52.504 58.12 67.508 45.012 50.634-60zM527.936 91.020l-45.004-50.634-61.878 31.878 45.004 54.376 61.878-35.62zM728.594 62.892l-7.512-48.754-80.626-3.758 11.244 54.394 76.894-1.882zM962.992 113.518l-61.878-45.004-1.878 33.75 52.506 28.128 11.25-16.874zM889.852 241.026l50.634 5.622v-22.498l-50.634-11.252v28.128zM728.594 237.284l24.368 44.996 35.63-28.128-7.502-30-52.496 13.132zM689.21 351.676l-37.51-56.256-39.374 35.63 54.376 60 22.508-39.374zM552.32 499.802l63.752 54.392 15.004-61.886-54.376-41.252-24.38 48.746zM546.692 687.336l78.762 33.75-3.742-61.878-71.27-37.508-3.75 65.636zM691.074 927.368l-35.622-73.14h-82.506l18.756 67.516 99.372 5.624z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-rails" - ] - }, - { - "id": 68, - "paths": [ - "M734.542 191.064c-52.208-32.522-101.45-45.312-150.692-77.79-30.468-20.69-72.81-69.932-108.256-112.274-6.898 67.968-27.59 95.512-51.25 115.2-50.2 39.418-81.716 51.204-125.022 74.864-36.406 18.684-234.328 136.852-234.328 390.868s213.636 441.068 450.936 441.068c237.294 0 443.076-172.296 443.076-433.21s-192.948-379.038-224.464-398.726zM135.626 384.882c-7.858-13.75 2.968-44.308 39.462-84.642 3.316-3.754 7.42-7.64 11.96-11.612 50.026-55.832 119.084-93.81 140.648-104.592 9.778-4.932 53.17-25.58 97.434-59.062 26.542-20.692 46.272-40.378 55.176-105.378 0.7 2.576 1.398 5.064 2.096 7.508 11.438 36.1 9.692 55.046 9.692 63.384 0 8.862-4.976 32.522-20.692 44.352-6.896 4.888-8.904 8.818-8.904 9.822 0 3.928 8.904 6.898 8.904 15.758 0 10.826-4.888 32.478-57.098 84.686-52.208 52.166-127.030 98.438-185.088 126.986-58.146 28.55-85.646 26.584-93.59 12.79zM740.216 930.37c-4.976 4.932-50.202 36.406-103.37 41.338-53.17 4.934-125.11 7.902-168.414-31.472-6.896-6.896-4.888-16.764 0-20.692 4.976-3.93 8.906-6.896 14.756-6.896 5.936 0 4.976 0 7.944 1.962 19.644 15.76 49.242 28.548 112.19 28.548 63.034 0 107.298-17.722 127.030-32.476 8.904-6.898 12.834-1.004 13.794 2.924 0.96 3.972 2.968 9.864-3.93 16.764zM567.876 840.75c10.826-9.822 28.548-25.582 45.312-32.478 16.762-6.896 25.58-5.892 41.382-5.892 15.714 0 32.476 0.96 44.264 8.818 11.788 7.9 18.772 25.624 22.7 35.488 3.93 9.822 0 15.76-7.946 19.688-6.896 3.93-7.858 1.964-14.754-10.826-6.896-12.834-12.746-25.624-47.232-25.624s-45.31 11.83-62.074 25.624c-16.676 13.794-22.612 18.684-28.548 10.826-5.852-7.902-3.932-15.758 6.896-25.624zM828.832 848.65c-35.446-2.968-106.338-113.234-151.65-115.2-57.098-1.964-181.158 119.128-278.592 119.128-59.106 0-76.83-8.862-96.56-21.652-29.51-20.692-44.264-52.208-43.302-95.512 0.958-76.788 72.9-148.682 163.436-149.642 115.244-1.004 194.954 114.196 253.012 113.192 49.24-0.96 143.792-97.476 190.064-97.476 49.24 0 63.036 51.206 63.036 81.718 0 30.556-9.866 85.69-33.438 120.132-23.662 34.486-38.418 47.278-66.006 45.312z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-drupal" - ] - }, - { - "id": 67, - "paths": [ - "M802.108 448c7.428 8.23 9.19 22.362 5.306 42.38-4.058 20.85-11.87 35.724-23.446 44.64-11.586 8.916-29.204 13.374-52.864 13.374h-35.698l21.914-112.74h40.206c22.3 0 37.154 4.118 44.582 12.346zM299.508 435.654h-40.206l-21.916 112.74h35.696c23.654 0 41.278-4.458 52.864-13.374 11.578-8.916 19.388-23.792 23.446-44.64 3.884-20.020 2.12-34.15-5.306-42.38-7.426-8.228-22.28-12.346-44.578-12.346zM1023 512c0 148.458-228.786 268.806-511 268.806s-511-120.348-511-268.806c0-148.456 228.786-268.806 511-268.806s511 120.35 511 268.806zM397.084 530.572c6.080-10.896 10.406-22.922 12.966-36.074 6.204-31.934 1.522-56.806-14.048-74.626-15.562-17.82-40.33-26.726-74.272-26.726h-112.846l-52.354 269.376h58.684l13.916-71.61h50.268c22.174 0 40.42-2.328 54.744-6.994 14.322-4.658 27.338-12.466 39.056-23.438 9.83-9.040 17.788-19.004 23.886-29.908zM603.628 590.912l24.362-125.364c4.958-25.494 1.238-43.942-11.144-55.328-12.392-11.376-34.898-17.074-67.536-17.074h-51.866l13.922-71.62h-58.22l-52.364 269.384h58.22l29.992-154.33h46.534c14.896 0 24.634 2.464 29.208 7.396 4.574 4.934 5.546 14.182 2.91 27.738l-23.162 119.196h59.144zM854.022 419.874c-15.56-17.82-40.328-26.726-74.27-26.726h-112.848l-52.356 269.376h58.686l13.914-71.61h50.27c22.172 0 40.42-2.328 54.742-6.994 14.322-4.658 27.338-12.466 39.056-23.438 9.84-9.042 17.792-19.004 23.886-29.908 6.088-10.896 10.404-22.922 12.966-36.074 6.206-31.936 1.524-56.808-14.046-74.626z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-php01" - ] - }, - { - "id": 66, - "paths": [ - "M231.778 303.77l-48.106-27.546c-3.024-1.782-4.902-4.998-4.902-8.488v-58.612c0-3.49-1.856-6.728-4.886-8.464l-20.478-11.798c-1.484-0.888-3.202-1.324-4.864-1.324-1.708 0-3.378 0.436-4.902 1.324l-20.492 11.798c-3.032 1.738-4.88 4.976-4.88 8.464v58.612c0 3.49-1.856 6.684-4.892 8.488l-48.122 27.546c-1.494 0.916-3.35 0.916-4.858 0-1.532-0.842-2.44-2.468-2.44-4.214l-0.178-125.466c0-3.518 1.876-6.75 4.894-8.494l80.966-46.596c1.39-0.806 2.92-1.22 4.464-1.286 0.12 0 0.704 0 0.844 0 1.552 0.066 3.082 0.48 4.458 1.286l80.96 46.598c3.040 1.746 4.886 4.976 4.886 8.494l-0.156 125.466c0 1.746-0.938 3.372-2.432 4.214-1.49 0.916-3.376 0.916-4.884-0.002zM543.234 270.14v-93.506c0-3.496 1.864-6.72 4.886-8.464l81.006-46.746c3.016-1.746 6.742-1.752 9.774-0.008l20.272 11.688c1.064 0.614 2.374 0.614 3.43 0 1.050-0.614 1.708-1.744 1.708-2.964v-124.254c0-1.738 0.918-3.334 2.41-4.22 1.502-0.874 3.35-0.888 4.866-0.044l48.196 26.896c3.104 1.722 5.020 4.998 5.020 8.54v233.082c0 3.498-1.864 6.72-4.894 8.472l-81.004 46.776c-3.024 1.76-6.758 1.76-9.79 0l-80.99-46.776c-3.026-1.752-4.89-4.976-4.89-8.472zM603.562 239.422c0 0.872 0.464 1.678 1.218 2.114l27.812 16.028c0.754 0.428 1.686 0.428 2.44 0l27.812-16.028c0.754-0.436 1.218-1.242 1.218-2.114v-32.116c0-0.872-0.464-1.686-1.218-2.114l-27.804-16.066c-0.762-0.436-1.694-0.436-2.456 0l-27.812 16.066c-0.746 0.428-1.21 1.242-1.21 2.114v32.116zM961.35 166.898l-80.47-46.73c-3.026-1.76-6.766-1.766-9.796-0.008l-80.974 46.738c-3.024 1.746-4.886 4.976-4.886 8.472v93.476c0 3.518 1.892 6.756 4.94 8.502l80.464 45.842c2.962 1.702 6.608 1.708 9.588 0.060l48.664-27.050c1.544-0.866 2.506-2.484 2.514-4.244 0.014-1.76-0.924-3.394-2.456-4.274l-81.476-46.768c-1.516-0.872-2.456-2.492-2.456-4.244v-29.29c0-1.746 0.932-3.364 2.448-4.244l25.358-14.624c1.508-0.866 3.372-0.866 4.878 0l25.374 14.624c1.516 0.88 2.448 2.5 2.448 4.244v23.050c0 1.746 0.938 3.364 2.454 4.236 1.516 0.866 3.378 0.866 4.894-0.008l48.49-28.19c3.024-1.752 4.874-4.974 4.874-8.464v-22.648c-0.002-3.49-1.85-6.714-4.874-8.458zM305.566 276.882l80.96 46.774c3.032 1.746 6.756 1.746 9.788 0l80.99-46.774c3.024-1.752 4.886-4.976 4.886-8.472v-93.542c0-3.49-1.864-6.728-4.894-8.472l-80.982-46.73c-3.032-1.752-6.756-1.752-9.782 0l-80.966 46.73c-3.032 1.746-4.894 4.984-4.894 8.472v93.542c0 3.498 1.864 6.72 4.894 8.472zM787.89 492.646l-249.668-144.28c-15.666-8.93-36.676-8.93-52.474 0l-249.676 144.28c-16.176 9.316-26.186 26.792-26.186 45.51v288.146c0 18.706 10.010 36.204 26.186 45.534l65.464 37.712c31.722 15.614 43.094 15.614 57.518 15.614 46.954 0 73.936-28.404 73.936-77.938v-284.478c0-4.024-3.282-7.194-7.236-7.194h-31.664c-4.022 0-7.252 3.17-7.252 7.194v284.478c0 21.958-22.726 43.81-59.832 25.278l-68.398-39.538c-2.41-1.308-3.942-3.896-3.942-6.662v-288.146c0-2.734 1.532-5.456 3.956-6.846l249.528-144.030c2.312-1.346 5.388-1.346 7.688 0l249.58 143.992c2.386 1.428 3.874 4.058 3.874 6.882v288.146c0 2.766-1.486 5.412-3.814 6.742l-249.682 144.12c-2.136 1.3-5.412 1.3-7.734 0l-64.044-38.030c-1.906-1.094-4.346-1.508-6.196-0.458-17.728 10.062-21.084 11.384-37.69 17.152-4.11 1.434-10.18 3.896 2.256 10.838l83.364 49.326c7.984 4.626 17.070 7.008 26.186 7.008 9.248 0 18.304-2.38 26.29-7.008l249.668-144.156c16.168-9.41 26.228-26.828 26.228-45.534v-288.144c-0.004-18.718-10.066-36.158-26.234-45.51zM598.896 798.816c-74.506 0-90.896-18.718-96.388-55.772-0.636-3.956-4.024-6.906-8.088-6.906h-36.404c-4.51 0-8.13 3.608-8.13 8.14 0 47.41 25.808 103.966 149.012 103.966 89.21 0 140.364-35.118 140.364-96.462 0-60.83-41.106-77.006-127.618-88.464-87.438-11.57-96.322-17.536-96.322-38.014 0-16.872 7.526-39.434 72.288-39.434 57.836 0 79.156 12.462 87.924 51.432 0.77 3.674 4.112 6.352 7.896 6.352h36.542c2.27 0 4.422-0.976 5.958-2.588 1.544-1.708 2.366-3.934 2.15-6.27-5.654-67.158-50.286-98.452-140.472-98.452-80.28 0-128.156 33.88-128.156 90.666 0 61.626 47.638 78.668 124.666 86.268 92.184 9.050 99.34 22.512 99.34 40.654 0 31.474-25.248 44.884-84.562 44.884zM876.656 202.088c-0.576-0.34-1.292-0.34-1.87 0l-15.534 8.968c-0.584 0.334-0.94 0.954-0.94 1.62v17.958c0 0.666 0.356 1.288 0.94 1.62l15.534 8.968c0.576 0.334 1.292 0.334 1.87 0l15.546-8.968c0.586-0.332 0.94-0.954 0.94-1.62v-17.958c0-0.666-0.354-1.286-0.94-1.62l-15.546-8.968z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-nodejs01" - ] - }, - { - "id": 65, - "paths": [ - "M965.17 295.738v432.226c0 28.050-15.092 54.168-39.344 68.286l-374.496 216.232c-11.978 6.948-25.564 10.518-39.438 10.518-13.676 0-27.298-3.57-39.278-10.518l-125.042-73.98c-18.652-10.414-9.55-14.118-3.384-16.256 24.908-8.644 29.946-10.636 56.536-25.726 2.774-1.586 6.432-0.966 9.294 0.686l96.062 57.038c3.482 1.962 8.4 1.962 11.602 0l374.526-216.172c3.488-1.992 5.724-5.966 5.724-10.106v-432.228c0-4.234-2.236-8.188-5.812-10.326l-374.372-215.98c-3.452-2.020-8.060-2.020-11.536 0l-374.288 216.040c-3.636 2.080-5.93 6.158-5.93 10.266v432.226c0 4.138 2.292 8.018 5.908 9.98l102.598 59.308c55.658 27.806 89.75-4.97 89.75-37.912v-426.722c0-6.034 4.846-10.792 10.878-10.792h47.494c5.938 0 10.858 4.756 10.858 10.792v426.724c0 74.292-40.472 116.908-110.904 116.908-21.632 0-38.694 0-86.276-23.426l-98.196-56.574c-24.266-13.99-39.276-40.234-39.276-68.286v-432.226c0-28.086 15.010-54.3 39.276-68.27l374.512-216.416c23.7-13.402 55.216-13.402 78.714 0l374.496 216.416c24.252 14.028 39.344 40.184 39.344 68.27zM642.342 686.734c-111.76 0-136.35-28.096-144.588-83.672-0.954-5.932-6.036-10.35-12.126-10.35h-54.612c-6.764 0-12.192 5.406-12.192 12.208 0 71.12 38.708 155.942 223.518 155.942 133.812 0 210.538-52.678 210.538-144.686 0-91.246-61.654-115.52-191.418-132.7-131.158-17.356-144.486-26.294-144.486-57.016 0-25.322 11.286-59.162 108.432-59.162 86.748 0 118.73 18.698 131.88 77.152 1.158 5.51 6.166 9.53 11.846 9.53h54.818c3.4 0 6.63-1.46 8.94-3.886 2.316-2.56 3.546-5.894 3.222-9.39-8.482-100.754-75.426-147.688-210.708-147.688-120.418 0-192.236 50.828-192.236 136.004 0 92.434 71.458 118 187 129.404 138.276 13.564 149.008 33.766 149.008 60.976-0 47.198-37.868 67.334-126.836 67.334z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-nodejs02" - ] - }, - { - "id": 64, - "paths": [ - "M998.322 729.26c0 0-127.108 342.772-564.708 262.976-6.886-1.282-13.49-3.676-20.178-5.698-1.564-0.458-3.144-0.958-4.708-1.406-6.57-2.044-13.074-4.14-19.538-6.394-0.74-0.258-1.446-0.5-2.196-0.766-5.888-2.070-11.744-4.268-17.524-6.488-1.514-0.59-3.020-1.164-4.526-1.78-6.228-2.46-12.424-5.032-18.554-7.718-1.13-0.498-2.22-0.998-3.368-1.504-5.366-2.386-10.664-4.858-15.918-7.37-1.364-0.692-2.736-1.332-4.11-1.98-0.748-0.374-1.554-0.748-2.32-1.13-3.392-1.696-6.704-3.458-10.046-5.208-2.578-1.33-5.198-2.626-7.76-4-4.732-2.578-9.398-5.198-14.040-7.876-1.722-0.982-3.46-1.93-5.166-2.92-6.304-3.708-12.542-7.56-18.688-11.454-1.738-1.114-3.458-2.294-5.172-3.444-4.008-2.594-8.018-5.19-11.944-7.9-0.416-0.284-0.814-0.582-1.222-0.874-1.522-1.032-2.968-2.088-4.482-3.186-4.142-2.878-8.242-5.822-12.3-8.816-1.962-1.48-3.918-2.968-5.864-4.458-3.676-2.804-7.334-5.674-10.962-8.568-1.804-1.446-3.634-2.876-5.438-4.34-4.424-3.644-8.834-7.354-13.15-11.096-0.816-0.714-1.68-1.414-2.512-2.162-0.084-0.034-0.142-0.1-0.234-0.176-4.898-4.292-9.706-8.692-14.472-13.182-1.438-1.314-2.87-2.72-4.316-4.1-3.56-3.42-7.086-6.864-10.554-10.356-1.44-1.414-2.862-2.844-4.242-4.276-4.482-4.608-8.908-9.222-13.232-13.94-0.158-0.214-0.316-0.34-0.506-0.548-0.076-0.082-0.184-0.192-0.258-0.284-4.424-4.874-8.766-9.856-13.016-14.854-1.19-1.406-2.386-2.844-3.56-4.266-3.168-3.818-6.288-7.626-9.348-11.486-1.272-1.606-2.544-3.226-3.8-4.84-3.434-4.434-6.828-8.9-10.114-13.442-0.616-0.848-1.272-1.68-1.864-2.512-0.126-0.14-0.232-0.292-0.316-0.432-3.808-5.266-7.484-10.63-11.094-16.002-1.122-1.648-2.178-3.344-3.26-5.042-2.612-3.974-5.174-7.952-7.652-11.976-1.296-2.062-2.528-4.132-3.776-6.206-2.254-3.758-4.458-7.518-6.596-11.31-1.222-2.146-2.428-4.242-3.61-6.446-0.658-1.164-1.372-2.364-2.012-3.584-1.124-2.032-2.138-4.15-3.236-6.222-1.696-3.252-3.418-6.52-5.056-9.83-69.114-138.188-80.392-307.388 10.096-437.446l70.628-89.578c-79.686 154.014-43.872 341.556 55.816 477.52 3.6 4.95 7.286 9.832 11.052 14.712 1.166 1.472 2.336 2.954 3.502 4.368 3.134 3.992 6.336 7.934 9.572 11.836 1.166 1.372 2.304 2.718 3.494 4.132 4.326 5.108 8.75 10.18 13.292 15.128 0.216 0.24 0.424 0.458 0.632 0.69 4.292 4.684 8.666 9.306 13.116 13.866 1.38 1.396 2.786 2.778 4.192 4.176 3.494 3.566 7.062 7.028 10.688 10.47 1.372 1.364 2.752 2.678 4.176 4.034 4.898 4.558 9.838 9.090 14.87 13.516 0.524 0.458 1.064 0.88 1.546 1.304 4.658 4.050 9.374 7.994 14.148 11.92 1.664 1.356 3.36 2.71 5.056 4.058 3.75 3.018 7.544 5.956 11.362 8.874 1.822 1.398 3.692 2.82 5.582 4.216 4.15 3.078 8.342 6.106 12.576 9.1 1.438 0.972 2.836 2.030 4.292 3.010 4.376 3.028 8.834 5.972 13.308 8.85 1.68 1.116 3.344 2.28 5.040 3.362 6.172 3.908 12.41 7.75 18.714 11.46 1.622 0.932 3.244 1.804 4.84 2.704 4.758 2.752 9.524 5.462 14.38 8.058 2.628 1.462 5.332 2.786 7.992 4.192 3.976 2.046 7.952 4.126 11.976 6.088 1.522 0.748 3.002 1.448 4.492 2.154 5.132 2.47 10.28 4.85 15.486 7.21 1.232 0.534 2.428 1.090 3.668 1.622 6.064 2.654 12.192 5.2 18.372 7.634 1.588 0.632 3.178 1.24 4.774 1.874 5.622 2.178 11.286 4.292 17.016 6.312 0.89 0.316 1.78 0.64 2.644 0.956 6.388 2.198 12.816 4.292 19.296 6.272 1.654 0.516 3.31 1.016 5.006 1.514 6.636 1.962 13.232 4.084 20.036 5.624 179.546 40.862 369.034 4.166 475.79-134.92zM364.88 509.516c9.814 14.048 20.676 30.772 33.692 42.062 4.708 5.196 9.648 10.26 14.68 15.242 1.264 1.296 2.57 2.544 3.876 3.816 4.874 4.742 9.864 9.408 14.988 13.94 0.216 0.158 0.408 0.376 0.616 0.526 0.058 0.066 0.108 0.082 0.15 0.148 5.69 4.974 11.562 9.774 17.516 14.488 1.324 1.016 2.636 2.072 3.976 3.104 5.98 4.582 12.078 9.090 18.332 13.38 0.192 0.132 0.34 0.268 0.532 0.4 2.752 1.912 5.564 3.692 8.35 5.522 1.348 0.866 2.62 1.796 3.966 2.612 4.474 2.87 8.992 5.656 13.59 8.334 0.65 0.4 1.282 0.732 1.922 1.106 3.95 2.28 7.984 4.534 12.010 6.712 1.396 0.782 2.828 1.48 4.258 2.228 2.778 1.448 5.572 2.936 8.4 4.342 0.424 0.2 0.866 0.398 1.274 0.574 5.764 2.836 11.576 5.58 17.524 8.158 1.264 0.566 2.578 1.064 3.868 1.598 4.75 2.012 9.54 3.984 14.356 5.83 2.044 0.774 4.118 1.514 6.146 2.254 4.382 1.63 8.766 3.112 13.19 4.592 2.006 0.638 3.968 1.296 5.972 1.912 6.288 1.946 12.508 4.424 19.070 5.506 337.868 55.982 415.866-204.156 415.866-204.156-70.32 101.266-206.486 149.582-351.794 111.872-6.446-1.698-12.806-3.552-19.12-5.54-1.948-0.584-3.844-1.214-5.766-1.856-4.49-1.456-8.958-3.002-13.388-4.616-2.022-0.74-4.050-1.48-6.040-2.246-4.85-1.864-9.648-3.792-14.396-5.804-1.306-0.566-2.612-1.066-3.884-1.648-5.962-2.598-11.834-5.326-17.624-8.188-2.986-1.458-5.906-2.998-8.85-4.508-1.698-0.874-3.402-1.75-5.098-2.624-3.76-2.042-7.502-4.16-11.188-6.308-0.874-0.504-1.788-0.982-2.678-1.51-4.566-2.678-9.074-5.436-13.54-8.268-1.374-0.876-2.704-1.83-4.076-2.732-2.954-1.908-5.888-3.842-8.784-5.804-6.22-4.292-12.276-8.798-18.256-13.356-1.38-1.086-2.752-2.146-4.118-3.232-63.592-50.222-114-118.846-137.988-196.66-25.11-80.704-19.694-171.294 23.828-244.812l-53.47 75.476c-65.43 94.17-61.878 220.226-10.838 319.82 8.572 16.698 18.194 32.89 28.948 48.314zM721 393.012c2.786 1.040 5.564 1.962 8.382 2.916 1.232 0.378 2.462 0.802 3.702 1.168 3.976 1.252 7.926 2.704 12.036 3.476 186.568 36.046 237.16-95.738 250.634-115.132-44.33 63.82-118.81 79.14-210.222 56.962-7.21-1.762-15.144-4.37-22.116-6.832-8.924-3.182-17.698-6.808-26.248-10.912-16.242-7.798-31.696-17.258-46.050-28.090-81.782-62.058-132.582-180.442-79.22-276.85l-28.878 39.802c-38.574 56.772-42.358 127.276-15.602 189.982 28.228 66.548 86.072 118.762 153.582 143.51z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-jquery" - ] - }, - { - "id": 63, - "paths": [ - "M791.446 151.91c0-62.478 50.566-113.058 112.954-113.058 62.46 0 113.030 50.58 113.030 113.058 0 62.394-50.568 112.978-113.030 112.978-62.388 0-112.954-50.584-112.954-112.978zM726.912 645.344l-31.92 4.832c-24.328 3.454-35.456 12.9-35.456 29.55 0 19.794 11.51 30.542 32.004 30.542 22.864 0 44.802-11.122 53.478-27.396 2.378-4.534 2.378-5.606 2.378-14.654v-8.676l0.38-20.808v-0.376c-0.38 0-1.762 1.082-2.76 1.764-2.068 2.070-8.364 3.84-18.104 5.222zM518.578 151.91c213.084 0 385.82 172.766 385.82 385.906 0 213.128-172.736 385.9-385.82 385.9-213.1 0-385.828-172.772-385.828-385.9 0-213.14 172.728-385.906 385.828-385.906zM415.822 700.52h-126.454v-219.118h-34.382v249.358h160.836v-30.24zM799.196 708.206c-4.906 0.998-7.292 1.38-10.128 1.38-6.904 0-10.054-3.162-10.054-10.746v-103.848c0-32.004-25.702-51.122-68.758-51.122-47.192 0-71.892 20.192-73.59 60.486h28.478c3.452-24.718 15.952-35.082 41.66-35.082 28.086 0 42.050 10.364 42.050 30.558 0 18.72-2.454 20.094-52.49 25.316-17.034 1.388-22.554 2.46-31.22 5.222-23.638 7.668-37.528 27.098-37.528 52.116 0 33.3 22.948 53.496 60.774 53.496 23.254 0 39.206-7.678 61.846-29.178 0.998 18.432 10.744 27.406 29.168 27.406 6.894 0 10.43-0.692 19.792-3.454v-22.55zM565.386 377.942c0 62.398 50.642 113.054 113.030 113.054s113.030-50.656 113.030-113.054-50.642-113.052-113.030-113.052-113.030 50.652-113.030 113.052zM512.666 709.586c-24.328 0-36.446-12.808-36.446-38.908v-121.578h-30.932v135.152c0 30.54 24.708 51.732 59.784 51.732 26.698 0 44.728-10.048 57.628-31.624v26.398h29.534v-181.66h-30.914v106.674c0 9.674-5.222 25.334-11.818 35.082-7.678 11.736-21.566 18.732-36.836 18.732zM66.688 410.096l34.45 11.21-3.842 11.74-96.296-31.314 3.684-11.208 9.664 3.148c-0.382-0.77-0.84-1.148-0.99-1.54-5.988-9.362-6.762-14.194-3.85-23.176 5.614-17.27 23.178-24.252 44.206-17.424 23.022 7.448 34.298 24.41 28.31 42.828-2.678 8.292-7.060 12.746-15.336 15.736zM71.82 391.45c3.852-11.59-4.066-21.954-21.016-27.4-17.118-5.602-27.546-1.996-31.772 10.978-3.684 11.506 4.45 21.408 22.256 27.242 15.344 4.99 26.706 0.924 30.532-10.82zM40.29 295.050c9.208-18.038 29.308-23.26 49.486-12.97 20.418 10.36 28.086 29.626 18.804 47.888-8.9 17.42-29.318 22.644-49.336 12.434-20.186-10.204-27.928-29.624-18.954-47.352zM64.766 330.892c15.344 7.826 28.768 5.448 34.608-6.142 5.748-11.358-0.158-23.562-15.196-31.16-15.354-7.826-28.394-5.448-34.224 6.064-5.83 11.436 0 23.716 14.812 31.238zM142.032 270.336l-36.446-45.516 53.944 22.49 7.676-10.206-45.042-60.868-7.518 9.98 36.678 46.356-54.168-23.334-8.292 10.978 37.052 45.898-54.010-23.566-8.134 10.75 70.596 27.168 7.664-10.13zM157.842 194.198c-16.342-17.806-16.65-38.066-0.764-52.65 14.804-13.662 33.152-10.13 51.64 10.054l-38.982 35.842c11.51 11.284 21.566 12.588 31.23 3.764 7.376-6.758 9.132-16.504 4.458-23.486l9.132-8.522c2.604 3.838 4.134 9.056 4.6 15.044 0.616 9.288-2.76 17.118-10.896 24.56-5.372 4.986-10.896 8.134-16.11 9.132-11.742 2.38-23.868-2.378-34.308-13.738zM163.066 180.154l29.534-27.172c-9.896-9.594-20.252-10.592-28.776-2.766-8.584 7.91-8.742 20.418-0.758 29.938zM250.77 161.736l-25.25-35.54c-5.98-8.368-3.592-19.648 5.374-26.020 0.542-0.382 1.772-1.302 2.994-1.992l-7.36-10.364c-1.688 0.766-2.918 1.458-3.768 2.15-5.906 4.14-8.442 12.276-7.584 22.948l-7.070-9.976-9.506 6.752 42.118 59.176 10.052-7.134zM253.532 115.914c-11.428-21.264-6.754-40.988 12.208-51.198 17.714-9.594 34.6-1.606 47.564 22.49l-46.576 25.096c8.368 13.814 17.808 17.504 29.31 11.362 8.824-4.756 12.974-13.814 10.13-21.718l10.97-5.914c1.538 4.378 1.772 9.752 0.782 15.66-1.772 9.132-6.92 15.886-16.576 21.11-6.538 3.528-12.668 5.214-17.89 4.912-12.042-0.618-22.554-8.214-29.922-21.8zM262.048 103.632l35.38-19.034c-7.292-11.744-17.116-15.276-27.246-9.826-10.28 5.53-13.508 17.654-8.134 28.86zM320.674 77.54c-7.37-20.88-0.84-38.456 16.194-44.44 8.9-3.142 16.726-1.768 24.56 4.146l0.224-0.232-12.276-34.85 11.66-4.14 33.152 94.1-11.044 3.908-3.31-9.436c-1.838 9.436-6.828 15.2-15.652 18.264-18.49 6.524-35.3-4.148-43.508-27.32zM333.026 74.082c5.988 17.042 16.352 24.714 27.788 20.648 6.364-2.226 11.196-7.752 12.426-14.356 0.766-4.832 0.308-9.132-2.070-15.964-6.754-19.106-16.12-25.938-28.928-21.488-11.662 4.146-14.888 15.046-9.216 31.16zM439.542 81.912l-10.52-99.238 12.35-1.306 3.768 36.076 1.148-1.384c5.68-8.134 10.438-11.128 19.114-12.050 17.648-1.914 31.53 11.286 33.684 32.314 2.686 25.172-7.826 42.214-27.164 44.206-9.664 1.078-14.738-1.072-21.566-8.898l0.924 8.978-11.738 1.302zM447.826 46.604c1.688 16.046 10.046 24.792 22.33 23.49 12.278-1.304 18.49-12.666 16.568-30.394-1.838-17.498-9.506-25.946-22.406-24.56l-0.534 0.080c-12.658 1.836-17.954 12.502-15.958 31.384zM528.934 84.294l-1.688 3.606c-2.688 5.524-4.452 6.75-9.442 6.522-2.76-0.154-4.14-0.46-6.976-1.688l-0.542 11.208c3.3 1.15 4.534 1.458 7.37 1.614 3.3 0.148 7.21-0.386 9.356-1.156 5.222-1.838 9.058-7.672 15.662-22.948 1.762-3.992 3.292-7.37 4.524-10.284 2.146-4.762 3.528-7.902 4.142-9.366l23.246-56.486-13.732-0.54-21.948 58.41-16.952-60.1-13.964-0.616 23.706 75.606c-1.234 3.146-1.838 4.374-2.762 6.218zM1010.858 508.378l11.552-0.674c-0.916-15.562-2.57-31.23-4.924-46.572l-11.446 1.756c2.306 14.99 3.918 30.296 4.818 45.49zM686.11 61.262c-14.638-5.126-29.334-9.46-44.938-13.24l-2.736 11.248c15.236 3.694 29.576 7.918 43.848 12.916l3.826-10.924zM770.936 100.69c-14.182-8.194-27.738-15.292-41.446-21.7l-4.914 10.482c13.406 6.272 26.68 13.22 40.578 21.242l5.782-10.024zM102.992 824.17c8.84 12.85 18.348 25.408 28.27 37.318l8.9-7.402c-9.706-11.644-18.996-23.92-27.622-36.478l-9.548 6.562zM837.33 914.202l7.468 8.85c11.87-10.032 23.412-20.752 34.316-31.864l-8.268-8.11c-10.644 10.864-21.922 21.334-33.516 31.124zM901.296 848.986l8.982 7.294c9.804-12.068 19.154-24.734 27.78-37.65l-9.624-6.438c-8.432 12.626-17.564 25.002-27.138 36.794zM977.13 326.988c-6.478-14.072-13.73-28.066-21.534-41.586l-10.022 5.79c7.626 13.21 14.706 26.888 21.034 40.636l10.522-4.84zM765.154 964.902l-2.802 1.606 5.748 10.054 2.836-1.63c12.548-7.252 24.908-15.104 36.744-23.354l-6.622-9.498c-11.568 8.068-23.644 15.736-35.904 22.822zM987.91 688.974l11.030 3.542c4.748-14.788 8.874-29.982 12.25-45.186l-11.294-2.504c-3.31 14.848-7.338 29.712-11.986 44.148zM679.082 1004.224l3.776 10.93c14.672-5.056 29.308-10.896 43.506-17.324l-4.774-10.546c-13.882 6.286-28.178 11.984-42.508 16.94zM1011.432 554.142c-0.526 15.184-1.764 30.53-3.678 45.608l11.486 1.462c1.962-15.428 3.226-31.138 3.76-46.674l-11.568-0.396zM25.102 561.224l-11.568 0.426c0.574 15.626 1.946 31.338 4.050 46.674l11.46-1.57c-2.052-14.97-3.376-30.284-3.942-45.53zM952.040 773.028l10.18 5.506c7.376-13.64 14.222-27.82 20.344-42.15l-10.646-4.542c-5.98 13.998-12.668 27.862-19.878 41.186zM1008.228 415.226c-3.784-15.082-8.316-30.17-13.498-44.846l-10.912 3.852c5.048 14.334 9.49 29.076 13.182 43.806l11.228-2.812zM162.882 896.020c11.020 10.956 22.68 21.526 34.682 31.406l7.36-8.934c-11.718-9.646-23.122-19.976-33.876-30.682l-8.166 8.21zM590.272 1025.866l1.68 11.46c15.396-2.27 30.866-5.282 45.968-8.964l-2.744-11.244c-14.754 3.59-29.868 6.536-44.904 8.748zM26.3 654.376c3.634 15.004 8.092 30.116 13.266 44.928l10.928-3.808c-5.048-14.462-9.398-29.208-12.942-43.848l-11.252 2.728zM30.176 469.92l-11.46-1.646c-2.254 15.624-3.826 31.29-4.698 46.554l11.552 0.652c0.854-14.932 2.394-30.262 4.606-45.56zM57.048 742.754c6.354 13.888 13.49 27.912 21.234 41.668l10.088-5.672c-7.586-13.482-14.572-27.212-20.786-40.812l-10.536 4.816zM498.992 1030.648l-0.474 11.568c6.754 0.276 13.656 0.416 20.528 0.416 8.724 0 17.582-0.232 26.306-0.69l-0.6-11.57c-15.228 0.818-30.582 0.892-45.76 0.276zM405.808 1029.792c15.128 3.476 30.63 6.29 46.058 8.352l1.54-11.478c-15.078-2.022-30.232-4.766-45.020-8.158l-2.578 11.284zM316.958 1000.548c14.264 6.212 28.992 11.826 43.748 16.676l3.618-11.004c-14.43-4.74-28.81-10.22-42.742-16.286l-4.624 10.614zM235.026 955.478c12.882 8.724 26.306 16.942 39.914 24.436l5.588-10.138c-13.298-7.318-26.422-15.354-39.006-23.886l-6.496 9.588z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-lua01" - ] - }, - { - "id": 62, - "paths": [ - "M599.484 291.79c-67.826 33.776-122.67 101.908-179.068 168.096-0.174 0.21-0.358 0.424-0.532 0.63-95.904-130.292-264.442-163.188-357.31-79.126-29.108 26.334-50.774 64.154-60.454 114.068-15.52 153.916 132.606 283.876 306.076 243.498 66.046-20.052 126.636-58.152 184.356-105.020 12.834 19.96 27.872 40.138 47.766 60.64 158.174 145.44 461.080 68.2 481.298-155.886 22.022-236.9-223.014-345.892-422.132-246.9zM96.634 624.544c-10.696-42.6-1.148-83.844 5.846-97.118 42.342-89.396 176.988-110.098 286.472-32.158-84.966 91.252-188.504 166.214-292.318 129.276zM751.394 696.014c-73.522-11.81-153.050-43.682-225.416-90.388 0.864-0.766 1.728-1.532 2.602-2.296 86.822-78.062 187.824-150.622 272.086-188.388 0.056-0.026 0.090-0.042 0.14-0.066 55.392 97.95 34.3 226.344-49.412 281.138z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-visualstudio" - ] - }, - { - "id": 61, - "paths": [ - "M387.836 416.738c-9.458-20.912-13.698-45.304-6.472-67.462 7.224-22.654 23.406-40.826 39.588-57.756 45.050-45.062 100.57-78.17 144.632-123.972 24.394-25.146 44.556-55.268 51.524-89.874 5.728-25.39 2.992-51.528-2.234-76.674 23.4 26.638 31.118 64.726 24.394 99.082-7.216 38.584-28.632 72.688-53.772 102.062-20.162 23.654-43.318 44.564-67.462 63.986-28.13 22.654-55.76 47.048-73.432 78.914-14.944 25.886-18.43 57.752-8.22 85.884 16.682 48.292 55.512 84.142 76.676 129.696-23.406-20.664-46.304-42.072-67.72-64.722-22.396-23.9-43.56-49.288-57.502-79.164zM514.796 378.896c-4.23 39.584 16.426 76.924 41.078 106.302 11.944 13.192 22.152 29.374 22.646 47.798 0.502 24.636-13.432 47.548-31.368 63.722 4.238-0.492 7.224-4.23 10.71-6.22 26.886-17.178 52.77-38.836 65.964-68.454 8.714-20.166 6.724-44.068-4.724-62.742-13.448-21.906-31.118-41.324-41.572-65.22-5.734-13.442-7.724-29.124-2.992-43.314 6.228-19.166 19.668-34.852 33.86-48.544 39.080-37.088 86.378-63.486 131.688-92.358-57.258 16.428-113.766 39.084-162.060 74.686-30.622 22.902-58.996 54.764-63.23 94.344zM786.894 566.104c27.136 1.496 53.764 21.408 58.748 48.794 4.732 23.65-6.716 47.048-21.41 64.97-24.15 28.876-56.764 49.542-89.614 67.218-3.244 1.982-5.98 4.474-8.47 7.216 43.318-10.956 86.628-27.378 121.734-55.512 19.41-16.182 36.588-37.598 40.326-63.238 3.486-22.152-5.72-45.056-22.154-59.742-19.92-18.18-48.042-24.896-74.436-21.408-15.186 1.99-31.862 5.226-42.316 17.922 12.452-2.482 24.64-7.466 37.592-6.22zM246.44 637.294c32.606 8.714 66.216 11.206 99.574 13.448 29.872 1.99 59.75 2.492 89.874 2.24 77.666-1.238 155.832-6.472 232.006-23.398 7.216-1.74 15.186-2.986 21.666-7.466 12.694-8.22 26.626-14.694 40.324-21.166-61.99 9.958-124.226 18.43-186.956 22.41-63.48 3.982-127.462 6.472-191.186 2.242-18.172-1.74-36.846-2.742-53.772-9.716-3.988-1.74-9.466-5.218-7.476-10.454 3.738-6.722 11.206-9.954 17.678-13.44 27.388-12.946 57.258-20.162 86.386-28.626-50.042-0.752-99.832 11.942-145.628 31.612-10.21 4.982-21.66 8.962-29.872 17.428-3.244 3.478-3.244 9.464 0.494 12.444 7.47 6.722 17.422 9.708 26.888 12.442zM649.728 705.76c-43.568 7.718-87.388 14.944-131.452 17.178-48.294 3.236-96.588 0.494-144.382-4.482-9.208-1.246-18.422-2.736-26.634-6.966-4.232-2.492-8.462-6.472-8.212-11.708 0.494-8.212 7.46-13.934 12.444-19.912-15.43 5.478-30.868 11.198-43.812 21.416-5.484 4.232-10.956 10.948-9.466 18.416 2.25 8.712 10.712 13.94 18.18 17.92 18.416 9.466 39.080 13.692 59.25 17.428 51.022 8.22 103.054 8.47 154.334 4.976 54.282-4.23 108.296-13.188 160.822-28.626-14.936-6.716-29.128-14.442-41.072-25.64zM376.136 791.902c-13.94 3.98-28.132 8.714-39.58 17.914-5.736 4.482-10.21 12.208-7.468 19.426 3.486 9.208 12.2 14.694 20.406 19.41 21.416 11.708 45.56 17.178 69.208 21.416 53.53 8.458 108.54 7.216 161.816-2.24 31.612-5.978 63.23-14.442 92.602-27.63-19.168-7.968-37.834-16.934-55.756-27.386-31.118 5.476-62.492 11.206-94.356 13.196-42.064 3.236-84.638-0.25-126.71-5.476-9.96-2.242-22.404-3.236-29.126-11.952-3.478-7.226 4.484-12.454 8.964-16.678zM716.69 951.964c34.848-7.208 69.954-15.438 101.816-31.612 9.952-5.734 22.152-11.958 25.396-23.9 1.74-11.45-10.21-17.428-18.674-22.16 5.226 5.986 8.712 14.694 3.48 21.66-8.714 11.706-23.642 16.182-36.84 20.664-41.32 11.7-84.144 16.432-126.71 21.164-112.77 10.204-226.292 12.696-339.056 3.236-37.84-3.988-76.434-8.218-112.528-21.658-5.72-2.492-14.434-4.984-14.434-12.704 2.234-6.708 8.714-10.454 14.434-13.69 25.89-13.19 54.768-20.414 83.644-22.154-8.456-4.982-18.416-5.476-28.124-5.226-24.152 0.746-47.8 6.966-70.698 14.694-19.668 7.208-39.832 15.18-55.52 29.622-6.222 5.47-11.942 15.924-5.478 23.398 9.96 10.706 25.398 13.44 39.080 16.676 76.676 13.198 154.342 20.656 232.022 23.398 103.062 2.996 206.868-1.488 308.19-21.408zM818.756 965.412c-46.804 14.936-95.344 23.148-143.644 29.872-83.392 10.454-167.538 13.69-251.432 11.206-51.030-1.99-102.060-5.476-152.352-13.948 11.7 7.968 26.142 10.454 39.588 14.192 56.514 11.952 114.51 14.192 172.020 15.932 84.38 1.496 168.774-1.74 251.924-14.936 39.338-6.96 78.918-15.43 114.26-33.854 18.43-9.708 37.104-24.652 40.326-46.304-18.664 19.91-45.544 29.126-70.69 37.84z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-java" - ] - }, - { - "id": 60, - "paths": [ - "M436.39 515.042c0 129.438 9.248 238.2-54.618 302.566-35.922 36.21-92.602 57.544-162.34 57.544-114.384 0-177.894-55.724-218.43-132.832 39.024-24.918 78.904-49.004 119.55-72.308 16.584 46.376 72.582 98.516 135.776 66.42 40.054-20.36 35.43-82.080 35.43-149.074 0-139.098 0-299.56 0-425.056-0.126-2.088-0.25-4.174 1.464-4.428 47.732 0 95.456 0 143.17 0-0.002 111.79-0.002 238.264-0.002 357.168zM799.454 430.924c-36.494-15.628-81.856-34.116-92.976-67.904-12.466-37.868 8.792-69.066 32.462-79.682 52.046-23.376 114.076 15.112 126.926 54.602 39.166-23.314 78.206-46.768 113.652-73.792-41.652-69.168-102.708-118.684-214.006-115.122-61.28 1.958-107.314 21.304-141.682 50.176-33.542 28.17-59.442 67.708-63.474 123.978-12.050 168.424 113.976 211.416 221.39 258.274 33.86 14.77 71.502 29.684 87.080 59.034 32.122 60.564-24.778 100.52-73.796 104.794-78.672 6.854-131.716-39.174-162.35-87.080-38.266 23.72-79.876 44.090-116.596 69.366 51.074 89.816 134.818 147.96 265.662 147.586 133.48-0.376 232.438-64.732 240.562-185.954 11.046-164.768-112.396-210.99-222.854-258.276z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-js02" - ] - }, - { - "id": 59, - "paths": [ - "M1023 558.878c-6.746 28.136-17.358 51.628-31.838 70.492s-32.46 33.094-53.936 42.704c-21.482 9.598-48.804 14.402-81.99 14.402-40.246 0-73.14-5.856-98.656-17.554-25.526-11.704-47.542-32.262-66.070-61.73-18.524-29.45-27.788-67.16-27.788-113.116 0-61.26 16.3-108.35 48.886-141.252 32.586-32.906 78.706-49.366 138.33-49.366 46.65 0 83.32 9.44 110.018 28.298 26.698 18.868 46.526 47.844 59.492 86.91l-101.052 22.482c-3.528-11.278-7.236-19.538-11.112-24.752-6.404-8.758-14.238-15.5-23.496-20.21-9.274-4.712-19.62-7.082-31.072-7.082-25.95 0-45.818 10.434-59.632 31.296-10.43 15.478-15.654 39.79-15.654 72.924 0 41.052 6.23 69.19 18.682 84.42 12.474 15.218 29.99 22.82 52.562 22.82 21.89 0 38.442-6.136 49.644-18.438 11.196-12.286 19.32-30.152 24.376-53.554l100.306 30.306zM223.332 413.326c4.598 18.538 6.894 39.414 6.894 62.62 0 26.526-3.12 49.43-9.374 68.728-6.254 19.296-14.706 35.23-25.326 47.804-10.62 12.594-23.054 21.934-37.302 28.040-14.238 6.098-29.276 9.156-45.094 9.156-18.988 0-35.53-3.426-49.62-10.296-14.096-6.852-25.774-16.758-35.040-29.722-9.274-12.96-16.168-28.746-20.694-47.36s-6.776-39.596-6.776-62.962c0-26.224 3.094-48.974 9.274-68.27 6.17-19.292 14.58-35.226 25.202-47.81 10.62-12.58 23.022-21.928 37.186-28.032 14.164-6.106 29.168-9.154 44.986-9.154 18.988 0 35.53 3.468 49.628 10.4 14.088 6.928 25.808 16.838 35.148 29.726 9.346 12.882 16.316 28.592 20.908 47.132zM188.408 478.884c0-17.328-1.314-33.194-3.95-47.586-2.646-14.388-6.904-26.79-12.784-37.186-5.872-10.4-13.45-18.46-22.714-24.19-9.274-5.73-20.46-8.59-33.576-8.59-12.65 0-23.546 3.052-32.662 9.156-9.124 6.106-16.618 14.394-22.498 24.864-5.872 10.48-10.246 22.76-13.108 36.852-2.862 14.090-4.292 29.048-4.292 44.872 0 17.486 1.348 33.422 4.068 47.82 2.71 14.386 6.97 26.746 12.776 37.070 5.796 10.32 13.29 18.344 22.49 24.074 9.19 5.73 20.268 8.586 33.226 8.586 12.658 0 23.586-3.046 32.778-9.148 9.198-6.106 16.768-14.39 22.722-24.872 5.956-10.476 10.364-22.718 13.224-36.734 2.862-14.020 4.3-29.010 4.3-44.988zM452.15 508.048c0 18.842-2.604 35.682-7.792 50.53-5.206 14.836-12.592 27.43-22.166 37.742-9.564 10.332-21.208 18.238-34.922 23.738-13.714 5.504-29.16 8.25-46.342 8.25-13.416 0-27.122-1.282-41.144-3.844-14.014-2.562-27.878-6.622-41.594-12.208v-306.084h39.332v87.94l-1.804 42.046c11.294-15.22 23.396-25.962 36.288-32.216 12.876-6.25 26.706-9.378 41.478-9.378 12.958 0 24.336 2.708 34.132 8.138 9.798 5.422 18.006 13.074 24.644 22.942s11.61 21.782 14.92 35.718c3.308 13.946 4.97 29.508 4.97 46.686zM411.904 509.852c0-11.898-0.856-22.83-2.594-32.778-1.73-9.948-4.484-18.46-8.25-25.546-3.768-7.082-8.592-12.622-14.472-16.618-5.872-3.988-12.882-5.988-21.016-5.988-4.974 0-10.022 0.79-15.146 2.374-5.132 1.58-10.438 4.216-15.944 7.91-5.498 3.698-11.302 8.592-17.408 14.696-6.096 6.106-12.618 13.678-19.554 22.722v110.096c7.686 3.012 15.528 5.39 23.512 7.122 7.984 1.726 15.602 2.594 22.83 2.594 9.048 0 17.674-1.43 25.882-4.292 8.208-2.86 15.454-7.652 21.708-14.356s11.228-15.602 14.92-26.68c3.686-11.076 5.532-24.826 5.532-41.256zM460.36 431.182h111.232v191.706c0 21.098-4.906 37.078-14.706 47.922-9.796 10.852-23.28 16.286-40.454 16.286-5.432 0-11.012-0.34-16.734-1.024-5.722-0.676-11.42-1.688-17.076-3.050-5.648-1.36-11.144-3.012-16.492-4.976-5.356-1.954-10.372-4.14-15.038-6.55v37.524c8.592 3.622 18.198 6.446 28.828 8.484 10.622 2.032 21.508 3.042 32.662 3.042 15.378 0 29.202-2.176 41.486-6.55 12.284-4.376 22.638-10.782 31.080-19.214 8.434-8.45 14.93-18.804 19.446-31.090 4.516-12.282 6.78-26.332 6.78-42.156v-222.904h-151.014v32.55zM609.684 312.498c-2.794-2.852-6.070-5.082-9.84-6.666-3.766-1.58-7.834-2.376-12.2-2.376-4.376 0-8.452 0.794-12.21 2.376-3.776 1.584-7.052 3.814-9.838 6.666-2.788 2.866-4.974 6.188-6.562 9.952-1.572 3.768-2.372 7.764-2.372 11.98 0 4.376 0.798 8.406 2.372 12.098 1.588 3.692 3.776 6.974 6.562 9.832 2.786 2.866 6.062 5.086 9.838 6.666 3.76 1.588 7.836 2.374 12.21 2.374 4.366 0 8.434-0.786 12.2-2.374 3.77-1.58 7.044-3.8 9.84-6.666 2.778-2.858 4.974-6.138 6.544-9.832 1.59-3.692 2.378-7.722 2.378-12.098 0-4.216-0.79-8.212-2.378-11.98-1.57-3.766-3.768-7.088-6.544-9.952z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-objc" - ] - }, - { - "id": 58, - "paths": [ - "M677.784 544.436l96.82 29.26c-6.514 27.164-16.76 49.836-30.732 68.042-13.98 18.206-31.338 31.946-52.064 41.218-20.734 9.266-47.108 13.898-79.144 13.898-38.85 0-70.596-5.638-95.23-16.934-24.636-11.294-45.886-31.156-63.776-59.592-0.936-1.488-1.748-3.086-2.632-4.618l-30.902 213.166h-51.34l91.364-633.758h51.852l-24.298 167.606c30.236-23.68 70.158-35.586 119.844-35.586 45.038 0 80.434 9.112 106.2 27.318 25.776 18.208 44.912 46.18 57.43 83.89l-97.542 21.704c-3.408-10.886-6.986-18.86-10.728-23.896-6.18-8.454-13.74-14.958-22.68-19.506-8.95-4.55-18.94-6.838-29.992-6.838-25.050 0-44.23 10.072-57.562 30.212-10.072 14.942-15.112 38.408-15.112 70.39 0 39.626 6.014 66.79 18.032 81.478 12.042 14.696 28.952 22.040 50.742 22.040 21.126 0 37.102-5.93 47.914-17.798 10.81-11.856 18.654-29.098 23.536-51.696zM228.414 596.134c-10.812 11.87-26.79 17.798-47.914 17.798-21.792 0-38.7-7.344-50.742-22.040-12.018-14.69-18.032-41.852-18.032-81.478 0-31.982 5.040-55.45 15.112-70.39 13.332-20.14 32.512-30.212 57.562-30.212 11.054 0 21.042 2.288 29.992 6.838 8.942 4.548 16.5 11.052 22.68 19.506 3.744 5.038 7.32 13.010 10.73 23.896l97.542-21.704c-12.518-37.71-31.654-65.682-57.43-83.89-25.766-18.208-61.164-27.318-106.2-27.318-57.554 0-102.066 15.89-133.522 47.654-31.456 31.758-47.192 77.216-47.192 136.35 0 44.354 8.94 80.75 26.822 109.186 17.89 28.436 39.14 48.296 63.776 59.592s56.382 16.934 95.23 16.934c32.038 0 58.41-4.632 79.144-13.898 20.726-9.274 38.084-23.014 52.066-41.218 13.972-18.208 24.218-40.878 30.732-68.042l-96.82-29.26c-4.882 22.596-12.724 39.838-23.536 51.696zM966.958 488.638v-56.034h-47.008v56.034h-67.444v-56.034h-47.006v56.034h-55.748v47.016h55.748v55.74h47.008v-55.74h67.444v55.74h47.008v-55.74h56.040v-47.016h-56.042z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-ccplusplus" - ] - }, - { - "id": 57, - "paths": [ - "M431.2 567.608l165.966 50.17c-11.152 46.548-28.708 85.424-52.672 116.628-23.976 31.222-53.728 54.776-89.258 70.662-35.54 15.884-80.758 23.828-135.676 23.828-66.602 0-121.022-9.682-163.248-29.036-42.234-19.362-78.662-53.404-109.328-102.15-30.656-48.736-45.984-111.13-45.984-187.174 0-101.38 26.972-179.298 80.892-233.75 53.928-54.448 130.228-81.682 228.902-81.682 77.208 0 137.896 15.62 182.060 46.826 44.188 31.218 76.992 79.162 98.456 143.814l-167.222 37.206c-5.846-18.664-11.986-32.328-18.39-40.97-10.596-14.488-23.554-25.638-38.89-33.442-15.33-7.798-32.462-11.71-51.416-11.71-42.932 0-75.818 17.266-98.674 51.786-17.266 25.616-25.908 65.842-25.908 120.672 0 67.93 10.306 114.49 30.922 139.69 20.626 25.184 49.62 37.776 86.972 37.776 36.22 0 63.6-10.172 82.148-30.524 18.54-20.33 31.988-49.888 40.348-88.62zM926.938 471.954v-96.062h-80.592v96.062h-115.608v-96.062h-80.592v96.062h-95.562v80.592h95.562v95.564h80.592v-95.564h115.608v95.564h80.592v-95.564h96.062v-80.592h-96.062z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-cplusplus" - ] - }, - { - "id": 56, - "paths": [ - "M466.548 572.178l179.604 54.29c-12.070 50.376-31.070 92.446-57 126.214-25.95 33.788-58.142 59.276-96.594 76.466-38.458 17.192-87.394 25.788-146.824 25.788-72.076 0-130.964-10.476-176.66-31.422-45.704-20.954-85.126-57.792-118.31-110.542-33.176-52.744-49.764-120.264-49.764-202.556 0-109.71 29.188-194.032 87.538-252.958 58.36-58.922 140.928-88.394 247.71-88.394 83.552 0 149.228 16.902 197.020 50.672 47.82 33.784 83.318 85.668 106.546 155.632l-180.962 40.262c-6.328-20.196-12.97-34.984-19.9-44.336-11.466-15.678-25.49-27.742-42.086-36.19-16.588-8.44-35.128-12.674-55.64-12.674-46.46 0-82.048 18.686-106.782 56.042-18.684 27.722-28.036 71.252-28.036 130.588 0 73.512 11.152 123.896 33.464 151.168 22.32 27.254 53.696 40.878 94.118 40.878 39.198 0 68.826-11.006 88.898-33.032 20.060-21.994 34.614-53.982 43.66-95.896zM970.69 478.518l-13.708 68.584h66.018v74.524h-80.904l-19 95.044h-76.82l19.054-95.044h-59.538l-19.19 95.044h-76.28l19.054-95.044h-37.144v-74.524h52.094l13.752-68.584h-65.846v-74.524h80.796l19.376-96.664h76.818l-19.504 96.664h59.25l19.388-96.664h76.546l-19.314 96.664h37.412v74.524h-52.31zM894.034 478.518h-59.36l-13.842 68.584h59.448l13.754-68.584z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-csharp" - ] - }, - { - "id": 55, - "paths": [ - "M2.016 1c-1.14 0.166-1.056 1.54-0.974 2.916 0 339.336 0 678.62 0 1017.948 338.728 2.27 681.616 0.324 1021.958 0.972 0-340.618 0-681.22 0-1021.836-340.316 0-680.666 0-1020.984 0zM519.786 904.334c-23.644 23.838-60.956 37.876-106.858 37.876-75.286 0-117.086-36.68-143.768-87.422 25.684-16.4 51.932-32.244 78.688-47.59 10.912 30.524 47.772 64.84 89.366 43.714 26.366-13.398 23.322-54.020 23.322-98.108 0-91.546 0-197.156 0-279.744-0.084-1.376-0.166-2.75 0.964-2.916 31.414 0 62.826 0 94.232 0 0 73.576 0 156.804 0 235.058 0 85.196 6.088 156.774-35.946 199.132zM941.392 819.834c-5.348 79.768-70.486 122.126-158.34 122.376-86.124 0.248-141.248-38.026-174.866-97.134 24.17-16.634 51.556-30.034 76.75-45.644 20.16 31.522 55.074 61.82 106.858 57.304 32.262-2.812 69.712-29.11 48.57-68.964-10.254-19.32-35.032-29.134-57.312-38.85-70.704-30.848-153.656-59.142-145.722-169.984 2.654-37.028 19.704-63.050 41.778-81.592 22.622-19 52.92-31.734 93.258-33.022 73.258-2.346 113.446 30.24 140.858 75.768-23.328 17.782-49.028 33.216-74.802 48.562-8.458-25.99-49.288-51.316-83.544-35.938-15.578 6.986-29.576 27.522-21.368 52.448 7.32 22.23 37.178 34.398 61.198 44.688 72.704 31.12 153.954 61.534 146.684 169.982z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-js01" - ] - }, - { - "id": 54, - "paths": [ - "M730.562 773.872l217.27 192.832-427.508-33.588c83.756-50.6 152.852-111.026 204.588-159.134 0.852 0.166 1.758 0.258 2.664 0.258 0.99-0.002 1.988-0.12 2.986-0.368zM971.036 889.1l40.016-524.090c-19.796 50.568-51.114 109.46-91.714 172.344l51.698 351.746zM745.094 761.966l216.768 192.392-57.872-393.73c-47.706 71.012-104.99 143.616-158.896 201.338zM491.902 949.552c-46.69 25.868-94.746 46.47-143.414 61.514l499.572-33.596-356.158-27.918zM74.694 697.102l130.858 305.78 107.702-356.8-238.56 51.020zM345.028 627.976l364.364 117.034-92.976-368.408-271.388 251.374zM636.806 340.012l339.658-22.736-265.562-216.896-74.096 239.632zM830.004 5.838l-222.884-1.008 99.086 69.38 123.798-68.372zM9.57 567.516l-7.334 217.306 53.458-97.5-46.124-119.806zM131.336 654.816c42.368 2.702 85.166-6.686 128.34-25.584 29.082-13.782 59.252-31.224 89.534-51.726 43.43-30.684 87.2-69.064 131.29-112.76 158.584-157.166 223.79-332.934 154.492-402.918-16.536-16.688-40.208-25.218-70.376-25.35-91.32-0.394-227.81 68.35-344.138 183.684-111.172 110.196-183.262 240.992-183.648 333.236-0.136 32.798 8.938 58.638 26.966 76.814 16.034 16.198 38.816 22.762 67.54 24.604zM462.206 944.36c4.972-2.572 9.926-5.172 14.816-7.818l-146.644-282.944-110.366 365.572c0.924-0.12 8.378-1.016 8.378-1.016 9.632-1.226 19.146-2.636 28.542-4.23 60.636-10.338 120.63-29.266 178.308-56.278 9.128-4.268 18.102-8.706 26.966-13.286zM761.686 710.982l3.478-3.992c2.428-2.848 4.874-5.75 7.308-8.662 0 0 7.536-8.972 10.464-12.536 4.928-5.96 9.826-12.042 14.742-18.158 4.516-5.64 9.020-11.298 13.516-17.058 4.716-6.042 9.432-12.096 14.112-18.268 10.594-13.946 21.306-28.568 32.754-44.72 12.114-17.088 23.816-34.284 34.832-51.168l-19.862-12.146c-52.742-32.25-158.74-97.212-228.406-140.006l90.148 357.19c8.398-9.222 17.264-19.25 26.914-30.476zM1016.47 135.9l-280.46-39.378 267.376 218.654c9.394-30.992 15.512-61.048 18.176-89.398 0.384-3.974 0.63-7.97 0.87-11.996 0.228-3.704 0.358-7.422 0.458-11.148 0.642-24.146-1.52-46.576-6.42-66.734zM908.65 519.484c0.688-0.906 1.458-1.924 2.298-3.146 5.338-7.558 12.93-19.924 21.372-34.818 23.496-41.434 52.478-100.508 64.564-143.986l-348.824 23.272c72.758 44.712 179.042 109.848 231.884 142.168l28.174 17.196c0.168-0.21 0.34-0.44 0.532-0.686zM490.528 932.256l1.090-0.614c76.092-42.168 144.1-94.042 220.284-168.174l-370.838-119.614 149.464 288.402zM1 823.884c1.638 48.292 11.886 88.162 30.482 118.782l17.316-206.226-47.798 87.444zM68.568 722.814l-19.98 238c28.468 37.24 66.504 53.87 123.056 53.87 5.696 0 11.612-0.156 17.956-0.466l-9.99-24.824c-21.618-53.704-83.306-206.898-111.042-266.58zM1012.288 121.208c-4.112-12.578-9.36-24.192-15.622-34.612-25.264-42.030-68.904-68.922-129.742-79.952l-135.922 75.062 281.286 39.502z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-ruby" - ] - }, - { - "id": 53, - "paths": [ - "M725.034 601.66l267.63 80.894c-17.984 75.062-46.292 137.762-84.942 188.094-38.646 50.316-86.628 88.308-143.928 113.926-57.306 25.622-130.22 38.43-218.77 38.43-107.41 0-195.156-15.618-263.24-46.836-68.094-31.21-126.862-86.098-176.296-164.708-49.432-78.59-74.154-179.208-74.154-301.83 0-163.476 43.488-289.112 130.452-376.932 86.954-87.79 209.99-131.7 369.094-131.7 124.494 0 222.348 25.18 293.582 75.506 71.244 50.33 124.15 127.644 158.772 231.898l-269.664 60c-9.44-30.098-19.328-52.128-29.656-66.060-17.086-23.366-37.99-41.354-62.702-53.934-24.72-12.576-52.364-18.876-82.916-18.876-69.22 0-122.252 27.84-159.106 83.5-27.862 41.308-41.788 106.168-41.788 194.582 0 109.538 16.618 184.62 49.882 225.238 33.254 40.618 79.996 60.938 140.226 60.938 58.424 0 102.568-16.418 132.462-49.21 29.888-32.798 51.574-80.448 65.062-142.92z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-c" - ] - }, - { - "id": 52, - "paths": [ - "M13.924 533.506c45.18-11.282 106.61-26.648 214.236-29.506-2.974-5.948-5.66-12.106-8.038-18.456-41.88-0.364-170.86 5.584-215.042 16.5-0.25 0.078-0.518 0.096-0.786 0.096-1.478 0-2.84-1.016-3.204-2.512-0.422-1.746 0.652-3.548 2.416-3.99 43.78-10.82 169.65-16.826 214.236-16.71-10.034-29.506-14.466-63.31-14.466-101.046 0-67.032 20.874-92.318 48.92-128.040-21.448-76.394 7.694-128.614 7.694-128.614s45.066-9.342 130.264 51.664c46.178-19.78 169.294-21.428 227.54-4.392 35.76-23.636 101.142-57.17 127.54-47.79 7.136 11.51 22.524 45.026 9.324 118.696 8.978 16.154 55.522 50.572 55.712 147.856-0.768 35.876-4.49 66.168-11.396 91.798 111.080-0.94 176.424 8.23 221.43 16.518 1.766 0.364 2.956 2.072 2.648 3.856-0.306 1.574-1.688 2.706-3.222 2.706-0.23 0-0.422-0.018-0.652-0.038-44.932-8.326-110.388-17.458-222.122-16.442-1.958 6.504-4.144 12.682-6.524 18.572 38.026 1.266 142.466 5.334 227.646 31.386 1.766 0.538 2.724 2.378 2.188 4.144-0.422 1.4-1.726 2.32-3.146 2.32-0.306 0-0.652-0.038-0.958-0.152-86.37-26.398-193.076-30.024-228.566-31.196-30.888 67.858-94.236 93.18-196.644 103.712 33.19 20.892 42.706 47.096 42.706 118.006 0 70.906-0.958 80.422-0.728 96.726 0.346 26.766 39.558 39.578 38.102 48.192-1.458 8.598-32.806 7.214-47.462 2.094-41.516-14.464-37.374-49-37.374-49l-1.38-94.808c0 0 2.84-51.032-16-51.032 0 10.262 0 118.484 0 155.184 0 33.726 23.598 43.972 23.598 56.442 0 21.43-43.126-2.032-56.404-15.406-20.268-20.336-17.964-63.46-17.466-97.57 0.46-32.942-0.306-104.98-0.306-104.98l-13.754 0.29c0 0 5.64 157.372-7.252 186.050-16.67 36.816-66.954 49.48-66.954 32.71 0-11.282 12.392-7.692 19.242-32.976 5.85-21.508 3.856-181.95 3.856-181.95s-16.114 9.536-16.114 39.578c0 13.754-0.384 92.316-0.384 115.704 0 29.41-41.766 46.156-61.834 46.156-10.168 0-22.81-0.496-22.81-5.886 0-13.602 38.198-21.586 38.198-49.882 0-24.536-0.538-87.652-0.538-87.652s-19.262 3.296-46.734 3.296c-69.256 0-91.166-44.2-101.584-68.93-13.564-32.21-31.156-47.346-49.842-59.434-11.472-7.424-14.12-16.192-0.844-18.686 61.314-11.548 76.988 69.526 117.928 82.436 29.218 9.23 66.782 5.238 85.468-6.848 2.476-24.77 20.318-46.178 35.186-57.458-104.134-9.996-165.872-46.158-197.872-104.29-108.932 2.61-170.744 18.072-216.058 29.39-3.3 0.826-6.522 1.63-9.63 2.418-0.268 0.056-0.538 0.076-0.806 0.076-1.478 0-2.82-0.998-3.204-2.494-0.442-1.764 0.652-3.568 2.418-4.010 3.12-0.768 6.324-1.552 9.604-2.396z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "github-01" - ] - }, - { - "id": 51, - "paths": [ - "M132.168 1h759.638c72.158 0 131.194 59.010 131.194 131.168v759.638c0 72.158-59.036 131.194-131.194 131.194h-759.638c-72.158 0-131.168-59.036-131.168-131.194v-759.638c0-72.158 59.010-131.168 131.168-131.168v0zM745.468 114.528c-25.3 0-46.010 20.71-46.010 46.010v110.134c0 25.3 20.708 46.010 46.010 46.010h115.524c25.3 0 46.010-20.708 46.010-46.010v-110.134c0-25.3-20.708-46.010-46.010-46.010l-115.524-0zM907.476 433.18h-89.95c8.508 27.794 13.1 57.212 13.1 87.704 0 169.992-142.222 307.796-317.678 307.796-175.432 0-317.654-137.804-317.654-307.796 0-30.49 4.59-59.908 13.1-87.704h-93.842v431.706c0 22.356 18.264 40.644 40.622 40.644h711.682c22.332 0 40.622-18.29 40.622-40.644v-431.706h-0.002zM512.95 310.894c-113.354 0-205.25 89.050-205.25 198.886s91.896 198.886 205.25 198.886c113.376 0 205.272-89.050 205.272-198.886s-91.896-198.886-205.272-198.886z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "instagram" - ] - }, - { - "id": 50, - "paths": [ - "M512.15 598.88c-7.584 0-14.97 0.374-22.38 0.822-4.914-14.022-7.908-29.392-7.908-46.134 0-16.492 2.918-45.56 7.684-45.612 2.47 0 4.99 0.224 7.46 0.224 125.502 0 227.206-101.85 227.206-227.378 0-29.942-13.7-68.742-29.668-84.71l77.922-43.614v-151.478l-162.582 90.772c-36.102-24.078-72.856-38.226-119.514-38.226-125.504 0-223.912 101.702-223.912 227.206 0 70.612 33.884 133.688 84.41 175.356-14.074 29.542-21.308 62.402-21.308 97.286 0 31.338 6.986 61.106 18.44 88.178-66.046 38.7-108.738 100.078-108.738 169.318 0 117.17 122.186 212.11 272.768 212.11 150.654 0 272.716-94.94 272.716-212.11-0.004-117.072-122.016-212.010-272.596-212.010zM497.004 174.71c58.584 0 106.018 47.458 106.018 105.992 0 58.584-47.434 106.068-106.018 106.068-58.586 0-106.042-47.482-106.042-106.068 0-58.536 47.456-105.992 106.042-105.992zM512.15 892.48c-66.918 0-121.188-36.504-121.188-81.59 0-45.038 54.27-81.542 121.188-81.542 66.92 0 121.19 36.504 121.19 81.542 0 45.086-54.27 81.59-121.19 81.59z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "github-02" - ] - }, - { - "id": 49, - "paths": [ - "M512 309.495l84.838 198.722-169.679-0.002 84.84-198.72zM956.433 186.476l-66.241 596.163-378.192 213.864-378.192-213.862-66.241-596.167 444.433-158.976 444.433 158.978zM795.563 735.327l-283.563-622.662-283.563 622.662h105.986l54.885-143.838 122.692-1.893 122.69 1.893 54.883 143.838h105.99z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "angularjs" - ] - }, - { - "id": 48, - "paths": [ - "M942 580.166l81-68.166-81-68.162 56.116-89.788-98.158-39.68 25.466-102.762-105.626-7.406-7.402-105.622-102.766 25.458-39.688-98.154-89.776 56.12-68.166-81.004-68.162 81.004-89.788-56.12-39.68 98.154-102.762-25.462-7.41 105.618-105.618 7.406 25.458 102.766-98.15 39.688 56.112 89.784-81 68.162 81 68.166-56.112 89.784 98.15 39.68-25.466 102.766 105.626 7.402 7.402 105.626 102.77-25.466 39.688 98.158 89.78-56.124 68.162 81.008 68.166-81.008 89.784 56.124 39.68-98.158 102.766 25.466 7.402-105.618 105.626-7.412-25.466-102.766 98.158-39.688-56.116-89.774zM883.996 670.148l-34.258 13.858 8.882 35.872 13.284 53.586-91.996 6.456-2.586 36.91-3.868 55.076-89.45-22.166-13.858 34.258-20.66 51.11-78.096-48.82-59.39 70.576-59.384-70.578-78.102 48.82-34.52-85.368-89.458 22.166-3.86-55.084-2.586-36.912-92-6.454 22.168-89.45-85.366-34.516 48.812-78.106-70.566-59.382 70.566-59.384-48.812-78.104 85.366-34.52-22.16-89.454 91.992-6.454 2.59-36.908 3.864-55.084 89.456 22.168 34.512-85.368 78.104 48.816 59.384-70.57 59.392 70.576 78.088-48.822 34.526 85.366 89.45-22.16 3.868 55.084 2.586 36.912 91.996 6.454-22.176 89.452 85.384 34.512-48.812 78.104 70.562 59.384-70.572 59.392 48.82 78.088-51.116 20.668zM604.336 721.464l1.048 73.93c0 0-124.828 14.456-209.612-4.298-122.514-27.098-136.334-111.208-136.334-111.208l-11.086-58.22c5.102 16.702 30.728 76.536 139.472 97.218 83.808 15.944 205.584 3.728 216.512 2.578zM491.94 325.428l55.010 85.816 229.334 56.456-3.676 25.916-209.858-57.724 38.376 59.882c-28.21 6.142-58.384 10.376-89.828 12.3-153.378 9.374-283.254-39.332-305.79-111.208l24.838 130.354c17.188 24.65 56.182 59.376 142.946 73.672 82.506 13.598 198.34 4.924 232.374 1.896l0.084 20.16c0 0-139.618 14.838-234.1-1.462-81.844-14.106-119.786-47.574-137.082-72.134l9.36 49.146c0.288 0.498 0.548 0.98 0.84 1.48 4.17 14.47 28.698 77.256 144.492 98.324 75.918 13.822 182.040 5.956 214.792 2.994l-0.956-66.67 157.184 57.004 14.264-35.032 24.302-286.434c-2.046 6.424-4.858 12.766-8.476 18.984l-298.43-63.72zM762.51 596.716l-159.954-43.996-0.1-22.222 163.728 40.302-3.674 25.916zM202.106 379.010l3.402 17.858c-1.822-5.814-3.028-11.758-3.402-17.858z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "prog-cakephp" - ] - }, - { - "id": 47, - "paths": [ - "M825.044 410.534l197.956-164.958-301.62-192.71-207.352 173.88-202.688-173.88-310.34 202.148 213.716 162.58-213.716 162.604 310.342 183.812 202.688-155.518 202.622 155.518 306.348-183.812-197.956-169.664zM514.658 235.756l292.742 168.186-295.41 195.758-293.574-184.954 296.242-178.99zM725.416 792.604l90.28-54.164v49.254l-304.4 197.442-297.656-198.788v-46.428l98.936 58.602 9.146-6.994 192.306-147.56 201.454 154.6 9.934-5.964z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "dropbox" - ] - }, - { - "id": 46, - "paths": [ - "M980.416 575.876h42.584v298.084c0 23.42-19.162 42.582-42.584 42.582h-936.832c-23.42 0-42.584-19.162-42.584-42.582v-298.084h178.85v76.65h153.302v-76.65h357.7v76.65h153.3v-76.65h136.264zM385.41 258.804c0-2.724 0.246-5.402 0.536-8.068 0.138-1.138 0.266-2.28 0.454-3.41 0.166-1.046 0.42-2.078 0.632-3.124 0.644-3.040 1.414-6.050 2.4-8.994 13.91-41.596 63.508-72.502 122.568-72.502 59.058 0 108.654 30.906 122.568 72.504 0.99 2.944 1.756 5.956 2.404 8.994 0.208 1.044 0.464 2.076 0.63 3.124 0.184 1.13 0.316 2.272 0.45 3.41 0.292 2.666 0.534 5.344 0.534 8.068l0.1 59.974h56.422v-59.974c0-4.224-0.298-8.392-0.764-12.522-0.376-3.726-0.99-7.39-1.68-11.034 0-0.016 0-0.030-0.010-0.042-13.78-72.256-89.424-127.75-180.654-127.75s-166.874 55.492-180.654 127.75c0 0.012-0.004 0.026-0.008 0.042-0.69 3.642-1.306 7.306-1.68 11.034-0.47 4.128-0.766 8.296-0.766 12.522v59.974h56.422l0.096-59.976zM936.17 269.276c-14.58-18.738-46.392-34.066-70.696-34.066h-138.122c1.156 7.734 1.822 15.598 1.822 23.596v94.040h-124.508l-0.048-34.014-0.1-60.028c0-8.3-2.596-16.278-7.244-23.596h-170.542c-4.65 7.328-7.256 15.328-7.256 23.65l-0.096 59.972-0.054 34.014h-124.5v-94.038c0-7.998 0.666-15.862 1.822-23.596h-138.122c-24.298 0-56.116 15.328-70.696 34.066l-86.83 136.266v127.748h178.85v-76.648h153.302v76.648h357.7v-76.648h153.3v76.648h178.848v-127.748l-86.83-136.266zM810.084 575.876v-85.166h-85.168v127.75h85.168v-42.584zM299.084 575.876v-85.166h-85.166v127.75h85.166v-42.584z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "tl-toolbox" - ] - }, - { - "id": 45, - "paths": [ - "M570.62 910.138l-0.924-1.23-0.914-1.322-1.024-1.43-0.924-1.738-0.814-1.83-0.914-1.948-0.816-2.144-0.814-2.346-0.714-2.346-0.714-2.552-0.716-2.762-0.616-2.754-0.616-2.958-0.616-2.96-0.508-3.17-0.508-3.168-0.414-3.262-0.4-3.376-0.306-3.476-0.308-3.468-0.208-3.468-0.208-3.576-0.1-3.576-0.1-3.676v-7.144l0.1-3.676 0.1-3.576 0.208-3.568 0.208-3.476 0.308-3.476 0.306-3.468 0.4-3.37 0.414-3.268 0.508-3.17 0.508-3.16 1.232-5.92 0.616-2.76 0.716-2.762 0.714-2.544 0.714-2.354 0.814-2.354 0.816-2.138 0.914-1.938 0.814-1.838 0.924-1.738 1.024-1.432 0.914-1.33 0.924-1.222 1.024-1.024 1.014-0.814 1.024-0.616 1.024-0.408 1.014-0.306 1.032-0.1 1.016 0.1 1.024 0.306 1.022 0.408 1.024 0.616 1.024 0.814 1.014 1.024 0.916 1.222 0.922 1.33 1.024 1.432 0.916 1.738 0.822 1.838 0.916 1.938 0.814 2.138 0.824 2.354 0.714 2.354 0.714 2.544 0.714 2.762 0.608 2.76 1.232 5.92 0.508 3.16 0.508 3.17 0.408 3.268 0.414 3.37 0.3 3.468 0.306 3.476 0.208 3.476 0.2 3.568 0.1 3.576 0.108 3.676v7.144l-0.108 3.676-0.1 3.576-0.2 3.576-0.208 3.468-0.306 3.468-0.3 3.476-0.414 3.376-0.408 3.262-0.508 3.168-0.508 3.17-0.616 2.96-0.616 2.958-0.608 2.754-0.714 2.762-0.714 2.552-0.714 2.346-0.824 2.346-0.814 2.144-0.916 1.948-0.822 1.83-0.916 1.738-1.024 1.43-0.922 1.322-0.916 1.23-1.014 1.024-1.024 0.814-1.024 0.618-1.022 0.406-1.024 0.308-1.016 0.1-1.032-0.1-1.014-0.308-1.024-0.406-1.024-0.618-1.014-0.814-1.024-1.024zM544.986 588.876l-0.308-1.124-0.408-1.024-0.616-0.924-0.708-0.814-0.822-0.608-1.024-0.506-1.014-0.316-1.132-0.3h-2.644l-3.068 0.508-3.37 1.024-3.576 1.53-3.984 2.046-4.182 2.446-8.888 6.128-9.598 7.66-9.8 9.082-10.010 10.422-9.394 10.92-8.068 10.73-6.74 10.312-5.208 9.498-2.042 4.39-1.634 4.084-1.126 3.786-0.612 3.466-0.204 3.060v1.324l0.204 1.23 0.412 1.23 0.408 1.016 0.612 0.814 0.714 0.814 0.818 0.616 1.020 0.516 1.024 0.408 1.124 0.208 1.326 0.1 1.326-0.1 3.064-0.516 3.37-1.022 3.576-1.532 3.978-1.938 4.19-2.446 8.886-6.138 9.598-7.75 9.8-9.1 10.010-10.414 9.294-10.928 8.168-10.72 6.736-10.312 5.208-9.498 2.044-4.392 1.532-4.084 1.13-3.776 0.708-3.476 0.208-2.96-0.1-1.43-0.208-1.22zM547.738 744.712l-3.776-3.168-3.776-2.754-3.476-2.354-3.362-1.738-1.538-0.714-1.432-0.616-1.322-0.4-1.124-0.214-1.124-0.092h-0.516l-0.406 0.092-0.408 0.108-0.308 0.208-0.306 0.2-0.3 0.208-0.214 0.308-0.2 0.306-0.102 0.408v0.408l-0.1 0.406 0.1 0.516 0.202 1.016 0.314 1.124 0.608 1.33 0.716 1.322 0.814 1.43 2.146 3.062 2.752 3.276 3.168 3.362 3.578 3.476 3.776 3.168 3.784 2.854 3.468 2.254 3.37 1.838 1.53 0.714 1.432 0.508 1.23 0.406 1.222 0.202 1.024 0.108h0.516l0.398-0.108 0.416-0.1 0.298-0.202 0.308-0.2 0.306-0.208 0.202-0.308 0.208-0.306 0.1-0.408v-0.408l0.11-0.406-0.11-0.416-0.1-1.116-0.408-1.13-0.516-1.222-0.714-1.43-0.814-1.432-2.246-3.060-2.652-3.268-3.17-3.37-3.576-3.47zM567.15 567.226l-2.144 3.060-0.924 1.432-0.714 1.43-0.508 1.23-0.416 1.116-0.1 1.13-0.1 0.4 0.1 0.416v0.406l0.1 0.408 0.208 0.306 0.208 0.308 0.2 0.2 0.308 0.208 0.406 0.208 0.308 0.1h0.924l1.014-0.1 1.23-0.208 1.332-0.408 1.422-0.616 1.43-0.616 3.37-1.83 3.476-2.354 3.776-2.862 3.776-3.168 3.576-3.468 3.17-3.37 2.652-3.268 2.246-3.070 0.814-1.43 0.716-1.422 0.516-1.222 0.398-1.13 0.108-1.016 0.1-0.516-0.1-0.408v-0.406l-0.108-0.3-0.2-0.314-0.2-0.3-0.616-0.416-0.306-0.2-0.814-0.2h-0.508l-1.024 0.1-1.124 0.2-1.33 0.416-1.432 0.608-1.53 0.714-3.27 1.738-3.566 2.346-3.686 2.862-3.776 3.16-3.568 3.476-3.178 3.37-2.642 3.27zM569.396 523.522l-0.416 0.1-0.398 0.208-0.416 0.202-0.816 0.616-0.922 0.714-0.916 1.014-1.024 1.232-1.122 1.43-2.146 3.27-2.246 3.882-2.246 4.392-2.144 4.79-1.938 4.908-1.532 4.59-1.23 4.392-0.714 3.776-0.3 1.746-0.108 1.63-0.1 1.33 0.1 1.222 0.208 1.024 0.102 0.508 0.208 0.306 0.2 0.408 0.408 0.408 0.306 0.2 0.308 0.108h0.614l0.408-0.108 0.406-0.2 0.408-0.2 0.814-0.618 0.924-0.714 1.016-1.024 1.032-1.222 1.014-1.43 2.146-3.268 2.246-3.884 2.244-4.392 2.146-4.79 1.938-4.908 1.54-4.7 1.222-4.284 0.708-3.882 0.316-1.738 0.1-1.532 0.1-1.43-0.1-1.232-0.208-1.014-0.1-0.408-0.2-0.406-0.208-0.308-0.202-0.308-0.208-0.2-0.308-0.108-0.306-0.1h-0.608zM562.144 774.938l-0.208-0.308-0.306-0.406-0.716-0.714-1.014-0.816-1.23-0.814-3.060-1.532-3.678-1.638-4.39-1.636-4.798-1.432-5.314-1.322-5.306-1.124-5.108-0.814-4.594-0.416-4.084-0.2-3.472 0.2-1.432 0.108-1.226 0.308-1.018 0.298-0.408 0.208-0.308 0.306-0.306 0.2-0.206 0.208-0.204 0.306-0.1 0.3v0.614l0.1 0.416 0.204 0.298 0.206 0.408 0.306 0.306 0.716 0.816 1.018 0.714 1.226 0.814 3.066 1.638 3.676 1.638 4.394 1.53 4.792 1.532 5.314 1.33 5.314 1.116 5.1 0.714 4.6 0.516 4.084 0.1 3.466-0.1 1.432-0.208 1.23-0.308 1.014-0.298 0.416-0.208 0.3-0.208 0.306-0.298 0.208-0.208 0.2-0.306 0.1-0.3v-0.614l-0.1-0.416-0.202-0.298zM960.098 697.322l-0.208-0.914-0.2-0.816-0.308-0.616-0.306-0.616-0.408-0.398-0.308-0.216-0.208-0.1-0.298-0.1h-0.208l-0.608-0.1-0.714 0.2-0.616 0.208-0.814 0.408-0.716 0.616-1.738 1.432-1.838 1.828-2.044 2.462-4.284 6.022-4.6 7.452-4.906 8.882-4.89 9.906-4.908 10.828-4.39 11.022-3.776 10.53-2.96 9.598-2.146 8.574-1.23 7.244-0.3 3.17-0.1 2.652 0.1 2.246 0.202 0.922 0.208 0.824 0.308 0.608 0.406 0.608 0.408 0.416 0.298 0.2 0.216 0.108 0.298 0.1h0.208l0.608 0.1 0.714-0.2 0.616-0.208 0.814-0.408 0.714-0.616 1.738-1.422 1.838-1.848 2.046-2.444 4.284-5.922 4.6-7.56 4.898-8.882 4.898-9.906 4.808-10.828 4.39-11.030 3.776-10.512 2.96-9.598 2.146-8.584 1.322-7.252 0.306-3.16 0.102-2.662-0.2-2.248zM291.222 573.664l2.142 4.592 1.226 1.838 1.326 1.638 1.326 1.322 1.432 1.024 1.53 0.814 1.634 0.408 1.634 0.108 1.738-0.208 1.734-0.408 1.738-0.814 1.734-1.132 1.838-1.322 3.572-3.576 3.676-4.6 3.68-5.606 3.676-6.538 3.678-7.352 7.042-17.266 6.538-20.012 5.922-22.364 4.904-24.204 3.676-24.406 2.14-23.076 0.618-21.038-0.716-18.584-0.918-8.17-1.226-7.352-1.532-6.534-1.838-5.618-2.25-4.594-1.222-1.838-1.226-1.634-1.43-1.326-1.428-1.024-1.534-0.816-1.634-0.408-1.63-0.104-1.738 0.104-1.734 0.508-1.738 0.818-1.732 1.020-1.844 1.43-3.572 3.576-3.676 4.59-3.676 5.518-3.676 6.534-3.676 7.456-7.044 17.258-6.538 20.014-5.822 22.366-5.002 24.202-3.678 24.406-2.042 23.076-0.714 21.042 0.714 18.582 0.92 8.166 1.226 7.354 1.53 6.538 1.942 5.622zM286.014 615.832l-0.716 6.846-0.51 15.52 0.818 17.564 2.246 19.096 3.676 20.218 4.902 19.912 5.718 18.38 6.328 16.342 6.846 13.99 3.472 6.030 3.572 5.306 3.472 4.39 3.576 3.678 3.466 2.76 1.634 1.116 1.738 0.824 1.634 0.506 1.634 0.316 1.632 0.092 1.532-0.2 1.532-0.408 1.43-0.714 1.326-1.024 1.326-1.124 1.126-1.43 1.124-1.63 2.042-3.984 1.738-4.798 1.426-5.522 1.124-6.22 0.714-6.846 0.512-15.626-0.818-17.458-2.142-19.096-3.676-20.218-4.902-20.020-5.718-18.272-6.434-16.452-6.74-13.99-3.572-5.922-3.472-5.304-3.576-4.492-3.468-3.676-3.476-2.762-1.734-1.014-1.734-0.824-1.632-0.508-1.634-0.306-1.634-0.11-1.536 0.208-1.53 0.408-1.432 0.714-1.326 1.024-1.326 1.122-1.124 1.432-1.124 1.628-2.044 3.992-1.734 4.692-1.432 5.624-1.12 6.22zM592.168 575.704l-5.314 1.022-5.314 1.332-4.89 1.43-4.398 1.532-3.668 1.628-1.638 0.816-1.432 0.814-1.222 0.814-1.032 0.714-0.708 0.824-0.306 0.308-0.2 0.406-0.208 0.308-0.108 0.406v0.606l0.108 0.308 0.208 0.306 0.2 0.202 0.306 0.314 0.308 0.206 0.398 0.2 1.032 0.316 1.222 0.298 1.432 0.208 3.466 0.102 4.084-0.102 4.6-0.506 5.108-0.716 5.306-1.13 5.314-1.322 4.798-1.43 4.39-1.532 3.776-1.638 2.96-1.628 1.232-0.714 1.014-0.816 0.814-0.714 0.208-0.416 0.306-0.298 0.102-0.416 0.1-0.298v-0.616l-0.1-0.298-0.202-0.316-0.208-0.2-0.308-0.306-0.298-0.208-0.416-0.2-1.014-0.308-1.232-0.306-1.43-0.2-3.468-0.102-4.084 0.102-4.59 0.406-5.004 0.808zM374.344 660.154l10.418 12.866 10.316 11.446 10.006 9.796 9.394 8.168 4.39 3.268 4.084 2.754 3.88 2.254 3.47 1.628 3.27 1.024 1.43 0.308 1.328 0.1 1.226-0.1 1.124-0.208 1.018-0.298 0.924-0.616 0.814-0.714 0.612-0.916 0.512-1.032 0.308-1.114 0.204-1.332 0.1-1.53-0.204-3.27-0.612-3.882-1.226-4.292-1.634-4.69-2.042-5.008-5.41-11.228-7.048-12.158-8.474-12.86-9.702-13.38-10.418-12.868-10.312-11.436-10.006-9.906-9.398-8.068-4.386-3.376-4.088-2.754-3.876-2.246-3.476-1.638-3.266-1.014-1.43-0.308-1.326-0.108-1.226 0.108-1.124 0.208-1.024 0.298-0.92 0.616-0.814 0.716-0.612 0.914-0.512 1.024-0.306 1.222-0.206 1.33-0.104 1.43 0.104 3.37 0.716 3.786 1.226 4.284 1.628 4.798 2.046 5.006 5.41 11.228 7.044 12.16 8.376 12.866 9.804 13.374zM431.328 834.878l0.408 1.43 1.326 3.070 1.838 3.36 2.552 3.676 3.066 3.884 3.676 4.184 8.784 8.682 10.72 9.192 12.254 9.398 13.582 9.29 14.094 8.684 13.478 7.352 12.766 6.022 11.538 4.592 5.214 1.638 4.79 1.222 4.392 0.822 3.892 0.408 3.26-0.1 1.53-0.208 1.232-0.308 1.222-0.408 0.914-0.608 0.924-0.714 0.616-0.822 0.498-0.924 0.316-1.016 0.1-1.23v-1.222l-0.306-1.322-0.408-1.43-1.23-3.070-1.938-3.368-2.554-3.676-3.060-3.876-3.576-4.192-8.882-8.684-10.612-9.182-12.26-9.398-13.582-9.398-14.094-8.674-13.478-7.362-12.766-6.022-11.542-4.49-5.206-1.63-4.798-1.23-4.396-0.816-3.876-0.406-3.374 0.108-1.426 0.2-1.332 0.3-1.122 0.416-1.024 0.616-0.816 0.714-0.714 0.814-0.512 0.916-0.302 1.014-0.104 1.23 0.104 1.232 0.204 1.32zM566.734 754.004l2.046 2.652 1.014 1.024 0.924 0.814 0.814 0.608 0.408 0.208 0.308 0.208 0.406 0.1h0.614l0.308-0.1 0.306-0.208 0.202-0.208 0.208-0.2 0.2-0.408 0.208-0.306 0.1-0.508 0.208-1.024v-2.552l-0.208-1.638-0.2-1.73-0.816-3.776-1.23-4.392-1.53-4.598-1.948-4.898-2.136-4.8-2.146-4.398-2.246-3.876-2.144-3.26-1.124-1.43-1.024-1.232-0.914-1.022-0.924-0.816-0.814-0.606-0.416-0.216-0.4-0.2-0.416-0.1h-0.604l-0.308 0.1-0.308 0.2-0.208 0.216-0.2 0.2-0.2 0.406-0.102 0.308-0.108 0.508-0.208 1.022-0.1 1.232 0.1 1.322 0.416 3.368 0.814 3.778 1.124 4.39 1.53 4.592 1.938 4.906 2.146 4.806 2.246 4.392 2.246 3.876 2.148 3.266zM835.408 899.52l-0.714-0.816-0.914-0.714-1.13-0.608-1.322-0.616-1.432-0.416-3.576-0.616-4.284-0.2-4.906 0.1-11.538 1.33-13.582 2.662-15.218 3.876-16.542 5.208-17.358 6.33-17.050 7.152-15.626 7.352-13.88 7.454-11.744 7.252-9.298 6.946-3.676 3.16-2.96 3.068-2.246 2.854-0.814 1.33-0.616 1.33-0.308 1.222-0.208 1.124v1.124l0.306 1.024 0.508 0.914 0.714 0.824 0.924 0.708 1.124 0.616 1.33 0.616 1.43 0.408 3.578 0.616 4.284 0.208 4.898-0.108 11.542-1.322 13.582-2.662 15.212-3.876 16.442-5.208 17.36-6.338 17.056-7.144 15.728-7.352 13.79-7.46 11.844-7.244 9.292-6.946 3.676-3.16 2.96-3.068 2.254-2.862 0.814-1.322 0.608-1.33 0.308-1.222 0.2-1.124v-1.13l-0.3-1.016-0.522-0.928zM365.154 1013.688l-1.222-3.060-1.944-3.37-2.552-3.676-3.064-3.884-3.572-4.184-8.882-8.682-10.622-9.192-12.254-9.398-13.582-9.39-14.094-8.682-13.478-7.354-12.766-6.022-11.542-4.498-5.206-1.63-4.798-1.222-4.392-0.824-3.878-0.398-3.374 0.1-1.426 0.2-1.332 0.308-1.124 0.408-1.018 0.616-0.82 0.714-0.714 0.814-0.512 0.916-0.302 1.032-0.104 1.222 0.104 1.222 0.204 1.33 0.408 1.43 1.326 3.060 1.838 3.37 2.552 3.676 3.066 3.884 3.676 4.184 8.784 8.684 10.72 9.19 12.254 9.398 13.582 9.282 14.094 8.684 13.476 7.352 12.768 6.032 11.54 4.598 5.208 1.63 4.798 1.222 4.392 0.814 3.878 0.408 3.27-0.1 1.53-0.2 1.226-0.308 1.226-0.408 0.92-0.616 0.918-0.714 0.612-0.814 0.512-0.916 0.308-1.032 0.1-1.222v-1.222l-0.302-1.33-0.414-1.432zM226.172 939.35l-0.204-0.308-0.308-0.408-0.714-0.714-1.020-0.814-1.226-0.814-3.064-1.54-3.676-1.63-4.392-1.638-4.798-1.43-5.31-1.322-5.306-1.124-5.106-0.814-4.596-0.416-4.088-0.202-3.472 0.202-1.426 0.108-1.226 0.308-1.024 0.298-0.408 0.208-0.306 0.308-0.304 0.2-0.204 0.208-0.204 0.306-0.104 0.298v0.616l0.104 0.414 0.204 0.3 0.204 0.406 0.304 0.308 0.714 0.814 1.024 0.714 1.226 0.816 3.060 1.638 3.676 1.638 4.392 1.53 4.798 1.532 5.314 1.33 5.306 1.116 5.106 0.714 4.596 0.516 4.088 0.1 3.468-0.1 1.43-0.208 1.226-0.306 1.020-0.298 0.412-0.208 0.302-0.208 0.308-0.3 0.204-0.208 0.204-0.308 0.104-0.298v-0.614l-0.104-0.416-0.204-0.3zM393.034 933.428l-0.206-3.576-0.204-3.476-0.306-3.468-0.408-3.468-0.308-3.376-0.506-3.26-0.412-3.178-0.512-3.16-1.224-5.92-0.612-2.76-0.714-2.754-0.82-2.552-0.714-2.346-0.814-2.346-0.816-2.154-0.918-1.938-0.82-1.838-0.918-1.738-1.020-1.432-0.922-1.322-1.020-1.222-1.024-1.022-1.020-0.824-1.022-0.608-1.024-0.408-1.020-0.314-1.018-0.1-1.024 0.1-1.024 0.314-1.020 0.408-1.022 0.608-1.020 0.824-1.024 1.022-1.018 1.222-0.92 1.322-1.024 1.432-0.918 1.738-0.816 1.838-0.922 1.938-0.816 2.154-0.818 2.346-0.71 2.346-0.82 2.552-0.714 2.754-0.612 2.76-0.612 2.96-0.616 2.96-0.508 3.16-0.406 3.178-0.512 3.26-0.308 3.376-0.406 3.468-0.308 3.468-0.204 3.476-0.206 3.576-0.104 3.568-0.1 3.684v7.144l0.1 3.676 0.104 3.568 0.206 3.576 0.204 3.476 0.308 3.468 0.406 3.466 0.308 3.376 0.512 3.262 0.406 3.176 0.508 3.16 0.616 2.96 0.612 2.96 0.612 2.762 0.714 2.754 0.82 2.552 0.71 2.346 0.818 2.346 0.816 2.154 0.922 1.938 0.816 1.838 0.918 1.738 1.024 1.43 0.92 1.322 1.018 1.222 1.024 1.032 1.020 0.816 1.022 0.616 1.020 0.398 1.024 0.308 1.024 0.108 1.018-0.108 1.020-0.308 1.024-0.398 1.022-0.616 1.020-0.816 1.024-1.032 1.020-1.222 0.922-1.322 1.020-1.43 0.918-1.738 0.82-1.838 0.918-1.938 0.816-2.154 0.814-2.346 0.714-2.346 0.82-2.552 0.714-2.754 0.612-2.762 1.224-5.92 0.512-3.16 0.412-3.176 0.506-3.262 0.308-3.376 0.408-3.466 0.306-3.468 0.204-3.476 0.206-3.576 0.104-3.568 0.1-3.676v-7.144l-0.1-3.684-0.104-3.568zM911.494 808.024l-0.208-0.516-0.208-0.202-0.2-0.2-0.202-0.216-0.314-0.1-0.508-0.2-0.714-0.1-0.708 0.1-0.824 0.1-0.924 0.308-2.038 0.822-2.354 1.222-2.652 1.63-5.922 4.284-6.746 5.722-7.452 6.844-7.752 7.96-7.976 8.792-7.66 9.090-6.836 8.784-5.822 8.166-4.692 7.454-3.576 6.538-1.23 2.862-0.914 2.446-0.618 2.144-0.1 1.024v1.532l0.202 0.714 0.208 0.508 0.208 0.2 0.2 0.216 0.2 0.2 0.316 0.1 0.506 0.208 0.716 0.102 0.708-0.102 0.822-0.108 0.924-0.298 2.136-0.816 2.354-1.23 2.654-1.628 5.922-4.292 6.736-5.72 7.46-6.838 7.76-7.966 7.958-8.784 7.668-9.082 6.838-8.784 5.82-8.168 4.692-7.458 3.576-6.538 1.23-2.854 0.916-2.46 0.516-2.138 0.1-1.024 0.1-0.814-0.1-0.714-0.196-0.722zM175.212 666.084l0.82-3.786 0.612-4.39 0.306-4.898v-5.524l-0.714-12.35-1.738-13.89-2.858-15.21-3.778-16.036-4.596-15.936-5.108-14.598-5.304-12.964-5.416-11.128-2.756-4.708-2.654-4.184-2.656-3.576-2.552-2.96-2.554-2.142-1.124-0.818-1.222-0.612-1.126-0.512-1.124-0.204-1.018-0.106-1.024 0.206-1.020 0.41-0.818 0.512-0.92 0.816-0.714 0.918-0.714 1.124-0.612 1.33-1.124 3.162-0.814 3.776-0.512 4.39-0.308 4.908v5.514l0.716 12.352 1.732 13.888 2.862 15.22 3.778 16.036 4.594 15.926 5.112 14.498 5.306 13.074 5.414 11.126 2.758 4.7 2.652 4.184 2.658 3.578 2.552 2.86 2.552 2.246 1.124 0.814 1.222 0.618 1.124 0.516 1.124 0.2 1.024 0.1 1.022-0.2 0.92-0.416 0.918-0.5 0.816-0.822 0.818-0.924 0.71-1.116 0.616-1.33 1.016-3.162zM456.754 936.388l1.33-0.616 1.222-0.716 1.124-0.914 0.92-1.13 0.818-1.322 0.612-1.54 0.512-1.63 0.302-1.728 0.308-4.092-0.308-4.592-0.814-5.008-1.43-5.614-1.838-5.93-5.306-13.066-7.048-14.098-8.886-14.904-10.518-15.21-11.436-14.614-11.542-12.958-11.336-11.028-10.824-8.982-5.102-3.576-4.904-2.97-4.594-2.344-4.188-1.638-3.984-1.016-1.834-0.208h-1.638l-1.63 0.208-1.43 0.298-1.432 0.618-1.22 0.714-1.126 0.914-0.92 1.13-0.814 1.322-0.616 1.54-0.508 1.63-0.308 1.73-0.306 3.992 0.306 4.59 0.92 5.108 1.326 5.514 1.942 6.030 5.208 12.958 7.148 14.206 8.882 14.804 10.522 15.312 11.436 14.612 11.436 12.958 11.336 11.028 10.824 8.892 5.108 3.566 4.902 3.070 4.592 2.346 4.292 1.636 3.88 0.916 1.838 0.306h1.738l1.53-0.208 1.526-0.296zM255.48 215.94l-1.124-8.782 0.1-8.272 0.512-3.88 0.716-3.78 1.122-3.572 1.432-3.472 1.838-3.268 2.042-3.064 1.19-1.448 0.446-1.92 0.92-2.858 2.96-6.23 4.288-6.742 5.514-7.352 6.846-7.76 7.86-8.272 18.996-17.362 22.772-18.28 26.14-18.688 28.902-18.584 29.816-17.154 28.594-14.606 26.756-11.842 24.1-8.886 10.928-3.27 10.11-2.344 8.992-1.536 8.062-0.716 6.838 0.208 2.96 0.506 2.652 0.716 2.354 0.918 1.938 1.124 1.638 1.534 1.322 1.634 0.924 1.938 0.258 1.036 0.756 0.908 1.638 2.35 1.532 2.756 2.552 6.534 2.246 8.068 1.63 9.498 1.23 10.724 0.814 11.844 0.1 26.96-1.838 30.636-3.776 33.392-5.722 35.638-7.344 35.332-8.484 32.578-9.29 29.206-9.806 25.222-4.898 10.824-5.002 9.498-5.008 8.272-4.898 6.742-4.798 5.206-2.35 2.042-2.35 1.634-2.246 1.122-2.25 0.82-0.382 0.038-2.27 1.8-3.164 2.042-3.374 1.838-3.676 1.532-7.862 2.348-8.782 1.328-9.394 0.308-10.010-0.612-10.622-1.534-11.128-2.554-11.44-3.472-11.744-4.288-12.046-5.31-12.154-6.126-12.256-6.946-12.15-7.864-12.152-8.678-11.638-9.294-10.93-9.598-10.11-9.802-9.19-10.010-8.376-10.11-7.354-10.11-6.534-10.11-5.414-9.906-4.39-9.806-3.37-9.494-2.24-9.090zM440.14 223.046l4.462 3.92 10.11 9.802 9.19 10.010 3.734 4.508 0.35-6.142 3.78-33.492 5.718-35.638 0.306-1.46-10.010 14.426-15.112 19.508-12.528 14.558zM356.566 171.394l4.708 1.758 12.052 5.208 12.15 6.23 8.614 4.882 10.176-16.422 14.092-20.318 15.114-19.608 3.97-4.62-5.908 3.8-29.822 17.158-28.59 14.604-16.556 7.328zM656.194 971.104l-0.714-1.33-1.024-1.322-1.124-1.432-3.060-2.752-3.984-2.762-4.798-2.762-5.514-2.644-6.33-2.762-14.504-5.208-16.852-4.698-18.788-4.184-20.318-3.476-20.428-2.446-19.196-1.332-17.466-0.208-15.42 0.822-6.84 0.816-6.026 1.014-5.41 1.332-4.596 1.53-3.676 1.738-1.532 0.924-1.33 1.014-1.024 1.124-0.814 1.124-0.612 1.23-0.308 1.222v1.222l0.206 1.332 0.406 1.33 0.714 1.322 1.024 1.33 1.124 1.422 3.064 2.762 3.98 2.762 4.802 2.754 5.51 2.652 6.334 2.762 14.5 5.206 16.852 4.7 18.688 4.184 20.32 3.476 20.426 2.446 19.196 1.332 17.566 0.2 15.42-0.816 6.736-0.814 6.128-1.014 5.416-1.332 4.59-1.53 3.676-1.738 1.532-0.924 1.33-1.014 1.024-1.132 0.814-1.114 0.616-1.23 0.308-1.222v-1.222l-0.2-1.332-0.414-1.332zM228.522 915.146l2.14 3.268 1.126 1.324 1.020 1.23 0.92 1.014 0.918 0.816 0.82 0.616 0.406 0.208 0.408 0.208 0.408 0.1h0.614l0.302-0.1 0.308-0.208 0.204-0.208 0.204-0.2 0.206-0.416 0.208-0.3 0.1-0.516 0.206-1.014 0.104-1.23-0.104-1.432-0.102-1.53-0.306-1.738-0.714-3.876-1.226-4.284-1.532-4.708-1.942-4.898-2.142-4.798-2.144-4.392-2.246-3.876-2.246-3.278-1.024-1.322-1.024-1.222-0.914-1.024-0.918-0.814-0.924-0.616-0.408-0.208-0.406-0.2-0.308-0.1h-0.714l-0.308 0.1-0.306 0.2-0.206 0.208-0.204 0.208-0.204 0.408-0.206 0.308-0.104 0.506-0.204 1.024v2.644l0.204 1.54 0.206 1.738 0.818 3.876 1.124 4.292 1.53 4.69 1.944 4.908 2.144 4.806 2.246 4.382 2.248 3.886zM225.56 926.376l-0.512-1.322-0.714-1.332-0.92-1.43-2.144-3.060-2.654-3.37-3.168-3.376-3.676-3.466-3.778-3.17-3.78-2.862-3.572-2.346-3.37-1.728-1.534-0.716-1.428-0.516-1.226-0.406-1.226-0.308h-1.53l-0.408 0.11-0.412 0.090-0.302 0.11-0.308 0.306-0.306 0.202-0.206 0.306-0.204 0.308-0.1 0.416-0.104 0.398v0.814l0.204 1.13 0.408 1.116 0.512 1.23 0.714 1.432 0.818 1.43 2.142 3.060 2.756 3.27 3.17 3.368 3.676 3.476 3.776 3.262 3.782 2.76 3.572 2.346 3.268 1.848 1.532 0.714 1.43 0.508 1.326 0.406 1.226 0.2 1.020 0.11h0.512l0.412-0.11 0.406-0.1 0.304-0.2 0.306-0.2 0.308-0.216 0.204-0.298 0.206-0.308 0.1-0.406v-0.408l0.104-0.408-0.104-0.516-0.1-1.014-0.408-1.134zM183.692 672.92l0.508 1.532 0.512 1.33 0.714 1.222 0.816 1.124 1.022 1.024 1.124 0.922 1.226 0.716 1.228 0.506 1.426 0.508 1.534 0.308 1.634 0.1 3.468-0.1 3.78-0.616 4.084-1.124 4.292-1.63 4.49-2.146 4.802-2.552 4.798-2.96 10.006-7.352 10.212-8.784 10.11-10.312 9.192-11.030 7.864-11.038 6.224-10.71 2.558-5.108 2.14-4.906 1.634-4.8 1.124-4.39 0.818-4.184 0.206-3.876-0.206-3.376-0.306-1.63-0.512-1.43-0.512-1.432-0.71-1.23-0.818-1.116-1.020-1.032-1.126-0.814-1.222-0.714-1.226-0.608-1.432-0.408-1.53-0.306-1.634-0.208-3.472 0.1-3.78 0.716-4.084 1.13-4.288 1.628-4.492 2.146-4.7 2.552-4.902 2.96-10.006 7.354-10.11 8.784-10.114 10.312-9.29 11.028-7.76 11.030-6.334 10.622-2.45 5.208-2.146 4.906-1.634 4.692-1.226 4.498-0.71 4.184-0.306 3.778 0.204 3.476 0.308 1.526zM78.714 485.736l0.512 1.228 0.71 1.426 0.818 1.43 2.146 3.064 2.752 3.27 3.17 3.368 3.676 3.472 3.776 3.27 3.782 2.756 3.572 2.35 3.268 1.838 1.536 0.714 1.43 0.506 1.322 0.408 1.226 0.208 1.024 0.1h0.512l0.408-0.1 0.406-0.106 0.308-0.204 0.302-0.204 0.308-0.204 0.204-0.308 0.206-0.308 0.104-0.408v-0.408l0.104-0.408-0.104-0.51-0.104-1.024-0.408-1.124-0.512-1.326-0.714-1.326-0.916-1.43-2.144-3.066-2.658-3.368-3.164-3.368-3.676-3.472-3.778-3.168-3.78-2.856-3.572-2.35-3.374-1.734-1.53-0.714-1.432-0.512-1.226-0.408-1.226-0.308h-1.53l-0.408 0.104-0.408 0.1-0.306 0.104-0.308 0.302-0.302 0.208-0.206 0.304-0.208 0.308-0.1 0.408-0.104 0.408v0.82l0.204 1.124 0.412 1.124zM116.192 522.806l-0.204-0.408-0.308-0.308-0.714-0.814-1.020-0.714-1.226-0.82-3.064-1.632-3.676-1.63-4.392-1.536-4.798-1.53-5.31-1.328-5.31-1.022-5.106-0.816-4.592-0.412-4.088-0.204-3.472 0.204-1.43 0.104-1.222 0.308-1.024 0.304-0.408 0.204-0.306 0.308-0.304 0.204-0.204 0.204-0.208 0.308-0.102 0.308v0.612l0.102 0.408 0.412 0.61 0.304 0.412 0.714 0.71 1.024 0.82 1.222 0.818 3.064 1.63 3.676 1.534 4.392 1.634 4.798 1.422 5.31 1.332 5.31 1.13 5.106 0.814 4.596 0.398 4.084 0.208 3.472-0.208 1.43-0.1 1.226-0.298 1.020-0.308 0.406-0.208 0.308-0.298 0.308-0.208 0.204-0.208 0.204-0.3 0.104-0.314v-0.606l-0.104-0.408-0.204-0.31zM121.908 503.198l1.024 1.226 0.92 1.024 0.918 0.816 0.816 0.61 0.406 0.204 0.408 0.204 0.412 0.104h0.61l0.306-0.104 0.304-0.204 0.208-0.204 0.204-0.204 0.206-0.408 0.204-0.308 0.1-0.506 0.206-1.024 0.104-1.226-0.104-1.43-0.102-1.53-0.306-1.734-0.714-3.88-1.222-4.292-1.536-4.7-1.938-4.898-2.146-4.8-2.144-4.39-2.246-3.88-2.246-3.268-1.020-1.332-1.022-1.222-0.92-1.024-0.918-0.814-0.92-0.616-0.408-0.204-0.41-0.204-0.304-0.1h-0.718l-0.308 0.1-0.306 0.204-0.206 0.204-0.204 0.204-0.204 0.412-0.206 0.304-0.104 0.51-0.204 1.024v2.652l0.204 1.534 0.208 1.734 0.814 3.88 1.124 4.292 1.53 4.696 1.944 4.904 2.144 4.798 2.246 4.392 2.246 3.88 2.146 3.268 1.124 1.326z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "vc-fossil" - ] - }, - { - "id": 44, - "paths": [ - "M512 1.002c-223.98 0-465.038 53.2-465.038 170 0 22.484 9.008 42.59 25.028 60.426l369.264 82.752v25.018c23.574 1.18 47.246 1.8 70.746 1.8 223.98 0 465.038-53.192 465.038-169.996 0-116.8-241.058-170-465.038-170zM802.022 226.77c-76.916 23.68-179.914 36.728-290.022 36.728s-213.106-13.046-290.030-36.728c-80.15-24.68-97.506-50.658-97.506-55.768s17.356-31.088 97.506-55.768c76.924-23.682 179.922-36.724 290.030-36.724s213.106 13.042 290.022 36.724c80.158 24.68 97.516 50.656 97.516 55.768s-17.358 31.088-97.516 55.768zM519.944 388.856c144.672 0 303.108-19.47 412.564-67.378l-102.826 616.966c0 0-84.552 84.552-295.932 84.552-295.934 0-338.21-84.552-338.21-84.552l-40.112-240.652 285.826 64.050v-374.96c26.43 1.296 52.788 1.974 78.69 1.974zM173.138 379.096c-24.168-16.986-46.858-37.222-67.444-60.070-3.312-3.79-3.246-8.108-1.304-9.982 1.312-1.28 3.402-1.57 5.606-0.768 1.132 0.414 2.246 1.098 3.228 1.998 41.096 37.454 88.738 66.692 137.786 84.56 49.030 17.836 96.682 23.268 137.786 15.738 0.982-0.182 2.098-0.058 3.228 0.356 2.196 0.792 4.292 2.608 5.606 4.846 1.942 3.286 2.008 7.646-1.28 9.024-20.618 7.862-43.3 11.584-67.476 10.982-25.052-0.62-51.242-5.838-77.856-15.516h-0.016c-26.612-9.692-52.812-23.548-77.864-41.168zM171.628 457.448c-13.072-23.532-20.312-44.084-22.128-63.076-0.182-1.882 0.602-3.476 2.13-4.080 0.974-0.396 2.13-0.346 3.328 0.084 0.668 0.24 1.33 0.61 1.974 1.082 11.89 8.884 24.020 16.87 35.076 23.458 2.246 1.354 4.062 3.682 4.822 5.962 8.042 24.968 28.586 53.358 50.136 83.182 0.876 1.172 2.082 2.658 4.046 3.37 1.974 0.726 3.188 0.082 4.046-0.43 21.55-14.136 42.096-27.636 50.146-46.742 0.75-1.734 2.566-2.742 4.83-2.454 11.032 1.446 23.134 2.394 35.042 2.172 0.634-0.008 1.304 0.108 1.964 0.346 1.198 0.438 2.376 1.256 3.352 2.354 1.486 1.676 2.328 3.932 2.13 5.708-1.816 17.66-9.050 32.828-22.122 46.858-12.294 13.17-28.304 23.682-43.794 33.838-1.13 0.742-2.254 1.468-3.362 2.212-1.13 0.734-1.742 2.792-0.272 5.168 3.626 5.83 7.092 11.694 10.33 17.614 15.448 28.214 23.474 52.482 24.524 74.182 0.082 1.536-0.47 2.806-1.512 3.526-1.042 0.71-2.486 0.808-3.996 0.256l-33.534-12.204c-2.888-1.048-5.284-4.154-5.498-7.11-2.362-32.74-29.33-70.052-57.866-109.554-15.488-21.44-31.506-43.602-43.792-65.722zM215.028 547.82c10.056 14.152 16.81 24.268 22.326 33.45 1.106 1.842 2.61 5.748 0.678 8.622-5.558 8.306-8.612 17.036-9.338 26.58-0.214 2.792-2.642 4.16-5.524 3.114l-33.474-12.18c-1.502-0.544-2.964-1.718-4.004-3.188s-1.594-3.154-1.52-4.632c1-19.99 8.29-37.594 22.394-53.926 0.562-0.66 2.048-1.85 4.55-0.934 1.962 0.718 3.118 1.988 3.912 3.094zM269.788 449.132c2.592 0.942 5.070 3.97 5.070 6.954 0 0.858-0.198 1.402-0.404 1.88-1.396 3.22-7.746 14.318-19.578 21.51-1.32 0.802-2.824 0.504-3.864 0.126l-0.008-0.008c-1.032-0.374-2.536-1.166-3.856-2.932-11.832-15.804-18.182-31.526-19.578-35.754-0.206-0.626-0.404-1.32-0.404-2.188 0-2.98 2.476-4.204 5.070-3.252 2.138 0.776 8.242 3.624 18.744 7.456l0.066 0.016c10.5 3.832 16.604 5.418 18.742 6.192z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "vc-bitbucket-01" - ] - }, - { - "id": 43, - "paths": [ - "M1003.724 559.586l-444.14 444.13c-25.724 25.7-67.388 25.7-93.080 0l-446.222-446.192c-25.708-25.702-25.708-67.38 0-93.106l305.96-305.948 115.866 115.884c-11.88 28.458-6.304 62.466 16.872 85.622 7.574 7.598 16.306 13.27 25.638 17.088v280.596c-9.332 3.826-18.078 9.532-25.638 17.084-30.594 30.59-30.594 80.142 0 110.766 30.562 30.592 80.148 30.592 110.746 0 30.59-30.624 30.59-80.176 0-110.766-6.22-6.188-13.258-11.112-20.716-14.804l0.008-278.020 105.652 105.652c-11.652 28.348-5.964 62.148 17.042 85.17 30.616 30.608 80.176 30.608 110.784 0 30.59-30.598 30.59-80.158 0-110.744-21.89-21.924-53.512-28.030-80.916-18.586l-113.28-113.278c9.458-27.414 3.31-59.002-18.572-80.908-21.774-21.776-53.092-27.962-80.412-18.738l-117.534-117.538 92.652-92.666c25.712-25.704 67.392-25.704 93.066 0l446.224 446.196c25.7 25.704 25.7 67.396 0 93.106z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "vc-git" - ] - }, - { - "id": 42, - "paths": [ - "M741.986 495.010c-2.96-183.898-99.554-335.854-198.652-431.274-31.51-30.342-36.596-62.736-36.596-62.736s0.674 14.242-15.682 31.368c-68.76 71.996-112.456 110.064-154.214 201.264-51.99 113.54-54.888 263.99-54.888 263.99s2.766 123.842 54.888 224.786c40.35 78.146 111.436 142.022 139.598 165.458 2.59-8.834 7.56-26.748 10.958-44.996 5.268-28.318 7.634-58.436 7.656-58.734 0.524-6.72 6.072-11.944 12.812-12.060 0.076 0 0.15 0 0.224 0 6.646 0 12.248 4.99 12.988 11.62 0.048 0.45 5.138 45.386 14.996 72.832 4.998 13.924 13.904 18.59 14.288 18.782 3.62 1.48 6.022 4.358 7.17 8.1 0.066 0.184 0.092 0.376 0.132 0.566 27.114-22.292 187.932-164.066 184.322-388.966zM469.37 752.064c-4.666 7.452-7.598 16.018-8.3 25.066-0.016 0.216-0.82 10.388-2.508 24.122-26.374-27.664-55.278-63.076-75.41-102.066-44.882-86.93-49.748-194.548-50.126-205.336 0.37-12.288 5.436-146.666 51.004-246.184 25.25-55.146 51.324-89.146 85.34-125.982v630.38zM544.682 887.082c0 0-8.642 13.018-10.456 28.744-4.566 39.59-5.222 107.174-5.222 107.174l-26.142-7.844c0 0-0.71-44.53-5.232-78.412-3.006-22.556-10.454-39.214-10.454-39.214s8.11-25.6 13.070-52.274c5.468-29.382 7.838-60.116 7.838-60.116s5.18 46.536 15.688 75.802c7.11 19.82 20.91 26.14 20.91 26.14z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "dbs-mongodb" - ] - }, - { - "id": 41, - "paths": [ - "M505.034 573.43h94.536v22.44h-96.154c-0.974 0-2.266 0.214-3.24 0.214-11.976 1.082-15.538 3.028-17.154 9.932-0.328 1.080-0.328 1.946-0.328 2.81v15.32c0 1.082 0 1.948 0.328 3.028 1.618 9.066 8.092 13.158 21.686 13.158h40.792c10.038 0 20.392 1.73 28.818 4.972 15.86 6.040 23.96 15.104 23.96 24.818v24.602c0 11.876-7.126 20.944-21.692 27.628-8.75 4.102-19.752 6.47-31.088 6.47h-96.798v-22.44h92.922c1.296 0 2.262-0.214 3.56-0.214 6.47-0.434 11.328-2.162 14.238-4.758 3.244-2.578 4.858-5.606 4.858-7.984v-19.636c0-2.154-0.648-4.1-2.586-6.046-3.236-3.882-7.778-5.822-18.458-6.686-0.972-0.216-2.262-0.216-3.558-0.216h-34.97c-3.236 0-6.47-0.216-9.714-0.434-28.81-3.018-45.968-15.968-45.968-31.080v-19.636c0-17.266 8.742-27.198 28.814-33.458 6.474-1.94 13.598-2.804 27.196-2.804zM767.134 722.014l33.168 29.934h-39.1l-26.83-24.22-27.014 1.714h-36.014c-6.162 0-12.65-0.866-19.786-2.812-21.408-5.838-31.796-17.082-31.796-35.688v-80.020c0-20.334 14.282-32.668 42.5-36.56 2.92-0.434 6.164-0.648 9.082-0.648h63.918c3.242 0 6.162 0.214 9.406 0.648 28.218 3.892 42.492 16.226 42.492 36.56v80.020c0.002 16.492-6.052 25.324-20.026 31.072zM755.698 612.87c0-0.866 0-1.948-0.324-3.038-1.946-8.648-10.704-13.624-23.678-13.624h-50.934c-14.93 0-24.652 6.488-24.652 16.66v76.126c0 1.082 0.324 2.162 0.64 3.46 1.946 9.306 10.712 14.496 24.012 14.496h30.582l-28.096-25.368h39.1l24.51 22.124c4.508-2.412 7.484-6.088 8.516-10.82 0.324-1.072 0.324-2.162 0.324-3.244v-76.772zM218.562 573.644c-25.576-7.984-42.738-1.080-50.504 16.186l-51.154 114.392-49.532-114.392c-7.448-17.266-24.93-24.17-50.504-16.186-10.684 3.236-15.866 9.498-15.866 22.44v132.74h33.666v-132.956l52.128 115.906c6.15 14.032 14.568 18.996 31.076 18.996 16.514 0 24.606-4.964 30.76-18.996l52.124-115.906v132.956h33.672v-132.74c-0.002-12.942-5.182-19.204-15.866-22.44zM389.016 620.254v87.212c-0.59 0-63.804 0.15-73.214 0-18.444-0.284-20.036-9.63-19.72-13.608v-73.256h-33.66c0.736 0.732-0.008 74.022 0.016 75.568 0.262 16.716 21.466 31.24 54.76 31.554h71.564v8.824c0.004 3.626 2.562 14.398-19.108 16.694-0.266 0.016-106.316 0-106.5 0v22.656h106.314c16.862-0.5 53.446-6.872 53.258-36.206-0.004-0.508 0.188-119.442 0.030-119.442h-33.74zM1002.292 707.466l8.132 12.444h-5.554l-7.41-12.244h-4.434v12.244h-4.758v-28.328h11.044c7.012 0 10.654 2.386 10.654 8.142 0 5.164-3.31 7.278-7.674 7.742zM998.116 703.692c3.576 0 6.688-0.334 6.688-4.292 0-3.308-3.444-3.842-6.29-3.842h-5.488v8.134h5.090zM1023 705.746c0 14.82-11.71 24.808-24.818 24.808-13.092 0-24.808-9.988-24.808-24.808 0-14.822 11.716-24.81 24.808-24.81 13.108 0 24.818 9.988 24.818 24.81zM1017.444 705.746c0-11.254-8.6-19.654-19.262-19.654-10.78 0-19.254 8.4-19.254 19.654 0 11.244 8.474 19.652 19.254 19.652 10.662 0 19.262-8.408 19.262-19.652zM724.126 311.966c-4.316-0.080-7.37 0.468-10.596 1.176 0 0.196 0 0.39 0 0.586 0.2 0 0.39 0 0.59 0 2.062 4.23 5.698 6.954 8.242 10.598 1.956 4.122 3.918 8.238 5.88 12.354 0.2-0.196 0.398-0.39 0.59-0.586 3.65-2.566 5.314-6.674 5.298-12.946-1.464-1.54-1.682-3.464-2.946-5.298-1.676-2.446-4.936-3.828-7.058-5.884zM1008.96 613.876c2.778 2.038 4.64 5.198 8.242 6.478 0-0.2 0-0.398 0-0.59-1.896-2.404-2.378-5.722-4.118-8.242-2.544-2.544-5.108-5.098-7.652-7.652-7.484-9.93-16.974-18.646-27.070-25.89-8.042-5.782-26.066-13.582-29.426-22.948-0.192-0.2-0.392-0.398-0.592-0.598 5.706-0.64 12.392-2.704 17.658-4.118 8.848-2.372 16.758-1.756 25.89-4.118 4.126-1.182 8.242-2.362 12.36-3.528 0-0.79 0-1.57 0-2.362-4.618-4.74-7.91-11.012-12.942-15.302-13.184-11.216-27.562-22.432-42.376-31.776-8.208-5.188-18.366-8.554-27.072-12.95-2.928-1.476-8.068-2.246-10.006-4.708-4.566-5.832-7.060-13.222-10.588-20.012-7.384-14.226-14.646-29.762-21.192-44.73-4.458-10.204-7.376-20.268-12.942-29.426-26.722-43.934-55.492-70.454-100.046-96.52-9.488-5.542-20.9-7.73-32.958-10.59-6.47-0.39-12.952-0.788-19.422-1.178-3.95-1.65-8.058-6.482-11.768-8.828-14.764-9.324-52.63-29.61-63.558-2.94-6.904 16.83 10.312 33.254 16.474 41.786 4.326 5.982 9.856 12.692 12.952 19.418 2.030 4.422 2.376 8.86 4.126 13.538 4.276 11.528 7.992 24.068 13.524 34.724 2.802 5.388 5.888 11.070 9.424 15.888 2.17 2.958 5.878 4.26 6.46 8.828-3.626 5.086-3.834 12.978-5.872 19.42-9.2 29.004-5.73 65.048 7.652 86.516 4.1 6.586 13.772 20.724 27.062 15.298 11.626-4.736 9.034-19.416 12.36-32.366 0.748-2.942 0.292-5.1 1.764-7.062 0 0.192 0 0.39 0 0.586 3.536 7.062 7.068 14.124 10.596 21.184 7.844 12.626 21.758 25.83 33.55 34.728 6.106 4.616 10.92 12.6 18.83 15.302 0-0.2 0-0.398 0-0.598-0.2 0-0.4 0-0.59 0-1.54-2.378-3.936-3.376-5.88-5.29-4.608-4.518-9.73-10.13-13.542-15.304-10.728-14.558-20.202-30.494-28.834-47.078-4.126-7.922-7.71-16.66-11.188-24.718-1.338-3.11-1.322-7.808-4.118-9.418-3.808 5.904-9.414 10.684-12.36 17.656-4.708 11.148-5.314 24.742-7.060 38.84-1.032 0.372-0.574 0.118-1.182 0.586-8.2-1.972-11.078-10.412-14.122-17.652-7.702-18.304-9.132-47.782-2.354-68.856 1.754-5.45 9.69-22.624 6.47-27.66-1.532-5.028-6.58-7.93-9.406-11.772-3.512-4.748-7.004-10.994-9.432-16.48-6.296-14.272-9.24-30.294-15.878-44.724-3.176-6.894-8.542-13.878-12.95-20.012-4.88-6.792-10.346-11.792-14.124-20.012-1.346-2.918-3.176-7.588-1.18-10.59 0.63-2.026 1.53-2.87 3.536-3.532 3.418-2.632 12.916 0.876 16.474 2.354 9.432 3.918 17.316 7.652 25.31 12.946 3.834 2.544 7.716 7.468 12.35 8.83 1.772 0 3.536 0 5.298 0 8.292 1.902 17.574 0.594 25.308 2.944 13.682 4.158 25.942 10.626 37.076 17.658 33.918 21.414 61.654 51.906 80.626 88.276 3.052 5.856 4.376 11.444 7.060 17.658 5.422 12.526 12.26 25.412 17.656 37.664 5.382 12.216 10.63 24.55 18.24 34.722 4 5.344 19.46 8.212 26.49 11.184 4.924 2.078 12.99 4.25 17.648 7.054 8.916 5.378 17.542 11.774 25.898 17.662 4.176 2.946 17.018 9.398 17.65 14.706-20.694-0.548-36.504 1.374-50.020 7.070-3.842 1.614-9.964 1.662-10.596 6.468 2.112 2.212 2.446 5.524 4.126 8.242 3.218 5.224 8.666 12.218 13.532 15.894 5.314 4.010 10.788 8.3 16.476 11.77 10.13 6.18 21.442 9.706 31.19 15.892 5.768 3.652 11.474 8.242 17.078 12.36zM841.988 689.552v-116.124h-33.668v116.338c0 23.088 17.158 36.040 51.798 38.632 3.234 0.208 6.47 0.424 9.714 0.424h87.736v-22.44h-88.386c-19.742 0.002-27.194-4.97-27.194-16.83z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "dbs-mysql" - ] - }, - { - "id": 40, - "paths": [ - "M497.278 246.96c-10.894-59.424 17.202-120.572 51.036-161.788 37.292-45.464 101.284-80.342 155.968-84.172 9.248 62.298-16.176 122.998-49.644 165.93-35.898 46.122-97.626 81.894-157.36 80.030zM818.058 462.256c16.926-47.208 50.444-89.682 102.452-118.344-52.564-65.588-126.338-103.656-195.984-103.656-92.128 0-131.068 43.888-195.060 43.888-65.92 0-115.94-43.888-195.732-43.888-78.248 0-161.552 47.69-214.374 129.156-19.428 30.092-32.594 67.502-39.764 109.17-19.902 116.888 9.832 269.116 98.558 404.286 43.14 65.604 100.636 139.476 175.756 140.126 66.92 0.648 85.916-42.784 176.488-43.248 90.722-0.5 107.914 43.698 174.75 43.048 75.144-0.632 135.8-82.388 178.95-147.976 30.708-47.058 42.334-70.828 66.22-124.042-121.462-45.812-171.408-179.634-132.26-288.52z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "os-apple" - ] - }, - { - "id": 39, - "paths": [ - "M485.86 272.91c4.582 0 8.908 1.206 12.816 3.452 3.91 2.196 7.42 5.464 10.38 9.472 2.91 4.026 5.306 8.85 6.944 14.274 1.646 5.406 2.544 11.394 2.544 17.766 0 6.346-0.906 12.342-2.57 17.782-1.662 5.488-4.068 10.378-7.036 14.462-2.978 4.092-6.554 7.394-10.514 9.682s-8.332 3.536-12.974 3.536c-4.656 0-9.064-1.248-13.042-3.536-3.974-2.288-7.536-5.59-10.496-9.682-2.952-4.084-5.322-8.974-6.92-14.462-1.614-5.44-2.46-11.436-2.42-17.782 0.076-6.372 1.024-12.36 2.72-17.766 1.68-5.424 4.126-10.248 7.12-14.274 2.994-4.008 6.538-7.278 10.496-9.472 3.978-2.246 8.352-3.452 12.952-3.452zM540.928 279.032c-4.424 0-8.616 1.13-12.426 3.144-3.816 2.062-7.252 5.006-10.128 8.632-2.878 3.66-5.208 8.010-6.814 12.842-1.606 4.84-2.494 10.188-2.494 15.778 0.008 5.58 0.906 10.902 2.544 15.77 1.638 4.848 3.986 9.282 6.888 12.982 2.936 3.708 6.394 6.72 10.254 8.798 3.876 2.096 8.118 3.26 12.592 3.26 4.408 0 8.6-1.164 12.426-3.26 3.81-2.078 7.236-5.106 10.090-8.798 2.87-3.76 5.164-8.168 6.744-13.034 1.59-4.898 2.43-10.28 2.378-15.87-0.050-5.564-0.998-10.886-2.644-15.694-1.646-4.816-4.010-9.148-6.92-12.776-2.902-3.668-6.338-6.57-10.146-8.632-3.81-2.012-7.97-3.142-12.344-3.142zM242.346 775.384c3.884-0.792 7.818-1.498 11.744-2.096 3.942-0.626 7.884-1.124 11.844-1.556 3.958-0.432 7.942-0.748 11.892-0.964 3.976-0.232 7.936-0.374 11.876-0.374 34.832 0 64.792 3.518 90.126 9.646 25.39 6.124 46.192 14.904 62.668 25.452 16.51 10.58 28.67 22.93 36.704 36.212 8.068 13.314 11.96 27.562 11.928 41.808-0.018 2.462-0.118 4.792-0.3 7.020-0.2 2.212-0.482 4.36-0.866 6.388-0.38 1.996-0.856 3.926-1.412 5.756-0.566 1.828-1.232 3.55-1.98 5.19 2.046 0.132 4.11 0.232 6.172 0.332 2.044 0.084 4.108 0.166 6.17 0.2 2.046 0.066 4.126 0.1 6.164 0.118 2.070 0.034 4.118 0.034 6.18 0.034 0.516 0 0.932 0 1.33 0 0.382 0 0.732 0 1.082 0 0.332 0 0.682 0 1.032 0 0.366 0 0.764 0 1.23 0 1.872 0 3.742 0 5.614-0.034 1.856 0 3.734-0.050 5.598-0.084 1.848-0.048 3.694-0.1 5.54-0.166 1.864-0.066 3.708-0.14 5.524-0.232-0.766-1.63-1.432-3.344-2.014-5.19-0.582-1.83-1.080-3.744-1.496-5.79-0.4-2.030-0.7-4.176-0.924-6.438-0.208-2.246-0.324-4.608-0.324-7.104-0.034-14.246 3.868-28.494 11.926-41.808 8.036-13.284 20.21-25.632 36.746-36.212 16.466-10.546 37.278-19.328 62.686-25.452 25.376-6.128 55.35-9.646 90.222-9.646 4.184 0 8.36 0.14 12.534 0.406 4.176 0.234 8.334 0.592 12.476 1.064 4.158 0.5 8.284 1.066 12.376 1.774 4.11 0.722 8.176 1.522 12.21 2.436 3.742-7.884 7.002-16.118 9.78-24.702 2.78-8.584 5.042-17.49 6.788-26.774 1.746-9.282 2.978-18.886 3.642-28.834 0.682-9.948 0.806-20.228 0.368-30.848-0.95-23.13-4.792-48.332-11.762-73.88-6.92-25.392-16.916-51.118-30.222-75.602-13.224-24.32-29.726-47.458-49.744-67.834-19.912-20.244-43.324-37.842-70.57-51.284 10.544-2.362 20.392-6.080 29.176-10.912 8.766-4.824 16.5-10.696 22.878-17.424 6.348-6.688 11.354-14.23 14.698-22.314 3.326-8.084 5.016-16.734 4.758-25.684-0.334-10.828-3.46-21.092-8.824-30.424-5.35-9.282-12.934-17.648-22.166-24.652-9.232-6.986-20.126-12.64-32.154-16.534-12.010-3.892-25.15-6.046-38.874-6.046-11.958 0-23.42 1.638-34.018 4.65-10.62 2.976-20.4 7.352-28.984 12.806-8.608 5.506-16.010 12.076-21.866 19.512-5.872 7.436-10.198 15.72-12.592 24.586-1.198-13.24-4.708-25.716-10.066-36.978-5.34-11.226-12.516-21.224-21.126-29.608-8.566-8.342-18.562-15.022-29.558-19.662-10.978-4.59-22.962-7.136-35.564-7.136 0 0-0.034 0-0.048 0-0.034 0-0.050 0-0.066 0-0.018 0-0.034 0-0.066 0-0.018 0-0.050 0-0.066 0-13.376 0-26.184 2.846-37.86 8.036-11.718 5.182-22.348 12.716-31.374 22.008-9.032 9.33-16.466 20.51-21.74 32.918-5.306 12.476-8.434 26.248-8.85 40.704v0.166c-0.284 9.682 0.692 19.13 2.762 28.114 2.062 9.016 5.24 17.582 9.348 25.49 4.142 7.936 9.2 15.228 15.080 21.716 5.878 6.486 12.55 12.16 19.852 16.816-23.986 14.44-44.644 32.272-62.244 52.182-17.7 20.094-32.312 42.35-44.040 65.488-11.802 23.32-20.702 47.556-26.872 71.41-6.222 24.002-9.664 47.598-10.562 69.374-0.432 10.586-0.3 20.8 0.382 30.682 0.698 9.914 1.912 19.46 3.642 28.676 1.762 9.208 4.008 18.064 6.762 26.582 2.748 8.532 5.99 16.716 9.684 24.526zM515.328 86.268c17.65 0.236 35.098 1.764 52.166 4.516 17.066 2.748 33.766 6.728 49.91 11.898 16.16 5.172 31.794 11.528 46.7 18.974 14.93 7.484 29.144 16.098 42.452 25.792 12.276 8.92 23.57 18.614 33.758 28.922 10.222 10.31 19.356 21.256 27.206 32.6 7.884 11.376 14.514 23.172 19.746 35.182 5.238 12.042 9.064 24.336 11.344 36.626 1.43 7.652 2.71 14.79 3.842 21.526 1.148 6.744 2.164 13.058 3.078 19.080s1.746 11.694 2.512 17.148c0.766 5.44 1.48 10.628 2.18 15.67 0.756 5.34 1.456 10.396 2.162 15.278 0.714 4.89 1.43 9.608 2.162 14.23 0.748 4.632 1.532 9.184 2.412 13.74 0.88 4.592 1.846 9.132 2.91 13.806 7.128 12.666 14.456 22.856 21.776 31.272 7.318 8.4 14.654 15.004 21.756 20.576 7.088 5.556 13.99 10.064 20.428 14.274 6.47 4.208 12.492 8.118 17.898 12.474 8.284 6.678 17.564 13.542 27.22 20.494 9.656 6.968 19.704 14.072 29.444 21.324 9.782 7.27 19.262 14.654 27.82 22.156 8.566 7.536 16.194 15.212 22.222 23.006 3.542 4.582 6.67 9.33 9.082 13.888 2.43 4.542 4.194 8.95 4.99 12.842 0.806 3.908 0.666 7.318-0.648 9.914-1.314 2.56-3.826 4.358-7.776 4.99-0.508 0.1-1.024 0.132-1.556 0.232-0.532 0.050-1.046 0.1-1.58 0.132-0.532 0.050-1.080 0.066-1.628 0.084-0.534 0.016-1.074 0.048-1.63 0.048-8.25 0-17.5-2.244-27.212-5.754-9.732-3.476-19.946-8.218-30.192-13.242-10.246-5.006-20.494-10.272-30.324-14.82-9.814-4.592-19.228-8.466-27.762-10.646-1.174-0.332-2.372-0.624-3.576-0.874-1.232-0.25-2.446-0.474-3.694-0.656-1.23-0.2-2.486-0.382-3.726-0.5-1.264-0.182-2.512-0.248-3.776-0.34 1.13 5.646 1.93 11.318 2.32 17.258 0.39 5.97 0.398 12.192 0 18.93-0.39 6.752-1.206 14.006-2.438 22.006-1.246 8.036-2.91 16.8-5.040 26.556-0.898 4.292-2.478 10.828-5.024 19.088-2.53 8.268-6.022 18.264-10.762 29.442-4.776 11.236-10.78 23.638-18.332 36.746-7.584 13.14-16.702 26.948-27.696 40.854 13.556 4.548 26.48 10.138 38.342 16.576 11.876 6.454 22.672 13.748 31.97 21.63 9.332 7.918 17.132 16.436 23.004 25.318 5.888 8.858 9.806 18.098 11.354 27.47 0.848 5.19 1.256 10.122 1.256 14.796-0.016 4.69-0.464 9.064-1.33 13.174-0.866 4.092-2.146 7.852-3.844 11.278-1.696 3.452-3.816 6.512-6.354 9.24-2.294 2.496-4.924 4.692-7.852 6.562-2.96 1.888-6.206 3.444-9.764 4.714-3.56 1.266-7.436 2.188-11.594 2.838-4.158 0.624-8.618 0.922-13.366 0.922-13.284 0-26.556 0-39.714 0.026-13.14 0-26.2 0-39.032 0-12.834 0-25.492 0.034-37.834 0.048-12.344 0.036-24.42 0.058-36.114 0.126-9.24 0-18.248 0-26.956 0s-17.142 0-25.226 0-15.844 0-23.22 0c-7.37 0-14.374 0-20.944 0-6.902 0-13.888-0.14-20.708-0.664-6.82-0.534-13.472-1.432-19.696-2.928-6.236-1.522-12.042-3.66-17.2-6.654-5.124-2.954-9.58-6.81-13.108-11.702-2.062 0.066-4.126 0.166-6.188 0.24-2.070 0.1-4.126 0.184-6.22 0.242-2.080 0.042-4.184 0.116-6.29 0.148-2.096 0.034-4.24 0.066-6.386 0.066h-9c-2.244 0-4.464-0.034-6.67-0.066-2.21-0.034-4.408-0.108-6.57-0.166-2.18-0.082-4.35-0.166-6.504-0.266-2.162-0.132-4.324-0.232-6.47-0.376-3.526 4.964-7.984 8.824-13.124 11.818-5.14 3.020-10.938 5.148-17.176 6.688-6.228 1.522-12.882 2.42-19.704 2.954-6.82 0.524-13.79 0.664-20.708 0.664-6.57 0-13.556 0-20.944 0-7.37 0-15.136 0-23.204 0-8.11 0-16.518 0-25.226 0s-17.714 0-26.956 0c-11.71-0.066-23.77-0.090-36.122-0.126-12.368-0.016-24.994-0.048-37.834-0.048-12.858 0-25.9 0-39.058 0-13.14-0.026-26.398-0.026-39.688-0.026-4.792 0-9.266-0.298-13.44-0.922-4.166-0.65-8.034-1.572-11.594-2.838-3.542-1.272-6.788-2.826-9.714-4.714-2.928-1.872-5.54-4.066-7.834-6.562-2.528-2.728-4.64-5.79-6.336-9.24-1.698-3.426-2.994-7.186-3.842-11.278-0.866-4.11-1.314-8.484-1.332-13.174-0.016-4.676 0.4-9.608 1.256-14.796 1.522-9.406 5.49-18.706 11.436-27.604 5.93-8.916 13.824-17.45 23.22-25.368 9.398-7.936 20.294-15.238 32.288-21.674 11.944-6.438 24.976-12.010 38.624-16.518-10.944-13.924-20.044-27.712-27.612-40.82-7.518-13.074-13.524-25.484-18.264-36.68-4.742-11.178-8.234-21.158-10.78-29.408-2.528-8.226-4.1-14.764-5.006-19.054-2.128-9.806-3.792-18.588-5.040-26.638-1.24-8.036-2.046-15.304-2.446-22.056-0.4-6.738-0.4-12.974-0.016-18.93 0.4-5.956 1.18-11.636 2.312-17.276-1.38 0.092-2.788 0.192-4.184 0.308-1.406 0.14-2.82 0.332-4.234 0.498-1.398 0.232-2.794 0.482-4.192 0.74-1.38 0.308-2.76 0.6-4.108 0.972-8.55 2.18-17.948 6.054-27.762 10.646-9.83 4.548-20.084 9.814-30.306 14.82-10.238 5.024-20.444 9.766-30.158 13.242-9.714 3.51-18.914 5.754-27.13 5.754-0.548 0-1.082-0.034-1.63-0.048-0.548-0.018-1.074-0.034-1.598-0.084-0.532-0.034-1.064-0.082-1.596-0.132-0.516-0.1-1.022-0.132-1.53-0.232-3.958-0.632-6.47-2.43-7.792-4.99-1.322-2.596-1.438-6.006-0.64-9.914 0.816-3.892 2.554-8.3 4.99-12.842 2.428-4.558 5.54-9.306 9.084-13.888 6.038-7.792 13.672-15.47 22.24-23.006 8.534-7.502 18.032-14.886 27.78-22.156 9.748-7.252 19.744-14.356 29.392-21.324 9.63-6.954 18.878-13.816 27.13-20.494 5.588-4.558 11.876-8.618 18.614-12.99 6.72-4.376 13.922-9.132 21.342-15.088 7.41-5.914 15.046-13.026 22.656-22.174 7.586-9.13 15.154-20.226 22.456-34.182 0.882-4.11 1.672-8.15 2.412-12.226 0.716-4.092 1.398-8.184 2.054-12.376 0.64-4.15 1.272-8.444 1.904-12.834 0.648-4.45 1.282-9.008 1.962-13.782 0.698-5.042 1.414-10.23 2.178-15.67 0.766-5.456 1.598-11.126 2.496-17.148 0.932-6.022 1.93-12.336 3.078-19.080 1.13-6.736 2.404-13.874 3.842-21.526 2.262-12.292 6.106-24.584 11.344-36.626 5.222-12.010 11.844-23.804 19.728-35.182 7.86-11.344 16.966-22.29 27.198-32.6 10.18-10.308 21.482-20.002 33.75-28.922 13.308-9.694 27.514-18.306 42.452-25.792 14.886-7.448 30.506-13.802 46.676-18.974 16.118-5.17 32.8-9.15 49.852-11.898 17.050-2.752 34.45-4.28 52.064-4.516h5.154zM514.064 332.078c-0.516 3.208-1.166 6.372-1.946 9.498-0.798 3.094-1.714 6.154-2.746 9.14-1.046 2.984-2.204 5.93-3.476 8.792-1.264 2.862-2.644 5.68-4.118 8.4-9.44 0.532-18.97 2.162-27.986 4.408-9.016 2.21-17.532 5.106-24.984 8.2-7.436 3.126-13.796 6.478-18.496 9.616-4.692 3.126-7.736 6.096-8.5 8.45-0.766 2.296-0.866 4.592-0.516 6.82 0.34 2.212 1.13 4.326 2.144 6.272 0.982 1.946 2.188 3.742 3.376 5.274 1.198 1.53 2.364 2.794 3.278 3.734 0.898 0.988 4.806 4.964 10.246 10.454 5.458 5.506 12.444 12.526 19.496 19.596 7.068 7.052 14.206 14.138 19.91 19.728 5.706 5.588 9.964 9.646 11.278 10.678 1.332 1.082 2.57 2.096 3.826 3.028 1.282 0.932 2.578 1.764 3.992 2.462 1.414 0.732 2.978 1.296 4.742 1.698 1.78 0.38 3.784 0.616 6.122 0.616h2.652c2.338 0 4.334-0.234 6.088-0.616 1.756-0.4 3.292-0.964 4.692-1.698 1.396-0.7 2.67-1.532 3.918-2.462 1.246-0.932 2.478-1.946 3.776-3.028 1.338-1.032 5.622-5.090 11.318-10.678 5.698-5.59 12.834-12.676 19.912-19.728 7.060-7.070 14.046-14.090 19.504-19.596 5.448-5.488 9.366-9.464 10.262-10.454 0.916-0.94 2.072-2.206 3.262-3.734 1.18-1.532 2.402-3.328 3.392-5.274 0.998-1.946 1.796-4.058 2.146-6.272 0.35-2.228 0.248-4.524-0.516-6.82-0.732-2.228-3.428-4.99-7.62-7.918-4.208-2.96-9.88-6.054-16.602-8.998-6.704-2.954-14.42-5.748-22.688-8.050-8.26-2.294-17.050-4.142-25.95-5.132 0.616 0.042 1.212 0.076 1.83 0.102 0.59 0.042 1.212 0.090 1.812 0.108 0.6 0.066 1.214 0.092 1.812 0.132 0.608 0.018 1.214 0.058 1.83 0.108-2.662-2.652-5.108-5.43-7.302-8.292-2.228-2.894-4.208-5.888-5.938-8.966-1.746-3.094-3.21-6.27-4.426-9.546-1.208-3.282-2.158-6.626-2.806-10.052z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "os-linux_1" - ] - }, - { - "id": 38, - "paths": [ - "M1021.196 1c-108.772 15.132-211.52 29.426-308.064 42.878-91.246 12.7-160.038 24.776-242.010 36.188 0 68.72 0 137.328 0 205.868 0 68.532 0 137.064 0 205.606 81.972-0.482 150.764-0.99 242.11-1.54 96.544-0.566 199.194-1.164 307.964-1.814 0-81.158 0-162.29 0-243.44-0-81.144-0-162.392-0-243.746v0zM423.864 86.658c-75.568 10.53-165.458 20.542-233.876 30.080-65.288 9.088-127.616 17.784-187.184 26.096 0 58.66 0 117.266 0 175.786 0 58.536 0 117.054 0 175.588 59.466-0.348 121.894-0.722 187.184-1.114 68.416-0.4 158.208-0.832 233.876-1.282 0-67.476 0-134.96 0-202.446s-0-135.054-0-202.708v0zM2.804 528.776c0 58.612 0 117.128 0 175.664s0 117.054 0 175.508c59.466 8.368 121.794 17.132 187.076 26.298 68.432 9.614 158.314 19.718 233.982 30.348 0-67.4 0-134.884 0-202.372 0-67.474 0-134.968 0-202.536-75.668-0.55-165.458-1.074-233.876-1.564-65.386-0.464-127.714-0.914-187.182-1.346v0zM471.122 943.24c81.972 11.518 150.764 23.678 242.11 36.512 96.544 13.564 199.194 27.986 307.964 43.248 0-81.042 0-162.192 0-243.332 0-81.158 0-162.292 0-243.542-108.772-0.782-211.42-1.538-307.964-2.228-91.346-0.656-160.136-1.282-242.11-1.878 0 68.616 0 137.156 0 205.712 0 68.518 0 137.050 0 205.508z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "os-win-04" - ] - }, - { - "id": 37, - "paths": [ - "M56.692 341.784c-33.136 0-55.692-23.962-55.692-55.674 0-32.436 23.272-55.69 55.692-55.69 33.834 0 56.372 23.254 56.372 55.69 0 33.832-23.954 55.674-56.372 55.674zM109.546 393.24v392.574h-104.312v-392.574h104.312zM636.748 508.126c0 188.888-95.856 285.458-230.474 285.458-143.086 0-224.128-119.832-224.128-277 0-162.116 89.516-281.224 231.166-281.224 150.138-0.002 223.436 128.28 223.436 272.766zM291.39 514.46c0 106.426 41.594 193.822 118.4 193.822 77.542 0 117.71-86.69 117.71-195.934 0-99.39-37.36-191.716-117.004-191.716-81.746-0-119.106 94.458-119.106 193.828zM712.88 675.164c28.188 16.916 73.298 30.298 116.996 30.298 57.796 0 88.104-27.488 88.104-67.658 0-38.776-26.074-62.030-85.99-88.104-81.756-35.24-132.498-85.99-132.498-156.46 0-88.818 69.762-157.184 186.768-157.184 51.45 0 90.922 11.976 116.296 24.676l-21.85 85.292c-19.030-9.872-52.164-23.27-96.552-23.27-54.974 0-79.652 29.608-79.652 59.916 0 38.756 26.79 56.39 93.042 86.698 86.69 38.758 125.456 88.792 125.456 159.986 0 94.44-71.186 163.506-197.356 163.506-53.562 0-107.84-14.804-133.198-30.308l20.434-87.388z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "os-ios" - ] - }, - { - "id": 36, - "paths": [ - "M513.298 699.982c-101.306 0-183.724-82.426-183.724-183.724 0-101.316 82.418-183.734 183.724-183.734s183.732 82.418 183.732 183.734c0.002 101.298-82.424 183.724-183.732 183.724zM590.702 732.628c-25.71 9.354-52.636 14.078-80.234 14.078-54.15 0-107.018-19.012-148.852-53.522-33.938-28.002-59.232-64.854-73.172-106.662l-0.074-0.248-202.476-350.702c-72.74 111.876-98.55 245.274-72.658 376.47 26.372 133.614 103.186 248.952 216.304 324.79 58.928 39.5 124.21 65.846 194.080 78.336l167.082-282.54zM972.628 286.592c-126.454-254.428-435.226-358.17-689.648-231.716-65.848 32.728-123.708 79.132-169.918 135.882l171.042 296.264c11.1-86.052 70.664-162.122 158.876-189.868 21.282-6.688 43.424-10.248 65.722-10.562zM511.304 1023c128.174 0 250.846-48.068 345.366-135.336 95.016-87.716 152.718-207.084 162.476-336.104 5.58-73.892-5.372-149.548-31.686-219.036h-334.54c56.286 44.556 89.312 112.646 88.982 184.8-0.24 51.95-18.052 103.004-50.326 143.994l-213.258 360.622c10.984 0.704 22.050 1.060 32.968 1.060 0.018 0 0.002 0 0.018 0z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "brw-chrome" - ] - }, - { - "id": 35, - "paths": [ - "M883.69 23.2c-43.914-39.166-97.094-23.434-149.574 23.146-7.784 6.918-15.568 14.596-23.294 22.796-12.134 12.866-24.128 27.258-35.904 42.782-12.218-5.048-25.576-7.86-39.572-7.86h-435.22c-57.538 0-104.616 47.080-104.616 104.616v435.226c0 57.538 47.078 104.614 104.616 104.614h306.154c3.676 20.292 5.822 34.73 5.822 34.73s0.274 3.786 0.732 9.6c-1.688 39.338-0.674 80.126 2.37 116.986 4.040 48.804 11.63 90.722 21.316 113.162l6.57-3.594c-14.212-44.196-19.994-102.126-17.46-168.936 3.826-102.108 27.326-225.258 70.74-353.608 73.356-193.758 175.132-349.216 268.284-423.462-84.9 76.674-199.808 324.864-234.2 416.772-38.518 102.918-65.804 199.498-82.26 292.032 28.374-86.748 120.134-124.034 120.134-124.034s45.012-55.498 97.61-134.8c-31.506 7.176-83.238 19.486-100.57 26.764-25.558 10.72-32.446 14.378-32.446 14.378s82.796-50.422 153.832-73.248c97.694-153.86 204.124-372.446 96.936-468.062zM511.814 475.54c10.084 20.452 17.96 46.55 23.15 66.486 1.326 5.124 2.528 9.922 3.484 14.006 2.284 9.664 3.506 15.936 3.506 15.936s-0.802-3.044-4.106-12.626c-0.626-1.838-1.33-3.844-2.162-6.206-0.354-0.98-0.844-2.162-1.384-3.426-5.86-13.608-22.056-42.346-29.188-54.852-6.096 17.986-11.486 34.814-15.994 50.042 20.58 37.652 33.124 102.192 33.124 102.192s-1.090-4.184-6.258-18.78c-4.596-12.908-27.464-52.988-32.882-62.354-9.266 34.216-12.946 57.304-9.626 62.944 4.898 8.268 9.614 21.118 13.964 35.93h-287.316c-11.34 0-20.922-9.588-20.922-20.926v-435.224c0-11.34 9.582-20.922 20.922-20.922h424.472c-52.98 90.304-95.58 198.234-112.784 287.78z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "dbs-sqlite" - ] - }, - { - "id": 34, - "paths": [ - "M1023 701.080h-81.524l-33.892-73.182c-12.768-26.024-21.616-46.168-30.948-68.758h-1.464c-7.868 22.59-16.7 43.224-28.012 69.256l-30.93 72.684h-79.57l97.742-192.026-94.298-185.652h81.042l33.884 74.156c9.822 21.624 17.2 40.77 26.032 61.896h0.982c8.84-23.588 15.218-40.788 24.56-62.378l31.92-73.672h80.050l-96.742 185.154 101.168 192.522zM317.796 507.576c0 131.626-66.802 198.91-160.602 198.91-99.722 0-156.194-83.496-156.194-193.024 0-112.96 62.378-195.95 161.102-195.95 104.61 0.002 155.694 89.376 155.694 190.064zM241.662 510.512c0-69.24-26.032-133.582-81.524-133.582-56.988 0-83.022 65.822-83.022 135.070 0 74.154 28.986 135.060 82.522 135.060 54.028 0 82.024-60.406 82.024-136.548zM499.516 480.56c-46.168-21.108-64.832-33.4-64.832-60.398 0-21.126 17.202-41.752 55.51-41.752 30.94 0 54.028 9.332 67.286 16.202l15.218-59.426c-17.682-8.84-45.186-17.192-81.042-17.192-81.524 0-130.144 47.64-130.144 109.52 0 49.122 35.364 84.484 92.326 109.038 41.762 18.164 59.926 34.38 59.926 61.396 0 27.986-21.126 47.148-61.396 47.148-30.458 0-61.878-9.324-81.524-21.126l-14.24 60.906c17.666 10.802 55.492 21.108 92.818 21.108 87.912 0 137.516-48.122 137.516-113.926 0-49.6-27.006-84.482-87.422-111.498z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "os-osx_1" - ] - }, - { - "id": 33, - "paths": [ - "M1022.97 415.66c-0.298-9.414-20.612 44.488-21.422 35.238-6.042-68.852-20.502-150.73-56.9-206.964 2.028 11.050-5.164 21.084-11.15 30.104-84.058-152.642-246.456-256.076-433.028-256.076-145.292 0-275.926 62.724-366.322 162.564-9.956-18.888-17.376-44.098-22.16-75.602-35.676 34.976-53.414 96.78-53.208 185.582-3.932 7.83-7.66 15.778-11.182 23.836-8.762 13.256-20.3 31.158-26.178 41.834-15.276 27.252-19.656 49.886-20.42 69.23 0.124-0.198 0.24-0.378 0.352-0.56 0.13 4.002 0.652 7.864 1.686 11.472l10.59-8.624c-4.71 27.4-7.194 55.56-7.194 84.304 0 272.85 221.186 494.038 494.038 494.038 0.782 0 1.558-0.026 2.338-0.030 1.034 0.006 2.062 0.030 3.096 0.030 1.656 0 3.304-0.046 4.956-0.060 138.61-1.368 263.56-59.776 352.464-152.922 68.486-71.746 127.432-175.944 142.916-278.64 3.65-24.226 7.232-36.542 9.51-68.342 1.254-17.526 7.746-73.682 7.218-90.412zM323.566 93.188c56.010-23.69 115.53-35.702 176.906-35.702s120.896 12.012 176.904 35.702c21.49 9.090 42.098 19.764 61.766 31.916-36.4-8.586-78.034-13.63-124.78-15 25.124 5.012 46.448 11.242 63.674 19.148 26.586 11.734 44.062 26.824 52.224 44.78-24.678-4.544-46.942-2.868-66.582 4.792 140.796 55.544 207.616 121.64 199.942 198.016-10.296-16.040-23.958-26.576-41.438-31.834 21.564 83.806 23.726 153 6.25 207.598-11.976-36.404-16.296-76.056-26.126-83.716 13.676 112.306-11.478 213.248-62.002 267.36 9.572-33.042 13.416-60.088 11.24-81.416-59.366 88.852-120.188 116.952-195.872 119.834-29.912-0.256-58.176-4.784-84.75-13.42-0.274 0.010-0.544 0-0.814 0.010 0.262-0.010 0.524-0.018 0.788-0.026-38.994-13.074-74.36-35.364-105.796-67.066 49.128 4.092 93.916-4.42 133.358-24.374l64.654-41.928-0.238-0.214c8.382-3.114 16.28-2.884 23.954 0.708 15.796-2.154 21.286-10.536 16.026-24.654-7.65-10.536-19.148-20.116-33.996-28.48-32.33-16.784-66.090-14.152-101.286 8.118-33.53 18.926-65.85 18.204-97.216-1.922-20.596-14.112-40.464-33.038-59.622-56.738l-7.668-11.248 29.454-39.51c21.082 1.914 45.266 6.696 72.55 14.602 4.55-26.1-1.432-53.4-17.952-81.406 0-0.248 0-0.486 0-0.486 25.626-23.708 48.374-40.942 67.756-51.96 8.63-4.552 20.596-35.912 11.984-41.188-17.956 0.97-35.922-0.23-53.876-3.83l-0.24 0.722c-7.43-2.154-16.762-8.622-28.26-19.64l-29.454-28.73c0 0-8.858-10.058-8.144-10.536 4.068-21.794 10.784-40.464 20.356-56.514 0 0 30.166-34.712 57.24-52.914-50.296 6.228-95.79 28.738-136.254 67.534-33.522-12.228-73.268-9.582-119.010 7.888l0.236-0.23c-3.44-1.578-6.74-3.516-9.908-5.792 6.284-7.114 12.784-14.072 19.542-20.83 41.748-41.758 90.362-74.534 144.48-97.424z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "brw-firefox" - ] - }, - { - "id": 32, - "paths": [ - "M954.094 391.494c-69.538-191.048-249.958-309.684-442.128-309.684-41.934 0-84.42 5.676-126.438 17.45 21.398-12.682 31.54-39.334 22.74-63.514-9.934-27.302-40.402-41.51-67.704-31.576l-49.638 18.066c-27.3 9.94-41.51 40.408-31.574 67.708 8.786 24.146 33.64 38.038 58.156 34.050-221.924 100.466-332.296 356.614-247.604 589.32 69.548 191.062 249.94 309.686 442.138 309.686 53.412 0 107.77-9.174 160.868-28.5 244.156-88.872 370.054-358.842 281.184-603.006zM866.574 717.746c-44.168 94.71-122.57 166.556-220.768 202.296-43.244 15.74-88.256 23.72-133.766 23.72-39.534 0-78.792-6.020-116.7-17.896-37.564-11.768-73.040-29.040-105.45-51.34-67.196-46.228-117.516-111.348-145.534-188.314-35.74-98.2-31.104-204.436 13.064-299.146 44.168-94.714 122.57-166.556 220.77-202.3 43.242-15.738 88.254-23.722 133.774-23.722 39.514 0 78.774 6.026 116.682 17.902 37.562 11.768 73.040 29.044 105.458 51.346 67.196 46.232 117.526 111.346 145.534 188.304 35.74 98.198 31.104 204.442-13.064 299.15zM604.142 518.868c8.956 24.612 7.792 51.236-3.278 74.976-11.068 23.74-30.72 41.746-55.328 50.702-10.842 3.948-22.12 5.948-33.524 5.948-8.92 0-17.622-1.29-25.962-3.598l63.814-71.202 40.802-81.696c5.578 7.49 10.178 15.816 13.476 24.87zM479.104 559.372c-1.078-8.652 2.36-17.948 7.36-24.316 4.918-5.726 11.86-9.74 19.952-10.752 7.83-0.97 15.316 1.052 21.376 5.126 7.286 4.888 12.512 12.78 13.682 22.178 0.744 6.026-0.354 11.818-2.72 16.966-4.646 8.694-14.038 16.794-24.58 18.106-8.012 0.998-15.67-1.146-21.802-5.412-7.080-4.926-12.124-12.684-13.268-21.896zM535.19 457.148l-63.824 69.676-39.706 81.65c-4.816-6.882-8.846-14.404-11.802-22.534-8.958-24.612-7.794-51.236 3.276-74.976 11.068-23.74 30.72-41.746 55.328-50.706 10.842-3.942 22.12-5.942 33.534-5.942 7.928 0.002 15.706 0.99 23.194 2.832zM511.994 195.84c-196.924 0-356.556 159.638-356.556 356.566 0 196.92 159.632 356.562 356.556 356.562s356.566-159.642 356.566-356.562c0-196.928-159.642-356.566-356.566-356.566zM379.562 247.83l52.756 31.756-9.158-25.168c-1.458-4-2.804-6.876-4.046-8.638-1.244-1.76-2.614-2.904-4.112-3.42-1.17-0.382-2.734-0.508-4.704-0.382-1.968 0.136-3.54 0.308-4.702 0.518l-1.328-3.656 28.552-10.398 1.328 3.658c-0.838 0.416-2.022 1.042-3.56 1.886-1.534 0.844-2.782 1.988-3.742 3.43-0.848 1.26-1.138 3.012-0.884 5.236 0.264 2.222 1.116 5.316 2.558 9.292l17.312 47.552-8.348 3.040-60.184-36.356 11.37 31.23c1.412 3.874 2.744 6.732 3.992 8.556 1.252 1.834 2.624 3.002 4.12 3.52 1.098 0.38 2.668 0.5 4.702 0.362 2.042-0.136 3.642-0.318 4.798-0.526l1.334 3.658-28.6 10.406-1.332-3.656c1.188-0.536 2.498-1.27 3.946-2.204 1.448-0.936 2.568-1.97 3.358-3.104 0.888-1.352 1.23-3.030 1.016-5.018-0.216-1.996-1.106-5.144-2.676-9.462l-11.468-31.512c-0.572-1.56-1.348-2.958-2.34-4.174-0.99-1.206-2.188-2.124-3.584-2.758-1.474-0.662-3.042-1.042-4.682-1.134-1.646-0.090-3.44 0.028-5.374 0.334l-1.37-3.756 25.052-9.112zM255.17 622.788c0.39 5.244 1.088 13.61 2.114 25.096 1.018 11.486 2.064 23.428 3.148 35.822l-7.39 2.686-31.668-44.458 5.642 53.932-7.38 2.686c-9.604-13.71-16.99-24.272-22.142-31.694-5.158-7.412-9.496-13.628-13.012-18.654-1.074-1.526-2.044-2.558-2.908-3.112-0.866-0.544-1.9-1.052-3.118-1.498-0.862-0.318-1.714-0.472-2.552-0.472-0.84 0.010-1.774 0.11-2.808 0.3l-1.334-3.656 27.702-10.080 1.296 3.564c-1.542 0.844-2.668 1.534-3.388 2.060-0.716 0.526-1.266 0.998-1.632 1.414-0.35 0.408-0.522 0.772-0.514 1.090 0 0.316 0.046 0.59 0.126 0.798 0.16 0.444 0.356 0.852 0.59 1.224 0.232 0.372 0.496 0.806 0.786 1.306 1.474 2.222 4.338 6.414 8.598 12.574 4.254 6.162 9.528 13.8 15.804 22.938l-5.792-52.752 7.758-2.82 31.87 45.012c-0.902-8.774-1.678-15.924-2.322-21.458s-1.216-10.27-1.708-14.19c-0.32-2.404-0.608-4.41-0.862-6.016s-0.58-2.95-0.98-4.046c-0.234-0.654-0.676-1.134-1.324-1.424-0.644-0.3-1.434-0.472-2.36-0.528-0.78-0.028-1.75 0.064-2.892 0.282-1.152 0.226-2.136 0.436-2.972 0.626l-1.366-3.748 20.886-7.604 1.37 3.748c-0.724 0.372-1.402 0.862-2.042 1.46-0.634 0.608-1.224 1.296-1.78 2.058-0.82 1.224-1.296 2.404-1.424 3.548-0.12 1.146-0.13 2.47-0.020 3.986zM649.244 850.64c-0.368 3.186-1.366 6.080-2.994 8.694-1.788 2.884-4.128 5.454-7.022 7.71-2.894 2.26-6.534 4.184-10.906 5.782-4.066 1.478-8.040 2.35-11.928 2.612-3.886 0.264-7.298 0.154-10.238-0.334l-2.042 4.454-3.984 1.454-9.372-23.826 4.038-1.47c1.736 1.952 3.774 3.948 6.106 5.97s4.782 3.71 7.36 5.036c2.666 1.416 5.426 2.35 8.266 2.804s5.834 0.108 8.99-1.044c4.256-1.542 7.132-3.774 8.642-6.678 1.51-2.902 1.692-5.942 0.542-9.1-0.946-2.596-2.706-4.428-5.274-5.498-2.562-1.070-6.096-1.516-10.598-1.334-2.93 0.118-5.632 0.208-8.102 0.292-2.466 0.072-4.808 0.090-7.024 0.044-5.118-0.154-9.364-1.498-12.746-4.030-3.38-2.522-5.816-5.842-7.304-9.944-0.944-2.596-1.292-5.298-1.042-8.104 0.254-2.802 1.116-5.552 2.576-8.246 1.416-2.532 3.526-4.946 6.334-7.25 2.812-2.294 6.106-4.136 9.888-5.518 3.694-1.342 7.332-2.076 10.93-2.222 3.598-0.134 6.5-0.028 8.722 0.336l1.834-3.856 4.082-1.488 8.638 22.556-4.040 1.468c-1.822-2.106-3.838-4.202-6.034-6.288-2.196-2.096-4.3-3.738-6.324-4.908-2.196-1.262-4.49-2.068-6.886-2.424-2.394-0.354-4.936-0.044-7.622 0.936-3.378 1.234-5.79 3.194-7.234 5.878-1.444 2.696-1.656 5.444-0.63 8.266 0.97 2.658 2.694 4.5 5.166 5.508 2.472 1.016 5.912 1.452 10.32 1.296 2.6-0.062 5.246-0.134 7.94-0.226 2.69-0.090 5.104-0.118 7.24-0.090 5.172 0.108 9.5 1.27 12.984 3.492 3.484 2.232 6.050 5.626 7.716 10.2 1.050 2.876 1.396 5.908 1.032 9.090zM630.816 587.156l59.928 48.596-75.75-14.666c-8.422 12.652-19.208 23.816-32.016 32.768l13.714 131.23-73.852-109.332c-3.622 0.322-7.236 0.49-10.828 0.49-15.454 0-30.596-2.946-44.722-8.42l-140.95 157.22 92.792-190.808c-3.026-3.43-5.862-7.058-8.52-10.856l-131.29 13.714 109.336-73.848c-1.378-15.564 0.24-31.008 4.524-45.592l-59.928-48.6 75.752 14.672c8.42-12.654 19.208-23.822 32.014-32.768l-13.712-131.23 73.85 109.332c3.622-0.322 7.232-0.49 10.83-0.49 14.618-0.004 28.948 2.68 42.416 7.604l143.256-156.404-1.616 3.244-92.76 185.718c3.634 3.96 6.974 8.234 10.104 12.704l131.29-13.718-109.34 73.854c1.376 15.558-0.248 31.002-4.522 45.586zM812.19 420.82l-3.566 1.296c-1.824-2.196-4.314-4.174-7.476-5.96-3.156-1.77-5.924-2.496-8.274-2.168-1.016 0.126-2.376 0.472-4.060 1.034-1.694 0.552-3.084 1.034-4.178 1.434l-9.654 3.52 9.332 25.65 6.846-2.496c1.714-0.626 3.21-1.398 4.468-2.314 1.256-0.916 2.254-2.168 2.988-3.748 0.456-0.98 0.722-2.504 0.798-4.592 0.072-2.078-0.028-3.828-0.294-5.252l3.562-1.298 10.106 27.764-3.564 1.296c-0.662-1.252-1.742-2.722-3.23-4.436-1.488-1.696-2.712-2.804-3.67-3.302-1.438-0.752-2.946-1.088-4.504-0.99-1.562 0.082-3.268 0.472-5.11 1.144l-6.84 2.486 6.976 19.18c0.73 2.004 1.452 3.538 2.178 4.6 0.724 1.062 1.606 1.76 2.638 2.086 1.004 0.308 2.214 0.308 3.648 0.008 1.424-0.308 3.312-0.888 5.662-1.742 1.088-0.4 2.394-0.898 3.92-1.488 1.514-0.582 2.826-1.17 3.928-1.742 1.256-0.634 2.396-1.316 3.42-2.050 1.026-0.716 1.714-1.488 2.060-2.286 0.944-2.078 1.784-5.026 2.514-8.856 0.734-3.82 1.116-6.624 1.142-8.402l3.42-1.244 6.28 21.186-62.418 22.718-1.33-3.666c0.854-0.38 1.996-0.934 3.426-1.67 1.434-0.734 2.418-1.342 2.954-1.814 1.008-0.934 1.57-1.85 1.702-2.766 0.124-0.916-0.028-1.97-0.458-3.158l-17.084-46.936c-0.412-1.126-0.922-1.996-1.534-2.612-0.618-0.6-1.684-0.972-3.212-1.080-0.944-0.082-2.212-0.008-3.792 0.208-1.59 0.226-2.774 0.426-3.558 0.608l-1.332-3.656 58.992-21.476 6.178 16.982z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "brw-safari-01" - ] - }, - { - "id": 31, - "paths": [ - "M954.094 391.494c-69.538-191.048-249.958-309.684-442.128-309.684-42.052 0-84.66 5.778-126.796 17.622 21.63-12.6 31.948-39.38 23.1-63.686-9.934-27.302-40.402-41.51-67.704-31.576l-49.638 18.066c-27.302 9.94-41.512 40.408-31.576 67.708 8.796 24.172 33.7 38.044 58.242 34.016-221.984 100.438-332.392 356.62-247.69 589.354 69.546 191.062 249.94 309.686 442.136 309.686 53.414 0 107.772-9.172 160.868-28.498 244.158-88.874 370.056-358.844 281.186-603.008zM866.574 717.748c-44.168 94.708-122.57 166.554-220.77 202.294-43.242 15.742-88.254 23.72-133.766 23.72-39.532 0-78.792-6.020-116.698-17.896-37.564-11.768-73.040-29.040-105.45-51.34-67.196-46.228-117.516-111.346-145.534-188.314-35.74-98.2-31.104-204.436 13.064-299.146 44.168-94.714 122.57-166.556 220.77-202.3 43.242-15.738 88.254-23.722 133.774-23.722 39.514 0 78.774 6.024 116.682 17.902 37.562 11.768 73.040 29.044 105.458 51.346 67.196 46.232 117.526 111.346 145.534 188.304 35.74 98.198 31.104 204.442-13.064 299.152zM618.826 483.264c-3.126-4.468-6.464-8.742-10.104-12.702l94.382-188.962-143.258 156.404c-13.472-4.922-27.798-7.608-42.42-7.604-3.598 0-7.208 0.168-10.83 0.49l-73.846-109.332 13.708 131.23c-12.802 8.946-23.59 20.116-32.014 32.768l-75.752-14.67 59.932 48.6c-4.282 14.586-5.906 30.030-4.528 45.594l-109.336 73.846 131.292-13.712c2.654 3.796 5.49 7.426 8.52 10.856l-92.794 190.808 7.302-8.104 133.652-149.118c14.126 5.472 29.272 8.42 44.716 8.42 3.598 0 7.208-0.172 10.83-0.49l73.852 109.332-13.714-131.234c12.81-8.946 23.594-20.116 32.020-32.762l75.752 14.662-59.934-48.592c4.278-14.586 5.902-30.028 4.524-45.588l109.34-73.856-131.292 13.716zM437.106 610.306c-4.822-6.88-8.852-14.402-11.808-22.534-8.958-24.61-7.794-51.236 3.276-74.974 11.072-23.74 30.72-41.746 55.332-50.706 10.838-3.942 22.116-5.944 33.53-5.944h0.006c7.93 0 15.7 0.99 23.19 2.832l-63.82 69.678-39.706 81.648zM491.906 536.886c4.914-5.724 11.854-9.74 19.948-10.752 7.83-0.97 15.32 1.052 21.38 5.126 7.288 4.89 12.512 12.78 13.678 22.18 0.75 6.026-0.35 11.818-2.716 16.966-4.65 8.692-14.042 16.794-24.58 18.106-8.016 0.998-15.668-1.148-21.806-5.412-7.072-4.928-12.118-12.684-13.266-21.898-1.076-8.65 2.364-17.946 7.362-24.316zM606.304 595.678c-11.068 23.738-30.716 41.74-55.328 50.696-10.842 3.948-22.12 5.954-33.526 5.954-8.914 0-17.616-1.29-25.96-3.604l63.814-71.198 40.802-81.694c5.576 7.488 10.176 15.814 13.472 24.87 8.96 24.61 7.798 51.236-3.274 74.976zM365.172 258.374l-1.366-3.756 25.046-9.11 52.756 31.756-9.158-25.168c-1.458-4.002-2.804-6.878-4.042-8.638-1.242-1.76-2.618-2.904-4.11-3.42-1.172-0.38-2.74-0.508-4.708-0.38-1.97 0.136-3.54 0.308-4.702 0.516l-1.328-3.656 28.552-10.398 1.328 3.656c-0.838 0.416-2.022 1.042-3.56 1.888-1.534 0.844-2.782 1.986-3.742 3.43-0.848 1.26-1.138 3.012-0.88 5.234 0.26 2.224 1.112 5.318 2.558 9.292l17.306 47.552-8.346 3.040-60.176-36.358 11.364 31.23c1.41 3.874 2.744 6.732 3.996 8.556 1.248 1.834 2.624 3.004 4.12 3.52 1.094 0.382 2.664 0.5 4.698 0.364 2.042-0.136 3.642-0.318 4.802-0.526l1.33 3.656-28.6 10.408-1.334-3.656c1.19-0.536 2.5-1.27 3.948-2.206s2.568-1.968 3.358-3.102c0.888-1.352 1.23-3.032 1.016-5.018-0.212-1.996-1.106-5.144-2.676-9.464l-11.468-31.51c-0.566-1.56-1.348-2.958-2.336-4.174-0.994-1.208-2.188-2.124-3.584-2.758-1.478-0.664-3.040-1.044-4.686-1.134-1.652-0.094-3.442 0.024-5.376 0.334zM657.506 839.228c1.046 2.876 1.392 5.906 1.030 9.090-0.368 3.186-1.366 6.080-2.994 8.694-1.788 2.884-4.128 5.454-7.024 7.71-2.892 2.26-6.532 4.184-10.904 5.782-4.066 1.478-8.040 2.35-11.928 2.612-3.886 0.264-7.298 0.154-10.238-0.334l-2.042 4.454-3.984 1.454-9.368-23.826 4.034-1.47c1.736 1.952 3.774 3.948 6.106 5.97s4.782 3.71 7.36 5.036c2.666 1.416 5.426 2.35 8.266 2.804s5.834 0.108 8.99-1.044c4.256-1.542 7.13-3.774 8.642-6.678 1.51-2.902 1.692-5.942 0.54-9.1-0.944-2.596-2.704-4.428-5.272-5.498-2.562-1.070-6.096-1.516-10.598-1.334-2.93 0.118-5.632 0.208-8.102 0.292-2.466 0.072-4.808 0.090-7.022 0.044-5.12-0.154-9.366-1.498-12.748-4.030-3.38-2.522-5.812-5.844-7.304-9.944-0.944-2.596-1.292-5.298-1.040-8.104 0.25-2.802 1.112-5.552 2.576-8.246 1.412-2.532 3.522-4.946 6.33-7.25 2.812-2.294 6.106-4.136 9.888-5.516 3.694-1.344 7.332-2.078 10.93-2.224 3.598-0.134 6.5-0.028 8.722 0.336l1.834-3.856 4.082-1.488 8.638 22.556-4.040 1.468c-1.822-2.106-3.838-4.202-6.034-6.288-2.196-2.096-4.3-3.738-6.324-4.908-2.196-1.262-4.49-2.068-6.886-2.424-2.394-0.354-4.936-0.044-7.622 0.936-3.378 1.234-5.79 3.194-7.236 5.878-1.442 2.696-1.654 5.444-0.628 8.266 0.97 2.658 2.694 4.5 5.166 5.508 2.472 1.016 5.912 1.452 10.32 1.296 2.6-0.062 5.244-0.134 7.94-0.226 2.69-0.090 5.104-0.118 7.24-0.090 5.172 0.108 9.5 1.27 12.984 3.492 3.488 2.234 6.054 5.626 7.72 10.2zM266.574 645.56c1.016 11.486 2.064 23.428 3.152 35.822l-7.394 2.686-31.664-44.458 5.642 53.932-7.384 2.686c-9.606-13.71-16.986-24.272-22.144-31.694-5.158-7.412-9.494-13.628-13.006-18.654-1.080-1.526-2.050-2.558-2.912-3.112-0.862-0.544-1.9-1.052-3.118-1.498-0.862-0.318-1.708-0.472-2.552-0.472-0.84 0.010-1.776 0.11-2.808 0.3l-1.334-3.656 27.7-10.080 1.298 3.564c-1.54 0.844-2.668 1.534-3.388 2.060-0.716 0.526-1.262 0.998-1.634 1.414-0.348 0.408-0.516 0.772-0.512 1.090 0.004 0.316 0.050 0.59 0.126 0.798 0.158 0.444 0.354 0.852 0.59 1.224 0.23 0.372 0.494 0.806 0.786 1.306 1.474 2.222 4.336 6.414 8.596 12.574 4.26 6.162 9.532 13.8 15.81 22.938l-5.796-52.752 7.758-2.82 31.87 45.012c-0.902-8.774-1.674-15.924-2.324-21.458-0.642-5.534-1.214-10.27-1.706-14.19-0.322-2.404-0.608-4.41-0.858-6.016-0.258-1.606-0.584-2.95-0.98-4.046-0.24-0.654-0.68-1.134-1.328-1.424-0.644-0.3-1.434-0.472-2.36-0.528-0.78-0.028-1.746 0.064-2.894 0.282-1.146 0.226-2.136 0.436-2.97 0.626l-1.366-3.748 20.89-7.604 1.366 3.748c-0.72 0.372-1.402 0.862-2.038 1.46-0.634 0.608-1.228 1.296-1.778 2.058-0.826 1.224-1.302 2.404-1.43 3.548-0.12 1.142-0.126 2.466-0.014 3.982 0.384 5.248 1.086 13.614 2.108 25.1zM836.668 445.634l6.28 21.186-62.418 22.718-1.33-3.666c0.854-0.38 1.996-0.934 3.426-1.668 1.434-0.736 2.418-1.342 2.954-1.814 1.006-0.934 1.568-1.852 1.702-2.768 0.122-0.916-0.028-1.968-0.458-3.158l-17.084-46.936c-0.414-1.126-0.922-1.996-1.534-2.614-0.618-0.598-1.684-0.97-3.212-1.080-0.944-0.082-2.212-0.008-3.792 0.208-1.588 0.226-2.772 0.426-3.556 0.608l-1.332-3.658 58.992-21.476 6.18 16.976-3.566 1.298c-1.824-2.196-4.314-4.174-7.476-5.96-3.156-1.77-5.924-2.496-8.274-2.168-1.018 0.126-2.376 0.472-4.060 1.034-1.694 0.554-3.086 1.034-4.178 1.434l-9.654 3.52 9.332 25.65 6.846-2.496c1.714-0.626 3.21-1.396 4.468-2.314 1.256-0.916 2.254-2.168 2.988-3.748 0.456-0.98 0.722-2.504 0.798-4.59 0.072-2.078-0.028-3.83-0.294-5.252l3.56-1.298 10.108 27.764-3.564 1.298c-0.662-1.252-1.742-2.722-3.23-4.438-1.488-1.696-2.712-2.802-3.67-3.302-1.438-0.754-2.946-1.088-4.506-0.99-1.56 0.082-3.266 0.472-5.108 1.144l-6.842 2.486 6.978 19.18c0.73 2.006 1.452 3.54 2.178 4.6 0.724 1.062 1.606 1.76 2.64 2.086 1.002 0.308 2.212 0.308 3.646 0.008 1.424-0.308 3.312-0.89 5.662-1.742 1.088-0.4 2.394-0.898 3.92-1.488 1.514-0.58 2.826-1.17 3.928-1.742 1.256-0.634 2.394-1.316 3.42-2.050 1.026-0.716 1.714-1.488 2.060-2.288 0.944-2.078 1.784-5.026 2.514-8.854 0.734-3.82 1.116-6.624 1.142-8.402l3.416-1.238z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "brw-safari-02" - ] - }, - { - "id": 30, - "paths": [ - "M968.41 229.46c94.562-245.362-89.1-228.2-89.1-228.2-117.838 0-265.144 107.316-265.144 107.316s-175.698-47.34-351.412 58.922c-191.492 122.048-185.172 338.792-185.172 338.792 155.71-223.054 372.454-313.54 372.454-313.54v14.73c-319.85 218.728-395.606 538.696-414.544 603.93-18.94 65.224-6.312 211.588 128.366 211.588s271.45-108.482 271.45-108.482 29.46 6.32 109.416 6.32c336.69 0 416.644-296.708 416.644-296.708h-298.808c0 0-21.042 96.794-128.352 96.794-147.298 0-138.886-153.61-138.886-153.61h570.262c27.354-395.602-317.748-452.416-317.748-452.416s121.956-86.274 227.264-86.274c166.902 0 87.976 195.512 87.976 195.512l5.334 5.326zM418.606 910.14c0 0-205.522 124.724-297.778 38.306-49.424-86.426 30.894-208.818 30.894-208.818s67.958 126.030 266.884 170.512zM665.81 432.684h-271.212c0 0-3.43-132.166 139.036-132.166 137.588-0.002 132.176 132.166 132.176 132.166z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "brw-explorer" - ] - }, - { - "id": 29, - "paths": [ - "M509.848 1c-279.196 0-473.73 202.514-473.73 506.252 0 270.28 189.006 515.748 473.744 515.748 287.538 0 478.022-245.408 478.022-515.748-0.002-306.17-201.376-506.252-478.036-506.252zM509.862 908.91c-23.126 0-43.226-4.508-60.702-12.718-48.578-24.492-77.834-78.748-94.952-145.182-18.52-77.052-20.612-170.54-20.612-252.364 0-146.132 10.666-278.17 70.306-344.070 26.026-27.666 60.338-44.042 105.408-44.164 0.186 0 0.372-0.016 0.548-0.016 58.71 0 99.878 28.75 128.428 73.83 42.562 71.894 52.252 188.402 52.252 313.77 0.004 177.962-11.826 410.914-180.676 410.914z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "brw-opera" - ] - }, - { - "id": 28, - "paths": [ - "M241.212 338h541.576v441.326c0 26.218-21.256 47.474-47.442 47.474h-54.246v134.406c0 34.132-27.224 61.794-60.83 61.794-33.692 0-60.876-27.662-60.876-61.794v-134.406h-94.742v134.406c0 34.132-27.278 61.794-60.882 61.794-33.598 0-60.874-27.662-60.874-61.794v-134.406h-54.198c-26.192 0-47.488-21.256-47.488-47.474v-441.326zM135.082 334.398c-33.948 0-61.446 27.926-61.446 62.4v243.874c0 34.434 27.498 62.408 61.446 62.408 33.954 0 61.446-27.974 61.446-62.408v-243.874c0-34.474-27.492-62.4-61.446-62.4zM782.79 293.528h-541.578c6.684-77.156 56.734-143.552 128.784-181.996l-51.492-75.608c-6.944-10.196-4.324-24.108 5.892-31.050 10.204-6.942 24.088-4.302 31.066 5.886l56.122 82.464c31.116-10.76 64.892-16.938 100.416-16.938 35.566 0 69.344 6.178 100.458 16.952l56.122-82.448c6.892-10.216 20.82-12.856 31.024-5.914 10.216 6.942 12.836 20.854 5.892 31.050l-51.45 75.608c72.048 38.42 122.064 104.816 128.744 181.994zM427.73 188.69c0-16.546-13.398-29.966-29.938-29.966-16.582 0-29.98 13.42-29.98 29.966 0 16.538 13.442 29.952 29.98 29.952s29.938-13.414 29.938-29.952zM659.984 188.69c0-16.546-13.444-29.966-29.98-29.966-16.582 0-29.94 13.42-29.94 29.966 0 16.538 13.358 29.952 29.94 29.952 16.538 0 29.98-13.414 29.98-29.952zM888.96 334.312c-33.912 0-61.488 27.968-61.488 62.444v243.96c0 34.476 27.576 62.452 61.488 62.452 33.956 0 61.402-27.974 61.402-62.452v-243.96c0.002-34.476-27.446-62.444-61.402-62.444z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "android" - ] - }, - { - "id": 27, - "paths": [ - "M446.736 223.192l-105.724 52.862v-190.302l56.386 10.572 49.338-63.434v59.090l169.53-84.758c8.446-4.226 16.492-6.222 23.76-6.222 20.476 0 34.842 15.846 34.842 42.434v0.566l-228.132 113.872v65.32zM834.388 173.098v546.998c0 38.766-28.372 84.668-63.042 102.006l-385.17 189.684c0 0-64.398 23.794-128.824 2.064-70-23.616-67.736-86.85-67.736-86.85v-682.71c0-23.658 49.27-48.368 49.27-48.368l-1.164 0.324 68.054-34.030v66.022l-27.608 13.78 0.846-0.234c0 0-34.834 15.356-37.664 44.774-1.982 20.532 15.768 31.318 25.088 35.53 66.222 21.048 119.738 1.742 119.738 1.742l385.172-189.69c34.67-17.34 63.040 0.192 63.040 38.958zM333.82 802.988l-0.496 0.020c-2.368 0.084-4.784 0.13-7.228 0.13-19.266 0-37.376-2.808-53.804-8.348-10.862-3.67-20.146-8.542-28.386-14.91l-8.618-6.662v79.258c8.604 6.65 19.176 12.618 32.496 17.112 23.044 7.772 45.98 9.664 66.036 8.956v-75.556zM333.82 446.61c-20.056 0.708-42.992-1.184-66.036-8.956-13.318-4.496-23.89-10.462-32.496-17.112v133.916c8.604 6.648 19.176 12.618 32.496 17.112 23.044 7.772 45.98 9.664 66.036 8.956v-133.916z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "hc-book-02" - ] - }, - { - "id": 26, - "paths": [ - "M1002.632 461.248l-308.112 317.388c-35.572 36.636-106.018 60.556-145.424 53.154l-240.206-35.1v-48.596l221.642 32.976c39.398 11.704 109.844-12.216 145.416-48.864l308.112-317.384c8.484-8.742 14.182-17.442 17.342-25.734 27.478 14.264 29.544 42.992 1.23 72.16zM124.35 720.64l-38.658-5.746c-17.408-4.042-37.226 5.080-38.266-67.454-0.608-42.516 10.504-71.334 18.356-88.982l213.756 37.626 258.428 37.892c50.536 7.402 120.98-16.518 156.552-53.154l308.114-317.388c35.564-36.644 23.338-72.674-27.198-80.084l-449.57-65.92c-50.534-7.402-120.98 16.518-156.552 53.154l-308.104 317.386c-3.060 3.144-5.63 6.28-7.992 9.416-18.39 22.572-52.216 56.622-52.216 150.056 0 114.734 65.838 115.158 80.766 116.056l42.584 6.222v117.454l68.492-28.704 73.464 49.446v-180.938c3.052-38.142-10.646-70.96 28.378-70.96v-0.284l-170.334-31.114v96.020z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "lb-book-01" - ] - }, - { - "id": 25, - "paths": [ - "M986.806 590.74l-298.174 307.148c-34.426 35.456-102.598 58.604-140.734 51.44l-232.458-33.972v-47.020l214.492 31.912c38.126 11.324 106.3-11.822 140.724-47.288l298.174-307.148c8.21-8.46 13.724-16.878 16.784-24.904 26.594 13.802 28.59 41.606 1.192 69.832zM989.752 331.778c24.18-27.088 21.436-53.306-4.136-66.58-3.058 8.024-8.572 16.444-16.784 24.902l-284.822 293.396-31.092 28.848c-36.646 26.53-90.614 41.812-122.984 32.196l-430.49-64.046c-24.058-6.842-36.028 4.918-37.032-65.276-0.588-41.146 10.166-69.036 17.762-86.116l206.862 36.414 250.092 36.67c48.906 7.164 117.078-15.984 151.504-51.44l298.174-307.148c34.416-35.464 22.584-70.332-26.32-77.502l-435.068-63.796c-48.904-7.164-117.078 15.986-151.502 51.44l-298.168 307.15c-2.96 3.042-5.45 6.076-7.734 9.112-17.796 21.844-50.53 54.794-50.53 145.216 0 75.24 29.254 99.66 52.61 107.87-0.696 0.876-1.42 1.746-2.080 2.624-17.796 21.846-50.53 54.796-50.53 145.216 0 111.034 63.714 111.444 78.162 112.312l41.21 6.022v113.666l66.28-27.778 71.096 47.85v-175.102c2.954-36.912-10.302-68.672 27.462-68.672v-0.274l-164.838-30.112v92.924l-37.412-5.562c-22.554-5.094-36.028 4.918-37.032-65.276-0.588-41.144 10.166-69.036 17.762-86.114l206.862 36.412 250.092 36.67c48.906 7.164 117.078-15.984 151.504-51.44l298.174-307.15c25.924-26.712 25.586-53.070 2.946-67.526z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "lb-book-02" - ] - }, - { - "id": 24, - "paths": [ - "M354.77 276.154c0 21.71-23.462 39.306-52.406 39.306h-52.42c-28.944 0-52.404-17.596-52.404-39.306v-235.848c0-21.71 23.46-39.306 52.404-39.306h52.42c28.944 0 52.406 17.596 52.406 39.306v235.848zM826.46 40.306c0-21.71-23.46-39.306-52.404-39.306h-52.42c-28.944 0-52.406 17.596-52.406 39.306v235.848c0 21.71 23.462 39.306 52.406 39.306h52.42c28.944 0 52.404-17.596 52.404-39.306v-235.848zM983.692 120.482v902.518h-943.384v-902.518h117.922v155.672c0 44.082 40.284 78.616 91.712 78.616h52.42c51.43 0 91.712-34.534 91.712-78.616v-155.672h235.846v155.672c0 44.082 40.286 78.616 91.714 78.616h52.42c51.43 0 91.712-34.534 91.712-78.616v-155.672h117.926zM905.078 865.77v-393.078h-786.154v470.664h786.154v-77.586z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "calendar-empty" - ] - }, - { - "id": 23, - "paths": [ - "M25.334 1v1022h973.332v-1022h-973.332zM122.666 925.668v-681.334h778.666v681.334h-778.666zM385.818 501.25l-133.738-109.794c-7.138-6.044-13.154-12.576-13.154-24.656 0.378-13.042 9.020-25.132 19.914-25.132 5.636 0 10.894 3.25 15.418 6.976l154.764 127.484c8.26 6.512 14.286 12.11 13.896 25.124 0 13.516-5.636 18.622-13.896 25.132l-154.412 127.036c-4.496 3.716-9.764 7.898-16.14 7.898-10.522 0-19.542-12.556-19.542-25.586 0.378-11.626 4.886-17.682 12.404-23.736l134.486-110.746z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "terminal" - ] - }, - { - "id": 22, - "paths": [ - "M512 86.166c234.806 0 425.834 191.026 425.834 425.834 0 234.806-191.028 425.834-425.834 425.834-234.808 0-425.834-191.028-425.834-425.834 0-234.808 191.026-425.834 425.834-425.834zM512 1c-282.214 0-511 228.786-511 511 0 282.212 228.786 511 511 511 282.212 0 511-228.788 511-511 0-282.214-228.788-511-511-511v0zM554.584 469.416v-298.082h-85.166v383.252h255.498v-85.168h-170.332z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "clock" - ] - }, - { - "id": 21, - "paths": [ - "M213.338 104.876c0 0 204.246-111.050 378.982 22.784l-97.792 335.99c0 0-109.512-75.34-190.722-67.204-81.21 8.158-188.26 47.016-188.26 47.016l97.792-338.586zM1 841.132c45.080-23.306 112.744-35.118 190.7-41.646 78.022-6.51 187.82 64.936 187.82 64.936l98.802-339.552c-15.634-11.236-88.336-60.188-179.332-66.696-91.040-6.51-200.708 44.486-200.708 44.486l-97.282 338.472zM432.208 894.33c17.856 7.038 76.44 62.76 173.944 67.708 97.526 4.838 205.082-45.498 205.082-45.498s95.788-335.2 97.722-336.498c0.66-0.352-1.208 0.968-1.936 1.298-91.192 35.69-137.744 41.012-204.992 42.618-68.282 1.648-172.538-66.19-172.538-66.19l-97.282 336.562zM644.020 163.15l-97.99 334.034c0 0 79.606 78 191.734 71.536 112.196-6.534 173.064-41.89 187.952-46.884l97.284-337.004c0 0-129.212 53.964-213.702 44.18-84.53-9.786-137.11-45.698-165.278-65.862z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "windows" - ] - }, - { - "id": 20, - "paths": [ - "M918.372 303.574c0.406 9.002 0.61 18.046 0.61 27.13 0 277.084-210.922 596.57-596.548 596.57-118.418 0-228.644-34.714-321.432-94.208 16.424 1.946 33.092 2.94 50.024 2.94 98.242 0 188.636-33.518 260.418-89.768-91.774-1.682-169.192-62.308-195.876-145.608 12.816 2.454 25.936 3.772 39.46 3.772 19.1 0 37.632-2.574 55.234-7.36-95.91-19.266-168.2-104.002-168.2-205.59 0-0.892 0-1.764 0.022-2.636 28.266 15.694 60.588 25.124 94.976 26.218-56.268-37.592-93.274-101.77-93.274-174.524 0-38.424 10.32-74.436 28.386-105.4 103.414 126.852 257.882 210.312 432.144 219.072-3.568-15.35-5.436-31.348-5.436-47.792 0-115.782 93.882-209.664 209.664-209.664 60.346 0 114.808 25.468 153.050 66.204 47.774-9.388 92.626-26.846 133.138-50.876-15.654 48.97-48.868 90.050-92.178 116.004 42.418-5.070 82.852-16.342 120.444-33.010-28.102 42.036-63.666 78.96-104.626 108.526z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "twitter-3" - ] - }, - { - "id": 19, - "paths": [ - "M901.046 530.76c-83.31 338.092-642.726 481.518-900.046 130.538 98.57 94.080 270.224 102.426 379.066-10.152-63.84 9.344-110.306-53.336-31.856-87.18-70.484 7.708-109.748-29.8-125.808-61.7 16.5-17.274 34.764-25.376 70.044-27.684-77.208-18.254-105.71-56.022-114.426-101.908 21.396-5.094 48.176-9.516 62.818-7.538-67.61-35.358-91.080-88.61-87.37-128.612 120.826 44.908 197.822 80.952 262.198 115.486 22.916 12.286 48.562 34.342 77.416 62.372 36.752-97.298 82.192-197.504 159.96-247.248-1.29 11.288-7.328 21.766-15.33 30.352 22.112-20.062 50.722-33.862 79.854-37.852-3.34 21.902-34.808 34.222-53.856 41.346 14.418-4.492 90.984-38.644 99.346-19.152 9.842 22.092-52.838 32.314-63.456 36.132-8.018 2.718-15.95 5.644-23.762 8.826 96.956-9.686 189.59 70.422 216.604 169.786 1.944 7.176 3.854 15.124 5.626 23.468 35.46 13.212 99.776-0.654 120.458-13.404-14.968 35.444-53.856 61.544-111.304 66.312 27.632 11.492 79.8 17.876 115.778 11.732-22.78 24.452-59.428 46.578-121.954 46.080z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "twitter-1" - ] - }, - { - "id": 18, - "paths": [ - "M566.102 414.058l69.816 32.508 104.078-31.060v-72.218c-3.696-122.942-104.152-221.532-227.992-221.532-123.388 0-223.61 97.866-227.992 220.18v329.994c0 29.858-24.218 54.076-54.086 54.076-29.878 0-54.088-24.218-54.088-54.076v-139.846h-174.838c0 0 0 140.052 0 141.692 0 126.182 102.278 228.468 228.458 228.468 125.076 0 226.448-100.534 228.212-225.17l0.246-325.916c0-29.898 24.22-54.098 54.088-54.098 29.858 0 54.096 24.2 54.096 54.098v62.9zM848.172 532.084v146.342c0 29.876-24.218 54.098-54.098 54.098-29.86 0-54.078-24.22-54.078-54.098v-143.56l-104.078 31.060-69.816-32.508v142.398c1.066 125.208 102.954 226.428 228.45 226.428 126.162 0 228.45-102.288 228.45-228.468 0-1.638 0-141.692 0-141.692h-174.83z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "stumble_upon" - ] - }, - { - "id": 17, - "paths": [ - "M986.86 620.488c7.262-33.236 11.126-67.718 11.126-103.124 0-265.456-215.176-480.634-480.632-480.634-28.018 0-55.464 2.444-82.188 7.036-42.968-27.048-93.794-42.766-148.312-42.766-153.924 0-278.704 124.806-278.704 278.73 0 51.45 13.998 99.606 38.326 140.974-6.388 31.214-9.756 63.55-9.756 96.662 0 265.456 215.178 480.632 480.632 480.632 30.094 0 59.484-2.792 88.028-8.084 39.226 21.11 84.086 33.086 131.742 33.086 153.95 0 278.73-124.782 278.73-278.73 0-44.464-10.454-86.48-28.992-123.782zM763.844 747.040c-22.208 31.49-55.066 56.416-97.632 74.106-42.144 17.516-92.668 26.398-150.182 26.398-69.040 0-126.926-12.126-172.086-36.078-32.288-17.466-58.934-41.070-79.146-70.238-20.41-29.466-30.764-58.66-30.764-86.856 0-17.616 6.762-32.884 20.060-45.362 13.174-12.4 30.042-18.662 50.152-18.662 16.518 0 30.764 4.94 42.342 14.72 11.054 9.38 20.56 23.254 28.17 41.17 8.534 19.512 17.816 35.978 27.622 48.954 9.432 12.476 22.98 22.956 40.296 31.164 17.442 8.26 40.92 12.426 69.814 12.426 39.748 0 72.334-8.484 96.836-25.226 23.926-16.316 35.55-35.93 35.55-59.958 0-18.988-6.086-33.882-18.562-45.586-13.098-12.226-30.312-21.758-51.298-28.294-21.83-6.786-51.498-14.146-88.152-21.832-49.876-10.678-92.27-23.354-125.978-37.702-34.458-14.646-62.252-34.98-82.564-60.432-20.634-25.798-31.088-58.21-31.088-96.312 0-36.304 10.978-69.040 32.636-97.26 21.482-28.044 52.872-49.828 93.292-64.772 39.896-14.746 87.33-22.232 141-22.232 42.938 0 80.664 4.964 112.18 14.77 31.66 9.856 58.386 23.18 79.368 39.572 21.136 16.518 36.856 34.184 46.734 52.522 9.98 18.564 15.024 36.978 15.024 54.842 0 17.166-6.614 32.786-19.71 46.36-13.176 13.698-29.77 20.66-49.356 20.66-17.792 0-31.738-4.366-41.394-12.924-9.008-7.934-18.34-20.36-28.696-38.174-12-22.78-26.496-40.72-43.138-53.37-16.144-12.302-43.142-18.54-80.244-18.54-34.458 0-62.452 6.936-83.262 20.56-20.060 13.15-29.792 28.246-29.792 46.084 0 10.954 3.12 20.086 9.582 27.97 6.836 8.334 16.468 15.668 28.644 21.756 12.626 6.362 25.65 11.402 38.674 14.996 13.374 3.718 35.804 9.206 66.518 16.318 38.9 8.334 74.654 17.692 106.268 27.796 31.988 10.254 59.656 22.878 82.192 37.55 23.028 14.996 41.27 34.232 54.192 57.238 12.976 23.054 19.536 51.548 19.536 84.634-0.006 39.578-11.306 75.68-33.638 107.244z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "skype" - ] - }, - { - "id": 16, - "paths": [ - "M1011.41 843.702c0 99.056-80.292 179.298-179.274 179.298-99.054 0-179.324-80.242-179.324-179.298 0-3.244 0.296-6.412 0.472-9.63l-354.928-180.948c-29.766 22.056-66.544 35.282-106.442 35.282-99.056 0-179.324-80.268-179.324-179.298s80.268-179.298 179.324-179.298c44.338 0 84.858 16.194 116.172 42.866l345.548-176.18c-0.5-5.364-0.824-10.728-0.824-16.194 0-99.006 80.27-179.298 179.324-179.298 98.98 0 179.274 80.292 179.274 179.298 0 99.032-80.292 179.3-179.274 179.3-44.164 0-84.484-16.018-115.722-42.442l-345.998 176.43c0.448 5.116 0.774 10.28 0.774 15.52 0 9.306-0.948 18.364-2.296 27.296l342.778 174.758c31.84-28.944 74.008-46.758 120.464-46.758 98.984-0.004 179.276 80.29 179.276 179.296z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "share" - ] - }, - { - "id": 15, - "paths": [ - "M1023 500.504c0-64.894-52.832-117.724-117.726-117.724-28.866 0-56.092 10.444-77.59 29.374-76.56-48.998-178.132-80.476-290.428-84.73l66.94-190.262 167.246 39.964c0.108 52.936 43.188 95.954 96.142 95.954 53 0 96.142-43.124 96.142-96.164 0-53.020-43.142-96.142-96.142-96.142-40.236 0-74.75 24.846-89.044 60.010l-198.16-47.354-82.246 233.68c-117.008 2.21-223.13 33.88-302.534 84.372-21.372-18.488-48.324-28.7-76.876-28.7-64.916 0-117.724 52.83-117.724 117.724 0 40.132 20.656 77.17 54.134 98.774-2.042 11.728-3.2 23.668-3.2 35.776 0 169.922 205.992 308.176 459.19 308.176s459.17-138.254 459.17-308.176c0-11.75-1.072-23.33-3.010-34.764 34.384-21.416 55.716-59.002 55.716-99.788zM867.584 117.746c32.636 0 59.168 26.552 59.168 59.168 0 32.636-26.532 59.166-59.168 59.166s-59.168-26.53-59.168-59.166c0-32.616 26.532-59.168 59.168-59.168zM37.996 500.504c0-44.534 36.216-80.75 80.73-80.75 16.382 0 32.026 4.884 45.27 13.918-46.576 36.112-80.898 79.486-98.542 127.262-17.184-15.16-27.458-37.016-27.458-60.43zM511.126 906.254c-232.816 0-422.196-121.662-422.196-271.202 0-149.542 189.378-271.182 422.196-271.182 232.796 0 422.196 121.64 422.196 271.182-0.002 149.54-189.4 271.202-422.196 271.202zM957.18 562.114c-17.392-47.964-51.568-91.51-98.080-127.79 13.454-9.434 29.414-14.57 46.174-14.57 44.514 0 80.73 36.216 80.73 80.75 0 24.044-10.824 46.428-28.824 61.61zM365.27 652.97c-39.986 0-72.392-32.364-72.392-72.328 0-39.944 32.406-72.348 72.392-72.348 39.944 0 72.306 32.404 72.306 72.348 0 39.966-32.362 72.328-72.306 72.328zM739.586 580.642c0 39.964-32.366 72.328-72.308 72.328-39.984 0-72.372-32.364-72.372-72.328 0-39.944 32.386-72.348 72.372-72.348 39.942-0 72.308 32.406 72.308 72.348zM681.152 750.312c7.244 7.096 7.52 18.656 0.506 25.984-2.166 2.252-54.072 55.060-171.376 55.060-117.934 0-165.1-53.544-167.038-55.82-6.654-7.748-5.748-19.456 2.022-26.066 7.728-6.59 19.308-5.726 25.962 1.894 1.052 1.18 40.428 43.018 139.054 43.018 100.312 0 144.318-43.334 144.76-43.776 7.098-7.222 18.806-7.41 26.11-0.294z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "reddit" - ] - }, - { - "id": 14, - "paths": [ - "M274.354 886.168c0 74.928-60.756 135.684-135.66 135.684s-135.684-60.756-135.684-135.684c0-74.954 60.782-135.686 135.684-135.686s135.66 60.732 135.66 135.686zM3.458 1v195.868c453.038 0 821.642 370.626 821.642 826.132h195.888c0.002-563.546-456.452-1022-1017.53-1022zM3.16 348.22v195.89c127.152 0 246.618 49.704 336.442 139.952 89.948 90.374 139.502 210.638 139.502 338.738h195.842c0-371.972-301.362-674.58-671.786-674.58z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "rss" - ] - }, - { - "id": 13, - "paths": [ - "M736.068 1h-502.516l-222.664 1022h294.908l72.208-338.588h210.602c201.606 0 370.15-124.256 415.288-335.494 51.124-239.18-120.392-347.918-267.826-347.918zM727.036 348.918c-18.064 77.648-93.27 139.776-168.508 139.776h-138.406l63.19-279.552h144.416c72.232 0 120.366 62.13 99.308 139.776z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "paypal" - ] - }, - { - "id": 12, - "paths": [ - "M341.182 478.812l-338.014 379.714c-0.866-3.822-2.168-7.518-2.168-11.704v-669.644c0-5.082 1.42-9.674 2.712-14.288l337.47 315.922zM987.974 131.048c-2.476-0.554-4.848-1.752-7.58-1.752h-936.756c-2.594 0-4.912 1.198-7.538 1.752l475.922 445.468 475.952-445.468zM525.616 626.042c-3.908 3.738-8.744 5.554-13.594 5.554-4.838 0-9.684-1.816-13.55-5.554l-124.42-116.434-340.74 382.682c3.396 1.046 6.728 2.414 10.326 2.414h936.756c3.78 0 7.068-1.368 10.486-2.414l-340.716-382.682-124.548 116.434zM682.988 478.812l337.96 379.672c0.918-3.822 2.050-7.518 2.050-11.662v-669.644c0-4.998-1.24-9.674-2.52-14.266l-337.49 315.9z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "mail" - ] - }, - { - "id": 11, - "paths": [ - "M587.192 467.94v-29.228c-97.724 0-200.938 20.916-200.938 135.966 0 58.498 30.328 97.958 82.138 97.958 37.916 0 72.050-23.352 93.498-61.396 26.556-46.772 25.302-90.656 25.302-143.3zM723.402 797.31c-8.96 8.010-21.868 8.566-31.942 3.134-44.892-37.28-52.924-54.526-77.436-90.018-74.14 75.534-126.67 98.188-222.712 98.188-113.742 0-202.18-70.17-202.18-210.538 0-109.666 59.376-184.224 144.046-220.788 73.294-32.172 175.672-38.008 254.012-46.794v-17.548c0-32.148 2.506-70.182-16.436-97.958-16.434-24.86-48.026-35.084-75.81-35.084-51.52 0-97.34 26.392-108.576 81.104-2.356 12.188-11.224 24.22-23.49 24.85l-130.918-14.184c-11.048-2.482-23.352-11.364-20.148-28.238 30.072-158.842 173.524-206.836 302.074-206.836 65.714 0 151.646 17.548 203.458 67.26 65.714 61.42 59.4 143.3 59.4 232.496v210.446c0 63.3 26.276 91.086 50.974 125.23 8.634 12.256 10.584 26.88-0.418 35.84-27.6 23.142-76.648 65.738-103.622 89.74l-0.276-0.302zM908.522 834.754c-125.442 53.204-261.768 78.922-385.768 78.922-183.866 0-361.848-50.418-505.764-134.192-12.604-7.336-21.936 5.594-11.466 15.064 133.404 120.472 309.69 192.85 505.464 192.85 139.692 0 301.898-43.942 413.806-126.508 18.498-13.694 2.646-34.168-16.272-26.136zM941.924 935.31c-4.086 10.212 4.69 14.344 13.928 6.592 60.028-50.232 75.534-155.432 63.23-170.634-12.186-15.064-117.13-28.042-181.198 16.922-9.842 6.962-8.124 16.48 2.788 15.18 36.072-4.34 116.364-13.972 130.686 4.366 14.298 18.336-15.924 93.822-29.434 127.574z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "amazon" - ] - }, - { - "id": 10, - "paths": [ - "M124.636 106.404l-79.148 81.686 44.632 280.834 571.778 554.076 316.614-326.74-571.78-554.078-282.096-35.778zM330.112 384.704c-29.15 30.084-77.146 30.842-107.228 1.684-30.076-29.14-30.836-77.144-1.686-107.228 29.15-30.068 77.152-30.812 107.22-1.67 30.082 29.142 30.844 77.146 1.694 107.214zM53.118 130.71l-7.628-48.026 79.146-81.684 282.096 35.778 571.78 554.076-35.708 36.858-543.846-527.008-282.096-35.78-63.744 65.786z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "tags" - ] - }, - { - "id": 9, - "paths": [ - "M788.532 721.242l226.314 225.832-32.91 34.866-34.866 32.912-225.83-226.316-235.348 234.464-45.544-322.25-254.884-294.13-135.566 53.512-48.896-48.896 410.236-410.236 48.896 48.894-53.512 135.568 294.132 254.882 322.242 45.552-234.464 235.346z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "pin-3" - ] - }, - { - "id": 8, - "paths": [ - "M87.698 10l-86.698 89.474 48.888 307.616 626.31 606.91 346.802-357.898-626.306-606.912-308.996-39.19zM312.766 314.836c-31.928 32.954-84.502 33.786-117.454 1.848-32.946-31.922-33.776-84.502-1.846-117.454 31.928-32.938 84.508-33.752 117.446-1.83 32.952 31.92 33.784 84.5 1.854 117.436z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "tag" - ] - }, - { - "id": 7, - "paths": [ - "M908.912 1h-793.826c-14.352 0-25.984 11.632-25.984 25.976v970.034c0 14.358 11.632 25.99 25.984 25.99h793.826c14.352 0 25.984-11.632 25.984-25.99v-970.034c-0-14.344-11.632-25.976-25.984-25.976zM470.158 83.708h112.324v23.624h-112.324v-23.624zM526.324 981.606c-31.092-0.468-56.166-24.056-56.166-53.124 0-29.082 25.074-52.664 56.166-53.126 31.090 0.46 56.158 24.042 56.158 53.126 0 29.066-25.068 52.654-56.158 53.124zM887.65 859.554h-751.302v-695.116h751.302v695.116zM551.95 927.368c0 14.15-11.466 25.618-25.626 25.618-14.152 0-25.62-11.466-25.62-25.618s11.466-25.62 25.62-25.62c14.158 0 25.626 11.466 25.626 25.62z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "tablet" - ] - }, - { - "id": 6, - "paths": [ - "M764.606 1h-505.212c-14.344 0-25.984 11.632-25.984 25.976v970.034c0 14.358 11.638 25.99 25.984 25.99h505.212c14.352 0 25.984-11.632 25.984-25.99v-970.034c0-14.344-11.632-25.976-25.984-25.976zM455.838 83.708h112.326v23.624h-112.326v-23.624zM512.004 981.606c-31.090-0.468-56.166-24.056-56.166-53.124 0-29.082 25.076-52.664 56.166-53.126 31.090 0.46 56.16 24.042 56.16 53.126 0 29.066-25.070 52.654-56.16 53.124zM743.344 859.554h-462.688v-695.116h462.688v695.116zM537.628 927.368c0 14.15-11.468 25.618-25.626 25.618-14.152 0-25.62-11.466-25.62-25.618s11.466-25.62 25.62-25.62c14.158 0 25.626 11.466 25.626 25.62z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "mobile" - ] - }, - { - "id": 5, - "paths": [ - "M672.398 49.406c8.434 5.24 17.918 12.876 28.446 22.906 10.106 10.48 20.036 23.354 29.714 38.624 9.282 14.398 17.492 31.438 24.652 51.076 5.886 19.636 8.86 42.542 8.86 68.74-0.796 48.032-11.406 86.432-31.79 115.224-10.008 13.972-20.61 26.848-31.812 38.65-12.398 11.802-25.602 23.778-39.598 36.004-7.984 8.284-15.394 17.69-22.184 28.144-8.008 10.93-11.976 23.58-11.976 37.976 0 13.972 4.094 25.548 12.304 34.73 6.958 8.734 13.722 16.37 20.282 22.906l45.54 37.326c28.316 23.13 53.144 48.656 74.454 76.602 20.114 28.344 30.566 65.47 31.39 111.282 0 65.048-28.722 122.66-86.16 172.862-59.554 51.95-145.488 78.796-257.794 80.542-94.016-0.874-164.228-20.908-210.588-60.132-46.808-36.578-70.212-80.392-70.212-131.342 0-24.852 7.61-52.498 22.856-82.988 14.77-30.542 41.494-57.338 80.218-80.392 43.464-24.852 89.15-41.42 136.982-49.678 47.382-6.96 86.754-10.878 118.042-11.752-9.68-12.724-18.288-26.348-25.872-40.82-8.86-14.046-13.252-30.94-13.252-50.702 0-11.826 1.698-21.732 5.040-29.642 2.97-8.332 5.688-15.992 8.212-23.004-15.248 1.746-29.62 2.596-43.144 2.596-71.434-0.85-125.904-23.33-163.356-67.418-39.222-41.020-58.81-88.826-58.81-143.37 0-65.92 27.77-125.68 83.312-179.374 38.174-31.414 77.822-51.924 118.966-61.554 40.72-8.284 78.87-12.426 114.502-12.426h268.45l-82.886 48.406h-82.788zM724.25 822.094c0-34.084-11.106-63.75-33.336-89.076-23.504-24.004-60.258-53.47-110.286-88.402-8.532-0.874-18.562-1.322-30.118-1.322-6.836-0.848-24.352 0-52.572 2.644-27.77 3.918-56.214 10.23-85.258 18.962-6.836 2.644-16.442 6.588-28.868 11.802-12.4 5.664-24.976 13.748-37.8 24.226-12.402 10.93-22.856 24.454-31.414 40.622-9.83 17.018-14.746 37.528-14.746 61.554 0 47.132 21.358 86.006 64.1 116.546 40.622 30.59 96.162 46.286 166.7 47.158 63.224-0.874 111.556-14.822 144.866-41.918 32.486-26.646 48.732-60.878 48.732-102.796zM537.088 428.614c35.358-1.296 64.798-13.972 88.326-38.076 11.378-17.016 18.692-34.534 21.906-52.448 1.972-17.964 2.946-33.036 2.946-45.286 0-52.92-13.524-106.266-40.622-160.086-12.676-25.798-29.39-46.784-50.102-62.976-21.158-15.294-45.484-23.404-72.982-24.278-36.378 0.874-66.62 15.52-90.748 43.964-20.31 29.742-30.066 62.976-29.194 99.706 0 48.554 14.222 99.082 42.642 151.554 13.748 24.502 31.488 45.286 53.246 62.328 21.76 17.064 46.636 25.598 74.582 25.598z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "google" - ] - }, - { - "id": 4, - "paths": [ - "M1023 893.506v-763.012h-1022v763.012h1022zM876.49 737.104v148.448h-717.43v-140.494h1.23l3.632-1.21 269.328-216.87 81.48 69.038 72.352-63.56 289.408 204.648zM876.49 710.856l-274.228-191.834 274.228-237.638v429.472zM830.906 138.43l-37.11 35.43-17.622 17.138-16.41 17.064-17.028 15.888-15.796 15.89-15.2 14.66-14.008 14.66-14.588 13.45-38.3 38.488-34.648 32.99-9.742 10.376-10.32 8.57-9.148 8.532-16.39 15.908-7.918 6.708-6.688 6.742-6.688 5.44-5.496 6.148-10.32 8.568-4.246 3.018-3.054 3.69-3.632 1.824-2.442 2.458-3.036 2.422-308.872-307.274 628.702 1.212zM417.454 513.528l-258.394 206.474 0.596-425.786 257.798 219.312z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "gmail" - ] - }, - { - "id": 3, - "paths": [ - "M600.528 51.776c20.336 0 42.418 2.17 66.394 6.836 45.61 8.834 73.156 45.96 121.786 71.036-13.122 44.414-51.25 63.85-81.192 91.372-32.434-27.522-62.426-39.374-89.074-39.374-83.312 0-133.864 115.874-124.106 232.27 12.25 9.332 31.336 11.776 52.946 11.776 24.052 0 51.176-3.044 75.254-3.044 8.48 0 16.59 0.376 24.028 1.422-48.282 38.6-60.258 113.552-147.212 113.552-7.81 0-16.218-0.624-25.326-1.922-35.282 137.306-57.288 287.862-81.216 436.522-44.014 0-88.002 0-131.942 0 16.392-149.334 53.246-278.304 71.010-426.366-5.638-9.284-18.164-11.728-33.134-11.728-16.418 0-35.854 2.946-52.322 2.946-5.79 0-11.228-0.376-16.018-1.374 4.492-39.472 7.66-80.292 20.31-111.63 33.81 0 67.642 0 101.476 0 17.488-187.83 61.726-372.294 248.338-372.294zM600.528 1v0c-104.496 0-182.718 48.082-232.52 142.87-36.154 68.89-52.472 154.248-61.504 229.426h-90.074l-12.826 31.788c-13.698 34.058-17.964 73.008-22.056 110.684-0.524 4.716-1.074 9.482-1.596 14.222l-5.24 46.058 45.436 9.382c7.834 1.622 16.442 2.394 26.274 2.394 9.83 0 19.462-0.748 28.818-1.522-7.934 53.22-18.014 104.994-27.82 155.446-13.922 71.586-28.294 145.59-37.028 224.936l-6.188 56.314h231.82l6.912-42.692c2.97-18.638 5.938-37.226 8.882-55.866 17.99-112.978 36.478-229.302 61.654-336.566 74.654-5.39 109.11-53.122 134.688-88.552 10.204-14.072 19.758-27.346 30.14-35.654l92.218-73.732-116.972-16.168c-9.208-1.272-19.36-1.896-31.012-1.896-13.55 0-27.348 0.824-40.672 1.622-12.376 0.748-24.102 1.448-34.582 1.448-1.148 0-2.172 0-3.218 0 1.82-51.424 16.992-99.18 41.020-125.33 15.844-17.216 28.992-17.216 33.308-17.216 15.77 0 35.208 9.456 56.29 27.322l34.16 28.994 32.984-30.316c6.062-5.564 13.028-11.128 20.41-16.992 27.046-21.632 60.708-48.554 75.18-97.384l11.876-40.222-37.3-19.262c-15.77-8.108-29.316-18.19-43.692-28.868-24.826-18.464-52.998-39.374-91.744-46.908-26.6-5.14-52.176-7.76-76.026-7.76v0z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "foursquare_2" - ] - }, - { - "id": 2, - "paths": [ - "M991.096 746.208h-43.548v-553.582c0-23.422-16.334-42.584-36.294-42.584h-798.504c-19.964 0-36.3 19.162-36.3 42.584v553.584h-43.55c-23.958 0-37.356 18.18-29.784 40.394l16.010 46.958c7.578 22.214 33.372 40.396 57.326 40.396h871.096c23.954 0 49.754-18.182 57.322-40.396l16.018-46.958c7.57-22.216-5.832-40.396-29.792-40.396zM599.114 831.376h-174.228v-42.584h174.228v42.584zM903.992 703.626v42.584h-783.984v-511.002c0-23.42 19.598-42.582 43.556-42.582h696.872c23.954 0 43.556 19.162 43.556 42.588v468.412zM163.556 235.208l0.008 468.418h696.872v-468.414l-696.88-0.006zM256.5 277.792c23.516 0 42.584 19.062 42.584 42.584 0 23.52-19.066 42.582-42.584 42.582s-42.584-19.062-42.584-42.582c0-23.522 19.066-42.584 42.584-42.584z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "com-laptop" - ] - }, - { - "id": 1, - "paths": [ - "M1022 65.712l-267.292 297.568-171.056-171.426-59.804 73.85c-32.866-110.042-135.604-190.324-256.38-190.324-147.298 0-267.468 119.446-267.468 266.744 0 0.222 0 0.444 0 0.622 0 0.266 0 0.532 0 0.798 0 139.538 108.030 253.924 244.418 265.28l-2.668 3.812 342.098 345.652 379.556-386.988-62.916-62.14 121.512-106.67v-336.778zM976 396.59l-442.418 384.312-209.518-206.902c-0.044 0-0.044 0-0.088 0l-8.916-5.64c-15.348 3.238-31.27 6.294-47.548 6.294-127.916 0-231.97-103.604-231.97-231.764 0-128.182 104.052-232.142 231.97-232.142 127.916 0 232.014 104.456 232.014 232.638 0 37.834-9.136 73.65-25.192 105.252l19.382 34.696c0.178-0.266 0.31-0.482 0.488-0.748l58.538 124.416 423.258-469.616v259.204z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "foursquare_1" - ] - }, - { - "id": 0, - "paths": [ - "M233.008 1000.438v-659.13h-219.058v659.128l219.058 0.002zM123.502 251.348c76.366 0 123.936-50.656 123.936-113.906-1.444-64.656-47.57-113.882-122.504-113.882-74.946 0.002-123.934 49.228-123.934 113.884 0 63.25 47.544 113.906 121.060 113.906h1.442v-0.002zM354.248 1000.438c0 0 2.874-597.286 0-659.128h219.092v95.588h-1.454c28.808-44.98 80.708-111.066 198.88-111.066 144.17 0 252.232 94.206 252.232 296.666v377.942h-219.056v-352.616c0-88.602-31.696-149.062-110.994-149.062-60.508 0-96.568 40.76-112.404 80.16-5.794 14.024-7.204 33.722-7.204 53.422v368.094l-219.092 0z" - ], - "attrs": [], - "isMulticolor": false, - "grid": 0, - "tags": [ - "linkedin" - ] - } - ], - "invisible": false, - "colorThemes": [] - }, - { - "selection": [ - { - "id": 0, - "order": 0, - "ligatures": "" - }, - { - "id": 1, - "order": 0, - "ligatures": "" - }, - { - "id": 2, - "order": 0, - "ligatures": "" - }, - { - "id": 3, - "order": 0, - "ligatures": "" - }, - { - "id": 4, - "order": 0, - "ligatures": "" - }, - { - "id": 5, - "order": 0, - "ligatures": "" - }, - { - "id": 6, - "order": 1, - "ligatures": "", - "prevSize": 32, - "code": 59654, - "name": "anchor", - "tempChar": "" - }, - { - "id": 7, - "order": 0, - "ligatures": "" - }, - { - "id": 8, - "order": 0, - "ligatures": "" - }, - { - "id": 9, - "order": 0, - "ligatures": "" - }, - { - "id": 10, - "order": 0, - "ligatures": "" - }, - { - "id": 11, - "order": 0, - "ligatures": "" - }, - { - "id": 12, - "order": 0, - "ligatures": "" - }, - { - "id": 13, - "order": 0, - "ligatures": "" - }, - { - "id": 14, - "order": 0, - "ligatures": "" - }, - { - "id": 15, - "order": 0, - "ligatures": "" - }, - { - "id": 16, - "order": 0, - "ligatures": "" - }, - { - "id": 17, - "order": 0, - "ligatures": "" - }, - { - "id": 18, - "order": 0, - "ligatures": "" - }, - { - "id": 19, - "order": 0, - "ligatures": "" - }, - { - "id": 20, - "order": 0, - "ligatures": "" - }, - { - "id": 21, - "order": 0, - "ligatures": "" - }, - { - "id": 22, - "order": 0, - "ligatures": "" - }, - { - "id": 23, - "order": 3, - "ligatures": "", - "prevSize": 32, - "code": 59671, - "name": "axe", - "tempChar": "" - }, - { - "id": 24, - "order": 0, - "ligatures": "" - }, - { - "id": 25, - "order": 0, - "ligatures": "" - }, - { - "id": 26, - "order": 0, - "ligatures": "" - }, - { - "id": 27, - "order": 0, - "ligatures": "" - }, - { - "id": 28, - "order": 4, - "ligatures": "", - "prevSize": 32, - "code": 59676, - "name": "battered-axe", - "tempChar": "" - }, - { - "id": 29, - "order": 0, - "ligatures": "" - }, - { - "id": 30, - "order": 0, - "ligatures": "" - }, - { - "id": 31, - "order": 0, - "ligatures": "" - }, - { - "id": 32, - "order": 0, - "ligatures": "" - }, - { - "id": 33, - "order": 0, - "ligatures": "" - }, - { - "id": 34, - "order": 0, - "ligatures": "" - }, - { - "id": 35, - "order": 0, - "ligatures": "" - }, - { - "id": 36, - "order": 0, - "ligatures": "" - }, - { - "id": 37, - "order": 0, - "ligatures": "" - }, - { - "id": 38, - "order": 0, - "ligatures": "" - }, - { - "id": 39, - "order": 0, - "ligatures": "" - }, - { - "id": 40, - "order": 0, - "ligatures": "" - }, - { - "id": 41, - "order": 0, - "ligatures": "" - }, - { - "id": 42, - "order": 0, - "ligatures": "" - }, - { - "id": 43, - "order": 0, - "ligatures": "" - }, - { - "id": 44, - "order": 0, - "ligatures": "" - }, - { - "id": 45, - "order": 0, - "ligatures": "" - }, - { - "id": 46, - "order": 0, - "ligatures": "" - }, - { - "id": 47, - "order": 0, - "ligatures": "" - }, - { - "id": 48, - "order": 0, - "ligatures": "" - }, - { - "id": 49, - "order": 0, - "ligatures": "" - }, - { - "id": 50, - "order": 0, - "ligatures": "" - }, - { - "id": 51, - "order": 0, - "ligatures": "" - }, - { - "id": 52, - "order": 0, - "ligatures": "" - }, - { - "id": 53, - "order": 5, - "ligatures": "", - "prevSize": 32, - "code": 59701, - "name": "bolt-shield", - "tempChar": "" - }, - { - "id": 54, - "order": 0, - "ligatures": "" - }, - { - "id": 55, - "order": 0, - "ligatures": "" - }, - { - "id": 56, - "order": 0, - "ligatures": "" - }, - { - "id": 57, - "order": 0, - "ligatures": "" - }, - { - "id": 58, - "order": 206, - "ligatures": "", - "prevSize": 32, - "code": 59706, - "name": "book", - "tempChar": "" - }, - { - "id": 59, - "order": 0, - "ligatures": "" - }, - { - "id": 60, - "order": 0, - "ligatures": "" - }, - { - "id": 61, - "order": 0, - "ligatures": "" - }, - { - "id": 62, - "order": 0, - "ligatures": "" - }, - { - "id": 63, - "order": 0, - "ligatures": "" - }, - { - "id": 64, - "order": 0, - "ligatures": "" - }, - { - "id": 65, - "order": 0, - "ligatures": "" - }, - { - "id": 66, - "order": 0, - "ligatures": "" - }, - { - "id": 67, - "order": 0, - "ligatures": "" - }, - { - "id": 68, - "order": 0, - "ligatures": "" - }, - { - "id": 69, - "order": 0, - "ligatures": "" - }, - { - "id": 70, - "order": 6, - "ligatures": "", - "prevSize": 32, - "code": 59718, - "name": "broadsword", - "tempChar": "" - }, - { - "id": 71, - "order": 0, - "ligatures": "" - }, - { - "id": 72, - "order": 0, - "ligatures": "" - }, - { - "id": 73, - "order": 0, - "ligatures": "" - }, - { - "id": 74, - "order": 7, - "ligatures": "", - "prevSize": 32, - "code": 59722, - "name": "broken-shield", - "tempChar": "" - }, - { - "id": 75, - "order": 0, - "ligatures": "" - }, - { - "id": 76, - "order": 0, - "ligatures": "" - }, - { - "id": 77, - "order": 0, - "ligatures": "" - }, - { - "id": 78, - "order": 0, - "ligatures": "" - }, - { - "id": 79, - "order": 9, - "ligatures": "", - "prevSize": 32, - "code": 59727, - "name": "burning-embers", - "tempChar": "" - }, - { - "id": 80, - "order": 0, - "ligatures": "" - }, - { - "id": 81, - "order": 0, - "ligatures": "" - }, - { - "id": 82, - "order": 0, - "ligatures": "" - }, - { - "id": 83, - "order": 0, - "ligatures": "" - }, - { - "id": 84, - "order": 8, - "ligatures": "", - "prevSize": 32, - "code": 59732, - "name": "campfire", - "tempChar": "" - }, - { - "id": 85, - "order": 0, - "ligatures": "" - }, - { - "id": 86, - "order": 0, - "ligatures": "" - }, - { - "id": 87, - "order": 203, - "ligatures": "", - "prevSize": 32, - "code": 59735, - "name": "candle-fire", - "tempChar": "" - }, - { - "id": 88, - "order": 202, - "ligatures": "", - "prevSize": 32, - "code": 59736, - "name": "candle", - "tempChar": "" - }, - { - "id": 89, - "order": 0, - "ligatures": "" - }, - { - "id": 90, - "order": 204, - "ligatures": "", - "prevSize": 32, - "code": 59738, - "name": "capitol", - "tempChar": "" - }, - { - "id": 91, - "order": 0, - "ligatures": "" - }, - { - "id": 92, - "order": 0, - "ligatures": "" - }, - { - "id": 93, - "order": 10, - "ligatures": "", - "prevSize": 32, - "code": 59741, - "name": "castle-emblem", - "tempChar": "" - }, - { - "id": 94, - "order": 0, - "ligatures": "" - }, - { - "id": 95, - "order": 0, - "ligatures": "" - }, - { - "id": 96, - "order": 0, - "ligatures": "" - }, - { - "id": 97, - "order": 0, - "ligatures": "" - }, - { - "id": 98, - "order": 0, - "ligatures": "" - }, - { - "id": 99, - "order": 0, - "ligatures": "" - }, - { - "id": 100, - "order": 0, - "ligatures": "" - }, - { - "id": 101, - "order": 0, - "ligatures": "" - }, - { - "id": 102, - "order": 0, - "ligatures": "" - }, - { - "id": 103, - "order": 0, - "ligatures": "" - }, - { - "id": 104, - "order": 0, - "ligatures": "" - }, - { - "id": 105, - "order": 11, - "ligatures": "", - "prevSize": 32, - "code": 59753, - "name": "clockwork", - "tempChar": "" - }, - { - "id": 106, - "order": 0, - "ligatures": "" - }, - { - "id": 107, - "order": 12, - "ligatures": "", - "prevSize": 32, - "code": 59755, - "name": "clovers-card", - "tempChar": "" - }, - { - "id": 108, - "order": 0, - "ligatures": "" - }, - { - "id": 109, - "order": 0, - "ligatures": "" - }, - { - "id": 110, - "order": 0, - "ligatures": "" - }, - { - "id": 111, - "order": 0, - "ligatures": "" - }, - { - "id": 112, - "order": 201, - "ligatures": "", - "prevSize": 32, - "code": 59760, - "name": "cog", - "tempChar": "" - }, - { - "id": 113, - "order": 0, - "ligatures": "" - }, - { - "id": 114, - "order": 0, - "ligatures": "" - }, - { - "id": 115, - "order": 0, - "ligatures": "" - }, - { - "id": 116, - "order": 0, - "ligatures": "" - }, - { - "id": 117, - "order": 0, - "ligatures": "" - }, - { - "id": 118, - "order": 13, - "ligatures": "", - "prevSize": 32, - "code": 59766, - "name": "cracked-shield", - "tempChar": "" - }, - { - "id": 119, - "order": 0, - "ligatures": "" - }, - { - "id": 120, - "order": 0, - "ligatures": "" - }, - { - "id": 121, - "order": 14, - "ligatures": "", - "prevSize": 32, - "code": 59769, - "name": "crossed-axes", - "tempChar": "" - }, - { - "id": 122, - "order": 0, - "ligatures": "" - }, - { - "id": 123, - "order": 0, - "ligatures": "" - }, - { - "id": 124, - "order": 15, - "ligatures": "", - "prevSize": 32, - "code": 59772, - "name": "crossed-sabres", - "tempChar": "" - }, - { - "id": 125, - "order": 16, - "ligatures": "", - "prevSize": 32, - "code": 59773, - "name": "crossed-swords", - "tempChar": "" - }, - { - "id": 126, - "order": 0, - "ligatures": "" - }, - { - "id": 127, - "order": 0, - "ligatures": "" - }, - { - "id": 128, - "order": 0, - "ligatures": "" - }, - { - "id": 129, - "order": 0, - "ligatures": "" - }, - { - "id": 130, - "order": 17, - "ligatures": "", - "prevSize": 32, - "code": 59778, - "name": "crystal-ball", - "tempChar": "" - }, - { - "id": 131, - "order": 0, - "ligatures": "" - }, - { - "id": 132, - "order": 0, - "ligatures": "" - }, - { - "id": 133, - "order": 0, - "ligatures": "" - }, - { - "id": 134, - "order": 0, - "ligatures": "" - }, - { - "id": 135, - "order": 0, - "ligatures": "" - }, - { - "id": 136, - "order": 0, - "ligatures": "" - }, - { - "id": 137, - "order": 95, - "ligatures": "", - "prevSize": 32, - "code": 59785, - "name": "daggers", - "tempChar": "" - }, - { - "id": 138, - "order": 0, - "ligatures": "" - }, - { - "id": 139, - "order": 0, - "ligatures": "" - }, - { - "id": 140, - "order": 0, - "ligatures": "" - }, - { - "id": 141, - "order": 0, - "ligatures": "" - }, - { - "id": 142, - "order": 0, - "ligatures": "" - }, - { - "id": 143, - "order": 0, - "ligatures": "" - }, - { - "id": 144, - "order": 0, - "ligatures": "" - }, - { - "id": 145, - "order": 0, - "ligatures": "" - }, - { - "id": 146, - "order": 18, - "ligatures": "", - "prevSize": 32, - "code": 59794, - "name": "diamond", - "tempChar": "" - }, - { - "id": 147, - "order": 19, - "ligatures": "", - "prevSize": 32, - "code": 59795, - "name": "diamonds-card", - "tempChar": "" - }, - { - "id": 148, - "order": 208, - "ligatures": "", - "prevSize": 32, - "code": 59796, - "name": "diamonds", - "tempChar": "" - }, - { - "id": 149, - "order": 20, - "ligatures": "", - "prevSize": 32, - "code": 59797, - "name": "dice-five", - "tempChar": "" - }, - { - "id": 150, - "order": 21, - "ligatures": "", - "prevSize": 32, - "code": 59798, - "name": "dice-four", - "tempChar": "" - }, - { - "id": 151, - "order": 22, - "ligatures": "", - "prevSize": 32, - "code": 59799, - "name": "dice-one", - "tempChar": "" - }, - { - "id": 152, - "order": 23, - "ligatures": "", - "prevSize": 32, - "code": 59800, - "name": "dice-six", - "tempChar": "" - }, - { - "id": 153, - "order": 24, - "ligatures": "", - "prevSize": 32, - "code": 59801, - "name": "dice-three", - "tempChar": "" - }, - { - "id": 154, - "order": 25, - "ligatures": "", - "prevSize": 32, - "code": 59802, - "name": "dice-two", - "tempChar": "" - }, - { - "id": 155, - "order": 0, - "ligatures": "" - }, - { - "id": 156, - "order": 0, - "ligatures": "" - }, - { - "id": 157, - "order": 0, - "ligatures": "" - }, - { - "id": 158, - "order": 0, - "ligatures": "" - }, - { - "id": 159, - "order": 0, - "ligatures": "" - }, - { - "id": 160, - "order": 0, - "ligatures": "" - }, - { - "id": 161, - "order": 0, - "ligatures": "" - }, - { - "id": 162, - "order": 0, - "ligatures": "" - }, - { - "id": 163, - "order": 0, - "ligatures": "" - }, - { - "id": 164, - "order": 0, - "ligatures": "" - }, - { - "id": 165, - "order": 0, - "ligatures": "" - }, - { - "id": 166, - "order": 0, - "ligatures": "" - }, - { - "id": 167, - "order": 0, - "ligatures": "" - }, - { - "id": 168, - "order": 0, - "ligatures": "" - }, - { - "id": 169, - "order": 0, - "ligatures": "" - }, - { - "id": 170, - "order": 0, - "ligatures": "" - }, - { - "id": 171, - "order": 0, - "ligatures": "" - }, - { - "id": 172, - "order": 0, - "ligatures": "" - }, - { - "id": 173, - "order": 0, - "ligatures": "" - }, - { - "id": 174, - "order": 0, - "ligatures": "" - }, - { - "id": 175, - "order": 26, - "ligatures": "", - "prevSize": 32, - "code": 59823, - "name": "emerald", - "tempChar": "" - }, - { - "id": 176, - "order": 0, - "ligatures": "" - }, - { - "id": 177, - "order": 0, - "ligatures": "" - }, - { - "id": 178, - "order": 0, - "ligatures": "" - }, - { - "id": 179, - "order": 0, - "ligatures": "" - }, - { - "id": 180, - "order": 27, - "ligatures": "", - "prevSize": 32, - "code": 59828, - "name": "eye-shield", - "tempChar": "" - }, - { - "id": 181, - "order": 0, - "ligatures": "" - }, - { - "id": 182, - "order": 0, - "ligatures": "" - }, - { - "id": 183, - "order": 0, - "ligatures": "" - }, - { - "id": 184, - "order": 0, - "ligatures": "" - }, - { - "id": 185, - "order": 0, - "ligatures": "" - }, - { - "id": 186, - "order": 0, - "ligatures": "" - }, - { - "id": 187, - "order": 28, - "ligatures": "", - "prevSize": 32, - "code": 59835, - "name": "feather-wing", - "tempChar": "" - }, - { - "id": 188, - "order": 29, - "ligatures": "", - "prevSize": 32, - "code": 59836, - "name": "feathered-wing", - "tempChar": "" - }, - { - "id": 189, - "order": 0, - "ligatures": "" - }, - { - "id": 190, - "order": 0, - "ligatures": "" - }, - { - "id": 191, - "order": 0, - "ligatures": "" - }, - { - "id": 192, - "order": 0, - "ligatures": "" - }, - { - "id": 193, - "order": 30, - "ligatures": "", - "prevSize": 32, - "code": 59841, - "name": "fire-shield", - "tempChar": "" - }, - { - "id": 194, - "order": 0, - "ligatures": "" - }, - { - "id": 195, - "order": 31, - "ligatures": "", - "prevSize": 32, - "code": 59843, - "name": "fire", - "tempChar": "" - }, - { - "id": 196, - "order": 0, - "ligatures": "" - }, - { - "id": 197, - "order": 0, - "ligatures": "" - }, - { - "id": 198, - "order": 32, - "ligatures": "", - "prevSize": 32, - "code": 59846, - "name": "fizzing-flask", - "tempChar": "" - }, - { - "id": 199, - "order": 33, - "ligatures": "", - "prevSize": 32, - "code": 59847, - "name": "flame-symbol", - "tempChar": "" - }, - { - "id": 200, - "order": 0, - "ligatures": "" - }, - { - "id": 201, - "order": 0, - "ligatures": "" - }, - { - "id": 202, - "order": 0, - "ligatures": "" - }, - { - "id": 203, - "order": 0, - "ligatures": "" - }, - { - "id": 204, - "order": 34, - "ligatures": "", - "prevSize": 32, - "code": 59852, - "name": "flat-hammer", - "tempChar": "" - }, - { - "id": 205, - "order": 0, - "ligatures": "" - }, - { - "id": 206, - "order": 0, - "ligatures": "" - }, - { - "id": 207, - "order": 0, - "ligatures": "" - }, - { - "id": 208, - "order": 0, - "ligatures": "" - }, - { - "id": 209, - "order": 0, - "ligatures": "" - }, - { - "id": 210, - "order": 0, - "ligatures": "" - }, - { - "id": 211, - "order": 35, - "ligatures": "", - "prevSize": 32, - "code": 59859, - "name": "forging", - "tempChar": "" - }, - { - "id": 212, - "order": 0, - "ligatures": "" - }, - { - "id": 213, - "order": 0, - "ligatures": "" - }, - { - "id": 214, - "order": 0, - "ligatures": "" - }, - { - "id": 215, - "order": 0, - "ligatures": "" - }, - { - "id": 216, - "order": 0, - "ligatures": "" - }, - { - "id": 217, - "order": 0, - "ligatures": "" - }, - { - "id": 218, - "order": 0, - "ligatures": "" - }, - { - "id": 219, - "order": 37, - "ligatures": "", - "prevSize": 32, - "code": 59867, - "name": "gear-hammer", - "tempChar": "" - }, - { - "id": 220, - "order": 0, - "ligatures": "" - }, - { - "id": 221, - "order": 0, - "ligatures": "" - }, - { - "id": 222, - "order": 0, - "ligatures": "" - }, - { - "id": 223, - "order": 0, - "ligatures": "" - }, - { - "id": 224, - "order": 0, - "ligatures": "" - }, - { - "id": 225, - "order": 0, - "ligatures": "" - }, - { - "id": 226, - "order": 0, - "ligatures": "" - }, - { - "id": 227, - "order": 0, - "ligatures": "" - }, - { - "id": 228, - "order": 0, - "ligatures": "" - }, - { - "id": 229, - "order": 0, - "ligatures": "" - }, - { - "id": 230, - "order": 0, - "ligatures": "" - }, - { - "id": 231, - "order": 0, - "ligatures": "" - }, - { - "id": 232, - "order": 0, - "ligatures": "" - }, - { - "id": 233, - "order": 0, - "ligatures": "" - }, - { - "id": 234, - "order": 0, - "ligatures": "" - }, - { - "id": 235, - "order": 0, - "ligatures": "" - }, - { - "id": 236, - "order": 0, - "ligatures": "" - }, - { - "id": 237, - "order": 0, - "ligatures": "" - }, - { - "id": 238, - "order": 39, - "ligatures": "", - "prevSize": 32, - "code": 59886, - "name": "hammer", - "tempChar": "" - }, - { - "id": 239, - "order": 40, - "ligatures": "", - "prevSize": 32, - "code": 59887, - "name": "hand-emblem", - "tempChar": "" - }, - { - "id": 240, - "order": 0, - "ligatures": "" - }, - { - "id": 241, - "order": 0, - "ligatures": "" - }, - { - "id": 242, - "order": 0, - "ligatures": "" - }, - { - "id": 243, - "order": 0, - "ligatures": "" - }, - { - "id": 244, - "order": 0, - "ligatures": "" - }, - { - "id": 245, - "order": 0, - "ligatures": "" - }, - { - "id": 246, - "order": 0, - "ligatures": "" - }, - { - "id": 247, - "order": 0, - "ligatures": "" - }, - { - "id": 248, - "order": 0, - "ligatures": "" - }, - { - "id": 249, - "order": 41, - "ligatures": "", - "prevSize": 32, - "code": 59897, - "name": "hearts-card", - "tempChar": "" - }, - { - "id": 250, - "order": 0, - "ligatures": "" - }, - { - "id": 251, - "order": 0, - "ligatures": "" - }, - { - "id": 252, - "order": 0, - "ligatures": "" - }, - { - "id": 253, - "order": 42, - "ligatures": "", - "prevSize": 32, - "code": 59901, - "name": "heavy-shield", - "tempChar": "" - }, - { - "id": 254, - "order": 43, - "ligatures": "", - "prevSize": 32, - "code": 59902, - "name": "helmet", - "tempChar": "" - }, - { - "id": 255, - "order": 44, - "ligatures": "", - "prevSize": 32, - "code": 59903, - "name": "help", - "tempChar": "" - }, - { - "id": 256, - "order": 0, - "ligatures": "" - }, - { - "id": 257, - "order": 0, - "ligatures": "" - }, - { - "id": 258, - "order": 0, - "ligatures": "" - }, - { - "id": 259, - "order": 0, - "ligatures": "" - }, - { - "id": 260, - "order": 0, - "ligatures": "" - }, - { - "id": 261, - "order": 0, - "ligatures": "" - }, - { - "id": 262, - "order": 0, - "ligatures": "" - }, - { - "id": 263, - "order": 0, - "ligatures": "" - }, - { - "id": 264, - "order": 0, - "ligatures": "" - }, - { - "id": 265, - "order": 0, - "ligatures": "" - }, - { - "id": 266, - "order": 0, - "ligatures": "" - }, - { - "id": 267, - "order": 45, - "ligatures": "", - "prevSize": 32, - "code": 59915, - "name": "hydra", - "tempChar": "" - }, - { - "id": 268, - "order": 46, - "ligatures": "", - "prevSize": 32, - "code": 59916, - "name": "ice-cube", - "tempChar": "" - }, - { - "id": 269, - "order": 0, - "ligatures": "" - }, - { - "id": 270, - "order": 0, - "ligatures": "" - }, - { - "id": 271, - "order": 0, - "ligatures": "" - }, - { - "id": 272, - "order": 0, - "ligatures": "" - }, - { - "id": 273, - "order": 0, - "ligatures": "" - }, - { - "id": 274, - "order": 207, - "ligatures": "", - "prevSize": 32, - "code": 59922, - "name": "jigsaw-piece", - "tempChar": "" - }, - { - "id": 275, - "order": 0, - "ligatures": "" - }, - { - "id": 276, - "order": 47, - "ligatures": "", - "prevSize": 32, - "code": 59924, - "name": "kettlebell", - "tempChar": "" - }, - { - "id": 277, - "order": 0, - "ligatures": "" - }, - { - "id": 278, - "order": 48, - "ligatures": "", - "prevSize": 32, - "code": 59926, - "name": "key", - "tempChar": "" - }, - { - "id": 279, - "order": 0, - "ligatures": "" - }, - { - "id": 280, - "order": 0, - "ligatures": "" - }, - { - "id": 281, - "order": 49, - "ligatures": "", - "prevSize": 32, - "code": 59929, - "name": "knife", - "tempChar": "" - }, - { - "id": 282, - "order": 0, - "ligatures": "" - }, - { - "id": 283, - "order": 0, - "ligatures": "" - }, - { - "id": 284, - "order": 0, - "ligatures": "" - }, - { - "id": 285, - "order": 50, - "ligatures": "", - "prevSize": 32, - "code": 59933, - "name": "large-hammer", - "tempChar": "" - }, - { - "id": 286, - "order": 0, - "ligatures": "" - }, - { - "id": 287, - "order": 0, - "ligatures": "" - }, - { - "id": 288, - "order": 0, - "ligatures": "" - }, - { - "id": 289, - "order": 51, - "ligatures": "", - "prevSize": 32, - "code": 59937, - "name": "leaf", - "tempChar": "" - }, - { - "id": 290, - "order": 0, - "ligatures": "" - }, - { - "id": 291, - "order": 0, - "ligatures": "" - }, - { - "id": 292, - "order": 0, - "ligatures": "" - }, - { - "id": 293, - "order": 0, - "ligatures": "" - }, - { - "id": 294, - "order": 0, - "ligatures": "" - }, - { - "id": 295, - "order": 0, - "ligatures": "" - }, - { - "id": 296, - "order": 0, - "ligatures": "" - }, - { - "id": 297, - "order": 0, - "ligatures": "" - }, - { - "id": 298, - "order": 0, - "ligatures": "" - }, - { - "id": 299, - "order": 0, - "ligatures": "" - }, - { - "id": 300, - "order": 0, - "ligatures": "" - }, - { - "id": 301, - "order": 52, - "ligatures": "", - "prevSize": 32, - "code": 59949, - "name": "lightning-bolt", - "tempChar": "" - }, - { - "id": 302, - "order": 0, - "ligatures": "" - }, - { - "id": 303, - "order": 0, - "ligatures": "" - }, - { - "id": 304, - "order": 53, - "ligatures": "", - "prevSize": 32, - "code": 59952, - "name": "lightning-trio", - "tempChar": "" - }, - { - "id": 305, - "order": 0, - "ligatures": "" - }, - { - "id": 306, - "order": 0, - "ligatures": "" - }, - { - "id": 307, - "order": 0, - "ligatures": "" - }, - { - "id": 308, - "order": 54, - "ligatures": "", - "prevSize": 32, - "code": 59956, - "name": "load", - "tempChar": "" - }, - { - "id": 309, - "order": 0, - "ligatures": "" - }, - { - "id": 310, - "order": 0, - "ligatures": "" - }, - { - "id": 311, - "order": 0, - "ligatures": "" - }, - { - "id": 312, - "order": 0, - "ligatures": "" - }, - { - "id": 313, - "order": 0, - "ligatures": "" - }, - { - "id": 314, - "order": 205, - "ligatures": "", - "prevSize": 32, - "code": 59962, - "name": "match", - "tempChar": "" - }, - { - "id": 315, - "order": 0, - "ligatures": "" - }, - { - "id": 316, - "order": 0, - "ligatures": "" - }, - { - "id": 317, - "order": 0, - "ligatures": "" - }, - { - "id": 318, - "order": 0, - "ligatures": "" - }, - { - "id": 319, - "order": 0, - "ligatures": "" - }, - { - "id": 320, - "order": 0, - "ligatures": "" - }, - { - "id": 321, - "order": 0, - "ligatures": "" - }, - { - "id": 322, - "order": 0, - "ligatures": "" - }, - { - "id": 323, - "order": 0, - "ligatures": "" - }, - { - "id": 324, - "order": 0, - "ligatures": "" - }, - { - "id": 325, - "order": 0, - "ligatures": "" - }, - { - "id": 326, - "order": 0, - "ligatures": "" - }, - { - "id": 327, - "order": 0, - "ligatures": "" - }, - { - "id": 328, - "order": 0, - "ligatures": "" - }, - { - "id": 329, - "order": 55, - "ligatures": "", - "prevSize": 32, - "code": 59977, - "name": "musket", - "tempChar": "" - }, - { - "id": 330, - "order": 0, - "ligatures": "" - }, - { - "id": 331, - "order": 0, - "ligatures": "" - }, - { - "id": 332, - "order": 0, - "ligatures": "" - }, - { - "id": 333, - "order": 56, - "ligatures": "", - "prevSize": 32, - "code": 59981, - "name": "nuclear", - "tempChar": "" - }, - { - "id": 334, - "order": 0, - "ligatures": "" - }, - { - "id": 335, - "order": 0, - "ligatures": "" - }, - { - "id": 336, - "order": 57, - "ligatures": "", - "prevSize": 32, - "code": 59984, - "name": "octopus", - "tempChar": "" - }, - { - "id": 337, - "order": 0, - "ligatures": "" - }, - { - "id": 338, - "order": 0, - "ligatures": "" - }, - { - "id": 339, - "order": 0, - "ligatures": "" - }, - { - "id": 340, - "order": 77, - "ligatures": "", - "prevSize": 32, - "code": 59988, - "name": "overhead", - "tempChar": "" - }, - { - "id": 341, - "order": 0, - "ligatures": "" - }, - { - "id": 342, - "order": 0, - "ligatures": "" - }, - { - "id": 343, - "order": 0, - "ligatures": "" - }, - { - "id": 344, - "order": 0, - "ligatures": "" - }, - { - "id": 345, - "order": 58, - "ligatures": "", - "prevSize": 32, - "code": 59993, - "name": "perspective-dice-five", - "tempChar": "" - }, - { - "id": 346, - "order": 59, - "ligatures": "", - "prevSize": 32, - "code": 59994, - "name": "perspective-dice-four", - "tempChar": "" - }, - { - "id": 347, - "order": 60, - "ligatures": "", - "prevSize": 32, - "code": 59995, - "name": "perspective-dice-one", - "tempChar": "" - }, - { - "id": 348, - "order": 61, - "ligatures": "", - "prevSize": 32, - "code": 59996, - "name": "perspective-dice-random", - "tempChar": "" - }, - { - "id": 349, - "order": 62, - "ligatures": "", - "prevSize": 32, - "code": 59997, - "name": "perspective-dice-six-two", - "tempChar": "" - }, - { - "id": 350, - "order": 63, - "ligatures": "", - "prevSize": 32, - "code": 59998, - "name": "perspective-dice-six", - "tempChar": "" - }, - { - "id": 351, - "order": 64, - "ligatures": "", - "prevSize": 32, - "code": 59999, - "name": "perspective-dice-three", - "tempChar": "" - }, - { - "id": 352, - "order": 0, - "ligatures": "" - }, - { - "id": 353, - "order": 0, - "ligatures": "" - }, - { - "id": 354, - "order": 0, - "ligatures": "" - }, - { - "id": 355, - "order": 0, - "ligatures": "" - }, - { - "id": 356, - "order": 0, - "ligatures": "" - }, - { - "id": 357, - "order": 0, - "ligatures": "" - }, - { - "id": 358, - "order": 0, - "ligatures": "" - }, - { - "id": 359, - "order": 0, - "ligatures": "" - }, - { - "id": 360, - "order": 0, - "ligatures": "" - }, - { - "id": 361, - "order": 0, - "ligatures": "" - }, - { - "id": 362, - "order": 0, - "ligatures": "" - }, - { - "id": 363, - "order": 0, - "ligatures": "" - }, - { - "id": 364, - "order": 0, - "ligatures": "" - }, - { - "id": 365, - "order": 0, - "ligatures": "" - }, - { - "id": 366, - "order": 0, - "ligatures": "" - }, - { - "id": 367, - "order": 0, - "ligatures": "" - }, - { - "id": 368, - "order": 0, - "ligatures": "" - }, - { - "id": 369, - "order": 0, - "ligatures": "" - }, - { - "id": 370, - "order": 65, - "ligatures": "", - "prevSize": 32, - "code": 60018, - "name": "potion", - "tempChar": "" - }, - { - "id": 371, - "order": 0, - "ligatures": "" - }, - { - "id": 372, - "order": 0, - "ligatures": "" - }, - { - "id": 373, - "order": 66, - "ligatures": "", - "prevSize": 32, - "code": 60021, - "name": "quill-ink", - "tempChar": "" - }, - { - "id": 374, - "order": 0, - "ligatures": "" - }, - { - "id": 375, - "order": 0, - "ligatures": "" - }, - { - "id": 376, - "order": 0, - "ligatures": "" - }, - { - "id": 377, - "order": 0, - "ligatures": "" - }, - { - "id": 378, - "order": 67, - "ligatures": "", - "prevSize": 32, - "code": 60026, - "name": "raven", - "tempChar": "" - }, - { - "id": 379, - "order": 0, - "ligatures": "" - }, - { - "id": 380, - "order": 0, - "ligatures": "" - }, - { - "id": 381, - "order": 0, - "ligatures": "" - }, - { - "id": 382, - "order": 68, - "ligatures": "", - "prevSize": 32, - "code": 60030, - "name": "relic-blade", - "tempChar": "" - }, - { - "id": 383, - "order": 0, - "ligatures": "" - }, - { - "id": 384, - "order": 0, - "ligatures": "" - }, - { - "id": 385, - "order": 0, - "ligatures": "" - }, - { - "id": 386, - "order": 0, - "ligatures": "" - }, - { - "id": 387, - "order": 0, - "ligatures": "" - }, - { - "id": 388, - "order": 0, - "ligatures": "" - }, - { - "id": 389, - "order": 0, - "ligatures": "" - }, - { - "id": 390, - "order": 0, - "ligatures": "" - }, - { - "id": 391, - "order": 69, - "ligatures": "", - "prevSize": 32, - "code": 60039, - "name": "round-shield", - "tempChar": "" - }, - { - "id": 392, - "order": 0, - "ligatures": "" - }, - { - "id": 393, - "order": 70, - "ligatures": "", - "prevSize": 32, - "code": 60041, - "name": "rune-stone", - "tempChar": "" - }, - { - "id": 394, - "order": 0, - "ligatures": "" - }, - { - "id": 395, - "order": 71, - "ligatures": "", - "prevSize": 32, - "code": 60043, - "name": "sapphire", - "tempChar": "" - }, - { - "id": 396, - "order": 0, - "ligatures": "" - }, - { - "id": 397, - "order": 72, - "ligatures": "", - "prevSize": 32, - "code": 60045, - "name": "save", - "tempChar": "" - }, - { - "id": 398, - "order": 0, - "ligatures": "" - }, - { - "id": 399, - "order": 73, - "ligatures": "", - "prevSize": 32, - "code": 60047, - "name": "scroll-unfurled", - "tempChar": "" - }, - { - "id": 400, - "order": 0, - "ligatures": "" - }, - { - "id": 401, - "order": 0, - "ligatures": "" - }, - { - "id": 402, - "order": 74, - "ligatures": "", - "prevSize": 32, - "code": 60050, - "name": "seagull", - "tempChar": "" - }, - { - "id": 403, - "order": 0, - "ligatures": "" - }, - { - "id": 404, - "order": 0, - "ligatures": "" - }, - { - "id": 405, - "order": 0, - "ligatures": "" - }, - { - "id": 406, - "order": 75, - "ligatures": "", - "prevSize": 32, - "code": 60054, - "name": "shield", - "tempChar": "" - }, - { - "id": 407, - "order": 0, - "ligatures": "" - }, - { - "id": 408, - "order": 0, - "ligatures": "" - }, - { - "id": 409, - "order": 0, - "ligatures": "" - }, - { - "id": 410, - "order": 0, - "ligatures": "" - }, - { - "id": 411, - "order": 0, - "ligatures": "" - }, - { - "id": 412, - "order": 0, - "ligatures": "" - }, - { - "id": 413, - "order": 76, - "ligatures": "", - "prevSize": 32, - "code": 60061, - "name": "sickle", - "tempChar": "" - }, - { - "id": 414, - "order": 78, - "ligatures": "", - "prevSize": 32, - "code": 60062, - "name": "sideswipe", - "tempChar": "" - }, - { - "id": 415, - "order": 0, - "ligatures": "" - }, - { - "id": 416, - "order": 0, - "ligatures": "" - }, - { - "id": 417, - "order": 0, - "ligatures": "" - }, - { - "id": 418, - "order": 0, - "ligatures": "" - }, - { - "id": 419, - "order": 79, - "ligatures": "", - "prevSize": 32, - "code": 60067, - "name": "small-fire", - "tempChar": "" - }, - { - "id": 420, - "order": 0, - "ligatures": "" - }, - { - "id": 421, - "order": 0, - "ligatures": "" - }, - { - "id": 422, - "order": 0, - "ligatures": "" - }, - { - "id": 423, - "order": 0, - "ligatures": "" - }, - { - "id": 424, - "order": 0, - "ligatures": "" - }, - { - "id": 425, - "order": 80, - "ligatures": "", - "prevSize": 32, - "code": 60073, - "name": "spades-card", - "tempChar": "" - }, - { - "id": 426, - "order": 0, - "ligatures": "" - }, - { - "id": 427, - "order": 0, - "ligatures": "" - }, - { - "id": 428, - "order": 0, - "ligatures": "" - }, - { - "id": 429, - "order": 82, - "ligatures": "", - "prevSize": 32, - "code": 60077, - "name": "speech-bubble", - "tempChar": "" - }, - { - "id": 430, - "order": 81, - "ligatures": "", - "prevSize": 32, - "code": 60078, - "name": "speech-bubbles", - "tempChar": "" - }, - { - "id": 431, - "order": 0, - "ligatures": "" - }, - { - "id": 432, - "order": 0, - "ligatures": "" - }, - { - "id": 433, - "order": 0, - "ligatures": "" - }, - { - "id": 434, - "order": 0, - "ligatures": "" - }, - { - "id": 435, - "order": 0, - "ligatures": "" - }, - { - "id": 436, - "order": 0, - "ligatures": "" - }, - { - "id": 437, - "order": 0, - "ligatures": "" - }, - { - "id": 438, - "order": 0, - "ligatures": "" - }, - { - "id": 439, - "order": 0, - "ligatures": "" - }, - { - "id": 440, - "order": 0, - "ligatures": "" - }, - { - "id": 441, - "order": 0, - "ligatures": "" - }, - { - "id": 442, - "order": 0, - "ligatures": "" - }, - { - "id": 443, - "order": 0, - "ligatures": "" - }, - { - "id": 444, - "order": 0, - "ligatures": "" - }, - { - "id": 445, - "order": 0, - "ligatures": "" - }, - { - "id": 446, - "order": 0, - "ligatures": "" - }, - { - "id": 447, - "order": 0, - "ligatures": "" - }, - { - "id": 448, - "order": 0, - "ligatures": "" - }, - { - "id": 449, - "order": 0, - "ligatures": "" - }, - { - "id": 450, - "order": 0, - "ligatures": "" - }, - { - "id": 451, - "order": 83, - "ligatures": "", - "prevSize": 32, - "code": 60099, - "name": "target-arrows", - "tempChar": "" - }, - { - "id": 452, - "order": 0, - "ligatures": "" - }, - { - "id": 453, - "order": 0, - "ligatures": "" - }, - { - "id": 454, - "order": 0, - "ligatures": "" - }, - { - "id": 455, - "order": 84, - "ligatures": "", - "prevSize": 32, - "code": 60103, - "name": "telescope", - "tempChar": "" - }, - { - "id": 456, - "order": 0, - "ligatures": "" - }, - { - "id": 457, - "order": 0, - "ligatures": "" - }, - { - "id": 458, - "order": 0, - "ligatures": "" - }, - { - "id": 459, - "order": 0, - "ligatures": "" - }, - { - "id": 460, - "order": 85, - "ligatures": "", - "prevSize": 32, - "code": 60108, - "name": "three-keys", - "tempChar": "" - }, - { - "id": 461, - "order": 0, - "ligatures": "" - }, - { - "id": 462, - "order": 0, - "ligatures": "" - }, - { - "id": 463, - "order": 0, - "ligatures": "" - }, - { - "id": 464, - "order": 0, - "ligatures": "" - }, - { - "id": 465, - "order": 0, - "ligatures": "" - }, - { - "id": 466, - "order": 86, - "ligatures": "", - "prevSize": 32, - "code": 60114, - "name": "tower", - "tempChar": "" - }, - { - "id": 467, - "order": 0, - "ligatures": "" - }, - { - "id": 468, - "order": 90, - "ligatures": "", - "prevSize": 32, - "code": 60116, - "name": "trefoil-lily", - "tempChar": "" - }, - { - "id": 469, - "order": 88, - "ligatures": "", - "prevSize": 32, - "code": 60117, - "name": "trident", - "tempChar": "" - }, - { - "id": 470, - "order": 0, - "ligatures": "" - }, - { - "id": 471, - "order": 89, - "ligatures": "", - "prevSize": 32, - "code": 60119, - "name": "trophy", - "tempChar": "" - }, - { - "id": 472, - "order": 0, - "ligatures": "" - }, - { - "id": 473, - "order": 0, - "ligatures": "" - }, - { - "id": 474, - "order": 0, - "ligatures": "" - }, - { - "id": 475, - "order": 0, - "ligatures": "" - }, - { - "id": 476, - "order": 87, - "ligatures": "", - "prevSize": 32, - "code": 60124, - "name": "underhand", - "tempChar": "" - }, - { - "id": 477, - "order": 0, - "ligatures": "" - }, - { - "id": 478, - "order": 91, - "ligatures": "", - "prevSize": 32, - "code": 60126, - "name": "vase", - "tempChar": "" - }, - { - "id": 479, - "order": 0, - "ligatures": "" - }, - { - "id": 480, - "order": 0, - "ligatures": "" - }, - { - "id": 481, - "order": 92, - "ligatures": "", - "prevSize": 32, - "code": 60129, - "name": "vial", - "tempChar": "" - }, - { - "id": 482, - "order": 0, - "ligatures": "" - }, - { - "id": 483, - "order": 0, - "ligatures": "" - }, - { - "id": 484, - "order": 0, - "ligatures": "" - }, - { - "id": 485, - "order": 0, - "ligatures": "" - }, - { - "id": 486, - "order": 0, - "ligatures": "" - }, - { - "id": 487, - "order": 0, - "ligatures": "" - }, - { - "id": 488, - "order": 0, - "ligatures": "" - }, - { - "id": 489, - "order": 93, - "ligatures": "", - "prevSize": 32, - "code": 60137, - "name": "wooden-sign", - "tempChar": "" - }, - { - "id": 490, - "order": 0, - "ligatures": "" - }, - { - "id": 491, - "order": 94, - "ligatures": "", - "prevSize": 32, - "code": 60139, - "name": "wyvern", - "tempChar": "" - }, - { - "id": 492, - "order": 0, - "ligatures": "" - }, - { - "id": 493, - "order": 0, - "ligatures": "" - }, - { - "id": 494, - "order": 0, - "ligatures": "" - } - ], - "id": 1, - "metadata": { - "name": "rpg-awesome", - "url": "https://github.com/nagoshiashumari/Rpg-Awesome/", - "license": "MIT" - }, - "height": 1024, - "prevSize": 32, - "icons": [ - { - "id": 0, - "paths": [ - "M391.998 391.993c29.992 0 60.009 29.992 119.994 29.992s90.002-29.992 119.994-29.992c90.002 0 29.992 60.009 0 90.002 0 299.997 240.013 450.008 240.013 509.992h-719.987c0-60.009 240.013-209.995 240.013-509.992-30.017-29.992-90.027-90.002-0.025-90.002zM542.009 362.001c0 16.565-13.427 29.992-29.992 29.992s-29.992-13.427-29.992-29.992 13.427-29.992 29.992-29.992c16.54-0.025 29.992 13.427 29.992 29.992zM572.001 91.997c0 33.129-26.855 60.009-60.009 60.009-33.129 0-60.009-26.855-60.009-60.009 0-33.129 26.855-60.009 60.009-60.009 33.155 0.025 60.009 26.88 60.009 60.009zM481.999 242.008c0 33.129-26.855 60.009-60.009 60.009s-60.009-26.855-60.009-60.009c0-33.129 26.855-60.009 60.009-60.009s60.009 26.855 60.009 60.009zM601.993 272c0 16.565-13.427 29.992-29.992 29.992s-29.992-13.427-29.992-29.992 13.427-29.992 29.992-29.992 29.992 13.427 29.992 29.992z" - ], - "isMulticolor": false, - "tags": [ - "acid" - ], - "defaultCode": 59648, - "grid": 0, - "attrs": [] - }, - { - "id": 1, - "paths": [ - "M731.604 153.246c0.015 0.010 0.032 0.020 0.047 0.030 54.711-24.345 118.046-40.713 227.398-14.508-51.275-157.925-189.5-108.798-276.719-14.795 0.040 0.022 0.080 0.045 0.12 0.067-204.274-111.591-346.022-63.109-463.17 63.809 26.262 3.795 51.957 8.57 77.126 14.256-43.502 22.536-82.541 59.566-114.172 114.29v0.007c-84.476 146.153-123.47 396.036-48.968 530.594l128.531 92.68c175.498 37.888 424.987-98.735 520.449-263.906 32.586-56.385 46.417-110.62 45.23-161.393 16.372 16.868 32.459 34.23 48.267 52.072 63.747-160.566 41.082-293.818-144.138-413.202zM813.124 499.797c-9.137-9.154-18.365-18.151-27.686-26.99 9.321 8.837 18.549 17.834 27.686 26.99zM697.827 132.651c3.1 1.787 6.154 3.58 9.174 5.374-3.024-1.794-6.074-3.587-9.174-5.374-2.718-1.567-5.417-3.089-8.113-4.6 2.693 1.503 5.396 3.032 8.113 4.6zM723.687 148.213c-0.204-0.127-0.409-0.256-0.613-0.383 0.202 0.127 0.409 0.254 0.613 0.383zM715.555 143.178c-0.875-0.533-1.764-1.066-2.646-1.599 0.88 0.533 1.774 1.066 2.646 1.599zM296.437 202.111c12.934 2.923 25.725 6.094 38.381 9.502-12.656-3.406-25.446-6.578-38.381-9.502zM482.127 264.474c-11.571-5.25-23.265-10.288-35.090-15.099 11.825 4.813 23.52 9.849 35.090 15.099zM446.958 249.343c-5.887-2.394-11.807-4.731-17.757-7.016 5.95 2.284 11.87 4.621 17.757 7.016zM428.451 242.042c-11.855-4.539-23.838-8.855-35.95-12.948 12.113 4.091 24.095 8.409 35.95 12.948zM391.761 228.843c-6.087-2.050-12.204-4.046-18.357-5.98 6.152 1.934 12.271 3.931 18.357 5.98zM373.279 222.823c-12.355-3.884-24.847-7.532-37.474-10.945 12.629 3.414 25.119 7.061 37.474 10.945zM696.385 395.743c4.951 3.887 9.879 7.818 14.779 11.794-4.901-3.976-9.827-7.906-14.779-11.794zM483.067 264.902c11.55 5.255 22.977 10.724 34.281 16.407-11.304-5.683-22.732-11.152-34.281-16.407zM517.482 281.376c5.618 2.825 11.202 5.705 16.76 8.633-5.558-2.928-11.142-5.808-16.76-8.633zM535.014 290.418c11.059 5.84 22 11.885 32.826 18.128-10.826-6.243-21.768-12.286-32.826-18.128zM568.604 308.984c5.421 3.132 10.815 6.313 16.18 9.543-5.366-3.231-10.76-6.411-16.18-9.543zM585.020 318.671c10.776 6.496 21.437 13.193 31.988 20.081-10.551-6.887-21.212-13.584-31.988-20.081zM617.976 339.385c10.552 6.904 20.995 13.999 31.325 21.285-10.33-7.285-20.772-14.381-31.325-21.285zM649.497 360.807c5.123 3.615 10.218 7.278 15.29 10.985-5.072-3.707-10.166-7.37-15.29-10.985zM665.615 372.4c10.105 7.402 20.104 14.984 30.003 22.742-9.899-7.758-19.899-15.34-30.003-22.742zM770.624 458.966c4.717 4.34 9.41 8.723 14.080 13.145-4.671-4.42-9.363-8.803-14.080-13.145zM711.5 407.811c9.856 8.002 19.61 16.18 29.265 24.526-9.655-8.347-19.408-16.526-29.265-24.526zM741.7 433.145c9.695 8.397 19.294 16.965 28.794 25.702-9.5-8.737-19.099-17.304-28.794-25.702zM813.709 500.382c4.589 4.602 9.154 9.241 13.698 13.922-4.544-4.681-9.111-9.32-13.698-13.922zM97.527 981.79c54.449-24.34 109.643-35.568 165.131-41.491l-129.554-93.418c1.5 46.71-15.18 91.051-35.578 134.909z" - ], - "isMulticolor": false, - "tags": [ - "acorn" - ], - "defaultCode": 59649, - "grid": 0, - "attrs": [] - }, - { - "id": 2, - "paths": [ - "M717.268 170.985c128.306 124.674 105.851 220.382 21.564 297.396-37.126-200.311-188.73-132.413-219.118-425.11-30.388 292.697-181.991 224.796-219.118 425.11-84.285-77.015-106.735-172.722 21.567-297.394-284.435 162.492-182.038 371.408 26.597 542.738l0.003-0.020c-0.017-0.020-0.033-0.042-0.050-0.062 53.697 64.58 132.121 115.794 171 265.193 38.865-149.369 117.251-200.604 170.946-265.151l0.007 0.038c208.637-171.329 311.035-380.245 26.601-542.738zM296.669 494.041c0.022-0.179 0.043-0.361 0.065-0.54-0.022 0.18-0.043 0.361-0.065 0.54zM300.121 622.032c-0.057-0.227-0.112-0.458-0.167-0.687 0.055 0.227 0.11 0.459 0.167 0.687zM298.853 616.684c-0.065-0.292-0.134-0.581-0.199-0.875 0.065 0.294 0.132 0.583 0.199 0.875zM297.573 610.623c-0.065-0.334-0.129-0.672-0.194-1.007 0.065 0.336 0.129 0.673 0.194 1.007zM296.474 604.633c-0.032-0.185-0.065-0.368-0.097-0.555 0.032 0.185 0.065 0.368 0.097 0.555zM295.525 598.592c-0.057-0.394-0.112-0.788-0.169-1.184 0.055 0.396 0.112 0.792 0.169 1.184zM294.615 591.705c-0.002-0.012-0.003-0.025-0.003-0.038 0 0.012 0.002 0.025 0.003 0.038zM294 585.872c-0.040-0.414-0.080-0.827-0.117-1.243 0.037 0.416 0.077 0.829 0.117 1.243zM293.404 578.73c-0.020-0.277-0.035-0.56-0.053-0.837 0.017 0.277 0.033 0.56 0.053 0.837zM293.028 572.371c-0.018-0.388-0.040-0.77-0.058-1.159 0.018 0.388 0.040 0.772 0.058 1.159zM293.335 532.951c0.035-0.688 0.072-1.376 0.11-2.060-0.038 0.683-0.075 1.371-0.11 2.060zM294 521.931c0.012-0.165 0.025-0.326 0.037-0.491-0.012 0.164-0.025 0.326-0.037 0.491zM294.703 512.964c0.042-0.481 0.082-0.964 0.124-1.442-0.042 0.479-0.082 0.962-0.124 1.442zM295.664 502.827c0.010-0.095 0.022-0.189 0.032-0.284-0.010 0.095-0.022 0.189-0.032 0.284zM292.717 549.068c-0.010 0.498-0.020 0.996-0.028 1.492 0.008-0.496 0.018-0.994 0.028-1.492zM292.638 557.096c0 0.286 0.005 0.566 0.007 0.85 0-0.284-0.005-0.565-0.007-0.85zM292.752 565.029c-0.010-0.414-0.018-0.834-0.027-1.25 0.008 0.418 0.015 0.835 0.027 1.25zM345.334 709.513c0.127 0.157 0.254 0.316 0.383 0.473-0.129-0.157-0.256-0.314-0.383-0.473zM301.43 626.992c0.089 0.324 0.18 0.645 0.271 0.967-0.090-0.322-0.182-0.643-0.271-0.967zM303.112 632.777c0.010 0.032 0.018 0.062 0.028 0.094-0.010-0.030-0.020-0.062-0.028-0.094zM304.689 637.681c0.104 0.311 0.207 0.62 0.312 0.929-0.105-0.309-0.209-0.62-0.312-0.929zM306.642 643.274c0.037 0.102 0.075 0.2 0.114 0.302-0.037-0.1-0.075-0.2-0.114-0.302zM308.419 647.933c0.105 0.264 0.207 0.531 0.312 0.795-0.105-0.266-0.207-0.531-0.312-0.795zM310.561 653.16c0.089 0.207 0.179 0.413 0.267 0.618-0.087-0.205-0.179-0.411-0.267-0.618zM312.627 657.831c0.082 0.18 0.164 0.362 0.246 0.543-0.084-0.18-0.164-0.362-0.246-0.543zM314.894 662.635c0.12 0.247 0.244 0.494 0.366 0.742-0.122-0.247-0.246-0.494-0.366-0.742zM317.368 667.546c0.008 0.015 0.017 0.032 0.025 0.047-0.008-0.015-0.017-0.030-0.025-0.047zM319.635 671.771c0.132 0.239 0.264 0.478 0.396 0.717-0.132-0.239-0.264-0.478-0.396-0.717zM322.353 676.577c0.012 0.020 0.025 0.042 0.037 0.062-0.012-0.022-0.025-0.042-0.037-0.062zM324.765 680.604c0.125 0.205 0.251 0.413 0.378 0.618-0.127-0.205-0.252-0.413-0.378-0.618zM327.608 685.141c0.089 0.137 0.179 0.274 0.267 0.411-0.089-0.137-0.179-0.274-0.267-0.411zM330.299 689.231c0.090 0.134 0.179 0.267 0.269 0.401-0.090-0.134-0.179-0.267-0.269-0.401zM333.196 693.447c0.129 0.182 0.257 0.364 0.386 0.548-0.129-0.182-0.257-0.364-0.386-0.548zM339.109 701.557c0.139 0.184 0.279 0.368 0.419 0.553-0.14-0.185-0.279-0.369-0.419-0.553zM519.719 189.041c18.487 178.066 112.72 130.806 131.423 261.797 0.005 0.022 0.010 0.045 0.015 0.068-14.491-59.412-68.037-103.521-131.914-103.521-60.857 0-112.359 40.031-129.625 95.194 0-0.002 0.002-0.003 0.002-0.005 21.427-120.784 112.015-79.324 130.1-253.533zM383.594 476.9c-0.095 2.086-0.159 4.181-0.159 6.289 0 2.243 0.062 4.472 0.169 6.687-0.11-2.215-0.169-4.445-0.169-6.687 0-2.11 0.063-4.205 0.159-6.289zM389.197 444.018c-0.431 1.433-0.845 2.875-1.229 4.328 0.386-1.453 0.798-2.895 1.229-4.328zM387.404 450.58c-0.314 1.276-0.61 2.559-0.889 3.849 0.279-1.29 0.573-2.573 0.889-3.849zM386.061 456.564c-0.383 1.928-0.738 3.865-1.039 5.82 0.301-1.956 0.656-3.894 1.039-5.82zM384.907 463.236c-0.259 1.754-0.483 3.518-0.673 5.294 0.192-1.776 0.416-3.541 0.673-5.294zM384.043 470.522c-0.137 1.482-0.251 2.97-0.339 4.465 0.090-1.495 0.202-2.983 0.339-4.465zM385.916 509.003c0-0.003-0.002-0.007-0.002-0.012 12.056 62.664 67.15 110.007 133.329 110.007 69.664 0 127.041-52.465 134.866-120.029-3.361 109.708-98.042 104.522-134.39 244.195-35.2-135.275-125.123-134.669-133.803-234.162zM383.998 495.248c0.032 0.361 0.048 0.727 0.084 1.087-0.037-0.359-0.052-0.725-0.084-1.087zM652.659 457.873c0.15 0.792 0.289 1.589 0.426 2.385-0.135-0.797-0.277-1.594-0.426-2.385zM653.706 464.243c0.177 1.253 0.337 2.512 0.479 3.777-0.14-1.266-0.304-2.524-0.479-3.777zM654.904 488.989c0.080-1.926 0.147-3.855 0.147-5.8 0-2.068-0.065-4.121-0.155-6.166 0.094 2.045 0.155 4.098 0.155 6.166 0 1.946-0.060 3.875-0.147 5.8zM654.483 495.327c0.127-1.432 0.246-2.867 0.327-4.311-0.087 1.443-0.197 2.88-0.327 4.311zM654.413 470.135c0.177 1.822 0.316 3.655 0.418 5.499-0.1-1.844-0.244-3.677-0.418-5.499zM742.752 493.991c-0.018-0.154-0.037-0.309-0.057-0.463 0.020 0.154 0.038 0.311 0.057 0.463zM746.083 532.767c-0.030-0.575-0.060-1.149-0.092-1.721 0.032 0.571 0.062 1.146 0.092 1.721zM745.422 521.839c-0.003-0.037-0.005-0.074-0.008-0.11 0.003 0.037 0.007 0.074 0.008 0.11zM744.714 512.83c-0.035-0.406-0.068-0.814-0.105-1.218 0.037 0.404 0.070 0.812 0.105 1.218zM743.758 502.777c-0.003-0.038-0.008-0.075-0.012-0.114 0.003 0.038 0.008 0.075 0.012 0.114zM746.453 571.317c-0.013 0.284-0.028 0.566-0.042 0.849 0.013-0.284 0.028-0.565 0.042-0.849zM746.063 578.136c-0.012 0.162-0.020 0.327-0.032 0.489 0.012-0.162 0.022-0.326 0.032-0.489zM745.534 584.752c-0.028 0.317-0.060 0.633-0.090 0.95 0.030-0.317 0.062-0.633 0.090-0.95zM744.050 597.552c-0.042 0.301-0.085 0.601-0.127 0.9 0.042-0.301 0.085-0.601 0.127-0.9zM743.035 604.167c-0.010 0.057-0.020 0.114-0.030 0.172 0.008-0.058 0.020-0.115 0.030-0.172zM742.012 609.793c-0.045 0.234-0.089 0.469-0.135 0.703 0.047-0.232 0.090-0.468 0.135-0.703zM740.75 615.907c-0.040 0.185-0.084 0.368-0.125 0.551 0.042-0.184 0.084-0.366 0.125-0.551zM739.417 621.578c-0.028 0.112-0.055 0.227-0.084 0.339 0.028-0.112 0.055-0.226 0.084-0.339zM714.508 680.841c-0.037 0.060-0.074 0.12-0.11 0.18 0.037-0.060 0.074-0.12 0.11-0.18zM737.963 627.106c-0.062 0.224-0.125 0.446-0.187 0.668 0.062-0.222 0.125-0.444 0.187-0.668zM734.687 637.822c-0.070 0.21-0.14 0.419-0.212 0.63 0.072-0.21 0.142-0.421 0.212-0.63zM730.931 648.117c-0.060 0.154-0.12 0.309-0.182 0.463 0.060-0.154 0.12-0.309 0.182-0.463zM728.816 653.264c-0.037 0.084-0.074 0.167-0.109 0.252 0.035-0.084 0.072-0.167 0.109-0.252zM726.674 658.098c-0.020 0.043-0.038 0.087-0.058 0.13 0.018-0.043 0.038-0.087 0.058-0.13zM724.457 662.772c-0.060 0.124-0.122 0.246-0.182 0.369 0.062-0.124 0.122-0.246 0.182-0.369zM719.693 671.936c-0.063 0.117-0.129 0.232-0.192 0.349 0.063-0.117 0.127-0.234 0.192-0.349zM746.785 557.676c0-0.162 0.003-0.321 0.003-0.483 0 0.162-0.003 0.321-0.003 0.483zM746.68 564.912c0.008-0.312 0.013-0.628 0.020-0.94-0.007 0.312-0.013 0.628-0.020 0.94zM746.715 549.226c0.008 0.399 0.017 0.798 0.022 1.196-0.007-0.398-0.015-0.797-0.022-1.196z" - ], - "isMulticolor": false, - "tags": [ - "alien-fire" - ], - "defaultCode": 59650, - "grid": 0, - "attrs": [] - }, - { - "id": 3, - "paths": [ - "M369.833 859.722l-147.013 147.013h86.698c34.631-34.512 69.732-68.675 105.054-102.275l-44.739-44.739zM987.801 379.356l-230.893 93.291-248.304 248.304 50.472 50.472c75.973-67.569 151.535-130.97 224.385-187.771-57.149 73.295-120.323 148.769-187.587 224.568l51.499 51.499 248.306-248.304 92.123-232.059zM499.752 277.106h0.003c16.112 130.157 26.692 273.577 31.981 420.712l64.19-64.19-0.003-358.001-98.19-228.571-98.205 228.571-0.002 336.245-135.885-135.885-230.898-93.289 92.127 232.060 338.090 338.089c-17.119 18.019-34.39 35.992-51.815 53.888h89.213l8.244-8.244 11.588 11.586h85.799c-138.055-141.578-267.551-287.894-375.566-426.425 154.218 120.244 320.594 270.022 477.301 426.425h90.005l-329.654-329.656c5.586-140.707 16.093-277.417 31.677-403.316zM316.448 273.63l-119.297 150.070 129.888-66.692-3.54 117.534 67.678-127.434v-87.047l53.201-123.824-97.691-104.867 32.292 107.475-188.473-97.668 125.942 154.968-226.229 38.277zM604.838 260.063v91.453l62.546 117.77-5.138-170.656 1.866 61.966 130.875 68.002-125.942-154.968 226.229-39.206-226.229-38.277 125.942-154.968-184.627 95.675 31.692-105.482-92.705 99.515 22.191 51.658z" - ], - "isMulticolor": false, - "tags": [ - "all-for-one" - ], - "defaultCode": 59651, - "grid": 0, - "attrs": [] - }, - { - "id": 4, - "paths": [ - "M985.453 385.681l-684.409-356.206-32.155 32.155c31.781 46.922 20.917 119.256-30.501 170.673s-125.406 64.030-172.328 32.155l-30.501 30.501 355.394 685.221 304.258-178.946-216.877-17.326 108.829-108.86-182.224-14.017 94.843-94.843-164.086-12.363 79.171-79.171-141.015-10.708 70.898-70.898-122.877-9.085c84.821-15.391 158.466-88.568 173.982-173.982l9.896 122.034 70.086-70.086 11.551 140.172 78.328-78.328 13.206 163.274 94-94 14.017 182.224 108.829-108.86 16.484 212.756 173.202-293.488z" - ], - "isMulticolor": false, - "tags": [ - "alligator-clip" - ], - "defaultCode": 59652, - "grid": 0, - "attrs": [] - }, - { - "id": 5, - "paths": [ - "M331.998 31.987c-15.696 0-29.995 14.701-29.995 29.995v60.008h29.995v60.008h-119.999c-136.481 0-150.012 106.276-149.995 149.995v540.005c0 23.483-29.995 60.008-29.995 60.008v60.008h959.993v-60.008c0 0-29.995-36.525-29.995-60.008v-540.022c0-43.736-13.514-149.995-149.995-149.995h-119.999v-60.008h29.995v-59.991c0-15.295-14.317-29.995-29.995-29.995h-360.015zM481.993 121.99h60.008c29.995 0 90.004 0 90.004 60.008h-239.998c0-60.008 59.991-60.008 89.986-60.008zM241.995 301.98h540.005c38.428 0 60.008 21.964 60.008 60.008v479.997c0 16.936-15.469 29.995-29.995 29.995h-600.013c-14.526 0-29.995-13.060-29.995-29.995v-479.997c0-38.044 21.58-60.008 59.991-60.008v0zM662 721.986h119.999v60.008h-119.999v-60.008zM662 691.991v-210.003c0-76.315 60.008-119.999 60.008-119.999s60.008 43.684 60.008 119.999v210.003h-120.017zM241.995 691.991v-210.003c0-76.315 60.008-119.999 60.008-119.999s60.008 43.684 60.008 119.999v210.003h-120.017zM451.997 691.991v-210.003c0-76.315 60.008-119.999 60.008-119.999s60.008 43.684 60.008 119.999v210.003h-120.017zM451.997 721.986h119.999v60.008h-119.999v-60.008zM241.995 721.986h119.999v60.008h-119.999c0 0 0-60.008 0-60.008z" - ], - "isMulticolor": false, - "tags": [ - "ammo-bag" - ], - "defaultCode": 59653, - "grid": 0, - "attrs": [] - }, - { - "id": 6, - "paths": [ - "M923.865 347.383l51.982-3.931-176.546-190.486 40.845 200.747 42.575-3.219c22.53 143.738-4.275 281.603-85.127 385.149l-486.754-486.756c24.312-52.864 14.704-117.496-28.849-161.049-55.902-55.902-146.532-55.904-202.431-0.005-55.901 55.901-55.897 146.537 0.002 202.435 43.482 43.481 107.976 53.121 160.795 28.956l107.231 107.231c-42.774 39.326-87.86 76.341-134.662 111.641l60.142 60.142c37.404-45.011 75.791-88.757 115.503-130.798l338.597 338.597c-103.519 80.747-241.302 107.52-384.952 85.014l3.224-42.63-200.747-40.845 190.486 176.546 3.926-51.915c172.911 73.835 354.643 69.117 481.926-23.442l125.955 42.547-42.918-127.050c89.048-127.021 92.675-306.246 19.798-476.88zM117.713 252.143c-34.834-34.834-34.838-91.32 0-126.156 34.836-34.836 91.315-34.834 126.154 0.003 34.834 34.838 34.833 91.316-0.002 126.151s-91.318 34.838-126.152 0.002zM589.916 281.391l-60.142-60.142c-33.969 48.222-71.257 93.126-111.215 135.358l40.004 40.004c42.074-40.604 85.73-79.177 131.353-115.221z" - ], - "isMulticolor": false, - "tags": [ - "anchor" - ], - "defaultCode": 59654, - "grid": 0, - "attrs": [] - }, - { - "id": 7, - "paths": [ - "M951.473 189.458c-25.755-59.035-80.684-90.608-103.362-67.9l0.005-0.003c-24.499 24.531 9.301 58.792 11.633 113.831-226.548 168.669-452.976 205.694-679.829 3.468 1.002-57.075 36.747-92.257 11.737-117.299l0.003 0.005c-22.678-22.708-77.607 8.865-103.362 67.9-86.454 198.165-19.15 718.163 175.443 702.733-43.932-100.82-87.441-215.588-113.235-336.924 52.585 144.75 144.409 270.729 235.289 239.99-63.929-80.24-131.874-174.235-179.765-280.217 69.919 118.158 170.442 211.347 245.641 170.706-59.389-53.076-122.917-114.89-177.317-186.229 79.434 74.892 174.528 122.808 224.629 74.892-41.54-20.201-86.507-45.392-129.261-74.809l149.537 65.001 136.8-55.577c-38.483 25.398-78.238 47.375-115.271 65.384 50.101 47.916 145.194 0 224.624-74.892-54.401 71.339-117.929 133.153-177.317 186.229 75.2 40.641 175.722-52.548 245.641-170.706-47.891 105.981-115.836 199.977-179.765 280.217 90.88 30.738 182.705-95.24 235.289-239.99-25.794 121.336-69.303 236.105-113.235 336.924 194.595 15.428 261.898-504.57 175.446-702.735zM179.9 238.836c-3.216-2.867-6.433-5.795-9.649-8.758 3.216 2.963 6.431 5.89 9.649 8.758zM147.556 208.36c-3.182-3.159-6.366-6.353-9.548-9.609 3.182 3.256 6.366 6.45 9.548 9.609zM169.015 228.943c-3.062-2.833-6.122-5.715-9.184-8.635 3.062 2.92 6.124 5.802 9.184 8.635zM158.122 218.672c-3.035-2.912-6.070-5.863-9.107-8.862 3.035 2.998 6.070 5.95 9.107 8.862zM871.414 226.588c-3.839 2.933-7.676 5.828-11.515 8.686 3.839-2.858 7.676-5.753 11.515-8.686zM895.009 208.091c3.83-3.077 7.662-6.189 11.493-9.34-3.83 3.151-7.662 6.261-11.493 9.34zM871.487 226.531c3.86-2.95 7.721-5.939 11.581-8.964-3.86 3.027-7.721 6.014-11.581 8.964zM883.266 217.412c3.825-2.998 7.652-6.034 11.478-9.106-3.827 3.072-7.652 6.106-11.478 9.106zM519.888 238.034c94.449 0 171.018-37.36 171.018-83.448 0-46.092-76.569-83.448-171.018-83.448s-171.018 37.362-171.018 83.448c0 46.087 76.569 83.448 171.018 83.448zM519.888 84.501c69.863 0 126.5 27.633 126.5 61.726 0 34.091-56.637 61.726-126.5 61.726s-126.5-27.636-126.5-61.726c0-34.089 56.637-61.726 126.5-61.726z" - ], - "isMulticolor": false, - "tags": [ - "angel-wings" - ], - "defaultCode": 59655, - "grid": 0, - "attrs": [] - }, - { - "id": 8, - "paths": [ - "M163.357 719.204c246.268-157.444 407.545-323.688 556.914-563.432l122.975 121.554c-234.984 150.229-403.989 317.983-556.914 563.432l-122.975-121.55c0 0 0-0.003 0-0.003zM566.354 491.689c-23.176 22.054-45.674 44.787-67.589 68.317 132.736 88.951 225.771 252.512 314.724 413.25l170.716-172.715c-164.142-88.363-328.654-177.613-417.85-308.852zM174.123 407.96c79.854 78.928 182.89 89.855 249.704 112.951 36.208-33.384 70.395-68.033 103.060-104.403-23.372-66.765-36.481-168.708-116.392-247.694-119.182-117.807-268.599-159.557-333.821-93.57l0.002 0.002c-65.222 65.984-21.738 214.908 97.447 332.715zM153.53 151.422c33.366-33.755 120.194-2.030 193.939 70.861s106.478 159.346 73.112 193.102c-33.366 33.755-120.194 2.030-193.937-70.86s-106.478-159.346-73.113-193.103z" - ], - "isMulticolor": false, - "tags": [ - "ankh" - ], - "defaultCode": 59656, - "grid": 0, - "attrs": [] - }, - { - "id": 9, - "paths": [ - "M844.007 474.643c49.535-15.794 99.069-51.020 148.604-102.086-49.575-51.977-98.010-77.573-148.604-87.205v-72.41h-603.961v52.586h-203.37c36.664 99.48 117.090 168.056 203.37 191.526v85.77h159.042c-27.603 93.789-84.852 170.777-154.856 237.413h-60.095v52.605c-0.261 0.21-0.518 0.424-0.778 0.635h0.778v71.12h752.164v-124.36h-79.969c-78.208-66.567-133.668-143.487-159.48-237.413h147.155v-68.182z" - ], - "isMulticolor": false, - "tags": [ - "anvil" - ], - "defaultCode": 59657, - "grid": 0, - "attrs": [] - }, - { - "id": 10, - "paths": [ - "M493.591 318.14c-0.251-83.31-22.062-151.051-65.822-226.698 18.288-44.281 76.61-50.696 106.78-48.823 20.595 101.431 24.543 179.452 15.647 277.412zM1002.807 518.582c-2.897-220.325-159.923-365.109-350.51-323.181-33.942 7.469-66.74 20.221-97.641 37.517-0.162 27.975-1.686 56.576-4.458 87.114l-56.606-1.891c-0.084-27.765-2.576-53.796-7.464-78.97-34.271-19.605-70.825-33.698-108.609-41.287-23.956-4.811-47.642-7.434-70.165-6.65l0.003-0.005c-157.668 5.479-290.801 143.293-288.267 336.082 2.892 220.322 162.851 430.498 354.493 468.98 49.045 9.852 118.468 10.44 151.328-21.041 32.245 26.525 103.526 29.034 152.302 18.303 190.584-41.931 328.49-254.644 325.594-474.971zM692.713 418.168c-8.414 82.568-49.713 125.182-136.593 112.413-19.865-70.907 52.837-144.053 136.593-112.413zM521.059 333.363c62.020 62.165 52.399 120.722-8.897 176.678-75.307-48.412-59.888-150.379 8.897-176.678zM468.372 511.171c-80.906 34.136-131.57 3.239-160.416-74.582 73.148-51.624 161.867 0.95 160.416 74.582zM269.212 577.322c51.422-73.289 152.686-53.747 176.173 16.043-64.627 59.454-122.746 47.473-176.173-16.043zM307.203 758.801c-8.132-89.158 81.76-139.708 144.795-101.635-10.881 87.135-62.975 115.56-144.795 101.635zM496.301 849.805c-61.296-55.956-70.915-114.513-8.897-176.678 68.785 26.297 84.204 128.264 8.897 176.678zM676.47 756.825c-81.476 15.816-134.211-11.398-147.109-98.256 62.137-39.527 153.176 8.927 147.109 98.256zM552.886 584.482c36.035-64.22 139.167-64.616 176.088 16.94-64.288 52.5-123.625 53.479-176.088-16.94z" - ], - "isMulticolor": false, - "tags": [ - "apple" - ], - "defaultCode": 59658, - "grid": 0, - "attrs": [] - }, - { - "id": 11, - "paths": [ - "M288.88 344.692l-216.884 153.091v-171.168l281.994-186.46 70.218 136.050 177.444-138.641 72.108 135.956 177.852-132.866 95.636 141.992-2.536 225.115-135.698-156.831-186.405 135.966-69.209-138.382-185.73 129.941-78.791-133.763zM288.88 732.31l-216.884 153.109v-171.168l281.994-186.45 70.218 136.032 177.444-138.633 72.108 135.956 177.852-132.874 95.636 142.002-2.536 225.115-135.698-156.831-186.405 135.956-69.209-138.382-185.73 129.949-78.791-133.782z" - ], - "isMulticolor": false, - "tags": [ - "aquarius" - ], - "defaultCode": 59659, - "grid": 0, - "attrs": [] - }, - { - "id": 12, - "paths": [ - "M206.952 497.627c0 233.596 303.508 487.498 303.508 487.498s303.512-253.87 303.497-487.498c0.007-619.016-607.006-607.336-607.005 0zM423.971 753.016c-38.628-41.787-67.828-96.174-86.303-155.322-29.571-8.244-51.155-35.493-50.876-67.656 0.199-22.884 11.419-43.092 28.577-55.632-3.65-65.703 5.745-130.851 29.783-186.139l29.721 175.249c29.708 8.154 51.419 35.467 51.14 67.729-0.204 23.529-12.067 44.212-30.043 56.659l28.002 165.111zM596.939 753.016l28.002-165.11c-17.978-12.445-29.843-33.13-30.047-56.661-0.281-32.264 21.434-59.577 51.143-67.731l29.721-175.248c24.038 55.288 33.433 120.438 29.783 186.142 17.156 12.54 28.376 32.746 28.573 55.628 0.279 32.162-21.302 59.409-50.871 67.654-18.477 59.148-47.677 113.537-86.305 155.324z" - ], - "isMulticolor": false, - "tags": [ - "arcane-mask" - ], - "defaultCode": 59660, - "grid": 0, - "attrs": [] - }, - { - "id": 13, - "paths": [ - "M832.253 222.504l16.162 62.098-74.56 14.69c-39.173-113.44-119.684-207.104-230.42-231.755 76.758 65.315 130.506 146.539 162.978 234.549l-272.937 42.363c-0.003 0.007-0.008 0.012-0.012 0.018 12.57-20.949 18.868-49.264 15.801-79.64-5.97-59.11-45.083-103.568-87.361-99.296s-71.712 55.65-65.741 114.76c2.008 19.877 7.776 38.083 16.138 53.352-0.002-0.002-0.002-0.003-0.003-0.007-88.978 2.367-152.71 23.149-185.294 76.351 42.099 39.543 125.422 46.489 190.532 36.171l40.516 110.041-105.427 424.733h68.259l121.988-337.264 220.001 337.264h67.076l-229.326-438.404-9.431-141.34 232.034-45.988c31.042 116.422 27.306 241.121-7.686 354.635 88.672-103.319 104.326-259.501 64.081-392.722l127.075-25.047-3.592-18.227 0.035-0.007 3.593 18.238-53.624 10.566 16.028 61.582 110.65-93.181-147.535-48.534zM363.578 378.016c-1.069-0.277-2.137-0.573-3.194-0.909 1.059 0.336 2.125 0.633 3.194 0.909zM367.626 378.918c-1.026-0.189-2.046-0.413-3.064-0.658 1.017 0.246 2.038 0.469 3.064 0.658zM314.181 336.938c-0.164-0.277-0.327-0.553-0.488-0.832 0.162 0.279 0.326 0.555 0.488 0.832zM322.665 349.398c-0.16-0.204-0.316-0.413-0.476-0.618 0.159 0.204 0.316 0.414 0.476 0.618zM319.333 344.918c-0.202-0.286-0.404-0.57-0.603-0.859 0.2 0.289 0.401 0.575 0.603 0.859zM317.225 341.837c-0.063-0.095-0.124-0.194-0.187-0.291 0.063 0.097 0.125 0.195 0.187 0.291zM324.219 351.319c0.266 0.322 0.535 0.64 0.803 0.956-0.269-0.317-0.538-0.633-0.803-0.956zM327.672 355.275c0.304 0.331 0.606 0.667 0.914 0.992-0.307-0.326-0.61-0.66-0.914-0.992zM330.112 357.842c0.366 0.369 0.735 0.732 1.104 1.092-0.369-0.362-0.738-0.723-1.104-1.092zM357.119 375.955c0.902 0.342 1.809 0.667 2.723 0.967-0.914-0.299-1.821-0.623-2.723-0.967zM333.532 361.116c0.464 0.423 0.93 0.847 1.4 1.258-0.471-0.411-0.935-0.834-1.4-1.258zM336.383 363.609c0.488 0.408 0.981 0.803 1.475 1.196-0.494-0.393-0.986-0.788-1.475-1.196zM339.731 366.255c0.638 0.478 1.28 0.949 1.926 1.405-0.646-0.454-1.288-0.925-1.926-1.405zM342.998 368.58c0.625 0.419 1.253 0.827 1.884 1.224-0.631-0.398-1.261-0.803-1.884-1.224zM346.292 370.68c0.8 0.479 1.605 0.94 2.416 1.385-0.81-0.444-1.615-0.905-2.416-1.385zM349.921 372.711c0.767 0.401 1.539 0.787 2.314 1.156-0.775-0.369-1.547-0.755-2.314-1.156zM353.181 374.316c0.945 0.431 1.898 0.834 2.853 1.218-0.957-0.384-1.909-0.785-2.853-1.218zM375.663 379.827c1.153 0.047 2.31 0.043 3.47 0.018-1.159 0.025-2.317 0.027-3.47-0.018zM367.932 378.98c1.116 0.199 2.238 0.354 3.364 0.488-1.126-0.134-2.248-0.287-3.364-0.488zM372.205 379.568c1.108 0.114 2.218 0.204 3.333 0.251-1.114-0.047-2.225-0.139-3.333-0.251zM380.013 379.819c1.168-0.043 2.339-0.112 3.511-0.231 1.303-0.132 2.593-0.309 3.87-0.53-1.278 0.221-2.568 0.398-3.87 0.53-1.174 0.119-2.344 0.185-3.511 0.231zM414.984 366.201c-0.18 0.145-0.364 0.282-0.545 0.426 0.18-0.144 0.364-0.281 0.545-0.426zM411.892 368.568c-0.237 0.17-0.479 0.329-0.718 0.496 0.239-0.167 0.481-0.326 0.718-0.496zM408.693 370.733c-0.301 0.19-0.606 0.364-0.909 0.548 0.302-0.184 0.61-0.357 0.909-0.548zM405.39 372.691c-0.369 0.204-0.747 0.386-1.119 0.581 0.371-0.195 0.75-0.378 1.119-0.581zM401.984 374.432c-0.446 0.21-0.902 0.394-1.353 0.593 0.451-0.199 0.905-0.384 1.353-0.593zM398.478 375.947c-0.531 0.209-1.076 0.388-1.614 0.58 0.538-0.192 1.082-0.371 1.614-0.58zM394.875 377.23c-0.631 0.2-1.275 0.364-1.913 0.543 0.638-0.179 1.281-0.342 1.913-0.543zM391.178 378.269c-0.783 0.192-1.58 0.339-2.374 0.498 0.795-0.157 1.592-0.306 2.374-0.498zM420.567 361.155c0.090-0.090 0.182-0.177 0.272-0.269-0.090 0.092-0.182 0.179-0.272 0.269zM417.565 363.991c0.134-0.119 0.269-0.234 0.403-0.354-0.132 0.12-0.269 0.234-0.403 0.354zM431.189 348.076c-0.007 0.010-0.015 0.022-0.022 0.032 0.008-0.012 0.015-0.022 0.022-0.032zM428.775 351.543c-0.015 0.020-0.030 0.040-0.045 0.060 0.015-0.018 0.030-0.038 0.045-0.060zM426.245 354.835c-0.032 0.038-0.063 0.077-0.095 0.117 0.032-0.040 0.063-0.077 0.095-0.117zM423.597 357.952c-0.055 0.062-0.112 0.122-0.167 0.184 0.055-0.062 0.112-0.122 0.167-0.184z" - ], - "isMulticolor": false, - "tags": [ - "archer" - ], - "defaultCode": 59661, - "grid": 0, - "attrs": [] - }, - { - "id": 14, - "paths": [ - "M313.311 505.54c0 109.742 88.961 198.703 198.703 198.703s198.703-88.961 198.703-198.703-88.961-198.703-198.703-198.703-198.703 88.961-198.703 198.703zM512.087 386.11c65.999 0 119.501 53.502 119.501 119.501s-53.502 119.501-119.501 119.501c-65.999 0-119.501-53.502-119.501-119.501s53.502-119.501 119.501-119.501zM569.905 505.612c0 31.932-25.886 57.818-57.818 57.818s-57.818-25.886-57.818-57.818c0-31.932 25.886-57.818 57.818-57.818s57.818 25.886 57.818 57.818zM740.735 661.18c0.002-0.002 0.003-0.005 0.005-0.007l35.616 117.401c71.331-69.074 115.689-165.838 115.689-272.975 0-186.625-134.543-341.814-311.926-373.885l-25.294-83.378-103.421-0.002-26.166 87.276c-168.004 39.278-293.133 190.015-293.133 369.99 0 101.125 39.51 193.018 103.93 261.097l-62.192 207.436h93.618l46.912-144.015c41.728 25.475 88.744 43.145 139.027 50.939v93.075h104.022v-195.708c-14.749 2.432-29.883 3.718-45.322 3.718-20.139 0-39.767-2.173-58.682-6.261-39.563-8.551-75.97-25.577-107.241-49.068-29.664-22.287-54.708-50.386-73.414-82.63 0.142 0.244 0.291 0.481 0.433 0.723-23.903-40.903-37.612-88.488-37.612-139.284 0-108.302 62.27-202.045 152.954-247.42-0.022 0.010-0.042 0.020-0.063 0.030v0c37.205-18.629 79.187-29.128 123.628-29.128 36.659 0 71.643 7.151 103.658 20.106 101.353 41.015 172.859 140.355 172.859 256.413 0 57.71-17.689 111.282-47.924 155.615-20.345 29.828-46.376 55.458-76.531 75.353 0.007-0.005 0.010-0.008 0.017-0.012-31.645 20.879-67.831 35.432-106.758 41.855v104.441c50.273-5.985 97.532-21.786 139.815-45.429l44.825 136.685h93.618l-94.941-312.958c-0.002 0.002-0.003 0.005-0.005 0.007z" - ], - "isMulticolor": false, - "tags": [ - "archery-target" - ], - "defaultCode": 59662, - "grid": 0, - "attrs": [] - }, - { - "id": 15, - "paths": [ - "M152.010 31.992c-80.013 40.006-90.002 60.009-90.002 60.009 80.013 320 9.989 549.998-29.992 750.005 0 0 20.003 49.995 180.003 90.002v-420.016c-0.025-160-60.009-480-60.009-480zM871.998 31.992c0 0-60.009 320-60.009 480v419.991c160-40.006 180.003-90.002 180.003-90.002-40.006-200.006-110.005-430.005-29.992-750.005 0 0.025-9.989-19.978-90.002-59.984zM452.007 391.998c-80.013 0-180.003 29.992-180.003 29.992v540.009c0 0 99.991 29.992 180.003 29.992h119.994c80.013 0 180.003-29.992 180.003-29.992v-540.009c0 0-99.991-29.992-180.003-29.992h-119.994z" - ], - "isMulticolor": false, - "tags": [ - "arena" - ], - "defaultCode": 59663, - "grid": 0, - "attrs": [] - }, - { - "id": 16, - "paths": [ - "M689.939 104.964c-85.889 41.363-143.261 131.72-181.21 241.106-37.956-109.386-95.339-199.743-181.218-241.106-275.030-132.485-380.372 247.499-176.701 408.907h169.002c0 0-50.069-87.688-55.931-100.108-8.987-18.97-61.861-156.233 12.943-107.906 101.211 65.382 124.32 298.769 135.367 401.47 11.105 103.359 17.557 239.848 17.557 239.848h157.965c0 0 6.451-136.489 17.567-239.848 11.047-102.692 34.156-336.087 135.358-401.47 74.814-48.327 21.92 88.946 12.953 107.906-5.872 12.42-55.941 100.108-55.941 100.108h168.992c203.671-161.408 98.329-541.382-176.703-408.907z" - ], - "isMulticolor": false, - "tags": [ - "aries" - ], - "defaultCode": 59664, - "grid": 0, - "attrs": [] - }, - { - "id": 17, - "paths": [ - "M887.611 839.277l-88.26-103.518-80.615-10.824-181.424-214.613 173.192-200.279-19.339-16.725-163.269 188.804v-300.291h-25.568v287.108l-150.737-178.312-19.526 16.506 170.263 201.41v3.146l-183.005 211.628-87.413 11.738-88.576 103.887 54.993 24.293-18.723 21.651 19.339 16.725 19.254-22.264 33.344 51.955 88.578-103.887-1.663-87.135 163.873-189.502v183.689l-61.504 69.373v141.765l61.504-18.598v36.913h25.568v-36.447l60.669 18.132v-141.765l-60.669-67.643v-197.408l165.42 195.679-1.779 93.325 88.26 103.513 34.488-53.74 22.707 26.86 19.526-16.506-21.486-25.416zM302.065 341.251l-18.849-101.292 97.911 34.664 46.234-20.301-190.591-67.472 36.951 198.557zM757.215 385.407l36.951-198.557-190.591 67.472 47.753 20.969 99.795-35.331-19.613 105.403zM514.741 111.944l44.813 77.518 56.29 16.961-101.199-175.032-100.765 175.032 56.276-17.030z" - ], - "isMulticolor": false, - "tags": [ - "arrow-cluster" - ], - "defaultCode": 59665, - "grid": 0, - "attrs": [] - }, - { - "id": 18, - "paths": [ - "M534.938 461.623l53.753-203.301-35.099-35.1-33.554 74.951-0.634-109.14-47.117-47.117-24.231 39.514-4.655-68.401-77.543-77.545-53.688 203.052-133.963-134.156-62.884 62.887 135.011 135.201-206.512 54.605 33.491 33.491 101.963-2.001-74.382 29.584 78.804 78.804 65.849 4.094-25.751 17.808 41.397 2.573-33.71 23.311 35.172 35.172 206.267-54.541 480.852 481.529h50.074v-75.694zM688.695 415.737l63.766 4.342-36.839 22.585 61.589 61.587 118.801-31.413 107.833 107.835v-112.961l-53.859-53.86 29.619-112.016-139.843-139.841-29.619 112.011-76.464-76.465-55.898 57.065 78.391 78.393-118.804 31.413 51.327 51.327zM897.785 472.37v0zM797.43 322.086v0zM344.205 928.176v0l41.181-155.74-27.792-27.79-24.235 39.536-4.662-68.434-83.155-83.153-29.582 111.874-76.186-76.45-57.060 57.065 78.661 78.661-118.235 31.264 107.988 107.987h68.185l-33.002 30.974 114.904-30.382 63.312 63.312h112.958l-121.782-122.204z" - ], - "isMulticolor": false, - "tags": [ - "arrow-flights" - ], - "defaultCode": 59666, - "grid": 0, - "attrs": [] - }, - { - "id": 19, - "paths": [ - "M676.429 229.928c38.574 55.764 23.507 120.568-17.597 147.665 27.024-136.378-241.211-210.159-74.436-345.044l0.002-0.119c-222.963 28.398-270.709 199.62-190.149 332.547-86.316-35.748-123.591-88.387-87.294-164.958-83.341 43.231-127.326 129.236-125.468 222.054 1.454 72.579 30.504 129.216 75.485 170.29-22.685-57.965-28.618-118.479-14.137-169.537 71.484 98.662 275.59-40.001 294.208-158.574-0.075 127.347 127.956 236.723 225.399 104.773 17.373 71.916 13.514 146.404-4.849 206.336 37.513-39.518 61.356-90.694 63.12-153.285 2.525-89.754-42.115-148.94-144.282-192.147zM820.811 697.575l-307.757-235.478-307.759 235.478zM734.678 631.671v-146.952h-126.235v50.365zM288.673 697.575v302.395h446.006v-302.395h-446.006zM427.465 914.516h-74.017v-71.173h74.017v71.173zM427.465 791.465h-74.017v-71.173h74.017v71.173zM547.039 914.516h-74.017v-71.173h74.017v71.173zM547.039 791.465h-74.017v-71.173h74.017v71.173zM594.014 720.294h74.017v71.173h-74.017v-71.173zM669.457 991.383h-74.017v-146.616h74.017v146.616z" - ], - "isMulticolor": false, - "tags": [ - "arson" - ], - "defaultCode": 59667, - "grid": 0, - "attrs": [] - }, - { - "id": 20, - "paths": [ - "M987.604 723.839c-58.806-38.596-150.68-89.17-150.68-146.002s91.877-109.747 150.675-148.343c-67.75 0.848-156.531-21.921-181.047-71.248-24.628-49.562 19.99-116.468 54.899-184.549-58.401 40.246-115.163 92.766-157.686 64.244s-62.794-132.293-61.903-211.412l-0.003-0.002c-33.292 69.167-76.892 120.31-126.148 120.31-49.043 0-94.071-50.504-127.314-119.14 0.733 78.717-19.448 181.765-61.903 210.246-42.456 28.483-99.281-23.997-157.686-64.244 34.91 68.081 84.199 134.987 59.571 184.549-24.422 49.15-118.317 71.916-185.72 71.248 58.674 38.582 157.683 91.574 157.688 148.343 0.003 56.768-99.008 107.423-157.688 146.002 67.402-0.666 161.293 23.268 185.72 72.418 24.456 49.217-18.039 112.613-67.477 171.12 89.654-30.825 130.267-11.488 170.732 21.604h63.493c-85.474-70.83-144.093-215.652-144.093-383.112-0.003-237.242 117.832-429.837 262.807-429.837h0.003c144.975 0 262.807 192.601 262.807 429.837 0 167.462-58.619 312.282-144.093 383.112h54.553c39.695-29.239 79.603-51.319 179.384-18.579-52.467-60.526-84.398-124.925-59.937-174.147 24.512-49.331 113.298-73.266 181.047-72.418zM582.783 417.347c18.767-23.537 30.835-56.246 30.835-92.486-0.002-71.565-45.566-129.329-101.535-129.329-3.499 0-7.119-0.445-10.529 0l0.003 0.003c-51.106 6.641-91.005 62.231-91.005 129.329 0 37.16 12.731 70.345 32.338 93.989-106.282 19.996-114.318 199.093-114.318 324.826h73.705l19.556 262.418h187.272l17.298-262.418h69.948c0-126.084 2.53-308.333-113.567-326.331z" - ], - "isMulticolor": false, - "tags": [ - "aura" - ], - "defaultCode": 59668, - "grid": 0, - "attrs": [] - }, - { - "id": 21, - "paths": [ - "M601.143 332.030c21.608-26.892 35.49-64.323 35.49-105.755 0-81.833-52.44-147.874-116.855-147.874-4.034 0-8.192-0.5-12.132 0-58.818 7.598-104.754 71.17-104.754 147.874 0 42.496 14.666 80.426 37.21 107.475-122.328 22.859-131.582 227.644-131.582 371.392h84.835l22.515 300.032h215.542l19.918-300.032h80.52c0.002-144.155 2.91-352.535-130.706-373.112zM795.901 36.59c67.967 43.992 111.698 110.073 111.698 184.559 0 74.048-43.127 140.529-110.446 184.559 115.277-33.258 194.846-103.521 194.846-184.559-0.044-81.326-80.13-151.447-196.098-184.559zM713.055 358.986c86.081-24.852 145.508-77.324 145.508-137.837 0-60.767-59.817-113.13-146.415-137.837 50.803 32.858 83.407 82.199 83.407 137.837 0 55.309-32.214 104.978-82.501 137.837zM691.923 221.149c0 40.063-23.331 76.050-59.773 99.884 62.36-18.012 105.445-56.036 105.445-99.884 0-44.030-43.341-81.945-106.135-99.884 36.787 23.833 60.463 59.566 60.463 99.884zM131.116 221.149c0-74.486 43.729-140.567 111.698-184.559-115.968 33.113-196.096 103.233-196.096 184.559 0 81.037 79.569 151.301 194.846 184.559-67.321-44.030-110.448-110.512-110.448-184.559zM180.15 221.149c0 60.513 59.427 112.985 145.508 137.837-50.285-32.858-82.501-82.527-82.501-137.837 0-55.639 32.604-104.978 83.407-137.837-86.6 24.707-146.459 77.069-146.415 137.837zM406.521 321.032c-36.442-23.833-59.773-59.82-59.773-99.884 0-40.316 23.676-76.049 60.463-99.884-62.748 17.938-106.135 55.855-106.135 99.884 0 43.846 43.085 81.871 105.445 99.884z" - ], - "isMulticolor": false, - "tags": [ - "aware" - ], - "defaultCode": 59669, - "grid": 0, - "attrs": [] - }, - { - "id": 22, - "paths": [ - "M962.983 406.157c-56.772-218.542-251.195-360.764-461.335-354.158-176.812-10.565-355.741 64.348-464.344 206.222 52.167-44.424 114.146-76.601 180.184-94.989-124.506 107.398-189.246 278.16-159.327 450.56 2.185-56.519 15.628-111.333 38.596-161.32 0-0.020 0-0.040 0-0.060 2.296 102.997 36.934 204.3 104.401 286.742-76.844-153.689-44.798-391.185 83.908-483.684-1.429 1.036-2.848 2.088-4.257 3.154 23.338-11.927 48.141-21.675 74.26-28.884 214.135-59.164 433.838 72.548 491.249 293.276 36.727 141.292-2.209 284.787-91.108 385.39 5.393-6.104 10.601-12.365 15.621-18.775-107.306-20.211-106.468-126.036 28.016-229.841l-98.374-73.014c-3.925 11.565-8.103 22.374-12.494 32.46l-386.008-272.145c-37.368-21.583-61.038 22.483-31.488 41.492l392.691 276.867c-65.452 98.353-156.97 77.553-197.443-29.487-107.85 91.245-57.818 254.533 45.811 326.736 94.457 65.839 235.319 51.993 297.27-63.195 136.627-115.254 202.876-305.972 154.172-493.345zM514.816 52.95c0.49 0.042 0.982 0.087 1.472 0.129-0.49-0.042-0.98-0.087-1.472-0.129zM528.205 54.244c0.579 0.064 1.158 0.125 1.737 0.189-0.579-0.064-1.158-0.125-1.737-0.189zM542.171 55.942c0.343 0.047 0.688 0.089 1.032 0.136-0.345-0.049-0.689-0.090-1.032-0.136zM560.267 196.339c-2.88-1.498-5.771-2.955-8.674-4.384 2.903 1.429 5.796 2.886 8.674 4.384zM548.484 190.451c-2.097-1.012-4.198-2.011-6.306-2.988 2.107 0.977 4.208 1.976 6.306 2.988zM538.771 185.9c-2.153-0.977-4.314-1.931-6.479-2.871 2.165 0.94 4.325 1.894 6.479 2.871zM529.298 181.727c-3.112-1.325-6.234-2.62-9.368-3.872 3.134 1.25 6.254 2.547 9.368 3.872zM518.72 177.385c-2.772-1.098-5.555-2.167-8.343-3.206 2.788 1.039 5.568 2.108 8.343 3.206zM507.225 173.028c-2.204-0.803-4.412-1.591-6.626-2.358 2.214 0.766 4.422 1.554 6.626 2.358zM464.966 159.936c-2.363-0.607-4.728-1.196-7.098-1.765 2.369 0.569 4.735 1.158 7.098 1.765zM497.272 169.527c-2.349-0.793-4.703-1.564-7.063-2.317 2.359 0.755 4.713 1.524 7.063 2.317zM487.541 166.353c-3.241-1.014-6.489-1.996-9.746-2.935 3.258 0.939 6.507 1.919 9.746 2.935zM476.411 163.030c-2.809-0.8-5.624-1.574-8.445-2.319 2.819 0.746 5.635 1.519 8.445 2.319zM238.617 157.85c-7.059 1.631-14.078 3.418-21.054 5.359 6.976-1.941 13.996-3.728 21.054-5.359zM346.614 145.303c-3.253 0.012-6.504 0.060-9.755 0.137 3.249-0.077 6.502-0.125 9.755-0.137zM335.126 145.485c-3.049 0.084-6.095 0.194-9.142 0.336 3.045-0.141 6.092-0.253 9.142-0.336zM324.692 145.88c-7.114 0.348-14.219 0.85-21.305 1.511 7.086-0.661 14.189-1.163 21.305-1.511zM303.102 147.418c-3.358 0.315-6.711 0.669-10.061 1.054 3.348-0.385 6.701-0.738 10.061-1.054zM291.756 148.622c-3.258 0.383-6.51 0.795-9.758 1.243 3.248-0.448 6.502-0.862 9.758-1.243zM281.393 149.947c-7.138 0.994-14.252 2.143-21.335 3.45 7.083-1.307 14.195-2.458 21.335-3.45zM259.919 153.423c-3.385 0.626-6.761 1.29-10.13 1.988 3.368-0.696 6.745-1.362 10.13-1.988zM248.81 155.613c-3.385 0.706-6.763 1.444-10.131 2.222 3.37-0.778 6.748-1.516 10.131-2.222zM99.969 383.893c0.43-3.691 0.893-7.382 1.407-11.068-0.515 3.686-0.975 7.375-1.407 11.068zM97.349 414.906c0.055-1.032 0.102-2.066 0.164-3.099-0.062 1.032-0.109 2.065-0.164 3.099zM97.951 405.333c0.124-1.717 0.258-3.433 0.4-5.148-0.144 1.715-0.274 3.432-0.4 5.148zM98.828 394.78c0.211-2.247 0.447-4.494 0.689-6.74-0.243 2.245-0.477 4.493-0.689 6.74zM289.37 252.439c0.179-0.122 0.351-0.251 0.53-0.373h0.002c-0.179 0.122-0.353 0.251-0.532 0.373zM347.178 145.298c7.012-0.017 14.028 0.127 21.044 0.418-7.016-0.291-14.031-0.435-21.044-0.418zM454.807 157.445c-2.634-0.612-5.271-1.2-7.911-1.765 2.64 0.564 5.279 1.151 7.911 1.765zM444.883 155.24c-3.377-0.708-6.76-1.38-10.148-2.011 3.387 0.632 6.77 1.303 10.148 2.011zM433.5 153.009c-2.936-0.539-5.878-1.049-8.821-1.531 2.943 0.482 5.885 0.992 8.821 1.531zM422.013 151.057c-2.57-0.405-5.142-0.79-7.717-1.151 2.575 0.361 5.147 0.745 7.717 1.151zM411.686 149.541c-3.027-0.408-6.055-0.788-9.085-1.138 3.030 0.35 6.059 0.73 9.085 1.138zM401.631 148.286c-3.514-0.397-7.031-0.753-10.551-1.071 3.52 0.318 7.037 0.674 10.551 1.071zM390.157 147.14c-3.097-0.273-6.194-0.514-9.295-0.724 3.1 0.211 6.198 0.45 9.295 0.724zM378.634 146.27c-2.808-0.179-5.615-0.333-8.423-0.462 2.808 0.131 5.615 0.283 8.423 0.462zM583.278 63.108c0.666 0.142 1.329 0.296 1.993 0.442-0.664-0.146-1.329-0.3-1.993-0.442zM596.077 66.028c1.014 0.244 2.026 0.495 3.039 0.745-1.012-0.249-2.025-0.5-3.039-0.745zM609.001 69.314c1.083 0.289 2.163 0.576 3.244 0.872-1.081-0.296-2.163-0.582-3.244-0.872zM622.343 73.069c0.902 0.266 1.805 0.522 2.706 0.793-0.9-0.273-1.804-0.527-2.706-0.793zM650.489 82.235c0.843 0.301 1.68 0.624 2.522 0.929-0.842-0.305-1.68-0.626-2.522-0.929zM662.776 86.817c1.354 0.524 2.701 1.066 4.051 1.6-1.35-0.534-2.699-1.076-4.051-1.6zM675.042 91.748c1.489 0.619 2.977 1.248 4.462 1.882-1.486-0.634-2.972-1.263-4.462-1.882zM687.365 97.068c1.476 0.659 2.953 1.315 4.424 1.988-1.471-0.673-2.947-1.329-4.424-1.988zM700.041 102.937c1.268 0.607 2.542 1.2 3.807 1.819-1.265-0.619-2.538-1.211-3.807-1.819zM740.166 947.468c-1.17 0.669-2.336 1.344-3.514 2.003 1.178-0.658 2.342-1.334 3.514-2.003zM733.047 931.587c1.769-1.712 3.524-3.435 5.261-5.177-1.735 1.742-3.49 3.467-5.261 5.177zM714.208 948.703c-1.605 1.367-3.226 2.714-4.852 4.058 1.628-1.344 3.249-2.691 4.852-4.058zM755.167 908.454c-1.764 1.996-3.547 3.974-5.349 5.935 1.802-1.961 3.586-3.939 5.349-5.935zM749.67 914.549c-1.764 1.917-3.547 3.817-5.348 5.699 1.8-1.882 3.584-3.781 5.348-5.699zM744.048 920.538c-1.755 1.832-3.53 3.648-5.321 5.448 1.792-1.8 3.566-3.616 5.321-5.448zM732.448 932.171c-1.71 1.646-3.437 3.276-5.177 4.892 1.74-1.618 3.469-3.246 5.177-4.892zM726.474 937.808c-1.68 1.553-3.377 3.089-5.083 4.613 1.707-1.524 3.405-3.060 5.083-4.613zM720.396 943.318c-1.645 1.461-3.308 2.901-4.976 4.337 1.67-1.434 3.331-2.876 4.976-4.337zM695.038 964.059c-1.523 1.144-3.064 2.269-4.605 3.393 1.539-1.126 3.082-2.249 4.605-3.393zM707.917 953.955c-1.569 1.283-3.157 2.548-4.749 3.808 1.591-1.26 3.179-2.523 4.749-3.808zM701.53 959.071c-1.533 1.201-3.084 2.383-4.635 3.564 1.551-1.18 3.102-2.361 4.635-3.564zM697.722 689.806v0 0zM681.78 973.61c-2.237 1.543-4.489 3.064-6.76 4.563 3.305-1.25 6.586-2.54 9.85-3.86-3.263 1.32-6.544 2.61-9.85 3.86 2.271-1.499 4.524-3.020 6.76-4.563zM688.458 968.901c-1.578 1.136-3.172 2.25-4.769 3.363 1.596-1.113 3.192-2.225 4.769-3.363zM731.635 952.221c-1.4 0.761-2.799 1.521-4.21 2.267 1.411-0.746 2.809-1.508 4.21-2.267zM722.69 956.955c-1.549 0.798-3.104 1.59-4.665 2.371 1.561-0.781 3.116-1.573 4.665-2.371zM713.5 961.558c-1.687 0.822-3.382 1.628-5.080 2.429 1.7-0.8 3.393-1.608 5.080-2.429zM704.124 965.995c-1.851 0.85-3.713 1.678-5.578 2.505 1.864-0.825 3.728-1.655 5.578-2.505zM694.577 970.25c-2.127 0.917-4.268 1.807-6.413 2.694 2.145-0.887 4.288-1.777 6.413-2.694zM745.713 944.272c0.515-0.305 1.022-0.619 1.536-0.924-0.515 0.305-1.021 0.621-1.536 0.924zM769.81 929.021c0.243-0.164 0.489-0.323 0.73-0.489-0.241 0.164-0.487 0.325-0.73 0.489zM801.079 905.879c0.3-0.243 0.597-0.487 0.897-0.73-0.3 0.243-0.597 0.487-0.897 0.73zM777.338 923.81c0.47-0.333 0.944-0.661 1.414-0.994-0.47 0.333-0.944 0.661-1.414 0.994zM785.281 918.075c0.494-0.363 0.987-0.726 1.477-1.093-0.49 0.365-0.986 0.728-1.477 1.093zM793.219 912.081c0.44-0.34 0.88-0.683 1.32-1.024-0.44 0.343-0.88 0.684-1.32 1.024z" - ], - "isMulticolor": false, - "tags": [ - "axe-swing" - ], - "defaultCode": 59670, - "grid": 0, - "attrs": [] - }, - { - "id": 23, - "paths": [ - "M439.752 698.572l264.7-264.698-14.104-14.104 60.015-60.013-87.232-87.234-60.015 60.015-14.105-14.105-10.92 10.92c-37.888-75.191-30.805-166.974 37.033-282.885l-0.002-0.003c-329.678-132.36-685.271 269.162-571.215 583.966 106.837-62.11 217.013-88.614 299.25-66.146l-18.846 18.846 14.105 14.105-316.969 316.967v90.817h83.649l320.552-320.552 14.104 14.104zM978.495 409.839c-117.528 68.782-210.087 75.332-285.749 35.741l-232.906 232.906c24.15 82.545-2.302 194.184-65.31 302.568 314.802 114.055 716.326-241.539 583.966-571.215z" - ], - "isMulticolor": false, - "tags": [ - "axe" - ], - "defaultCode": 59671, - "grid": 0, - "attrs": [] - }, - { - "id": 24, - "paths": [ - "M515.129 53.945c-250.462 0-453.513 203.053-453.513 453.522s203.043 453.513 453.513 453.513 453.512-203.044 453.512-453.512-203.049-453.523-453.512-453.523zM779.030 798.845c69.42-102.113 82.247-245.712 29.11-379.984-19.859 41.358-62.13 69.913-111.075 69.913-68.012 0-123.147-55.134-123.147-123.146 0-38.818 17.979-73.421 46.045-95.992-18.429-8.857-31.645-26.828-33.807-48.070-10.126 11.946-25.232 19.536-42.119 19.536-30.488 0-55.204-24.715-55.204-55.202 0-18.193 8.805-34.327 22.383-44.384-31.799-8.712-64.126-13.133-96.141-12.968 33.167-9.132 68.088-14.037 104.159-14.037 216.209 0 391.49 175.284 391.49 391.499 0 116.515-50.918 221.121-131.693 292.836z" - ], - "isMulticolor": false, - "tags": [ - "ball" - ], - "defaultCode": 59672, - "grid": 0, - "attrs": [] - }, - { - "id": 25, - "paths": [ - "M495.843 777.749c130.325 120.277 302.711 198.098 492.342 207.008-8.613-190.080-86.786-362.038-207.018-492.354 15.789 62.725 23.617 131.032 21.748 203.935-11.169-11.236-22.376-22.473-33.688-33.789-31.186-31.186-62.681-62.117-94.367-92.686l53.201-106.795-108.46 54.031c-37.238-35.184-74.645-69.774-112.035-103.598l50.532-101.436-105.282 52.448c-37.32-33.022-74.531-65.189-111.447-96.313l42.813-85.939-91.331 45.499c-34.058-28.061-67.788-55.152-101.044-81.132l36.483-73.235-79.859 39.782c-35.543-27.055-70.454-52.735-104.537-76.838 23.991 33.889 49.53 68.558 76.411 103.822l-40.917 82.134 75.372-37.547c25.657 32.76 52.386 65.96 80.064 99.473l-47.054 94.454 88.966-44.319c30.299 35.817 61.589 71.907 93.695 108.11l-56.853 114.123 110.072-54.835c33.142 36.483 67.028 72.991 101.493 109.366l-54.467 109.336 107.757-53.681c43.097 44.547 86.941 88.762 131.236 132.345-76.595 2.873-148.427-4.759-213.826-21.369z" - ], - "isMulticolor": false, - "tags": [ - "barbed-arrow" - ], - "defaultCode": 59673, - "grid": 0, - "attrs": [] - }, - { - "id": 26, - "paths": [ - "M977.289 511.85c0-257.99-209.14-467.128-467.126-467.128s-467.124 209.14-467.124 467.128c0 90.997 26.046 175.899 71.052 247.708-22.485-52.227-34.96-109.778-34.96-170.25 0-238.024 192.956-430.979 430.975-430.979s430.977 192.955 430.977 430.979c0 60.707-12.577 118.47-35.227 170.859 45.24-71.937 71.433-157.063 71.433-248.317zM510.106 224.844l-135.208 395.585-203.457-56.584v392.633l145.104-153.319 75.21 57.917 27.69 120.919h181.383l27.701-120.972 75.136-57.862 145.101 153.316v-392.631l-203.45 56.581-135.21-395.581zM577.011 639.422v0c0.094 2.258 0.177 4.544 0.251 6.847 0.012 0.347 0.020 0.698 0.030 1.046 0.058 1.906 0.109 3.829 0.15 5.766 0.012 0.535 0.023 1.071 0.033 1.607 0.037 1.883 0.067 3.779 0.089 5.69 0.005 0.448 0.012 0.892 0.017 1.341 0.023 2.372 0.037 4.763 0.037 7.18h-135.031c0-2.345 0.013-4.664 0.035-6.968 0.007-0.68 0.017-1.353 0.025-2.030 0.020-1.655 0.045-3.301 0.077-4.933 0.013-0.723 0.028-1.443 0.045-2.162 0.037-1.679 0.082-3.346 0.13-5.001 0.017-0.581 0.032-1.166 0.050-1.744 0.072-2.22 0.15-4.422 0.242-6.6 9.363-221.585 124.434-221.333 133.82-0.040z" - ], - "isMulticolor": false, - "tags": [ - "barrier" - ], - "defaultCode": 59674, - "grid": 0, - "attrs": [] - }, - { - "id": 27, - "paths": [ - "M843.447 775.021l-31.159-78.095-238.559-214.851c117.55-57.344 251.473-51.33 284.749 104.43 183.187-144.942 144.574-360.096 7.14-553.992 34.783 99.731-37.968 199.089-148.67 102.605 51.385 112.249-57.379 182.222-131.84 116.881 35.097 113.958-33.329 155.045-103.665 146.96l-133.282-120.037c41.216-36.861 86.362-69.682 135.121-97.833l-85.126-85.127-118.946 118.946c-80.59-33.206-141.995-98.401-188.909-187.746l-61.802 61.806c79.040 39.931 146.038 96.72 187.744 188.914l-118.946 118.944 86.293 85.127c28.284-48.992 61.245-94.746 98.471-136.675l123.618 137.582c6.385 69.873-35.192 136.271-147.319 101.359 65.349 75.283-4.624 185.242-116.875 133.294 96.483 111.917-2.883 185.464-102.604 150.304 193.898 138.952 409.052 177.986 553.996-7.22l-0.002-0.007c-155.123-33.503-161.729-167.926-105.141-286.409l211.694 235.605 77.433 30.897c-22.015 13.743-47.269 24.25-75.794 31.485l286.441 110.995-110.995-286.451c-7.51 29.616-18.541 55.709-33.067 78.308z" - ], - "isMulticolor": false, - "tags": [ - "bat-sword" - ], - "defaultCode": 59675, - "grid": 0, - "attrs": [] - }, - { - "id": 28, - "paths": [ - "M946.36 83.462c-96.057 214.044-249.731 207.069-403.969 129.791l37.738-54.072c-24.775-37.484-69.871-64.654-111.516-76.848l-42.019 61.524c-35.132-24.011-69.513-49.773-102.428-75.388l-0.007 0.007c-3.961 6.034-7.641 11.869-11.080 17.538-67.845-38.349-157.474-55.396-258.245-55.396 99.809 40.31 178.113 93.819 213.146 184.851-2.030 27.668-0.309 55.657-0.309 89.808 11.86 6.567 23.398 13.461 34.574 20.65l-261.157 382.386 1.6 220.927 361.579-518.079c107.578 119.1 121.076 273.051-68.96 392.977 103.72 30.189 200.425 31.741 286.869 11.662l17.493-110.784 74.017 77.129c61.306-35.133 151.694-99.911 191.805-157.628l-64.083-110.751 109.616 30.319c67.267-103.392 74.48-327.516-4.664-460.623z" - ], - "isMulticolor": false, - "tags": [ - "battered-axe" - ], - "defaultCode": 59676, - "grid": 0, - "attrs": [] - }, - { - "id": 29, - "paths": [ - "M918.904 614.565c-4.806-2.053-9.864-3.267-15.108-3.717l0.459-1.061-148.834-64.515c-0.030-0.013-0.060-0.022-0.090-0.035l-234.957-101.84v121.504l180.824-33.822-6.067 23.452c0 0 0 0 0 0l-23.629 91.346-55.934 2.016c0 0 0 0 0 0.002l-95.194 3.429v165.756l98.685 42.774c0.002 0.002 0.003 0.002 0.007 0.003v0l148.836 64.512 0.162-0.374c3.528 2.887 7.395 5.259 11.603 7.056 45.641 19.491 113.809-35.559 152.259-122.954s32.621-174.042-13.021-193.533zM919.971 802.991c-17.298 39.32-46.379 64.764-64.953 56.833s-19.606-46.237-2.309-85.557c17.298-39.32 46.379-64.764 64.953-56.833s19.606 46.237 2.309 85.557zM333.41 70.051c-95.882 0-173.611 39.991-173.611 89.324 0 1.448 0.074 2.888 0.205 4.32v183.931c-25.398 22.269-49.697 56.131-67.482 97.161-36.929 85.199-32.115 169.77 10.287 191.206l-0.035 0.082 2.491 1.079c0.003 0.002 0.007 0.003 0.010 0.005v0l58.874 25.518v226.824h-0.005c0 0.068 0.005 0.135 0.005 0.202v2.526h0.085c2.806 47.43 78.487 85.478 171.342 85.478s168.537-38.048 171.342-85.478h0.092v-724.918h-0.68c0.448-2.614 0.69-5.26 0.69-7.935 0-49.332-77.729-89.324-173.611-89.324zM333.406 82.974c43.138 0 78.108 16.274 78.108 36.351s-34.97 36.349-78.108 36.349c-43.137 0-78.108-16.274-78.108-36.349s34.97-36.351 78.108-36.351zM240.435 609.723v0l-23.724-24.927 73.583-25.7-117.606-174.174 117.139-18.407 113.388 237.743-47.76 23.654 103.307 211.208-218.326-229.398z" - ], - "isMulticolor": false, - "tags": [ - "batteries" - ], - "defaultCode": 59677, - "grid": 0, - "attrs": [] - }, - { - "id": 30, - "paths": [ - "M402.012 31.992c-29.992 0-40.006 6.751-40.006 40.006v29.992h-90.002c-59.106 0-69.998 10.918-69.998 69.998v750.005c0 59.106 10.918 69.998 69.998 69.998h480c59.106 0 69.998-10.918 69.998-69.998v-750.005c0-59.106-10.918-69.998-69.998-69.998h-90.002v-29.992c0-33.23-9.989-40.006-40.006-40.006h-219.984zM272.004 242.012c0-80.013-9.989-69.998 69.998-69.998 40.006 0 310.011 0 340.003 0 80.013 0 69.998-9.989 69.998 69.998 0 40.006 0 570.002 0 610.008 0 80.013 9.989 69.998-69.998 69.998-40.006 0-299.997 0-340.003 0-80.013 0-69.998 9.989-69.998-69.998 0-40.031 0-570.027 0-610.008z" - ], - "isMulticolor": false, - "tags": [ - "battery-0" - ], - "defaultCode": 59678, - "grid": 0, - "attrs": [] - }, - { - "id": 31, - "paths": [ - "M402.012 31.992c-29.992 0-40.006 6.751-40.006 40.006v29.992h-90.002c-59.106 0-69.998 10.918-69.998 69.998v750.005c0 59.106 10.918 69.998 69.998 69.998h480c59.106 0 69.998-10.918 69.998-69.998v-750.005c0-59.106-10.918-69.998-69.998-69.998h-90.002v-29.992c0-33.23-9.989-40.006-40.006-40.006h-219.984zM272.004 242.012c0-80.013-9.989-69.998 69.998-69.998 40.006 0 310.011 0 340.003 0 80.013 0 69.998-9.989 69.998 69.998 0 40.006 0 570.002 0 610.008 0 80.013 9.989 69.998-69.998 69.998-40.006 0-299.997 0-340.003 0-80.013 0-69.998 9.989-69.998-69.998 0-40.031 0-570.027 0-610.008zM321.999 742.008h379.999c11.046 0 20 8.955 20 20v110c0 11.046-8.955 20-20 20h-379.999c-11.046 0-20-8.955-20-20v-110c0-11.045 8.955-20 20-20z" - ], - "isMulticolor": false, - "tags": [ - "battery-25" - ], - "defaultCode": 59679, - "grid": 0, - "attrs": [] - }, - { - "id": 32, - "paths": [ - "M402.012 31.992c-29.992 0-40.006 6.751-40.006 40.006v29.992h-90.002c-59.106 0-69.998 10.918-69.998 69.998v750.005c0 59.106 10.918 69.998 69.998 69.998h480c59.106 0 69.998-10.918 69.998-69.998v-750.005c0-59.106-10.918-69.998-69.998-69.998h-90.002v-29.992c0-33.23-9.989-40.006-40.006-40.006h-219.984zM272.004 242.012c0-80.013-9.989-69.998 69.998-69.998 40.006 0 310.011 0 340.003 0 80.013 0 69.998-9.989 69.998 69.998 0 40.006 0 570.002 0 610.008 0 80.013 9.989 69.998-69.998 69.998-40.006 0-299.997 0-340.003 0-80.013 0-69.998 9.989-69.998-69.998 0-40.031 0-570.027 0-610.008zM321.999 562.009h379.999c11.046 0 20 8.955 20 20v110c0 11.046-8.955 20-20 20h-379.999c-11.046 0-20-8.955-20-20v-110c0-11.046 8.955-20 20-20zM321.999 742.008h379.999c11.046 0 20 8.955 20 20v110c0 11.046-8.955 20-20 20h-379.999c-11.046 0-20-8.955-20-20v-110c0-11.045 8.955-20 20-20z" - ], - "isMulticolor": false, - "tags": [ - "battery-50" - ], - "defaultCode": 59680, - "grid": 0, - "attrs": [] - }, - { - "id": 33, - "paths": [ - "M402.012 31.992c-29.992 0-40.006 6.751-40.006 40.006v29.992h-90.002c-59.106 0-69.998 10.918-69.998 69.998v750.005c0 59.106 10.918 69.998 69.998 69.998h480c59.106 0 69.998-10.918 69.998-69.998v-750.005c0-59.106-10.918-69.998-69.998-69.998h-90.002v-29.992c0-33.23-9.989-40.006-40.006-40.006h-219.984zM272.004 242.012c0-80.013-9.989-69.998 69.998-69.998 40.006 0 310.011 0 340.003 0 80.013 0 69.998-9.989 69.998 69.998 0 40.006 0 570.002 0 610.008 0 80.013 9.989 69.998-69.998 69.998-40.006 0-299.997 0-340.003 0-80.013 0-69.998 9.989-69.998-69.998 0-40.031 0-570.027 0-610.008zM321.999 382.009h379.999c11.046 0 20 8.955 20 20v110c0 11.046-8.955 20-20 20h-379.999c-11.046 0-20-8.955-20-20v-110c0-11.046 8.955-20 20-20zM321.999 562.009h379.999c11.046 0 20 8.955 20 20v110c0 11.046-8.955 20-20 20h-379.999c-11.046 0-20-8.955-20-20v-110c0-11.046 8.955-20 20-20zM321.999 742.008h379.999c11.046 0 20 8.955 20 20v110c0 11.046-8.955 20-20 20h-379.999c-11.046 0-20-8.955-20-20v-110c0-11.045 8.955-20 20-20z" - ], - "isMulticolor": false, - "tags": [ - "battery-75" - ], - "defaultCode": 59681, - "grid": 0, - "attrs": [] - }, - { - "id": 34, - "paths": [ - "M402.012 31.992c-29.992 0-40.006 6.751-40.006 40.006v29.992h-90.002c-59.106 0-69.998 10.918-69.998 69.998v750.005c0 59.106 10.918 69.998 69.998 69.998h480c59.106 0 69.998-10.918 69.998-69.998v-750.005c0-59.106-10.918-69.998-69.998-69.998h-90.002v-29.992c0-33.23-9.989-40.006-40.006-40.006h-219.984zM272.004 242.012c0-80.013-9.989-69.998 69.998-69.998 40.006 0 310.011 0 340.003 0 80.013 0 69.998-9.989 69.998 69.998 0 40.006 0 570.002 0 610.008 0 80.013 9.989 69.998-69.998 69.998-40.006 0-299.997 0-340.003 0-80.013 0-69.998 9.989-69.998-69.998 0-40.031 0-570.027 0-610.008zM321.999 202.009h379.999c11.046 0 20 8.955 20 20v110c0 11.046-8.955 20-20 20h-379.999c-11.046 0-20-8.955-20-20v-110c0-11.046 8.955-20 20-20zM321.999 382.009h379.999c11.046 0 20 8.955 20 20v110c0 11.046-8.955 20-20 20h-379.999c-11.046 0-20-8.955-20-20v-110c0-11.046 8.955-20 20-20zM321.999 562.009h379.999c11.046 0 20 8.955 20 20v110c0 11.046-8.955 20-20 20h-379.999c-11.046 0-20-8.955-20-20v-110c0-11.046 8.955-20 20-20zM321.999 742.008h379.999c11.046 0 20 8.955 20 20v110c0 11.046-8.955 20-20 20h-379.999c-11.046 0-20-8.955-20-20v-110c0-11.045 8.955-20 20-20z" - ], - "isMulticolor": false, - "tags": [ - "battery-100" - ], - "defaultCode": 59682, - "grid": 0, - "attrs": [] - }, - { - "id": 35, - "paths": [ - "M460.44 31.992c-28.486 0-103.128 23.893-103.128 53.434v53.434h-102.174c-56.973 0-103.128 47.787-103.128 106.867v639.398c0 59.106 46.155 106.867 103.128 106.867h513.757c56.973 0 103.128-47.787 103.128-106.867v-639.373c0-59.106-46.155-106.867-103.128-106.867h-102.174v-53.434c0-29.54-74.642-53.434-103.128-53.434l-103.153-0.025zM511.992 245.752v266.24h205.302l-205.302 373.133v-266.24h-205.302l205.302-373.133z" - ], - "isMulticolor": false, - "tags": [ - "battery-black" - ], - "defaultCode": 59683, - "grid": 0, - "attrs": [] - }, - { - "id": 36, - "paths": [ - "M402.012 31.992c-29.992 0-40.006 6.751-40.006 40.006v29.992h-90.002c-59.106 0-69.998 10.918-69.998 69.998v750.005c0 59.106 10.918 69.998 69.998 69.998h480c59.106 0 69.998-10.918 69.998-69.998v-750.005c0-59.106-10.918-69.998-69.998-69.998h-90.002v-29.992c0-33.23-9.989-40.006-40.006-40.006h-219.984zM272.004 242.012c0-80.013-9.989-69.998 69.998-69.998 40.006 0 310.011 0 340.003 0 80.013 0 69.998-9.989 69.998 69.998 0 40.006 0 570.002 0 610.008 0 80.013 9.989 69.998-69.998 69.998-40.006 0-299.997 0-340.003 0-80.013 0-69.998 9.989-69.998-69.998 0-40.031 0-570.027 0-610.008zM341.999 472.009h340c11.046 0 20 8.955 20 20v100.001c0 11.046-8.955 20-20 20h-340c-11.046 0-20-8.955-20-20v-100.001c0-11.046 8.955-20 20-20z" - ], - "isMulticolor": false, - "tags": [ - "battery-negative" - ], - "defaultCode": 59684, - "grid": 0, - "attrs": [] - }, - { - "id": 37, - "paths": [ - "M402.012 31.992c-29.992 0-40.006 6.751-40.006 40.006v29.992h-90.002c-59.106 0-69.998 10.918-69.998 69.998v750.005c0 59.106 10.918 69.998 69.998 69.998h480c59.106 0 69.998-10.918 69.998-69.998v-750.005c0-59.106-10.918-69.998-69.998-69.998h-90.002v-29.992c0-33.23-9.989-40.006-40.006-40.006h-219.984zM272.004 242.012c0-80.013-9.989-69.998 69.998-69.998 40.006 0 310.011 0 340.003 0 80.013 0 69.998-9.989 69.998 69.998 0 40.006 0 570.002 0 610.008 0 80.013 9.989 69.998-69.998 69.998-40.006 0-299.997 0-340.003 0-80.013 0-69.998 9.989-69.998-69.998 0-40.031 0-570.027 0-610.008zM341.999 472.009h340c11.046 0 20 8.955 20 20v100.001c0 11.046-8.955 20-20 20h-340c-11.046 0-20-8.955-20-20v-100.001c0-11.046 8.955-20 20-20zM462 352.008h100.001c11.046 0 20 8.955 20 20v340c0 11.046-8.955 20-20 20h-100.001c-11.046 0-20-8.955-20-20v-340c0-11.045 8.955-20 20-20z" - ], - "isMulticolor": false, - "tags": [ - "battery-positive" - ], - "defaultCode": 59685, - "grid": 0, - "attrs": [] - }, - { - "id": 38, - "paths": [ - "M452.007 31.992c-49.87 0-90.002 26.755-90.002 60.009v29.992h-90.002c-59.106 0-119.994 60.913-119.994 119.994v630.011c0 59.106 60.913 119.994 119.994 119.994h480c59.106 0 119.994-60.913 119.994-119.994v-630.011c0-59.106-60.913-119.994-119.994-119.994h-90.002v-29.992c0-33.23-40.132-60.009-90.002-60.009h-119.994zM272.004 242.012h480v630.011h-480v-630.011zM511.992 301.996v209.995h-150.011l150.011 299.997v-209.995h150.011l-150.011-299.997z" - ], - "isMulticolor": false, - "tags": [ - "battery-white" - ], - "defaultCode": 59686, - "grid": 0, - "attrs": [] - }, - { - "id": 39, - "paths": [ - "M998.068 83.52c-168.34 35.635-310.788 173.838-379.114 343 99.403 79.366 66.806 218.453-30.93 268.853-21.135-13.908-46.419-22.025-73.609-22.025-27.195 0-52.483 8.118-73.618 22.030-97.739-50.4-130.337-189.49-30.934-268.859-68.326-169.16-210.772-307.364-379.112-342.998 83.338 85.081 105.083 256.885 26.871 349 127.427 21.441 151.153 122.412 128.678 274.532 66.801-41.693 149.033-24.369 199.837 61.226-3.78 12.395-5.83 25.545-5.83 39.176 0 74.064 60.043 134.107 134.107 134.107s134.107-60.043 134.107-134.107c0-13.634-2.050-26.789-5.833-39.186 50.804-85.588 133.033-102.911 199.832-61.218-22.476-152.12 1.25-253.090 128.678-274.532-78.213-92.113-56.469-263.918 26.87-348.999zM554.527 849.38c-43.262 0-78.333-35.072-78.333-78.333s35.072-78.333 78.333-78.333c9.958 0 19.473 1.878 28.236 5.267 0 0 0 0-0.002 0 3.647 1.41 7.161 3.087 10.522 5.003 0.035 0.020 0.070 0.040 0.104 0.060 3.286 1.881 6.421 3.994 9.386 6.316 0.112 0.089 0.226 0.175 0.337 0.266 0.693 0.55 1.38 1.108 2.053 1.679 0.045 0.038 0.089 0.077 0.132 0.115 2.038 1.736 3.982 3.578 5.833 5.511 0.19 0.199 0.383 0.398 0.571 0.598 0.516 0.551 1.024 1.109 1.523 1.674 0.215 0.244 0.428 0.493 0.641 0.74 1.535 1.779 2.988 3.628 4.362 5.543 0.261 0.364 0.523 0.725 0.778 1.094 0.356 0.515 0.703 1.036 1.047 1.56 0.281 0.428 0.556 0.859 0.829 1.293 0.314 0.499 0.63 1.001 0.932 1.507 0.336 0.563 0.66 1.136 0.982 1.707 0.384 0.68 0.757 1.366 1.121 2.058 0.331 0.63 0.66 1.26 0.974 1.899 0.222 0.453 0.434 0.914 0.65 1.371 0.277 0.595 0.55 1.193 0.812 1.796 0.195 0.448 0.389 0.895 0.576 1.348 0.297 0.718 0.58 1.442 0.855 2.17 0.129 0.339 0.266 0.673 0.389 1.014 0.378 1.039 0.73 2.088 1.064 3.147 0.117 0.368 0.222 0.742 0.332 1.113 0.227 0.758 0.446 1.52 0.65 2.289 0.109 0.409 0.215 0.82 0.317 1.233 0.2 0.805 0.386 1.617 0.561 2.432 0.074 0.339 0.152 0.677 0.221 1.017 0.229 1.139 0.436 2.287 0.615 3.445 0.038 0.244 0.065 0.491 0.1 0.737 0.137 0.939 0.257 1.883 0.361 2.833 0.042 0.388 0.079 0.777 0.114 1.166 0.080 0.857 0.145 1.717 0.197 2.583 0.022 0.369 0.048 0.735 0.065 1.106 0.055 1.211 0.092 2.426 0.092 3.65 0 1.051-0.038 2.093-0.079 3.134-0.025 0.566-0.048 1.133-0.084 1.697-2.501 41.005-36.535 73.497-78.173 73.497z" - ], - "isMulticolor": false, - "tags": [ - "batwings" - ], - "defaultCode": 59687, - "grid": 0, - "attrs": [] - }, - { - "id": 40, - "paths": [ - "M950.514 707.556c35.787-99.373 23.567-201.818-41.884-267.271-20.502-20.498-45.477-35.89-72.002-46.108 51.227 68.352 53.607 167.477 11.712 260.198 2.588-5.726 5.008-11.476 7.257-17.241l-90.257-66.963c31.48-83.557 21.955-170.32-33.141-225.415-16.975-16.969-37.652-29.718-59.613-38.169 40.542 54.085 44.134 131.451 14.084 205.216l-74.785-55.485c-0.003 0.007-0.005 0.013-0.008 0.020 28.913-71.665 21.753-146.972-25.612-194.333-14.221-14.221-31.54-24.898-49.937-31.983 37.96 50.654 37.247 125.671 1.721 193.599 2.82-5.394 5.422-10.831 7.803-16.297l-73.985-54.892c22.042-55.983 16.16-114.548-20.802-151.517-11.202-11.197-24.848-19.615-39.338-25.199 29.597 39.495 29.328 97.783 2.192 150.855 2.152-4.21 4.139-8.453 5.952-12.716l-75.15-55.755c21.514-46.873 18.181-97.414-13-128.586-8.904-8.887-19.722-15.592-31.238-20.016 23.138 30.87 23.305 76.209 2.748 117.822l-60.892-45.178c-0.007 0.012-0.013 0.023-0.018 0.033 20.772-38.648 19.591-82-6.458-108.053-6.968-6.947-15.449-12.189-24.446-15.666 19.459 25.969 18.158 65.015-1.731 99.46l-59.18-43.903c1.545-5.209 2.387-10.719 2.387-16.429 0-31.879-25.844-57.723-57.722-57.723s-57.722 25.849-57.722 57.723 25.844 57.717 57.722 57.717c5.451 0 10.716-0.772 15.716-2.183l42.694 57.912c-32.775 16.474-68.625 16.493-92.974-1.761l-0.003 0.008c3.466 9.006 8.695 17.488 15.657 24.447 24.626 24.628 64.684 27.008 101.648 9.659-0.117 0.055-0.232 0.117-0.349 0.172l45.996 62.392c-41.052 19.56-85.426 19.033-115.797-3.727l-0.007 0.007c4.437 11.506 11.12 22.343 20.009 31.24 30.693 30.695 80.134 34.375 126.378 13.965l57.040 77.371c2.578-1.164 5.147-2.399 7.704-3.687-52.802 26.627-110.604 26.704-149.85-2.708l-0.005 0.003c5.579 14.5 13.997 28.142 25.196 39.348 37.826 37.826 98.267 43.102 155.416 19.217l53.002 71.892c1.766-0.742 3.526-1.512 5.285-2.299-64.073 28.682-132.445 26.896-179.654-8.481 7.083 18.394 17.76 35.708 31.97 49.924 46.65 46.653 120.404 54.307 191.090 26.903l55.222 74.907c2.404-0.944 4.804-1.923 7.201-2.937-74.869 31.701-153.929 28.674-208.929-12.544 8.453 21.967 21.198 42.639 38.17 59.611 54.252 54.255 139.209 64.332 221.577 34.57l66.66 90.421c2.746-1.031 5.488-2.11 8.225-3.217-88.841 35.925-181.903 31.457-247.033-17.353v0.005c10.213 26.525 25.607 51.506 46.108 72.004 64.455 64.449 164.775 77.274 262.714 43.477-0.010 0.003-0.022 0.008-0.032 0.012l23.504 31.881h256.548v-255.382l-30.755-22.819zM946.966 716.979c-0.15 0.383-0.306 0.765-0.458 1.148 0.152-0.383 0.307-0.765 0.458-1.148zM943.154 726.318c-0.192 0.453-0.381 0.907-0.575 1.36 0.195-0.454 0.384-0.907 0.575-1.36zM934.217 745.875c-0.271 0.551-0.545 1.101-0.819 1.652 0.272-0.55 0.548-1.101 0.819-1.652zM929.303 755.533c-0.177 0.336-0.347 0.673-0.526 1.009 0.177-0.336 0.349-0.673 0.526-1.009zM923.848 765.551c-0.204 0.362-0.418 0.723-0.623 1.086 0.207-0.362 0.419-0.723 0.623-1.086zM918.742 774.326c-0.374 0.628-0.75 1.255-1.129 1.881 0.379-0.626 0.755-1.255 1.129-1.881zM906.594 793.428c-0.424 0.628-0.859 1.255-1.286 1.883 0.429-0.628 0.862-1.253 1.286-1.883zM900.505 802.185c-0.438 0.613-0.87 1.228-1.311 1.839 0.441-0.611 0.874-1.226 1.311-1.839zM893.035 812.348c-0.227 0.299-0.463 0.595-0.692 0.894 0.229-0.299 0.464-0.595 0.692-0.894zM886.664 820.5c-0.583 0.73-1.171 1.458-1.761 2.185 0.59-0.727 1.178-1.455 1.761-2.185zM879.357 829.39c-0.396 0.469-0.783 0.942-1.183 1.412 0.399-0.468 0.787-0.942 1.183-1.412zM774.568 762.857c-2.187 2.289-4.393 4.567-6.647 6.821-2.315 2.315-4.656 4.582-7.008 6.826 2.352-2.243 4.692-4.51 7.006-6.826 2.253-2.253 4.464-4.532 6.648-6.821zM848.126 654.851c-2.578 5.683-5.319 11.341-8.227 16.965 2.908-5.624 5.65-11.284 8.227-16.965zM839.703 672.188c-1.38 2.661-2.798 5.315-4.253 7.961 1.455-2.646 2.873-5.3 4.253-7.961zM835.116 680.763c-3.004 5.441-6.166 10.845-9.482 16.207 3.314-5.362 6.478-10.766 9.482-16.207zM824.898 698.156c-1.574 2.524-3.176 5.040-4.818 7.544 1.642-2.502 3.244-5.018 4.818-7.544zM819.883 706.005c-1.734 2.639-3.51 5.265-5.32 7.88 1.809-2.614 3.587-5.24 5.32-7.88zM813.774 715.009c-1.532 2.195-3.090 4.38-4.676 6.557 1.584-2.177 3.144-4.362 4.676-6.557zM807.998 723.074c-3.663 4.978-7.469 9.904-11.413 14.774 3.944-4.869 7.751-9.796 11.413-14.774zM795.132 739.629c-1.654 2.018-3.331 4.024-5.033 6.020 1.702-1.996 3.379-4.002 5.033-6.020zM789.016 746.927c-2.031 2.362-4.098 4.709-6.196 7.041 2.098-2.332 4.164-4.679 6.196-7.041zM781.486 755.43c-1.714 1.884-3.45 3.759-5.207 5.621 1.757-1.863 3.493-3.737 5.207-5.621zM755.326 593.731c0.027-0.055 0.052-0.109 0.077-0.164-0.025 0.053-0.050 0.109-0.077 0.164zM759.143 778.178c-2.046 1.929-4.104 3.834-6.177 5.71 2.073-1.876 4.131-3.78 6.177-5.71zM751.933 784.83c-2.389 2.147-4.794 4.251-7.216 6.328 2.422-2.076 4.829-4.183 7.216-6.328zM743.070 792.553c-2.016 1.711-4.044 3.396-6.082 5.058 2.038-1.66 4.066-3.348 6.082-5.058zM735.417 798.892c-2.464 1.988-4.941 3.942-7.434 5.858 2.492-1.916 4.97-3.87 7.434-5.858zM726.776 805.664c-2.155 1.644-4.32 3.257-6.496 4.848 2.177-1.59 4.342-3.204 6.496-4.848zM718.496 811.813c-2.559 1.849-5.128 3.672-7.714 5.446 2.586-1.774 5.155-3.598 7.714-5.446zM710.773 817.266c-2.563 1.759-5.14 3.468-7.726 5.153 2.586-1.686 5.163-3.396 7.726-5.153zM701.258 823.578c-2.407 1.55-4.823 3.075-7.248 4.564 2.426-1.488 4.841-3.014 7.248-4.564zM693.402 828.518c-2.654 1.62-5.322 3.197-7.997 4.742 2.676-1.545 5.342-3.12 7.997-4.742zM693.474 683.046c0.531-0.556 1.054-1.116 1.58-1.675-0.528 0.56-1.051 1.119-1.58 1.675zM699.521 676.54c0.498-0.548 0.999-1.094 1.492-1.645-0.493 0.551-0.994 1.098-1.492 1.645zM712.061 661.965c0.423-0.52 0.839-1.041 1.258-1.562-0.419 0.521-0.835 1.042-1.258 1.562zM717.555 655.033c0.359-0.466 0.723-0.929 1.081-1.397-0.357 0.468-0.72 0.93-1.081 1.397zM728.619 639.901c0.271-0.393 0.538-0.787 0.807-1.179-0.269 0.393-0.535 0.787-0.807 1.179zM733.563 632.528c0.19-0.292 0.384-0.583 0.573-0.875-0.189 0.292-0.383 0.583-0.573 0.875zM743.063 617.078c0.129-0.222 0.254-0.443 0.381-0.665-0.127 0.222-0.254 0.444-0.381 0.665zM747.415 609.308c0.045-0.084 0.092-0.169 0.139-0.252-0.047 0.084-0.094 0.169-0.139 0.252zM615.705 617.465c1.817-1.817 3.602-3.655 5.367-5.501-1.766 1.846-3.548 3.683-5.367 5.501-1.866 1.868-3.752 3.697-5.648 5.506 1.896-1.809 3.782-3.64 5.648-5.506zM686.665 511.818c-2.836 6.959-5.97 13.887-9.403 20.759 3.431-6.872 6.567-13.8 9.403-20.759zM677.178 532.746c-3.386 6.772-7.061 13.489-11.022 20.133 3.957-6.643 7.636-13.36 11.022-20.133zM665.809 553.458c-2.616 4.367-5.352 8.703-8.215 12.998 2.863-4.295 5.601-8.63 8.215-12.998zM657.223 567.009c-1.27 1.898-2.564 3.785-3.882 5.666 1.316-1.881 2.613-3.77 3.882-5.666zM652.627 573.692c-2.91 4.121-5.932 8.202-9.071 12.238 3.139-4.036 6.162-8.117 9.071-12.238zM642.696 587.024c-1.283 1.635-2.584 3.262-3.906 4.881 1.321-1.619 2.623-3.246 3.906-4.881zM637.688 593.257c-3.201 3.884-6.508 7.721-9.924 11.508 3.416-3.787 6.724-7.624 9.924-11.508zM626.493 606.158c-1.335 1.463-2.686 2.917-4.053 4.363 1.366-1.447 2.718-2.902 4.053-4.363zM681.13 695.381c-0.555 0.528-1.111 1.049-1.667 1.572 0.556-0.523 1.113-1.046 1.667-1.572zM674.296 701.719c-0.476 0.431-0.949 0.867-1.427 1.293 0.478-0.428 0.95-0.864 1.427-1.293zM666.308 708.747c-0.327 0.279-0.658 0.55-0.987 0.827 0.329-0.277 0.66-0.548 0.987-0.827zM659.598 714.309c-0.575 0.466-1.151 0.93-1.729 1.392 0.578-0.461 1.154-0.925 1.729-1.392zM651.875 720.395c-0.259 0.199-0.516 0.403-0.775 0.6 0.261-0.199 0.516-0.403 0.775-0.6zM644.193 726.108c-0.478 0.344-0.957 0.682-1.435 1.024 0.478-0.342 0.957-0.678 1.435-1.024zM637.042 731.129c-0.53 0.362-1.057 0.727-1.589 1.086 0.531-0.359 1.059-0.723 1.589-1.086zM621.259 741.306c-0.533 0.322-1.067 0.641-1.602 0.962 0.533-0.321 1.067-0.638 1.602-0.962zM606.499 468.73c-0.007 0.013-0.013 0.027-0.020 0.042 0.008-0.013 0.013-0.027 0.020-0.042zM603.672 474.613c-0.097 0.195-0.192 0.389-0.291 0.585 0.097-0.194 0.194-0.389 0.291-0.585zM600.403 481.011c-0.010 0.020-0.022 0.042-0.032 0.062 0.010-0.020 0.020-0.042 0.032-0.062zM593.711 492.942c-0.154 0.259-0.311 0.518-0.466 0.777 0.155-0.259 0.312-0.516 0.466-0.777zM590.23 498.645c-0.217 0.347-0.433 0.693-0.651 1.039 0.217-0.346 0.434-0.693 0.651-1.039zM586.202 504.899c-0.085 0.13-0.169 0.261-0.256 0.389 0.087-0.13 0.17-0.261 0.256-0.389zM582.040 511.008c-0.12 0.172-0.246 0.344-0.368 0.516 0.12-0.172 0.246-0.344 0.368-0.516zM578.182 516.368c-0.352 0.478-0.708 0.954-1.064 1.432 0.356-0.478 0.712-0.954 1.064-1.432zM574.065 521.822c-0.379 0.491-0.757 0.984-1.139 1.473 0.383-0.489 0.76-0.982 1.139-1.473zM569.194 527.966c-0.16 0.197-0.317 0.398-0.478 0.595 0.16-0.197 0.317-0.398 0.478-0.595zM548.807 550.526c-0.007 0.007-0.013 0.013-0.020 0.020-0.005 0.005-0.012 0.012-0.017 0.017 0.005-0.005 0.012-0.012 0.017-0.017 0.007-0.007 0.013-0.013 0.020-0.020zM564.354 533.751c-0.389 0.453-0.787 0.902-1.179 1.353 0.393-0.451 0.79-0.9 1.179-1.353zM559.852 538.863c-0.509 0.568-1.024 1.133-1.54 1.697 0.516-0.565 1.031-1.129 1.54-1.697zM555.043 544.083c-0.489 0.518-0.974 1.039-1.467 1.555 0.493-0.516 0.977-1.037 1.467-1.555zM608.625 624.326c-1.557 1.47-3.124 2.922-4.699 4.355 1.575-1.432 3.142-2.885 4.699-4.355zM602.768 629.737c-1.944 1.752-3.902 3.476-5.872 5.172 1.971-1.696 3.927-3.419 5.872-5.172zM596.052 635.625c-1.712 1.463-3.436 2.903-5.168 4.323 1.732-1.42 3.456-2.862 5.168-4.323zM589.498 641.079c-1.948 1.58-3.906 3.14-5.877 4.667 1.973-1.527 3.929-3.087 5.877-4.667zM583.513 645.833c-2.083 1.612-4.181 3.187-6.288 4.739 2.106-1.552 4.205-3.127 6.288-4.739zM576.139 651.363c-1.809 1.321-3.627 2.619-5.452 3.896 1.827-1.276 3.643-2.576 5.452-3.896zM569.7 655.95c-4.271 2.962-8.583 5.798-12.931 8.514 4.348-2.715 8.661-5.553 12.931-8.514zM555.768 665.087c-2.133 1.321-4.273 2.621-6.423 3.882 2.15-1.261 4.29-2.561 6.423-3.882zM549.313 668.989c-2.292 1.345-4.592 2.654-6.901 3.932 2.309-1.278 4.611-2.588 6.901-3.932zM493.028 485.989c-1.432 1.495-2.877 2.982-4.35 4.455-1.507 1.507-3.029 2.983-4.559 4.447 1.528-1.463 3.050-2.942 4.557-4.448 1.473-1.473 2.92-2.958 4.352-4.453zM537.942 423.827c-2.805 5.352-5.825 10.659-9.061 15.908 3.234-5.247 6.256-10.556 9.061-15.908zM528.663 440.088c-0.986 1.594-1.991 3.181-3.017 4.761 1.024-1.582 2.031-3.169 3.017-4.761zM525.292 445.397c-3.304 5.072-6.812 10.081-10.522 15.016 3.708-4.935 7.218-9.944 10.522-15.016zM514.096 461.301c-1.022 1.348-2.060 2.689-3.11 4.026 1.052-1.336 2.090-2.678 3.11-4.026zM510.288 466.214c-2.541 3.201-5.167 6.368-7.881 9.493 2.715-3.125 5.341-6.293 7.881-9.493zM501.73 476.479c-1.109 1.268-2.232 2.531-3.369 3.785 1.136-1.256 2.26-2.517 3.369-3.785zM497.285 481.44c-1.084 1.183-2.183 2.36-3.293 3.53 1.109-1.169 2.208-2.347 3.293-3.53zM543.754 555.452c-0.513 0.489-1.029 0.971-1.544 1.455 0.515-0.484 1.031-0.966 1.544-1.455zM538.509 560.335c-0.545 0.496-1.089 0.992-1.635 1.483 0.546-0.489 1.091-0.987 1.635-1.483zM532.468 565.694c-0.271 0.234-0.538 0.474-0.81 0.707 0.272-0.234 0.54-0.473 0.81-0.707zM526.398 570.796c-0.486 0.398-0.976 0.785-1.463 1.179 0.486-0.394 0.977-0.782 1.463-1.179zM520.952 575.131c-0.563 0.439-1.128 0.875-1.692 1.31 0.565-0.433 1.129-0.87 1.692-1.31zM514.957 579.676c-0.386 0.284-0.768 0.576-1.154 0.859 0.386-0.282 0.768-0.573 1.154-0.859zM508.298 584.457c-0.388 0.271-0.78 0.531-1.169 0.798 0.389-0.267 0.78-0.53 1.169-0.798zM502.684 588.254c-0.548 0.362-1.098 0.722-1.649 1.079 0.551-0.357 1.101-0.717 1.649-1.079zM496.657 592.124c-0.436 0.272-0.869 0.55-1.305 0.819 0.436-0.269 0.87-0.546 1.305-0.819zM489.607 596.401c-0.185 0.109-0.371 0.212-0.556 0.319 0.184-0.109 0.371-0.212 0.556-0.319zM469.794 357.491c0.018-0.042 0.035-0.084 0.053-0.125-0.018 0.042-0.035 0.084-0.053 0.125zM483.042 495.912c-1.199 1.136-2.407 2.26-3.62 3.369 1.213-1.109 2.419-2.232 3.62-3.369zM478.248 500.353c-1.442 1.305-2.892 2.593-4.35 3.859 1.458-1.266 2.908-2.554 4.35-3.859zM473.601 504.473c-1.592 1.378-3.196 2.73-4.808 4.064 1.612-1.335 3.216-2.686 4.808-4.064zM467.791 509.354c-1.275 1.044-2.552 2.073-3.839 3.089 1.286-1.014 2.566-2.045 3.839-3.089zM462.681 513.443c-1.37 1.071-2.746 2.125-4.129 3.164 1.383-1.039 2.76-2.095 4.129-3.164zM457.832 517.152c-1.657 1.236-3.324 2.451-4.998 3.642 1.674-1.191 3.341-2.404 4.998-3.642zM452.109 521.303c-1.413 0.999-2.83 1.98-4.253 2.945 1.423-0.966 2.841-1.948 4.253-2.945zM446.609 525.086c-1.376 0.924-2.76 1.833-4.146 2.725 1.388-0.892 2.77-1.801 4.146-2.725zM441.561 528.397c-1.729 1.104-3.465 2.188-5.207 3.246 1.742-1.057 3.476-2.142 5.207-3.246zM436.256 531.702c-1.657 1.006-3.323 1.983-4.991 2.945 1.669-0.962 3.334-1.941 4.991-2.945zM430.147 535.285c-1.427 0.814-2.855 1.61-4.288 2.392 1.433-0.782 2.863-1.58 4.288-2.392zM424.892 538.205c-3.508 1.894-7.036 3.695-10.581 5.402 3.545-1.707 7.073-3.508 10.581-5.402zM425.414 424.25c0.336-0.352 0.667-0.707 1.001-1.061-0.332 0.352-0.663 0.708-1.001 1.061zM429.241 420.141c0.352-0.388 0.705-0.773 1.054-1.163-0.349 0.389-0.702 0.775-1.054 1.163zM433.367 415.492c0.174-0.202 0.352-0.403 0.526-0.605-0.172 0.202-0.352 0.403-0.526 0.605zM437.442 410.651c0.194-0.237 0.383-0.476 0.575-0.715-0.192 0.239-0.381 0.478-0.575 0.715zM440.845 406.381c0.277-0.356 0.553-0.713 0.827-1.069-0.274 0.356-0.55 0.713-0.827 1.069zM444.354 401.757c0.189-0.254 0.379-0.508 0.566-0.763-0.185 0.254-0.378 0.508-0.566 0.763zM451.165 392.033c0.157-0.239 0.312-0.478 0.469-0.717-0.157 0.239-0.312 0.478-0.469 0.717zM454.175 387.353c0.135-0.215 0.271-0.429 0.404-0.645-0.132 0.215-0.269 0.429-0.404 0.645zM460.135 377.26c0.010-0.018 0.020-0.038 0.032-0.057-0.010 0.018-0.022 0.037-0.032 0.057zM462.673 372.539c0.070-0.135 0.14-0.271 0.212-0.406-0.072 0.135-0.142 0.271-0.212 0.406zM374.325 380.743c-0.045 0.045-0.087 0.092-0.132 0.137-0.042 0.042-0.085 0.080-0.127 0.122 0.042-0.042 0.085-0.082 0.127-0.124 0.045-0.045 0.087-0.090 0.132-0.135zM413.496 327.398c-2.023 3.912-4.193 7.794-6.508 11.638 2.314-3.845 4.489-7.726 6.508-11.638zM405.755 341.062c-0.667 1.079-1.333 2.158-2.023 3.231 0.69-1.072 1.358-2.152 2.023-3.231zM400.755 348.801c-0.59 0.869-1.198 1.731-1.802 2.594 0.605-0.864 1.213-1.726 1.802-2.594zM396.624 354.655c-0.526 0.723-1.046 1.448-1.584 2.168 0.538-0.72 1.057-1.445 1.584-2.168zM391.211 361.783c-0.491 0.618-0.991 1.233-1.49 1.848 0.499-0.615 1.001-1.229 1.49-1.848zM386.113 367.968c-0.307 0.359-0.603 0.722-0.914 1.079 0.311-0.357 0.608-0.722 0.914-1.079zM380.557 374.231c-0.436 0.473-0.875 0.944-1.316 1.413 0.441-0.471 0.88-0.94 1.316-1.413zM417.697 431.976c-0.342 0.327-0.687 0.646-1.031 0.972 0.342-0.326 0.688-0.645 1.031-0.972zM413.793 435.621c-0.408 0.373-0.817 0.743-1.226 1.113 0.409-0.369 0.819-0.74 1.226-1.113zM409.694 439.279c-0.368 0.321-0.733 0.643-1.101 0.961 0.369-0.317 0.735-0.64 1.101-0.961zM404.919 443.342c-0.1 0.082-0.197 0.167-0.297 0.249 0.099-0.080 0.197-0.165 0.297-0.249zM400.422 446.968c-0.177 0.139-0.356 0.274-0.533 0.413 0.177-0.139 0.356-0.272 0.533-0.413zM396.27 450.151c-0.312 0.234-0.626 0.466-0.94 0.698 0.314-0.232 0.628-0.464 0.94-0.698zM391.93 453.323c-0.282 0.2-0.563 0.403-0.845 0.603 0.282-0.199 0.563-0.401 0.845-0.603zM387.020 456.736c-0.042 0.028-0.084 0.058-0.125 0.087 0.042-0.028 0.084-0.058 0.125-0.087zM377.889 462.579c-0.102 0.062-0.202 0.122-0.304 0.182 0.1-0.062 0.202-0.12 0.304-0.182zM341.55 264.61c-0.334 0.651-0.695 1.295-1.039 1.944 0.344-0.65 0.707-1.295 1.039-1.944zM338.064 271.053c-0.444 0.783-0.914 1.56-1.373 2.34 0.459-0.78 0.929-1.557 1.373-2.34zM334.252 277.434c-0.515 0.824-1.046 1.64-1.577 2.459 0.531-0.819 1.062-1.635 1.577-2.459zM330.111 283.743c-0.566 0.825-1.141 1.649-1.724 2.469 0.583-0.82 1.158-1.642 1.724-2.469zM325.622 289.991c-0.6 0.798-1.198 1.597-1.812 2.39 0.616-0.793 1.214-1.592 1.812-2.39zM320.746 296.203c-0.603 0.735-1.194 1.475-1.811 2.203 0.616-0.73 1.209-1.468 1.811-2.203zM315.329 302.521c-0.526 0.586-1.034 1.183-1.57 1.766 0.536-0.583 1.044-1.179 1.57-1.766zM308.157 310.132c-1.532 1.528-3.085 3.014-4.652 4.474 1.567-1.462 3.12-2.945 4.652-4.474zM300.274 233.006c1.007-1.851 1.976-3.708 2.9-5.576-0.924 1.868-1.893 3.725-2.9 5.576zM302.538 315.509c-1.5 1.38-3.017 2.726-4.545 4.043 1.528-1.318 3.045-2.663 4.545-4.043zM296.711 320.641c-1.495 1.263-2.998 2.507-4.519 3.712 1.52-1.206 3.024-2.447 4.519-3.712zM290.819 325.417c-1.161 0.902-2.329 1.787-3.503 2.656 1.173-0.869 2.342-1.752 3.503-2.656zM285.357 329.513c-1.265 0.909-2.537 1.794-3.815 2.664 1.278-0.872 2.552-1.754 3.815-2.664zM279.111 333.806c-0.945 0.62-1.894 1.224-2.845 1.824 0.949-0.6 1.899-1.204 2.845-1.824zM272.456 337.963c-0.506 0.301-1.014 0.598-1.523 0.894 0.509-0.296 1.017-0.591 1.523-0.894zM271.061 272.022c1.51-1.518 2.987-3.055 4.425-4.611-1.438 1.557-2.915 3.092-4.425 4.611zM276.984 265.741c1.049-1.163 2.095-2.327 3.104-3.508-1.011 1.181-2.055 2.345-3.104 3.508zM281.628 260.38c0.957-1.153 1.909-2.307 2.831-3.475-0.922 1.169-1.873 2.324-2.831 3.475zM285.893 255.051c0.92-1.199 1.831-2.404 2.713-3.618-0.884 1.213-1.792 2.417-2.713 3.618zM289.871 249.661c0.905-1.28 1.792-2.566 2.656-3.86-0.864 1.295-1.749 2.581-2.656 3.86zM293.589 244.191c0.907-1.393 1.787-2.795 2.644-4.201-0.857 1.407-1.737 2.808-2.644 4.201zM297.057 238.637c0.93-1.56 1.827-3.127 2.698-4.702-0.872 1.575-1.767 3.144-2.698 4.702zM270.388 272.698c-1.594 1.587-3.209 3.132-4.841 4.641 1.634-1.507 3.249-3.054 4.841-4.641zM263.833 278.877c-1.198 1.077-2.399 2.147-3.617 3.184 1.216-1.037 2.419-2.106 3.617-3.184zM258.322 283.636c-1.203 0.997-2.412 1.978-3.633 2.935 1.221-0.957 2.431-1.939 3.633-2.935zM252.858 287.985c-1.31 0.999-2.628 1.973-3.954 2.927 1.326-0.952 2.644-1.928 3.954-2.927zM247.34 292.029c-1.55 1.087-3.112 2.142-4.682 3.167 1.57-1.024 3.13-2.080 4.682-3.167zM239.955 186.391c-0.050 0.087-0.102 0.174-0.154 0.261 0.052-0.087 0.102-0.174 0.154-0.261zM237.376 190.628c-0.114 0.179-0.229 0.357-0.344 0.536 0.114-0.179 0.231-0.357 0.344-0.536zM234.605 194.832c-0.2 0.292-0.406 0.581-0.61 0.872 0.202-0.289 0.409-0.58 0.61-0.872zM231.629 199.010c-0.316 0.428-0.646 0.85-0.969 1.276 0.324-0.426 0.653-0.849 0.969-1.276zM228.447 203.153c-0.481 0.605-0.986 1.199-1.478 1.797 0.494-0.598 0.996-1.193 1.478-1.797zM208.081 160.596c0.54-0.884 1.079-1.767 1.594-2.658-0.515 0.89-1.056 1.774-1.594 2.658zM208.55 223.613c-0.605 0.511-1.218 1.001-1.826 1.5 0.608-0.499 1.223-0.989 1.826-1.5zM203.85 227.422c-0.605 0.469-1.216 0.924-1.824 1.381 0.608-0.458 1.219-0.91 1.824-1.381zM199.015 231.013c-0.583 0.414-1.168 0.82-1.754 1.223 0.586-0.403 1.173-0.809 1.754-1.223zM194.044 234.391c-0.538 0.349-1.077 0.697-1.619 1.036 0.541-0.341 1.081-0.687 1.619-1.036zM188.917 237.561c-0.468 0.274-0.932 0.553-1.402 0.822 0.468-0.269 0.934-0.548 1.402-0.822zM191.503 182.416c0.336-0.361 0.658-0.728 0.989-1.091-0.331 0.364-0.651 0.732-0.989 1.091zM194.714 178.846c0.434-0.499 0.855-1.004 1.28-1.508-0.426 0.504-0.845 1.009-1.28 1.508zM197.751 175.226c0.471-0.581 0.932-1.168 1.392-1.752-0.459 0.585-0.919 1.171-1.392 1.752zM200.617 171.563c0.488-0.646 0.969-1.295 1.443-1.944-0.474 0.65-0.956 1.298-1.443 1.944zM203.303 167.878c0.499-0.71 0.996-1.42 1.478-2.135-0.483 0.715-0.979 1.427-1.478 2.135zM205.804 164.196c0.511-0.78 1.021-1.559 1.512-2.345-0.491 0.787-1.001 1.565-1.512 2.345zM157.975 208.711c-1.425 0.788-2.857 1.545-4.296 2.27 1.438-0.725 2.87-1.483 4.296-2.27zM187.542 186.485c-1.096 1.084-2.2 2.152-3.319 3.189 1.119-1.036 2.223-2.105 3.319-3.189zM182.975 190.791c-0.919 0.832-1.841 1.66-2.775 2.461 0.935-0.8 1.856-1.629 2.775-2.461zM178.941 194.301c-0.957 0.8-1.916 1.594-2.887 2.362 0.972-0.768 1.931-1.564 2.887-2.362zM174.904 197.55c-1.032 0.798-2.068 1.584-3.114 2.347 1.046-0.76 2.081-1.549 3.114-2.347zM170.794 200.609c-1.123 0.803-2.25 1.587-3.388 2.349 1.138-0.76 2.265-1.547 3.388-2.349zM166.608 203.485c-1.223 0.807-2.454 1.589-3.692 2.347 1.238-0.758 2.469-1.542 3.692-2.347zM162.335 206.186c-1.326 0.803-2.661 1.577-4.002 2.324 1.341-0.747 2.674-1.522 4.002-2.324zM183.593 240.536c-0.356 0.187-0.708 0.384-1.064 0.568 0.356-0.184 0.71-0.379 1.064-0.568zM216.741 216.124c0.256-0.251 0.518-0.488 0.772-0.742 1.335-1.333 2.634-2.686 3.904-4.054-1.268 1.368-2.566 2.721-3.902 4.056-0.254 0.254-0.518 0.488-0.773 0.74zM211.422 221.095c0.565-0.504 1.138-0.992 1.697-1.508-0.56 0.516-1.131 1.004-1.697 1.508zM225.044 207.262c-0.753 0.877-1.537 1.739-2.317 2.604 0.78-0.865 1.564-1.729 2.317-2.604zM241.744 295.799c-5.935 3.824-12.002 7.2-18.145 10.13 6.142-2.93 12.209-6.311 18.145-10.13zM265.37 341.959c-0.269 0.144-0.536 0.289-0.805 0.429 0.269-0.14 0.536-0.286 0.805-0.429zM326.315 417.171c-1.985 1.106-3.976 2.173-5.977 3.204 2.001-1.031 3.992-2.1 5.977-3.204zM368.939 385.946c-0.414 0.389-0.829 0.78-1.246 1.164 0.418-0.386 0.83-0.777 1.246-1.164zM362.61 391.664c-0.464 0.404-0.934 0.797-1.4 1.196 0.466-0.399 0.935-0.792 1.4-1.196zM356.826 396.507c-0.431 0.349-0.859 0.708-1.291 1.052 0.433-0.346 0.86-0.703 1.291-1.052zM350.627 401.348c-0.705 0.531-1.412 1.057-2.12 1.577 0.708-0.52 1.415-1.047 2.12-1.577zM343.805 406.286c-0.819 0.568-1.644 1.116-2.467 1.669 0.824-0.553 1.649-1.103 2.467-1.669zM338.413 409.887c-1.385 0.9-2.776 1.777-4.173 2.638 1.397-0.86 2.788-1.741 4.173-2.638zM331.425 414.239c-1.098 0.653-2.197 1.291-3.299 1.919 1.103-0.628 2.202-1.268 3.299-1.919zM354.391 474.921c-0.003 0.002-0.007 0.003-0.008 0.003 0.003-0.002 0.005-0.003 0.008-0.003zM373.371 465.242c-0.132 0.075-0.264 0.152-0.394 0.226 0.13-0.074 0.262-0.15 0.394-0.226zM413.405 544.038c-1.498 0.715-2.998 1.412-4.504 2.093 1.505-0.682 3.005-1.38 4.504-2.093zM458.578 611.973c-0.453 0.192-0.905 0.386-1.36 0.575 0.454-0.19 0.907-0.384 1.36-0.575zM483.864 599.658c-0.504 0.279-1.009 0.553-1.513 0.829 0.504-0.276 1.011-0.55 1.513-0.829zM477.794 602.914c-0.448 0.234-0.895 0.469-1.343 0.7 0.449-0.229 0.895-0.466 1.343-0.7zM464.645 609.318c-0.431 0.195-0.864 0.386-1.295 0.578 0.431-0.192 0.864-0.383 1.295-0.578zM520.623 683.875c-2.274 1.031-4.552 2.035-6.834 3 2.282-0.966 4.56-1.969 6.834-3zM542.033 673.129c-2.133 1.178-4.273 2.322-6.418 3.441 2.145-1.119 4.285-2.263 6.418-3.441zM534.946 676.921c-4.56 2.364-9.148 4.597-13.755 6.697 4.607-2.1 9.194-4.333 13.755-6.697zM573.514 765.123c-0.446 0.177-0.892 0.357-1.338 0.533 0.446-0.175 0.89-0.356 1.338-0.533zM613.521 745.851c-0.383 0.217-0.763 0.441-1.146 0.656 0.383-0.215 0.763-0.439 1.146-0.656zM604.999 750.549c-0.264 0.14-0.53 0.274-0.795 0.414 0.266-0.14 0.531-0.274 0.795-0.414zM597.64 754.327c-0.515 0.256-1.027 0.513-1.544 0.765 0.515-0.252 1.029-0.509 1.544-0.765zM588.914 758.525c-0.040 0.018-0.080 0.038-0.122 0.057 0.040-0.018 0.082-0.038 0.122-0.057zM581.198 761.953c-0.416 0.179-0.832 0.351-1.248 0.526 0.414-0.175 0.832-0.347 1.248-0.526zM657.585 847.814c-5.486 2.579-10.997 5-16.524 7.267 5.528-2.267 11.038-4.689 16.524-7.267zM683.82 834.166c-2.312 1.32-4.629 2.614-6.953 3.877 2.324-1.263 4.641-2.556 6.953-3.877zM675.596 838.738c-2.708 1.458-5.422 2.878-8.145 4.26 2.723-1.381 5.439-2.801 8.145-4.26zM666.353 843.545c-2.4 1.208-4.806 2.382-7.216 3.53 2.41-1.148 4.818-2.324 7.216-3.53zM711.47 950.163c-0.125 0.047-0.251 0.094-0.374 0.14 0.125-0.047 0.249-0.092 0.374-0.14zM761.482 926.897c-0.197 0.109-0.393 0.214-0.59 0.322 0.195-0.109 0.394-0.214 0.59-0.322zM752.017 931.975c-0.334 0.174-0.668 0.351-1.004 0.523 0.336-0.172 0.67-0.349 1.004-0.523zM731.878 941.723c-0.284 0.127-0.568 0.254-0.852 0.381 0.284-0.127 0.568-0.254 0.852-0.381zM854.576 856.361c0.005-0.005 0.008-0.008 0.013-0.012s0.008-0.008 0.013-0.013c-0.005 0.005-0.008 0.010-0.013 0.013-0.003 0.005-0.008 0.008-0.013 0.012zM770.893 921.503c0.256-0.15 0.509-0.307 0.763-0.458-0.254 0.15-0.508 0.307-0.763 0.458zM779.961 915.971c0.501-0.314 1.004-0.626 1.505-0.944-0.503 0.317-1.004 0.63-1.505 0.944zM799.118 903.195c0.628-0.444 1.255-0.892 1.879-1.34-0.625 0.448-1.251 0.895-1.879 1.34zM808.823 896.119c0.269-0.202 0.54-0.398 0.807-0.6-0.269 0.202-0.54 0.398-0.807 0.6zM818.049 888.977c0.633-0.503 1.261-1.016 1.893-1.523-0.631 0.508-1.26 1.021-1.893 1.523zM826.704 881.893c0.611-0.513 1.224-1.021 1.834-1.539-0.608 0.518-1.223 1.026-1.834 1.539zM836.586 873.353c0.488-0.436 0.971-0.884 1.458-1.323-0.488 0.439-0.971 0.887-1.458 1.323zM844.653 865.95c0.717-0.673 1.433-1.345 2.147-2.025-0.713 0.68-1.43 1.353-2.147 2.025zM871.319 838.651c-0.558 0.625-1.129 1.243-1.692 1.866 0.563-0.623 1.133-1.243 1.692-1.866zM864.027 846.587c-0.68 0.723-1.356 1.445-2.041 2.165 0.685-0.72 1.361-1.443 2.041-2.165z" - ], - "isMulticolor": false, - "tags": [ - "beam-wake" - ], - "defaultCode": 59688, - "grid": 0, - "attrs": [] - }, - { - "id": 41, - "paths": [ - "M985.065 564.937l-2.093-19.261v-38.81l-0.735 2.345c-0.91-6.687-2.694-13.2-5.346-19.493l-14.227-130.912-28.283 84.050c-12.268-7.786-26.819-14.587-43.536-20.216l-34.084-135.706-27.7 121.888c-22.742-2.995-47.866-4.387-75.305-3.911l-33.55-113.861-30.947 118.077c-22.565 2.472-46.331 6.049-71.267 10.831l-30.381-71.648-30.596 85.213c-9.908 2.497-19.954 5.15-30.174 8.005v5.776c-3.445-0.758-7.019-1.171-10.691-1.171-2.594 0-5.142 0.202-7.629 0.586l1.909-11.045c-8.88-4.22-17.634-8.225-26.302-12.096l-9.969-93.653-48.866 69.356c-23.799-9.004-46.648-16.618-68.503-22.934l-7.253-117.033-55.476 101.832c-27.334-5.26-52.663-8.234-75.863-9.166l-6.54-124.824-56.696 127.92c-17.431 2.699-32.928 6.924-46.342 12.507l-13.556-87.638-36.313 126.577c-3.685 5.75-6.55 11.864-8.588 18.298l-0.326-2.436-6.608 38.244-5.342 18.622 2.36-1.37-14.717 85.161c-12.924 85.134 111.933 189.939 411.346 282.054 10.945 11.329 26.283 18.385 43.277 18.385 18.84 0 35.651-8.663 46.688-22.216v16.588c312.664-39.649 454.362-121.898 456.131-208.246v-86.424l2.093 1.752zM477.010 743.197c-7.267 0.374-14.191 2.041-20.552 4.769l0.312-1.811c-9.213-2.823-18.238-5.686-27.115-8.58l-7.659-80.388-50.325 60.142c-24.524-9.171-47.567-18.602-69.134-28.233l-5.105-135.32-57.879 104.503c-22.334-11.999-42.597-24.18-60.872-36.423l-8.028-156.286-49.688 111.736c-20.193-18.245-36.107-36.311-47.953-53.808l5.686-50.158c69.914-37.477 210.623-31.888 401.061 55.832 1.236 1.34 2.549 2.606 3.926 3.804-59.569 1.281-104.283 21.562-104.283 49.747 0 28.816 46.75 56.14 108.322 65.503l-10.714 94.97zM886.497 647.41l-29.935-118.569-34.527 152.641c-19.922 8.877-41.762 17.358-65.576 25.319l-33.618-104.959-33.014 124.472c-22.8 5.823-47.009 11.206-72.634 16.078l-36.532-73.426-24.895 83.699c-9.48 1.38-19.109 2.699-28.924 3.944v8.72c-6.568-8.067-15.186-14.389-25.060-18.195l10.851-96.191c71.947 4.833 130.013-17.029 130.013-49.135 0-27.22-41.708-53.119-98.227-63.797 200.819-52.939 339.258-34.425 401.431 14.147l-2.937 50.393c-14.653 15.225-33.411 30.317-56.417 44.857z" - ], - "isMulticolor": false, - "tags": [ - "bear-trap" - ], - "defaultCode": 59689, - "grid": 0, - "attrs": [] - }, - { - "id": 42, - "paths": [ - "M256.476 847.753l-51.537 107.741h772.164l-60.127-107.741h-37.078c-34.667-192.253-60.571-421.384-43.245-558.006 45.378-4.233 78.355-43.989 75.671-102.23-4.153-88.816-103.384-123.075-182.424-69.714-33.737-45.946-96.682-57.982-132.793-18.769-55.907-70.479-167.799-57.023-198.519 25.473-64.594-14.306-113.198 16.364-114.016 76.421-0.812 59.701 36.353 80.859 80.378 76.508 1.233 10.385 2.238 21.581 3.017 33.498-80.821-1.774-159.854-16.12-237.737-38.571-54.746 167.084-78.739 337.641-72.694 511.591 84.952 37.009 175.271 36.244 265.533 35.888-1.983 9.433-4.017 18.751-6.112 27.912h-60.481zM128.88 733.371c-4.652-133.539 13.805-242.878 55.904-373.484l0.003 0.002c60.662 14.438 122.232 18.043 185.217 13.907 0.558 107.742-11.62 248.513-33.72 376.742-70.479 3.8-141.066 8.399-207.404-17.166z" - ], - "isMulticolor": false, - "tags": [ - "beer" - ], - "defaultCode": 59690, - "grid": 0, - "attrs": [] - }, - { - "id": 43, - "paths": [ - "M932.124 664.157l42.757-2.76c-22.189-17.458-43.391-32.123-61.652-72.499-11.077-50.909-28.443-98.805-107.241-114.807 3.561 5.128 6.867 10.303 9.989 15.502-17.112-6.228-34.861-6.231-53.153-0.961 0.005-0.862 0.023-1.721 0.023-2.584 0-37.881-4.497-74.324-12.779-108.414 30.536 5.295 57.025-0.028 78.303-19.028-0.825 6.308-1.848 12.741-3.097 19.306 56.46-40.24 65.474-76.058 63.506-111.377 7.196-43.715 23.879-63.368 40.79-85.973l-48.536 9.709c0.546-22.374 6.692-45.607 26.771-70.598-142.268 10.744-71.072 78.754-76.892 209.793l-87.884 22.61c-24.302-78.432-69.306-141.999-125.656-178.009 3.324-2.324 6.448-4.764 9.386-7.297 13.040 13.631 31.395 22.134 51.748 22.134 39.557 0 71.625-32.065 71.625-71.623 0-39.562-32.068-71.627-71.625-71.627-17.729 0-33.942 6.456-46.451 17.127-25.692-25.426-70.542-42.286-121.614-42.286-51.060 0-95.899 16.85-121.594 42.265-12.505-10.659-28.709-17.106-46.427-17.106-39.557 0-71.625 32.068-71.625 71.627s32.068 71.623 71.625 71.623c20.341 0 38.69-8.494 51.728-22.112 2.935 2.527 6.055 4.963 9.373 7.282-56.432 36.066-101.478 99.771-125.752 178.365l-89.297-22.974c-5.82-131.039 65.376-199.049-76.892-209.793 19.962 24.843 26.148 47.951 26.758 70.205l-46.574-9.316c15.906 21.265 31.615 39.913 39.413 78.44-3.587 37.778 2.459 75.808 62.935 118.909-1.25-6.565-2.27-13-3.097-19.307 21.646 19.331 48.691 24.491 79.897 18.733-8.329 34.175-12.849 70.721-12.849 108.713 0 1.014 0.022 2.021 0.028 3.034-18.83-5.716-37.091-5.89-54.678 0.509 3.122-5.199 6.428-10.372 9.989-15.5-81.868 16.625-97.424 67.679-108.511 120.77-17.613 35.912-37.784 49.964-58.846 66.535l41.257 2.663c-9.375 23.502-24.157 44.102-51.392 58.107 133.031 47.582 95.364-77.238 151.064-201.066l72.438 0.723c3.68 48.649 14.787 94.29 31.742 134.784-34.569 9.555-58.999 27.361-69.883 56.193-45.044 46.489-24.559 76.907 15.221 114.516 13.163 38.155 8.815 62.464 5.623 89.193l39.602-34.793c7.013 29.106 3.476 50.034 0.768 72.706l43.414-38.147c13.937 17.48 26.851 37.073 37.397 59.459 45.619-136.164-94.848-153.5-121.829-241.794l58.664-57.506c45.216 92.791 122.528 153.959 210.319 153.959 87.473 0 164.547-60.722 209.83-152.947l57.631 56.494c-26.983 88.293-167.448 105.631-121.829 241.794 10.372-22.015 23.036-41.328 36.707-58.589l42.425 37.277c-2.706-22.673-6.244-43.601 0.77-72.707l39.602 34.793c-3.127-26.186-7.363-50.047 4.841-86.88 41.378-38.686 63.645-69.391 17.682-116.83-10.741-28.453-34.659-46.182-68.513-55.826 17.044-40.589 28.204-86.365 31.894-135.166l70.917-0.708c55.7 123.829 18.033 248.648 151.064 201.066-27.197-13.985-41.976-34.547-51.354-58.009zM352.69 612.228l-20.59-302.529 46.030-15.866-25.44 318.396zM433.164 721.402l-20.296-445.804 45.37-23.373-25.074 469.177zM594.834 721.402l-25.074-469.176 45.37 23.373-20.296 445.802zM649.866 293.833l46.030 15.866-20.59 302.529-25.44-318.396z" - ], - "isMulticolor": false, - "tags": [ - "beetle" - ], - "defaultCode": 59691, - "grid": 0, - "attrs": [] - }, - { - "id": 44, - "paths": [ - "M852.913 35.997h-83.966l8.461 75.49h-525.21l8.438-75.285h-83.956l-155.097 691.514v255.379h132.936l91.557-816.973h257.196v80.609c-14.81 4.816-25.521 18.726-25.521 35.14 0 1.565 0.109 3.104 0.297 4.617-73.267 17.458-104.789 89.723-143.064 232.623l0.003 0.002c-37.442 139.79-96.687 126.343-96.675 218.349 0.008 49.832 109.747 81.432 238.425 86.982-1.712 4.899-2.654 10.161-2.654 15.646 0.003 26.18 21.233 47.405 47.418 47.408s47.406-21.215 47.403-47.393c0-5.621-0.986-11.010-2.781-16.011 125.304-6.416 230.664-37.704 230.657-86.559-0.015-91.996-59.25-78.567-96.739-218.368-39.248-146.375-71.394-218.637-148.548-233.829 0.107-1.141 0.167-2.297 0.167-3.466 0-15.452-9.488-28.682-22.954-34.2v-81.549h254.826l91.537 816.769h132.938v-255.384l-155.092-691.511z" - ], - "isMulticolor": false, - "tags": [ - "bell" - ], - "defaultCode": 59692, - "grid": 0, - "attrs": [] - }, - { - "id": 45, - "paths": [ - "M514.317 283.030c-129.113 0-233.766 104.68-233.766 233.796s104.663 233.783 233.766 233.783 233.756-104.667 233.756-233.783c0-129.129-104.643-233.796-233.756-233.796zM518.722 592.346c-44.059 0-79.77-35.715-79.77-79.778s35.711-79.772 79.77-79.772 79.77 35.715 79.77 79.772c0 44.064-35.711 79.778-79.77 79.778zM546.21 592.826c-0.336-1.662-0.687-3.323-1.056-4.981-8.274 2.905-17.164 4.502-26.432 4.502-44.059 0-79.77-35.715-79.77-79.778 0-24.219 10.803-45.896 27.835-60.525-1.273-1.169-2.556-2.324-3.849-3.465-17.64 15.567-28.779 38.331-28.779 63.712 0 46.932 38.035 84.97 84.962 84.97 9.477 0.002 18.579-1.574 27.088-4.435zM514.431 765.825c-24.113 0-47.421-3.441-69.473-9.836-17.684 46.9-51.093 88.204-97.921 115.244-33.617 19.411-70.375 28.563-106.625 29.499 59.43 11.327 123.59 3.471 180.094-29.173 44.79-25.864 79.040-63.040 101.249-105.85-2.434 0.070-4.873 0.115-7.323 0.115zM304.136 383.474c-49.165-2.803-99.652 8.192-145.415 34.619-56.444 32.588-96.044 83.186-115.969 140.251 18.936-30.929 45.91-57.045 79.518-76.456 47.508-27.431 100.825-35.558 150.904-26.826 6.557-25.695 17.114-49.79 30.962-71.588zM585.177 755.61c-22.428 6.637-46.167 10.215-70.746 10.215-1.969 0-3.932-0.028-5.89-0.075 22.206 42.811 56.462 79.987 101.256 105.851 56.499 32.644 120.663 40.501 180.097 29.173-36.266-0.93-73.020-10.083-106.628-29.494-46.97-27.123-80.445-68.596-98.089-115.67zM598.49 512.566c0 44.064-35.711 79.778-79.77 79.778-11.757 0-22.909-2.564-32.957-7.131-0.371 1.585-0.722 3.174-1.061 4.763 10.524 4.671 22.164 7.287 34.42 7.287 46.927 0 84.962-38.040 84.962-84.97 0-27.257-12.849-51.497-32.805-67.044-1.463 1.239-2.918 2.494-4.357 3.769 19.177 14.567 31.567 37.607 31.567 63.55zM871.561 418.148c-46.177-26.667-97.165-37.612-146.749-34.53 13.853 21.841 24.401 45.986 30.937 71.733 50.475-9.122 104.328-1.104 152.269 26.579 33.61 19.421 60.576 45.537 79.51 76.471-19.922-57.067-59.522-107.665-115.966-140.253zM686.207 336.567c18.841 17.966 34.863 38.857 47.35 61.944 27.636-41.493 43.761-91.285 43.761-144.797-0.002-65.254-25.263-124.768-64.783-170.577 17.308 31.874 27.762 68.289 27.762 107.106 0 55.904-20.371 107.011-54.090 146.323zM343.892 335.416c-33.134-39.158-53.116-89.81-53.116-145.172 0-38.822 9.129-75.236 26.442-107.106-39.448 45.794-63.461 105.392-63.461 170.577 0 52.728 15.657 101.844 42.555 142.967 12.612-22.857 28.71-43.516 47.58-61.266zM519.123 427.327c-43.701 0-79.677 32.99-84.416 75.43 1.555 0.506 3.115 1.001 4.682 1.478 4.166-40.145 38.092-71.438 79.336-71.438 40.571 0 74.040 30.292 79.087 69.49 1.819-0.603 3.627-1.231 5.429-1.873-5.78-41.299-41.226-73.088-84.118-73.088z" - ], - "isMulticolor": false, - "tags": [ - "biohazard" - ], - "defaultCode": 59693, - "grid": 0, - "attrs": [] - }, - { - "id": 46, - "paths": [ - "M840.186 384.521c-7.502-11.19-18.21-21.21-32.616-29.171-29.128-16.098-57.344-14.976-80.56-3.734l0.012-0.11c-62.945 30.521-124.251 45.021-186.004 55.984-15.971-6.054-21.101-18.019-10.116-38.777 37.766-36.283 82.057-65.578 126.826-80.707 36.418-4.781 65.269-34.101 76.347-68.595 46.773-10.342 102.607-6.161 137.248 31.472-22.571-135.711-100.885-150.712-171.496-133.716-2.362-1.565-4.809-3.085-7.409-4.522-61.176-33.809-118.33 8.314-133.543 60.72-11.79 30.742-25.944 59.763-42.372 87.017-69.904 62.476-136.145 37.967-187.28-31.143-39.445-56.626-74.169-130.599-93.984-200.22h-200.986v138.77c112.845 52.897 278.687 249.208 243.050 306.801-39.822 19.404-83.206 35.745-132.385 51.84-5.493 1.186-10.805 2.913-15.891 5.137-0.374 0.119-0.737 0.239-1.111 0.357l0.107 0.105c-42.838 19.369-69.477 73.033-55.117 118.199-38.688 76.047-35.187 176.161 116.634 202.413-43.923-41.622-53.694-96.211-38.337-140.512 46.534 5.758 84.895-28.786 97.479-70.31 16.584-42.198 42.472-80.139 83.5-93.035 44.324-13.935 178.624 39.553 245.454 151.326 6.199 19.329 19.915 37.085 43.103 49.899 22.762 12.579 44.692 14.879 64.089 10.197 37.495 40.644 69.057 102.306 54.16 160.359 107.963-97.080 73.362-184.395 17.836-244.98 4.544-33.313-7.891-68.304-45.669-89.185-18.674-10.322-36.968-13.539-53.818-11.576-31.243 0.214-67.337-5.558-99.893-17.229-44.421-31.582-41.505-61.769-4.925-81.385 54.685-5.239 108.79 12.116 151.55 34.24 3.981 3.019 8.327 5.867 13.090 8.498 51.856 28.662 99.418 4.084 122.437-35.275 43.332 10.474 82.647 49.939 108.061 97.636 44.528-136.767-28.208-189.316-107.473-196.785z" - ], - "isMulticolor": false, - "tags": [ - "bird-claw" - ], - "defaultCode": 59694, - "grid": 0, - "attrs": [] - }, - { - "id": 47, - "paths": [ - "M472.406 494.433c5.147 26.584 3.299 166.72 3.299 166.72s-52.231-120.084-57.377-146.664 2.788-52.613 17.722-58.151c14.934-5.539 31.211 11.525 36.358 38.090l-0.002 0.005zM544.477 497.181c-5.147 26.589-3.299 166.72-3.299 166.72s52.231-120.080 57.377-146.664-2.788-52.613-17.722-58.151c-14.934-5.539-31.211 11.525-36.358 38.090l0.002 0.005zM539.879 378.235c-9.834-2.486-20.072-3.842-30.61-3.844-12.851-0.002-25.261 1.991-37.019 5.638-17.002 37.071-47.787 66.5-85.799 81.731-6.841 17.281-10.634 36.296-10.634 56.27 0 79.347 133.457 467.682 133.457 467.682s133.457-388.348 133.454-467.682h0.005c0-19.040-3.475-37.198-9.725-53.826-41.63-14.593-75.37-45.945-93.129-85.969zM504.929 46.042c-198.090 0-358.676 117.715-358.676 262.929s160.584 262.929 358.676 262.929 358.676-117.72 358.676-262.929c-0.002-145.214-160.586-262.929-358.676-262.929zM327.13 473.158c-88.134 0-159.579-71.448-159.579-159.58s71.444-159.58 159.579-159.58 159.579 71.443 159.579 159.58c-0.002 88.132-71.446 159.58-159.579 159.58zM685.804 473.158c-88.134 0-159.579-71.448-159.579-159.58s71.444-159.58 159.579-159.58 159.579 71.443 159.579 159.58c-0.002 88.132-71.446 159.58-159.579 159.58zM335.033 196.224c-62.806 0-113.726 50.923-113.726 113.729s50.918 113.726 113.726 113.726c62.806 0 113.726-50.918 113.726-113.726-0.002-62.81-50.919-113.729-113.726-113.729zM352.984 333.315c-20.742 0-37.557-16.815-37.557-37.557s16.815-37.559 37.557-37.559 37.557 16.815 37.557 37.559c0.002 20.742-16.815 37.557-37.557 37.557zM694.459 196.224c-62.806 0-113.726 50.923-113.726 113.729s50.918 113.726 113.726 113.726c62.806 0 113.726-50.918 113.726-113.726-0.002-62.81-50.919-113.729-113.726-113.729zM710.307 333.315c-20.742 0-37.557-16.815-37.557-37.557s16.815-37.559 37.557-37.559 37.557 16.815 37.557 37.559c0 20.742-16.815 37.557-37.557 37.557z" - ], - "isMulticolor": false, - "tags": [ - "bird-mask" - ], - "defaultCode": 59695, - "grid": 0, - "attrs": [] - }, - { - "id": 48, - "paths": [ - "M627.969 896.398l-46.698-103.603-41.613 119.646-41.611-118.353-49.466 102.31-31.156-109.79c-37.858 47.575-35.97 90.84-36.47 142.724 111.761 43.092 215.658 39.749 320.285 0 5.31-56.348-5.818-101.864-39.346-141.421l-33.924 108.487zM418.479 605.567l37.287-106.008 41.279 115.328 42.61-106.209 42.612 107.548 42.612-116.668 37.287 107.348c35.219-63.919 41.623-150.85 21.307-214.768l137.156-0.002-75.905-314.263c-136.712-52.74-274.908-46.873-410.138 0l-75.901 314.263h138.487c-29.972 73.548-9.938 156.525 21.307 213.43zM724.65 220.2l23.911 110.346-160.638-14.381c30.067-52.156 79.66-78.915 136.727-95.965zM539.922 380.24l49.641 65.549h-99.283l49.641-65.549zM331.447 330.547l23.911-110.346c59.967 12.804 109.222 39.873 136.727 95.965l-160.638 14.381zM837.47 628.634c-171.631 33.408-368.999 33.289-559.309 14.386 7.378 0.733 14.77 1.428 22.167 2.103l6.171-52.206c4.617 1.901 9.699 2.868 15.018 2.584 19.132-1.019 33.814-17.358 32.795-36.49s-17.353-33.809-36.486-32.79-33.814 17.358-32.795 36.481c0.399 7.489 3.167 14.274 7.509 19.725-11.753 26.98-20.724 56.388-26.422 86.317-44.717-38.999-99.295-47.842-160.17-37.425 0.003 0 0.005-0.002 0.008-0.002-4.736-13.521-17.575-23.231-32.713-23.231-19.159 0-34.689 15.534-34.689 34.684 0 19.159 15.53 34.692 34.689 34.692 9.079 0 17.316-3.516 23.499-9.224-0.008-0.005-0.017-0.012-0.025-0.017 51.195 35.621 106.25 45.313 164.346 34.611-4.098 38.979-2.377 77.563 6.151 111.566-6.672 6.712-10.616 16.085-10.075 26.275 1.019 19.132 17.355 33.817 36.486 32.798 19.132-1.021 33.814-17.36 32.795-36.491s-17.353-33.809-36.486-32.788c-2.993 0.16-5.862 0.733-8.595 1.595l8.207-69.43c207.94 31.081 560.384 58.047 705.422-93.339l-157.497-14.384zM95.763 633.233c-0.13 0.027-0.261 0.053-0.389 0.080 0.129-0.027 0.259-0.053 0.389-0.080zM85.119 635.563c-0.007 0.002-0.012 0.003-0.018 0.005 0.007-0.002 0.013-0.003 0.018-0.005zM74.884 638.117c-0.261 0.068-0.523 0.139-0.783 0.207 0.262-0.068 0.523-0.139 0.783-0.207zM70.851 647.686c1.874 1.679 3.755 3.324 5.641 4.928-1.886-1.604-3.765-3.249-5.641-4.928zM63.809 641.189c1.914 1.826 3.837 3.597 5.763 5.341-1.926-1.744-3.849-3.515-5.763-5.341zM90.787 663.953c1.822 1.348 3.65 2.671 5.484 3.954-1.834-1.281-3.662-2.606-5.484-3.954zM77.515 653.469c1.692 1.423 3.388 2.816 5.088 4.18-1.701-1.363-3.396-2.756-5.088-4.18zM83.732 658.557c1.878 1.488 3.762 2.937 5.65 4.353-1.889-1.417-3.772-2.865-5.65-4.353zM306.375 554.205c0.341-0.621 0.68-1.246 1.024-1.864-0.344 0.616-0.682 1.243-1.024 1.864zM302.184 562.081c-0.135 0.262-0.271 0.521-0.406 0.783 0.135-0.262 0.272-0.521 0.406-0.783zM278.152 643.020v37.215c0 0 0 0 0 0v-37.215zM269.673 701.093c-0.037 0.008-0.074 0.017-0.11 0.025 0.037-0.008 0.074-0.018 0.11-0.025zM276.832 843.913c-0.982-2.372-1.916-4.781-2.81-7.223 0.897 2.439 1.829 4.851 2.81 7.223v0zM278.152 734.634v-35.529c0 0 0 0 0 0v35.529c2.36 0.364 4.764 0.727 7.166 1.089-2.409-0.362-4.804-0.725-7.166-1.089zM284.712 697.401c2.243-0.613 4.489-1.243 6.74-1.913-2.252 0.67-4.499 1.305-6.74 1.913zM281.356 683.649c0.147 0.16 0.294 0.322 0.441 0.483-0.147-0.16-0.294-0.321-0.441-0.483zM284.49 687.146c0.231 0.262 0.461 0.525 0.69 0.788-0.229-0.264-0.459-0.526-0.69-0.788zM287.645 690.829c0.246 0.294 0.493 0.583 0.738 0.879-0.246-0.297-0.493-0.585-0.738-0.879z" - ], - "isMulticolor": false, - "tags": [ - "blade-bite" - ], - "defaultCode": 59696, - "grid": 0, - "attrs": [] - }, - { - "id": 49, - "paths": [ - "M511.992 31.992c-143.987 0-240.013 96.201-240.013 192.176 0 96.828 48.565 133.271 103.128 225.004-6.952 94.946-7.504 223.674-7.504 398.431 31.172-103.931 56.27-183.893 76.875-242.824 28.913 89.55 53.961 211.125 67.489 387.187 13.553-176.063 38.576-297.638 67.489-387.187 20.605 58.93 45.704 138.893 76.875 242.824 0-175.837-0.427-305.217-7.504-400.314 54.262-90.755 103.128-126.77 103.128-223.122 0.050-95.975-95.95-192.176-239.962-192.176v0zM511.992 127.615c79.536 0 144.364 53.735 144.364 119.994 0 26.202-11.043 50.573-28.135 70.325-20.179-67.413-54.789-93.741-116.254-93.741s-96.050 26.328-116.254 93.741c-17.092-19.727-28.135-44.122-28.135-70.325 0.050-66.259 64.904-119.994 144.414-119.994z" - ], - "isMulticolor": false, - "tags": [ - "blast" - ], - "defaultCode": 59697, - "grid": 0, - "attrs": [] - }, - { - "id": 50, - "paths": [ - "M511.992 272.004c119.994 150.011-90.002 90.002-329.989 90.002 102.576 34.184 180.43 60.336 236.248 82.497-89.475 28.813-210.748 54.011-386.259 67.489 175.511 13.503 296.784 38.701 386.259 67.489-55.818 22.162-133.672 48.314-236.248 82.497 240.013 0 450.008-60.009 329.989 90.002 39.329-19.652 84.681-39.178 128.427-60.938 50.648 34.936 89.148 60.938 159.373 60.938 96 0 192.176-96 192.176-240.013s-96.201-240.013-192.176-240.013c-70.701 0-109.151 25.65-160.326 60.938-43.495-21.584-88.37-41.336-127.473-60.888v0zM776.374 367.628c66.284 0 119.994 64.853 119.994 144.364s-53.735 144.364-119.994 144.364c-18.121 0-35.213-5.421-50.623-14.055 50.271-34.962 86.262-76.825 86.262-130.309s-35.991-95.347-86.262-130.309c15.41-8.634 32.502-14.055 50.623-14.055v0z" - ], - "isMulticolor": false, - "tags": [ - "blaster" - ], - "defaultCode": 59698, - "grid": 0, - "attrs": [] - }, - { - "id": 51, - "paths": [ - "M48.955 323.315l0.002-0.003-0.002-0.002zM48.957 323.312c53.978 98.682 116.399 153.405 116.612 264.062 0.075 43.974-32.112 58.911-32.112 92.127 0 18.146 23.208 36.152 41.981 36.152 18.364 0 43.148-19.367 43.145-38.479 0-33.014-30.86-45.119-30.86-83.961 0-130.167 226.017-49.302 236.726 131.77 5.474 92.619-45.48 98.844-45.48 143.437 0 35.711 23.502 48.978 47.809 48.978 23.774 0 43.145-11.363 43.145-48.978 0-30.76-40.846-50.664-39.649-142.268 2.507-191.921 162.363-127.801 171.422 73.469 2.688 59.709-38.481 80.686-38.481 127.106 0 25.812 20.046 44.313 41.981 44.313 21.454 0 44.313-19.456 44.313-46.645 0-48.945-40.888-66.278-39.649-127.106 4.494-220.576 138.507-373.942 163.259-155.093 5.922 52.348-31.487 71.024-31.487 117.777 0 27.842 19.080 47.809 37.317 47.809 18.642 0 36.152-19.047 36.152-45.482 0-45.208-37.97-67.288-31.487-121.278 24.349-202.795 139.667-236.813 194.745-317.706-243.938-353.758-739.071-354.344-929.403-0.003zM101.369 323.247v0c165.654-296.758 627.801-297.312 824.579 9.896-299.137 216.46-559.563 216.811-824.579-9.896zM666.409 296.298c0 89.798-72.796 162.59-162.59 162.59s-162.59-72.796-162.59-162.59 72.796-162.59 162.59-162.59 162.59 72.796 162.59 162.59zM561.023 289.971c0 32.207-26.109 58.316-58.316 58.316s-58.316-26.109-58.316-58.316 26.109-58.316 58.316-58.316c32.205 0 58.316 26.109 58.316 58.316zM176.203 651.894v-183.054zM424.826 821.757v-183.055zM605.269 869.581v-183.054zM779.398 726.108v-183.054z" - ], - "isMulticolor": false, - "tags": [ - "bleeding-eye" - ], - "defaultCode": 59699, - "grid": 0, - "attrs": [] - }, - { - "id": 52, - "paths": [ - "M790.605 701.505c8.266-47.51 12.517-91.368 39.679-132.774 71.842-109.535 173.599-216.081 135.798-357.164-23.215-86.622-96.884-131.254-167.423-128.347-60.247 2.487-112.844 46.681-143.24 111.611-58.777-40.567-127.39-51.646-182.3-24.178-55.625 27.827-92.69 88.909-86.181 162.357-9.61 4.876-19.068 10.511-28.286 16.872-30.396-64.93-82.992-109.124-143.24-111.611-70.539-2.907-144.209 41.725-167.423 128.347-37.801 141.083 63.956 247.629 135.798 357.164 27.162 41.406 31.413 85.264 39.679 132.774 27.464-40.76 65.352-77.966 99.839-97.427 99.522-56.17 230.843-92.449 283.018-197.49-0.030-0.015-0.062-0.030-0.092-0.045 29.040 13.868 57.925 27.466 84.536 42.485 34.487 19.461 72.375 56.667 99.839 97.427zM604.494 476.015c-12.004-4.773-23.838-9.538-35.315-14.5 11.478 4.961 23.331 9.727 35.334 14.5h-0.018zM456.365 367.459c20.979-0.997 41.191 3.513 58.543 12.194 31.002 15.507 52.351 42.194 53.955 81.725-50.081-21.678-93.166-47.204-112.498-93.919zM499.161 224.603c41.526-20.772 99.388-17.802 145.097 27.905l37.205 37.206 13.020-50.234c17.42-65.011 61.412-94.903 106.035-96.734l0.002 0.008c44.618-1.849 91.804 23.305 109.75 87.433 25.548 91.293-58.33 164.593-115.657 245.827h-166.828c1.672-68.040-34.281-124.023-86.833-150.313-29.237-14.625-62.36-18.318-95.813-12.455 0.070 4.113 0.351 8.361 0.837 12.732-5.64-50.488 17.303-83.425 53.186-101.376zM455.062 364.242c-0.125-0.329-0.256-0.655-0.379-0.987 0.124 0.331 0.252 0.658 0.379 0.987zM452.932 358.228c-0.165-0.506-0.329-1.016-0.489-1.527 0.16 0.511 0.322 1.019 0.489 1.527zM450.796 351.103c-0.002-0.003-0.002-0.008-0.003-0.012-0.003-0.013-0.007-0.027-0.010-0.040 0.003 0.013 0.007 0.027 0.010 0.040 0.002 0.003 0.002 0.008 0.003 0.012zM449.401 345.544c-0.164-0.697-0.309-1.38-0.464-2.070 0.155 0.69 0.301 1.375 0.464 2.070zM448.225 340.177c-0.175-0.86-0.337-1.712-0.498-2.564 0.16 0.85 0.322 1.704 0.498 2.564zM447.257 335.010c-0.167-0.967-0.324-1.928-0.471-2.883 0.145 0.956 0.306 1.918 0.471 2.883zM446.499 330.132c-0.154-1.094-0.304-2.187-0.431-3.266 0.127 1.077 0.279 2.172 0.431 3.266zM393.129 367.831c0-0.002 0-0.003-0.002-0.003-0.673-2.514-1.283-5.015-1.854-7.509 0.573 2.494 1.179 4.995 1.854 7.509 0 0.002 0 0.003 0.002 0.003zM395.941 377.353c-0.147-0.461-0.296-0.924-0.441-1.388 0.145 0.466 0.294 0.927 0.441 1.388zM389.249 350.387c-0.312-1.756-0.593-3.505-0.855-5.25 0.264 1.746 0.54 3.493 0.855 5.25zM391.011 359.19c-0.478-2.143-0.907-4.275-1.311-6.401 0.406 2.128 0.83 4.258 1.311 6.401zM103.798 385.238c17.946-64.128 65.132-89.282 109.75-87.433l0.003-0.008c44.623 1.831 88.615 31.722 106.035 96.734l13.020 50.234 37.205-37.206c9.168-9.168 18.83-16.589 28.747-22.471 25.732 71.196 84.918 113.52 150.835 148.331h-404.417c-33.206-46.68-56.258-94.295-41.179-148.181zM221.784 767.41l364.337-215.486c0 0 0.002 0 0.002 0l-364.339 215.486zM731.691 927.699c-0.418 30.693 28.338 56.048 64.001 56.048s65.105-25.344 65.105-56.048c0.002-68.073-52.999-54.088-67.31-161.172-12.971 107.503-60.837 93.445-61.796 161.172z" - ], - "isMulticolor": false, - "tags": [ - "bleeding-hearts" - ], - "defaultCode": 59700, - "grid": 0, - "attrs": [] - }, - { - "id": 53, - "paths": [ - "M750.884 606.95l37.789 108.272-244.245 223.843 206.455-332.115zM772.236 865.479l-37.794-108.268 244.245-223.838-206.45 332.107zM266.98 606.95l-37.791 108.272 244.247 223.842-206.455-332.113zM245.626 865.479l37.794-108.268-244.245-223.837 206.45 332.105zM227.525 173.44c1.545 213.981 97.171 428.859 288.599 613.822 190.302-184.572 287.849-399.687 289.54-613.822-164.124 36.218-414.008 36.674-578.139 0zM516.236 708.339c-146.601-141.648-219.834-306.204-221.017-470.074 125.696 28.082 317.061 27.737 442.749 0-1.29 163.987-75.997 328.726-221.732 470.074z" - ], - "isMulticolor": false, - "tags": [ - "bolt-shield" - ], - "defaultCode": 59701, - "grid": 0, - "attrs": [] - }, - { - "id": 54, - "paths": [ - "M985.292 647.906v-58.024c-107.166-42.724-170.278-82.59-189.686-146.166-15.935-52.202 32.142-121.647 122.738-205.308-94.646 51.875-164.318 87.108-191.917 37.936-24.783-44.144 2.975-126.902 46.862-235.431h-31.241c-35 55.405-64.811 97.422-75.876 87.032-9.644-9.056-9.751-41.64-5.578-87.032l-64.712-0.018c-42.823 95.9-88.229 150.226-153.978 159.555-56.18 7.966-128.929-58.051-210.886-151.747 46.656 92.594 63.819 166.875 32.357 185.224-37.193 21.696-111.703-3.881-222.043-50.208v21.195c75.908 48.176 145.839 95.209 132.779 112.7-11.463 15.347-63.732 12.691-132.779 3.358v54.676c99.861 50.448 153.978 102.178 153.978 150.632 0 41.675-83.223 126.752-153.978 194.147v32.36c63.852-20.918 142.164-29.045 168.486 17.852 26.846 47.826 8.822 115.565-25.662 214.231h59.138c62.654-84.631 122.224-152.499 153.978-149.516 22.493 2.127 11.987 71.212-3.348 149.516h17.852c55.787-155.032 124.532-250.061 226.504-246.592 89.477 3.062 174.382 93.136 267.789 157.327-48.825-59.746-138.771-144.837-119.389-160.671 20.381-16.676 107.757 13.83 198.611 46.863v-29.008c-59.609-40.669-114.444-79.748-100.422-93.729 12.607-12.572 51.068-14.603 100.422-11.155zM702.32 578.598c-10.724 10.696 56.273 50.467 94.607 78.031-57.917-20.224-130.93-50.64-144.584-39.475-9.859 8.063 35.853 51.3 60.692 81.701-47.522-32.661-91.034-78.335-136.556-79.867-66.933-2.282-105.278 78.158-138.339 201.040 8.691-58.335 34.856-149.716 16.063-151.47-26.654-2.506-91.062 92.529-139.229 163.404 33.635-101.932 64.195-159.993 43.73-196.453-18.475-32.912-87.797-12.901-117.812 4.592 35.362-33.371 110.311-100.516 110.311-128.785 0-41.147-74.248-87.446-211.161-126.425 82.306 12.973 188.426 36.784 200.814 20.198 9.682-12.965-70.135-58.006-118.704-89.96 85.498 36.665 139.68 61.44 163.903 47.314 16.005-9.338 7.096-47.027-16.64-94.138 41.697 47.66 79.079 81.218 107.66 77.166 60.297-8.549 86.343-88.321 133.315-240.57l0.007 0.005c-11.043 84.726-33.406 190.867-19.635 203.794 10.314 9.689 52.354-68.596 84.787-118.422-36.62 92.344-71.837 161.795-54.075 193.441 14.037 25.009 49.656 7.37 97.805-19.018-46.090 42.564-70.85 77.849-62.743 104.401 16.087 52.703 91.427 73.357 226.072 120.508-69.141-8.959-164.308-26.951-180.289-11.013z" - ], - "isMulticolor": false, - "tags": [ - "bomb-explosion" - ], - "defaultCode": 59702, - "grid": 0, - "attrs": [] - }, - { - "id": 55, - "paths": [ - "M938.549 726.191l-129.595-129.595c-39.094-39.094-105.088-63.052-162.168-57.382-0.003 0.005-0.007 0.010-0.008 0.015 13.208-21.726 24.858-45.013 35.367-69.442l-81.262-81.262c-99.734 38.279-168.848 111.071-212.279 212.279l81.262 81.262c25.513-7.754 48.38-18.155 69.034-30.768-3.989 55.996 19.722 119.529 57.773 157.581l129.595 129.595c48.419 48.419 121.365 56.875 178.398 25.451l15.748 15.748 59.339-59.339-15.748-15.748c31.418-57.033 22.961-129.976-25.456-178.395zM352.014 636.489c-12.213-45.579-50.767-91.45-95.377-111.618 19.030-10.42 37.574-22.66 55.762-36.228l-25.386-94.743c-90.052-14.268-172.202 10.043-247.492 66.316l25.386 94.743c22.167 5.157 43.507 7.228 64.156 6.717-26.845 39.687-36.431 96.765-24.544 141.13l40.486 151.094c15.126 56.45 65.434 93.83 121.001 94.941l4.911 18.328 69.181-18.537-4.911-18.328c47.563-28.747 72.44-86.272 57.314-142.722l-40.486-151.094zM583.020 261.501c-0.015 0.017-0.030 0.033-0.047 0.050 8.767 45.422 41.191 90.936 79.593 113.108l130.793 75.514c48.866 28.213 108.731 19.386 147.426-17.791l15.866 9.161 34.575-59.886-33.092-19.105v-0.001l17.224 9.944c12.846-52.095-9.443-108.35-58.306-136.563l-130.793-75.514c-39.455-22.78-97.093-27.775-141.317-11.089-0.008 0.028-0.018 0.057-0.027 0.085 5.892-20.133 10.203-41.177 13.362-62.888l-82.012-47.35c-71.221 51.738-110.707 124.42-123.692 214.238l82.012 47.35c18.676-11.626 34.674-24.798 48.434-39.263zM593.828 249.323c0.002-0.002 0.003-0.003 0.005-0.005-0.002 0-0.003 0.003-0.005 0.005zM588.501 255.537c0.015-0.018 0.032-0.035 0.047-0.053-0.015 0.017-0.030 0.035-0.047 0.053z" - ], - "isMulticolor": false, - "tags": [ - "bombs" - ], - "defaultCode": 59703, - "grid": 0, - "attrs": [] - }, - { - "id": 56, - "paths": [ - "M335.020 691.255l0.018 0.040c0-0.013 0-0.027 0-0.040h-0.018zM900.714 815.294c119.902-12.878 85.525-175.796 0-141.816-97.858 38.879-182.778 68.391-262.303 85.593l26.166-56.083c0.982-0.601 1.964-1.201 2.947-1.797-0.11-1.589-0.192-3.184-0.259-4.779 0.008 0.252 0.017 0.506 0.028 0.758l0.713-1.53-0.77 0.045c-3.015-78.487 45.587-163.392 154.855-163.392 3.366-216.288-79.558-505.95-312.108-505.95l-0.005-0.002c-234.531 0.002-325.826 301.181-329.016 505.951 118.208 0 156.124 84.371 154.019 162.013 0.687 0.444 1.386 0.879 2.078 1.318 0 0-0.002 0-0.002-0.002l31.864 68.292c-73.307-15.018-149.686-44.291-235.59-90.436-106.803-57.371-146.096 112.46 0 137.767-145.652 2.703-104.705 170.704 0 123.585 95.341-42.903 181.729-70.065 265.624-82.578l-15.325 32.847c27.254 7.679 54.508 12.397 81.763 14.426h1.116l-24.457-52.421c18.233-1.644 36.403-2.591 54.571-2.857l-25.957 55.633c2.681 0.165 5.364 0.301 8.045 0.414-44-1.878-87.999-10.604-131.997-27.416v104.886c103.756 35.060 207.516 33.428 311.273 0v-104.886c-10.791 3.587-21.581 6.836-32.372 9.771l-14.575-31.238c-3.545-0.488-7.084-0.95-10.619-1.388 93.747 11.625 190.858 40.379 300.294 84.807 98.708 40.075 124.659-114.14 0-119.536zM568.517 846.714l-23.988 51.412c-9.914 1.056-19.827 1.794-29.741 2.198 8.426-0.342 16.852-0.917 25.278-1.732l-25.381-54.401c17.899 0.182 35.823 1.032 53.833 2.522zM529.727 774.816c1.592-0.105 3.187-0.231 4.781-0.349-1.594 0.119-3.189 0.244-4.781 0.349zM539.688 774.074c1.777-0.145 3.556-0.302 5.337-0.463-1.779 0.16-3.56 0.317-5.337 0.463zM549.694 773.177c1.822-0.177 3.645-0.356 5.471-0.548-1.826 0.192-3.648 0.371-5.471 0.548zM559.871 772.111c1.786-0.2 3.57-0.393 5.357-0.606-1.787 0.214-3.571 0.408-5.357 0.606zM565.291 771.496l15.888-34.051c-0.015 0.003-0.028 0.005-0.043 0.008 5.486-1.034 10.913-2.197 16.259-3.508 0 0 0 0 0 0l13.678 30.596c-15.417 2.816-30.658 5.143-45.781 6.954zM657.495 707.33c2.307-1.412 4.607-2.826 6.909-4.235-2.3 1.408-4.6 2.823-6.909 4.235zM638.408 759.071c-4.407 0.954-8.798 1.871-13.173 2.746 4.377-0.879 8.767-1.792 13.173-2.746zM624.383 761.991c-4.45 0.887-8.889 1.742-13.309 2.551 4.42-0.807 8.857-1.66 13.309-2.551zM608.852 730.879c1.191-0.349 2.374-0.708 3.541-1.089-1.168 0.379-2.35 0.74-3.541 1.089zM613.922 729.268c0.814-0.276 1.63-0.548 2.432-0.839-0.802 0.289-1.619 0.563-2.432 0.839zM618.067 727.787c0.725-0.272 1.453-0.543 2.172-0.825-0.718 0.282-1.445 0.553-2.172 0.825zM621.982 726.248c0.692-0.284 1.385-0.565 2.070-0.859-0.685 0.294-1.378 0.575-2.070 0.859zM625.788 724.626c0.67-0.297 1.341-0.593 2.006-0.897-0.665 0.306-1.335 0.601-2.006 0.897zM629.518 722.922c0.655-0.309 1.31-0.618 1.959-0.935-0.65 0.316-1.305 0.625-1.959 0.935zM633.181 721.14c0.643-0.321 1.285-0.643 1.923-0.971-0.638 0.327-1.28 0.65-1.923 0.971zM636.779 719.296c0.638-0.336 1.275-0.672 1.908-1.012-0.633 0.341-1.27 0.678-1.908 1.012zM640.334 717.39c0.633-0.347 1.266-0.697 1.896-1.047-0.631 0.352-1.263 0.7-1.896 1.047zM643.832 715.44c0.643-0.366 1.286-0.733 1.926-1.103-0.64 0.369-1.283 0.737-1.926 1.103zM647.293 713.449c0.66-0.386 1.318-0.772 1.974-1.161-0.656 0.389-1.315 0.775-1.974 1.161zM650.726 711.424c0.69-0.411 1.378-0.825 2.065-1.238-0.687 0.413-1.375 0.825-2.065 1.238zM654.132 709.376c0.77-0.466 1.539-0.934 2.307-1.403-0.768 0.469-1.537 0.937-2.307 1.403zM651.752 288.431c42.961 11.473 68.401 55.411 56.888 98.246-6.62 24.639-23.632 42.689-45.432 52.105v0.005c-12.702-36.111-52.835-72.166-109.202-96.557 12.676-41.097 55.754-65.021 97.746-53.799zM506.795 416.865h0.005c29.414 0 48.273 157.019 63.799 235.528-26.781-9.146-53.779-24.269-62.855-67.419-9.082 43.197-32.648 56.455-64.748 67.419 11.49-78.509 34.443-235.528 63.799-235.528zM564.996 740.083c-0.018 0.003-0.037 0.005-0.057 0.008 0.018-0.003 0.038-0.005 0.057-0.008zM540.236 742.651c-0.043 0.003-0.085 0.005-0.129 0.008 0.043-0.003 0.085-0.007 0.129-0.008zM413.85 729.883c5.386 1.493 10.811 2.872 16.27 4.141l19.043 40.815c-19.964-1.34-39.984-3.703-60.194-7.153l18.506-39.664c2.115 0.643 4.238 1.268 6.375 1.861zM489.833 742.941c-0.301-0.020-0.601-0.038-0.902-0.058 0.302 0.020 0.601 0.038 0.902 0.058zM472.46 741.389c-0.205-0.023-0.409-0.048-0.613-0.072 0.205 0.022 0.409 0.048 0.613 0.072zM463.984 740.315c-0.134-0.018-0.266-0.035-0.399-0.053 0.134 0.018 0.267 0.035 0.399 0.053zM447.129 737.581c-0.202-0.037-0.404-0.075-0.605-0.114 0.2 0.038 0.403 0.077 0.605 0.114zM309.32 386.674c-11.513-42.834 13.927-86.773 56.888-98.247 41.992-11.222 85.069 12.702 97.746 53.799-56.367 24.392-96.5 60.448-109.202 96.558v-0.005c-21.8-9.415-38.808-27.466-45.432-52.105zM388.749 721.601c-0.008-0.003-0.018-0.007-0.028-0.010 0.010 0.003 0.020 0.007 0.028 0.010zM370.762 714.005c-0.065-0.030-0.13-0.062-0.197-0.092 0.065 0.030 0.132 0.060 0.197 0.092zM379.81 718.003c-0.122-0.052-0.244-0.102-0.366-0.154 0.122 0.052 0.244 0.102 0.366 0.154zM378.87 765.87c-3.289-0.618-6.587-1.268-9.888-1.944 3.301 0.677 6.597 1.325 9.888 1.944zM388.95 767.683c-3.257-0.556-6.522-1.146-9.791-1.759 3.269 0.615 6.532 1.203 9.791 1.759zM457.908 775.358c8.255 0.431 16.504 0.688 24.758 0.773l15.285-32.76c4.497 0.182 9.004 0.284 13.521 0.284 1.231 0 2.462-0.017 3.692-0.027-0.033 0-0.067 0.002-0.099 0.002l14.553 31.191c-24.013 1.582-47.837 1.781-71.71 0.536zM449.18 774.841c2.713 0.182 5.424 0.344 8.135 0.488-2.711-0.145-5.422-0.307-8.135-0.488zM514.644 844.19c-2.116-0.022-4.233-0.020-6.348-0.020 2.115 0.003 4.231-0.002 6.348 0.020zM505.243 844.167c-2.85 0.012-5.698 0.038-8.548 0.080 2.85-0.042 5.698-0.074 8.548-0.080zM488.704 900.605c2.446 0.047 4.893 0.074 7.338 0.080-2.447-0.007-4.893-0.033-7.338-0.080zM479.685 900.338c2.527 0.102 5.055 0.179 7.582 0.236-2.527-0.057-5.055-0.134-7.582-0.236zM497.677 900.682c2.417-0.003 4.834-0.023 7.252-0.067-2.417 0.045-4.834 0.063-7.252 0.067zM513.903 900.365c-2.461 0.095-4.923 0.16-7.383 0.214 2.461-0.053 4.921-0.12 7.383-0.214zM615.227 885.367c-3.214 0.81-6.428 1.589-9.644 2.337 3.214-0.747 6.428-1.527 9.644-2.337zM625.522 882.675c-3.296 0.895-6.593 1.759-9.889 2.593 3.296-0.834 6.592-1.697 9.889-2.593zM544.559 898.123c3.336-0.356 6.67-0.748 10.006-1.174-3.334 0.426-6.67 0.819-10.006 1.174zM554.826 896.914c3.264-0.419 6.528-0.874 9.792-1.361-3.264 0.488-6.528 0.942-9.792 1.361zM565.051 895.487c3.209-0.483 6.42-0.997 9.629-1.544-3.209 0.546-6.418 1.061-9.629 1.544zM575.236 893.848c3.177-0.545 6.356-1.121 9.533-1.729-3.177 0.608-6.354 1.184-9.533 1.729zM585.374 892.004c3.164-0.608 6.328-1.248 9.492-1.918-3.162 0.67-6.328 1.308-9.492 1.918zM595.497 889.953c3.171-0.675 6.341-1.38 9.513-2.115-3.171 0.735-6.341 1.44-9.513 2.115zM589.914 848.789c3.456 0.383 6.917 0.79 10.382 1.219-3.466-0.431-6.926-0.837-10.382-1.219zM568.535 846.716c3.331 0.276 6.667 0.578 10.004 0.899-3.338-0.321-6.672-0.623-10.004-0.899zM579.307 847.687c3.343 0.324 6.69 0.673 10.041 1.041-3.349-0.369-6.697-0.717-10.041-1.041z" - ], - "isMulticolor": false, - "tags": [ - "bone-bite" - ], - "defaultCode": 59704, - "grid": 0, - "attrs": [] - }, - { - "id": 57, - "paths": [ - "M494.878 444.441c66.685-15.158 74.889-99.483-29.678-124.413-77.934-18.581-152.972-55.162-212.015-104.747 2.397 3.857 4.841 7.654 7.332 11.399-24.476-36.797-44.5-78.82-58.368-129.408 2.158 7.873 4.47 15.532 6.919 23.004 14.249-19.942 13.541-47.745-3.276-67.024-19.663-22.543-53.884-24.883-76.434-5.23-19.571 17.057-23.908 45.073-11.86 66.914-20.007-14.904-48.362-14.425-67.933 2.633-22.55 19.653-24.89 53.859-5.227 76.402 18.815 21.571 50.951 24.628 73.444 7.637-1.066-0.556-2.125-1.098-3.177-1.625 28.787 14.436 63.363 39.876 98.408 71.585-3.045-2.756-6.089-5.467-9.124-8.125 35.117 55.535 75.382 138.008 74.356 187.907-2.299 111.686 115.137 151.321 138.786 73.456 64.46 62.115 91.889 153.76 48.622 239.679 76.539 139.112 290.707 254.249 512.877 192.116-362.053-147.478-230.255-321.342-483.652-512.159zM111.489 198.452c0.982 0.473 1.971 0.957 2.968 1.457-0.997-0.499-1.986-0.984-2.968-1.457zM96.174 191.977c0.468 0.167 0.945 0.349 1.417 0.525-0.473-0.175-0.949-0.357-1.417-0.525zM99.188 193.098c0.611 0.236 1.231 0.486 1.851 0.735-0.62-0.249-1.239-0.499-1.851-0.735zM102.236 194.314c0.715 0.294 1.44 0.603 2.163 0.914-0.725-0.312-1.447-0.62-2.163-0.914zM105.302 195.614c0.815 0.354 1.637 0.723 2.462 1.098-0.825-0.376-1.647-0.743-2.462-1.098zM108.382 196.992c0.902 0.414 1.811 0.84 2.726 1.278-0.915-0.438-1.824-0.864-2.726-1.278zM486.149 437.976c-0.045-0.033-0.089-0.065-0.134-0.099 0.045 0.032 0.089 0.065 0.134 0.099zM467.824 425.032c-0.279-0.19-0.563-0.383-0.842-0.573 0.279 0.19 0.563 0.381 0.842 0.573zM338.403 317.767c-6.316-6.034-12.509-12.161-18.572-18.402 6.062 6.241 12.258 12.367 18.572 18.402zM399.348 371.416c-3.186-2.641-6.351-5.285-9.503-7.933 3.152 2.648 6.318 5.292 9.503 7.933zM387.209 361.26c-2.397-2.023-4.784-4.048-7.161-6.077 2.375 2.030 4.764 4.054 7.161 6.077zM377.452 352.963c-2.872-2.464-5.728-4.936-8.566-7.415 2.838 2.479 5.695 4.95 8.566 7.415zM368.117 344.878c-3.264-2.858-6.503-5.73-9.719-8.615 3.216 2.885 6.455 5.755 9.719 8.615zM357.618 335.556c-2.883-2.593-5.743-5.2-8.583-7.819 2.84 2.621 5.701 5.227 8.583 7.819zM347.53 326.345c-2.895-2.683-5.77-5.379-8.618-8.095 2.848 2.716 5.723 5.412 8.618 8.095zM284.328 259.254c-8.287-10.372-16.204-21.147-23.701-32.407 7.497 11.262 15.413 22.034 23.701 32.407zM319.368 298.884c-2.92-3.012-5.808-6.052-8.665-9.121 2.855 3.070 5.745 6.109 8.665 9.121zM310.379 289.418c-8.96-9.644-17.597-19.593-25.866-29.932 8.269 10.34 16.907 20.286 25.866 29.932zM250.307 307.526c-2.933-3.005-5.877-5.977-8.827-8.914 2.95 2.937 5.893 5.908 8.827 8.914zM222.165 279.983c-2.868-2.678-5.735-5.317-8.6-7.913 2.865 2.598 5.731 5.235 8.6 7.913zM240.759 297.897c-2.808-2.79-5.623-5.546-8.441-8.269 2.818 2.723 5.631 5.479 8.441 8.269zM231.406 288.75c-2.79-2.686-5.581-5.337-8.374-7.953 2.793 2.616 5.584 5.267 8.374 7.953zM278.229 337.496c2.671 3.002 5.324 6.025 7.955 9.067-2.633-3.042-5.284-6.065-7.955-9.067zM250.541 307.765c3.014 3.090 6.015 6.216 9.004 9.371-2.988-3.157-5.99-6.283-9.004-9.371zM259.932 317.547c2.857 3.020 5.698 6.069 8.526 9.144-2.826-3.075-5.67-6.124-8.526-9.144zM269.238 327.543c2.713 2.958 5.411 5.94 8.090 8.944-2.679-3.004-5.377-5.985-8.090-8.944zM304.014 367.855c2.678 3.308 5.322 6.63 7.935 9.963-2.613-3.333-5.259-6.655-7.935-9.963zM286.969 347.47c2.726 3.161 5.431 6.339 8.108 9.537-2.679-3.197-5.382-6.378-8.108-9.537zM295.483 357.49c2.808 3.358 5.588 6.732 8.334 10.123-2.746-3.391-5.526-6.765-8.334-10.123zM335.404 409.401c-2.27-3.237-4.58-6.471-6.927-9.7 2.349 3.229 4.659 6.463 6.927 9.7zM327.725 398.668c-2.302-3.156-4.639-6.304-7.009-9.448 2.37 3.144 4.707 6.294 7.009 9.448zM319.916 388.161c-2.409-3.182-4.851-6.356-7.325-9.52 2.474 3.164 4.916 6.338 7.325 9.52zM335.909 410.118c2.419 3.46 4.794 6.921 7.118 10.38-2.322-3.461-4.699-6.922-7.118-10.38zM415.388 391.878l-29.592 107.188c2.776 1.949 5.504 3.949 8.19 5.992-2.684-2.045-5.416-4.043-8.19-5.992l29.592-107.188zM458.625 418.833c-0.469-0.311-0.934-0.623-1.405-0.934 0.471 0.311 0.937 0.621 1.405 0.934zM438.155 405.651c-0.807-0.504-1.625-1.007-2.439-1.512 0.814 0.503 1.632 1.007 2.439 1.512zM428.221 399.54c-0.927-0.563-1.849-1.124-2.785-1.687 0.934 0.563 1.858 1.126 2.785 1.687zM402.044 511.444c5.19 4.278 10.187 8.737 14.981 13.355-4.794-4.619-9.792-9.076-14.981-13.355zM394.136 505.173c2.654 2.023 5.262 4.091 7.826 6.202-2.563-2.113-5.173-4.18-7.826-6.202z" - ], - "isMulticolor": false, - "tags": [ - "bone-knife" - ], - "defaultCode": 59705, - "grid": 0, - "attrs": [] - }, - { - "id": 58, - "paths": [ - "M983.293 595.587l-67.594-22.31 1.591 1.665-373.85 135.67-357.881-378.335-87.855-28.998c-44.338 31.379-49.323 120.782-19.511 151.87l441.774 454.079 467.257-167.304c-42.553-23.261-77.1-89.476-3.93-146.337zM495.156 718.12l-368.136-381.698h11.020l366.51 374.19-9.393 7.508zM523.302 895.59c0 0-50.929-59.504 15.072-138.695l400.039-144.866c0 0-46.001 78.994 7.832 125.649l-422.944 157.912zM185.558 332.276l-12.216-12.914 372.938-132.431 369.42 386.344 67.592 22.31c-0.33 0.256-0.641 0.514-0.967 0.771l7.884-2.814-435.941-452.001-454.798 162.317 86.088 28.416z" - ], - "isMulticolor": false, - "tags": [ - "book" - ], - "defaultCode": 59706, - "grid": 0, - "attrs": [] - }, - { - "id": 59, - "paths": [ - "M888.196 149.197c-63.202-65.882-316.713-63.977-520.202-29.357l12.906 141.158c119.723-8.942 247.651-6.441 319.7 66.944 69.821 75.509 66.142 203.41 51.429 322.56l140.372 19.707c44.406-201.579 58.55-454.703-4.205-521.012v0zM327.62 127.283c-10.977 2.18-21.803 4.465-32.32 6.831l12.189 133.389c10.703-1.051 21.578-2.095 32.611-3.112l-12.48-137.107zM883.015 710.178l-136.342-19.085c-1.55 10.972-3.117 21.783-4.684 32.422l132.644 18.616c2.872-10.392 5.675-21.095 8.382-31.953v0zM255.202 143.895c-96.45 25.532-163.127 58.984-159.251 94.332 4.881 44.523 76.476 42.006 170.869 33.191 0 0.002-11.618-127.522-11.618-127.522zM862.928 781.71l-126.814-17.762c-13.362 93.859-19.332 165.248 24.902 172.273 35.118 5.578 71.754-59.405 101.912-154.51v0z" - ], - "isMulticolor": false, - "tags": [ - "boomerang" - ], - "defaultCode": 59707, - "grid": 0, - "attrs": [] - }, - { - "id": 60, - "paths": [ - "M508.784 449.96c-24.003 11.18-48.31 25.674-72.133 43.11 22.441-32.529 47.492-58.012 73.401-76.778l27.179-271.844c11.907-55.181-57.033-79.69-145.857-68.531h0.005c-69.084 8.68-150.045 38.631-214.47 94.452l66.832 379.772 3.966 121.141 116.998 16.885 33.498-78.006 46.518 82.622c160.061 18.85 282.557-2.402 343.509-43.521 12.164-125.97-86.014-283.127-279.445-199.301zM839.404 653.553c10.84 6.508 16.718 13.449 16.718 20.657 0 37.11-155.22 67.193-346.687 67.193s-346.687-30.084-346.687-67.193c0-7.242 5.935-14.214 16.875-20.751-44.516 13.279-70.606 29.377-70.606 46.73 0 45.504 179.242 82.393 400.339 82.393s400.339-36.887 400.339-82.393c0-17.313-25.968-33.376-70.292-46.636zM165.206 658.088h-94.849l50.263 22.353c9.533-7.971 24.701-15.484 44.587-22.353zM109.018 700.189c0-7.467 4.844-14.702 13.897-21.581l-91.203 52.79 91.211-9.629c-9.049-6.879-13.905-14.112-13.905-21.581zM140.134 732.085l-58.288 88.924 129.345-65.845c-29.516-6.777-53.667-14.563-71.057-23.079zM237.7 760.702l-21.429 133.337 122.613-119.285c-37.23-3.612-71.312-8.369-101.184-14.052zM372.181 777.617l23.31 154.804 101.68-149.882c-43.793-0.269-85.821-1.983-124.99-4.923zM523.874 782.521l112.239 153.298 13.78-158.463c-39.43 3.044-81.81 4.841-126.019 5.165zM683.093 774.44l121.368 119.608-21.489-133.72c-29.47 5.681-63.102 10.461-99.879 14.112zM880.097 731.321c-17.226 8.68-41.431 16.618-71.191 23.52l129.971 66.166-58.781-89.686zM909.696 700.189c0 7.4-4.769 14.572-13.659 21.394l92.979 9.816-108.47-62.78-0.114 0.606c18.86 9.558 29.265 20.011 29.265 30.964zM853.508 658.088c20.403 7.048 35.848 14.774 45.328 22.977l51.668-22.977h-96.996z" - ], - "isMulticolor": false, - "tags": [ - "boot-stomp" - ], - "defaultCode": 59708, - "grid": 0, - "attrs": [] - }, - { - "id": 61, - "paths": [ - "M43.427 343.979c-47.161 138.723 75.524 184.28 163.609 85.555-83.305 16.317-143.995-2.611-163.609-85.555zM734.307 380.362c319.637-72.519 318.284-427.838 74.244-328.462v0.005c161.244-27.127 107.381 217.511-21.188 247.192 79.204-58.612 62.972-114.127 31.782-165.973-12.854 184.228-244.758 215.194-312.721 335.698 0.393-0.697 0.783-1.393 1.188-2.085-0.535 0-1.067 0.020-1.602 0.022-0.010 0.947-0.028 1.883-0.035 2.831 0 0.002-0.002 0.002-0.002 0.003 1.736-220.33 73.334-342.095 173.469-287.143 45.97 25.227 38.912 89.738-14.637 107.535 110.318-22.862 129.752-124.484 24.173-185.438v-0.005c-89.806-51.848-222.295 13.701-239.553 176.746 0 0 0 0.002 0 0.002-64.049-268.211-287.866-327.902-307.584-84.947 0.586-1.233 1.181-2.446 1.784-3.637 0.224-0.443 0.454-0.869 0.682-1.305 0.383-0.74 0.765-1.487 1.154-2.212 0.262-0.488 0.533-0.957 0.797-1.438 0.362-0.656 0.723-1.32 1.091-1.964 0.276-0.481 0.558-0.944 0.835-1.418 0.366-0.623 0.73-1.253 1.103-1.864 0.292-0.479 0.591-0.942 0.885-1.413 0.366-0.585 0.728-1.176 1.099-1.749 0.306-0.471 0.616-0.925 0.925-1.388 0.369-0.555 0.737-1.116 1.109-1.659 0.312-0.454 0.631-0.892 0.947-1.336 0.378-0.533 0.752-1.071 1.134-1.594 0.322-0.441 0.653-0.867 0.979-1.3 0.383-0.506 0.762-1.019 1.148-1.513 0.332-0.426 0.67-0.835 1.006-1.253 0.389-0.484 0.775-0.974 1.168-1.447 0.339-0.408 0.683-0.8 1.026-1.201 0.396-0.464 0.792-0.932 1.191-1.385 0.347-0.393 0.702-0.772 1.052-1.156 0.401-0.439 0.8-0.885 1.206-1.313 0.356-0.378 0.717-0.738 1.076-1.108 0.409-0.419 0.815-0.844 1.228-1.253 0.359-0.356 0.723-0.698 1.086-1.047 0.418-0.403 0.835-0.809 1.258-1.201 0.364-0.339 0.735-0.663 1.103-0.994 0.428-0.384 0.852-0.77 1.283-1.144 0.369-0.319 0.743-0.626 1.116-0.939 0.434-0.364 0.869-0.733 1.308-1.087 0.376-0.302 0.755-0.593 1.133-0.889 0.443-0.346 0.884-0.695 1.331-1.029 0.378-0.284 0.76-0.556 1.141-0.832 0.453-0.329 0.904-0.66 1.36-0.977 0.381-0.266 0.767-0.52 1.151-0.778 0.461-0.311 0.922-0.621 1.386-0.922 0.386-0.249 0.773-0.486 1.161-0.727 0.469-0.292 0.939-0.586 1.413-0.867 0.388-0.231 0.778-0.449 1.168-0.673 0.479-0.274 0.957-0.55 1.44-0.814 0.389-0.212 0.783-0.416 1.174-0.621 0.489-0.257 0.977-0.515 1.47-0.76 0.391-0.195 0.783-0.381 1.176-0.568 0.499-0.239 0.997-0.479 1.5-0.707 0.393-0.179 0.787-0.347 1.181-0.52 0.508-0.221 1.016-0.443 1.527-0.651 0.393-0.162 0.788-0.314 1.183-0.469 0.52-0.204 1.039-0.408 1.56-0.6 0.391-0.144 0.785-0.281 1.178-0.418 0.528-0.185 1.057-0.371 1.59-0.545 0.394-0.129 0.79-0.251 1.184-0.374 0.538-0.167 1.076-0.334 1.617-0.489 0.391-0.114 0.785-0.219 1.179-0.326 0.55-0.149 1.098-0.297 1.65-0.436 0.391-0.099 0.783-0.189 1.176-0.281 0.56-0.13 1.119-0.261 1.682-0.379 0.388-0.082 0.777-0.159 1.166-0.236 0.571-0.114 1.143-0.224 1.717-0.326 0.386-0.068 0.773-0.13 1.159-0.192 0.581-0.094 1.164-0.185 1.749-0.269 0.384-0.053 0.768-0.102 1.153-0.152 0.591-0.075 1.184-0.147 1.779-0.21 0.383-0.040 0.765-0.075 1.149-0.112 0.601-0.057 1.204-0.109 1.811-0.152 0.378-0.027 0.757-0.050 1.136-0.074 0.615-0.037 1.231-0.070 1.849-0.094 0.371-0.015 0.743-0.025 1.116-0.035 0.63-0.017 1.261-0.030 1.894-0.035 0.364-0.003 0.73-0.002 1.094 0 0.641 0.003 1.285 0.010 1.929 0.025 0.361 0.008 0.723 0.022 1.086 0.033 0.651 0.023 1.305 0.050 1.959 0.087 0.357 0.020 0.713 0.042 1.071 0.065 0.663 0.043 1.33 0.092 1.996 0.15 0.351 0.030 0.702 0.062 1.052 0.095 0.677 0.065 1.353 0.135 2.033 0.214 0.346 0.040 0.69 0.082 1.036 0.125 0.687 0.085 1.376 0.177 2.065 0.277 0.337 0.048 0.677 0.1 1.016 0.152 0.7 0.107 1.402 0.222 2.105 0.344 0.331 0.057 0.662 0.115 0.992 0.175 0.715 0.13 1.43 0.267 2.147 0.411 0.321 0.065 0.641 0.13 0.962 0.197 0.728 0.152 1.457 0.312 2.187 0.479 0.314 0.072 0.628 0.145 0.942 0.219 0.742 0.175 1.483 0.359 2.225 0.55 0.302 0.077 0.605 0.155 0.907 0.236 0.757 0.2 1.513 0.408 2.272 0.623 0.292 0.084 0.586 0.167 0.879 0.252 0.77 0.224 1.542 0.456 2.315 0.697 0.281 0.087 0.561 0.174 0.842 0.264 0.783 0.249 1.57 0.506 2.355 0.772 0.272 0.092 0.546 0.184 0.819 0.277 0.798 0.274 1.599 0.558 2.399 0.849 0.259 0.094 0.516 0.187 0.775 0.282 0.815 0.301 1.632 0.611 2.449 0.929 0.247 0.095 0.493 0.19 0.74 0.289 0.829 0.327 1.659 0.663 2.489 1.007 0.236 0.099 0.473 0.195 0.708 0.294 0.842 0.354 1.684 0.717 2.527 1.087 0.226 0.099 0.449 0.197 0.675 0.297 0.857 0.381 1.716 0.773 2.573 1.173 0.21 0.099 0.423 0.195 0.633 0.294 0.87 0.409 1.741 0.829 2.611 1.255 0.202 0.099 0.404 0.197 0.605 0.296 0.885 0.438 1.769 0.887 2.654 1.343 0.185 0.095 0.371 0.19 0.556 0.286 0.9 0.468 1.802 0.947 2.703 1.433 0.172 0.094 0.344 0.184 0.516 0.277 0.917 0.499 1.836 1.009 2.753 1.528 0.154 0.087 0.309 0.174 0.463 0.261 0.932 0.53 1.866 1.072 2.798 1.622 0.142 0.084 0.284 0.165 0.426 0.251 0.947 0.561 1.894 1.134 2.84 1.716 0.127 0.079 0.254 0.154 0.379 0.232 0.962 0.593 1.923 1.199 2.883 1.812 0.112 0.072 0.226 0.142 0.337 0.214 0.979 0.628 1.958 1.268 2.937 1.918 0.092 0.062 0.185 0.122 0.277 0.184 0.992 0.662 1.985 1.335 2.977 2.016 0.080 0.055 0.162 0.11 0.242 0.165 1.014 0.7 2.026 1.412 3.039 2.133 0.055 0.038 0.11 0.079 0.165 0.117 1.034 0.74 2.068 1.49 3.102 2.253 0.035 0.025 0.068 0.050 0.104 0.075 1.047 0.775 2.095 1.56 3.139 2.359 0.022 0.017 0.043 0.033 0.065 0.050 1.066 0.814 2.13 1.639 3.192 2.477v0c0 0 0 0 0 0-42.986 6.657-90.135 40.644-129.295 108.938 110.181-66.107 189.283-27.205 251.289 69.543 0 0.002 0.002 0.003 0.002 0.003 0-0.002-0.002-0.002-0.002-0.003 2.532 7.028 4.91 14.164 7.123 21.4 0.045 0.149 0.089 0.297 0.135 0.446 0.317 1.041 0.606 2.098 0.917 3.142 1.888 12.739 4.335 25.846 7.462 39.363 0.409 0.443 0.805 0.9 1.209 1.35-53.171-58.846-149.36-75.15-219.924-10.205 73.609-4.275 133.12 20.771 182.695 66.476-34.505 7.228-67.191 18.8-95.511 34.139 44.929 68.675 79.588 160.708 79.588 265.65-100.489 21.081-156.171 112.582-168.663 225.806h409.212c-3.303-68.763-27.232-121.032-89.202-162.98 87.57 5.934 138.068 99.244 146.397 162.983h55.841c-12.438-112.742-70.646-204.224-170.808-225.806 0-111.434 36.799-196.962 81.735-265.65-19.398-12.211-40.845-21.644-63.516-28.52-34.651 76.429-64.388 171.217-70.791 293.983-6.274-121.415 1.831-225.268 17.386-302.254 42.926-44.526 103.661-75.338 179-92.429zM462.527 420.269c0.055 0.284 0.102 0.571 0.157 0.855-0.623-3.201-1.291-6.381-1.98-9.552 0.561 2.588 1.123 5.175 1.64 7.783 0.060 0.306 0.124 0.61 0.182 0.914zM500.13 528.74c0.055-1.303 0.085-2.598 0.109-3.889 0.002-0.075 0.005-0.152 0.007-0.227-0.002 0.074-0.005 0.147-0.007 0.221 0.008-0.466 0.035-0.939 0.038-1.405-0.017 1.757-0.072 3.526-0.147 5.3zM500.066 530.113c-0.080 1.672-0.187 3.353-0.322 5.041-0.007 0.089-0.012 0.177-0.018 0.266v0c0.149-1.801 0.256-3.59 0.344-5.374-0.002 0.022-0.002 0.045-0.003 0.067zM500.064 530.145c-0.084 1.66-0.185 3.328-0.321 5.005 0.135-1.675 0.242-3.344 0.321-5.005zM499.745 535.463c1.031 2.329 2.093 4.674 3.156 7.018-1.069-2.347-2.125-4.689-3.156-7.018zM499.543 506.638c0.159 1.639 0.299 3.284 0.406 4.941-0.107-1.657-0.247-3.303-0.406-4.941zM499.963 511.753c0.109 1.709 0.18 3.431 0.234 5.16-0.052-1.729-0.125-3.451-0.234-5.16zM500.232 518.189c0.040 1.716 0.060 3.438 0.045 5.173 0.015-1.736-0.005-3.458-0.045-5.173zM498.822 500.387c0.227 1.65 0.421 3.316 0.595 4.988-0.174-1.672-0.368-3.338-0.595-4.988zM497.535 492.668c-0.205-1.103-0.409-2.205-0.641-3.294 0.336 1.574 0.638 3.162 0.925 4.758-0.089-0.491-0.192-0.974-0.284-1.463zM498.047 495.432c0.262 1.533 0.508 3.072 0.725 4.624-0.215-1.55-0.463-3.090-0.725-4.624zM496.854 489.303c-0.548 1.467-1.066 2.95-1.569 4.442 0.503-1.493 1.019-2.977 1.569-4.442-1.156-5.414-2.584-10.701-4.283-15.846 1.697 5.133 3.14 10.402 4.296 15.804-0.003 0.013-0.008 0.027-0.013 0.042 0-0.002 0 0 0 0zM486.976 459.051c0.628 1.397 1.231 2.808 1.817 4.23-0.585-1.422-1.189-2.831-1.817-4.23zM489.039 463.877c1.248 3.060 2.4 6.174 3.453 9.343-1.051-3.169-2.205-6.283-3.453-9.343zM494.841 495.105c-0.362 1.118-0.712 2.243-1.047 3.376 0.336-1.133 0.683-2.258 1.047-3.376zM493.373 499.892c-0.414 1.448-0.805 2.908-1.174 4.38 0.369-1.472 0.762-2.932 1.174-4.38zM491.774 506.068c-0.221 0.927-0.433 1.859-0.635 2.798 0.202-0.937 0.416-1.869 0.635-2.798zM490.66 511.185c-0.152 0.767-0.291 1.542-0.431 2.317 0.139-0.775 0.279-1.549 0.431-2.317zM489.402 518.608c-0.065 0.453-0.137 0.904-0.199 1.358 0.062-0.456 0.135-0.905 0.199-1.358zM488.809 523.252c-0.048 0.431-0.094 0.862-0.139 1.295 0.045-0.433 0.092-0.864 0.139-1.295zM487.918 536.486c0 0.023-0.002 0.045-0.002 0.068 0-0.023 0.002-0.047 0.002-0.068zM488.433 554.223c0.020 0.257 0.038 0.511 0.060 0.768-0.020-0.241-0.053-0.489-0.072-0.73 0.005 0.008 0.010 0.017 0.017 0.025-0.002-0.022-0.003-0.042-0.005-0.063zM491.52 576.564c-0.115-0.593-0.21-1.174-0.319-1.766 0.11 0.591 0.204 1.173 0.319 1.766zM490.232 569.265c-0.099-0.62-0.18-1.229-0.272-1.846 0.092 0.616 0.174 1.226 0.272 1.846zM489.221 562.061c-0.068-0.566-0.129-1.128-0.192-1.692 0.063 0.563 0.124 1.124 0.192 1.692zM505.452 548.047c0.952 2.061 1.901 4.121 2.883 6.196-0.977-2.068-1.936-4.128-2.888-6.184 0.002-0.003 0.003-0.007 0.005-0.012zM539.316 491.084c-0.723 0.914-1.437 1.834-2.148 2.758 0.712-0.922 1.425-1.844 2.148-2.758zM533.663 498.476c-0.693 0.945-1.36 1.909-2.040 2.863 0.68-0.954 1.346-1.919 2.040-2.863zM525.99 509.61c-0.778 1.194-1.57 2.379-2.33 3.588 0.76-1.209 1.552-2.394 2.33-3.588zM521.059 517.486c-0.797 1.33-1.59 2.661-2.362 4.006 0.773-1.345 1.565-2.676 2.362-4.006zM516.313 525.746c-0.795 1.45-1.57 2.913-2.337 4.383 0.767-1.47 1.542-2.933 2.337-4.383zM511.843 534.257c-0.904 1.811-1.769 3.648-2.633 5.488 0.864-1.839 1.729-3.677 2.633-5.488zM507.814 542.652c-0.070-1.255-0.13-2.494-0.195-3.742 0.065 1.248 0.125 2.487 0.195 3.742zM507.241 531.436c-0.074-1.567-0.142-3.125-0.209-4.684 0.067 1.559 0.134 3.119 0.209 4.684zM506.76 520.008c-0.055-1.458-0.112-2.92-0.162-4.372 0.048 1.452 0.107 2.913 0.162 4.372zM506.29 505.326c-0.023-0.956-0.038-1.899-0.060-2.853 0.022 0.954 0.035 1.898 0.060 2.853zM506.077 494.483c-0.020-1.343-0.037-2.678-0.052-4.014 0.015 1.336 0.030 2.671 0.052 4.014zM505.965 483.395c-0.007-1.229-0.015-2.461-0.017-3.683 0.002 1.223 0.010 2.454 0.017 3.683zM467.39 426.876c-0.326-0.411-0.65-0.822-0.979-1.229 0-0.003 0-0.007 0-0.008s0 0 0 0c0.331 0.408 0.653 0.825 0.979 1.238zM486.879 458.829c-0.645-1.43-1.315-2.846-2.001-4.25 0.687 1.405 1.356 2.82 2.001 4.25zM484.429 453.675c-0.55-1.106-1.114-2.203-1.689-3.293 0.575 1.089 1.138 2.185 1.689 3.293zM482.21 449.379c-0.683-1.271-1.383-2.529-2.1-3.777 0.718 1.248 1.417 2.507 2.1 3.777zM479.407 444.409c-0.515-0.877-1.037-1.747-1.569-2.613 0.531 0.864 1.054 1.736 1.569 2.613zM476.917 440.31c-0.605-0.961-1.221-1.911-1.848-2.855 0.626 0.944 1.243 1.894 1.848 2.855zM473.746 435.497c-0.469-0.687-0.944-1.371-1.423-2.050 0.481 0.678 0.954 1.363 1.423 2.050zM471.032 431.652c-0.418-0.573-0.844-1.139-1.27-1.706 0.426 0.568 0.852 1.134 1.27 1.706zM483.208 546.353c-0.319-0.476-0.64-0.954-0.961-1.428 0.321 0.474 0.641 0.95 0.961 1.428zM476.918 537.182c-0.077-0.109-0.155-0.215-0.232-0.326 0.077 0.11 0.155 0.217 0.232 0.326zM471.506 529.662c-0.336-0.458-0.67-0.917-1.007-1.373 0.337 0.456 0.672 0.915 1.007 1.373zM459.196 332.113c-0.022-0.144-0.042-0.291-0.063-0.434 0.022 0.144 0.042 0.291 0.063 0.434zM465.511 396.325c-0.008-0.16-0.018-0.321-0.027-0.481 0.008 0.16 0.018 0.319 0.027 0.481zM464.975 387.029c-0.030-0.459-0.063-0.914-0.094-1.371 0.032 0.458 0.065 0.912 0.094 1.371zM464.321 377.818c-0.045-0.581-0.094-1.158-0.14-1.737 0.047 0.578 0.095 1.156 0.14 1.737zM463.551 368.675c-0.057-0.616-0.115-1.231-0.172-1.848 0.057 0.616 0.115 1.231 0.172 1.848zM462.661 359.579c-0.062-0.591-0.125-1.183-0.189-1.772 0.063 0.591 0.125 1.181 0.189 1.772zM461.647 350.51c-0.062-0.521-0.124-1.042-0.185-1.564 0.062 0.521 0.124 1.042 0.185 1.564zM460.503 341.418c-0.052-0.394-0.104-0.79-0.157-1.183 0.053 0.394 0.105 0.79 0.157 1.183zM454.317 385.706c0.074 0.266 0.147 0.533 0.221 0.8 0.221 0.792 0.418 1.597 0.633 2.392-0.934-3.434-1.906-6.847-2.913-10.242 0.697 2.345 1.398 4.686 2.060 7.049zM457.491 397.708c0.144 0.576 0.271 1.161 0.414 1.739-0.852-3.455-1.742-6.891-2.669-10.307 0.683 2.519 1.366 5.040 2.008 7.581 0.082 0.329 0.165 0.658 0.247 0.987zM458.094 400.242c0.623 2.552 1.246 5.107 1.826 7.681 0.079 0.347 0.157 0.693 0.236 1.041 0.089 0.396 0.164 0.797 0.252 1.193-0.735-3.323-1.51-6.627-2.314-9.914zM462.701 421.215c0 0 0 0.002 0 0-0.007-0.007-0.015-0.015-0.022-0.025 0.008 0.008 0.015 0.017 0.022 0.025zM465.071 521.091c-0.239-0.309-0.479-0.613-0.718-0.922 0.239 0.307 0.479 0.611 0.718 0.922zM459.337 513.824c-0.332-0.413-0.663-0.829-0.997-1.239 0.334 0.411 0.665 0.827 0.997 1.239zM433.376 484.776c-0.227-0.227-0.451-0.461-0.678-0.688 0.227 0.227 0.451 0.461 0.678 0.688zM452.782 505.896c-0.351-0.413-0.703-0.819-1.054-1.228 0.351 0.409 0.705 0.815 1.054 1.228zM446.656 498.867c-0.304-0.341-0.606-0.687-0.912-1.027 0.306 0.339 0.608 0.685 0.912 1.027zM440.029 491.639c-0.433-0.459-0.869-0.912-1.301-1.368 0.434 0.456 0.869 0.91 1.301 1.368zM426.789 478.358c-0.493-0.468-0.987-0.93-1.482-1.393 0.494 0.463 0.989 0.925 1.482 1.393zM508.544 554.691c-0.129-1.966-0.236-3.907-0.356-5.862 0.119 1.953 0.227 3.896 0.356 5.862 0 0 0 0 0 0zM549.205 479.344c0.068-0.077 0.14-0.15 0.21-0.227-0.070 0.077-0.142 0.15-0.21 0.227zM543.046 486.489c0.682-0.819 1.38-1.627 2.071-2.439-0.693 0.812-1.39 1.619-2.071 2.439zM648.882 206.197c-65.073-11.438-86.026 96.817-1.325 83.333-29.91-11.050-32.085-55.099 1.325-83.333z" - ], - "isMulticolor": false, - "tags": [ - "bottle-vapors" - ], - "defaultCode": 59709, - "grid": 0, - "attrs": [] - }, - { - "id": 62, - "paths": [ - "M767.875 188.91h-490.812c0 116.004-67.941 42.798-67.941 170.46v502.026c0 54.606 43.758 98.362 98.361 98.362h426.236c54.604 0 98.361-43.758 98.361-98.362v-502.026c0.002-135.206-64.205-58.547-64.205-170.46zM375.539 905.59l-0.003 0.008h-0.005l0.008-0.008 118.206-318.033h-214.429l346.384-367.643-93.47 268.437h233.674l-390.366 417.239zM198.751 46.611v150.105h78.19c0.074-2.512 0.122-5.092 0.122-7.806h490.812c0 2.723 0.048 5.3 0.124 7.806h79.379v-150.105h-648.626z" - ], - "isMulticolor": false, - "tags": [ - "bottled-bolt" - ], - "defaultCode": 59710, - "grid": 0, - "attrs": [] - }, - { - "id": 63, - "paths": [ - "M1004.33 999.626l-83.961-706.675-123.61 123.61-480.446-398.817h-293.865v304.359l394.151 474.618-118.946 118.946 706.677 83.96zM36.684 112.389l0.601-76.533h214.579l533.061 446.496 106.977-106.977 53.903 471.254-471.255-53.903 102.582-102.582-540.448-577.755z" - ], - "isMulticolor": false, - "tags": [ - "bottom-right" - ], - "defaultCode": 59711, - "grid": 0, - "attrs": [] - }, - { - "id": 64, - "paths": [ - "M123.998 124.888c96.777 18.656 245.169 165.302 258.649 258.649-87.354-9.269-238.467-155.738-258.649-258.649zM479.177 211.729l-116.342 116.342c10.352 19.531 17.346 38.392 19.812 55.466-16.778-1.781-35.914-8.638-56.018-19.261l-127.733 127.733 52.962 52.962 280.28-280.28-52.962-52.962zM123.998 124.888c10.228 1.971 21.036 5.387 32.197 10.004l31.485-31.485-68.002-68.002-88.173 88.171 68.002 68.003 34.412-34.412c-4.499-11.077-7.886-21.903-9.921-32.28zM844.344 691.756l-81.255 14.478 15.243-80.022-80.976 14.289 16.195-79.069-80.022 15.243 15.243-80.022-80.976 14.289 15.527-81.098-94.233-94.233-149.686 149.688 365.038 365.038c70.128 70.135 186.52 155.235 282.963 133.287-46.792-42.499-163.21-213.025-143.061-291.868z" - ], - "isMulticolor": false, - "tags": [ - "bowie-knife" - ], - "defaultCode": 59712, - "grid": 0, - "attrs": [] - }, - { - "id": 65, - "paths": [ - "M585.763 336.589c2.892-94.786 93.981-319.308-74.607-317.442-1.417-0.017-2.823-0.017-4.203 0-162.866 1.899-73.227 223.454-70.354 317.442h149.163zM594.531 388.373h-166.698c-42.818 141.434-182.618 222.99 13.882 610.75 69.448 5.053 42.034 3.901 69.442 4.001 27.409-0.1-0.007 1.052 69.442-4.001 196.501-387.76 56.744-469.316 13.933-610.75z" - ], - "isMulticolor": false, - "tags": [ - "bowling-pin" - ], - "defaultCode": 59713, - "grid": 0, - "attrs": [] - }, - { - "id": 66, - "paths": [ - "M507.094 17.356c-217.432 0-393.7 221.251-393.7 494.173s176.27 494.173 393.7 494.173 393.7-221.251 393.7-494.173-176.27-494.173-393.7-494.173zM337.78 820.252c-46.842 0-84.815-38.309-84.815-85.565s37.973-85.565 84.815-85.565 84.815 38.309 84.815 85.565c0 47.256-37.973 85.565-84.815 85.565zM200.442 363.67c0-171.315 138.876-310.192 310.192-310.192s310.192 138.876 310.192 310.192-138.875 310.192-310.192 310.192-310.192-138.878-310.192-310.192zM668.264 820.252c-46.842 0-84.815-38.309-84.815-85.565s37.973-85.565 84.815-85.565 84.815 38.309 84.815 85.565c-0.002 47.256-37.973 85.565-84.815 85.565zM850.663 752.947c-11.653 26.071-25.116 50.694-40.208 73.568 46.63-19.284 87.272-43.795 118.664-73.568h-78.455zM163.524 752.947h-71.501c29.111 27.611 66.324 50.736 108.987 69.356-13.989-21.679-26.54-44.872-37.485-69.356zM511.327 594.588l-199.117-116.1-0.733-230.926 198.377-114.823 199.117 116.1 0.733 230.926-198.377 114.823z" - ], - "isMulticolor": false, - "tags": [ - "brain-freeze" - ], - "defaultCode": 59714, - "grid": 0, - "attrs": [] - }, - { - "id": 67, - "paths": [ - "M517.771 48.322c80.789-3.211 159.944 20.111 236.282 63.313l-17.401 64.935c-89.614 10.765-164.169-6.059-236.282-63.313l17.401-64.935zM662.013 453.771c17.994-11.807 31.458-27.723 36.734-47.383 9.811-36.578-9.859-75.288-46.523-104.032l32.892-122.756c-52.603-0.413-100.302-12.605-146.168-39.705l-32.741 122.185c-46.802 6.286-83.753 30.68-93.663 67.622-5.341 19.902-2.116 41.060 7.833 60.469-109.426 26.489-205.854 119.086-240.446 248.054-18.333 68.346-16.643 136.428 0.974 197.136 138.541 102.684 291.204 155.889 466.687 125.045 45.395-43.721 81.148-102.154 99.41-170.236 34.794-129.751-2.444-258.96-84.987-336.398zM641.873 725.535c-34.565-6.146-62.367 8.103-76.655 42.938l-200.604-53.752c6.243-33.134-14.069-65.491-46.454-75.89l25.151-93.769c33.264 7.133 67.415-12.126 78.633-44.067l200.6 53.756c-6.176 32.711 13.076 65.969 44.481 77.019l-25.152 93.765z" - ], - "isMulticolor": false, - "tags": [ - "brandy-bottle" - ], - "defaultCode": 59715, - "grid": 0, - "attrs": [] - }, - { - "id": 68, - "paths": [ - "M509.279 267.461c-136.598 0-255.82 80.812-319.409 200.926h-112.326v185.98h224.655c6.331-118.488 96.451-212.546 207.082-212.546s200.751 94.061 207.082 212.546h224.655v-185.98h-112.329c-63.592-120.114-182.812-200.926-319.409-200.926v0zM77.543 687.495v299.989h224.886v-299.989h-224.886zM716.133 687.495v299.989h224.886v-299.989h-224.886z" - ], - "isMulticolor": false, - "tags": [ - "bridge" - ], - "defaultCode": 59716, - "grid": 0, - "attrs": [] - }, - { - "id": 69, - "paths": [ - "M155.521 256.685c8.344-47.229 43.347-85.229 88.928-97.913l-136.428-136.165-87.458 0.002v99.119l134.958 134.958zM253.411 382.246c0-68.611 55.618-124.23 124.23-124.23 7.883 0 15.582 0.767 23.058 2.17-8.827-59.957-60.473-105.983-122.883-105.983-68.611 0-124.23 55.618-124.23 124.23 0 60.728 43.584 111.245 101.172 122.060-0.877-5.957-1.346-12.046-1.346-18.247zM976.293 978.638l-724.624-279.347 32.995-94.228 263.971-54.083 54.087-263.97 95.361-34.133 278.211 725.76zM548.635 550.98l53.756-262.353-13.389-34.96-338.212 338.214 34.104 13.135zM341.542 501.13l154.983-154.983c-15.467-51.001-62.83-88.131-118.883-88.131-68.611 0-124.23 55.618-124.23 124.23-0.002 56.054 37.128 103.419 88.129 118.884z" - ], - "isMulticolor": false, - "tags": [ - "broadhead-arrow" - ], - "defaultCode": 59717, - "grid": 0, - "attrs": [] - }, - { - "id": 70, - "paths": [ - "M27.43 918.8l30.374-30.374 80.793 80.793-30.374 30.374-80.793-80.793zM449.823 664.985c0-48.521-39.36-87.882-87.882-87.882s-87.88 39.36-87.88 87.88c0 48.521 39.338 87.859 87.882 87.882s87.902-39.338 87.88-87.88zM274.472 673.386l-0.807-0.807-166.337 166.336 80.794 80.794 166.337-166.337-0.92-0.92c-41.832-3.986-75.099-37.253-79.067-79.065zM274.061 664.984c0-45.507 34.621-82.952 78.95-87.431-46.731-53.121-88.214-110.883-123.852-172.613l-111.566 111.566 156.877 156.877c-0.262-2.763-0.409-5.564-0.409-8.399zM449.376 673.946c-4.472 44.334-41.914 78.942-87.433 78.92-2.836-0.002-5.638-0.149-8.406-0.413l157.058 157.058 111.566-111.566c-62.063-35.842-119.841-77.405-172.785-123.999zM815.497 74.632l-423.004 423.004c6.535 9.622 10.729 21.41 10.729 33.817 0 19.234-9.188 36.441-23.375 47.483 34.711 7.191 61.918 34.869 68.453 69.814 11.013-14.625 28.5-24.14 48.078-24.14 12.407 0 23.51 3.51 32.978 9.891l423.002-423.002 29.691-166.555-166.553 29.688zM41.964 872.58l112.539 112.539 49.514-49.514-112.539-112.539-49.514 49.514z" - ], - "isMulticolor": false, - "tags": [ - "broadsword" - ], - "defaultCode": 59718, - "grid": 0, - "attrs": [] - }, - { - "id": 71, - "paths": [ - "M668.46 566.979l-103.896-54.414 11.551 69.274-79.982-27.223c140.578 98.745 235.983 223.089 323.239 380.963 45.236 81.824 143.575 12.893 68.432-68.432 82.667 67.838 155.938-49.888 81.637-81.637-127.123-54.321-235.702-125.187-300.98-218.531v0zM33.595 610.592c-27.535 41.24 16.546 101.867 108.485 66.621-110.858 66.527-16.515 162.119 50.137 86.851 68.369-77.173 149.663-148.82 235.109-182.848l25.35-56.381-65.497 12.519 96.716-119.412c-119.068 83.822-248.314 149.725-397.758 162.338-26.349 2.217-43.363 16.577-52.541 30.313zM566.281 409.355l86.944-207.293-51.261-161.432-66.277 269.075 30.594 99.65zM843.254 585.117l-240.322-123.283 223.464 17.202 16.858 106.081zM507.247 380.697l-185.127-293.925 4.058 221.029 181.069 72.896zM457.359 606.096l-120.317 158.279 93.375-20.573 26.942-137.706zM623.287 420.844l170.267-77.891-111.295-3.122-58.972 81.013zM495.196 607.938l37.931 236.389 72.709-39.18-110.639-197.209z" - ], - "isMulticolor": false, - "tags": [ - "broken-bone" - ], - "defaultCode": 59719, - "grid": 0, - "attrs": [] - }, - { - "id": 72, - "paths": [ - "M184.621 837.458c-44.112-44.080-97.278-62.407-118.756-40.928-21.509 21.511-3.184 74.675 40.928 118.756s97.278 62.407 118.756 40.928c21.511-21.477 3.184-74.643-40.928-118.756zM204.922 930.317c-13.733 15.074-51.377 3.142-84.080-26.651s-48.083-66.164-34.35-81.238 51.377-3.142 84.080 26.651c32.705 29.793 48.083 66.164 34.35 81.238zM174.596 852.877c-1.311-1.273-2.643-2.537-4.016-3.789 1.373 1.25 2.704 2.516 4.016 3.789zM201.805 888.187c-0.697-1.325-1.425-2.654-2.207-3.996 0.78 1.341 1.51 2.673 2.207 3.996zM199.583 884.165c-0.785-1.348-1.62-2.706-2.489-4.068 0.869 1.361 1.704 2.72 2.489 4.068zM182.967 861.593c-1.146-1.283-2.314-2.564-3.525-3.835 1.211 1.271 2.379 2.552 3.525 3.835zM196.64 879.392c-0.85-1.313-1.727-2.629-2.651-3.949 0.924 1.32 1.802 2.636 2.651 3.949zM175.55 853.807c1.295 1.276 2.569 2.557 3.8 3.85-1.231-1.291-2.506-2.574-3.8-3.85zM209.776 912.294c-0.212-2.312-0.636-4.731-1.273-7.242 0.635 2.511 1.062 4.931 1.273 7.242zM193.919 875.341c-0.942-1.343-1.933-2.689-2.95-4.036 1.017 1.346 2.008 2.693 2.95 4.036zM205.759 896.707c-1.039-2.601-2.262-5.264-3.665-7.97 1.403 2.706 2.626 5.369 3.665 7.97zM209.933 915.872v0c0.012-1.104-0.038-2.242-0.14-3.406 0.102 1.164 0.15 2.302 0.14 3.406zM208.437 904.797c-0.641-2.487-1.483-5.058-2.521-7.698 1.037 2.639 1.879 5.212 2.521 7.698zM190.339 870.48c-0.997-1.3-2.018-2.598-3.084-3.896 1.064 1.296 2.086 2.596 3.084 3.896zM187.155 866.459c-1.089-1.325-2.223-2.644-3.383-3.961 1.158 1.316 2.294 2.638 3.383 3.961zM791.016 355.034l15.515-202.859-152.629 55.506c6.806-69.306 46.453-127.935 113.793-187.813l-127.873 32.125-278.314 278.348c-92.439 92.439 2.342 175.669-96.341 274.35l-183.192 183.192 0.423 0.423c26.026-4.794 67.003 13.955 102.225 49.152 28.532 28.533 46.255 60.842 49.409 85.926l174.899-174.899c98.682-98.683 181.911-3.902 274.35-96.341l321.366-321.366-213.628 24.255zM170.554 849.061c-1.166-1.062-2.339-2.095-3.516-3.11 1.176 1.016 2.35 2.048 3.516 3.11zM165.953 845.032c-0.842-0.715-1.684-1.418-2.529-2.108 0.845 0.688 1.689 1.393 2.529 2.108zM116.708 817.608c-0.815-0.202-1.62-0.384-2.417-0.55 0.797 0.165 1.602 0.347 2.417 0.55zM162.218 841.945c-0.86-0.69-1.722-1.365-2.586-2.031 0.862 0.667 1.724 1.341 2.586 2.031zM120.097 818.535c-0.824-0.246-1.64-0.476-2.449-0.687 0.81 0.212 1.625 0.441 2.449 0.687zM110.458 816.375c1.011 0.142 2.045 0.321 3.089 0.526-1.046-0.205-2.078-0.386-3.089-0.526v0zM158.596 839.117c-2.412-1.827-4.833-3.556-7.25-5.185 2.417 1.629 4.838 3.358 7.25 5.185zM134.839 824.365c-0.884-0.429-1.762-0.844-2.636-1.243 0.874 0.398 1.754 0.814 2.636 1.243zM142.922 828.663c-2.41-1.393-4.803-2.679-7.17-3.855 2.367 1.176 4.761 2.462 7.17 3.855zM127.689 821.186c-2.299-0.919-4.554-1.721-6.762-2.405 2.207 0.685 4.464 1.487 6.762 2.405zM131.164 822.656c-0.884-0.391-1.762-0.763-2.636-1.123 0.874 0.357 1.752 0.732 2.636 1.123zM146.552 830.84c-0.895-0.555-1.791-1.092-2.683-1.619 0.892 0.526 1.787 1.064 2.683 1.619zM150.341 833.269c-0.887-0.588-1.774-1.163-2.658-1.722 0.885 0.56 1.771 1.136 2.658 1.722z" - ], - "isMulticolor": false, - "tags": [ - "broken-bottle" - ], - "defaultCode": 59720, - "grid": 0, - "attrs": [] - }, - { - "id": 73, - "paths": [ - "M745.719 50.904c-66.837-0.129-135.004 26.845-188.566 86.171l74.316 289.839-66.765 0.062 70.572 263.756-233.058-376.134 99.899 10.733-97.778-230.873c-163.858-97.328-394.845-13.81-387.368 221.326 8.788 276.43 381.768 368.6 494.006 662.167 118.558-293.592 501.7-368.060 492.507-662.167-5.12-163.817-128.989-264.631-257.766-264.88v0z" - ], - "isMulticolor": false, - "tags": [ - "broken-heart" - ], - "defaultCode": 59721, - "grid": 0, - "attrs": [] - }, - { - "id": 74, - "paths": [ - "M401.318 451.093l80.983-28.719-218.134-345.925h199.85l192.014 383.783-96.66 32.633 160.868 347.253c152.476-168.544 181.295-473.065 181.295-774.286h-791.19c0 407.489 83.968 810.821 395.369 896.398 75.963-16.195 137.687-49.175 187.768-95.137l-292.164-416z" - ], - "isMulticolor": false, - "tags": [ - "broken-shield" - ], - "defaultCode": 59722, - "grid": 0, - "attrs": [] - }, - { - "id": 75, - "paths": [ - "M996.95 606.006c0-211.676-70.023-457.178-248.753-572.707l-0.002-0.003-47.112 72.874c45.387 27.92 69.211 53.788 92.22 99.495-15.92 22.032-27.83 48.668-37.831 78.708 8.142 18.115 14.020 50.442 14.045 71.849l-71.682-11.698-61.884 67.948-49.75-101.921c-65.452 80.468-85.069 114.28-186.263 107.385l-28.604-88.231-102.014 19.763c0 0-18.594-101.623-49.829-124.382 8.768-36.649 34.876-69.076 82.515-98.282l-45.253-83.798c-165.621 116.125-232.981 346.879-232.981 563.001 185.518 93.299 240.866 199.324 230.554 311.836 27.66 15.575 56.27 31.047 89.795 40.040 45.851 12.3 95.033 18.206 145.612 18.2 50.579-0.008 102.377-5.9 150.466-18.2 43.541-11.139 83.051-28.537 118.916-49.75-1.604-109.456 58.064-217.606 237.835-302.127zM375.055 662.314c-56.42 32.576-122.325 24.237-146.721-18.016-13.925-24.115-10.9-54.025 4.291-81.507l-0.002-0.002c25.628-0.438 55.842-5.586 88.376-18.019 30.994-11.839 60.045-28.061 83.228-45.472 11.982 6.298 22.424 15.768 29.173 27.454 24.396 42.256-1.926 102.986-58.346 135.562zM429.429 866.715c19.698-72.138 43.382-144.274 80.929-216.411 0-0.002-0.002-0.002-0.002-0.003h0.003c0 0.002-0.002 0.002-0.002 0.003 37.003 72.138 66.358 144.274 80.929 216.411-53.955-16.459-107.906-18.654-161.859 0zM792.215 644.3c-24.397 42.251-90.302 50.592-146.721 18.016s-82.742-93.306-58.345-135.562c6.749-11.687 17.191-21.157 29.173-27.454 23.181 17.411 52.234 33.633 83.228 45.472 32.536 12.433 62.748 17.582 88.376 18.019l-0.002 0.002c15.19 27.483 18.215 57.391 4.29 81.507zM210.688 236.527c10.564-27.87 17.744-61.627 51.873-83.574zM804.393 215.925c-11.623-22.029-30.887-60.496-54.038-77.777z" - ], - "isMulticolor": false, - "tags": [ - "broken-skull" - ], - "defaultCode": 59723, - "grid": 0, - "attrs": [] - }, - { - "id": 76, - "paths": [ - "M371.824 42.442h213.814c-40.551 241.039-173.221 239.3-213.814 0zM792.761 657.413c0-143.368-141.223-216.684-228.502-300.921-93.612-90.354 32.466-252.223 32.466-252.223l0.003-0.005h-24.9c-45.637 158.19-140.333 157.26-186.074 0h-18.778c0 0 115.117 161.74 22.476 254.724-84.118 84.424-219.759 158.221-219.762 298.425 0 8.362-0.149 298.422-0.388 306.615l624.024 4.542c-0.344-9.669-0.565-301.251-0.565-311.157zM502.116 415.114c24.474 0 44.314 19.84 44.314 44.314s-19.84 44.314-44.314 44.314-44.314-19.84-44.314-44.314c-0.002-24.474 19.839-44.314 44.314-44.314zM226.429 658.131c0-40.766 14.956-73.928 36.149-103.78h-0.002l0.003-0.003c0 0.002-0.002 0.002-0.002 0.003h253.668c10.554-12.209 26.143-19.947 43.551-19.947s32.997 7.738 43.551 19.947h96.53c21.2 29.651 36.151 63.072 36.152 103.783 0 13.255 0.478 243.939 1.086 256.65l-511.382-7.591c0.404-10.287 0.695-238.433 0.695-249.063z" - ], - "isMulticolor": false, - "tags": [ - "bubbling-potion" - ], - "defaultCode": 59724, - "grid": 0, - "attrs": [] - }, - { - "id": 77, - "paths": [ - "M500.474 745.013l-96.391 166.955-341.704-197.281 96.391-166.955 341.704 197.281zM714.064 152.705l-49.895 186.214-381.12-102.121 49.895-186.214 381.12 102.121zM628.404 456.016l-73.688 178.144-364.602-150.814 73.688-178.144 364.602 150.814zM717.695 196.005l-28.887 107.809c109.332 28.578 208.321 42.308 305.229 22.859-74.954-65.964-166.733-100.74-276.341-130.668zM628.621 500.485l-42.649 103.103c103.8 42.007 199.476 68.063 297.363 61.428-65.26-74.602-150.959-120.885-254.714-164.532zM442.209 887.526c96.211 54.275 186.724 91.881 283.571 98.062-54.327-81.613-132.119-138.377-227.817-194.63l-55.754 96.568z" - ], - "isMulticolor": false, - "tags": [ - "bullets" - ], - "defaultCode": 59725, - "grid": 0, - "attrs": [] - }, - { - "id": 78, - "paths": [ - "M706.682 491.522l-167.46 101.481-167.442-101.495-0.003 302.329 167.453 94.415 167.457-94.415-0.005-302.316zM932.107 274.664c11.946 50.585-12.228 153.306-67.594 187.743 9.981-115.361-7.821-281.438-73.267-342.514 65.135 345.043-185.678 303.928-96.552 198.756 58.926-69.535-0.381-204.656-34.985-224.375 21.751 84.107-28.428 139.139-109.251 122.685-54.419-11.074-89.32-89.76-23.689-179.821l0.008-0.008c-100.608 25.46-161.112 132.402-101.456 222.043 44.881 67.44 89.763 122.138 17.448 157.87-46.63 23.044-99.873-32.852-92.081-98.398 9.609-80.836-37.375-159.592-92.127-176.086 92.324 212.496-86.776 353.41-48.978 153.929-60.471 32.137-65.483 117.884-22.486 245.078-80.61-34.342-109.929-133.354-76.412-240.77-71.613 56.602-106.419 261.377-29.197 366.338 190.913 259.491 414.023 323.938 453.645 323.938 42.22 0 234.287-67.322 378.569-229.874 83.43-93.989 101.682-337.26 18.404-486.534zM762.987 800.307l-223.763 121.515-223.755-121.515v-340.939l447.518 0.037v340.902z" - ], - "isMulticolor": false, - "tags": [ - "burning-book" - ], - "defaultCode": 59726, - "grid": 0, - "attrs": [] - }, - { - "id": 79, - "paths": [ - "M202.096 727.792c-100.142 27.212-164.829 67.517-164.829 112.226 0 81.903 212.698 148.463 474.616 148.463s474.616-66.56 474.616-148.463c0-44.55-64.136-85.019-163.661-112.226 34.405 17.729 54.944 38.436 54.944 60.789 0 64.156-164.351 116.9-365.897 116.9s-364.726-52.749-364.726-116.9c0-22.471 20.188-43.001 54.944-60.789h-0.007zM608.47 107.241l0.007 0.005-0.003-0.008zM747.289 353.409c-11.717 163.955-140.757 99.918-87.92-116.604 12.97-53.154-24.031-114.237-50.893-129.559 52.807 134.027-118.288 234.184-113.836 70.327-80.296 73.726-25.583 168.192 9.553 243.361 26.636 56.995 24.655 107.48-20.206 126.704-32.018 13.716-67.627-23.144-79.117-60.962-5.112-16.827-3.411-41.735 1.851-75.881-42.096 85.46-107.781 91.664-76.815-62.938-119.018 135.44-76.015 397.058 89.886 476.962-25.934-50.843-40.17-113.951-28.4-167.746 0 0 0 0 0-0.002v0c0 0 0 0 0 0.002 72.58 157.372 241.786 2.873 251.633-137.904 26.941 89.085 23.161 219.118-21.623 312.409 180.56-70.484 221.070-342.375 125.885-478.168z" - ], - "isMulticolor": false, - "tags": [ - "burning-embers" - ], - "defaultCode": 59727, - "grid": 0, - "attrs": [] - }, - { - "id": 80, - "paths": [ - "M469.413 35.645l-0.002 0.005h0.002zM777.137 251.665c47.844 112.161 23.118 198.395-36.331 246.473 29.23-382.784-392.387-228.539-271.395-462.489-347.749 96.507 28.702 290.542-100.564 360.162-65.483 35.262-171.788 30-129.114-147.556-232.299 188.829-137.634 640.939 167.57 726.36-83.786-43.813-140.976-131.541-140.976-232.645 0-144.912 117.469-262.38 262.38-262.38s262.38 117.474 262.38 262.38c0 90.932-46.262 171.050-116.526 218.125 364.736-126.667 315.016-594.052 102.577-708.431zM444.419 721.955c0 28.233 22.89 51.123 51.123 51.123s51.123-22.89 51.123-51.123-22.89-51.123-51.123-51.123c-28.233 0.002-51.123 22.89-51.123 51.123zM528.725 624.279c-83.727 0-151.599 67.871-151.599 151.599s67.873 151.599 151.599 151.599c83.724 0 151.599-67.871 151.599-151.599 0-83.724-67.871-151.599-151.599-151.599zM528.691 871.454c-52.81 0-95.623-42.811-95.623-95.623 0-16.775 4.333-32.534 11.92-46.24-0.373-2.491-0.57-5.040-0.57-7.636 0-28.233 22.89-51.121 51.123-51.123 11.042 0 21.257 3.513 29.616 9.467 1.174-0.043 2.349-0.089 3.533-0.089 52.812 0 95.623 42.811 95.623 95.623 0 52.81-42.813 95.621-95.623 95.621z" - ], - "isMulticolor": false, - "tags": [ - "burning-eye" - ], - "defaultCode": 59728, - "grid": 0, - "attrs": [] - }, - { - "id": 81, - "paths": [ - "M214.647 35.927c81.324 116.233-127.218 51.746-175.786 4.933 2.116 80.036 199.772 198.94 294.306 144.010 58.022-33.715-59.648-139.089-118.52-148.943v0zM102.854 189.442l0.002 0.007 0.002-0.003zM530.024 370.762c21.897 140.126 172.605 81.905 203.691 244.402-79.875-60.941-311.065 27.484-203.691-244.402zM409.856 150.297l1.736 2.948c240.336 197.679-8.070 349.896-129.762 97.377 31.59 164.735-156.543 88.288-178.973-61.174-129.123 270.729 242 272.382 253.427 457.492 6.45 104.43-155.362 39.767-227.351-97.511 487.062 1042.166 1496.487-25.027 280.923-399.133zM756.918 509.793c-42.828 117.159 203.38 229.062 31.894 340.194 51.84-68.266 4.736-226.775-175.413-217.933 232.643 144.708 84.491 413.161-39.335 186.044 2.609 70.053 23.935 109.456 54.217 128.636-121.582-23.871-213.684-130.85-213.684-259.396 0-77.969 33.815-148.119 87.555-196.588-0.8-29.203 7.342-68.003 27.872-119.988 5.661 36.231 19.947 59.187 38.538 76.14 33.705-15.572 71.219-24.277 110.749-24.277 89.011 0 170.808 37.347 218.812 104.821l-0.002-0.003c87.167 150.981-127.345 54.723-141.203-17.649zM528.185 740.763c81.484 44.082-15.674-109.859-67.651-123.311 85.588-8.795 221.263 110.358 182.484 165.579-28.879 41.122-108.029-13.117-114.837-42.268h0.003z" - ], - "isMulticolor": false, - "tags": [ - "burning-meteor" - ], - "defaultCode": 59729, - "grid": 0, - "attrs": [] - }, - { - "id": 82, - "paths": [ - "M808.688 693.631c0 163.304-132.367 295.672-295.674 295.672-163.305 0-295.674-132.367-295.674-295.672s132.367-295.672 295.674-295.672 295.674 132.368 295.674 295.672zM312.716 262.314c50.094 34.166 77.191 117.735 66.054 167.807 20.301-10.362 41.966-18.432 64.644-23.903-38.147-30.137-62.599-108.679-34.263-163.885 26.41-51.417-20.886-105.955-73.115-90.157-60.688 18.357-55.974 87.879-23.32 110.138zM561.478 401.934c33.969 5.601 65.982 16.987 95 33.119-23.504-69.918 8.857-189.981 90.961-239.11 48.014-28.722 58.941-131.929-26.973-157.935-73.927-22.384-139.922 54.351-103.521 127.622 43.543 87.685 6.834 197.477-55.466 236.303zM229.697 608.852c16.663-55.767 49.331-104.615 92.686-141.22-60.5-67.604-97.477-162.103-104.042-257.956-8.085-117.822-102.367-146.166-156.593-108.736-53.602 36.996-67.774 138.734 39.991 203.233 102.647 61.413 149.043 192.263 127.958 304.679zM944.085 242.8c-65.997-30.498-164.055 23.323-164.866 123.69-0.376 46.812-17.545 91.121-49.433 126.084 38.757 41.765 65.584 94.741 75.083 153.535-11.366-104.525 0.154-161.961 62.791-179.095 190.404-52.044 154.721-188.030 76.424-224.214z" - ], - "isMulticolor": false, - "tags": [ - "burst-blob" - ], - "defaultCode": 59730, - "grid": 0, - "attrs": [] - }, - { - "id": 83, - "paths": [ - "M994.117 436.102c-181.953-101.882-382.73-65.257-535.584 94.966 181.256 99.53 383.693 64.711 535.584-94.966zM115.806 78.883c199.262 56.257 314.517 222.976 309.378 442.819-197.119-57.412-314.814-224.034-309.378-442.819v0zM445.447 568.639c170.397 67.444 225.868 204.939 150.418 365.6-167.998-68.017-225.811-205.749-150.418-365.6v0zM413.656 557.479c-165.646-67.973-302.108-9.137-364.86 154.467 164.405 65.95 302.646 8.536 364.86-154.467z" - ], - "isMulticolor": false, - "tags": [ - "butterfly" - ], - "defaultCode": 59731, - "grid": 0, - "attrs": [] - }, - { - "id": 84, - "paths": [ - "M809.322 781.401c122.354-90.164 186.231-281.754 10.546-364.97 78.031 120.758-26.193 209.776-121.278 82.794-76.969-144.033 164.49-226.429-136.434-452.459h-0.005c96.719 142.775-36.839 290.674-127.106 117.782 54.501 288.532-130.238 332.159-149.265 149.265-153.020 135.345-115.826 307.654-30.782 436.563l-125.564 72.181c7.809 75.624 43.526 135.221 104.533 180.269l170.483-98.002c7.275 57.232 56.315 101.5 115.772 101.5 43.728 0 81.818-23.955 101.817-59.387l215.875 57.593c47.221-59.235 66.224-126 54.112-201.063l-82.703-22.065zM305.966 549.806c51.295 78.729 213.348 20.124 193.917-119.699 21.355 64.041 75.472 57.805 131.338-40.973-75.991 205.097 43.596 338.184 123.628 276.789 3.592 29.29-10.486 63.745-32.424 92.294l-239.477-63.891c-16.658 16.257-29.519 35.409-38.939 56.051l-39.889-12.639c-1.831-0.64-3.633-1.343-5.426-2.075-0.448-0.182-0.892-0.368-1.336-0.556-1.744-0.738-3.475-1.507-5.182-2.33-0.159-0.077-0.314-0.16-0.473-0.239-1.55-0.757-3.079-1.56-4.597-2.385-0.551-0.301-1.101-0.603-1.647-0.912-1.363-0.77-2.713-1.567-4.048-2.39-0.66-0.408-1.313-0.829-1.966-1.25-1.069-0.687-2.128-1.39-3.177-2.111-0.727-0.499-1.45-1.006-2.167-1.52-0.844-0.606-1.675-1.231-2.507-1.859-1.278-0.966-2.541-1.956-3.789-2.972-0.563-0.458-1.128-0.915-1.684-1.385-0.905-0.762-1.806-1.533-2.694-2.32-0.304-0.269-0.603-0.548-0.905-0.82-1.817-1.64-3.603-3.331-5.349-5.077-0.195-0.195-0.393-0.388-0.586-0.583-3.049-3.082-5.984-6.321-8.8-9.702-31.371-37.679-47.959-93.174-41.82-147.444zM347.181 96.097c-128.047 64.56-29.208 120.777-27.987 184.337 88.102-77.739-7.459-106.788 27.987-184.337z" - ], - "isMulticolor": false, - "tags": [ - "campfire" - ], - "defaultCode": 59732, - "grid": 0, - "attrs": [] - }, - { - "id": 85, - "paths": [ - "M344.663 272.571c-36.593 6.877-90.554 69.471-66.761 93.264l146.322 146.271-146.322 146.271c-29.264 29.264 58.529 117.007 87.793 87.743l146.322-146.271 146.322 146.271c29.264 29.264 117.057-58.529 87.793-87.743l-146.322-146.271 146.322-146.271c29.264-29.264-58.529-117.007-87.793-87.743l-146.322 146.271-146.322-146.271c-5.522-5.471-12.599-7.128-21.032-5.522v0zM511.992 31.992c-265.111 0-480 214.915-480 480 0 265.111 214.889 480 480 480s480-214.915 480-480-214.889-480-480-480zM511.992 152.010c198.827 0 360.006 161.18 360.006 360.006s-161.18 360.006-360.006 360.006-360.006-161.18-360.006-360.006c0.025-198.827 161.18-360.006 360.006-360.006z" - ], - "isMulticolor": false, - "tags": [ - "cancel" - ], - "defaultCode": 59733, - "grid": 0, - "attrs": [] - }, - { - "id": 86, - "paths": [ - "M70.207 290.525c81.509-134.231 279.737-229.318 499.45-229.318 146.12 0 277.081 34.266 396.226 119.99l0.925 193.27c-161.578-123.217-363.136-181.049-556.859-107.246 35.625 38.783 57.419 90.56 57.419 147.428 0 120.391-97.581 217.982-217.962 217.982s-217.962-97.591-217.962-217.983c-0.010-46.085 14.313-88.901 38.762-124.123v0zM248.814 457.001c24.751 0 44.817-20.076 44.817-44.837s-20.066-44.837-44.817-44.837-44.837 20.076-44.837 44.837 20.094 44.837 44.837 44.837zM769.746 552.43c-24.761 0-44.827 20.076-44.827 44.837s20.066 44.827 44.827 44.827 44.827-20.066 44.827-44.827-20.074-44.837-44.827-44.837zM948.351 718.906c-81.509 134.231-279.737 229.318-499.438 229.318-146.13 0-277.081-34.266-396.226-119.99l-0.925-193.26c161.568 123.207 363.136 181.039 556.849 107.256-35.635-38.793-57.419-90.57-57.419-147.438 0-120.381 97.581-217.962 217.962-217.962s217.972 97.581 217.972 217.962c0.010 46.077-14.311 88.883-38.773 124.114v0z" - ], - "isMulticolor": false, - "tags": [ - "cancer" - ], - "defaultCode": 59734, - "grid": 0, - "attrs": [] - }, - { - "id": 87, - "paths": [ - "M364.41 41.075c48.374 371.294-188.237 561.456-139.152 744.638 7.323 27.332 20.381 52.291 37.719 74.6-5.128-14.257-8.070-29.28-8.404-44.919-2.103-98.496 100.821-184.113 174.397-321.957 23.019 62.421 47.523 137.253 33.456 232.201 125.665-36.485 221.166-132.846 242.011-234.957 96.625 172.937 82.802 376.68-100.193 481.94-4.248 2.444-8.59 4.704-13.003 6.804 49.815-7.171 96.084-25.473 132.218-56.419h0.002c296.449-253.88 51.648-716.187-359.051-881.931z" - ], - "isMulticolor": false, - "tags": [ - "candle-fire" - ], - "defaultCode": 59735, - "grid": 0, - "attrs": [] - }, - { - "id": 88, - "paths": [ - "M466.247 553.165c-30.89-31.166-51.977-87.364-51.977-152.13 0-98.302 62.474-178.087 106.319-178.087 42.198 0 106.319 79.782 106.319 178.087 0 60.683-18.768 113.485-46.466 145.642 72.078-35.977 123.643-71.326 123.643-182.95-0.002-142.481-133.347-316.703-187.435-316.703-55.735 0-187.435 174.222-187.435 316.702 0 118.508 57.949 159.169 137.032 189.44zM683.325 618.818v-49.174c-53.936 20.026-108.718 29.713-163.098 29.79 4.781-58.617 2.948-119.335-8.643-198.482l-4.138 198.344c-51.808-1.363-103.16-11.443-152.97-29.651v190.803c-6.652 51.088-44.77 60.824-44.090 106.58 0.58 39.024 29.918 51.907 44.090 35.197v72.395h328.849v-176.317c17.208 21.728 54.24 6.024 54.962-42.634 0.86-57.997-48.906-68.982-54.962-136.85z" - ], - "isMulticolor": false, - "tags": [ - "candle" - ], - "defaultCode": 59736, - "grid": 0, - "attrs": [] - }, - { - "id": 89, - "paths": [ - "M1004.268 607.676c-247.708-10.12-281.528-88.913-43.678-204.97-102.159 10.833-187.168 27.058-257.68 53.42 34.397-60.683 44.582-111.492 21.783-134.291-7.038-7.038-16.755-10.917-28.595-11.927l-211.509-287.169h-147.393l271.824 309.517-2.132 2.492c-48.759 24.8-105.475 66.844-159.779 121.146-6.682 6.682-13.172 13.402-19.473 20.138l-391.003-347.96v399.353l264.897 181.146c1.453 10.177 5.224 18.609 11.516 24.9 23.6 23.599 77.213 11.86 140.724-25.495-27.514 73.543-45.612 164.453-56.714 277.133 74.912-257.766 161.411-218.501 228.714-12.554-37.178-218.77 198.435-123.042 369.412 10.778-132.617-203.233-248.842-354.458 9.084-375.658zM399.92 652.562c-0.109-0.109-0.195-0.239-0.302-0.351-11.082-11.603-7.609-35.588 7.016-65.053 0.013-0.025 0.027-0.052 0.040-0.077 0.9-1.811 1.841-3.643 2.825-5.494 0.058-0.11 0.124-0.224 0.184-0.336 0.944-1.771 1.919-3.555 2.938-5.357 0.107-0.19 0.224-0.384 0.332-0.575 0.984-1.731 1.991-3.473 3.042-5.232 0.157-0.262 0.326-0.528 0.483-0.79 1.019-1.694 2.056-3.394 3.135-5.112 0.224-0.357 0.466-0.72 0.693-1.077 1.034-1.63 2.080-3.266 3.169-4.915 0.294-0.446 0.608-0.899 0.907-1.345 1.047-1.57 2.1-3.142 3.192-4.727 0.374-0.541 0.77-1.089 1.149-1.632 1.046-1.498 2.093-2.998 3.181-4.509 0.463-0.643 0.952-1.291 1.422-1.936 1.037-1.422 2.070-2.841 3.142-4.271 0.528-0.703 1.081-1.412 1.617-2.115 1.047-1.378 2.088-2.755 3.167-4.138 0.616-0.79 1.263-1.585 1.889-2.379 1.032-1.305 2.055-2.608 3.114-3.916 0.713-0.88 1.457-1.766 2.183-2.648 1.007-1.224 2.001-2.447 3.032-3.675 0.834-0.992 1.701-1.988 2.549-2.982 0.957-1.119 1.898-2.238 2.873-3.359 0.989-1.136 2.011-2.272 3.020-3.408 0.87-0.981 1.724-1.961 2.608-2.942 1.111-1.231 2.257-2.462 3.389-3.695 0.817-0.887 1.615-1.774 2.442-2.661 1.385-1.483 2.805-2.963 4.22-4.443 0.603-0.631 1.189-1.263 1.799-1.893 2.040-2.111 4.111-4.218 6.212-6.321 2.101-2.101 4.208-4.171 6.318-6.211 0.678-0.655 1.356-1.285 2.035-1.933 1.435-1.371 2.87-2.75 4.308-4.091 0.847-0.79 1.694-1.552 2.541-2.332 1.27-1.169 2.539-2.349 3.809-3.495 1.006-0.907 2.011-1.782 3.019-2.674 1.111-0.986 2.223-1.986 3.334-2.953 1.144-0.997 2.289-1.959 3.433-2.937 0.969-0.827 1.939-1.672 2.907-2.486 1.261-1.059 2.517-2.081 3.775-3.115 0.849-0.698 1.699-1.413 2.546-2.1 1.343-1.087 2.681-2.138 4.019-3.196 0.757-0.6 1.518-1.216 2.274-1.806 1.42-1.108 2.833-2.177 4.248-3.251 0.668-0.508 1.34-1.032 2.005-1.532 1.498-1.124 2.988-2.208 4.479-3.294 0.573-0.418 1.151-0.854 1.724-1.266 1.545-1.113 3.080-2.185 4.616-3.256 0.509-0.356 1.024-0.728 1.532-1.079 1.614-1.114 3.214-2.185 4.813-3.251 0.418-0.279 0.842-0.573 1.258-0.849 1.686-1.113 3.356-2.182 5.023-3.237 0.322-0.204 0.648-0.421 0.969-0.623 1.739-1.094 3.463-2.145 5.18-3.177 0.241-0.144 0.484-0.299 0.723-0.443 1.797-1.072 3.576-2.103 5.344-3.107 0.152-0.087 0.306-0.18 0.458-0.266 1.829-1.032 3.638-2.023 5.432-2.978 0.087-0.047 0.177-0.097 0.264-0.144 1.866-0.991 3.712-1.939 5.538-2.846 0.012-0.005 0.023-0.013 0.037-0.018 29.444-14.615 53.412-18.091 65.025-7.039 0.12 0.115 0.261 0.207 0.378 0.326 13.651 13.651 6.226 45.28-16.337 82.904-58.391 34.126-103.883 79.712-138.945 141.192-40.168 25.338-74.388 34.278-88.741 19.925z" - ], - "isMulticolor": false, - "tags": [ - "cannon-shot" - ], - "defaultCode": 59737, - "grid": 0, - "attrs": [] - }, - { - "id": 90, - "paths": [ - "M1000.647 503.409v-104.259h-230.789c-16.143-115.39-107.416-206.681-222.801-222.851l-36.697-137.562-36.699 137.563c-115.381 16.172-206.653 107.462-222.796 222.849h-230.798v104.259h104.060v355.032h-104.060v104.259h364.98l-25.623 45.908h304.399l-25.978-45.908h362.802v-104.259h-103.9v-355.032h103.9zM547.23 858.177h-73.583v-354.768h73.583v354.768zM262.096 503.409h73.584v355.032h-73.584v-355.032zM758.779 858.441h-73.581v-355.032h73.581v355.032z" - ], - "isMulticolor": false, - "tags": [ - "capitol" - ], - "defaultCode": 59738, - "grid": 0, - "attrs": [] - }, - { - "id": 91, - "paths": [ - "M444.738 250.703c-32.304-5.351-45.118 158.11-49.829 236.183l-135.208 0.199c-5.775-206.91-8.501-227.285-39.866-282.373-14.338-25.194-56.596-28.929-56.596-28.929 0-26.836-0.271-136.643-0.271-136.643 74.453 0 126.077 53.754 158.59 112.902l4.846-10.891c15.801-33.839 53.564-99.819 127.955-99.819 234.613 0 85.354 645.183 290.477 591.999 13.247-3.438 34.118-46.417-7.868-46.417-75.861 10.088-104.132 420.578-350.096 387.354-23.552-3.176-37.773-9.647-37.773-9.647l16.982-146.073c45.19 5.631 107.994-30.192 116.106-53.158 34.245-97.048 89.559-335.568 267.296-335.568 67.92 0 145.271 65.728 145.271 181.166 0 188.538-338.618 307.676-415.644-98.61-16.444-86.599-8.62-268.126-34.373-261.675v0z" - ], - "isMulticolor": false, - "tags": [ - "capricorn" - ], - "defaultCode": 59739, - "grid": 0, - "attrs": [] - }, - { - "id": 92, - "paths": [ - "M736.044 438.198c-46.598 53.116-22.937 43.741-108.688 86.368l108.349-86.819c-25.907-34.482-53.529-65.919-82.603-92.414-52.059 79.307-87.354 91.101-156.871 121.024l156.184-121.647c-48.89-44.388-101.872-74.774-157.721-82.052-16.008-2.086-32.9-0.087-49.656 5.083-63.129-94.901-33.408-128.892 11.369-216.42-62.928 22.024-73.219 33.585-103.543 134.52-36.799-67.028-152.631-115.68-248.713-128.411 87.391 60.187 154.455 116.779 153.149 189.909-71.622-13.262-130.16-1.635-209.816 41.353 127.668-12.136 260.831-6.060 299.726 49.707-19.653 25.839-32.045 55.298-31.702 83.539 3.434 282.898 619.468 621.082 647.841 548.304 13.745-35.272-78.474-333.69-227.305-532.044z" - ], - "isMulticolor": false, - "tags": [ - "carrot" - ], - "defaultCode": 59740, - "grid": 0, - "attrs": [] - }, - { - "id": 93, - "paths": [ - "M507.648 49.267c-254.555 0-460.915 206.357-460.915 460.915 0 137.867 60.55 261.576 156.485 346.040v-278.080l-27.985-45.482h15.158l88.625-228.561 87.461 228.561h16.326l-29.151 45.482v36.152h74.632v-246.056l-27.987-45.482h15.158l88.624-228.559 88.624 228.554h15.158l-29.151 45.482v176.088h73.467v-67.636l-29.151-45.482h16.326l87.463-228.561 88.625 228.561h15.158l-27.987 45.482v387.657c101.406-84.548 165.951-211.809 165.951-354.162 0.003-254.557-206.354-460.914-460.91-460.914z" - ], - "isMulticolor": false, - "tags": [ - "castle-emblem" - ], - "defaultCode": 59741, - "grid": 0, - "attrs": [] - }, - { - "id": 94, - "paths": [ - "M817.661 22.792v135.272h-94.455v-135.272h-155.093v135.272h-93.291v-135.272h-155.093v135.272h-93.291v-135.272l-155.103-0.005v226.229l132.94 125.942v368.498c71.498 93.044 174.691 178.45 316.023 260.049 144.484-83.42 248.312-172.662 319.52-267.042v-361.5l132.94-125.942v-226.229h-155.095zM522.624 547.050h-226.229v-217.569l-93.291-87.463h319.52v305.032zM747.69 696.814c-49.82 66.091-123.486 129.206-223.897 187.744v-335.174h223.897v147.429z" - ], - "isMulticolor": false, - "tags": [ - "castle-flag" - ], - "defaultCode": 59742, - "grid": 0, - "attrs": [] - }, - { - "id": 95, - "paths": [ - "M925.646 37.442l-69.837 115.446c-60.045-19.456-149.404-15.656-205.635 0l-67.25-113.834c-110.465 206.339-79.195 336.727 5.098 401.578-12.883 8.063-26.185 16.93-39.911 26.642-351.332-280.295-667.61 35.399-460.12 317.452h1.592c37.232 53.988 80.103 87.381 126.415 104.856 65.594 24.75 133.092 17.62 199.551 8.214s131.498-21.222 193.478-16.808c61.98 4.413 123.979 20.325 180.713 82.194 38.685 42.181 93.623-3.247 47.563-48.23-69.933-68.301-144.815-94.684-218.396-99.918s-144.162 9.38-208.072 18.425c-63.911 9.046-120.353 13.081-168.845-5.212-22.742-8.58-44.891-22.085-66.249-43.521h720.306c34.053-120.187 37.666-247.355-1.046-327.575 116.327-60.705 163.11-204.038 30.645-419.71zM709.64 347.896c-74.099 35.758-107.752 6.787-122.15-52.999 72.729-45.128 116.041-8.882 122.15 52.999zM802.154 347.896c6.109-61.883 49.421-98.129 122.15-52.999-14.396 59.786-48.049 88.757-122.15 52.999z" - ], - "isMulticolor": false, - "tags": [ - "cat" - ], - "defaultCode": 59743, - "grid": 0, - "attrs": [] - }, - { - "id": 96, - "paths": [ - "M1004.382 642.629c-46.133-36.368-102.141-55.027-157.721-56.33v0.018c-9.358-0.409-18.225 0.446-27.539 1.229-33.967 2.927-67.865 12.512-99.067 28.898l-26.561-24.060c23.659-65.457 9.301-141.656-43.105-194.040l-117.895-84.235c-35.194-35.175-82.764-51.41-128.61-47.456-21.441 1.841-42.612 8.21-62.051 18.923l-8.977-8.142c16.137-41.15 7.626-89.801-25.578-123.002l-72.966-52.159c-21.781-21.775-51.223-31.823-79.595-29.38-6.523 0.563-13.005 1.814-19.342 3.712l-57.473-53.747h-58.901v55.747l52.142 58.751c-12.924 35.441-5.299 76.967 22.927 105.211l51.168 72.975c25.136 25.144 59.171 36.943 91.918 34.118 10.766-0.867 21.461-3.451 31.704-7.602l8.287 9.764c-31.579 60.792-22.002 138.133 28.749 188.899l82.678 117.87c40.614 40.614 95.608 59.664 148.515 55.109 18.225-1.505 36.329-6.002 53.595-13.275l21.374 25.154c-46.307 89.965-37.14 202.274 26.809 283.808h229.010l-66.051-80.381c-10.303-10.948-17.373-23.499-21.257-36.65 27.22 4.981 55.882-2.846 77.456-24.379 24.284-24.239 32.036-57.444 23.357-87.504 15.976 3.381 31.457 11.479 44.837 24.113l78.158 71.571 0.149 133.23h0.002l-0.147-366.756zM146.489 201.658c-7.23-7.681-10.349-17.433-9.428-26.921 7.569-1.901 14.764-5.845 20.834-11.926 5.695-5.701 9.617-12.378 11.777-19.424 8.84-0.292 17.802 3.079 25.112 9.976l58.457 53.38c3.064 3.256 5.464 6.852 7.265 10.633-13.38-4.028-27.927-0.8-38.987 10.268-12.356 12.365-15.487 29.634-9.383 44.486-5.633-1.898-10.988-5.062-15.657-9.468l-49.989-61.004zM386.020 472.101c-5.314-5.646-9.278-11.976-11.904-18.642 18.437 5.997 38.984 1.933 53.918-12.996 17.311-17.304 20.751-42.141 10.404-62.527 9.575 2.347 18.81 7.347 26.828 14.916l95.935 87.596c5.070 5.392 9.071 11.341 12.034 17.603-19.745-3.289-40.26 2.761-56.325 18.821-20.275 20.268-25.545 48.527-15.724 72.923-11.942-2.527-23.438-8.424-33.134-17.578l-82.032-100.115z" - ], - "isMulticolor": false, - "tags": [ - "chain" - ], - "defaultCode": 59744, - "grid": 0, - "attrs": [] - }, - { - "id": 97, - "paths": [ - "M358.006 380.373c6.939 9.732 10.895 21.629 10.895 35.047 0 42.438-39.497 83.94-88.214 92.69s-88.214-18.557-88.214-61.001c0-8.364 1.555-16.688 4.392-24.736l-175.757 45.809v231.516c7.766-3.703 15.479-7.928 23.946-9.872 49.394-11.356 89.479 15.063 89.479 58.151s-40.086 87.399-89.479 98.75c-8.369 1.914-16.265 2.3-23.946 2.195v66.929l432.522-112.757c-11.358-15.079-17.984-33.104-17.984-52.483 0-52.942 49.296-95.862 110.103-95.862 59.629 0 108.155 41.281 110.014 92.803 1.843 0.499 3.678 0.987 5.541 1.52l336.483-86.683v-448.764l-639.779 166.748zM792.553 620.567c-32.536 0-58.911-22.976-58.911-51.319s26.375-51.319 58.911-51.319 58.913 22.976 58.913 51.319-26.377 51.319-58.913 51.319zM459.079 90.615l-32.703 27.6c39.791 20.472 46.723 61.983 15.403 92.922-31.432 31.049-89.484 39.689-129.655 19.296-3.954-2.006-7.574-4.228-10.881-6.617l-267.782 225.982 917.524-240.804c-102.639-89.357-302.404-132.363-491.906-118.378zM950.985 208.995v0 0z" - ], - "isMulticolor": false, - "tags": [ - "cheese" - ], - "defaultCode": 59745, - "grid": 0, - "attrs": [] - }, - { - "id": 98, - "paths": [ - "M408.254 872.401c-9.004-18.384-40.907-23.271-47.463 1.203-5.741 21.35 15.712 35.608 32.327 32.237 1.649 55.279 90.842 59.922 90.842 3.463 0-42.206-49.847-55.76-75.706-36.902zM904.563 439.505c0-43.402-69.199-47.034-69.199-3.827 0 43.215 69.199 47.229 69.199 3.827zM246.597 604.892c-8.037-27.955-58.433-33.022-67.983 2.616-8.416 31.398 27.543 47.149 50.831 35.549 1.669 46.142 80.381 57.715 94.353 5.561 12.425-46.372-46.498-68.047-77.201-43.726zM63.859 344.751c0 43.215 69.199 47.229 69.199 3.827s-69.199-47.037-69.199-3.827zM361.921 447.384c0 29.457 32.147 40.691 52.618 31.119l-48.133-47.877c-2.816 4.475-4.485 10.051-4.485 16.758zM639.487 173.53c0-43.402-69.199-47.034-69.199-3.827 0 43.215 69.199 47.229 69.199 3.827zM685.494 364.875c0.573-0.331 1.111-0.68 1.667-1.019 7.156 20.438 41.591 26.926 48.511 1.37 4.719-17.423-8.723-30.129-22.862-32.39 15.976-49.065-42.625-114.488-101.037-80.761-73.080 42.194 0.944 154.818 73.721 112.8zM600.017 909.979c-27.763 15.996-4.594 61.878 23.23 45.916s4.555-61.955-23.23-45.916zM239.147 372.992c0 66.059 83.106 85.014 118.752 49.17l-96.654-96.141c-13.203 9.806-22.099 25.373-22.099 46.97zM152.262 217.616c0 0 0 0 0 0l-76.359-75.955c-16.062 6.936-28.024 21.564-28.024 44.291 0 50.034 57.962 67.208 90.022 46.586-0.042 0.72-0.1 1.428-0.1 2.177 0 32.73 39.687 42.965 58.949 27.154l-44.488-44.253zM168.207 70.195c0-34.482-43.673-43.858-61.627-24.591l49.561 49.302c7.178-4.991 12.066-13.177 12.066-24.711zM252.706 190.965l72.719 72.336c0 0 0 0-0.002 0.002l77.831 77.421c12.791-7.677 21.753-21.175 21.753-40.815 0-31.57-23.139-49.842-48.15-53.736 4.53-8.2 7.17-18.156 7.17-29.922 0-60.314-69.228-80.856-108.033-56.519-8.915-31.634-53.185-38.623-72.634-17.856l49.346 49.087c0 0 0 0 0 0zM919.767 824.599c35.018-3.363 66.283-26.477 66.283-71.032-0.002-39.881-25.045-65.357-55.41-75.447 0.244-2.715 0.383-5.504 0.383-8.391 0-12.676-2.416-23.963-6.665-33.835 13.464-5.563 23.565-17.634 23.565-36.627 0-13.638-5.212-24.275-13.132-31.804 1.321-0.493 2.654-1.081 4.004-1.854 27.823-15.961 4.555-61.955-23.23-45.916-13.811 7.958-15.013 23.308-9.313 34.764-11.762-1.45-23.859 0.914-33.119 7.258-4.445-36.341-35.478-56.068-66.578-57.823 1.893-5.997 2.945-12.681 2.945-20.087 0-82.324-127.968-91.103-134.411-13.586-23.667-6.926-49.665-6.035-71.443 3.005 1.866-6.826 2.91-14.309 2.91-22.513 0-85.104-108.751-107.709-151.965-58.914l120.977 120.343c0 0 0 0 0.002 0l77.894 77.485c0 0 0 0 0 0l14.541 14.465c0 0 0.035-0.032 0.092-0.087 0.018-0.017 0.037-0.035 0.062-0.058 0.057-0.053 0.125-0.119 0.215-0.205 0.045-0.043 0.089-0.084 0.142-0.135 0.102-0.099 0.221-0.212 0.352-0.341 0.057-0.055 0.105-0.102 0.167-0.162 0.189-0.184 0.401-0.391 0.64-0.625 0.017-0.017 0.030-0.028 0.047-0.045 0.54-0.531 1.204-1.193 1.973-1.969 0.037-0.038 0.075-0.077 0.114-0.115 0.361-0.366 0.747-0.758 1.153-1.176 0.030-0.030 0.057-0.058 0.087-0.089 2.74-2.811 6.45-6.742 10.818-11.685-0.002 0-0.003-0.002-0.005-0.002 10.96-12.408 25.974-31.119 39.692-53.998 0.327-0.546 0.653-1.098 0.979-1.649 0.857-1.447 1.706-2.912 2.549-4.39 0.307-0.538 0.615-1.067 0.92-1.61 1.037-1.844 2.065-3.713 3.077-5.604 0.376-0.7 0.742-1.412 1.114-2.118 0.404-0.77 0.815-1.532 1.214-2.31-0.003-0.007-0.008-0.013-0.012-0.022 5.245-10.202 10.061-20.995 14.042-32.289 6.767 9.345 13.526 19.080 20.224 29.14 2.693 4.041 5.374 8.142 8.042 12.286 0.267 0.416 0.536 0.83 0.803 1.248 14.054 21.907 27.715 45.225 40.474 69.523 0.304 0.58 0.613 1.156 0.917 1.737 2.279 4.363 4.522 8.763 6.739 13.188 0.466 0.93 0.93 1.863 1.395 2.796 2.202 4.433 4.378 8.89 6.512 13.379 11.672 24.566 22.264 49.905 31.28 75.624 0.043 0.122 0.084 0.246 0.127 0.368 1.042 2.978 2.061 5.962 3.060 8.949 0.207 0.618 0.408 1.236 0.611 1.854 0.83 2.504 1.645 5.011 2.444 7.52 0.254 0.8 0.503 1.6 0.755 2.402 0.735 2.342 1.457 4.686 2.163 7.033 0.264 0.875 0.525 1.751 0.785 2.626 0.685 2.31 1.353 4.622 2.010 6.936 7.691 27.117 13.409 54.431 16.596 81.492 2.507 21.282 3.471 42.41 2.574 63.156-27.11-1.6-55.358-5.437-84.048-11.064-0.002 0.007-0.003 0.012-0.005 0.018-30.606-6.004-61.717-14.089-92.514-23.757-3.615-1.134-7.223-2.292-10.828-3.47-1.605-0.525-3.209-1.049-4.811-1.582-23.95-7.958-47.605-16.84-70.598-26.419-3.277-1.366-6.537-2.75-9.786-4.144-1.595-0.685-3.192-1.366-4.779-2.058-3.204-1.393-6.388-2.803-9.562-4.223-1.654-0.74-3.308-1.48-4.953-2.227-27.137-12.308-53.026-25.493-76.959-39.173-15.078-8.615-29.397-17.415-42.739-26.312 14.194-6.659 26.781-12.926 37.992-18.794 0.002 0.002 0.003 0.003 0.003 0.005 0.394-0.207 0.767-0.406 1.158-0.613 1.241-0.651 2.464-1.3 3.67-1.941 0.753-0.401 1.502-0.8 2.242-1.196 1.203-0.645 2.385-1.283 3.553-1.918 0.685-0.373 1.363-0.742 2.036-1.109 0.565-0.309 1.153-0.625 1.709-0.932-0.002-0.003-0.002-0.005-0.003-0.008 53.489-29.472 68.336-46.723 68.336-46.723l-67.619-67.26c0 0 0 0 0 0l-15.313-15.231c0 0 0-0.002 0-0.002l-93.73-93.234c-18.549 8.755-32.15 26.256-32.15 52.974-0.002 39.542 29.778 62.198 61.33 66.339-0.404 3.040-0.626 6.216-0.626 9.542 0 16.635 5.272 30.279 13.726 40.816-20.834-3.962-42.786-1.418-60.652 7.906 5.974-29.731-41.16-44.547-49.296-14.186-5.105 18.982 11.291 32.34 26.667 32.705-9.3 11.789-14.998 27.319-14.998 46.711 0 71.747 77.938 99.296 128.067 76.443-0.097 1.547-0.157 3.12-0.157 4.736 0 70.456 94.549 87.326 125.202 41.266 13.609 10.163 31.001 15.215 47.884 14.901-3.917 9.112-6.144 19.683-6.144 31.766 0 91.701 127.327 111.222 161.174 45.559 39.662 46.29 127.275 51.877 147.007-21.773 13.22-49.357-16.653-87.252-54.67-102.4z" - ], - "isMulticolor": false, - "tags": [ - "chemical-arrow" - ], - "defaultCode": 59746, - "grid": 0, - "attrs": [] - }, - { - "id": 99, - "paths": [ - "M621.668 290.146h110.503v110.503h-110.503v-110.503zM621.668 511.153h110.503v110.503h-110.503v-110.503zM511.165 621.657h110.503v110.503h-110.503v-110.503zM179.654 290.146h110.503v110.503h-110.503v-110.503zM290.158 179.643h110.503v110.503h-110.503v-110.503zM511.165 179.643h110.503v110.503h-110.503v-110.503zM290.158 400.65h110.503v110.503h-110.503v-110.503zM400.661 511.153h110.503v110.503h-110.503v-110.503zM511.165 400.65h110.503v110.503h-110.503v-110.503zM400.661 290.146h110.503v110.503h-110.503v-110.503zM290.158 621.657h110.503v110.503h-110.503v-110.503zM179.654 511.153h110.503v110.503h-110.503v-110.503zM621.668 732.16h110.503v110.503h-110.503v-110.503zM732.172 400.65h110.503v110.503h-110.503v-110.503zM400.661 732.16h110.503v110.503h-110.503v-110.503zM732.172 621.657h110.503v110.503h-110.503v-110.503zM732.172 179.643h110.503v110.503h-110.503v-110.503zM29.651 29.639v963.028h963.028v-963.028h-963.028zM953.179 290.146h-110.503v110.503h110.503v110.503h-110.503v110.503h110.503v110.503h-110.503v110.503h110.503v110.503h-110.503v-110.503h-110.503v110.503h-110.503v-110.503h-110.503v110.503h-110.503v-110.503h-110.503v110.503h-110.503v-110.503h-110.503v-110.503h110.503v-110.503h-110.503v-110.503h110.503v-110.503h-110.503v-110.503h110.503v-110.503h-110.503v-110.503h110.503v110.503h110.503v-110.503h110.503v110.503h110.503v-110.503h110.503v110.503h110.503v-110.503h110.503v110.503h110.503v110.503zM179.654 732.16h110.503v110.503h-110.503v-110.503z" - ], - "isMulticolor": false, - "tags": [ - "chessboard" - ], - "defaultCode": 59747, - "grid": 0, - "attrs": [] - }, - { - "id": 100, - "paths": [ - "M621.503 102.494c16.194 2.796 32.093 9.645 47.034 21.404 68.259 53.724 26.554 108.606-26.29 96.061 71.039 78.586 1.956 139.052-73.812 99.084 20.061 52.495-44.742 82.932-100.1 30.337l0.003-0.008c-2.902-2.758-5.564-5.621-8.017-8.57-42.514 89.464-51.958 151.998-53.637 203.131-0.767 23.345 1.923 37.83 6.699 47.056-86.315 82.996-218.555 181.467-270.882 200.965-51.299 19.105-69.706 1.886-98.164 36.533-27.068 32.213 24.588 105.976 82.429 65.452-52.737 82.556 52.575 147.847 84.643 32.101 26.589-99.243 165.978-215.073 264.99-298.286 0.626 1.168 1.228 2.407 1.794 3.739 76.222 4.363 198.093 10.158 362.556-74.851 346.14-178.906 78.227-739.779-219.248-454.148zM126.772 893.935v0 0 0zM918.722 180.154c51.228 103.357 14 188.785-127.445 252.021 70.603-76.008 129.39-157.838 127.445-252.021zM561.087 577.285c129.973-45.27 267.12-117.424 380.557-199.473-76.544 104.46-202.268 204.092-380.557 199.473z" - ], - "isMulticolor": false, - "tags": [ - "chicken-leg" - ], - "defaultCode": 59748, - "grid": 0, - "attrs": [] - }, - { - "id": 101, - "paths": [ - "M511.997 31.99c-79.531 0-144.003 64.472-144.003 144.003s64.472 144.003 144.003 144.003 144.003-64.472 144.003-144.003-64.472-144.003-144.003-144.003zM511.997 127.985c26.514 0 47.997 21.494 47.997 47.997s-21.494 47.997-47.997 47.997c-26.514 0-47.997-21.494-47.997-47.997s21.494-47.997 47.997-47.997zM608.002 511.985c0 53.017-42.978 95.995-96.005 95.995-53.017 0-96.005-42.978-96.005-95.995s42.978-95.995 96.005-95.995c53.027 0 96.005 42.978 96.005 95.995zM511.997 703.985c-79.531 0-144.003 64.472-144.003 144.003s64.472 144.003 144.003 144.003 144.003-64.472 144.003-144.003c0-79.531-64.472-144.003-144.003-144.003zM511.997 799.99c26.514 0 47.997 21.494 47.997 47.997s-21.494 47.997-47.997 47.997c-26.514 0-47.997-21.494-47.997-47.997s21.494-47.997 47.997-47.997zM927.69 271.987c-39.765-68.869-127.829-92.471-196.708-52.706s-92.471 127.829-52.706 196.708 127.829 92.471 196.708 52.706 92.471-127.829 52.706-196.708zM844.556 319.985c13.252 22.96 5.391 52.314-17.569 65.566s-52.314 5.391-65.566-17.569-5.391-52.314 17.569-65.566 52.304-5.381 65.566 17.569zM345.727 607.99c-39.765-68.869-127.829-92.471-196.708-52.706s-92.471 127.829-52.706 196.708 127.829 92.471 196.708 52.706 92.471-127.829 52.706-196.708zM262.582 655.987c13.252 22.96 5.391 52.314-17.569 65.566s-52.314 5.391-65.566-17.569-5.391-52.314 17.569-65.566 52.314-5.391 65.566 17.569zM96.303 271.987c-39.765 68.879-16.163 156.943 52.706 196.708 68.879 39.765 156.943 16.163 196.708-52.706s16.163-156.943-52.706-196.708c-68.869-39.765-156.943-16.163-196.708 52.706zM179.448 319.985c13.252-22.96 42.606-30.82 65.566-17.569s30.82 42.606 17.569 65.566-42.606 30.82-65.566 17.569c-22.96-13.252-30.82-42.606-17.569-65.566zM678.276 607.99c-39.765 68.879-16.163 156.943 52.706 196.708 68.879 39.765 156.943 16.163 196.708-52.706s16.163-156.943-52.706-196.708c-68.879-39.765-156.943-16.163-196.708 52.706v0zM761.411 655.987c13.252-22.96 42.606-30.82 65.566-17.569s30.82 42.606 17.569 65.566-42.606 30.82-65.566 17.569c-22.95-13.252-30.82-42.606-17.569-65.566z" - ], - "isMulticolor": false, - "tags": [ - "circle-of-circles" - ], - "defaultCode": 59749, - "grid": 0, - "attrs": [] - }, - { - "id": 102, - "paths": [ - "M511.997 31.99v144.003h-335.992l96.005 96.005-239.997 239.997h144.003v336.003l96.005-96.005 239.997 239.997v-144.003h336.003l-96.005-96.005 239.997-239.997h-144.003v-336.003l-96.005 96.005-240.008-239.997zM511.997 271.987c132.548 0 239.997 107.45 239.997 239.997s-107.45 239.997-239.997 239.997-239.997-107.45-239.997-239.997c0-132.548 107.45-239.997 239.997-239.997zM608.002 511.985c0 53.017-42.978 95.995-96.005 95.995s-96.005-42.978-96.005-95.995 42.978-95.995 96.005-95.995 96.005 42.978 96.005 95.995z" - ], - "isMulticolor": false, - "tags": [ - "circular-saw" - ], - "defaultCode": 59750, - "grid": 0, - "attrs": [] - }, - { - "id": 103, - "paths": [ - "M511.546 38.949c-260.225 0-471.83 210.384-471.83 470.612s211.606 471.837 471.83 471.837 470.606-211.609 470.606-471.837-210.381-470.612-470.606-470.612zM511.546 864.971c-196.122 0-355.407-159.283-355.407-355.408s159.28-355.412 355.407-355.412c196.124 0 355.403 159.285 355.403 355.41s-159.281 355.41-355.403 355.41zM511.587 253.446c-141.768 0-257.376 114.307-257.376 256.079s115.613 257.385 257.376 257.385 256.072-115.613 256.075-257.385c0.003-141.771-114.307-256.079-256.075-256.079zM550.266 700.274l-37.826-141.999-37.91 142.313c-76.94-15.124-137.545-76.384-152.653-153.466l141.671-37.739-141.609-37.723c15.238-76.85 75.963-137.249 152.982-152.016l37.52 140.848 37.437-140.539c76.392 15.327 136.451 75.622 151.443 152.137l-139.992 37.292 140.054 37.308c-14.864 76.745-74.804 137.896-151.118 153.585z" - ], - "isMulticolor": false, - "tags": [ - "circular-shield" - ], - "defaultCode": 59751, - "grid": 0, - "attrs": [] - }, - { - "id": 104, - "paths": [ - "M683.955 408.135c26.813-9.199 57.291-14.257 91.955-14.257-32.98-132.475-134.313-310.429-268.468-375.726-131.416 61.744-240.663 241.569-268.467 375.726 34.499 0 65.005 4.734 91.955 13.686-65.74 101.663-111.519 269.143-111.519 502.64 94.599 56.094 185.62 86.101 277.603 88.181-104.827-8.691-188.157-147.802-188.157-318.145 0-100.053 28.759-189.311 73.73-247.711 13.837 9.159 26.407 19.82 37.788 31.894l30.55-33.374c-10.357-11.926-22.104-22.89-35.411-33.252 0.003-0.003 0.008-0.007 0.012-0.010-0.164-0.127-0.334-0.252-0.499-0.379-0.404-0.314-0.825-0.623-1.233-0.935-1.711-1.313-3.443-2.618-5.205-3.911-0.712-0.523-1.438-1.041-2.158-1.56-1.508-1.087-3.032-2.172-4.579-3.247-0.807-0.561-1.619-1.123-2.437-1.68-1.542-1.054-3.105-2.101-4.684-3.144-0.802-0.531-1.6-1.062-2.412-1.59-1.802-1.171-3.637-2.335-5.488-3.496-0.598-0.376-1.183-0.753-1.787-1.128-2.471-1.53-4.981-3.054-7.537-4.567-0.523-0.311-1.066-0.616-1.592-0.927-2.033-1.193-4.086-2.384-6.176-3.568-0.952-0.54-1.924-1.077-2.888-1.617-1.096-0.613-2.173-1.228-3.284-1.839-0.005 0.005-0.008 0.010-0.013 0.017-9.836-5.407-20.226-10.749-31.28-16.083 25.316-62.982 63.919-158.322 113.013-163.872 19.21-2.17 39.779 9.426 62.158 42.068 70.046-116.479 136.566 37.345 175.169 121.804-10.791 5.852-20.974 11.583-30.646 17.294-0.003-0.003-0.005-0.007-0.008-0.010-0.925 0.546-1.824 1.092-2.74 1.639-1.179 0.703-2.365 1.407-3.528 2.11-1.774 1.072-3.516 2.147-5.252 3.219-0.877 0.543-1.767 1.086-2.636 1.629-2.29 1.433-4.545 2.867-6.769 4.305-0.882 0.57-1.744 1.144-2.616 1.716-1.54 1.009-3.072 2.020-4.58 3.034-0.925 0.621-1.839 1.246-2.753 1.869-1.457 0.994-2.898 1.993-4.325 2.993-0.864 0.606-1.729 1.213-2.581 1.821-1.549 1.104-3.074 2.213-4.585 3.328-0.68 0.499-1.37 0.997-2.043 1.5-2.14 1.597-4.251 3.201-6.321 4.821 0 0 0.002 0.002 0.002 0.002-13.668 10.699-25.805 21.935-36.582 34.26l29.141 32.781c11.662-12.418 24.631-23.552 39.044-33.156 44.642 58.415 73.165 147.331 73.165 246.961 0 170.243-83.236 309.293-187.978 318.127 89.841-2.127 180.926-30.922 277.457-88.163 0.002-232.906-45.779-400.285-111.521-502.074zM400.112 650.031c23.123-7.452 46.601-12.007 70.21-14.126 0.12 100.477 2.549 191.881 38.979 288.056 38.152-93.261 35.285-187.295 35.095-287.149 23.619 2.542 47.136 7.081 70.324 13.22v-36.969h-82.658c-13.755-45.013-11.805-90.027 1.644-135.039h-52.58c14.030 45.013 18.225 90.025 1.951 135.039h-82.964v36.968zM470.676 306.28c0 9.734-14.398 17.625-32.158 17.625s-32.158-7.891-32.158-17.625c0-9.734 14.398-17.625 32.158-17.625s32.158 7.891 32.158 17.625zM608.38 306.28c0 9.734-14.398 17.625-32.158 17.625s-32.158-7.891-32.158-17.625c0-9.734 14.398-17.625 32.158-17.625s32.158 7.891 32.158 17.625z" - ], - "isMulticolor": false, - "tags": [ - "cloak-and-dagger" - ], - "defaultCode": 59752, - "grid": 0, - "attrs": [] - }, - { - "id": 105, - "paths": [ - "M684.58 679.418l-94.358-125.615c6.386-11.997 10.016-25.685 10.016-40.225 0-31.306-16.783-58.685-41.837-73.656v-98.449h45.48l-89.791-258.258-90.959 258.258h45.48v99.664c-23.966 15.208-39.888 41.957-39.888 72.442 0 47.361 38.396 85.755 85.757 85.755 1.458 0 2.907-0.038 4.347-0.11l97.908 130.339-34.619 26.081 227.759 161.445-91.913-262.817-33.383 25.147zM942.301 513.764c0-56.35-10.88-110.149-30.611-159.45l78.369-78.369-239.292-239.289-78.332 78.332c-43.927-17.592-91.433-28.144-141.128-30.246l38.053 95.351c11.035 1.854 21.882 4.263 32.526 7.158 2.736 0.745 5.459 1.522 8.169 2.334 0.68 0.204 1.361 0.401 2.038 0.608 3.142 0.962 6.266 1.969 9.37 3.020 0.631 0.214 1.258 0.438 1.888 0.655 2.693 0.93 5.371 1.893 8.032 2.888 0.618 0.231 1.239 0.456 1.854 0.69 3.072 1.169 6.124 2.382 9.153 3.638 0.591 0.246 1.176 0.499 1.766 0.747 2.656 1.119 5.295 2.27 7.916 3.455 0.55 0.249 1.103 0.491 1.65 0.742 2.995 1.373 5.967 2.79 8.914 4.246 0.548 0.271 1.092 0.55 1.639 0.824 2.616 1.311 5.214 2.654 7.791 4.031 0.474 0.254 0.952 0.501 1.427 0.757 2.913 1.574 5.8 3.191 8.66 4.846 0.499 0.289 0.994 0.585 1.492 0.877 2.581 1.512 5.142 3.055 7.677 4.632 0.388 0.242 0.78 0.478 1.168 0.72 2.83 1.776 5.631 3.595 8.404 5.452 0.438 0.294 0.872 0.593 1.308 0.887 2.551 1.726 5.078 3.481 7.577 5.274 0.296 0.212 0.596 0.419 0.89 0.633 2.74 1.978 5.447 3.997 8.125 6.054 0.376 0.289 0.748 0.583 1.124 0.874 2.514 1.948 5.003 3.926 7.459 5.942 0.2 0.165 0.406 0.327 0.606 0.493 2.644 2.182 5.254 4.403 7.831 6.664 0.307 0.269 0.61 0.541 0.917 0.812 2.477 2.187 4.925 4.405 7.337 6.662 0.104 0.097 0.209 0.192 0.312 0.289 2.539 2.384 5.040 4.808 7.504 7.268 0.244 0.242 0.483 0.488 0.727 0.732 2.427 2.436 4.823 4.903 7.175 7.412 0.008 0.008 0.017 0.018 0.027 0.027 2.424 2.588 4.806 5.215 7.148 7.878 0.179 0.204 0.356 0.409 0.535 0.613 4.661 5.32 9.159 10.786 13.484 16.394 0.12 0.155 0.239 0.314 0.359 0.469 4.358 5.673 8.544 11.486 12.544 17.436 0.074 0.109 0.145 0.217 0.217 0.326 4.029 6.009 7.873 12.151 11.518 18.424 0.035 0.060 0.070 0.122 0.105 0.182 3.672 6.326 7.146 12.781 10.41 19.359 0.007 0.015 0.013 0.028 0.022 0.043 9.852 19.854 17.812 40.811 23.646 62.639l0.002-0.002c7.465 27.937 11.464 57.289 11.464 87.581 0 30.309-3.994 59.681-11.469 87.631l-0.010-0.010c-14.019 52.438-40.347 99.827-75.652 138.957l63.921 173.277 161.982-161.982-78.374-78.374c19.755-49.314 30.64-103.137 30.64-159.512zM734.89 881.42l-83.91-58.669c-11.83 5.297-24.018 9.941-36.518 13.88-0.538 0.169-1.076 0.341-1.615 0.508-1.692 0.525-3.391 1.034-5.095 1.532-0.74 0.215-1.483 0.424-2.227 0.636-1.667 0.474-3.336 0.947-5.015 1.397l0.002 0.002c-27.957 7.48-57.336 11.485-87.651 11.485-30.291 0-59.643-4.002-87.578-11.468v0c-21.828-5.833-42.787-13.793-62.641-23.644-0.017-0.008-0.033-0.017-0.052-0.025-9.908-4.918-19.54-10.308-28.867-16.14-0.023-0.015-0.048-0.030-0.072-0.045-9.328-5.835-18.352-12.113-27.042-18.803-0.012-0.008-0.023-0.018-0.035-0.027-23.208-17.872-44.032-38.69-61.911-61.893-0.002-0.003-0.005-0.007-0.007-0.008-6.699-8.693-12.985-17.722-18.826-27.057-0.012-0.018-0.023-0.038-0.035-0.057-5.835-9.326-11.229-18.958-16.152-28.864-0.010-0.020-0.020-0.040-0.030-0.060-4.925-9.916-9.376-20.107-13.329-30.546-0.002-0.007-0.005-0.012-0.007-0.018-3.954-10.449-7.407-21.147-10.327-32.061v0c-7.484-27.97-11.498-57.361-11.498-87.691 0-30.317 4.006-59.694 11.485-87.653l0.002 0.002c12.635-47.248 35.242-90.418 65.424-127.123 0.060-0.074 0.12-0.149 0.18-0.222 4.55-5.524 9.274-10.898 14.161-16.122 0.142-0.152 0.282-0.304 0.424-0.456 4.828-5.142 9.817-10.128 14.954-14.961 0.222-0.209 0.443-0.419 0.665-0.628 5.088-4.759 10.327-9.361 15.702-13.803 0.299-0.247 0.596-0.496 0.897-0.742 5.334-4.377 10.805-8.59 16.402-12.639 0.374-0.271 0.748-0.543 1.124-0.812 5.566-3.991 11.259-7.814 17.069-11.469 0.439-0.277 0.879-0.553 1.32-0.829 5.787-3.603 11.692-7.034 17.704-10.29 0.501-0.271 1.002-0.541 1.503-0.81 5.997-3.207 12.101-6.239 18.307-9.089 0.551-0.252 1.103-0.504 1.655-0.755 6.196-2.806 12.492-5.429 18.88-7.866 0.596-0.227 1.194-0.453 1.792-0.677 6.383-2.392 12.858-4.599 19.418-6.612 0.635-0.195 1.271-0.386 1.908-0.576 3.172-0.952 6.359-1.871 9.57-2.731 12.514-3.356 25.311-6.019 38.352-7.931l35.391-94.408c-51.24 1.655-100.202 12.306-145.385 30.391l-78.39-78.39-239.289 239.289 78.379 78.379c-19.748 49.319-30.638 103.142-30.638 159.517 0 56.399 10.891 110.248 30.655 159.585l-78.382 78.382 239.29 239.29 78.419-78.419c49.304 19.73 103.11 30.603 159.46 30.603 56.377 0 110.208-10.876 159.529-30.625l78.36 78.36 57.929-57.929-73.788-51.593c0 0 0 0 0 0z" - ], - "isMulticolor": false, - "tags": [ - "clockwork" - ], - "defaultCode": 59753, - "grid": 0, - "attrs": [] - }, - { - "id": 106, - "paths": [ - "M885.521 720.381c-42.712-143.108-240.007-223.098-421.935-256.568 35.275 156.926-6.082 262.411 33.987 396.943 42.716 143.425 205.811 150.962 236.686 12.657 111.497 102.455 191.331-18.788 151.261-153.037v0.005zM102.754 599.003c83.447-108.075 226.234-171.691 387.921-113.445-76.823 180.14-21.987 308.75-99.757 407.963-82.909 105.769-225.494 39.842-207.474-94.178-128.819 39.567-157.579-100.761-80.689-200.34zM324.775 86.13c133.782 77.335 172.423 234.708 163.21 416.259-181.151-104.030-233.17-12.378-363.605-66.336-143.071-59.183-112.015-240.812 23.012-237.548-89.342-135.517 51.885-184.921 177.383-112.374zM690.092 100.080c-141.73 35.424-211.385 204.775-211.669 393.949 196.787-48.719 271.666 82.618 407.355 49.403 144.656-35.409 128.521-216.497-21.609-257.422 91.383-109.657-38.827-219.736-174.077-185.93v0z" - ], - "isMulticolor": false, - "tags": [ - "clover" - ], - "defaultCode": 59754, - "grid": 0, - "attrs": [] - }, - { - "id": 107, - "paths": [ - "M914.086 250.29l-370.803-214.083c-48.285-27.877-110.031-11.332-137.909 36.953l-328.213 568.484c-27.879 48.285-11.332 110.031 36.953 137.909l370.803 214.083c48.285 27.879 110.031 11.332 137.909-36.953l328.213-568.484c27.879-48.285 11.332-110.031-36.953-137.909zM472.67 120.643c12.213-21.152 39.261-28.401 60.416-16.189s28.401 39.263 16.189 60.414c-12.213 21.153-39.261 28.401-60.416 16.189s-28.401-39.263-16.189-60.414zM540.423 651.785c-18.86-11.645-32.14-29.116-39.127-48.684l-19.763 124.39-131.456-81.153 0.463-0.331h-0.002l100.405-72.001c-2.238 0.212-4.489 0.334-6.742 0.389-0.256 0.007-0.511 0.022-0.768 0.025-1.206 0.020-2.416 0.015-3.623-0.012-0.317-0.007-0.636-0.028-0.954-0.038-0.887-0.028-1.774-0.060-2.661-0.114-0.474-0.028-0.947-0.074-1.42-0.109-0.733-0.055-1.467-0.109-2.198-0.18-0.516-0.050-1.031-0.117-1.545-0.175-0.692-0.080-1.381-0.159-2.073-0.254-0.535-0.074-1.067-0.16-1.602-0.244-0.67-0.104-1.338-0.209-2.006-0.327-0.543-0.097-1.086-0.204-1.629-0.309-0.658-0.129-1.316-0.261-1.973-0.404-0.545-0.119-1.089-0.246-1.634-0.374-0.651-0.154-1.303-0.314-1.953-0.483-0.543-0.14-1.084-0.287-1.625-0.438-0.65-0.182-1.3-0.371-1.948-0.566-0.535-0.162-1.069-0.327-1.602-0.498-0.651-0.209-1.3-0.429-1.948-0.655-0.528-0.182-1.054-0.366-1.58-0.558-0.651-0.239-1.3-0.491-1.949-0.745-0.515-0.202-1.029-0.401-1.542-0.613-0.658-0.272-1.313-0.56-1.968-0.849-0.498-0.219-0.996-0.433-1.492-0.66-0.673-0.311-1.34-0.64-2.008-0.966-0.469-0.231-0.94-0.451-1.408-0.69-0.715-0.366-1.423-0.752-2.132-1.138-0.414-0.226-0.83-0.439-1.243-0.67-0.94-0.53-1.873-1.084-2.801-1.65-0.167-0.102-0.337-0.195-0.504-0.299-0.074-0.045-0.142-0.095-0.215-0.14-1.214-0.755-2.405-1.535-3.575-2.335-0.451-0.309-0.887-0.633-1.331-0.949-0.78-0.555-1.555-1.113-2.315-1.687-0.506-0.384-1.004-0.777-1.5-1.169-0.668-0.526-1.328-1.061-1.978-1.602-0.521-0.434-1.037-0.874-1.545-1.318-0.595-0.52-1.179-1.047-1.759-1.579-0.523-0.479-1.046-0.957-1.557-1.447-0.526-0.504-1.036-1.022-1.549-1.539-0.53-0.533-1.067-1.061-1.584-1.605-0.346-0.364-0.673-0.742-1.012-1.111-1.301-1.418-2.557-2.867-3.762-4.353-0.195-0.241-0.398-0.474-0.59-0.715-0.635-0.798-1.245-1.612-1.851-2.427-0.226-0.304-0.456-0.605-0.678-0.91-0.605-0.835-1.193-1.68-1.769-2.532-0.189-0.279-0.376-0.558-0.561-0.837-0.596-0.902-1.179-1.811-1.744-2.731-0.117-0.19-0.231-0.384-0.347-0.576-3.323-5.506-6.077-11.312-8.229-17.324-0.003-0.007-0.007-0.013-0.010-0.022-9.442-26.415-7.333-56.734 8.433-82.267 27.503-44.543 86.636-58.528 131.177-31.027 3.468 2.142 6.421 4.774 9.517 7.267-2.108-20.006 1.936-41.473 13.222-59.948 0.002 0 0.002 0 0.003 0 0.074-0.122 0.14-0.246 0.215-0.366 0.21-0.341 0.438-0.665 0.651-1.002 0.61-0.961 1.223-1.919 1.861-2.85 0.374-0.545 0.767-1.067 1.151-1.602 0.513-0.715 1.024-1.433 1.554-2.13 0.424-0.556 0.864-1.096 1.298-1.64 0.515-0.646 1.029-1.293 1.559-1.923 0.456-0.543 0.925-1.071 1.392-1.6 0.533-0.605 1.067-1.206 1.614-1.794 0.483-0.52 0.972-1.029 1.463-1.535 0.553-0.57 1.113-1.133 1.679-1.686 0.503-0.491 1.011-0.979 1.523-1.457 0.58-0.541 1.168-1.072 1.761-1.599 0.518-0.459 1.036-0.917 1.564-1.363 0.613-0.52 1.236-1.024 1.861-1.525 0.525-0.421 1.046-0.847 1.579-1.255 0.66-0.506 1.331-0.994 2.003-1.482 0.516-0.374 1.026-0.757 1.549-1.121 0.753-0.525 1.522-1.022 2.289-1.522 0.456-0.297 0.905-0.61 1.366-0.899 1.214-0.762 2.442-1.495 3.687-2.198 0.398-0.226 0.807-0.429 1.208-0.648 0.875-0.478 1.752-0.956 2.641-1.405 0.538-0.272 1.084-0.521 1.627-0.783 0.767-0.369 1.533-0.74 2.309-1.087 0.585-0.262 1.174-0.506 1.764-0.755 0.747-0.317 1.495-0.631 2.25-0.929 0.61-0.239 1.223-0.466 1.836-0.693 0.748-0.277 1.498-0.548 2.253-0.805 0.623-0.212 1.248-0.416 1.874-0.615 0.758-0.241 1.52-0.473 2.284-0.695 0.628-0.182 1.26-0.361 1.891-0.531 0.778-0.209 1.562-0.404 2.345-0.593 0.623-0.15 1.246-0.302 1.873-0.439 0.812-0.179 1.629-0.337 2.447-0.494 0.605-0.117 1.209-0.239 1.816-0.344 0.875-0.15 1.756-0.277 2.636-0.404 0.555-0.080 1.106-0.17 1.66-0.241 1.092-0.137 2.188-0.244 3.286-0.344 0.347-0.032 0.692-0.077 1.039-0.105 1.438-0.115 2.882-0.195 4.327-0.246 0.446-0.015 0.894-0.010 1.341-0.020 1.011-0.020 2.020-0.038 3.032-0.027 0.565 0.007 1.129 0.033 1.694 0.048 0.897 0.027 1.794 0.053 2.693 0.105 0.603 0.035 1.206 0.085 1.809 0.132 0.862 0.065 1.722 0.135 2.584 0.226 0.618 0.063 1.236 0.14 1.853 0.215 0.849 0.105 1.696 0.217 2.544 0.346 0.62 0.094 1.238 0.194 1.856 0.299 0.849 0.145 1.697 0.304 2.544 0.473 0.608 0.12 1.218 0.244 1.824 0.378 0.864 0.189 1.726 0.398 2.586 0.611 0.585 0.145 1.171 0.287 1.754 0.444 0.902 0.242 1.799 0.508 2.696 0.778 0.535 0.16 1.072 0.312 1.605 0.483 1.006 0.321 2.005 0.673 3.004 1.029 0.419 0.15 0.844 0.286 1.261 0.441 2.731 1.017 5.434 2.173 8.1 3.455 0.52 0.249 1.036 0.516 1.552 0.775 0.835 0.419 1.667 0.847 2.494 1.293 0.406 0.219 0.812 0.438 1.216 0.662 1.255 0.7 2.502 1.418 3.735 2.18 44.536 27.503 58.136 84.994 30.635 129.535-0.077 0.124-0.159 0.241-0.236 0.364-0.845 1.353-1.722 2.674-2.628 3.967-0.242 0.347-0.488 0.688-0.733 1.031-0.92 1.281-1.863 2.541-2.836 3.764-11.090 13.935-25.613 24.045-41.469 29.908 3.996 1.744 7.963 3.526 11.773 5.88 25.396 15.679 40.511 41.439 43.733 68.944 0.226 1.928 0.386 3.865 0.494 5.808 0.030 0.535 0.070 1.069 0.092 1.605 0.032 0.807 0.038 1.614 0.048 2.422 0.008 0.62 0.020 1.239 0.017 1.861-0.005 0.778-0.027 1.559-0.050 2.339-0.020 0.655-0.043 1.308-0.077 1.963-0.038 0.76-0.087 1.52-0.144 2.28-0.052 0.682-0.112 1.363-0.179 2.045-0.070 0.737-0.144 1.472-0.232 2.207-0.087 0.723-0.19 1.445-0.294 2.167-0.1 0.697-0.194 1.395-0.309 2.090-0.139 0.839-0.304 1.675-0.466 2.511-0.112 0.578-0.209 1.156-0.331 1.732-0.292 1.37-0.615 2.738-0.969 4.101-0.139 0.533-0.299 1.061-0.446 1.592-0.246 0.885-0.493 1.772-0.765 2.654-0.18 0.585-0.379 1.166-0.571 1.747-0.274 0.827-0.551 1.654-0.849 2.476-0.212 0.59-0.438 1.178-0.662 1.764-0.312 0.815-0.636 1.629-0.972 2.439-0.239 0.575-0.481 1.148-0.732 1.721-0.364 0.834-0.747 1.662-1.138 2.489-0.252 0.536-0.501 1.072-0.765 1.605-0.448 0.904-0.92 1.801-1.398 2.698-0.237 0.444-0.463 0.89-0.707 1.331-0.738 1.331-1.503 2.653-2.312 3.961-27.499 44.538-85.617 59.15-130.162 31.647zM553.324 913.044c-12.213 21.153-39.261 28.401-60.416 16.189s-28.401-39.261-16.189-60.414c12.213-21.153 39.261-28.401 60.416-16.189s28.401 39.261 16.189 60.414z" - ], - "isMulticolor": false, - "tags": [ - "clovers-card" - ], - "defaultCode": 59755, - "grid": 0, - "attrs": [] - }, - { - "id": 108, - "paths": [ - "M647.781 407.574c-6.947 0-13.634 0.882-20.326 1.834 19.489-24.93 31.408-56.427 31.408-90.536 0-81.18-64.788-145.964-145.963-145.969-81.175 0.005-147.807 64.789-147.807 145.969 0 33.82 12.203 65.693 31.408 90.536-6.116-0.765-12.158-1.834-18.479-1.834-81.18 0-147.817 66.634-147.817 147.817s66.637 147.817 147.817 147.817c33.122 0 63.705-11.119 88.315-29.733l-74.169 177.625 239.581-0.015-75.265-180.241c25.164 20.128 56.921 32.364 91.295 32.364 81.187 0 145.973-66.634 145.973-147.817s-64.791-147.817-145.971-147.817z" - ], - "isMulticolor": false, - "tags": [ - "clovers" - ], - "defaultCode": 59756, - "grid": 0, - "attrs": [] - }, - { - "id": 109, - "paths": [ - "M649.002 538.935l29.439 51.028c56.056-8.098 113.883 17.837 143.928 69.931 39.398 68.292 15.554 155.441-52.688 194.871s-154.958 16.18-194.356-52.12c-31.741-55.027-22.785-122.581 17.598-167.313l-27.685-47.994 83.764-48.402zM385.044 166.2c0 0-61.808-227.769-192.104-92.168l16.132 15.327c0 0 89.108-106.91 152.586 88.535l23.387-5.011zM920.132 397.086c-80.263-139.115-234.725-208.381-384.456-186.754l-78.631-136.301-223.747 129.276 73.954 128.192c-107.867 119.474-131.794 299.905-47.007 446.873 105.236 182.417 336.879 244.524 519.158 139.207s245.967-338.067 140.729-520.494zM782.064 893.165c-124.277 71.809-282.208 29.472-353.955-94.913-57.805-100.215-41.491-223.25 32.050-304.706l-50.422-87.406 75.494-43.624c-44.563-129.686-105.529-56.551-105.529-56.551l-11.363-10.795c80.066-83.325 123.411 28.139 133.168 57.939l60.784-35.122 53.607 92.937c102.086-14.75 207.396 32.487 262.116 127.345 71.752 124.385 28.326 283.088-95.95 354.895zM618.075 573.318c0 0-34.397-126.759-106.91-51.294l8.977 8.529c0 0 49.59-59.497 84.917 49.272l13.015-2.79z" - ], - "isMulticolor": false, - "tags": [ - "cluster-bomb" - ], - "defaultCode": 59757, - "grid": 0, - "attrs": [] - }, - { - "id": 110, - "paths": [ - "M902.074 307.641c-27.635-16.469-59.479-19.082-97.626-11.936l-0.003 0.005c-24.598 4.609-51.345 14.094-80.029 28.507 0.416-10.031 0.656-19.942 0.656-29.694h-0.312c0.869-4.475 1.326-9.009 1.326-13.596 0-77.467-126.65-140.268-282.881-140.268s-282.881 62.803-282.881 140.268c0 4.587 0.459 9.121 1.326 13.596h-0.145c-1.092 162.883 32.457 326.080 29.86 488.794-1.234 77.413 94.996 138.982 251.142 138.982s233.602-63.029 233.602-138.982c0-10.324 0.189-20.679 0.536-31.057 81.945 4.427 150.608-33.020 198.788-85.595 50.032-54.596 80.702-125.060 88.582-191.136s-6.674-134.947-61.941-167.888zM444.252 219.746c119.197 0 215.822 32.688 215.822 73.010 0 0.591-0.025 1.179-0.067 1.767v0c-0.043 0.613-0.109 1.226-0.197 1.836 0 0.003 0 0.007-0.002 0.012-0.082 0.566-0.187 1.131-0.306 1.694-0.010 0.052-0.018 0.102-0.028 0.154-0.115 0.528-0.254 1.052-0.403 1.577-0.023 0.085-0.042 0.172-0.067 0.257-0.147 0.499-0.316 0.999-0.493 1.495-0.038 0.109-0.070 0.217-0.11 0.324-0.177 0.479-0.374 0.957-0.578 1.433-0.053 0.124-0.099 0.249-0.154 0.373-0.205 0.461-0.431 0.92-0.66 1.38-0.068 0.137-0.13 0.276-0.202 0.413-0.231 0.444-0.481 0.887-0.737 1.328-0.087 0.15-0.165 0.301-0.256 0.451-0.256 0.429-0.531 0.857-0.81 1.285-0.104 0.159-0.2 0.319-0.307 0.478-0.281 0.418-0.58 0.834-0.882 1.248-0.12 0.165-0.236 0.332-0.359 0.498-0.306 0.409-0.63 0.815-0.957 1.219-0.135 0.169-0.267 0.339-0.406 0.508-0.329 0.399-0.677 0.795-1.026 1.191-0.154 0.174-0.302 0.349-0.459 0.523-0.352 0.388-0.72 0.775-1.091 1.159-0.172 0.179-0.337 0.357-0.513 0.535-0.374 0.379-0.763 0.755-1.154 1.131-0.19 0.182-0.376 0.366-0.57 0.546-0.394 0.369-0.803 0.735-1.214 1.103-0.209 0.185-0.413 0.371-0.625 0.556-0.416 0.361-0.845 0.72-1.276 1.077-0.226 0.187-0.449 0.376-0.68 0.563-0.436 0.352-0.885 0.703-1.336 1.054-0.242 0.189-0.483 0.378-0.73 0.565-0.458 0.346-0.927 0.69-1.4 1.034-0.259 0.189-0.516 0.378-0.778 0.565-0.474 0.337-0.961 0.672-1.448 1.006-0.281 0.192-0.56 0.384-0.845 0.575-0.491 0.327-0.992 0.653-1.497 0.979-0.299 0.192-0.596 0.386-0.9 0.576-0.508 0.321-1.027 0.638-1.549 0.956-0.317 0.194-0.635 0.388-0.957 0.58-0.526 0.314-1.061 0.625-1.6 0.934-0.334 0.192-0.667 0.384-1.004 0.575-0.543 0.306-1.096 0.611-1.654 0.914-0.352 0.192-0.705 0.384-1.062 0.575-0.56 0.299-1.126 0.595-1.697 0.89-0.369 0.192-0.738 0.383-1.114 0.573-0.578 0.292-1.163 0.583-1.752 0.874-0.386 0.189-0.77 0.379-1.161 0.566-0.593 0.286-1.193 0.57-1.797 0.852-0.403 0.189-0.807 0.376-1.214 0.563-0.608 0.279-1.223 0.555-1.843 0.83-0.419 0.187-0.84 0.373-1.265 0.558-0.621 0.271-1.251 0.541-1.884 0.809-0.439 0.187-0.882 0.373-1.326 0.558-0.633 0.264-1.273 0.525-1.918 0.785-0.456 0.184-0.914 0.368-1.375 0.55-0.651 0.257-1.308 0.513-1.969 0.768-0.471 0.18-0.944 0.361-1.418 0.541-0.663 0.251-1.331 0.499-2.005 0.747-0.491 0.18-0.984 0.359-1.48 0.538-0.673 0.242-1.351 0.483-2.035 0.722-0.509 0.179-1.021 0.356-1.535 0.531-0.685 0.236-1.375 0.469-2.070 0.702-0.525 0.175-1.052 0.349-1.582 0.523-0.7 0.229-1.403 0.456-2.113 0.683-0.54 0.172-1.084 0.342-1.629 0.513-0.708 0.221-1.418 0.441-2.135 0.658-0.561 0.17-1.128 0.341-1.696 0.509-0.718 0.214-1.44 0.426-2.168 0.636-0.575 0.167-1.153 0.331-1.732 0.496-0.73 0.207-1.463 0.413-2.202 0.616-0.596 0.165-1.196 0.327-1.797 0.489-0.735 0.199-1.472 0.396-2.213 0.591-0.613 0.16-1.229 0.321-1.848 0.479-0.748 0.192-1.5 0.384-2.257 0.575-0.621 0.155-1.248 0.309-1.873 0.463-0.762 0.187-1.525 0.373-2.295 0.556-0.638 0.152-1.281 0.302-1.924 0.451-0.77 0.179-1.542 0.357-2.319 0.535-0.656 0.149-1.32 0.296-1.981 0.441-0.773 0.17-1.549 0.341-2.329 0.509-0.673 0.145-1.351 0.287-2.031 0.429-0.785 0.165-1.57 0.329-2.362 0.489-0.683 0.139-1.371 0.276-2.060 0.413-0.8 0.159-1.599 0.317-2.405 0.473-0.693 0.134-1.392 0.264-2.088 0.394-0.807 0.152-1.615 0.304-2.429 0.451-0.715 0.13-1.435 0.257-2.155 0.384-0.809 0.144-1.617 0.287-2.432 0.428-0.732 0.125-1.47 0.247-2.205 0.371-0.815 0.135-1.629 0.272-2.449 0.404-0.743 0.12-1.492 0.237-2.24 0.354-0.825 0.13-1.65 0.259-2.482 0.386-0.753 0.114-1.513 0.226-2.274 0.336-0.834 0.122-1.664 0.246-2.502 0.364-0.775 0.11-1.557 0.215-2.337 0.322-0.83 0.114-1.659 0.229-2.494 0.339-0.792 0.105-1.59 0.205-2.385 0.307-0.839 0.107-1.674 0.215-2.516 0.319-0.798 0.099-1.604 0.192-2.407 0.287-0.847 0.1-1.692 0.202-2.544 0.299-0.81 0.092-1.627 0.179-2.441 0.269-0.855 0.094-1.709 0.187-2.569 0.277-0.82 0.085-1.649 0.167-2.472 0.249-0.862 0.087-1.721 0.174-2.588 0.256-0.83 0.079-1.667 0.154-2.502 0.229-0.869 0.079-1.736 0.16-2.608 0.236-0.855 0.074-1.717 0.142-2.578 0.212-0.857 0.070-1.712 0.142-2.573 0.209-0.892 0.068-1.789 0.132-2.684 0.197-0.84 0.062-1.677 0.125-2.519 0.182-0.907 0.062-1.821 0.119-2.731 0.177-0.842 0.053-1.68 0.11-2.526 0.162-0.932 0.055-1.871 0.105-2.806 0.157-0.829 0.045-1.654 0.095-2.484 0.137-0.957 0.048-1.921 0.092-2.883 0.137-0.822 0.038-1.64 0.080-2.464 0.115-0.972 0.042-1.951 0.077-2.928 0.114-0.819 0.032-1.634 0.065-2.454 0.094-0.986 0.033-1.976 0.060-2.965 0.089-0.822 0.023-1.639 0.052-2.464 0.074-1.027 0.027-2.061 0.045-3.094 0.067-0.787 0.017-1.57 0.037-2.36 0.050-1.201 0.020-2.407 0.033-3.612 0.047-0.626 0.007-1.251 0.018-1.879 0.023-1.801 0.015-3.608 0.023-5.421 0.023-0.037 0-0.074 0-0.11 0-1.851 0-3.695-0.008-5.534-0.023-0.546-0.005-1.091-0.015-1.635-0.020-1.288-0.015-2.578-0.028-3.859-0.050-0.707-0.012-1.408-0.030-2.113-0.045-1.116-0.023-2.233-0.043-3.344-0.072-0.745-0.018-1.483-0.043-2.225-0.065-1.071-0.032-2.142-0.060-3.207-0.097-0.738-0.025-1.47-0.057-2.207-0.084-1.061-0.040-2.123-0.079-3.179-0.124-0.742-0.032-1.478-0.068-2.217-0.104-1.046-0.048-2.093-0.095-3.135-0.149-0.745-0.038-1.485-0.082-2.227-0.124-1.024-0.057-2.050-0.11-3.069-0.172-0.76-0.045-1.515-0.097-2.274-0.145-0.997-0.063-1.996-0.125-2.988-0.194-0.757-0.052-1.508-0.109-2.263-0.164-0.984-0.072-1.968-0.14-2.945-0.217-0.773-0.060-1.54-0.125-2.309-0.187-0.949-0.077-1.899-0.154-2.845-0.236-0.785-0.068-1.565-0.14-2.347-0.212-0.924-0.084-1.849-0.165-2.77-0.254-0.777-0.074-1.547-0.152-2.319-0.231-0.917-0.092-1.834-0.18-2.746-0.276-0.77-0.080-1.532-0.165-2.299-0.249-0.907-0.099-1.814-0.195-2.716-0.299-0.76-0.087-1.513-0.177-2.27-0.266-0.897-0.105-1.794-0.21-2.686-0.321-0.75-0.092-1.495-0.189-2.242-0.284-0.89-0.114-1.781-0.226-2.666-0.342-0.742-0.099-1.477-0.2-2.215-0.301-0.875-0.12-1.752-0.239-2.621-0.362-0.743-0.105-1.482-0.215-2.222-0.324-0.855-0.125-1.711-0.251-2.559-0.379-0.738-0.112-1.468-0.227-2.202-0.342-0.842-0.132-1.686-0.262-2.522-0.399-0.727-0.117-1.448-0.239-2.172-0.359-0.832-0.139-1.664-0.277-2.491-0.419-0.72-0.124-1.433-0.251-2.147-0.378-0.817-0.144-1.635-0.289-2.446-0.436-0.718-0.13-1.43-0.266-2.143-0.398-0.795-0.149-1.589-0.297-2.377-0.449-0.712-0.137-1.418-0.277-2.123-0.418-0.785-0.155-1.57-0.311-2.349-0.469-0.695-0.142-1.385-0.286-2.075-0.431-0.775-0.162-1.552-0.324-2.32-0.489-0.685-0.147-1.365-0.297-2.045-0.448-0.758-0.167-1.517-0.334-2.269-0.504-0.682-0.154-1.358-0.311-2.035-0.468-0.742-0.172-1.482-0.344-2.217-0.52-0.672-0.16-1.338-0.322-2.003-0.484-0.727-0.177-1.452-0.356-2.172-0.536-0.658-0.165-1.311-0.332-1.963-0.499-0.718-0.184-1.435-0.369-2.145-0.556-0.643-0.169-1.283-0.341-1.919-0.513-0.702-0.189-1.402-0.379-2.095-0.571-0.64-0.177-1.275-0.356-1.909-0.535-0.68-0.192-1.356-0.386-2.030-0.581-0.628-0.182-1.253-0.366-1.874-0.551-0.667-0.199-1.331-0.398-1.991-0.598-0.618-0.187-1.231-0.378-1.841-0.568-0.645-0.2-1.288-0.403-1.928-0.606-0.611-0.195-1.218-0.391-1.821-0.588-0.63-0.205-1.256-0.413-1.878-0.62-0.596-0.199-1.188-0.401-1.777-0.601-0.613-0.21-1.224-0.421-1.831-0.635-0.585-0.205-1.166-0.411-1.744-0.62-0.595-0.214-1.186-0.429-1.774-0.645-0.576-0.212-1.148-0.424-1.716-0.638-0.575-0.217-1.144-0.434-1.712-0.653-0.565-0.217-1.124-0.436-1.682-0.656-0.56-0.221-1.114-0.444-1.667-0.667-0.546-0.222-1.091-0.444-1.63-0.667-0.543-0.226-1.081-0.451-1.615-0.678-0.538-0.229-1.072-0.458-1.6-0.688-0.521-0.227-1.039-0.456-1.554-0.685-0.523-0.234-1.044-0.468-1.56-0.703-0.503-0.231-1.001-0.461-1.497-0.693-0.511-0.239-1.021-0.479-1.523-0.722-0.484-0.232-0.962-0.468-1.44-0.703-0.496-0.244-0.989-0.489-1.477-0.735-0.469-0.237-0.932-0.478-1.393-0.717-0.478-0.247-0.954-0.496-1.423-0.747-0.451-0.241-0.895-0.483-1.34-0.725-0.464-0.254-0.927-0.508-1.381-0.763-0.431-0.242-0.855-0.488-1.28-0.732-0.448-0.259-0.894-0.516-1.331-0.777-0.414-0.247-0.822-0.494-1.228-0.743-0.431-0.264-0.862-0.526-1.283-0.792-0.394-0.249-0.78-0.498-1.168-0.748-0.414-0.269-0.829-0.536-1.234-0.807-0.374-0.251-0.74-0.501-1.108-0.753-0.401-0.276-0.802-0.55-1.191-0.827-0.352-0.249-0.695-0.501-1.037-0.752-0.386-0.282-0.772-0.563-1.146-0.847-0.334-0.252-0.658-0.506-0.984-0.762-0.366-0.286-0.732-0.57-1.086-0.857-0.316-0.256-0.621-0.511-0.929-0.768-0.347-0.291-0.695-0.58-1.032-0.872-0.296-0.257-0.581-0.515-0.869-0.773-0.327-0.294-0.658-0.588-0.976-0.885-0.276-0.257-0.54-0.516-0.807-0.775-0.311-0.301-0.623-0.601-0.922-0.904-0.256-0.259-0.499-0.518-0.747-0.778-0.291-0.306-0.585-0.61-0.864-0.917-0.236-0.259-0.458-0.52-0.685-0.78-0.272-0.311-0.546-0.621-0.805-0.934-0.215-0.261-0.418-0.521-0.626-0.782-0.251-0.316-0.504-0.63-0.742-0.947-0.197-0.262-0.381-0.528-0.571-0.792-0.227-0.317-0.459-0.635-0.675-0.956-0.177-0.264-0.341-0.528-0.509-0.792-0.207-0.322-0.418-0.646-0.611-0.971-0.157-0.262-0.299-0.526-0.448-0.79-0.185-0.329-0.376-0.658-0.548-0.989-0.135-0.261-0.257-0.523-0.384-0.785-0.164-0.336-0.332-0.672-0.483-1.009-0.115-0.261-0.215-0.521-0.324-0.783-0.14-0.341-0.287-0.682-0.413-1.024-0.097-0.261-0.175-0.521-0.264-0.782-0.117-0.346-0.239-0.692-0.342-1.039-0.075-0.257-0.135-0.515-0.202-0.772-0.094-0.354-0.192-0.707-0.271-1.062-0.055-0.249-0.094-0.501-0.14-0.752-0.070-0.366-0.145-0.73-0.199-1.096-0.035-0.241-0.053-0.483-0.082-0.725-0.043-0.378-0.094-0.755-0.122-1.134-0.043-0.6-0.067-1.201-0.067-1.806-0.008-40.317 96.617-73.003 215.813-73.003zM892.853 468.469c-5.982 50.198-30.277 108.362-68.822 150.418-37.063 40.439-83.861 65.292-142.72 62.025 8.566-92.12 25.704-184.33 35.81-270.181 83.078-53.093 129.37-53.534 149.641-41.449 20.507 12.226 32.073 48.99 26.091 99.188z" - ], - "isMulticolor": false, - "tags": [ - "coffee-mug" - ], - "defaultCode": 59758, - "grid": 0, - "attrs": [] - }, - { - "id": 111, - "paths": [ - "M507.019 41.648c-259.369 0-469.63 210.262-469.63 469.63s210.252 469.63 469.63 469.63 469.64-210.259 469.64-469.628-210.271-469.632-469.64-469.632zM512.312 914.138c-223.337 0-404.386-181.048-404.386-404.386s181.049-404.393 404.386-404.393 404.386 181.054 404.386 404.393-181.051 404.386-404.386 404.386zM514.005 228.838c-155.402 0-281.381 125.975-281.381 281.379s125.979 281.386 281.381 281.386 281.381-125.982 281.381-281.386c0-155.397-125.979-281.379-281.381-281.379zM643.346 643.201l-49.468-85.742h98.976c-8.493 33.062-25.904 62.541-49.508 85.742zM593.878 465.294l49.518-85.831c23.61 23.226 41.017 52.737 49.491 85.831h-99.009zM563.404 333.121l-49.67 86.088-49.677-86.101c15.801-4.393 32.449-6.75 49.648-6.75 17.218 0 33.882 2.362 49.698 6.764zM433.59 465.294h-99.062c8.478-33.11 25.897-62.634 49.525-85.866l49.538 85.866zM334.561 557.459h99.029l-49.488 85.775c-23.62-23.206-41.044-52.697-49.541-85.775zM513.706 696.257c-17.176 0-33.8-2.35-49.58-6.73l49.608-85.983 49.6 85.969c-15.794 4.388-32.436 6.744-49.628 6.744z" - ], - "isMulticolor": false, - "tags": [ - "cog-wheel" - ], - "defaultCode": 59759, - "grid": 0, - "attrs": [] - }, - { - "id": 112, - "paths": [ - "M733.172 515.825c0 121.99-98.897 220.887-220.887 220.887s-220.887-98.897-220.887-220.887 98.897-220.887 220.887-220.887 220.887 98.897 220.887 220.887zM852.573 563.354c7.382-51.611 65.274-87.356 137.014-92.056-4.711-51.806-17.538-101.176-37.771-147.519-65.117 30.187-133.085 26.22-164.276-15.378-31.341-41.817-14.515-107.522 33.288-161.718-38.972-32.648-84.324-58.771-132.998-77.908-24.621 67.544-75.181 113.083-126.786 105.708s-87.364-65.275-92.058-137.016v0.005c-52.089 4.724-102.948 17.077-149.506 37.494 30.693 65.417 28.42 133.212-13.392 164.562-41.605 31.184-107.951 15.935-162.001-31.298-32.441 38.837-58.57 82.563-77.619 131.012 67.547 24.626 113.088 75.193 105.706 126.781s-65.274 87.364-137.014 92.060c4.669 51.506 17.747 101.399 37.771 147.519 35.563-16.336 71.483-22.179 102.036-17.884 26.021 3.73 47.807 14.017 62.24 33.266 31.582 42.126 15.116 109.279-33.57 163.7 38.97 32.651 84.324 58.767 132.998 77.903 24.621-67.544 75.181-113.093 126.786-105.708s87.362 65.275 92.058 137.016c52.089-4.724 102.948-17.072 149.506-37.489-31.482-65.887-28.462-134.966 13.678-166.551 19.247-14.436 45.049-17.984 71.057-14.194 30.174 4.313 62.245 20.472 90.942 45.492 32.125-38.628 58.699-82.919 77.619-131.007-67.549-24.626-113.089-75.18-105.708-126.789zM512.229 785.303c-148.908 0-269.618-120.708-269.618-269.618s120.71-269.618 269.618-269.618 269.618 120.713 269.618 269.618-120.71 269.618-269.618 269.618z" - ], - "isMulticolor": false, - "tags": [ - "cog" - ], - "defaultCode": 59760, - "grid": 0, - "attrs": [] - }, - { - "id": 113, - "paths": [ - "M925.455 328.271l-76.868 20.595-10.589 39.517-64.302-64.302 23.23-23.23-16.122-60.17-60.17-16.123-23.23 23.23-64.362-64.362 39.602-10.611 20.595-76.865-56.268-56.27-76.865 20.595-20.595 76.865 28.68 28.68-87.93 23.56-8.418-31.413-60.17-16.123-44.049 44.049 8.418 31.415-88.117 23.61 10.527-39.29-56.272-56.27-76.867 20.597-20.595 76.867 56.272 56.27 39.49-10.581-23.552 87.894-31.393-8.413-44.049 44.049 16.123 60.172 31.393 8.411-23.592 88.041-28.973-28.973-76.868 20.595-20.599 76.867 56.27 56.272 76.868-20.595 10.639-39.7 64.657 64.657-22.962 22.962 16.122 60.17 60.17 16.123 22.962-22.962 64.596 64.597-39.602 10.611-20.595 76.865 56.268 56.27 76.865-20.595 20.595-76.865-29.305-29.307 88.233-23.642 8.491 31.689 60.17 16.123 44.049-44.049-8.491-31.689 88.049-23.592-10.699 39.929 56.272 56.27 76.867-20.597 20.595-76.867-56.272-56.27-39.724 10.644 23.654-88.273 31.711 8.498 44.049-44.049-16.123-60.172-31.709-8.496 23.612-88.119 29.009 29.009 76.868-20.595 20.599-76.867-56.273-56.273zM724.072 515.992c-28.57 121.782-240.521 155.939-276.051 217.474 0-77.644-160.668-199.423-130.928-326.526 28.565-122.070 184.798-108.337 216.124 8.568 87.676-87.668 219.006-19.518 190.855 100.484z" - ], - "isMulticolor": false, - "tags": [ - "cold-heart" - ], - "defaultCode": 59761, - "grid": 0, - "attrs": [] - }, - { - "id": 114, - "paths": [ - "M805.814 260.291l56.225-98.788-98.819 56.241c-152.548-130.669-382.655-123.81-527.053 20.589-144.397 144.397-151.258 374.5-20.594 527.048l-56.253 98.84 98.81-56.236c152.546 130.917 382.847 124.133 527.333-20.355 144.488-144.488 151.271-374.792 20.35-527.338zM786.245 239.133c0 0 0 0 0 0v0zM510.45 514.928l-95.763-95.765 95.763 95.763 196.414-196.413c0 0 0 0 0 0l-196.414 196.414zM315.689 317.607c92.553-92.551 234.479-105.622 340.982-39.219l-242.467 137.998-137.792 242.107c-66.334-106.493-53.246-248.363 39.278-340.885zM705.979 707.896c-92.541 92.541-234.446 105.619-340.944 39.244l180.969-102.996 60.216-33.453-0.521-0.521 1.458-0.83 138.006-242.481c66.443 106.508 53.383 248.468-39.184 341.037z" - ], - "isMulticolor": false, - "tags": [ - "compass" - ], - "defaultCode": 59762, - "grid": 0, - "attrs": [] - }, - { - "id": 115, - "paths": [ - "M878.823 151.626l-196.219-112.886c-6.46 11.175-28.236 49.065-44.214 93.411l-10.389-5.969c-130.923 227.807-255.335 439.573-384.864 662.692-39.041 67.245-24.863 148.163 31.549 180.573 56.412 32.412 134.137 4.29 172.846-63.142 128.439-223.74 253.080-435.387 384.865-662.692l-13.377-7.684c30.678-35.446 53.056-72.634 59.803-84.304zM486.567 439.117l134.595-235.552c-3.7 39.488 5.155 75.943 40.305 96.211 46.476 26.796 95.606-1.37 135.577-40.412l-102.711 179.753h-207.767z" - ], - "isMulticolor": false, - "tags": [ - "corked-tube" - ], - "defaultCode": 59763, - "grid": 0, - "attrs": [] - }, - { - "id": 116, - "paths": [ - "M882.975 370.143l20.45-47.495-58.827 15.153c-24.947-19.162-52.075-36.79-80.799-52.764l-11.291-96.037-61.602 60.419c-30.184-12.896-61.418-24.127-93.156-33.58l-14.353-122.082-98.244 96.356c-26.905-4.306-53.701-7.272-80.069-8.847l-54.376-136.603-84.065 142.394c-198.157 31.423-324.479 168.818-188.596 449.705 391.826 103.452 755.836-285.367 787.872 264.382 198.9-215.149 156.595-401.6 17.056-531.003zM435.983 640.648c-78.213 14.867-162.96 27.99-250.619 22.378 89.307 229.896 415.938 461.373 523.446 183.67-208.321 69.67-189.385-109.685-272.827-206.048z" - ], - "isMulticolor": false, - "tags": [ - "crab-claw" - ], - "defaultCode": 59764, - "grid": 0, - "attrs": [] - }, - { - "id": 117, - "paths": [ - "M887.846 307.345c-87.581-142.099-244.713-236.689-376.296-281.842-44.61 14.227-88.988 33.794-131.824 58.323l169.62 132.086-46.302 46.81 166.269 126.964-311.884-97.449 63.837-61.597-169.456-53.786c-41.959 38.052-80.38 81.683-113.475 130.489 90.476 243.007 90.476 290.45 0 533.462 244.723 186.888 502.851 195.734 749.511 0-74.024-243.009-74.029-290.448 0-533.461zM764.3 575.418c-62.873-31.413-124.33-51.123-185.174-58.921-24.028 152.22-23.428 304.442 4.963 456.662h-119.355c36.912-152.566 31.385-305.129 4.574-457.691-62.603 6.941-125.068 26.834-188.289 59.95v-142.41c159.079-44.734 334.369-29.965 483.281 0v142.41z" - ], - "isMulticolor": false, - "tags": [ - "cracked-helm" - ], - "defaultCode": 59765, - "grid": 0, - "attrs": [] - }, - { - "id": 118, - "paths": [ - "M947.138 51.456c-83.719 18.617-167.438 32.614-251.157 41.154l-141.080 270.239 92.805 41.204-229.774 378.077 82.79-338.588-44.969-20.48-142.485 39.817 118.617-100.339 87.14-260.315c-137.62 0.697-275.239-14.964-412.859-50.769h-0.002c61.001 51.982 105.429 189.988 105.429 352.388 0 88.573-13.803 169.002-35.551 232.957 62.165 142.627 171.576 244.414 359.192 350.023 182.817-97.335 287.577-192.828 346.932-334.651-24.962-66.012-40.456-152.676-40.456-248.328-0.003-162.402 44.426-300.408 105.427-352.39z" - ], - "isMulticolor": false, - "tags": [ - "cracked-shield" - ], - "defaultCode": 59766, - "grid": 0, - "attrs": [] - }, - { - "id": 119, - "paths": [ - "M17.435 99.368v-0.002l-0.003-0.002zM505.747 485.274l123.687 123.687 124.512 122.863 122.030 123.683 123.628 121.976v-145.53l-573.547-573.545 85.109-85.109-55.248-55.248-137.958 137.958c-44.541-22.623-86.427-52.8-122.416-88.782-42.856-42.844-76.414-92.969-99.365-146.606-39.35 11.842-66.061 37.574-78.746 78.744 99.231 42.465 186.159 124.863 235.423 221.745l-134.795 134.795 55.248 55.248 85.991-85.991 563.051 563.051h55.353l-9.146-1.597-18.972-104.724-104.715-18.963-18.138-103.895-104.729-18.968-18.96-104.719-104.724-18.968-18.958-104.72-103.9-18.138-24.74-136.884 36.283 6.598-0.82 0.824 119.561 121.213z" - ], - "isMulticolor": false, - "tags": [ - "croc-sword" - ], - "defaultCode": 59767, - "grid": 0, - "attrs": [] - }, - { - "id": 120, - "paths": [ - "M836.73 257.655l124.69 10.043c8.614-10.862 22.016-65.506 8.614-78.873l-131.731-131.731c-13.402-13.402-68.011 0-78.875 8.577l10.007 124.69 67.295 67.295zM972.825 848.389c1.459 1.558 2.935 3.11 4.439 4.652-97.25-101.664-41.982-290.143-193.605-488.948l46.641-62.298-104.967-104.963-62.298 46.652c-191.018-145.654-372.473-100.401-476.577-182.861l-0.040-0.452-7.879-6.204c-1.499-1.339-2.987-2.701-4.451-4.101 1.454 1.419 2.918 2.806 4.385 4.185l-0.002 0.427 54.192 624.906-207.623 232.323 90.383 90.383 226.065-202.017 631.336 48.319zM965.266 840.015l-614.678-48.076 340.689-304.449 34.485-46.062c146.71 174.674 154.691 301.448 239.504 398.587zM186.52 61.345c97.22 85.302 224.159 93.013 399.196 240.038l-46.080 34.506-299.781 335.445-53.335-609.989zM237.148 764.712l420.14-420.14 63.185-37.918-37.918 63.185-420.14 420.14-25.267-25.267z" - ], - "isMulticolor": false, - "tags": [ - "crossbow" - ], - "defaultCode": 59768, - "grid": 0, - "attrs": [] - }, - { - "id": 121, - "paths": [ - "M886.56 883.799l-57.326-75.853-16.919 12.724c-131.074-138.895-177.588-269.631-242.098-417.065 20.265-44.984 41.456-89.516 64.866-132.871l30.71 17.786c103.294-126.657 134.979 160.907 71.456 280.279 208.873-53.507 390.076-392.551 158.641-526.169-57.15 98.987-141.624 70.998-279.173-8.663l-97.611 169.6 25.714 14.892c-11.932 20.674-22.937 40.93-33.219 60.815-10.282-19.885-21.289-40.141-33.219-60.817l25.712-14.892-97.611-169.598c-137.55 79.662-222.024 107.65-279.173 8.663-231.434 133.618-50.231 472.662 158.641 526.171-63.523-119.372-31.838-406.936 71.456-280.279l30.71-17.786c23.412 43.355 44.602 87.887 64.868 132.873-64.512 147.433-111.025 278.171-242.098 417.064l-16.92-12.726-57.324 75.853 5 3.76c-4.467 3.956-9.012 7.92-13.638 11.894 19.773 37.504 58.69 58.184 102.068 74.946 4.159-3.66 8.25-7.358 12.296-11.084l25.055 18.845 57.324-75.853-16.207-12.189c89.728-106.149 147.877-230.337 203.059-356.649 55.182 126.311 113.332 250.499 203.061 356.648l-16.209 12.191 57.326 75.853 25.057-18.845c4.046 3.723 8.135 7.422 12.295 11.082 43.377-16.762 82.294-37.442 102.068-74.946-4.626-3.974-9.171-7.938-13.638-11.892l4.998-3.76z" - ], - "isMulticolor": false, - "tags": [ - "crossed-axes" - ], - "defaultCode": 59769, - "grid": 0, - "attrs": [] - }, - { - "id": 122, - "paths": [ - "M930.403 746.76l-0.002-0.005c-131.775-44.79-244.698-114.606-342.069-203.509l-48.572 48.572c88.886 99.281 161.752 211.549 212.342 333.241 45.746 110.032 190.82 25.879 84.312-84.312 125.945 91.413 212.579-53.679 93.989-93.987zM488.988 439.973c-88.231-103.832-161.555-225.258-223.419-358.051-40.44-86.804-177.159-1.228-96.754 96.752-96.415-89.051-182.319 35.462-81.551 81.552 127.482 58.305 246.948 136.423 351.259 230.211l50.465-50.465zM98.68 745.728c313.538-106.571 520.381-354.768 664.832-664.833 40.444-86.804 177.159-1.228 96.754 96.752 96.415-89.051 182.319 35.462 81.551 81.552-292.682 133.863-543.148 372.121-664.832 664.833-45.746 110.036-190.82 25.877-84.312-84.312-125.945 91.413-212.579-53.679-93.993-93.987v-0.005z" - ], - "isMulticolor": false, - "tags": [ - "crossed-bones" - ], - "defaultCode": 59770, - "grid": 0, - "attrs": [] - }, - { - "id": 123, - "paths": [ - "M989.839 493.090l-0.002-0.005c-41.276 15.362-106.608 34.452-172.625-22.176l-193.352-165.853 190.713-163.589-96.909-112.977-208.113 178.515-208.114-178.515-96.909 112.977 190.713 163.589-193.354 165.855c-66.017 56.627-131.349 37.537-172.625 22.176v0.003c-27.536 69.348 6.030 133.187 96.704 108.307-49.109 83.98-61.955 235.866 61.139 352.149 110.174 104.082 291.284-59.192 189.602-133.858-38.414-28.208-75.051-60.396-90.807-99.909 68.93-61.869 106.371-112.252 63.389-176.541 10.818-11.023 23.022-22.408 36.74-34.175l123.52-105.953 123.52 105.953c13.718 11.767 25.922 23.151 36.74 34.175-42.983 64.288-5.541 114.673 63.389 176.541-15.756 39.515-52.393 71.702-90.807 99.909-101.682 74.667 79.428 237.941 189.602 133.858 123.094-116.283 110.248-268.169 61.139-352.149 90.675 24.88 124.241-38.959 96.705-108.307zM278.433 690.049c-3.419-31.807 6.953-68.018 38.733-109.969l-38.733 109.969zM701.936 580.080c31.781 41.951 42.151 78.161 38.733 109.969l-38.733-109.969z" - ], - "isMulticolor": false, - "tags": [ - "crossed-pistols" - ], - "defaultCode": 59771, - "grid": 0, - "attrs": [] - }, - { - "id": 124, - "paths": [ - "M273.331 584.878l-215.812 218.802c108.003 351.623 464.919 77.774 271.018-111.424-38.982-38.038-57.723-77.149-55.206-107.378zM264.083 681.997c19.448 14.097 35.021 28.707 47.196 43.471-58.044 7.328-162.286 87.002-184.252 144.736-9.179-14.055-17.547-30.657-24.783-50.081l161.839-138.126zM147.514 896.154c59.282-6.996 159.458-91.973 181.373-145.301 71.566 125.723-82.884 247.594-181.373 145.301zM394.878 606.915c-24.095 18.668-48.021 37.293-71.581 55.889l61.903 103.895c42.574-25.471 84.883-51.826 126.184-78.943 41.301 27.115 83.611 53.47 126.184 78.943l61.901-103.895c-23.56-18.596-47.485-37.221-71.58-55.889 237.645-175.167 409.483-374.712 340.798-570.49-71.030 167.684-259.356 325.894-457.305 480.263-197.948-154.368-386.272-312.579-457.302-480.263-68.685 195.776 103.153 395.322 340.798 570.49zM694.229 692.256c-193.9 189.198 163.016 463.048 271.018 111.424l-215.812-218.802c2.517 30.227-16.222 69.338-55.206 107.378zM693.878 750.853c21.917 53.328 122.092 138.305 181.375 145.301-98.489 102.293-252.941-19.578-181.375-145.301zM920.519 820.124c-7.235 19.424-15.604 36.025-24.783 50.081-21.963-57.735-126.206-137.408-184.252-144.736 12.176-14.764 27.75-29.374 47.196-43.471l161.839 138.126z" - ], - "isMulticolor": false, - "tags": [ - "crossed-sabres" - ], - "defaultCode": 59772, - "grid": 0, - "attrs": [] - }, - { - "id": 125, - "paths": [ - "M769.936 700.944l137.563-137.563-56.945-56.943c-22.192 43.638-48.741 83.863-78.808 120.959-46.035-45.981-91.367-90.987-136.678-134.831 133.417-141.84 254.131-289.344 346.59-463.725-177.222 98.768-327.164 216.224-471.102 346.742-143.936-130.517-293.878-247.973-471.1-346.742 92.459 174.379 213.171 321.883 346.59 463.725-45.31 43.843-90.642 88.847-136.676 134.829-30.065-37.096-56.616-77.321-78.808-120.959l-56.945 56.945 137.565 137.565c-52.495 87.21-126.819 152.596-211.627 207.494l56.031 56.031c55.518-84.185 123.299-156.119 207.822-211.3l137.241 137.241 56.945-56.945c-41.857-24.183-82.004-50.951-119.653-80.527 44.67-44.585 89.031-88.453 132.617-132.245 43.586 43.791 87.949 87.66 132.619 132.245-37.649 29.577-77.797 56.343-119.653 80.527l56.945 56.945 137.243-137.243c84.523 55.181 152.302 127.113 207.82 211.298l56.031-56.031c-84.807-54.897-159.131-120.282-211.627-207.493z" - ], - "isMulticolor": false, - "tags": [ - "crossed-swords" - ], - "defaultCode": 59773, - "grid": 0, - "attrs": [] - }, - { - "id": 126, - "paths": [ - "M667.548 257.027c-235.281-135.84-494.944-126.572-579.97 20.697s36.78 376.775 272.062 512.615 494.941 126.577 579.968-20.692c85.027-147.274-36.779-376.779-272.060-512.62zM876.83 705.691c-56.348 97.597-255.041 88.373-443.791-20.604s-296.086-276.437-239.738-374.034 255.043-88.376 443.793 20.6 296.086 276.437 239.736 374.037zM791.976 385.019c12.993-49.72 65.635-95.446 99.672-124.001-37.91-10.659-135.372 10.34-161.303 35.467zM281.942 168.392c-34.148-13.848-75.084-58.147-91.876-102.869-20.106 33.867-19.057 93.141-9.599 139.485zM535.707 197.891c-32.462-51.023-39.555-113.074-26.378-148.218-36.607 20.543-75.672 96.984-86.816 127.933zM624.81 770.958c42.555-25.737 65.7-94.006 62.295-129.044 28.181 27.504 42.619 107.393 45.198 138.15zM879.157 482.199c48.292 11.894 83.271 3.991 105.639-23.195 0.481 39.371-16.15 82.067-36.071 105.636zM90.297 502.188c-1.004 49.725-17.699 81.466-49.738 96.046 37.901 10.654 83.45 5.635 111.374-7.507zM380.415 660.203c-11.9-48.285 11.986-115.219 39.163-137.585-39.368-0.483-98.045 48.108-121.609 68.032zM569.788 863.010c34.45 35.882 37.103 86.098 24.751 119.055 34.335-19.259 70.983-70.997 81.432-100.028zM444.152 830.23c-49.727 1.044-105.631 58.512-127.995 85.684-0.484-39.366 26.32-119.397 39.458-147.316zM877.221 809.012c48.295 8.19 83.271 30.633 105.639 67.121 0.489-39.171-16.15-88.781-36.074-120.64zM144.384 366.575c33.939-14.353 94.208-11.981 137.7 7.771-9.725-38.159-52.381-79.329-91.839-105.417zM659.705 341.58c-36.567 4.542-87.578 36.729-115.366 75.581-10.658-37.908 5.698-94.89 26.826-137.211z" - ], - "isMulticolor": false, - "tags": [ - "crown-of-thorns" - ], - "defaultCode": 59774, - "grid": 0, - "attrs": [] - }, - { - "id": 127, - "paths": [ - "M994.685 228.010l-125.419 134.132-46.571-165.88-104.179 144.148-49.516-112.403-83.368 147.463-81.706-142.224-68.72 144.172-98.58-149.409-38.683 132.44-113.059-150.408 3.847 178.061-164.408-160.093 140.537 456.266c24.808 50.846 143.492 90.157 352.59 94.256 221.247 4.342 355.657-35.025 379.087-94.261l-0.003 0.005 98.152-456.266zM213.060 662.144c-27.479 0-49.753-22.279-49.753-49.752s22.274-49.752 49.753-49.752c27.479 0 49.753 22.279 49.753 49.752 0 27.478-22.274 49.752-49.753 49.752zM386.427 710.030c-27.479 0-49.753-22.279-49.753-49.752s22.274-49.752 49.753-49.752 49.753 22.279 49.753 49.752c0 27.476-22.274 49.752-49.753 49.752zM648.469 710.030c-27.479 0-49.753-22.279-49.753-49.752s22.274-49.752 49.753-49.752 49.753 22.279 49.753 49.752c0 27.476-22.274 49.752-49.753 49.752zM841.158 662.144c-27.479 0-49.753-22.279-49.753-49.752s22.274-49.752 49.753-49.752c27.479 0 49.753 22.279 49.753 49.752 0 27.478-22.274 49.752-49.753 49.752z" - ], - "isMulticolor": false, - "tags": [ - "crown" - ], - "defaultCode": 59775, - "grid": 0, - "attrs": [] - }, - { - "id": 128, - "paths": [ - "M735.404 308.309l68.8-262.38-178.417 137.604-125.942-134.106-125.942 134.106-163.259-127.108 65.304 251.884h459.455zM680.324 191.774c27.052 0 48.977 21.928 48.977 48.983 0 27.048-21.925 48.977-48.977 48.977s-48.977-21.928-48.977-48.977 21.925-48.983 48.977-48.983zM499.488 166.469l49.421 45.183-49.421 64.971-49.421-64.971 49.421-45.183zM329.391 191.774c27.052 0 48.977 21.928 48.977 48.983 0 27.048-21.925 48.977-48.977 48.977s-48.977-21.928-48.977-48.977 21.925-48.983 48.977-48.983zM509.429 450.595c-95.255-178.841-332.98-112.222-338.914 76.787-6.324 201.446 257.333 252.454 338.914 453.562 77.233-201.080 333.864-264.21 339.913-453.562 6.45-201.863-244.823-240.61-339.913-76.787z" - ], - "isMulticolor": false, - "tags": [ - "crowned-heart" - ], - "defaultCode": 59776, - "grid": 0, - "attrs": [] - }, - { - "id": 129, - "paths": [ - "M512.017 751.999c-66.259 0-119.994 53.71-119.994 119.994 0 66.259 53.71 119.994 119.994 119.994 66.259 0 119.994-53.71 119.994-119.994s-53.735-119.994-119.994-119.994zM932.007 31.987h-840.006c-30.017 0-60.009 30.017-60.009 60.009h0.075v480h119.994l119.994 119.994 119.994-119.994 119.994 119.994 119.994-119.994 119.994 119.994 119.994-119.994h119.994v-480c0-30.016-30.017-60.009-60.009-60.009z" - ], - "isMulticolor": false, - "tags": [ - "crush" - ], - "defaultCode": 59777, - "grid": 0, - "attrs": [] - }, - { - "id": 130, - "paths": [ - "M838.581 712.007c0.545-3.378 0.84-6.785 0.84-10.223 0-33.232-25.899-63.829-69.381-88.203 126.174-138.886 122.218-353.843-11.887-487.949-138.192-138.192-362.242-138.192-500.434 0-134.107 134.107-138.061 349.065-11.884 487.952-43.479 24.374-69.378 54.969-69.378 88.199 0 4.3 0.459 8.553 1.308 12.757-50.308 30.127-80.042 67.333-80.042 107.605 0 100.399 184.728 181.791 412.607 181.791s412.607-81.389 412.607-181.791c0-41.409-31.438-79.578-84.356-110.139zM283.995 152.766c123.735-123.734 324.346-123.734 448.079 0s123.735 324.344 0 448.079c-61.497 61.497-141.982 92.414-222.579 92.783-53.004-0.155-105.978-13.516-153.553-40.106-0.603 0.107-1.198 0.221-1.799 0.329-25.146-13.984-48.793-31.65-70.148-53.006-123.734-123.734-123.735-324.346 0-448.079zM751.527 292.645c-28.827 28.827-88.791 15.601-133.933-29.542s-58.368-105.106-29.542-133.933c28.827-28.827 88.791-15.601 133.933 29.542s58.368 105.106 29.542 133.933zM557.428 648.375c-57.675 57.675-177.649 31.211-267.97-59.109s-116.784-210.295-59.109-267.97c57.675-57.675 177.649-31.211 267.97 59.109s116.784 210.295 59.109 267.97z" - ], - "isMulticolor": false, - "tags": [ - "crystal-ball" - ], - "defaultCode": 59778, - "grid": 0, - "attrs": [] - }, - { - "id": 131, - "paths": [ - "M863.237 423.812l-63.877-32.748-147.125 39.421 77.936-134.989-7.113-110.295-117.488 37.846v-66.084l-79.279-118.913-107.588 118.908v179.846l-69.39-120.187-70.99-35.102-18.693 86.881 133.641 231.476-152.74 40.925-46.711 55.819 68.367 24.985 133.469-35.761-55.613 96.323 11.124 125.264 67.536-31.387v66.107l93.436 133.065 93.436-133.070v-145.336l43.167 135.943 71.673 54.613 27.033-85.958-90.673-285.531 164.236-44.005 42.226-48.058zM498.969 682.953l0.002 0.002-28.774-147.408-83.073-25.022 83.074-25.019 44.638-228.693 44.842 229.735 79.605 23.975-79.606 23.98-44.841 229.735-15.868-81.285z" - ], - "isMulticolor": false, - "tags": [ - "crystal-cluster" - ], - "defaultCode": 59779, - "grid": 0, - "attrs": [] - }, - { - "id": 132, - "paths": [ - "M994.411 284.298l0.967-0.967-18.8-241.971-242.817-19.638-0.966 0.966-0.003-0.003v0.005l-280.895 280.895 0.222 2.741-2.745-0.222 2.967 2.967 14.665 181.285-65.833-65.832c-9.071 85.291-57.71 131.029-141.548 141.548l36.996 36.994-262.503 261.696v123.61h107.284l270.262-270.264 38.615 38.615c10.893-83.462 56.789-131.944 141.548-141.548l-64.437-64.435 180.658 14.035 2.938 2.938-0.212-2.726 2.735 0.212 0.003-0.005 280.897-280.895zM700.329 430.464l-8.134-104.724-105.968-8.57 157.242-157.245 0.429 0.023 8.539 105.549 104.72 8.137-156.829 156.829z" - ], - "isMulticolor": false, - "tags": [ - "crystal-wand" - ], - "defaultCode": 59780, - "grid": 0, - "attrs": [] - }, - { - "id": 133, - "paths": [ - "M537.6 120.266l-134.395 111.497 59.945 440.519 77.603 54.429 82.176-51.272 46.954-439.478zM771.167 413.312l81.167-143.692-32.826-66.416-56.634 25.227-54.394 158.613 12.676 63.383zM294.795 357.396l6.937-55.022-79.18-118.442-52.628-21.502-4.415 58.34 79.18 118.403zM881.943 468.71l-109.735 23.711-141.237 338.289 30.966 68.84 94.158-6.366 171.005-321.73zM197.042 433.073l-38.944 129.821 202.443 319.019 72.652 23.211 19.519-59.848-130.043-403.912z" - ], - "isMulticolor": false, - "tags": [ - "crystals" - ], - "defaultCode": 59781, - "grid": 0, - "attrs": [] - }, - { - "id": 134, - "paths": [ - "M804.196 497.139v-308.705l-285.718-164.963-285.718 164.963v307.18l-164.274 94.846v257.032l222.599 128.516 216.832-125.187h18.48l192.006 110.853 17.485 10.826 0.667-0.346 6.675 3.854 222.599-128.516v-257.032l-161.633-93.321zM744.050 662.299l-89.023-51.382c24.339-20.273 55.632-32.479 89.783-32.479 33.884 0 64.965 12.007 89.22 31.998l-89.98 51.863zM204.972 609.233c24.030-19.254 54.506-30.795 87.693-30.795 34.838 0 66.687 12.719 91.228 33.729l-86.977 50.133-91.945-53.066zM295.879 283.005l85.299 49.167c-0.979 6.689-1.503 13.524-1.503 20.485 0 58.236 35.462 108.185 85.968 129.443v80.625l-169.763-98.015v-181.706zM575.982 558.503v-77.074c49.697-21.614 84.461-71.125 84.461-128.773 0-5.421-0.339-10.76-0.937-16.020l81.571-46.693v173.24l-165.095 95.321zM687.441 193.326l-82.488 47.545c-23.579-17.934-52.986-28.598-84.895-28.598-30.18 0-58.112 9.557-81.003 25.762l-83.504-48.195 162.926-94.068 168.963 97.554zM152.28 718.823c0-5.237 0.311-10.399 0.869-15.485l86.627 49.93v95.6c-51.31-20.891-87.496-71.229-87.496-130.045zM347.061 848.273v-91.512l85.518-48.953c0.282 3.638 0.471 7.303 0.471 11.015 0 58.243-35.472 108.197-85.989 129.45zM604.427 718.823c0-4.301 0.224-8.548 0.603-12.749l81.88 47.194v93.435c-48.634-22.057-82.483-71-82.483-127.88zM794.195 850.249v-93.488l90.321-51.701c0.441 4.529 0.68 9.117 0.68 13.763 0 60.147-37.84 111.439-91.001 131.426z" - ], - "isMulticolor": false, - "tags": [ - "cubes" - ], - "defaultCode": 59782, - "grid": 0, - "attrs": [] - }, - { - "id": 135, - "paths": [ - "M559.453 898.41c0 28.188 30.952 53.281 63.533 53.281v-0.003c31.864 0 64.808-24.944 64.808-54.621 0-59.131-55.66-86.285-64.808-188.376-7.307 101.927-63.533 132.948-63.533 189.719zM992.664 457.673c22.167-37.987 0.189-104.47-36.151-121.101l-270.109 91.215c-2.302-4.737-4.694-9.411-7.185-14.007l224.814-161.050c4.069-19.76-4.049-44.445-18.658-64.041s-35.462-35.135-57.139-37.262l-229.386 166.297c-3.181-2.374-6.401-4.634-9.655-6.797l146.915-230.535c-8.307-34.856-59.096-63.154-99.119-61.714l0.008 0.018c-5.716 0.374-11.201 0.82-16.326 2.314l-200.674 314.739c-27.977-120.129-50.881-249.467-179.364-194.258 43.571 116.946 55.714 244.656 81.1 338.573-61.769 73.997-157.534 160.222-301.619 222.145v301.596h310.19c92.696-177.471 183.044-302.651 257.712-303.923l11.663-0.434-63.176-181.874 42.261-14.089-67.228-157.81 137.749 185.382-55.705 15.019 71.147 150.952 298.782-11.117c31.002-29.404 35.638-101.12 5.828-129.255l-247.748 7.093c-0.17-3.834-0.413-7.667-0.723-11.498l271.793-94.579z" - ], - "isMulticolor": false, - "tags": [ - "cut-palm" - ], - "defaultCode": 59783, - "grid": 0, - "attrs": [] - }, - { - "id": 136, - "paths": [ - "M414.503 911.49l-50.684-338.844-101.812 137.619c-88.009-108.586-95.299-266.838-8.317-384.409 82.455-111.456 224.652-152.608 349.617-111.965l-17.537-117.271 143.774-21.499c-210.152-107.764-473.425-50.829-618.481 145.241-145.446 196.6-122.347 465.925 43.401 635.273l-78.813 106.533 338.852-50.677zM862.109 174.242l82.551-111.586-338.847 50.669 50.677 338.852 97.793-132.188c84.269 108.404 90.050 263.649 4.382 379.45-81.098 109.621-219.985 151.223-343.429 113.893l16.807 112.359-152.392 22.79c210.583 109.611 475.463 53.017 621.129-143.878 144.053-194.719 122.766-460.755-38.67-630.361z" - ], - "isMulticolor": false, - "tags": [ - "cycle" - ], - "defaultCode": 59784, - "grid": 0, - "attrs": [] - }, - { - "id": 137, - "paths": [ - "M985.92 149.556l15.178-56.646c-39.622-39.662-95.641-53.178-149.417-40.036l-15.178 56.646 27.586 7.392-61.838 230.779-15.392-4.124c-16.011 25.080-54.599 37.198-96.109 29.783l-15.393 57.446c26.566 2.422 52.782 6.129 78.691 10.983-85.872 165.94-116.387 370.762-72.39 543.163 130.015-148.662 202.506-322.892 209.018-506.14 24.987 8.852 49.705 18.719 74.166 29.561l15.393-57.446c-39.657-14.333-67.018-44.121-68.344-73.847l-15.393-4.124 61.838-230.779 27.585 7.39zM812.533 497.796c-20.423-5.471-32.542-26.465-27.072-46.885 0.227-0.847 0.491-1.674 0.77-2.492 0 0 0 0 0 0 2.815-8.244 8.225-14.967 15.054-19.496 0.033-0.022 0.065-0.045 0.097-0.067 0.93-0.613 1.891-1.183 2.872-1.712 0.067-0.037 0.134-0.074 0.2-0.109 0.957-0.511 1.939-0.979 2.938-1.407 0.097-0.042 0.192-0.084 0.289-0.124 0.982-0.413 1.985-0.782 3-1.111 0.119-0.038 0.237-0.075 0.356-0.114 1.007-0.316 2.030-0.591 3.065-0.824 0.13-0.028 0.261-0.057 0.391-0.084 1.034-0.221 2.080-0.401 3.135-0.536 0.132-0.017 0.266-0.030 0.398-0.045 1.062-0.124 2.133-0.207 3.212-0.241 0.124-0.003 0.247-0.003 0.373-0.005 1.096-0.023 2.197-0.005 3.303 0.067 0.1 0.007 0.2 0.018 0.299 0.025 1.134 0.084 2.272 0.212 3.411 0.399 0.060 0.010 0.12 0.023 0.18 0.033 1.181 0.2 2.364 0.451 3.545 0.768 1.189 0.319 2.347 0.695 3.478 1.116 0.053 0.020 0.109 0.037 0.162 0.057 1.089 0.411 2.147 0.874 3.179 1.373 0.085 0.042 0.174 0.080 0.261 0.122 1.002 0.494 1.973 1.036 2.917 1.61 0.102 0.062 0.205 0.12 0.306 0.182 0.924 0.573 1.814 1.188 2.678 1.831 0.107 0.079 0.214 0.157 0.319 0.237 0.849 0.646 1.664 1.33 2.449 2.041 0.102 0.094 0.205 0.184 0.307 0.279 0.777 0.718 1.52 1.468 2.233 2.245 0.090 0.099 0.182 0.199 0.272 0.297 0.707 0.788 1.38 1.604 2.018 2.446 0.075 0.1 0.15 0.2 0.226 0.302 0.636 0.857 1.236 1.737 1.799 2.643 0.058 0.094 0.115 0.189 0.174 0.284 0.563 0.924 1.089 1.871 1.572 2.838 0.040 0.080 0.077 0.16 0.117 0.241 0.486 0.992 0.934 2.005 1.333 3.039 0.022 0.055 0.042 0.112 0.062 0.167 0.406 1.062 0.768 2.143 1.079 3.241 0.007 0.023 0.012 0.047 0.018 0.070 1.597 5.69 1.896 11.814 0.646 17.943-0.155 0.763-0.327 1.525-0.531 2.287-5.474 20.418-26.467 32.537-46.89 27.067zM575.518 337.725h-15.938v-238.919h28.558v-58.644c-48.537-28.056-106.145-26.612-154.687 0v58.644h28.558v238.919h-15.933c-8.974 28.37-43.112 50.062-85.126 53.642v59.472c26.287-4.535 52.57-7.741 78.851-9.756-39.998 182.511-16.463 388.251 70.656 543.392 87.108-177.247 112.037-364.303 70.898-542.994 26.427 2.083 52.855 5.217 79.287 9.358v-59.472c-42.014-3.58-76.15-25.271-85.126-53.642zM549.076 441.773c0 21.14-17.141 38.281-38.284 38.281s-38.284-17.141-38.284-38.281c0-0.877 0.040-1.746 0.099-2.608v0c0.585-8.686 4.069-16.579 9.49-22.72 0.030-0.033 0.057-0.067 0.087-0.1 0.735-0.827 1.51-1.62 2.314-2.38 0.062-0.058 0.124-0.12 0.187-0.179 0.785-0.733 1.605-1.432 2.451-2.098 0.092-0.072 0.182-0.144 0.274-0.215 0.834-0.645 1.696-1.255 2.581-1.829 0.115-0.075 0.232-0.149 0.347-0.222 0.88-0.558 1.784-1.081 2.71-1.567 0.134-0.070 0.269-0.139 0.403-0.205 0.927-0.473 1.874-0.91 2.843-1.306 0.142-0.058 0.284-0.112 0.426-0.169 0.977-0.388 1.971-0.738 2.985-1.046 0.139-0.042 0.281-0.079 0.421-0.12 1.031-0.299 2.076-0.561 3.14-0.773 0.124-0.025 0.251-0.043 0.374-0.067 1.092-0.207 2.197-0.374 3.319-0.486 0.090-0.008 0.184-0.012 0.274-0.020 1.148-0.105 2.307-0.167 3.483-0.169 0.025 0 0.050-0.002 0.075-0.002s0.048 0.002 0.074 0.002c1.184 0.002 2.354 0.063 3.51 0.17 0.087 0.008 0.174 0.012 0.261 0.020 1.133 0.114 2.247 0.282 3.348 0.491 0.12 0.023 0.241 0.040 0.361 0.065 1.071 0.214 2.123 0.479 3.161 0.782 0.139 0.040 0.281 0.077 0.418 0.119 1.017 0.309 2.015 0.663 2.993 1.052 0.145 0.057 0.291 0.112 0.434 0.172 0.966 0.398 1.911 0.837 2.835 1.31 0.144 0.074 0.287 0.145 0.429 0.221 0.917 0.483 1.809 1.004 2.681 1.557 0.134 0.085 0.266 0.169 0.399 0.256 0.869 0.566 1.711 1.168 2.529 1.802 0.117 0.090 0.232 0.182 0.349 0.274 0.819 0.65 1.612 1.333 2.374 2.046 0.095 0.090 0.189 0.18 0.284 0.271 0.768 0.735 1.508 1.498 2.213 2.294 0.072 0.080 0.14 0.164 0.212 0.244 0.715 0.82 1.398 1.669 2.041 2.547 0.045 0.062 0.089 0.127 0.134 0.189 0.656 0.909 1.278 1.846 1.856 2.813 0.018 0.032 0.037 0.063 0.055 0.095 3.012 5.083 4.884 10.923 5.259 17.167v0c0.047 0.77 0.077 1.544 0.077 2.324zM346.51 430.795l-15.393-57.446c-41.51 7.415-80.098-4.702-96.109-29.783l-15.392 4.124-61.838-230.779 27.586-7.392-15.178-56.646c-53.776-13.142-109.795 0.374-149.417 40.036l15.178 56.646 27.585-7.392 61.838 230.781-15.393 4.124c-1.326 29.726-28.685 59.514-68.342 73.847l15.393 57.446c24.461-10.841 49.177-20.709 74.164-29.561 6.512 183.248 79.005 357.478 209.020 506.14 43.999-172.4 13.481-377.221-72.39-543.163 25.907-4.854 52.125-8.561 78.689-10.983zM236.405 450.911c5.472 20.42-6.648 41.413-27.072 46.885s-41.416-6.648-46.887-27.068c-0.202-0.753-0.373-1.508-0.528-2.263 0 0 0 0 0.002 0-1.258-6.142-0.959-12.281 0.645-17.983 0.005-0.015 0.008-0.030 0.012-0.047 0.312-1.104 0.677-2.19 1.084-3.257 0.020-0.052 0.037-0.104 0.057-0.154 0.401-1.037 0.85-2.053 1.338-3.050 0.037-0.077 0.074-0.152 0.112-0.229 0.484-0.972 1.012-1.921 1.577-2.848 0.057-0.092 0.112-0.184 0.169-0.276 0.563-0.907 1.164-1.789 1.801-2.648 0.074-0.1 0.149-0.199 0.224-0.299 0.638-0.842 1.311-1.659 2.020-2.447 0.090-0.1 0.18-0.199 0.271-0.297 0.712-0.778 1.457-1.528 2.233-2.247 0.1-0.094 0.204-0.184 0.306-0.276 0.787-0.712 1.602-1.395 2.451-2.041 0.105-0.080 0.214-0.157 0.319-0.237 0.864-0.645 1.754-1.258 2.678-1.831 0.1-0.062 0.204-0.12 0.306-0.182 0.944-0.575 1.914-1.114 2.917-1.61 0.085-0.042 0.174-0.080 0.261-0.122 1.031-0.499 2.090-0.962 3.179-1.373 0.053-0.020 0.11-0.037 0.164-0.057 1.131-0.421 2.289-0.797 3.476-1.116 1.181-0.316 2.362-0.568 3.545-0.768 0.060-0.010 0.12-0.023 0.18-0.033 1.139-0.187 2.277-0.316 3.411-0.399 0.1-0.007 0.2-0.018 0.299-0.025 1.106-0.074 2.207-0.090 3.303-0.067 0.124 0.003 0.249 0.002 0.373 0.005 1.079 0.033 2.15 0.117 3.212 0.241 0.132 0.015 0.266 0.028 0.398 0.045 1.056 0.134 2.101 0.314 3.135 0.536 0.13 0.028 0.261 0.055 0.389 0.084 1.036 0.232 2.058 0.508 3.067 0.824 0.119 0.037 0.236 0.075 0.354 0.114 1.016 0.329 2.018 0.7 3 1.111 0.097 0.040 0.192 0.082 0.289 0.124 0.999 0.428 1.98 0.895 2.938 1.407 0.067 0.035 0.134 0.074 0.2 0.109 0.981 0.53 1.939 1.099 2.872 1.714 0.032 0.022 0.063 0.043 0.095 0.065 6.831 4.529 12.241 11.254 15.056 19.498 0 0 0 0 0 0 0.282 0.819 0.545 1.645 0.772 2.492z" - ], - "isMulticolor": false, - "tags": [ - "daggers" - ], - "defaultCode": 59785, - "grid": 0, - "attrs": [] - }, - { - "id": 138, - "paths": [ - "M993.076 478.707c-16.698-43.153-44.059-75.743-78.937-98.788 33.438-17.846 62.22-43.362 83.677-77.378-40.116-31.996-85.897-49.732-133.898-55.329 18.769-25.002 31.229-55.548 34.727-92.536-54.163-5.456-116.387-3.166-173.178 11.296 1.36-32.055-11.279-67.028-43.409-103.691-51.708 13.18-99.143 39.814-131.725 75.828-26.23-39.849-72.301-72.39-129.579-87.989-38.254 29.459-58.916 62.693-65.431 95.924-44.132-23.995-97.12-34.231-156.331-28.869-3.095 37.13 2.701 69.184 15.165 96.502-56.105-0.742-112.977 14.867-165.482 49.17 25.506 31.35 54.745 56.322 86.597 75.29-39.824 17.304-73.969 44.059-98.321 81.257 46.28 23.594 94.886 38.616 143.467 44.426-24.728 27.471-42.111 62.128-48.698 104.922 55.075 6.988 114.381 4.873 168.298-8.994-1.36 32.138 9.39 67.076 35.842 103.456 58.072-15.323 113.544-45.32 150.099-85.067 38.666 101.77 5.133 228.076-69.092 339.43-61.767-148.844-206.273-85.241-266.714-164.595-13.342 129.054 17.037 242.847 196.568 252.607-0.307 0.327-0.61 0.656-0.919 0.984h121.148c304.039 7.287 332.229-147.508 296.055-301.851-31.878 53.943-108.399 59.452-176.106 89.217 10.783-41.399 15.203-83.537 12.589-125.59 3.338 1.739 6.717 3.391 10.131 4.953 43.74-30.687 64.834-64.721 69.405-98.506 53.342 19.606 114.217 27.539 166.593 27.177 5.648-37.941-0.027-69.988-13.711-96.861 54.902 1.567 110.368-7.544 161.171-26.393zM545.431 383.699c-0.732 4.908-1.26 9.712-1.619 14.425-6.562-2.862-13.228-5.508-19.981-7.891-5.192 4.866-9.861 9.901-14.085 15.061-2.933-5.357-6.187-10.749-9.837-16.175-7.547 1.423-14.991 3.079-22.324 4.933 0.945-4.375 1.789-8.828 2.492-13.387-7.407-0.939-14.892-1.706-22.429-2.309 4.056-3.632 8.063-7.37 12.011-11.236-5.33-2.877-10.734-5.629-16.189-8.287 6.004-2.111 11.994-4.335 17.963-6.7-3.13-4.141-6.329-8.195-9.587-12.168 7.716 0.117 15.425 0.040 23.096-0.254-0.945-4.925-1.98-9.772-3.090-14.551 7.97 3.024 16.204 5.718 24.693 8.027 5.868-4.525 11.309-9.142 16.362-13.832 2.282 4.95 4.778 9.931 7.557 14.947 7.242-1.732 14.481-3.71 21.688-5.897-0.772 4.677-1.402 9.457-1.866 14.358 7.925 0.795 16.028 1.415 24.255 1.864-4.667 3.797-9.284 7.677-13.837 11.66 5.508 3.040 11.095 5.954 16.738 8.765-6.172 1.98-12.346 4.051-18.516 6.224 3.187 4.388 6.475 8.656 9.851 12.818-7.926-0.309-15.731-0.444-23.347-0.394z" - ], - "isMulticolor": false, - "tags": [ - "daisy" - ], - "defaultCode": 59786, - "grid": 0, - "attrs": [] - }, - { - "id": 139, - "paths": [ - "M643.621 536.026l123.886 34.416-76.11-48.425 36.175-91.119-64.068 73.373-28.382-18.057-75.939 90.741c-33.965-48.213-3.991-136.691 42.441-221.212l56.328-57.996 82.774 51.777 26.704 114.199 159.014 43.733-126.239-70.464-25.49-111.769-89.168-55.89 47.908-49.327 84.795-67.894-104.278 36.335-10.824-4.179 80.621-157.724-115.754 144.162-87.517-33.785v-117.842l-38.842 144.567 139.593 53.455-78.439 81.443c-30.882 16.816-53.907 16.291-74.22 4.171l-10.248-22.149 83.378-66.758-98.402 34.287-59.58-128.777 28.729-62.577-63.118 44.946-182.079-40.089 180.954 75.464 22.975 49.669-124.091 26.411-66.433-82.967 31.501 90.402-52.186 11.107-118.956-76.538 52.524 59.904-79.575 63.718 103.746-36.15 27.695 31.586 160.576-33.75-6.421 87.203 41.482-94.572 47.131-9.906 46.642 100.832c3.757 19.878 5.379 38.182 4.518 54.152l-90.064-35.141 82.087 70.831c-12.138 25.792-38.332 36.38-82.265 23.187l-150.281-99.67-55.796 37.006-32.685-74.517 6.754 91.715-19.022 12.615-129.88-98.399 122.6 149.431 108.034-71.68c21.732 14.935 43.572 29.711 65.456 44.416l-24.187 83.152-97.177 40.351 127.521-7.548 27.036-93.743c11.374 7.563 22.758 15.112 34.167 22.623 98.728 151.265 113.719 377.379 3.881 352.201 18.115 77.017-48.375 135.355-109.32 161.582h384.919c-137.77-75.144-169.307-222.1-99.83-363.865l72.322-86.68z" - ], - "isMulticolor": false, - "tags": [ - "dead-tree" - ], - "defaultCode": 59787, - "grid": 0, - "attrs": [] - }, - { - "id": 140, - "paths": [ - "M821.223 705.050c34.405 17.729 54.944 38.438 54.944 60.789 0 64.156-164.351 116.9-365.897 116.9s-364.728-52.749-364.728-116.9c0-22.471 20.188-43.001 54.944-60.789h-0.005c-100.142 27.212-164.829 67.517-164.829 112.226 0 81.902 212.698 148.463 474.616 148.463s474.616-66.56 474.616-148.463c0-44.55-64.136-85.019-163.661-112.226zM277.487 650.004c11.459 12.873 25.313 24.347 40.98 34.368l-34.295 56.544c94.295 77.156 302.406 87.356 422.713-0.971l-35.359-45.333c22.419-12.218 42.512-27.417 59.145-45.759-61.124-57.073-37.064-118.632 121.676-193.052v-0.017c0-195.736-92.457-434.415-344.044-434.415-249.458 0-344.044 227.665-344.044 434.415 149.711 70.213 164.817 145.796 113.228 194.219zM501.122 503.544h0.003c0 0.002-0.002 0.002-0.002 0.003 24.163 43.564 43.335 87.124 52.85 130.686-25.989 19.362-72.52 22.176-105.701 0 12.864-43.564 28.331-87.124 52.85-130.686 0-0.002-0.002-0.002-0.002-0.003zM689.262 318.596c63.281 11.62 72.55 59.823 62.87 120.854l-0.003 0.005c-62.048 42.012-128.426 78.217-207.082 38.027l-2.217-67.066c85.274 3.545 131.062-31.139 146.432-91.819zM648.082 291.994c-51.649 75.056-247.432 75.12-291.028-0.409 92.23 21.699 189.647 21.367 291.028 0.409zM253.623 439.45c-9.68-61.031-0.411-109.234 62.87-120.854 15.37 60.68 61.158 95.362 146.432 91.819l-2.217 67.066c-78.651 40.19-145.032 3.986-207.082-38.027l-0.003-0.005z" - ], - "isMulticolor": false, - "tags": [ - "death-skull" - ], - "defaultCode": 59788, - "grid": 0, - "attrs": [] - }, - { - "id": 141, - "paths": [ - "M667.583 222.113c51.628-51.851 62.756-124.739 24.862-162.799s-110.465-26.883-162.093 24.97c-51.624 51.85-62.756 124.739-24.862 162.799s110.465 26.881 162.093-24.97zM791.45 124.45c326.252 295.467-483.602 249.876-739.311-57.912 61.953 89.287 150.596 159.348 248.805 211.729l-62.995-14.558c60.316 38.162 128.87 70.106 200.819 94.788-115.542 54.11-117.199 228.962-119.9 356.628h81.795l21.703 289.797h207.84l19.2-289.797h77.625c6.127-112.904 1.066-231.745-57.204-304.308 70.94 8.007 140.358 8.274 203.955-0.172l-52.797-12.201c184.773-13.937 251.274-112.109-29.536-273.993z" - ], - "isMulticolor": false, - "tags": [ - "decapitation" - ], - "defaultCode": 59789, - "grid": 0, - "attrs": [] - }, - { - "id": 142, - "paths": [ - "M728.604 469.709c4.071-107.338-160.948-175.107-211.012-35.868-50.064-139.239-215.083-71.47-211.012 35.868 3.822 100.689 165.86 143.734 211.012 241.696 45.153-97.962 207.195-141.005 211.012-241.696zM125.229 378.94l154.517 66.724c3.102-18.113 10.519-34.756 20.946-49.165l-65.845-31.552c58.542-86.626 122.897-142.862 193.511-170.034-78.935-61.5-126.184-100.030-156.196-177.473h-132.94c115.203 86.764 155.658 148.622 136.501 209.001-78.437-60.992-161.508-94.801-245.247-124.702l-12.188 71.48c79.869 18.427 158.809 42.278 232.244 98.436-26.063 33.219-68.618 67.724-125.304 107.286zM243.007 687.961l-222.734-129.442v101.902c246.852 12.485 321.038 234.698 0 275.924v81.629l296.197-141.1c-91.926-108.988-8.342-200.141 86.195-253.974-11.616-8.778-23.24-17.458-34.467-26.205l-125.19 91.265zM1015.242 1010.984l-165.759-200.34c-133.645 89.004-224.358-12.64-236.238-180.715-15.711 11.997-31.193 24.265-45.439 37.213l31.34 236.557c109.804-63.526 307.431 33.027 281.344 107.284h134.752zM987.201 697.255l0.002 0.002 10.292-88.508-170.442 36.605c-10.025-48.252-11.232-83.266 44.191-131.518-43.633-6.692-87.030-11.899-130.153-14.124-6.981 19.89-19.666 37.756-35.713 54.553 73.26 30.847 96.231 83.373 52.578 160.287l229.246-17.296zM716.765 386.826c10.763 12.211 19.234 26.462 24.456 42.138 66.617-20.452 129.086-47.167 187.853-79.474l-188.439-111.821c80.051-55.794 165.906-77.834 262.587-102.089 19.735-124.853-46.172-122.92-150.638-110.179-33.481 85.014-133.173 163.68-259.717 238.936 77.485 6.934 267.448 55.045 123.899 122.491z" - ], - "isMulticolor": false, - "tags": [ - "defibrilate" - ], - "defaultCode": 59790, - "grid": 0, - "attrs": [] - }, - { - "id": 143, - "paths": [ - "M990.519 983.643l-168.424-103.421 109.326-153.647-199.914 51.429-64.068-181.143-114.863 142.729-105.736-320.313-88.644 289.57-177.286-141.827 73.868 215.698-195.016 8.865 97.509 97.507-100.464 94.557h209.579l56.175-52.972-33.961-74.395 113.031 41.132 57.25-167.612 65.356 185.989 114.038-85.971 4.101 110.928 127.711-14.239-40.654 57.137zM351.616 676.152l7.459 5.967 88.644-289.57 105.736 320.313 114.862-142.729 39.184 110.786v-336.153l106.576-132.118v-168.466h-97.673v79.461h-59.452v-79.461h-98.735v79.461h-58.391v-79.461h-98.735v79.461h-58.388v-79.461h-97.669v168.466l106.583 132.126z" - ], - "isMulticolor": false, - "tags": [ - "demolish" - ], - "defaultCode": 59791, - "grid": 0, - "attrs": [] - }, - { - "id": 144, - "paths": [ - "M992.694 873.28c-121.066 15.696-228.284 10.581-321.564-12.599 110.838-93.161 190.167-232.294 213.358-390.976 2.997-5.984 5.559-12.442 7.612-19.277 29.442 14.705 55.61 36.117 75.52 63.49l17.747-115.219-91.625-14.281c-1.644-5.964-3.785-11.545-6.393-16.626 5.733-86.534-3.906-180.682-37.898-256.834 17.081-9.176 26.604-24.244 22.371-38.237-3.924-12.97-18.607-21.506-36.637-22.991 0.359-2.17 0.167-4.335-0.685-6.381-3.528-8.478-16.812-11.725-29.666-7.257s-20.417 14.964-16.887 23.442c0.307 0.737 0.712 1.418 1.159 2.075-13.325 9.229-20.236 22.356-16.516 34.657 4.243 14.027 21.070 22.869 41.107 23.213 11.561 74.149 12.512 158.129-3.891 231.379-5.908 4.859-11.379 10.922-16.207 17.953l-106.446-16.591-17.747 115.219c31.487-23.173 67.51-35.932 104.032-39.325-0.545 7.156-0.458 14.141 0.195 20.837-47.54 153.339-134.675 273.388-260.788 347.868-125.199-73.885-212.036-192.624-259.879-344.181 1.031-7.851 1.273-16.137 0.615-24.671 37.113 3.146 73.778 15.933 105.763 39.472l-17.747-115.219-108.003 16.833c-5.038-7.382-10.788-13.696-17.005-18.696-16.287-73.13-15.308-156.898-3.774-230.876 21.011 0.301 38.944-8.668 43.344-23.215 3.541-11.708-2.551-24.165-14.635-33.296 0.932-1.027 1.704-2.165 2.233-3.436 3.528-8.478-4.033-18.973-16.887-23.442s-26.138-1.221-29.666 7.257c-0.829 1.99-1.024 4.091-0.705 6.199-19.357 0.755-35.436 9.505-39.572 23.173-4.084 13.499 4.634 27.999 20.589 37.245-34.475 76.59-44.181 171.568-38.294 258.726-2.442 4.918-4.455 10.288-6.012 16.006l-89.825 14 17.747 115.219c19.575-26.911 45.198-48.060 74.034-62.74 1.276 4.156 2.743 8.169 4.382 12.017 21.98 161.461 102.129 303.186 214.691 397.618-93.187 23.104-200.321 28.146-321.275 12.465 163.457 118.029 334.065 133.194 479.728 79.959 145.807 53.238 316.538 38.075 480-79.957z" - ], - "isMulticolor": false, - "tags": [ - "dervish-swords" - ], - "defaultCode": 59792, - "grid": 0, - "attrs": [] - }, - { - "id": 145, - "paths": [ - "M949.597 181.519c-15.869 198.163-154.828 157.161-154.828 20.278h-0.005c0-108.11-114.959-147.874-150.79-28.323-80.909-82.708-187.033-81.27-267.095 4.265-33.852-126.433-152.392-87.145-152.392 22.64 0 136.884-138.958 177.887-154.828-20.278-74.229 84.194-64.978 179.118 2.471 246.563 48.599 48.596 129.271 51.444 196.64 17.834-5.214 38.93-8.052 81.253-8.052 127.028 86.305 87.037 114.9 207.135 114.9 366.944 24.479 23.228 49.767 39.401 75.505 48.721 9.916-73.371 1.179-144.078-1.138-215.703l56.044 82.286 59.050-83.301c-1.473 71.673-7.532 143.342-1.48 215.015 25.323-9.614 50.59-25.336 75.482-47.017 0-154.784 16.588-281.834 125.043-366.944 0-44.060-2.619-84.93-7.459-122.646 66.064 30.429 143.338 26.32 190.461-20.797 67.449-67.445 76.7-162.37 2.471-246.563zM378.967 620.736c-30.553 0-58.071-44.029-61.465-98.344s18.619-98.344 49.172-98.344c30.553 0 58.071 44.029 61.465 98.344 3.394 54.317-18.619 98.344-49.172 98.344zM697.559 522.394c-3.394 54.315-30.912 98.344-61.465 98.344s-52.566-44.029-49.172-98.344 30.912-98.344 61.465-98.344c30.553 0 52.568 44.029 49.172 98.344z" - ], - "isMulticolor": false, - "tags": [ - "desert-skull" - ], - "defaultCode": 59793, - "grid": 0, - "attrs": [] - }, - { - "id": 146, - "paths": [ - "M854.688 189.278h-687.528l-145.385 195.843 491.002 538.081 491.002-538.081-149.091-195.843zM512.778 917.472l-192.666-528.745 192.664-196.661 192.664 196.661-192.662 528.745zM305.311 378.295l-148.246-195.664zM716.815 378.295l145.914-195.664zM305.311 388.373h411.504v18.375h-411.504v-18.375z" - ], - "isMulticolor": false, - "tags": [ - "diamond" - ], - "defaultCode": 59794, - "grid": 0, - "attrs": [] - }, - { - "id": 147, - "paths": [ - "M914.086 250.29l-370.803-214.083c-48.285-27.877-110.031-11.332-137.909 36.953l-328.213 568.484c-27.879 48.285-11.332 110.031 36.953 137.909l370.803 214.083c48.285 27.879 110.031 11.332 137.909-36.953l328.213-568.484c27.879-48.285 11.332-110.031-36.953-137.909zM472.67 120.643c12.213-21.152 39.261-28.401 60.416-16.189s28.401 39.263 16.189 60.414c-12.213 21.153-39.261 28.401-60.416 16.189s-28.401-39.263-16.189-60.414zM656.032 411.304c0.002 0.003 0.002 0.007 0.003 0.008l25.346 161.697c0 0.002 0 0.003-0.002 0.005l2.634 16.795-260.524 98.317-43.113-275.057 260.514-98.371 15.141 96.605zM553.324 913.044c-12.213 21.153-39.261 28.401-60.416 16.189s-28.401-39.261-16.189-60.414c12.213-21.153 39.261-28.401 60.416-16.189s28.401 39.261 16.189 60.414z" - ], - "isMulticolor": false, - "tags": [ - "diamonds-card" - ], - "defaultCode": 59795, - "grid": 0, - "attrs": [] - }, - { - "id": 148, - "paths": [ - "M513.589 174.017l273.191 336.029-273.191 336.027-273.189-336.029 273.189-336.027z" - ], - "isMulticolor": false, - "tags": [ - "diamonds" - ], - "defaultCode": 59796, - "grid": 0, - "attrs": [] - }, - { - "id": 149, - "paths": [ - "M873.572 71.87h-724.815c-42.457 0-76.875 34.418-76.875 76.875v724.815c0 42.457 34.418 76.875 76.875 76.875h724.815c42.457 0 76.875-34.418 76.875-76.875v-724.815c0-42.457-34.418-76.875-76.875-76.875zM243.602 878.552c-55.139 0-99.837-44.699-99.837-99.837s44.699-99.837 99.837-99.837 99.837 44.699 99.837 99.837-44.699 99.837-99.837 99.837zM243.602 343.426c-55.139 0-99.837-44.699-99.837-99.837s44.699-99.837 99.837-99.837 99.837 44.699 99.837 99.837-44.699 99.837-99.837 99.837zM511.166 610.989c-55.139 0-99.837-44.699-99.837-99.837s44.699-99.837 99.837-99.837 99.837 44.699 99.837 99.837-44.699 99.837-99.837 99.837zM778.728 878.552c-55.139 0-99.837-44.699-99.837-99.837s44.699-99.837 99.837-99.837 99.837 44.699 99.837 99.837c-0.002 55.139-44.7 99.837-99.837 99.837zM778.728 343.426c-55.139 0-99.837-44.699-99.837-99.837s44.699-99.837 99.837-99.837 99.837 44.699 99.837 99.837c-0.002 55.139-44.7 99.837-99.837 99.837z" - ], - "isMulticolor": false, - "tags": [ - "dice-five" - ], - "defaultCode": 59797, - "grid": 0, - "attrs": [] - }, - { - "id": 150, - "paths": [ - "M873.572 71.87h-724.815c-42.457 0-76.875 34.418-76.875 76.875v724.815c0 42.457 34.418 76.875 76.875 76.875h724.815c42.457 0 76.875-34.418 76.875-76.875v-724.815c0-42.457-34.418-76.875-76.875-76.875zM243.602 878.552c-55.139 0-99.837-44.699-99.837-99.837s44.699-99.837 99.837-99.837 99.837 44.699 99.837 99.837-44.699 99.837-99.837 99.837zM243.602 343.426c-55.139 0-99.837-44.699-99.837-99.837s44.699-99.837 99.837-99.837 99.837 44.699 99.837 99.837-44.699 99.837-99.837 99.837zM778.728 878.552c-55.139 0-99.837-44.699-99.837-99.837s44.699-99.837 99.837-99.837 99.837 44.699 99.837 99.837c-0.002 55.139-44.7 99.837-99.837 99.837zM778.728 343.426c-55.139 0-99.837-44.699-99.837-99.837s44.699-99.837 99.837-99.837 99.837 44.699 99.837 99.837c-0.002 55.139-44.7 99.837-99.837 99.837z" - ], - "isMulticolor": false, - "tags": [ - "dice-four" - ], - "defaultCode": 59798, - "grid": 0, - "attrs": [] - }, - { - "id": 151, - "paths": [ - "M873.572 71.87h-724.815c-42.457 0-76.875 34.418-76.875 76.875v724.815c0 42.457 34.418 76.875 76.875 76.875h724.815c42.457 0 76.875-34.418 76.875-76.875v-724.815c0-42.457-34.418-76.875-76.875-76.875zM511.166 610.989c-55.139 0-99.837-44.699-99.837-99.837s44.699-99.837 99.837-99.837 99.837 44.699 99.837 99.837-44.699 99.837-99.837 99.837z" - ], - "isMulticolor": false, - "tags": [ - "dice-one" - ], - "defaultCode": 59799, - "grid": 0, - "attrs": [] - }, - { - "id": 152, - "paths": [ - "M873.572 71.87h-724.815c-42.457 0-76.875 34.418-76.875 76.875v724.815c0 42.457 34.418 76.875 76.875 76.875h724.815c42.457 0 76.875-34.418 76.875-76.875v-724.815c0-42.457-34.418-76.875-76.875-76.875zM778.728 143.751c55.139 0 99.837 44.699 99.837 99.837s-44.699 99.837-99.837 99.837-99.837-44.699-99.837-99.837 44.699-99.837 99.837-99.837zM243.602 143.751c55.139 0 99.837 44.699 99.837 99.837s-44.699 99.837-99.837 99.837-99.837-44.699-99.837-99.837c0.002-55.139 44.699-99.837 99.837-99.837zM243.602 878.552c-55.139 0-99.837-44.699-99.837-99.837s44.699-99.837 99.837-99.837 99.837 44.699 99.837 99.837-44.699 99.837-99.837 99.837zM243.603 610.989c-55.139 0-99.837-44.699-99.837-99.837s44.699-99.837 99.837-99.837 99.837 44.699 99.837 99.837-44.699 99.837-99.837 99.837zM778.728 878.552c-55.139 0-99.837-44.699-99.837-99.837s44.699-99.837 99.837-99.837 99.837 44.699 99.837 99.837c-0.002 55.139-44.7 99.837-99.837 99.837zM778.729 610.989c-55.139 0-99.837-44.699-99.837-99.837s44.699-99.837 99.837-99.837 99.837 44.699 99.837 99.837-44.699 99.837-99.837 99.837z" - ], - "isMulticolor": false, - "tags": [ - "dice-six" - ], - "defaultCode": 59800, - "grid": 0, - "attrs": [] - }, - { - "id": 153, - "paths": [ - "M873.572 71.87h-724.815c-42.457 0-76.875 34.418-76.875 76.875v724.815c0 42.457 34.418 76.875 76.875 76.875h724.815c42.457 0 76.875-34.418 76.875-76.875v-724.815c0-42.457-34.418-76.875-76.875-76.875zM243.602 878.552c-55.139 0-99.837-44.699-99.837-99.837s44.699-99.837 99.837-99.837 99.837 44.699 99.837 99.837-44.699 99.837-99.837 99.837zM511.166 610.989c-55.139 0-99.837-44.699-99.837-99.837s44.699-99.837 99.837-99.837 99.837 44.699 99.837 99.837-44.699 99.837-99.837 99.837zM778.728 343.426c-55.139 0-99.837-44.699-99.837-99.837s44.699-99.837 99.837-99.837 99.837 44.699 99.837 99.837c-0.002 55.139-44.7 99.837-99.837 99.837z" - ], - "isMulticolor": false, - "tags": [ - "dice-three" - ], - "defaultCode": 59801, - "grid": 0, - "attrs": [] - }, - { - "id": 154, - "paths": [ - "M873.572 71.87h-724.815c-42.457 0-76.875 34.418-76.875 76.875v724.815c0 42.457 34.418 76.875 76.875 76.875h724.815c42.457 0 76.875-34.418 76.875-76.875v-724.815c0-42.457-34.418-76.875-76.875-76.875zM243.602 878.552c-55.139 0-99.837-44.699-99.837-99.837s44.699-99.837 99.837-99.837 99.837 44.699 99.837 99.837-44.699 99.837-99.837 99.837zM778.728 343.426c-55.139 0-99.837-44.699-99.837-99.837s44.699-99.837 99.837-99.837 99.837 44.699 99.837 99.837c-0.002 55.139-44.7 99.837-99.837 99.837z" - ], - "isMulticolor": false, - "tags": [ - "dice-two" - ], - "defaultCode": 59802, - "grid": 0, - "attrs": [] - }, - { - "id": 155, - "paths": [ - "M968.437 317.635c-50.796-45.739-104.346-86.532-158.545-120.927-13.13-49.793-121.893-153.946-187.225-95.571-46.959-69.649-144.765-70.713-213.219-41.227-208.744-16.083-327.309 78.469-372.352 250.452v679.308h377.95c-10.554-111.105 11.334-232.647 57.207-313.685 76.725 19.366 167.173 37.724 270.060 59.288 81.584 17.097 113.337-36.034 134.45-130.357l-63.927 43.232-20.029-88.66-91.184 61.666-21.532-95.316-86.367 58.406-21.349-94.499-87.451 59.136-29.953-132.584 141.427-95.643 21.349 94.499 87.451-59.14 21.532 95.316 86.367-58.406 20.029 88.66 91.184-61.666 15.377 68.065c41.633-53.878 70.324-132.915 28.751-170.348z" - ], - "isMulticolor": false, - "tags": [ - "dinosaur" - ], - "defaultCode": 59803, - "grid": 0, - "attrs": [] - }, - { - "id": 156, - "paths": [ - "M587.036 986.281l408.685-59.153-172.077-381.797c-3.259 68.317-11.979 132.836-29.34 191.343l-155.326-197.515c-2.056 43.148-7.16 84.25-16.88 122.249l-161.44-144.688c-2.721 23.913-6.714 46.929-12.453 68.718l-91.722-57.235 635.249-487.808h-181.133l-568.542 500.895 185.033 101.707c-3.471 7.016-7.257 13.81-11.354 20.386l-280.214-101.645 500.507-521.343h-161.404l-437.998 535.368 348.661 125.954c-16.406 16.28-36.050 30.284-59.633 41.52l226.443 54.043c-21.882 23.729-48.82 44.062-81.838 60.307l250.703 24.743c-33.702 42.261-77.477 77.517-133.927 103.952z" - ], - "isMulticolor": false, - "tags": [ - "divert" - ], - "defaultCode": 59804, - "grid": 0, - "attrs": [] - }, - { - "id": 157, - "paths": [ - "M670.762 535.301c29.666-46.463 51.232-98.366 62.972-156.261-11.306 2.258-22.388 4.908-33.289 7.856l-370.050-370.067-131.501 0.008 406.874 406.896c-24.66 12.923-47.762 27.975-69.107 45.098-26.622-31.517-54.895-56.089-90.127-77.326l-3.379-3.379c13.362-34.106-29.494-75.313-72.747-72.749l-296.456-296.471h-57.907v59.554l292.832 292.854c-7.524 42.036 30.391 82.73 69.832 74.714 21.826 37.936 53.585 67.153 86.814 95.103-15.981 20.744-30.028 43.223-42.129 67.126l-405.666-405.683v130.706l369.833 369.848c-2.654 10.001-5.063 20.133-7.163 30.414 55.064-11.433 105.5-31.968 150.429-59.472 137.278 137.284 239.299 210.186 423.308 275.207-49.668-185.369-137.176-267.773-283.372-413.977zM537.677 566.451l33.204-35.65c87.382 82.887 217.988 224.791 281.924 316.486-90.768-63.445-232.451-193.778-315.128-280.837z" - ], - "isMulticolor": false, - "tags": [ - "diving-dagger" - ], - "defaultCode": 59805, - "grid": 0, - "attrs": [] - }, - { - "id": 158, - "paths": [ - "M495.168 44.294c-59.218 7.689-105.454 72.054-105.454 149.735 0 43.023 14.754 81.442 37.474 108.823-123.154 23.149-132.47 230.507-132.47 376.082h85.405l22.658 303.822h217.004l20.046-303.822h81.051c0-145.976 2.933-356.982-131.595-377.823 21.745-27.249 35.731-65.117 35.731-107.079 0-82.859-52.802-149.735-117.653-149.735-4.053 0-8.254-0.525-12.203 0l0.005-0.003zM677.226 43.364c64.853 0 117.777 66.41 117.777 149.265 0 41.967-14.403 80.039-36.152 107.284 134.528 20.844 131.77 231.85 131.77 377.826h-80.46l-20.991 304.36h-125.942l19.822-304.36h81.629c0-145.976 2.758-356.982-131.77-377.826 21.745-27.245 36.152-65.317 36.152-107.284 0-53.173-22.089-99.381-54.81-125.942 15.103-12.44 31.376-20.881 50.146-23.323 3.946-0.523 8.773 0 12.829 0zM401.351 66.687c-32.547 26.821-54.81 72.883-54.81 125.942 0 43.028 14.595 82.239 37.317 109.621-123.154 23.149-131.775 229.919-131.77 375.489h85.126l22.159 304.36h-125.942l-22.159-304.36h-86.295c0-145.57 9.784-352.34 132.94-375.489-22.722-27.377-37.317-66.592-37.317-109.621 0-77.675 45.734-141.571 104.952-149.265 3.947-0.525 8.773 0 12.829 0 23.233 0 44.705 8.496 62.97 23.323z" - ], - "isMulticolor": false, - "tags": [ - "double-team" - ], - "defaultCode": 59806, - "grid": 0, - "attrs": [] - }, - { - "id": 159, - "paths": [ - "M609.661 31.992c-523.369 0-641.431 775.304-124.687 775.304 172.574 0 173.904-258.761 0-258.761-279.893 0.025-198.249-405.76 124.687-516.543zM547.794 216.688c-172.574 0-173.904 258.761 0 258.761 279.893 0 176.715 405.785-146.246 516.568 523.369-0.025 662.965-775.329 146.246-775.329v0z" - ], - "isMulticolor": false, - "tags": [ - "doubled" - ], - "defaultCode": 59807, - "grid": 0, - "attrs": [] - }, - { - "id": 160, - "paths": [ - "M30.603 25.937v122.441c153.142 108.208 315.18 294.666 129.442 250.72 114.045 109.956 207.904 53.485 347.507 270.543 60.74 94.44 14.919 160.816-59.474 180.752-95.605 25.618-228.334-60.795-115.448-108.447-118.4-2.893-133.693 95.798-77.33 160.213-55.769-19.241-91.869-68.506-85.927-121.014-71.967 96.4-10.706 186.264 108.449 204.526h713.673v-688.018c-31.45-140.387-189.44-175.241-206.404-6.998 29.17-72.726 101.754-41.181 167.923 37.317-22.525-14.971-48.399-22.947-72.3-22.159-39.395 1.298-74.595 24.133-82.797 73.469 111.624-92.075 168.982 69.323 123.281 153.503-49.408 91.016-189.47-40.87-189.749-151.171-55.859 62.367-15.602 216.239 104.568 244.694-227.737-24.726-151.646-261.078-245.668-311.161 57.359 254.856-347.29-190.845-458.291-289.199l-101.455-0.012z" - ], - "isMulticolor": false, - "tags": [ - "dragon-breath" - ], - "defaultCode": 59808, - "grid": 0, - "attrs": [] - }, - { - "id": 161, - "paths": [ - "M794.716 998.639l207.743-1.492-0.261-104.932c-165.594-243.627-154.985-436.059-112.478-616.466-261.407-221.856-562.762-232.857-843.272-236.1 80.682 92.892 77.767 190.511 23.617 278.677 122.554 39.231 129.532 210.612 80.296 311.744 151.303-42.57 298.652 89.424 207.825 240.891 183.999-154.686 453.28-87.436 436.521 127.681l0.007-0.002z" - ], - "isMulticolor": false, - "tags": [ - "dragon-wing" - ], - "defaultCode": 59809, - "grid": 0, - "attrs": [] - }, - { - "id": 162, - "paths": [ - "M947.783 467.489h0.003c-93.301-8.869-163.123-61.255-186.286-135.061-13.302-42.383-65.995-73.003-126.619-91.545-65.199-162.111-109.326-250.379-313.798-227.226 73.446 57.456 132.275 134.565 162.405 205.264-58.983-16.919-114.331-25.867-165.831-28.071-112.261-24.598-238.191 26.145-275.205 145.827v643.64h424.77c-278.259-100.75-351.404-609.068-59.526-511.926-5.13 15.18-10.32 29.689-15.251 43.102 65.576 170.198 227.169 320.856 338.435 335.845 13.25 0.476 33.805-5.442 57.585-16.713-4.437-1.395-8.73-3.252-12.831-5.618-24.862-14.338-37.317-43.791-36.491-77.892-23.495 12.336-48.34 14.294-68.134 2.878-29.285-16.89-38.718-57.977-26.327-100.496-22.635 5.533-44.186 1.838-58.279-12.241-17.722-17.704-19.040-47.176-6.177-75.779-7.342-1.226-13.902-4.323-19.020-9.435-17.583-17.565-11.525-52.094 13.531-77.124s59.624-31.081 77.208-13.516c7.716 7.708 10.876 18.683 9.881 30.687 22.331-5.24 43.526-1.462 57.448 12.445 12.285 12.271 16.671 30.204 13.932 49.578 17.072-4.5 33.914-3.224 48.143 4.983 18.653 10.758 29.25 31.335 31.291 55.841 30.374-20.231 64.2-25.408 90.376-10.31 30.887 17.812 42.654 58.939 33.551 103.342 47.911-66.6 69.069-151.196 11.219-240.478z" - ], - "isMulticolor": false, - "tags": [ - "dragon" - ], - "defaultCode": 59810, - "grid": 0, - "attrs": [] - }, - { - "id": 163, - "paths": [ - "M876.741 630.764c-96.146-71.094-164.009-101.14-249.864-133.579 8.329-19.097 12.49-38.070 12.129-55.273 11.847 1.537 23.951 0.583 35.467-2.887 2.152 5.751 5.529 11.147 10.153 15.773 17.303 17.303 45.355 17.299 62.656-0.002 17.303-17.303 17.304-45.355 0.002-62.659-4.697-4.697-10.192-8.108-16.043-10.255 8.461-28.782 1.341-61.171-21.365-83.878-22.698-22.698-55.067-29.82-83.838-21.377-2.066-6.617-5.708-12.846-10.95-18.086-17.303-17.303-45.353-17.301-62.656 0.002s-17.304 45.357-0.002 62.659c4.941 4.941 10.76 8.464 16.952 10.582-4.377 13.534-5.275 27.942-2.668 41.832-16.376 0.314-34.193 4.572-52.1 12.495-30.072-77.777-60.675-142.764-126.826-232.233-97.664-132.083-211.143-126.211-149.537 44.573 0.277 0.768 0.568 1.554 0.849 2.327-107.901-73.284-183.939-30.683-91.836 110.792 59.973 92.127 167.408 220.885 249.874 233.094-0.068 14.882 3.159 28.518 9.934 39.871-98.526 76.576-287.388 229.027-354.87 266.651-28.181 93.45-5.090 158.516 114.128 114.135 35.568-68.558 191.849-259.58 269.796-355.696 12.527 5.269 27.172 6.922 42.836 5.24-0.267 83.813 137.168 199.393 234.047 262.475 146.365 95.287 186.901 10.599 102.766-103.145 5.574 2.137 11.054 4.18 16.392 6.106 170.772 61.604 176.648-51.877 44.573-149.539z" - ], - "isMulticolor": false, - "tags": [ - "dragonfly" - ], - "defaultCode": 59811, - "grid": 0, - "attrs": [] - }, - { - "id": 164, - "paths": [ - "M984.211 468.656l-54.050 108.562-59.601-315.597 1.473 260.525-141.989-295.899 73.796 314.026 173.838 361.5-23.061-184.5zM295.375 685.848l296.13 199.077-296.135-29.925 289.047 72.372-105.602 39.605 229.712-10.071 203.414 25.431zM109.115 634.967l93.152 107.976 143.555 27.969zM138.307 157.207c-37.746 40.257-60.037 92.217-69.315 144.095l766.829 568.694-761.079-434.412c10.228 33.431 27.407 59.808 50.31 73.030h0.002l820.022 437.071-437.073-820.027c-30.017-112.022-259.433-86.056-369.696 31.549z" - ], - "isMulticolor": false, - "tags": [ - "drill" - ], - "defaultCode": 59812, - "grid": 0, - "attrs": [] - }, - { - "id": 165, - "paths": [ - "M1006.138 557.861c-81.88-91.093-165.546-172.346-248.384-244.888-130.578-114.344-258.579-205.508-374.326-278.707h-146.983c121.363 73.476 275.227 185.048 379.296 304.738-175.791-43.043-402.36-132.083-580.987-208.97v122.3c0.341 0.149 0.683 0.296 1.024 0.444l-9.331-2.935c347.418 152.18 713.198 264.434 979.575 308.090l-0.631-0.199c0.249 0.042 0.501 0.085 0.748 0.125zM119.025 578.256c-5.959 22.296-38.043 80.904-38.043 107.435 0 35.96 28.876 65.222 64.818 64.333 35.944-0.889 64.814-32.215 64.818-68.174 0-26.689-33.349-83.348-39.455-105.414-24.219-87.553 23.993-213.919 84.362-223.486-64.629-24.755-129.492-51.061-193.857-78.728 44.769 46.023 79.513 221.129 57.357 304.033zM495.574 821.732c-6.478 23.632-41.015 86.592-41.010 114.924 0.002 38.17 29.729 67.676 67.881 67.374s69.296-30.286 69.296-68.456c0-28.157-31.771-91.316-39.6-114.287-29.457-86.457-7.93-287.066 42.425-281.877 43.97 4.524 50.6 98.094 32.529 159.617-4.161 14.162-24.040 51.035-24.043 68.099 0.002 22.994 18.028 40.888 41.010 40.706 22.982-0.187 41.010-18.36 41.015-41.354 0-16.964-17.911-53.894-22.628-67.733-18.526-54.379 13.441-178.602 56.99-193.539-105.268-28.395-217.155-63.279-331.434-103.544 111.347 76.703 133.432 325.736 107.568 420.072zM947.751 558.533c-63.303-12.169-131.214-27.767-202.376-46.432 49.675 39.151 69.772 162.225 42.545 264.092-7.41 27.718-47.291 100.573-47.294 133.551 0 44.7 35.892 81.073 80.574 79.974 44.682-1.101 80.574-40.045 80.574-84.745 0-33.177-41.458-103.608-49.045-131.039-30.055-108.654 26.571-200.747 95.023-215.401z" - ], - "isMulticolor": false, - "tags": [ - "dripping-blade" - ], - "defaultCode": 59813, - "grid": 0, - "attrs": [] - }, - { - "id": 166, - "paths": [ - "M980.185 29.963c-80.151 138.823-249.555 207.937-418.378 195.552-119.679 80.714-346.563 187.118-524.691 223.736v289.906c478.181-155.257 1011.314-267.057 943.069-709.194zM856.986 550.524c0 30.246 29.898 52.478 58.817 52.478v0.003c29.569 0 57.665-20.789 57.665-49.508 0-57.867-42.377-80.737-57.665-166.556-14.795 85.981-58.817 103.302-58.817 163.583zM443.943 681.232c0 23.226-25.565 41.974-25.565 63.154 0 25.461 23.372 43.451 48.008 43.451 24.095 0 49.239-20.159 49.239-46.974s-27.999-41.817-27.999-63.414c0.002-34.983 13.947-62.178 35.476-81.489-42.605 16.479-86.828 32.152-132.056 47.366 31.123-0.693 52.897 11.062 52.897 37.906zM174.633 825.023c-13.005 64.978-46.838 79.687-46.838 127.4 0 24.655 24.374 42.779 47.951 42.779 24.107 0 47.007-16.949 47.007-40.357 0-45.911-32.716-64.821-45.955-130.297 8.207-64.35 56.759-115.939 110.295-147.384-56.258 17.839-113.328 35.382-170.143 53.241 25.508 9.893 48.268 35.142 57.683 94.617zM835.128 426.714c-62.319 52.328-140.64 96.091-228.646 134.889 61.838-6.040 128.217 21.016 146.103 82.249-26.265 113.878-83.911 149.841-83.911 233.395 0 44.010 43.060 75.875 88.38 75.875 44.324 0 90.149-34.078 90.149-80.432 0-87.307-60.246-115.834-86.011-229.907 20.428-113.838 46.518-174.573 73.937-216.069z" - ], - "isMulticolor": false, - "tags": [ - "dripping-knife" - ], - "defaultCode": 59814, - "grid": 0, - "attrs": [] - }, - { - "id": 167, - "paths": [ - "M731.415 636.028c10.090-112.486 72.717-70.542 69.046 103.977l35.66 116.422c11.274-99.184 90.429-118.881 99.37 3.508l10.993-620.957-230.711 234.347 15.642 162.702zM616.757 789.913c13.745-133.285 73.663-150.376 77.51-89.055l14.84-230.894-181.39 202.415c33.982-31.42 69.199-2.269 89.040 117.534zM809.939 78.846l-526.401 526.416c-38.152-51.965-68.154-107.839-85.779-163.578-148.839 118.599-39.51 216.846 47.881 267.299-53.149 72.118-115.259 127.801-179.527 179.521 0 51.456 31.174 76.81 76.797 76.8 50.316-67.773 106.874-130.36 179.524-179.521 42.742 74.030 130.968 194.179 272.282 52.859-59.546-18.823-115.819-51-168.554-90.767l526.401-526.416 16.005-157.253-158.628 14.64z" - ], - "isMulticolor": false, - "tags": [ - "dripping-sword" - ], - "defaultCode": 59815, - "grid": 0, - "attrs": [] - }, - { - "id": 168, - "paths": [ - "M805.203 628.019c54.205 25.792 87.461 58.366 87.461 94.203 0 82.693-172.725 149.429-385.991 149.429-213.263 0-385.991-66.735-385.991-149.429 0-35.837 33.256-68.416 87.461-94.205-102.764 33.298-169.087 83.736-169.087 139.687 0 100.168 209.289 181.916 467.617 181.911s467.617-81.745 467.617-181.911c0-55.949-66.323-106.389-169.087-139.685zM506.671 829.425c140.268 0 254.216-44.688 254.216-99.077 0-30.57-36.879-56.637-93.291-74.714 29.831 14.049 48.978 30.745 48.978 50.351 0 44.899-94.108 81.21-209.903 81.21s-209.903-36.311-209.903-81.21c0.002-19.608 19.149-36.303 48.978-50.353-56.41 18.076-93.291 44.146-93.291 74.715 0 54.389 113.948 99.077 254.216 99.077zM496.167 179.973c0.002 0.035 0.003 0.070 0.005 0.105 0.002-0.037 0.003-0.072 0.007-0.109l-0.012 0.003zM502.004 736.221c88.966 0 165.963-68.613 206.404-169.252-12.808 13.903-25.341 21.978-36.152 22.819-32.499 2.526-45.634-59.785-39.649-156.889-13.18 27.566-28.368 44.69-44.313 44.69-45.612 0-83.295-127.766-92.122-297.51-8.823 169.742-46.508 297.506-92.12 297.506-11.314 0-22.595-8.402-32.651-22.819 2.579 83.794-9.799 137.343-39.649 135.021-10.806-0.839-23.345-8.915-36.152-22.819 40.439 100.638 117.438 169.252 206.404 169.252zM542.992 88.204c0 26.869-21.782 48.651-48.651 48.651s-48.651-21.782-48.651-48.651c0-26.869 21.782-48.651 48.651-48.651s48.651 21.782 48.651 48.651z" - ], - "isMulticolor": false, - "tags": [ - "droplet-splash" - ], - "defaultCode": 59816, - "grid": 0, - "attrs": [] - }, - { - "id": 169, - "paths": [ - "M526.857 80.527c-59.389 345.153-236.118 414.68-236.118 656.665 0 121.412 120.020 210.662 236.118 210.662v0c118.707 0 231.479-83.459 231.479-198.728 0-232.286-170.109-324.099-231.479-668.598zM410.479 514.040h0.003c-55.832 150.817-10.198 308.612 108.313 358.146 30.322 12.677 63.308 15.423 95.615 12.56-231.885 99.412-371.014-159.373-203.931-370.706z" - ], - "isMulticolor": false, - "tags": [ - "droplet" - ], - "defaultCode": 59817, - "grid": 0, - "attrs": [] - }, - { - "id": 170, - "paths": [ - "M806.042 35.369c-32.481 188.767-111.315 268.632-152.578 367.499-52.929-101.348-109.601-220.327-141.188-397.578-32.073 186.328-93.946 302.685-150.501 402.562-40.447-98.733-114.822-187.474-147.778-372.484-44.959 261.28-178.744 313.914-178.744 497.094 0 91.909 90.855 159.47 178.742 159.47 10.676 0 21.283-0.905 31.697-2.624-2.978 21.957-4.595 45.113-4.595 69.844 0 139.384 137.846 241.843 271.18 241.843 136.336 0 265.852-95.81 265.852-228.14 0-29.953-2.472-57.867-6.947-84.389 11.528 2.274 23.22 3.466 34.861 3.466 89.861 0 175.229-63.177 175.229-150.436 0-175.841-128.772-245.342-175.229-506.128zM212.262 673.82c-87.117 0-157.741-71.57-157.741-159.854s70.623-159.854 157.741-159.854c33.718 0 64.963 10.728 90.601 28.993-8.556-2.858-17.669-4.415-27.132-4.415-49.155 0-89.003 41.627-89.003 92.979s39.847 92.979 89.003 92.979c1.425 0 2.84-0.043 4.248-0.112-13.601 32.888-24.442 67.2-31.184 104.971-11.725 2.816-23.956 4.315-36.533 4.315zM509.603 970.309c-125.332 0-226.934-102.926-226.934-229.892 0-22.439 3.187-44.122 9.106-64.626 0 0 0 0 0 0 3.11-10.775 6.976-21.222 11.54-31.28 0 0-0.002 0.002-0.002 0.002 13.661-30.107 33.546-56.714 58-78.118 0 0.002 0 0.003-0.002 0.003 2.053-1.797 4.144-3.55 6.261-5.27 0.222-0.18 0.443-0.364 0.667-0.543 6.68-5.391 13.664-10.41 20.924-15.026 0 0 0-0.002 0-0.002 34.906-22.189 76.19-35.031 120.439-35.031 43.317 0 83.796 12.3 118.228 33.633 2.125 1.316 4.221 2.676 6.299 4.061 0.314 0.209 0.63 0.418 0.944 0.628 2.116 1.425 4.215 2.88 6.281 4.375 0.015 0.010 0.028 0.022 0.043 0.032 0.556 0.403 1.096 0.83 1.649 1.238-16.21-7.748-34.22-12.099-53.211-12.099-70.718 0-128.045 59.863-128.045 133.713s57.327 133.713 128.045 133.713c70.718 0 128.045-59.868 128.045-133.713 0-13.638-1.966-26.793-5.601-39.188 1.706 3.421 3.328 6.892 4.866 10.409 0.882 2.016 1.736 4.049 2.561 6.096 0.079 0.194 0.157 0.386 0.234 0.58 2.611 6.518 4.938 13.183 6.961 19.982 6.258 21.035 9.635 43.332 9.635 66.433 0 126.964-101.602 229.891-226.934 229.891zM804.309 673.82c-12.647 0-24.938-1.53-36.724-4.38-17.796-84.942-56.059-156.533-98.762-237.369 27.541-46.69 77.906-77.959 135.485-77.959 32.514 0 62.73 9.973 87.835 27.062-9.669-3.76-20.126-5.825-31.049-5.827-49.155 0-89.003 41.627-89.003 92.979s39.847 92.979 89.003 92.979c49.157 0 89.004-41.63 89.004-92.979 0-7.121-0.792-14.045-2.243-20.707 9.111 20.211 14.194 42.677 14.194 66.348 0 88.285-70.623 159.854-157.741 159.854z" - ], - "isMulticolor": false, - "tags": [ - "droplets" - ], - "defaultCode": 59818, - "grid": 0, - "attrs": [] - }, - { - "id": 171, - "paths": [ - "M807.32 790.454c-30.996-3.564-57.098-29.791-60.938-48.74 26.002-5.195 45.929-32.778 45.929-65.631 0-36.568-25.023-66.56-55.316-66.56-2.936 0-9.387-1.456-12.198-0.929l-75.947-317.816v-258.761l-102.174-0.025v775.329l50.623-36.568c0 0 17.945 55.241 69.371 110.632s205.327 110.632 205.327 110.632v-221.239c0 0-43.42 23.843-64.678 19.677zM357.338 142.624c-51.451-55.366-205.352-110.632-205.327-110.632v221.239c0 0 43.42-23.843 64.678-19.677 30.996 3.564 57.098 29.791 60.938 48.74-26.002 5.195-45.929 32.778-45.929 65.631 0 36.568 25.023 66.56 55.316 66.56 2.936 0 9.387 1.456 12.198 0.929l75.947 317.816v258.761h102.174v-775.304l-50.623 36.568c0 0-17.945-55.241-69.371-110.632z" - ], - "isMulticolor": false, - "tags": [ - "duel" - ], - "defaultCode": 59819, - "grid": 0, - "attrs": [] - }, - { - "id": 172, - "paths": [ - "M511.992 32.012c-135.002 0-209.995 240.013-209.995 419.991 0 90.002 90.002 180.003 209.995 180.003s209.995-90.002 209.995-180.003c0.025-180.003-74.993-419.991-209.995-419.991zM272.004 542.004c180.003 209.995 299.997 209.995 480 0 0 180.003-90.002 150.011-90.002 270.005 0 180.003 150.011 119.994 150.011 180.003h-600.019c0-60.009 150.011 0 150.011-180.003 0-120.019-90.002-90.002-90.002-270.005z" - ], - "isMulticolor": false, - "tags": [ - "egg-pod" - ], - "defaultCode": 59820, - "grid": 0, - "attrs": [] - }, - { - "id": 173, - "paths": [ - "M511.992 31.992c-180.003 0-360.006 360.006-360.006 599.994 0 180.003 119.994 360.006 360.006 360.006s360.006-180.003 360.006-360.006c0-239.987-180.003-599.994-360.006-599.994z" - ], - "isMulticolor": false, - "tags": [ - "egg" - ], - "defaultCode": 59821, - "grid": 0, - "attrs": [] - }, - { - "id": 174, - "paths": [ - "M680.107 465.169c-144.916 36.136-244.112 31.545-284.398-99.274-6.264-20.339-14.92-37.471-25.321-51.595l15.26 6.278c-9.579-46.768 5.398-81.8 39.586-107.632-41.186-8.724-81.945-13.396-117.387 32.614 10.809-26.892-1.451-75.749-25.679-89.848-14.987 52.172-40.998 74.285-74.063 78.699-47.057-25.761-23.427-176.697-23.427-176.697l-23.427-10.181c-26.592 94.842-2.898 157.962 12.564 186.002-24.696-3.835-51.93-13.69-80.545-25.981l39.232 72.92c-29.075-14.035-58.865-10.13-87.224-0.602 63.967 41.957 36.827 77.546-6.156 118.282 28.105-5.871 56.959-21.414 79.686-24.904-13.643 37.583-16.535 83.593-2.527 136.306 103.946 391.247 432.434 504.527 666.92 429.774 303.869-96.855 205.499-550.793-103.098-474.159z" - ], - "isMulticolor": false, - "tags": [ - "eggplant" - ], - "defaultCode": 59822, - "grid": 0, - "attrs": [] - }, - { - "id": 175, - "paths": [ - "M701.605 695.356l76.927-287.096-209.507-209.992-286.433 77.104-76.927 287.096 209.507 209.992 286.433-77.104zM324.521 321.194l227.293-61.238 165.019 166.057-60.195 227.293-89.257 23.871c238.664-215.392-69.527-475.941-262.578-281.259l19.718-74.724zM634.242 29.537l-480.34 128.266-128.486 479.519 351.855 351.254 480.341-128.266 128.486-479.519-351.857-351.254zM570.311 73.202l-17.147 67.178c0 0.005 0 0.008 0 0.013h-0.003l0.003-0.013c-0.585-30.967-75.95-33.979-214.766-8.738l231.913-58.44zM88.119 560.422c101.47-60.986 131.132-259.795 72.58-329.98l65.543 60.91-60.204 237.53-77.919 31.54zM345.235 914.26c-10.44-88.984-56.594-171.576-141.148-287.169l156.027 164.605-14.879 122.564zM304.803 395.92l19.718-74.725 227.293-61.238 165.019 166.057-60.195 227.293-89.257 23.871c238.664-215.391-69.527-475.941-262.578-281.258zM551.143 916.116c122.36-52.802 166.446-74.732 181.619-114.96l48.447 49.615-230.066 65.346zM801.399 363.882c32.345-42.667-64.482-181.883-129.136-261.467l246.597 246.398-117.461 15.069zM825.371 442.303v0l119.666-9.278-58.442 231.912c13.434-137.525-0.074-181.405-61.225-222.634z" - ], - "isMulticolor": false, - "tags": [ - "emerald" - ], - "defaultCode": 59823, - "grid": 0, - "attrs": [] - }, - { - "id": 176, - "paths": [ - "M859.011 639.113l109.792-9.137-201.476-132.517 170.024-77.236-144.321-48.551 140.691-69.092-115.632-40.113 88.929-102.819-161.528 28.67 11.879-141.098-122.068 116.831-74.368-125.691-42.116 128.722-109.9-71.244 12.891 174.367-169.912-111.756 95.414-29.718-143.895-87.382-158.685-0.005v126.522l193.553 92.041-117.337 34.893 257.49 155.997-189.555 6.455 147.551 94.079-205.146 83.47 167.695 49.573-133.337 156.157 192.839-50.463 22.358 196.065 129.946-153.182 94.611 151.961 36.615-145.443 94.955 49.411-21.085-233.644 168.963 102.363-100.736 14.508 199.301 138.455 2.011-164.715-126.411-106.733zM630.107 778.255l-259.881-69.634 129.876-484.701 61.833 16.569 9.381-35.011 136.2 36.495-9.381 35.010 61.846 16.573-129.874 484.699zM670.707 308.645l14.349-53.554-100.84-27.020-14.349 53.554-42.951-11.51-31.45 117.376 125.718 58.408-35.182 67.343 67.736 30.533 59.918-223.623zM529.715 521.283l-62.322-28.141 0.159-0.643h-0.224l-50.787 189.545 186.741 50.037 24.66-92.031-125.364-67.507z" - ], - "isMulticolor": false, - "tags": [ - "energise" - ], - "defaultCode": 59824, - "grid": 0, - "attrs": [] - }, - { - "id": 177, - "paths": [ - "M995.844 799.221l0.012-234.516-178.644 6.513c4.44-26.415 5.544-52.754 3.598-78.546l95.038-55.182-106.19-23.794-13.913-24.097c-18.302-43.127-45.729-82.12-80.55-114.008l250.619-249.24-192.22-0.008-97.557 218.521c-11.152-7.442-22.837-14.241-35.018-20.335l-15.119-123.759-71.262 94.686c-53.291-10.066-106.433-6.478-155.548 8.478l-37.375-183.6-253.544 0.008 210.237 220.695c-16.356 10.4-31.804 22.249-46.133 35.429l-121.981-40.93 61.744 115.44c-14.688 24.947-26.302 52.259-34.16 81.584-9.254 34.537-12.604 69.259-10.709 103.115l-106.389 80.066 126.346 15.44c4.059 10.92 8.712 21.596 13.893 32.001l-180.622 76.82v203.267l211.492-229.885c9.645 12.923 20.258 25.157 31.766 36.582l-48.962 115.152 131.179-55.78c14.982 7.591 30.715 14.121 47.139 19.441l-101.024 170.083 216.545 0.008-17.57-154.011c19.551 0.207 38.885-1.366 57.813-4.577l64.383 95.431 27.708-125.621c24.432-12.251 47.316-27.509 68.035-45.465l102.704 34.878-42.129-104.697c7.855-12.188 14.966-24.98 21.222-38.352l205.146 142.767zM503.619 659.837c-78.965 0-142.981-64.014-142.981-142.979s64.016-142.982 142.981-142.982 142.981 64.014 142.981 142.982c0 78.965-64.018 142.979-142.981 142.979z" - ], - "isMulticolor": false, - "tags": [ - "explosion" - ], - "defaultCode": 59825, - "grid": 0, - "attrs": [] - }, - { - "id": 178, - "paths": [ - "M991.523 924.261v-99.119l-623.045 33.535c1.732-9.914 2.643-20.111 2.643-30.521 0-0.394-0.012-0.787-0.015-1.181l620.414-117.281v-101.456l-622.522 192.532c-1.741-11.15-4.53-21.952-8.26-32.305l630.781-331.647v-130.606l-641.913 437.54c-5.018-9.169-10.833-17.839-17.343-25.926l659.252-592.37v-101.456l-0.007 0.013h-80.46l-602.050 669.918c-8.070-6.859-16.762-13.008-25.986-18.34l444.957-651.573h-132.94l-336.166 639.983c-7.676-2.987-15.609-5.454-23.764-7.352l196.671-632.632h-95.623l-118.273 629.523c-6.882-0.892-13.892-1.376-21-1.45l33.157-628.076h-89.79l34.54 629.219c-7.577 0.867-15.006 2.213-22.259 4.012l-119.569-633.246v302.027l104.156 335.802c-68.793 23.955-118.166 89.369-118.166 166.327 0 97.252 78.836 176.088 176.088 176.088 56.056 0 105.99-26.195 138.238-67.009l160.312 49.996h227.398l-373.429-71.018c4.961-8.576 9.219-17.608 12.697-27.018l631.273 35.068z" - ], - "isMulticolor": false, - "tags": [ - "explosive-materials" - ], - "defaultCode": 59826, - "grid": 0, - "attrs": [] - }, - { - "id": 179, - "paths": [ - "M772.819 716.578c76.351-70.621 124.17-171.643 124.17-283.845 0.002-213.512-173.083-386.596-386.589-386.596s-386.589 173.089-386.589 386.596c0 112.211 47.826 213.238 124.185 283.858l-6.784 0.446c-52.466 90.528-10.275 163.067 49.591 232.57-14.236-58.46-23.594-118.228 14.249-189.306 7.378 4.636 14.919 9.036 22.622 13.175-22.872 84.189 3.212 154.352 54.25 213.842-8.2-54.080-10.537-114.31 16.025-184.631 6.585 2 13.245 3.82 19.974 5.472 3.553 72.041 26.283 139.185 56.105 204.524-2.671-63.528 1.876-127.942 18.222-193.798 6.017 0.279 12.066 0.438 18.153 0.438 6.159 0 12.28-0.16 18.369-0.444 16.347 65.86 20.896 130.275 18.223 193.807 29.83-65.356 52.563-132.517 56.108-204.578 6.72-1.654 13.374-3.478 19.952-5.477 26.587 70.345 24.25 130.594 16.048 184.689 51.058-59.514 77.141-129.709 54.22-213.942 7.694-4.141 15.225-8.541 22.595-13.177 37.906 71.125 28.547 130.922 14.304 189.41 59.868-69.505 102.059-142.044 49.591-232.57l-6.993-0.463zM269.512 498.354c0-133.082 107.888-240.967 240.971-240.967s240.971 107.882 240.971 240.967-107.888 240.972-240.971 240.972-240.971-107.886-240.971-240.972zM560.283 441.484c-40.265 0-72.908-32.643-72.908-72.909 0-11.307 2.576-22.012 7.17-31.562-67.699 12.609-118.956 71.984-118.956 143.337 0 80.534 65.285 145.817 145.817 145.817s145.817-65.284 145.817-145.817c-0.002-36.637-13.516-70.113-35.827-95.726-7.313 32.542-36.365 56.861-71.114 56.861zM514.070 567.966c-26.173 0-47.391-21.218-47.391-47.391s21.218-47.391 47.391-47.391c26.173 0 47.391 21.217 47.391 47.391s-21.218 47.391-47.391 47.391z" - ], - "isMulticolor": false, - "tags": [ - "eye-monster" - ], - "defaultCode": 59827, - "grid": 0, - "attrs": [] - }, - { - "id": 180, - "paths": [ - "M92.225 38.339l0.003 0.002v-0.002zM92.228 38.341c0 430.215 54.093 736.513 420.647 946.383 369.303-211.445 421.125-514.985 421.125-946.383-274.863 41.693-568.472 41.181-841.771 0zM516.609 265.408c89.15 0 161.418 72.43 161.418 161.775s-72.268 161.775-161.418 161.775c-89.15 0-161.418-72.43-161.418-161.775s72.268-161.775 161.418-161.775zM804.867 353.577c33.353 21.319 66.231 46.331 98.476 75.063-32.25 28.735-65.387 53.669-99.176 74.829 6.413-24.35 9.846-49.915 9.846-76.287 0-25.403-3.181-50.061-9.146-73.604zM228.265 353.572c-5.967 23.545-9.148 48.203-9.148 73.609 0 26.372 3.433 51.937 9.846 76.287-33.622-21.088-66.724-45.991-99.089-74.829 32.387-28.856 65.23-53.843 98.391-75.068zM589.657 427.13c0 40.444-32.714 73.23-73.068 73.23s-73.068-32.786-73.068-73.23c0-40.444 32.714-73.23 73.068-73.23s73.068 32.786 73.068 73.23z" - ], - "isMulticolor": false, - "tags": [ - "eye-shield" - ], - "defaultCode": 59828, - "grid": 0, - "attrs": [] - }, - { - "id": 181, - "paths": [ - "M752.336 85.042c-233.22-134.648-531.434-54.741-666.083 178.477s-54.741 531.434 178.478 666.083 531.434 54.741 666.083-178.477 54.74-531.434-178.478-666.083zM870.221 719.219c-88.009 152.35-270.094 211.963-406.703 133.137s-176.001-266.225-87.987-418.582 270.094-211.963 406.703-133.137 175.999 266.225 87.987 418.582zM756.788 454.427c-71.73-41.296-167.348-10.066-213.562 69.751s-25.53 178.002 46.202 219.298c71.73 41.296 167.348 10.066 213.562-69.751s25.528-178.002-46.202-219.298zM621.222 602.339c-32.815 0-59.419-26.594-59.419-59.394s26.604-59.394 59.419-59.394 59.419 26.594 59.419 59.394c0 32.805-26.604 59.394-59.419 59.394z" - ], - "isMulticolor": false, - "tags": [ - "eyeball" - ], - "defaultCode": 59829, - "grid": 0, - "attrs": [] - }, - { - "id": 182, - "paths": [ - "M826.801 315.913l93.146-211.044-211.046 93.146-171.932-153.802 23.373 229.498-199.404 115.988 172.493 37.247c-16.95 15.52-34.714 33.475-53.009 51.768v0.003l-462.031 456.829v65.269h90.566l450.044-443.511c16.416-16.417 30.864-31.602 43.247-45.647l32.87 152.22 115.988-199.404 229.498 23.373-153.802-171.932z" - ], - "isMulticolor": false, - "tags": [ - "fairy-wand" - ], - "defaultCode": 59830, - "grid": 0, - "attrs": [] - }, - { - "id": 183, - "paths": [ - "M1004.197 351.057v0 0c-157.39-80.694-308.637-31.624-418.776 68.768-34.193-29.429-78.684-47.221-127.335-47.221-10.678 0-21.152 0.87-31.363 2.519-47.503-158.177-156.081-304.068-320.722-348.651v-0.002c-152.847 294.286-102.631 556.657 120.423 592.562-71.909 63.784-109.429 146.734-106.317 233.798 121.577 38.112 208.874 8.254 263.676-58.802-106.314-35.935-167.812-148.797-138.355-258.73 18.721-69.869 69.868-122.362 132.901-145.71-68.102 30.508-115.55 98.874-115.55 178.325 0 107.864 87.444 195.308 195.308 195.308s195.308-87.439 195.308-195.308c0-47.403-16.893-90.857-44.981-124.684 49.531 52.356 71.548 128.419 51.527 203.141-29.197 108.96-137.213 175.747-246.264 155.464 7.228 97.101 61.5 176.893 179.693 201.599 44.403-68.509 54.441-150.65 27.838-252.9 195.075 127.372 363.116-53.266 382.994-399.477h-0.005z" - ], - "isMulticolor": false, - "tags": [ - "fairy" - ], - "defaultCode": 59831, - "grid": 0, - "attrs": [] - }, - { - "id": 184, - "paths": [ - "M632.010 152.006c0 66.284-53.735 119.994-119.994 119.994-66.284 0-119.994-53.735-119.994-119.994 0-66.284 53.735-119.994 119.994-119.994s119.994 53.71 119.994 119.994zM452.007 391.993c0-60.009 0-60.009 60.009-60.009s60.009 0 60.009 60.009v419.991h120.019l-180.003 180.003-180.003-180.003h120.019v-419.991h-0.050z" - ], - "isMulticolor": false, - "tags": [ - "fall-down" - ], - "defaultCode": 59832, - "grid": 0, - "attrs": [] - }, - { - "id": 185, - "paths": [ - "M961.675 280.696l-10.774-21.104c-11.9-23.311-40.43-32.561-63.729-20.667l-189.405 96.713c-10.101 5.158-17.555 13.448-21.793 23.080-2.481 3.261-4.585 6.892-6.201 10.871l-46.446 114.266-16.453-23.472-99.895-171.348v-192.927c0-26.171-21.203-47.388-47.363-47.388h-23.684c-26.157 0-47.363 21.215-47.363 47.39v212.776c0 10.807 3.622 20.763 9.71 28.736 0.286 0.537 0.572 1.074 0.882 1.605l85.469 146.603-146.594 102.867 12.204-97.581c2.065-16.504-4.625-32.077-16.431-42.078l-132.499-163.756c-16.456-20.343-46.282-23.483-66.614-7.014l-18.405 14.912c-20.331 16.464-23.468 46.306-7.009 66.649l119.565 147.771-22.505 179.936c-1.141 9.129 0.403 17.97 4.001 25.747 1.27 6.132 3.778 12.114 7.601 17.567l81.587 116.398c0.663 0.944 1.362 1.844 2.078 2.726 4.024 11.743 12.613 21.902 24.74 27.573l192.658 90.092c0.492 0.229 0.989 0.437 1.484 0.649 15.79 10.759 37.215 11.277 53.804-0.323l174.309-121.893c21.44-14.994 26.676-44.539 11.689-65.991l-13.568-19.423c-14.987-21.452-44.516-26.689-65.956-11.696l-140.151 98.006-94.934-44.393 230.044-161.424c5.552-3.897 10.002-8.774 13.304-14.227 4.315-4.332 7.862-9.574 10.31-15.594l73.591-181.047 168.107-85.837c23.299-11.898 32.537-40.44 20.637-63.747zM271.969 871.976c0 66.274-53.72 120-119.987 120s-119.987-53.726-119.987-120c0-66.274 53.72-120 119.987-120s119.987 53.726 119.987 120z" - ], - "isMulticolor": false, - "tags": [ - "falling" - ], - "defaultCode": 59833, - "grid": 0, - "attrs": [] - }, - { - "id": 186, - "paths": [ - "M558.432 708.829c-7.153-6.162-14.216-12.702-21.136-19.621-78.962-78.958-109.61-176.315-68.463-217.457 41.145-41.142 138.504-10.497 217.467 68.461 6.685 6.685 13.015 13.504 18.993 20.406l-129.605-335.058-46.531 98.214c-47.874-102.549-109.884-234.621-109.884-234.621l40.499 255.861-314.4-314.291-111.27-1.5-1.53 114.294 321.646 321.506-268.358-42.475c0 0 130.018 61.001 232.217 108.706l-94.51 46.419 334.865 131.157zM936.449 941.729l-101.5-292.662 85.655 70.973-34.813-198.643-86.607 93.682-47.161 11.777-67.091-36.627-99.978 99.978 36.625 67.088-11.735 46.997-91.943 84.999 198.643 34.813-63.359-80.614 283.264 98.239zM708.521 788.166l74.374-74.374c137.849 140.194 65.999 212.407-74.374 74.374z" - ], - "isMulticolor": false, - "tags": [ - "fast-ship" - ], - "defaultCode": 59834, - "grid": 0, - "attrs": [] - }, - { - "id": 187, - "paths": [ - "M917.278 817.177c-62.917-35.015-99.727-94.789-103.427-149.551-19.815-293.237-508.455-331.44-757.172-624.281l-0.002 0.008c12.904 373.139 422.543 371.339 663.804 558.364-156.126-67.612-412.016-52.772-597.256-172.924 86.414 280.813 394.638 188.356 620.987 264.688-134.797-13.165-312.561 62.965-480.625 2.76 148.413 233.931 340.939 77.675 527.457 79.055-94.074 23.97-191.252 128.812-321.147 118.978 158.259 152.32 241.166 4.452 354.54-52.254-11.436 13.609-18.661 30.942-19.513 50.074-2.058 46.185 33.717 85.294 79.902 87.352s85.294-33.717 87.352-79.902c1.667-37.412-21.492-70.175-54.9-82.368z" - ], - "isMulticolor": false, - "tags": [ - "feather-wing" - ], - "defaultCode": 59835, - "grid": 0, - "attrs": [] - }, - { - "id": 188, - "paths": [ - "M44.871 57.418c214.754 135.992 413.362 242.663 642.973 266.923 81.279 8.586 95.469 69.762 63.242 139.972-52.952 115.36 32.805 286.626 224.319 390.294-11.946 55.881-92.481 102.921-142.085 86.402-41.297-86.193-105.631-177.185-175.326-152.501-142.555 50.488-289.358 61.225-389.036 6.886 132.238-17.946 258.123-53.104 368.994-108.507-200.306 29.957-437.462 30.73-527.33-69.829 181.816 7.265 329.185-11.18 493.712-52.363-219.139-20.183-460.075-60.252-527.905-194.613 161.69 50.415 378.521 69.181 525.207 70.203-228.524-57.571-535.868-215.22-556.765-382.867v0z" - ], - "isMulticolor": false, - "tags": [ - "feathered-wing" - ], - "defaultCode": 59836, - "grid": 0, - "attrs": [] - }, - { - "id": 189, - "paths": [ - "M1003.413 721.858l0.003 0.005c-23.049-130.237-97.604-144.394-212.361-162.425 14.957-80.66 35.608-178.744 8.534-233.16-34.644-69.644-106.489-63.719-151.839-38.937l87.648 48.016c-106.568-19.929-159.959-138.501-231.494-156.348-99.736-24.882-149.439 111.315-204.356 206.237-148.468-66.75-254.254-97.529-276.072 11.867-49.115 246.258 386.733 385.393 622.209 419.83l20.913-49.643 112.49 72.711c137.762 11.065 239.512-32.324 224.324-118.153z" - ], - "isMulticolor": false, - "tags": [ - "fedora" - ], - "defaultCode": 59837, - "grid": 0, - "attrs": [] - }, - { - "id": 190, - "paths": [ - "M929.764 373.012c-84.895-147.486-248.067-221.334-406.391-199.226l-48.317-83.936-110.742 64.128c-36.587-64.126-127.485-187.019-239.863-74.642l11.693 18.375c0 0 98.398-125.636 207.286 68.361l-130.509 75.574 48.14 83.631c-98.758 126.512-116.813 305.58-31.751 453.355 111.756 194.151 359.157 260.742 552.582 148.734s259.63-360.204 147.872-554.353zM828.448 649.944c-1.941 125.463-66.552 204.055-148.792 237.621 17.096-26.155 27.274-58.949 27.274-94.557 0-85.49-58.624-154.793-130.943-154.793s-130.943 69.303-130.943 154.793c0 32.741 8.606 63.1 23.28 88.109-78.29-37.086-138.925-114.681-141.461-231.173-1.981-91.194 33.044-151.333 113.213-195.227-30.267 56.652-18.445 122.502 13.806 150.039-19.244-125.738 152.274-199.11 86.43-314.019h0.002c-0.025-0.043-0.052-0.087-0.077-0.13-0.743-1.295-1.522-2.594-2.327-3.899-0.137-0.222-0.271-0.443-0.409-0.665-0.854-1.368-1.734-2.741-2.654-4.121-0.058-0.087-0.12-0.175-0.179-0.262-0.849-1.265-1.731-2.536-2.636-3.81-0.207-0.292-0.414-0.585-0.625-0.877-0.976-1.355-1.974-2.713-3.017-4.079-0.097-0.127-0.199-0.254-0.297-0.381-0.945-1.233-1.923-2.471-2.923-3.713-0.289-0.359-0.58-0.718-0.874-1.077-1.101-1.348-2.223-2.699-3.391-4.059-0.119-0.139-0.244-0.277-0.364-0.416-1.067-1.238-2.168-2.481-3.293-3.728-0.362-0.403-0.727-0.805-1.096-1.208-1.193-1.306-2.407-2.616-3.662-3.934-0.067-0.070-0.129-0.14-0.197-0.21l-0.002-0.127c2.648 1.231 5.255 2.471 7.841 3.713 0.692 0.332 1.378 0.667 2.066 1.001 1.961 0.95 3.906 1.906 5.832 2.863 0.688 0.342 1.378 0.683 2.061 1.026 2.486 1.248 4.95 2.499 7.377 3.757 0.195 0.102 0.386 0.204 0.581 0.306 2.208 1.148 4.387 2.302 6.547 3.46 0.773 0.414 1.54 0.832 2.309 1.248 1.657 0.897 3.298 1.799 4.925 2.701 0.74 0.411 1.485 0.822 2.22 1.234 149.96 84.147 175.072 192.28 107.445 316.581 67.729-36.323 96.981-89.81 68.498-167.604 65.402 43.922 99.916 131.318 98.456 225.619z" - ], - "isMulticolor": false, - "tags": [ - "fire-bomb" - ], - "defaultCode": 59838, - "grid": 0, - "attrs": [] - }, - { - "id": 191, - "paths": [ - "M746.013 346.338c46.494-110.134 130.621 19.244 105.629 112.518-19.444 72.579-84.175 117.611-176.313 58.351l0.002-0.003c-211.764-136.2-156.573-202.882-263.845-314.147 36.755 155.341-72.25 56.868-170.627-68.533 28.348-16.96 60.092-28.884 94.211-34.921l220.269 148.443 41.1-86.039c5.766 3.723 11.533 7.592 17.294 11.65 119.704 84.279 106.244-114.825 142.314-155.929l-735.76-1.517 3.623 719.657c78.285 54.695 209.606-14.959 156.548-102.913-3.789-6.281-7.412-12.54-10.895-18.781l60.214-35.715-123.371-219.527c2.806-33.010 10.277-63.857 21.748-91.975 143.591 147.62 367.783 380.048 166.483 334.739 61.101 57.174 274.614 99.542 298.674 195.863 19.974 79.966-50.973 143.517-111.372 143.517-81.1 0-165.35-64.925-89.556-140.074-48.131 8.002-71.065 41.941-72.331 80.371s19.341 81.427 58.557 107.924h605.069v-649.847c-14.114-118.729-241.943-168.205-237.665 6.887zM20.288 16.21v0-0.005z" - ], - "isMulticolor": false, - "tags": [ - "fire-breath" - ], - "defaultCode": 59839, - "grid": 0, - "attrs": [] - }, - { - "id": 192, - "paths": [ - "M509.569 319.693c-260.143 0-471.030 143.19-471.030 319.814s210.887 319.809 471.030 319.809 471.030-143.185 471.030-319.809c0-176.629-210.887-319.814-471.030-319.814zM509.573 928.741c-217.756 0-394.282-119.855-394.282-267.7s176.526-267.705 394.282-267.705 394.282 119.855 394.282 267.705c0 147.845-176.526 267.7-394.282 267.7zM97.312 492.23c37.054-83.315 52.952-166.68 46.82-250.098 38.279 49.857 71.991 101.299 62.81 165.586zM508.903 157.519c-44.004 20.493-49.414 64.265-32.651 114.285 38.364 114.491-113.243-20.234-107.284-111.948l-45.48 193.573 361.422-11.485c-111.845-9.926-214.509-112.937-176.009-184.427l0.003 0.002zM623.654 33.54c10.177 105.858-153.116 143.639 7.621 261.569-41.937-135.49 79.78-161.615-7.621-261.569zM194.943 411.65c62.431-75.981 88.577-164.151 82.364-292.007 54.526 44.842 60.408 147.83 56.758 223zM724.64 124.494c-54.526 44.842-59.621 147.556-55.974 222.731l307.771 251.311c-15.956-71.060-20.774-115.096-4.482-136.060 24.113-31.031 23.311-78.622-4.761-124.581-15.091 95.969-78.066 60.134-125.942-107.284-55.832 189.657-144.299-8.75-116.612-106.117v0zM127.542 745.696c39.625 19.227 59.019 1.229 79.040-15.592 8.934 25.75 7.395 54.011 5.516 82.358 40.496 3.211 79.077 0.633 83.898-59.651 40.78 60.12-32.215 94.562 19.057 127.095 29.073 18.457 72.031-53.178 77.882-112.085 7.848 63.273-16.143 130.943 66.121 165.865l-249.661-60.854-81.853-127.135zM878.796 767.851c-42.782 52.508-66.218-21.309-69.853-66.697-32.185 41.115-1.138 117.646-34.746 149.875-4.246-20.453-23.913-45.853-50.634-61.403 4.605 48.494-10.437 94.447-74.782 126.174l124.659-33.49 105.355-114.459zM673.892 904.935c-69.154 20.64-97.831-52.366-108.597-105.863-8.438 70.126-34.323 122.708-109.84 129.231l128.125 5.325 90.312-28.694z" - ], - "isMulticolor": false, - "tags": [ - "fire-ring" - ], - "defaultCode": 59840, - "grid": 0, - "attrs": [] - }, - { - "id": 193, - "paths": [ - "M120.596 71c0 400.314 74.405 696.472 393.627 880.777 311.695-179.958 394.671-479.359 394.671-880.777-256.849 45.903-516.148 51.374-788.298 0zM493.369 841.31c-116.524-4.059-320.931-343.775-158.229-529.71v0.003c-32.073 187.021 65.666 200.788 113.103 128.815 45.287-68.707-51.985-197.415 125.93-250.484-95.179 116.27 78.875 423.296 120.722 207.959 123.468 250.21-79.129 447.687-201.526 443.417zM631.551 686.718c0 91.044-53.789 164.857-120.145 164.857s-120.145-73.805-120.145-164.857 53.789-164.857 120.145-164.857 120.145 73.805 120.145 164.857z" - ], - "isMulticolor": false, - "tags": [ - "fire-shield" - ], - "defaultCode": 59841, - "grid": 0, - "attrs": [] - }, - { - "id": 194, - "paths": [ - "M511.992 31.992c-105.010 505.274-419.991 555.696 0 909.377 420.016-353.682 105.010-404.104 0-909.377zM249.491 334.825c-52.505 151.567-157.49 253.415-157.49 405.007 0 151.567 209.995 252.185 367.511 252.185-315.005-252.662-210.020-404.58-210.020-657.192zM774.492 334.825c0 252.637 105.010 404.555-209.995 657.192 157.49 0 367.511-100.618 367.511-252.185 0-151.592-105.010-253.44-157.515-405.007z" - ], - "isMulticolor": false, - "tags": [ - "fire-symbol" - ], - "defaultCode": 59842, - "grid": 0, - "attrs": [] - }, - { - "id": 195, - "paths": [ - "M379.832 985.040c90.476-0.124 195.846-0.503 274.644-0.712 204.767-153.767 14.354-362.924-157.404-332.646 151.679 114.67 19.713 302.523-117.24 333.358zM743.835 197.548c0.022 1.448 0 2.892 0 4.347 157.668 371.136-272.446 377.62-238.071 22.931-83.238 200.6-265.33-4.273-181.868-182.252v-0.003c-367.15 213.012 103.81 453.944-20.351 663.839-70.046 118.411-227.472-56.591-216.206-253.175-99.408 252.34-27.025 432.79 102.779 530.641 3.418 0.835 50.664 1.151 116.893 1.198-6.77-1.731-13.421-3.989-19.905-6.834-42.724-18.748-67.845-121.844 58.306-176.088-25.189 154.824 275.389 26.814 46.645-327.682l0.003-0.003c170.169 53.669 277.611 119.826 354.504 237.89 54.217-48.35 93.11-130.372 104.952-211.068 86.828 155.807 46.904 395.366-158.411 482.947 45.402-0.090 75.841-0.074 79.079 0.175 309.014-69.43 278.217-489.069-28.35-786.863z" - ], - "isMulticolor": false, - "tags": [ - "fire" - ], - "defaultCode": 59843, - "grid": 0, - "attrs": [] - }, - { - "id": 196, - "paths": [ - "M989.64 45.121c-0.003 0.002-0.005 0.005-0.008 0.007 0-0.002 0-0.002 0-0.003l-0.114 0.1c-90.289 77.026-174.464 145.754-230.064 190.543-36.809-27.319-80.251-46.195-127.469-53.791l-112.491-120.635 42.103 117.828c-2.467 0.195-4.926 0.423-7.377 0.68l-172.815-137.487 60.174 129.719-236.701-127.070 118.313 155.339-247.464-148.223 203.741 268.929-172.615-98.469 139.12 178.528-82.052-32.122 130.928 140.55c5.516 41.977 19.927 81.147 41.271 115.57l-14.264 12.679-56.094-63.252-116.074 102.948 64.293 72.497-97.564 86.531-21.207-8.406 4.793 22.964-72.26 64.088c-7.427 49.458 21.415 82.645 73.364 82.723l24.923-22.105 3.463 16.588 124.26-101.409-22.174-8.79 55.765-49.459 62.076 69.998 116.074-102.948-53.714-60.568 20.622-18.303c44.466 27.239 96.76 42.95 152.728 42.95 161.715 0 292.804-131.092 292.804-292.806 0-43.302-9.408-84.404-26.278-121.387l87.842-78.297c75.806-67.237 60.491-121.263 50.143-226.229z" - ], - "isMulticolor": false, - "tags": [ - "fireball-sword" - ], - "defaultCode": 59844, - "grid": 0, - "attrs": [] - }, - { - "id": 197, - "paths": [ - "M990.479 540.064c-132.567-227.106-262.167-303.784-389.955-288.751l-53.796-119.893-49.822 142.323-100.571-59.541-1.59 125.887-92.984 3.545 25.015 60.999c-34.941 32.429-69.807 68.668-104.623 107.475l-185.334-90.566 89.604 151.592-72.793 78.026 72.397 5.584-80.804 119.561 215.813-129.627 174.808 84.907-99.356 34.736 71.008 27.531-65.016 44.408 104.182 1.941-9.218 93.486 118.452-143.788c4.236-0.080 8.421-0.205 12.577-0.349 0.563-0.020 1.126-0.038 1.687-0.058 4.096-0.152 8.157-0.331 12.178-0.543 0.369-0.020 0.737-0.042 1.106-0.062 3.947-0.214 7.86-0.454 11.733-0.727 0.244-0.017 0.493-0.032 0.737-0.050 3.956-0.281 7.87-0.595 11.75-0.934 0.545-0.048 1.087-0.097 1.632-0.145 7.813-0.7 15.472-1.517 22.981-2.442 0.449-0.055 0.9-0.109 1.348-0.165 3.7-0.464 7.365-0.954 10.993-1.472 0.383-0.055 0.762-0.112 1.144-0.167 3.66-0.528 7.288-1.079 10.875-1.659 0.037-0.007 0.075-0.012 0.112-0.018 3.61-0.585 7.176-1.203 10.714-1.839 0.456-0.082 0.91-0.165 1.365-0.247 3.53-0.643 7.028-1.308 10.484-2.003 0.020-0.003 0.038-0.008 0.058-0.012 3.481-0.7 6.919-1.427 10.325-2.175 0.291-0.063 0.581-0.125 0.872-0.19 3.363-0.743 6.689-1.512 9.979-2.302 0.326-0.079 0.648-0.157 0.972-0.236 6.655-1.61 13.165-3.313 19.533-5.1 0.319-0.090 0.638-0.179 0.956-0.269 3.196-0.904 6.361-1.827 9.485-2.775 0.035-0.010 0.070-0.022 0.105-0.032 3.194-0.969 6.348-1.961 9.467-2.972 0.087-0.028 0.175-0.055 0.262-0.084 3.075-0.999 6.112-2.021 9.116-3.060 0.217-0.075 0.434-0.15 0.651-0.227 6.025-2.093 11.907-4.266 17.649-6.51 0.154-0.060 0.309-0.12 0.463-0.18 8.8-3.451 17.268-7.069 25.416-10.835 0.084-0.038 0.165-0.077 0.249-0.115 157.743-72.97 195.611-199.877 195.611-199.877h-0.003v-0.003zM720.667 467.278c9.136-34.094 44.174-54.325 78.268-45.19 6.114 1.639 11.773 4.123 16.907 7.272-0.299-0.007-0.591-0.043-0.892-0.043-19.813 0-35.875 15.55-35.875 34.736 0 19.184 16.062 34.736 35.875 34.736 13.456 0 25.166-7.185 31.305-17.796 0.281 6.366-0.389 12.883-2.127 19.366-9.134 34.094-44.179 54.324-78.273 45.188-34.089-9.134-54.324-44.174-45.188-78.268z" - ], - "isMulticolor": false, - "tags": [ - "fish" - ], - "defaultCode": 59845, - "grid": 0, - "attrs": [] - }, - { - "id": 198, - "paths": [ - "M680.252 77.43c-48.766-15.178-114.855-8.172-136.434 39.644-31.331-41.653-95.574-27.914-110.206 19.67-14.632 47.578 26.883 98.788 89.217 96.944-6.146 67.85 88.462 109.197 163.259 78.131-0.945 38.551 16.599 83.57 60.638 89.791-12.766 36.164 6.202 83.961 57.139 83.961 62.842 0 75.925-72.514 41.981-106.118 18.915-20.749 25.625-50.248 22.159-78.131 34.51 24.165 69.066-13.023 67.424-40.1-3.027-49.857-40.664-71.817-67.424-48.517-17.57-55.141-74.363-63.909-104.952-32.651 2.694-14.827 0.399-26.165-10.492-38.483 45.138-11.383 37.764-75.275 9.345-93.655-34.749-22.471-70.8-7.352-81.644 29.514h-0.007zM862.093 625.738c-70.99 0-70.427-107.503 0-107.503s70.99 107.503 0 107.503zM951.286 415.67c-45.691 0-45.325-69.193 0-69.193s45.691 69.193 0 69.193zM866.266 116.823c-45.691 0-45.325-69.193 0-69.193s45.691 69.193 0 69.193zM354.763 218.621c-45.691 0-45.325-69.193 0-69.193s45.692 69.193 0 69.193zM476.24 303.699v0.005l-109.605 189.848-302.436 172.623c-52.346 30.214-61.255 88.762-13.165 139.862 93.087 98.925 208.198 159.692 337.95 195.118 69.191 18.881 111.833-11.079 111.833-78.923l0.421-349.643 110.179-190.84-135.178-78.050zM371.218 919.667c-101.333-34.611-329.696-160.183-242.070-210.774l272.553-157.86-30.483 368.633zM506.88 319.997l-57.768 107.393z" - ], - "isMulticolor": false, - "tags": [ - "fizzing-flask" - ], - "defaultCode": 59846, - "grid": 0, - "attrs": [] - }, - { - "id": 199, - "paths": [ - "M331.998 241.987c0 180 180.001 210.002 180.001 360 0 60-60.002 149.998-149.999 149.998s-149.999-90.002-90.001-240c-90.001 60-120 120-120 180 0 150.002 149.999 300 359.999 300s359.999-89.998 359.999-270.002c1.34-266.249-306.793-355.191-390.002-480-60.002-90.002-29.999-150.002 29.999-210.002-119.996 30.005-179.998 114.005-179.998 210.005v0z" - ], - "isMulticolor": false, - "tags": [ - "flame-symbol" - ], - "defaultCode": 59847, - "grid": 0, - "attrs": [] - }, - { - "id": 200, - "paths": [ - "M42.495 259.009l0.003 0.007 0.002-0.003zM642.27 171.058c71.573 51.546 7.913 79.099-71.605 69.717 66.764 36.981 107.654 86.29 56.313 131.147-50.871 44.448-125.352-39.219-135.253-113.363-15.606-116.863-27.073-178.513-180.827-171.957 77.903 61.219 75.073 132.739 34.42 184.679l277.872 277.872 12.774-62.362 45.178-15.821 133.923 347.457-347.948-133.397 16.364-45.724 70.728-14.495-293.736-293.734c-71.379 25.859-160.656 13.422-217.975-72.061-11.526 90.095 54.862 142.598 134.986 179.888 285.255 132.761 124.941 308.127-41.944 136.402 47.102 267.986 555.055 454.937 755.42 309.276 162.296-117.987 56.719-634.728-248.69-713.524z" - ], - "isMulticolor": false, - "tags": [ - "flaming-arrow" - ], - "defaultCode": 59848, - "grid": 0, - "attrs": [] - }, - { - "id": 201, - "paths": [ - "M571.771 30.393l0.007 0.002-0.010-0.010zM856.308 260.118c96.316 156.567-39.704 232.794-76.965 171.424-76.068-125.287 140.179-304.639-207.565-401.147 71.368 72.659 72.191 189.062-3.79 225.181-82.566 39.246-198.586-11.232-145.485-149.392-148.089 90.186-178.178 239.604-127.106 383.654-60.486-46.949-180.458-134.804-95.623-234.391-113.811 22.658-143.462 119.539-83.961 180.752 98.294 101.119 25.994 237.388-55.974 93.291-48.801 245.79 306.948 300.834 310.19 461.791h37.014c-16.765-137.126-124.801-215.98-240.769-312.425l60.409-186.482c0.281 2.12 0.568 4.21 0.857 6.293 0.321-9.163 0.989-17.672 1.963-25.276 6.179 42.006 20.156 144.496 83.721 215.671 41.423-8.342 77.151-126.41 64.485-312.253l175.953-63.027c0.007-0.005 0.013-0.008 0.020-0.013l0.003 0.005-0.023 0.008c-128.695 87.596-156.004 234.717-78.776 308.603l89.3-207.493 170.722-44.65c-129.539 82.56-211.372 191.032-145.772 288.915l115.567-161.533 210.12 31.518c-250.132 43.479-313.907 203.559-346.698 351.95 6.199 35.113 21.374 72.403 40.461 110.189h27.321c-91.397-247.684 268.589-266.324 324.185-416.309 53.564-144.499 14.762-218.495-103.783-314.856z" - ], - "isMulticolor": false, - "tags": [ - "flaming-claw" - ], - "defaultCode": 59849, - "grid": 0, - "attrs": [] - }, - { - "id": 202, - "paths": [ - "M760.174 277.669c68.122 75.078 5.031 165.452-102.696 151.181-133.194-17.647-143.482-146.352-117.526-198.588 49.062-98.75-35.083-202.742-186.027-193.424 206.743 154.258-106.108 324.717-148.224-4.011l0.003-0.003c-31.229 29.905-60.212 123.573-23.841 188.57 148.141 264.758-5.252 395.912-78.86 185.095-55.862 178.973 13.681 394.746 202.096 503.571l111.893-111.893-34.375-34.89c-44.582-44.473-46.145-116.604-1.609-161.062l82.009-82.010-17.919-17.881 114.486-42.154-42.241 114.244-17.443-17.405-81.843 80.64c-24.93 24.885-25.020 63.622 0 88.585l35.432 35.434 147.144-147.144-27.384-27.324 151.373-55.737-55.854 151.051-31.064-30.997-147.53 146.838 37.405 37.405c25.009 24.898 63.623 24.908 88.585 0l88.512-88.51-17.563-17.525 114.489-42.158-42.24 114.247-18.26-18.22-87.897 89.208c-44.563 44.463-118.087 44.394-162.676 0l-37.208-37.764-99.861 99.393c66.343 28.891 144.75 45.686 235.024 45.686 500.571-0.003 476.751-621.805 171.69-702.449z" - ], - "isMulticolor": false, - "tags": [ - "flaming-trident" - ], - "defaultCode": 59850, - "grid": 0, - "attrs": [] - }, - { - "id": 203, - "paths": [ - "M898.008 801.192l-305.526-385.991v-275.301c0 0 15.121-0.683 31.487-0.683l-0.003 0.003c16.367 0 29.151-26.636 29.151-39.812s-12.784-35.209-29.151-35.209h-232.062c-16.367 0-29.151 22.032-29.151 35.209s12.784 39.811 29.151 39.812l31.487 0.683v268.303c-101.966 129.834-307.858 392.984-307.858 392.984-9.019 15.572-17.493 36.921-17.493 61.802 0 60.553 50.582 110.782 110.784 110.784h598.223c60.202 0 110.784-49.312 110.784-110.784 0-27.142-11.773-47.974-19.822-61.801zM806.93 937.496h-597.010c-40.41 0-74.364-33.79-74.364-74.525 0-16.74 5.688-31.103 11.74-41.578 0 0 245.145-315.524 313.595-402.87v-168.223l94.186 3.501v165.348l312.911 402.245c5.402 9.3 13.307 23.315 13.307 41.578-0.002 41.351-33.956 74.523-74.364 74.523zM401.822 139.369h193.578z" - ], - "isMulticolor": false, - "tags": [ - "flask" - ], - "defaultCode": 59851, - "grid": 0, - "attrs": [] - }, - { - "id": 204, - "paths": [ - "M620.192 199.124h0.002zM860.285 364.13l-54.028 54.028-40.217-40.217c-13.422-13.427-33.906-14.508-57.658-7.619l-42.233-42.233 41.503-41.503-87.461-87.461-41.503 41.503-42.4-42.402c7.021-23.918 5.878-44.157-7.621-57.655l-288.491-83.671 67.322 304.84c15.038 15.039 34.828 17.635 57.635 11.598l40.422 40.422-362.598 362.6v174.92l450.061-450.061 40.255 40.255c-5.832 22.565-3.306 42.731 11.598 57.635l40.217 40.217-70.624 70.624 100.454 100.454 345.821-345.821-100.454-100.454z" - ], - "isMulticolor": false, - "tags": [ - "flat-hammer" - ], - "defaultCode": 59852, - "grid": 0, - "attrs": [] - }, - { - "id": 205, - "paths": [ - "M980.698 384.879c-85.552-54.99-170.437-88.274-261.062-83.788-1.423-95.86-35.075-180.969-83.791-261.058-77.473 49.989-156.343 98.347-203.093 184.185-89.324-48.509-178.65-62.038-267.977-57.965-0.058 89.324 10.912 178.645 57.967 267.974-89.217 53.791-135.985 128.805-184.19 203.096 83.253 46.76 167.435 88.881 261.060 83.788 3.354 87.018 38.538 174.032 83.791 261.058 78.699-52.598 150.603-110.627 203.093-184.195 83.559 48.161 173.896 62.411 267.977 57.969v0.008c4.203-96.388-9.584-187.374-57.967-267.982 80.659-42.933 140.42-112.734 184.191-203.089zM513.749 673.495c-93.304 0-168.942-75.641-168.942-168.945s75.639-168.945 168.942-168.945c93.304 0 168.942 75.641 168.942 168.945 0 93.308-75.639 168.945-168.942 168.945z" - ], - "isMulticolor": false, - "tags": [ - "flower" - ], - "defaultCode": 59853, - "grid": 0, - "attrs": [] - }, - { - "id": 206, - "paths": [ - "M445.792 637.822c80.027-122.352-61.923-225.893-150.154-92.093h-0.002c-118.614-133.444-289.316-58.485-190.198 112.112-102.315 69.081-76.929 263.155 84.090 234.242 12.736 157.764 296.414 85.884 241.078-37.94 171.92-59.891 111.245-173.071 15.186-216.321zM297.616 815.936c-49.755 0-90.092-40.334-90.092-90.089s40.337-90.094 90.092-90.094 90.092 40.334 90.092 90.094c0 49.755-40.337 90.089-90.092 90.089zM875.637 434.163l-0.007 0.018c51.806-156.047-86.532-257.66-176.926-100.068-102.171-49.783-245.234 20.198-148.071 174.924-97.784 133.454 47.996 230.739 141.212 174.792 70.262 122.262 228.841 10.427 179.476-87.509 134.388 7.475 151.612-153.41 4.317-162.156zM774.319 590.81c-39.672 22.912-90.399 9.32-113.3-30.361s-9.306-90.423 30.368-113.335c39.672-22.912 90.403-9.321 113.303 30.359s9.306 90.421-30.371 113.337zM397.213 198.968c64.993-111.775-23.829-210.603-132.891-117.854-83.46-84.564-220.319-32.061-170.721 118.465-124.469 44.386-5.237 257.655 82.658 186.253 85.433 125.723 163.586 52.313 177.715-34.519 115.946 38.090 170.196-110.109 43.239-152.345zM276.014 309.019c-40.121 10.758-81.357-13.058-92.103-53.19s13.066-81.387 53.186-92.145c40.121-10.758 81.36 13.056 92.107 53.19 10.748 40.13-13.065 81.385-53.19 92.145zM720.985 844.017c43.507-59.604-46.244-122.571-62.855-24.999-47.702-61.245-116.161 9.179-40.985 53.582-94.948 48.612 5.302 113.684 43.805 54.863 8.486 98.77 121.305 36.283 58.136-21.601 80.169 13.155 80.014-64.233 1.899-61.846zM676.902 898.060c-12.509 0-22.65-10.141-22.65-22.652s10.141-22.648 22.65-22.648c12.509 0 22.65 10.141 22.65 22.648 0 12.512-10.141 22.652-22.65 22.652zM663.467 150.889c84.324-18.322 14.864-117.902-39.548-47.776-0.224-69.026-105.482-58.356-65.369 25.61h0.002c-68.271-1.417-42.532 93.592 8.703 66.897-26.733 82.521 81.349 95.499 66.934 9.781 64.462 40.623 93.612-24.202 29.278-54.513zM604.828 181.323c-12.509 0-22.65-10.141-22.65-22.652s10.141-22.648 22.65-22.648c12.509 0 22.65 10.141 22.65 22.648 0 12.51-10.141 22.652-22.65 22.652z" - ], - "isMulticolor": false, - "tags": [ - "flowers" - ], - "defaultCode": 59854, - "grid": 0, - "attrs": [] - }, - { - "id": 207, - "paths": [ - "M858.498 129.756l-0.003 0.008c-20.689-17.792-44.376-32.925-70.233-45.751-206.846-102.584-498.32 5.611-651.421 241.626-1.888 2.915-3.324 6.097-5.153 9.019 0.907-0.795 1.675-1.791 2.579-2.578-80.376 113.786-70.253 272.533 31.572 374.358 108.93 108.932 283.047 113.109 397.556 13.531-9.336 13.133-19.8 26.245-31.574 38.013-113.814 113.814-298.559 113.814-412.373 0-35.566-35.568-60.115-77.333-73.452-122.424 5.843 130.993 69.819 245.12 187.502 303.482 206.848 102.584 499.608-5.613 652.707-241.626 133.965-206.512 117.12-443.113-27.706-567.658zM797.683 329.544c-7.352 119.288-137.311 252.906-290.365 298.647-1.888 0.563-3.784 0.86-5.661 1.392l1.918-0.964c-75.562 25.393-147.944-1.41-168.613-67.135-22.11-70.307 22.961-159.517 101.027-204.22-8.735 2.963-17.77 6.5-26.52 10.885-84.611 42.413-166.18 136.458-143.078 209.92 7.22 22.956 20.348 41.152 38.082 54.090-60.408-20.844-96.507-68.94-92.94-136.843 7.352-141.439 166.14-266.217 319.192-311.963 133.92-40.025 244.492 13.479 264.292 104.191l-0.002 0.007c2.828 12.961 3.59 27.083 2.668 41.994zM488.014 364.906c21.252 17.603 13.422 52.632-17.493 78.24s-73.205 32.091-94.455 14.49-13.422-52.632 17.493-78.24c30.915-25.607 73.205-32.091 94.455-14.49z" - ], - "isMulticolor": false, - "tags": [ - "fluffy-swirl" - ], - "defaultCode": 59855, - "grid": 0, - "attrs": [] - }, - { - "id": 208, - "paths": [ - "M924.968 782.124l-119.26 54.932 153.246-335.951-395.463 197.873 152.75-245.083-240.637-417.712h-233.689l381.858 453.981-187.522 297.591 116.352-285.17-466.847-466.403-46.645 0.008v172.448l419.516 362.994-169.655 355.871 461.102-184.126-79.581 233.677 188.596-71.508 134.991 88.946z" - ], - "isMulticolor": false, - "tags": [ - "focused-lightning" - ], - "defaultCode": 59856, - "grid": 0, - "attrs": [] - }, - { - "id": 209, - "paths": [ - "M684.785 801.261c-54.227-38.324-25.045-113.044 5.442-169.204 25.647-47.246 90.967-75.096 125.417-55.206 27.185 15.696 32.957 53.985 18.225 92.16 35.641-19.628 73.17-20.948 94.265 1.699 15.824 16.975 17.776 43.175 9.006 69.834 104.351-106.977 5.675-260.357-116.731-331.031h0.005c-7.477-4.317-15.083-8.264-22.779-11.847 6.769-76.792-42.323-174.374-165.678-257.42-1.443 13.908-3.418 27.483-5.954 40.704 24.561 20.179 47.188 45.302 66.6 76.842-24.888-18.143-50.228-29.911-76.416-36.745-3.154 10.43-6.735 20.594-10.778 30.471 17.734 8.633 35.050 19.403 51.673 32.785-22.697-2.412-44.388-3.341-65.486-3.48-7.876 14.62-16.974 28.483-27.349 41.56-83.594-10.684-167.107-3.017-249.562 22.012-38.651-73.097-150.227-137.908-283.772-158.478 17.649 21.738 32.862 44.024 45.27 66.959 46.875 11.551 95.25 32.526 143.843 67.896-43.421-12.916-82.256-14.951-118.834-8.843 5.898 19.197 9.794 38.864 11.493 59.053l56.751 16.167-56.17 21.972c-1.27 23.996-5.618 48.728-13.344 74.278 19.997 4.54 41.062 4.996 63.814 0.53-26.288 19.855-52.53 32.297-78.335 39.285-7.898 18.521-17.533 37.464-29.016 56.856 125.205-25.269 201.668-63.126 240.645-105.654 54.482 28.141 103.095 61.335 146.952 108.038l-108.409 56.17c51.74 38.107 117.618 56.582 175.799 49.561 16.008 33.157 39.355 66.692 70.011 102.116 76.147 87.985 174.341 104.216 214.556 8.334-30.69 22.51-84.753 21.283-111.155 2.628zM922.771 862.278l-3.528-73.18c-16.571 50.28-59.243 68.656-104.52 83.856l82.264 12.796c4.636 63.916 20.682 96.198 78.88 86.885 23.168-52.431 1.153-91.594-53.096-110.356z" - ], - "isMulticolor": false, - "tags": [ - "food-chain" - ], - "defaultCode": 59857, - "grid": 0, - "attrs": [] - }, - { - "id": 210, - "paths": [ - "M534.638 121.28c-13.411 33.987-46.852 52.633-74.692 41.648s-39.538-47.443-26.128-81.431 46.852-52.633 74.692-41.648 39.538 47.443 26.128 81.431zM678.167 174.733c-24.457 33.014-66.209 43.536-93.252 23.5s-29.14-63.040-4.682-96.054 66.209-43.536 93.252-23.5c27.045 20.034 29.141 63.039 4.682 96.054zM806.152 263.201c-31.687 30.685-77.754 34.517-102.889 8.56s-19.825-71.875 11.864-102.56 77.754-34.517 102.889-8.56 19.824 71.875-11.864 102.56zM924.988 449.631c-55.583 30.91-121.169 19.057-146.49-26.474s-0.788-107.5 54.795-138.41 121.169-19.057 146.49 26.474 0.788 107.5-54.795 138.41zM336.799 255.402c-121.874 109.033-240.595 265.771-280.35 517.274-46.442 293.786 315.457 240.687 279.629 83.771-45.771-200.447 68.134-281.752 215.633-247.902 65.568 15.049 132.868-9.792 171.721-80.747 46.726-85.328-14.805-213.273-125.516-278.784-86.307-51.071-184.751-61.931-261.113 6.385l-0.003 0.003z" - ], - "isMulticolor": false, - "tags": [ - "footprint" - ], - "defaultCode": 59858, - "grid": 0, - "attrs": [] - }, - { - "id": 211, - "paths": [ - "M733.871 787.423h127.091v-58.189c39.435-13.968 78.873-39.009 118.31-73.31-39.562-34.993-78.332-54.504-118.31-63.856v-59.399h-466.406v40.606h-177.566c31.939 77.495 102.326 130.671 177.566 148.345v65.803h116.97c-27.8 70.080-80.057 125.917-139.53 174.092h511.531c-70.902-48.145-123.109-103.925-149.656-174.092zM475.368 498.132l98.423-44.313-42.61-140.473-111.452-109.498-63.882 28.762 33.705 111.135-355.031 159.819 25.049 55.643 355.052-159.828zM721.492 494.797l253.671-101.717-141.387-3.927 95.381-137.166-146.676 78.414 42.894-190.828-152.574 242.71-16.506-65.275-60.353 177.653 125.154-58.644z" - ], - "isMulticolor": false, - "tags": [ - "forging" - ], - "defaultCode": 59859, - "grid": 0, - "attrs": [] - }, - { - "id": 212, - "paths": [ - "M905.595 958.922l-787.185 3.696c0 0 308.756-739.365 302.306-758.605l-92.239-0.449 187.353-142.18 190.416 144.793-100.526 0.449 299.877 752.296z" - ], - "isMulticolor": false, - "tags": [ - "forward" - ], - "defaultCode": 59860, - "grid": 0, - "attrs": [] - }, - { - "id": 213, - "paths": [ - "M861.56 430.224l-122.431 48.23 28.677-83.044-44.431 23.195c-23.368-131.732-40.577-263.462-31.183-395.194-48.714 66.076-90.994 147.336-121.017 229.338h-157.173c-36.961-86.106-85.035-161.378-132.945-236.816 8.384 141.578 3.393 273.881-7.277 404.126l-47.214-24.648 28.677 83.044-122.431-48.23 105.84 107.989-82.379 5.576c61.001 39.079 136.87 64.689 181.129 118.941 55.488 79.19 86.385 158.986 89.352 310.661 45.447 21.237 101.986 20.089 142.947 0 9.709-155.284 29.923-225.237 85.157-308.020 43.925-56.074 121.258-81.875 183.241-121.582l-82.379-5.576 105.84-107.989zM430.833 692.267c5.526-80.801-30.249-127.537-103.638-144.757 32.801-38.122 69.288-33.633 105.47 3.947v0.002c35.977 37.368 29.375 95.164-1.833 140.808zM565.709 692.267c-29.367-45.646-33.643-103.439 3.84-140.808l0.003-0.002c35.947-35.832 70.945-41.55 101.227-8.962l-1.39 6.455c-70.245 18.29-105.893 64.656-103.681 143.317z" - ], - "isMulticolor": false, - "tags": [ - "fox" - ], - "defaultCode": 59861, - "grid": 0, - "attrs": [] - }, - { - "id": 214, - "paths": [ - "M509.272 49.351c-252.502 0-457.193 204.693-457.193 457.187s204.698 457.187 457.193 457.187 457.187-204.685 457.187-457.187c0-252.494-204.686-457.187-457.187-457.187zM509.22 928.798c-233.302 0-422.431-189.131-422.431-422.431s189.129-422.431 422.431-422.431 422.431 189.131 422.431 422.431-189.129 422.431-422.431 422.431zM817.658 540.659l-125.138 33.53-49.336-43.056 24.502-24.502-22.867-22.867 48.39-42.228 123.084 32.332-84.626-65.893 96.512-84.222-120.439 41.212-14.418-108.972-33.602 125.402-62.536 21.399-9.214-34.387-33.618 9.007-12.422-63.249 92.053-92.053-101.86 42.114-24.591-125.225-24.695 125.745-99.021-40.197 89.22 90.104-12.256 62.411-32.302-8.655-9.094 33.942-60.648-20.752-33.568-125.28-14.403 108.865-120.326-41.172 96.492 84.205-84.735 65.979 123.244-32.374 47.032 41.044-23.767 23.767 25.401 25.401-47.976 41.869-125.301-33.573 87.092 66.916-96.254 83.998 121.624-41.616 14.739 106.135 33.511-122.646 58.485-20.012 8.453 31.549 32.317-8.66 12.228 62.269-89.207 90.090 99.007-40.19 24.708 125.82 24.606-125.301 101.845 42.108-92.040-92.040 12.393-63.105 33.632 9.012 8.573-31.995 60.371 20.659 33.546 122.773 14.754-106.245 121.741 41.657-96.273-84.015zM633.988 222.106l-0.005 0.005 0.005-0.002zM633.988 790.789l-0.005-0.002 0.005 0.005z" - ], - "isMulticolor": false, - "tags": [ - "frost-emblem" - ], - "defaultCode": 59862, - "grid": 0, - "attrs": [] - }, - { - "id": 215, - "paths": [ - "M936.564 378.868c-56.462 113.278-247.439 27.499-184.248-94.457 63.414-122.384-18.736-205.345-195.91-208.737 167.971 24.038 105.773 235.814 16.326 265.878-78.995 26.552-119.352-13.36-103.783-73.466 24.905-96.161-50.198-139.996-111.948-125.942 130.080 112.049-74.51 236.643-158.593 114.285-53.038-77.179-46.955-166.651 64.139-208.737h-0.005c-140.888 4.93-200.564 139.804-201.738 208.737-4.395 258.088 306.791 132.41 312.524 257.716 6.239 136.396-200.557 157.633-209.903-10.496-54.994 221.573 118.114 336.909 266.641 298.318l-1.579-0.91-0.002-273.844 237.155-136.92 237.152 136.922 0.002 273.844-237.155 136.92-185.554-107.131c-28.771 46.574-65.588 71.829-103.265 79.778 169.080 96.976 393.933 104.77 518.926-24.489 128.075-132.44 122.355-348.857 40.82-507.269zM766.989 667.85c0 58.034-47.047 105.081-105.081 105.081s-105.081-47.047-105.081-105.081 47.047-105.081 105.081-105.081 105.081 47.047 105.081 105.081z" - ], - "isMulticolor": false, - "tags": [ - "frostfire" - ], - "defaultCode": 59863, - "grid": 0, - "attrs": [] - }, - { - "id": 216, - "paths": [ - "M936.741 732.673l50.974 8.070-30.251-37.237 0.393-0.553h-0.842l-443.917-546.442-136.436 100.287-359.172-207.571v67.325l369.664 213.712 113.114-82.795 323.016 398.817-507.269-80.463 16.326-142.268-314.851-182.224v70.275l116.041 67.095 44.408 212.265 34.671-166.543 50.936 29.45-19.824 169.089 0.603 0.095 45.604 248.109 21.334-116.642 39.831 233.539 56.748-334.394 43.102 234.498 40.603-221.977 35.371 71.929 31.939-65.267 37.592 5.95 44.044 265.512 41.59-251.954 25.555 4.044 48.978 125.797 29.491-76.117 36.114 196.473 35.165-192.261 33.501 46.915z" - ], - "isMulticolor": false, - "tags": [ - "frozen-arrow" - ], - "defaultCode": 59864, - "grid": 0, - "attrs": [] - }, - { - "id": 217, - "paths": [ - "M365.76 660.565l295.864-295.864zM661.624 660.565l-295.864-295.864zM654.252 372.14v-305.528h-282.327v305.528h-304.242v282.327h304.242v304.242h282.328v-304.242h305.528v-282.327h-305.53zM209.838 601.293c-48.97 0-88.667-39.695-88.667-88.664s39.695-88.664 88.667-88.664 88.667 39.695 88.667 88.664-39.697 88.664-88.667 88.664zM513.692 905.146c-48.968 0-88.664-39.695-88.664-88.667s39.695-88.667 88.664-88.667 88.664 39.695 88.664 88.667-39.694 88.667-88.664 88.667zM513.692 297.446c-48.968 0-88.664-39.695-88.664-88.667 0-48.97 39.695-88.665 88.664-88.665s88.664 39.695 88.664 88.665-39.694 88.667-88.664 88.667zM817.538 601.293c-48.97 0-88.667-39.695-88.667-88.664s39.695-88.664 88.667-88.664c48.97 0 88.667 39.695 88.667 88.664s-39.697 88.664-88.667 88.664z" - ], - "isMulticolor": false, - "tags": [ - "gamepad-cross" - ], - "defaultCode": 59865, - "grid": 0, - "attrs": [] - }, - { - "id": 218, - "paths": [ - "M272.004 31.992h29.992l29.992 29.992 29.992-29.992h299.997l29.992 29.992 29.992-29.992h29.992v240.013h-29.992l-29.992-29.992-29.992 29.992h-90.002v689.995c0 29.992-29.992 29.992-29.992 29.992h-60.009c0 0-29.992 0-29.992-29.992v-689.995h-90.002l-29.992-29.992-29.992 29.992h-29.992v-240.013z" - ], - "isMulticolor": false, - "tags": [ - "gavel" - ], - "defaultCode": 59866, - "grid": 0, - "attrs": [] - }, - { - "id": 219, - "paths": [ - "M970.324 649.634l19.147-116.009-42.108-6.949c1.213-37.604-2.566-74.488-10.798-109.929l39.665-14.931-41.423-110.041-40.352 15.19c-17.747-32.17-39.579-61.965-64.905-88.607l28.311-34.499-90.894-74.587-29.375 35.797c-30.745-18.203-64.15-32.725-99.707-42.903l7.933-48.058-116.011-19.149-8.337 50.517c-35.934-0.197-71.137 4.146-104.969 12.564l-18.841-50.052-110.041 41.423 19.752 52.473c-29.973 17.147-57.81 37.86-82.854 61.676l-44.834-36.792-74.587 90.892 46.152 37.873c-17.046 28.806-30.872 59.938-40.913 92.994l-60.038-9.913-19.147 116.009 60.652 10.011c-0.748 34.4 2.658 68.177 9.841 100.763l-57.691 21.716 41.423 110.041 57.17-21.519c16.115 29.998 35.746 57.99 58.448 83.352l-37.855 46.13 90.894 74.587 36.654-44.668c28.725 18.205 59.933 33.129 93.172 44.206l-9.061 54.892 116.011 19.149 8.655-52.434c36.035 1.746 71.456-1.094 105.626-8.063l17.872 47.48 110.041-41.423-17.017-45.208c32.202-16.661 62.165-37.36 89.162-61.514l35.792 29.372 74.587-90.894-34.312-28.156c19.429-30.643 35.122-64.111 46.391-99.858l42.721 7.051zM829.525 700.187c-3.825 6.306-7.833 12.477-12.016 18.507-0.028 0.042-0.057 0.084-0.085 0.124-1.251 1.802-2.524 3.588-3.807 5.366-0.254 0.351-0.504 0.703-0.76 1.054-1.241 1.707-2.496 3.401-3.765 5.083-0.271 0.359-0.545 0.718-0.817 1.077-1.311 1.726-2.633 3.441-3.974 5.142-0.11 0.14-0.224 0.279-0.334 0.419-5.927 7.492-12.139 14.734-18.614 21.708-0.164 0.175-0.324 0.352-0.488 0.528-1.498 1.609-3.014 3.201-4.542 4.781-0.251 0.259-0.501 0.518-0.752 0.775-1.54 1.584-3.090 3.156-4.659 4.711-0.144 0.142-0.287 0.282-0.431 0.423-6.872 6.794-14.005 13.31-21.382 19.526v0c-18.784 15.829-39.136 29.741-60.732 41.49v-0.002c-6.136 3.339-12.377 6.495-18.704 9.478-0.421 0.199-0.839 0.401-1.261 0.598-1.814 0.847-3.638 1.674-5.467 2.492-0.536 0.239-1.072 0.479-1.61 0.717-1.839 0.81-3.683 1.609-5.536 2.389-0.448 0.189-0.897 0.373-1.345 0.56-10.903 4.542-22.050 8.566-33.409 12.037-0.212 0.065-0.423 0.13-0.635 0.195-2.208 0.67-4.425 1.321-6.65 1.949-0.16 0.045-0.321 0.090-0.481 0.135-11.789 3.316-23.788 6.047-35.964 8.162v0c-23.114 4.014-46.852 5.807-70.947 5.188v0c-5.852-0.15-11.727-0.448-17.615-0.88-0.643-0.048-1.285-0.094-1.928-0.145-1.647-0.13-3.296-0.269-4.946-0.423-1.513-0.142-3.027-0.297-4.542-0.458-1.63-0.172-3.261-0.354-4.893-0.548-1.848-0.221-3.697-0.451-5.546-0.7-0.925-0.124-1.851-0.252-2.776-0.383-2.524-0.361-5.048-0.738-7.576-1.153-0.137-0.022-0.274-0.042-0.411-0.063-0.57-0.094-1.134-0.205-1.704-0.302-2.354-0.399-4.701-0.81-7.036-1.253-1.445-0.274-2.878-0.578-4.317-0.869-1.435-0.291-2.873-0.573-4.3-0.879-1.754-0.378-3.496-0.782-5.24-1.183-1.064-0.246-2.132-0.483-3.191-0.737-1.974-0.474-3.937-0.972-5.897-1.477-0.782-0.2-1.567-0.399-2.347-0.605-2.158-0.571-4.305-1.164-6.443-1.774-0.54-0.154-1.081-0.306-1.619-0.461-2.319-0.672-4.627-1.365-6.924-2.080-0.316-0.099-0.631-0.197-0.947-0.296-2.471-0.777-4.93-1.574-7.373-2.4-0.099-0.033-0.197-0.067-0.296-0.1-2.578-0.874-5.142-1.771-7.689-2.698v0.002c-21.76-7.915-42.445-17.782-61.859-29.4l0.002-0.002c-0.388-0.232-0.767-0.473-1.153-0.707-1.911-1.154-3.814-2.319-5.7-3.506-0.939-0.591-1.868-1.196-2.8-1.796-1.356-0.872-2.713-1.746-4.056-2.634-1.034-0.685-2.061-1.378-3.089-2.073-1.211-0.819-2.419-1.644-3.618-2.477-1.082-0.752-2.163-1.507-3.237-2.27-1.109-0.788-2.208-1.587-3.308-2.385-1.121-0.817-2.245-1.629-3.356-2.457-0.966-0.72-1.919-1.455-2.878-2.183-4.667-3.553-9.244-7.21-13.721-10.975-0.511-0.429-1.026-0.854-1.533-1.286-1.46-1.241-2.903-2.499-4.342-3.762-0.501-0.439-1.002-0.879-1.502-1.321-1.485-1.318-2.958-2.648-4.42-3.987-0.369-0.339-0.735-0.678-1.103-1.019-1.587-1.468-3.166-2.945-4.726-4.442-0.015-0.015-0.032-0.030-0.047-0.045-8.835-8.476-17.226-17.381-25.146-26.676v0c-14.615-17.151-27.623-35.625-38.833-55.177v0c-4.752-8.289-9.178-16.775-13.27-25.431-0.149-0.314-0.299-0.628-0.448-0.944-0.914-1.948-1.811-3.906-2.691-5.87-0.155-0.347-0.309-0.697-0.464-1.044-0.899-2.023-1.784-4.054-2.646-6.096-0.038-0.090-0.075-0.182-0.114-0.272-3.74-8.875-7.133-17.914-10.165-27.097-0.050-0.15-0.1-0.299-0.15-0.448-0.708-2.153-1.393-4.313-2.061-6.481-0.087-0.284-0.175-0.57-0.262-0.854-0.665-2.178-1.313-4.363-1.938-6.558-0.035-0.125-0.070-0.252-0.105-0.378-2.671-9.421-4.971-18.978-6.879-28.654v0c-4.301-21.818-6.622-44.227-6.79-67.001-0.052-7.12 0.115-14.278 0.484-21.459 0.037-0.707 0.065-1.412 0.105-2.118 0.099-1.732 0.224-3.466 0.347-5.202 0.084-1.168 0.167-2.335 0.264-3.503 0.124-1.518 0.261-3.039 0.403-4.56 0.137-1.445 0.282-2.892 0.436-4.338 0.14-1.326 0.282-2.653 0.438-3.981 0.209-1.774 0.438-3.551 0.673-5.329 0.139-1.047 0.267-2.093 0.414-3.142 0.403-2.855 0.832-5.713 1.305-8.575 0.459-2.78 0.959-5.543 1.477-8.296 0.155-0.827 0.321-1.65 0.481-2.476 0.394-2.018 0.805-4.028 1.233-6.030 0.175-0.825 0.349-1.652 0.531-2.476 0.58-2.633 1.179-5.255 1.816-7.863 0.022-0.087 0.040-0.175 0.062-0.262 0.655-2.683 1.348-5.347 2.061-8.002 0.217-0.807 0.441-1.61 0.663-2.414 0.535-1.938 1.084-3.869 1.649-5.793 0.239-0.814 0.476-1.627 0.72-2.437 0.745-2.471 1.508-4.931 2.304-7.377 0.050-0.155 0.097-0.314 0.149-0.469 7.138-21.875 16.267-42.706 27.11-62.35v0c1.201-2.177 2.424-4.338 3.667-6.485 0.005-0.008 0.010-0.017 0.015-0.025 6.107-10.544 12.724-20.724 19.802-30.521 0.212-0.294 0.423-0.59 0.636-0.882 1.221-1.679 2.459-3.346 3.707-5.001 0.344-0.456 0.69-0.912 1.037-1.366 1.206-1.585 2.424-3.162 3.655-4.726 0.366-0.463 0.735-0.922 1.103-1.383 3.902-4.903 7.926-9.695 12.066-14.378 0.501-0.566 0.996-1.141 1.5-1.704 1.042-1.164 2.101-2.312 3.157-3.461 0.778-0.849 1.557-1.697 2.344-2.537 0.991-1.057 1.99-2.105 2.992-3.149 0.884-0.922 1.772-1.839 2.664-2.75 0.962-0.982 1.928-1.961 2.9-2.932 0.976-0.974 1.961-1.938 2.948-2.9 0.924-0.902 1.846-1.807 2.78-2.698 1.166-1.114 2.349-2.21 3.53-3.308 0.768-0.713 1.527-1.438 2.3-2.145v0c17.236-15.748 35.95-29.801 55.854-41.964v0.002c3.396-2.075 6.836-4.081 10.298-6.044 0.984-0.558 1.964-1.121 2.953-1.669 1.346-0.747 2.701-1.477 4.056-2.205 0.976-0.526 1.953-1.051 2.933-1.567 1.402-0.738 2.808-1.465 4.22-2.185 0.912-0.464 1.826-0.924 2.741-1.381 1.492-0.745 2.985-1.485 4.487-2.21 0.747-0.359 1.497-0.71 2.245-1.064 8.075-3.825 16.299-7.363 24.661-10.592 0.351-0.135 0.7-0.274 1.051-0.408 2.015-0.77 4.038-1.522 6.067-2.257 0.352-0.127 0.705-0.256 1.057-0.381 2.113-0.758 4.233-1.5 6.361-2.22 0.107-0.037 0.215-0.072 0.322-0.109 11.616-3.912 23.468-7.248 35.514-9.978v0c23.303-5.28 47.331-8.289 71.802-8.82 2.636-0.057 5.279-0.082 7.925-0.082 0.222 0 0.443 0 0.665 0 2.481 0.005 4.966 0.038 7.455 0.094 0.436 0.010 0.87 0.020 1.306 0.032 2.312 0.060 4.627 0.142 6.946 0.247 0.662 0.030 1.323 0.065 1.986 0.099 2.13 0.107 4.261 0.231 6.395 0.376 0.905 0.062 1.811 0.135 2.718 0.204 1.926 0.145 3.852 0.297 5.782 0.474 1.198 0.11 2.397 0.239 3.597 0.362 1.669 0.17 3.338 0.336 5.010 0.528 1.635 0.19 3.274 0.408 4.911 0.62 1.27 0.164 2.539 0.314 3.81 0.491 2.943 0.413 5.89 0.857 8.84 1.345 2.699 0.446 5.382 0.932 8.058 1.435 0.845 0.159 1.689 0.322 2.532 0.486 1.933 0.378 3.857 0.773 5.778 1.181 1.395 0.297 2.786 0.6 4.175 0.912 1.654 0.371 3.304 0.75 4.95 1.143 1.575 0.378 3.146 0.767 4.712 1.164 0.665 0.169 1.328 0.341 1.993 0.513 5.693 1.478 11.327 3.079 16.895 4.809v0c24.285 7.552 47.336 17.512 68.919 29.581v0c1.861 1.041 3.707 2.105 5.546 3.177 0.453 0.264 0.909 0.526 1.361 0.792 1.736 1.021 3.458 2.058 5.173 3.107 0.526 0.321 1.051 0.645 1.574 0.969 1.714 1.061 3.421 2.132 5.115 3.219 0.416 0.267 0.827 0.538 1.241 0.807 7.798 5.050 15.377 10.385 22.722 15.99 0.282 0.215 0.568 0.429 0.852 0.646 1.654 1.27 3.293 2.556 4.921 3.852 0.403 0.321 0.807 0.641 1.208 0.964 1.615 1.296 3.219 2.604 4.811 3.926 0.329 0.274 0.656 0.551 0.986 0.825 9.041 7.567 17.69 15.555 25.922 23.931 0.244 0.249 0.491 0.496 0.735 0.747 1.512 1.547 3.009 3.105 4.49 4.679 0.239 0.254 0.478 0.509 0.717 0.765 1.532 1.632 3.050 3.276 4.55 4.936v0c17.027 18.845 32.061 39.413 44.812 61.368h-0.002c0.119 0.205 0.232 0.414 0.351 0.62 1.204 2.083 2.389 4.178 3.551 6.284 0.503 0.912 0.991 1.833 1.487 2.748 0.78 1.443 1.557 2.887 2.319 4.34 0.558 1.066 1.106 2.138 1.654 3.211 0.668 1.308 1.33 2.621 1.983 3.939 0.573 1.156 1.143 2.315 1.704 3.478 0.59 1.221 1.166 2.449 1.742 3.677 0.585 1.25 1.173 2.496 1.744 3.752 0.484 1.064 0.952 2.138 1.427 3.207 2.395 5.407 4.667 10.875 6.8 16.406 0.215 0.558 0.438 1.114 0.65 1.674 0.698 1.839 1.376 3.687 2.046 5.538 0.205 0.57 0.414 1.139 0.616 1.711 0.683 1.921 1.351 3.849 2.005 5.782 0.142 0.421 0.281 0.844 0.423 1.266 4.589 13.786 8.371 27.897 11.289 42.27v0c5.003 24.648 7.5 50.057 7.198 75.906v0c-0.003 0.322-0.017 0.645-0.020 0.967-0.035 2.389-0.095 4.781-0.177 7.176-0.032 0.944-0.074 1.888-0.114 2.831-0.079 1.881-0.174 3.764-0.281 5.648-0.053 0.929-0.104 1.859-0.165 2.788-0.169 2.588-0.359 5.177-0.585 7.771-0.030 0.352-0.065 0.707-0.097 1.059-0.226 2.507-0.479 5.018-0.758 7.53-0.099 0.897-0.207 1.794-0.314 2.691-0.234 1.976-0.483 3.954-0.748 5.932-0.117 0.869-0.231 1.736-0.354 2.604-0.388 2.735-0.797 5.472-1.25 8.212-0.005 0.028-0.008 0.055-0.013 0.084-0.008 0.055-0.020 0.11-0.028 0.165-0.463 2.798-0.964 5.581-1.488 8.352-0.204 1.074-0.424 2.142-0.638 3.212-0.341 1.722-0.688 3.441-1.052 5.152-0.284 1.33-0.581 2.653-0.879 3.976-0.314 1.398-0.636 2.793-0.966 4.185-0.356 1.5-0.72 2.997-1.094 4.487-0.282 1.126-0.576 2.248-0.869 3.369-0.441 1.689-0.884 3.379-1.348 5.057-0.187 0.677-0.384 1.346-0.575 2.021-1.964 6.944-4.113 13.8-6.461 20.548v0c-8.419 24.214-19.272 47.116-32.227 68.474zM572.673 189.939c-177.865-29.359-345.855 91.027-375.213 268.896-29.359 177.867 91.031 345.853 268.898 375.212s345.855-91.027 375.213-268.896-91.032-345.853-268.898-375.212zM676.548 567.034l-98.58-80.894-208.353 253.897-51.77-42.483 208.353-253.897-132.393-108.643 189.904-66.298 201.77 165.579-108.932 132.739z" - ], - "isMulticolor": false, - "tags": [ - "gear-hammer" - ], - "defaultCode": 59867, - "grid": 0, - "attrs": [] - }, - { - "id": 220, - "paths": [ - "M932.553 493.782l41.989-6.523-16.636-107.089-42.829 6.653c-10.531-35.122-25.617-68.755-44.847-99.986l34.101-27.448-67.952-84.424-34.417 27.701c-25.988-24.671-55.435-46.28-88.007-63.974l16.158-41.727-101.060-39.138-16.167 41.745c-36.061-8.864-72.445-12.711-108.334-11.947l-6.802-43.791-107.089 16.636 6.754 43.477c-35.147 10.135-68.852 24.807-100.205 43.629l-27.212-33.809-84.424 67.952 26.686 33.154c-25.263 26.013-47.386 55.625-65.554 88.423l-38.982-15.096-39.138 101.059 38.17 14.782c-9.343 36.709-13.484 73.78-12.824 110.345l-39.293 6.104 16.636 107.089 38.631-6c10.232 35.912 25.211 70.33 44.498 102.295l-30.117 24.242 67.952 84.424 29.651-23.866c26.616 25.73 56.961 48.2 90.632 66.505l-13.576 35.058 101.060 39.138 13.569-35.038c37.148 9.144 74.643 12.985 111.584 11.924l5.822 37.479 107.089-16.636-5.9-37.98c35.888-10.636 70.243-26.013 102.081-45.716l24.476 30.408 84.424-67.952-24.887-30.92c25.129-26.591 47.046-56.791 64.871-90.231l37.868 14.665 39.138-101.059-38.681-14.979c8.661-36.496 12.251-73.3 11.094-109.558zM514.965 861.186c-71.897-188.301-310.8-247.41-316.429-424.718-6.004-189.024 227.913-225.307 316.429-71.892 88.674-167.467 309.978-105.074 315.501 71.892 5.888 188.648-239.556 236.4-315.501 424.718z" - ], - "isMulticolor": false, - "tags": [ - "gear-heart" - ], - "defaultCode": 59868, - "grid": 0, - "attrs": [] - }, - { - "id": 221, - "paths": [ - "M962.807 387.272l-55.101 95.93c-33.623-14.381-69.49-24.454-106.994-29.415v-110.828h-107.281v110.754c-36.523 4.747-71.54 14.291-104.428 27.949l-54.165-94.392-71.904 40.445-29.668-41.531c9.787-13.599 17.512-28.904 22.642-45.527l108.245-11.845-10.659-108.342-103.576 10.24c-8.088-18.577-19.677-35.449-34.066-49.658l41.374-92.412-98.578-44.114-40.972 91.517c-21.003-1.741-41.518 0.763-60.638 6.831l-57.798-80.916-87.912 64.223 59.489 83.288c-10.006 15.88-17.313 33.787-21.197 53.186l-104.508 11.438 10.658 108.337 110.443-12.086c7.814 14.134 17.759 27.022 29.47 38.182l-46.725 104.359 98.575 44.114 47.106-105.22c16.224 1.056 32.133-0.406 47.304-4.083l68.078 93.254 63.338-46.274 23.311 40.25c-29.369 22.429-55.653 48.699-78.121 78.056l-98.279-56.621-51.309 93.291 96.064 55.805c-14.109 33.804-23.894 69.853-28.639 107.453h-111.743v107.284h112.217c3.318 24.058 8.753 47.401 16.057 69.968h338.109c0 0 0 0 0 0v0c-47.772-21.474-81.058-69.442-81.058-125.217 0-75.808 61.452-137.256 137.256-137.256s137.256 61.448 137.256 137.256c0 55.772-33.286 103.743-81.060 125.217v0c0 0 0 0 0 0h182.708v-590.063l-23.323-12.829zM310.247 388.443c-48.474 2.958-90.172-33.932-93.131-82.404s33.946-90.165 82.419-93.124 90.174 33.939 93.131 82.411c2.96 48.472-33.944 90.159-82.419 93.117z" - ], - "isMulticolor": false, - "tags": [ - "gears" - ], - "defaultCode": 59869, - "grid": 0, - "attrs": [] - }, - { - "id": 222, - "paths": [ - "M920.182 489.584c-26.704-67.744-81.793-53.4-52.56 20.731l3.932 9.973c-54.728 13.314-77.478-10.955-95.693-52.216 7.138-42.507 8.506-85.159 2.753-126.507-2.748-19.732 10.014-30.459 23.676-40.778 16.123-0.127 32.16-4.637 46.601-14.678 19.763 13.482 46.838 9.198 61.418-10.091 15.031-19.889 11.095-48.195-8.797-63.226-1.358-1.026-2.756-1.954-4.185-2.805 62.065-164.79 1.371-214.831-140.433-106.207-1.086-1.001-2.227-1.959-3.428-2.868-19.889-15.033-48.195-11.092-63.226 8.797-14.784 19.561-11.207 47.259 7.843 62.466-9.356 28.654-2.14 57.255 14.191 80.189-0.67 13.367-5.412 24.604-19.899 35.883-18.298 14.256-37.794 32.429-57.239 53.784-44.511-22.663-78.699-58.193-107.913-98.91l4.221-1.784c73.382-31.031 45.056-80.4-22.005-52.044-33.089-78.23-80.696-45.779-52.052 22.007-82.207 34.759-55.964 85.014 22.012 52.044l3.613-1.528c28.477 55.68 66.276 95.838 114.815 125.446-34.213 45.696-65.603 100.397-86.756 159.888-69.782-54.576-134.704-37.399-207.738 19.638l-1.169-1.848c-45.268-71.54-95.466-45.21-47.742 30.211h0.005c-62.183 39.343-41.57 93.167 30.211 47.747 38.929 61.537 90.351 37.13 47.745-30.205l-3.954-6.248c72.839-32.502 126.568-21.84 158.423 41.266-2.357 19.125-3.403 38.478-2.958 57.939-63.060 109.795-166.76 216.57-279.328 149.178-91.864-54.99-142.495-275.289-32.775-326.061-177.431 27.955-143.985 315.803-22.625 403.536 137.589 99.467 353.698 19.478 452.24-134.926 18.412-18.449 36.054-38.581 52.608-60.048 56.26 19.563 94.868 68.996 109.329 132.94l-3.707-0.232c-79.535-5.015-76.232 51.801-3.566 56.394-5.342 84.755 51.766 76.989 56.397 3.545 89.073 5.626 88.062-51.060 3.561-56.394l-6.869-0.431c4.642-95.12-42.064-159.752-104.973-210.886 21.86-38.033 40.098-78.447 53.427-119.84 29.552 34.572 73.048 40.324 131.446 22.196 31.164 76.747 84.357 59.935 51.863-22.466 68.448-27.005 58.279-83.726-20.742-52.568z" - ], - "isMulticolor": false, - "tags": [ - "gecko" - ], - "defaultCode": 59870, - "grid": 0, - "attrs": [] - }, - { - "id": 223, - "paths": [ - "M375.449 594.6v149.938l128.596 74.969 128.595-74.969v-149.94l-128.596-74.967-128.595 74.969zM386.631 741.809l-0.535-138.688 120.617-68.516-120.082 207.204zM915.087 22.586l-61.223 0.003c-13.643 13.643-16.262 34.151-7.87 50.44l-54.416 42.375c-7.561-6.453-17.361-10.357-28.081-10.357-23.908 0-43.29 19.382-43.29 43.292 0 6.882 1.614 13.384 4.47 19.16l-53.544 41.695c-7.821-7.746-18.579-12.534-30.458-12.534-23.908 0-43.29 19.384-43.29 43.292 0 8.032 2.195 15.547 6.007 21.993l-51.442 40.058c-11.025-35.087-75.103-39.71-94.293-9.012l-50.345-37.696c1.809-4.769 2.808-9.938 2.808-15.342 0-23.908-19.382-43.292-43.29-43.292-9.809 0-18.855 3.267-26.115 8.768l-56.118-42.024c1.744-4.694 2.699-9.769 2.699-15.069 0-23.909-19.382-43.292-43.29-43.292-9.704 0-18.663 3.194-25.882 8.588l-59.937-44.879c5.947-15.48 2.694-33.692-9.782-46.169l-61.223 0.003c-16.893 16.893-16.893 44.321 0.003 61.218 15.96 15.96 41.307 16.837 58.31 2.648l59.006 44.182c-2.426 5.406-3.785 11.391-3.785 17.699 0 23.908 19.382 43.289 43.29 43.289 10.726 0 20.533-3.909 28.096-10.37l55.102 41.259c-2.35 5.335-3.667 11.231-3.667 17.435 0 23.908 19.382 43.289 43.29 43.289 10.623 0 20.345-3.832 27.877-10.18l57.521 43.070v84.267l1.619-0.018-207.423 120.077-0.003 298.088 257.457 149.043 257.458-149.043 0.002-298.089-209.342-121.188 1.587-0.018v-70.918l65.396-50.924c6.381 3.703 13.788 5.835 21.698 5.835 23.908 0 43.29-19.381 43.29-43.289 0-4.114-0.586-8.090-1.659-11.86l56.637-44.104c6.978 4.814 15.434 7.641 24.553 7.641 23.908 0 43.29-19.381 43.29-43.289 0-5.302-0.957-10.38-2.703-15.076l56.474-43.977c16.81 11.159 39.714 9.335 54.528-5.477 16.899-16.895 16.899-44.323 0.002-61.219zM666.682 764.634l-162.933 94.901-162.931-94.901 0.002-189.804 162.933-94.901 162.931 94.901-0.002 189.804z" - ], - "isMulticolor": false, - "tags": [ - "gem-pendant" - ], - "defaultCode": 59871, - "grid": 0, - "attrs": [] - }, - { - "id": 224, - "paths": [ - "M995.827 355.497c-59.14-220.982-275.053-355.273-481.965-299.76v0.005c-206.9 55.505-543.395 338.029-484.263 558.995s424.255 395.683 631.16 340.177 394.208-378.436 335.069-599.418zM420.181 169.216c111.312-59.011 229.399-57.267 263.776 3.899 34.373 61.158-27.985 158.573-139.297 217.582s-229.399 57.267-263.776-3.899c-34.377-61.166 27.985-158.571 139.297-217.582zM117.757 486.216c0-41.653 33.767-75.415 75.415-75.415s75.415 33.764 75.415 75.415-33.764 75.415-75.415 75.415-75.415-33.764-75.415-75.415zM638.595 896.431c-110.276 29.586-271.818-15.434-393.166-98.812 272.878 124.019 639.22 23.864 686.872-426.609v0.005c51.841 193.711-112.346 476.761-293.706 525.416z" - ], - "isMulticolor": false, - "tags": [ - "gem" - ], - "defaultCode": 59872, - "grid": 0, - "attrs": [] - }, - { - "id": 225, - "paths": [ - "M80.313 782.907c47.353-13.837 94.841-25.64 143.51-34.066v-479.782c-48.659-8.416-96.157-20.241-143.51-34.066v-180.294c141.117 41.217 267.341 58.629 415.245 58.629 157.325 0 290.753-19.008 439.425-67.293v180.854c-51.913 16.852-103.319 30.523-157.108 40.295v483.523c53.779 9.762 105.205 23.433 157.108 40.295v180.852c-148.682-48.297-282.109-67.293-439.425-67.293-147.915 0-274.128 17.411-415.245 58.64v-180.294zM495.558 726.641c19.423 0 58.764 0.321 77.699 0.944v-437.28c-18.935 0.621-58.276 0.922-77.699 0.922-15.804 0-51.613-0.207-67.128-0.621v436.647c15.515-0.393 51.324-0.611 67.128-0.611v0z" - ], - "isMulticolor": false, - "tags": [ - "gemini" - ], - "defaultCode": 59873, - "grid": 0, - "attrs": [] - }, - { - "id": 226, - "paths": [ - "M982.983 314.794c-8.087-269.267-332.028-364.202-461.829-109.393-129.572-233.424-471.979-178.218-463.19 109.393 8.244 269.781 308.496 378.282 463.19 646.226 154.545-267.68 470.45-359.19 461.829-646.226zM922.863 450.203c-76.259 162.437-287.216 255.452-402.313 450.127-113.676-192.265-310.386-295.276-392.984-450.127h1.539c-0.824-2.096-1.256-4.213-1.256-6.351 0-44.017 177.981-79.702 397.531-79.702s397.531 35.683 397.531 79.702c0 2.138-0.433 4.256-1.256 6.351h1.209zM931.944 226.391c-7.439 32.726-58.48 36.849-114.003 9.209s-94.504-76.576-87.065-109.302 58.48-36.849 114.003-9.209 94.504 76.576 87.065 109.302zM243.974 129.807c-8.449 36.874 35.827 92.010 98.892 123.152s121.039 26.497 129.487-10.377c8.449-36.872-35.827-92.010-98.892-123.152s-121.037-26.495-129.487 10.377z" - ], - "isMulticolor": false, - "tags": [ - "glass-heart" - ], - "defaultCode": 59874, - "grid": 0, - "attrs": [] - }, - { - "id": 227, - "paths": [ - "M610.894 156.203c73.334-56.425 105.21 62.347 61.732 94.318-56.858 41.81-122.758-47.365-61.732-94.318zM552.755 52.022c66.759 16.479 31.934 87.488-6.986 77.057-50.896-13.638-48.567-90.77 6.986-77.057zM933.983 106.808v-0.008c-11.632 0.463-21.457 3.74-26.661 8.117-74.154 62.359 63.832 174.678 46.369 264.299-20.966 107.578-106.484 65.934-159.971 6.956-190.487-210.064-7.581 0.262-38.252 148.376-20.868 100.761-158.207 38.695-223.726 3.478-91.31-49.075-189.65-157.922-290.958-141.421-102.467 16.693-82.156 114.158-16.229 98.533 89.871-21.3 172.647-2.25 180.834 119.397 6.505 96.645-54.982 177.409-167.016 117.982-26.691-14.157-53.255-27.524-95.055 4.639-51.581 39.687-42.833 98.623-9.789 131.734 69.876 47.299 185.648 42.35 287.153 19.498-85.739 57.549-246.685 76.863-334.37 13.001-22.673 6.101-44.299 5.546-56.502 7.587v81.145h696.378c108.574-44.261 166.864-145.274 196.964-246.994 31.096 62.618-0.692 166.486-70.823 246.994h137.295v-850.855c-12.495-26.063-36.256-33.231-55.64-32.457zM608.45 799.246c-96.959 134.535-227.154-33.513-78.445-141.584v-0.005c78.965-57.384 305.311-56.888 302.902 73.287-2.090 113.046-173.779-2.016-224.456 68.302zM905.47 598.96c-79.682 33.214-139.107-74.060-53.086-111.915 103.369-45.487 114.016 86.515 53.086 111.915z" - ], - "isMulticolor": false, - "tags": [ - "gloop" - ], - "defaultCode": 59875, - "grid": 0, - "attrs": [] - }, - { - "id": 228, - "paths": [ - "M372.855 615.854l-0.044-0.023-0.166-0.087zM981.472 515.134l-70.618-186.845-256.714-139.547-531.958 283.564-77.799 207.847 313.593 166.863 5.142-226.137-243.96-139.308 20.923 11.075-11.943-6.867 42.637 22.662-38.768-22.662 240.847 130.073 518.569-268.030-83.003 45.561 97.176-49.634-192.338 101.87-333.891 183.276-21.392 218.12 623.496-331.883zM383.217 550.577l-140.449-74.936 136.6 42.238 418.244-185.59-414.395 218.288z" - ], - "isMulticolor": false, - "tags": [ - "gold-bar" - ], - "defaultCode": 59876, - "grid": 0, - "attrs": [] - }, - { - "id": 229, - "paths": [ - "M471.18 833.618l518.117 157.405-157.395-518.122c-168.275 315.262-174.843 16.212-271.375-55.628-4.996-9.864-11.59-19.125-19.834-27.369-39.437-39.437-101.949-41.697-144.048-6.811l-11.715-11.658c4.704-7.41 7.44-16.192 7.44-25.62 0-26.444-21.436-47.881-47.879-47.881-9.51 0-18.364 2.785-25.814 7.564l-51.801-51.552c4.839-7.482 7.661-16.391 7.661-25.964 0-26.444-21.436-47.881-47.879-47.881-9.657 0-18.639 2.868-26.16 7.786l-52.675-52.423c4.978-7.552 7.883-16.591 7.883-26.312 0-26.444-21.436-47.881-47.879-47.881-9.804 0-18.916 2.952-26.507 8.008l-37.851-37.669-14.141 14.209 37.995 37.813c-4.666 7.389-7.375 16.137-7.375 25.521 0 26.444 21.432 47.881 47.879 47.881 9.467 0 18.285-2.76 25.715-7.502l52.835 52.581c-4.801 7.462-7.599 16.336-7.599 25.867 0 26.444 21.432 47.881 47.879 47.881 9.615 0 18.561-2.845 26.063-7.724l51.711 51.464c-4.938 7.532-7.819 16.534-7.819 26.213 0 26.444 21.432 47.881 47.879 47.881 9.762 0 18.836-2.928 26.407-7.946l11.561 11.506c-35.015 42.101-32.798 104.714 6.685 144.195 7.5 7.5 15.844 13.633 24.716 18.445 68.673 98.788 375.116 104.091 57.319 273.722zM458.802 418.091c0 0.002-0.002 0.002 0 0 0.875-0.1 1.759-0.177 2.649-0.234 0.037-0.002 0.075-0.007 0.112-0.008 0.912-0.055 1.831-0.085 2.758-0.085 4.131 0 8.142 0.523 11.966 1.507 6.884 1.771 13.17 5.035 18.49 9.426 0.591 0.488 1.171 0.989 1.737 1.505 1.134 1.031 2.218 2.115 3.247 3.249 0.515 0.566 1.017 1.146 1.505 1.737 6.831 8.277 10.933 18.888 10.933 30.456 0 9.278-2.646 17.933-7.213 25.268l-66.127-65.81c5.903-3.715 12.674-6.176 19.942-7.011zM491.081 505.355c-1.271 0.859-2.584 1.657-3.939 2.392-1.356 0.737-2.753 1.41-4.185 2.016-5.728 2.422-12.026 3.764-18.636 3.764-4.96 0-9.741-0.753-14.239-2.153-6.747-2.098-12.854-5.65-17.956-10.287-0.566-0.515-1.121-1.044-1.662-1.585-8.665-8.665-14.022-20.635-14.022-33.857 0-0.005 0-0.010 0-0.013 0-0.957 0.033-1.908 0.092-2.851 0.003-0.063 0.010-0.127 0.015-0.19 0.062-0.917 0.144-1.827 0.254-2.731 0.919-7.621 3.618-14.692 7.684-20.777l66.593 66.274zM604.489 606.682c106.289 77.401 185.884 57.651 207.677-9.206v-0.005l94.986 311.891-311.887-94.995c66.866-21.806 86.621-101.403 9.224-207.685z" - ], - "isMulticolor": false, - "tags": [ - "grappling-hook" - ], - "defaultCode": 59877, - "grid": 0, - "attrs": [] - }, - { - "id": 230, - "paths": [ - "M35.942 986.376l72.582-659.722c13.434 214.89 8.159 462.883 70.997 590.375 22.373-169.575 31.363-335.812 21.090-497.208 30.401 143.146 70.97 282.898 78.808 433.571 14.765-111.688 25.293-222.676 63.493-338.267-1.515 130.167-34.265 249.393 25.313 314.426 28.817-101.854 57.887-203.467 62.813-329.222 42.47 123.521 36.627 271.196 49.817 409.371 16.807-135.898 30.51-514.838 93.662-635.303-6.207 249.552-7.711 447.149 54.706 547.566 61.694-77.219 67.023-228.507 68.448-372.073 43.553 123.296 72.796 263.769 75.591 435.968 17.224-143.676 37.273-287.35 86.639-431.015-11.478 176.292-2.564 313.387 38.987 387.707 27.473-110.919 50.924-221.837 58.144-332.777 36.78 165.29 25.957 318.659 33.358 476.601h-954.447z" - ], - "isMulticolor": false, - "tags": [ - "grass-patch" - ], - "defaultCode": 59878, - "grid": 0, - "attrs": [] - }, - { - "id": 231, - "paths": [ - "M726.288 851.606c-26.036-49.458-53.704-99.684-83.343-149.521 50.567-179.893 129.493-385.592 312.911-638.745-182.661 121.542-318.549 304.806-411.845 486.328-116.211-162.794-259.526-307.088-443.748-386.918 144.486 163.155 284.779 361.698 375.718 536.609-20.54 51.594-37.507 101.501-51.003 148.139-23.136-170.189-149.572-342.419-279.215-347.427 136.56 137.117 226.040 353.031 149.863 469.411h100.292c-0.79 4.377-1.549 8.707-2.253 12.96h178.014c1.291-4.788 2.568-9.594 3.835-14.408 0.683 4.704 1.301 9.358 1.777 13.902h215.354c-1.933-3.894-3.879-7.806-5.83-11.723h89.419c-47.259-133.748-21.614-303.901 22.969-498.872-101.809 91.767-153.037 228.18-172.916 380.265zM84.187 664.703c99.234 151.482 115.508 233.883 76.641 304.313l126.34-0.002c-24.519-134.797-58.876-217.673-202.981-304.312z" - ], - "isMulticolor": false, - "tags": [ - "grass" - ], - "defaultCode": 59879, - "grid": 0, - "attrs": [] - }, - { - "id": 232, - "paths": [ - "M761.014 253.514l32.098 8.601 38.458-143.524-338.166-90.611-14.244 53.159c-193.775 1.365-342.253 254.66-398.378 464.123l22.715 114.718c95.441-284.582 229.899-453.44 356-487.255l47.567 12.746c-122.339 37.103-233.803 160.486-278.465 327.167-44.971 167.836-9.345 331.53 79.388 424.507l76.87 20.597c1.482 4.053 3.045 7.946 4.689 11.675l2.604-9.72 71.192 19.077-2.604 9.72c3.289-2.405 6.59-4.998 9.899-7.766l86.945 23.296c123.334-36.154 236.035-160.105 281.005-327.941 44.663-166.683 9.822-329.269-77.573-422.57z" - ], - "isMulticolor": false, - "tags": [ - "grenade" - ], - "defaultCode": 59880, - "grid": 0, - "attrs": [] - }, - { - "id": 233, - "paths": [ - "M534.695 32.895l-128.241 100.93 150.844 319.186 159.647-384.775-182.25-35.341zM57.521 684.171l32.958-89.168 310.325 6.638-343.284 82.53zM617.997 465.978l287.961-269.576-51.638-80.128-122.867 60.541-113.457 289.162zM281.136 36.817l224.094 445.353-314.142-427.085 90.049-18.268zM59.689 297.191l-22.665 117.098 389.782 117.062-202.172-163.646-26.442 61.697-138.502-132.211zM88.308 56.47l362.441 433.942-415.076-360.371 52.635-73.571zM962.61 206.068l-127.815 166.057 148.231-76.631-20.417-89.425zM39.662 468.882l209.728 75.97-207.934 3.628-1.796-79.595 0.002-0.003zM813.629 435.806l53.497 124.824-32.651 127.106-67.636-3.496-92.011 99.34 66.356 70.915-211.068 5.828-23.323-30.319-120.114-44.313-36.151 31.488-95.199-119.803-234.658 109.941v195.442h982.373v-655.697z" - ], - "isMulticolor": false, - "tags": [ - "groundbreaker" - ], - "defaultCode": 59881, - "grid": 0, - "attrs": [] - }, - { - "id": 234, - "paths": [ - "M632.236 729.158l-18.629 250.061h292.602l-57.307-185.374h-78.584v-376.692l122.113-151.378v-221.881h-128.636v104.655h-78.302v-104.655h-130.035v104.655h-76.9v-104.655h-130.035v104.655h-76.9v-104.655h-128.65v221.879l122.113 151.378v376.693h-78.577l-57.306 185.374h301.707l-16.479-250.061h-79.344c-13.932-74.099-10.975-152.077 10.888-212.371 0.58-1.6 1.169-3.191 1.776-4.764 0.003-0.010 0.008-0.022 0.013-0.032 4.545-11.789 9.844-22.85 15.903-33.029 0.139-0.234 0.274-0.473 0.414-0.705 0.68-1.129 1.375-2.24 2.073-3.348 0.236-0.373 0.464-0.752 0.702-1.123 0.65-1.014 1.315-2.008 1.981-3.002 0.299-0.446 0.593-0.899 0.895-1.341 0.636-0.93 1.286-1.844 1.936-2.756 0.347-0.488 0.692-0.981 1.042-1.463 0.626-0.86 1.268-1.706 1.908-2.549 0.393-0.516 0.782-1.037 1.178-1.547 0.625-0.803 1.261-1.59 1.898-2.377 0.428-0.528 0.854-1.059 1.286-1.58 0.626-0.753 1.265-1.493 1.903-2.232 0.463-0.535 0.924-1.071 1.392-1.597 0.628-0.705 1.265-1.398 1.903-2.090 0.496-0.536 0.992-1.072 1.495-1.6 0.631-0.662 1.27-1.313 1.911-1.961 0.528-0.533 1.056-1.062 1.59-1.585 0.638-0.623 1.281-1.236 1.929-1.844 0.555-0.523 1.113-1.041 1.675-1.552 0.645-0.586 1.296-1.164 1.951-1.737 0.585-0.511 1.173-1.016 1.764-1.515 0.651-0.55 1.306-1.092 1.968-1.627 0.613-0.498 1.231-0.987 1.854-1.472 0.658-0.513 1.32-1.022 1.986-1.522 0.643-0.483 1.293-0.956 1.944-1.425 0.663-0.478 1.33-0.952 2.001-1.415 0.672-0.464 1.351-0.917 2.033-1.368 0.672-0.444 1.345-0.887 2.025-1.318 0.7-0.443 1.408-0.874 2.116-1.301 0.68-0.411 1.36-0.824 2.048-1.221 0.728-0.421 1.467-0.829 2.207-1.234 0.685-0.378 1.37-0.757 2.065-1.121 0.762-0.399 1.532-0.783 2.304-1.166 0.69-0.344 1.378-0.692 2.075-1.022 0.797-0.378 1.605-0.737 2.412-1.098 0.688-0.307 1.375-0.621 2.071-0.917 0.837-0.356 1.687-0.688 2.534-1.026 0.687-0.272 1.368-0.553 2.063-0.815 0.879-0.331 1.771-0.636 2.661-0.947 0.682-0.239 1.356-0.486 2.045-0.713 0.934-0.307 1.884-0.59 2.831-0.875 0.66-0.2 1.313-0.411 1.98-0.601 1.011-0.287 2.040-0.545 3.064-0.809 0.621-0.159 1.234-0.332 1.863-0.483 1.161-0.279 2.34-0.525 3.52-0.772 0.506-0.105 1.002-0.227 1.512-0.327 1.699-0.334 3.414-0.638 5.15-0.907-9.106-11.424-16.586-25.069-21.796-40.252h-0.003c-5.225-15.228-8.167-32.005-8.167-49.645 0-69.572 44.283-125.715 98.668-125.715 3.401 0 6.921-0.525 10.232 0h0.005c49.663 6.45 88.435 60.484 88.435 125.715 0 17.69-2.983 34.443-8.252 49.645v0c-3.408 9.832-7.774 19.013-12.919 27.371-0.037 0.060-0.070 0.122-0.107 0.182-0.957 1.549-1.946 3.060-2.957 4.55-0.089 0.13-0.17 0.267-0.259 0.396-1.016 1.488-2.065 2.94-3.13 4.368-0.085 0.114-0.165 0.236-0.252 0.349-1.156 1.535-2.34 3.035-3.551 4.497 0 0 0 0 0.002 0 0 0 0 0.002-0.002 0.002 0.282 0.053 0.561 0.12 0.844 0.175 1.239 0.242 2.474 0.494 3.698 0.775 0.606 0.139 1.204 0.297 1.807 0.446 0.905 0.222 1.809 0.441 2.706 0.683 0.658 0.179 1.31 0.373 1.963 0.561 0.829 0.239 1.655 0.478 2.476 0.735 0.673 0.21 1.34 0.434 2.006 0.656 0.792 0.262 1.58 0.53 2.364 0.809 0.672 0.239 1.338 0.488 2.005 0.738 0.768 0.289 1.535 0.586 2.297 0.892 0.663 0.266 1.323 0.536 1.981 0.814 0.757 0.319 1.507 0.648 2.255 0.982 0.648 0.289 1.296 0.58 1.939 0.88 0.748 0.351 1.49 0.713 2.232 1.079 0.63 0.311 1.263 0.618 1.888 0.939 0.75 0.386 1.492 0.79 2.233 1.191 0.603 0.326 1.208 0.643 1.806 0.979 0.803 0.451 1.595 0.925 2.389 1.395 0.523 0.309 1.051 0.606 1.569 0.924 1.265 0.773 2.517 1.57 3.759 2.39 0.56 0.369 1.108 0.758 1.66 1.138 0.713 0.488 1.428 0.971 2.133 1.472 0.605 0.431 1.199 0.879 1.797 1.321 0.641 0.473 1.285 0.944 1.919 1.43 0.611 0.469 1.216 0.95 1.821 1.432 0.608 0.483 1.216 0.966 1.817 1.458 0.61 0.501 1.213 1.011 1.816 1.523 0.583 0.496 1.164 0.994 1.741 1.5 0.605 0.531 1.204 1.067 1.802 1.61 0.561 0.509 1.119 1.026 1.675 1.547 0.596 0.56 1.191 1.121 1.781 1.692 0.541 0.525 1.077 1.057 1.614 1.592 0.59 0.588 1.179 1.178 1.762 1.777 0.518 0.533 1.027 1.077 1.539 1.62 0.586 0.621 1.174 1.239 1.752 1.874 0.486 0.533 0.962 1.079 1.443 1.62 0.59 0.665 1.184 1.323 1.766 2 0.378 0.438 0.743 0.89 1.118 1.335 1.285 1.527 2.551 3.084 3.794 4.671 0.352 0.449 0.712 0.892 1.061 1.346 0.588 0.765 1.164 1.549 1.742 2.329 0.404 0.545 0.812 1.082 1.211 1.632 0.56 0.772 1.109 1.559 1.66 2.342 0.404 0.575 0.809 1.148 1.208 1.729 0.541 0.79 1.076 1.592 1.609 2.394 0.393 0.591 0.785 1.184 1.174 1.782 0.526 0.814 1.047 1.634 1.565 2.459 0.379 0.603 0.757 1.209 1.129 1.821 0.515 0.839 1.026 1.682 1.53 2.534 0.361 0.608 0.718 1.221 1.074 1.836 0.504 0.87 1.007 1.744 1.503 2.626 0.337 0.603 0.67 1.213 1.004 1.821 0.499 0.912 1.001 1.822 1.49 2.746 0.301 0.568 0.595 1.143 0.892 1.716 0.509 0.981 1.021 1.959 1.518 2.953 0.209 0.416 0.409 0.84 0.616 1.258 1.298 2.631 2.564 5.297 3.784 8.015l0.002-0.002c27.030 60.264 34.382 141.506 17.72 221.752h-82.994z" - ], - "isMulticolor": false, - "tags": [ - "guarded-tower" - ], - "defaultCode": 59882, - "grid": 0, - "attrs": [] - }, - { - "id": 235, - "paths": [ - "M318.23 61.326v188.067l409.831-101.959v-86.11c0 0.002-409.831 0.002-409.831 0.002zM728.061 183.75l-409.831 101.959v89.978l409.831-103.143v-88.794zM760.321 61.472h55.473v895.444h-55.473v-895.444zM228.106 61.472h55.473v895.444h-55.473v-895.444zM318.23 742.213v90.291h135.216c7.629-35.1 37.004-61.275 72.069-61.275s64.377 26.178 72.007 61.275h130.537v-88.293l-409.831-1.998zM318.23 867.757v87.606h409.831v-87.606h-130.287c-7.323 35.546-36.897 62.148-72.256 62.148s-64.931-26.606-72.256-62.148h-135.031z" - ], - "isMulticolor": false, - "tags": [ - "guillotine" - ], - "defaultCode": 59883, - "grid": 0, - "attrs": [] - }, - { - "id": 236, - "paths": [ - "M836.052 577.31c113.215-144.678 175.876-331.088 166.125-537.42l-0.005 0.003c-137.921 152.207-415.572 109.812-529.49-4.118l-149.242 65.003 96.393 96.39-120.010 119.723-96.246-96.243-56.071 140.306c17.194 17.193 32.775 38.105 46.366 61.635l-153.978 153.608v177.252l202.196-201.786c24.626 117.75 6.269 250.715-81.546 329.858 184.891 5.743 353.201-43.798 489.951-133.609l181.92 11.196 3.637-181.799zM388.492 405.559l119.988-119.745 43.551 43.549c33.074 33.062 33.074 86.799-0.003 119.875s-86.794 33.067-119.863-0.008l-43.673-43.671z" - ], - "isMulticolor": false, - "tags": [ - "halberd" - ], - "defaultCode": 59884, - "grid": 0, - "attrs": [] - }, - { - "id": 237, - "paths": [ - "M936.375 637.912l-45.89 26.495-64.139-111.091 80.224-46.319-58.201-100.806-80.224 46.319-65.407-113.288 45.89-26.495-62.979-109.080-16.222 9.365c-74.451-126.366-158.441-174.321-203.828-188.516h-85.395c105.216 37.759 182.095 110.263 237.636 218.297l-15.216 8.785c-96.249-111.698-222.303-194.924-359.797-227.082h-204.050c173.412 27.675 321.336 132.794 426.148 306.584l-3.012 1.739c-85.911-84.89-174.118-158.555-273.273-209.693 65.703 46.103 124.763 109.608 181.681 189.168-102.293-102.283-206.696-187.006-334.031-229.884v70.534c115.386 31.929 227.366 117.837 316.68 242.775l-14.994 8.656 62.979 109.080 45.885-26.492 65.407 113.288-371.077 214.247-9.084-15.736-104.122 60.115 76.371 132.276 104.122-60.115-9.084-15.736 371.079-214.245 64.139 111.091-45.885 26.492 62.979 109.080 347.671-200.729-62.98-109.079zM346.374 105.327c83.425 34.447 158.555 98.914 198.441 179.628l-22.747 13.133-175.694-192.761z" - ], - "isMulticolor": false, - "tags": [ - "hammer-drop" - ], - "defaultCode": 59885, - "grid": 0, - "attrs": [] - }, - { - "id": 238, - "paths": [ - "M908.6 233.485l-136.125-20.49 39.697-52.466-164.665-125.696-41.844 55.291c-68.147-40.258-138.278-57.66-190.048-52.366l0.008 0.045c-7.397 0.71-14.415 2.496-21.001 4.144-20.677 5.194-36.749 14.677-46.885 28.079l173.173 132.138-38.623 51.055 32.544 24.842c-175.114 215.419-375.756 400.022-488.622 648.708l99.201 75.088c212.64-184.728 326.649-414.144 490.772-646.438l30.77 23.487 39.697-52.466 56.731 125.422 85.081 64.365c104.533-43.94 151.101-121.687 165.223-218.358l-85.084-64.383z" - ], - "isMulticolor": false, - "tags": [ - "hammer" - ], - "defaultCode": 59886, - "grid": 0, - "attrs": [] - }, - { - "id": 239, - "paths": [ - "M511.992 31.992c-265.085 0-480 214.915-480 480s214.915 480 480 480 480-214.915 480-480-214.889-480-480-480zM511.992 152.010c198.827 0 360.006 161.18 360.006 360.006s-161.18 360.006-360.006 360.006-360.006-161.18-360.006-360.006c0.025-198.852 161.205-360.006 360.006-360.006zM752.004 362.006c0 0-40.483 85.308-51.451 128.979-14.331 57.123 5.873 87.994-14.958 143.36-9.010 16.238 19.351 41.663 18.723 56.471-0.552 12.499-49.518 39.078-60.285 44.424-10.767 5.371-74.642 29.214-92.963 29.289-19.376 0.1-18.547-42.541-51.376-42.566-48.138-0.050-173.704-36.769-173.704-36.769-18.999-4.894-53.986-2.008-53.986-23.241s24.872-36.744 46.958-36.794l87.040 7.63c21.133-1.33 43.294-13.704 43.972-41.362-0.351-40.935-4.392-72.358-25.173-105.587l-80.665-125.867c-4.819-10.014-5.973-27.106 7.981-34.736s29.791 3.715 35.213 13.578l90.102 122.579c9.613 8.96 26.729 10.667 25.274-8.383l-39.78-182.413c-2.485-12.951 4.091-28.662 19.1-28.662 19.677 0 31.799 7.504 31.423 19.426l43.746 179.978c3.413 8.759 15.536 7.58 18.798-0.502l12.474-175.034c0.627-5.572 7.931-15.31 21.911-13.277s22.036 16.991 20.555 22.789l-4.041 172.925c2.836 15.335 14.883 17.569 24.27 9.010l61.214-109.478c3.715-9.186 18.296-11.093 26.704-7.454 7.805 5.17 12.925 12.022 12.925 21.685v0z" - ], - "isMulticolor": false, - "tags": [ - "hand-emblem" - ], - "defaultCode": 59887, - "grid": 0, - "attrs": [] - }, - { - "id": 240, - "paths": [ - "M858.576 68.757l-606.18 487.526-24.748-25.283-190.688 138.833c31.966 118.607 107.903 209.999 194.941 294.519l166.847-183.7-121.981-131.845 5.346-16.077 91.407 114.232 74.812-79.792 11.458-55.785 52.966-12.926 8.13-49.525 48.282-10.649 3.189-44.247 52.394-15.034 6.030-41.496 44.167-12.061 12.953-43.075 43.379-17.004 12.485-36.503 34.966-14.117 8.416-32.247 35.013-14.057 7.011-30.942 34.452-13.28 7.716-34.303 31.602-7.624 5.001-34.323 28.938-1.883 33.734-35.982-112.037-41.349zM314.796 780.814l-75.537 80.888c-9.764-80.029-44.837-141.355-115.381-176.452l63.577-42.929 127.342 138.494z" - ], - "isMulticolor": false, - "tags": [ - "hand-saw" - ], - "defaultCode": 59888, - "grid": 0, - "attrs": [] - }, - { - "id": 241, - "paths": [ - "M991.993 272.003c0 0-80.966 170.642-102.877 257.983-28.662 114.247 4.166 200.584-37.497 311.367-72.006 129.933-76.875 150.94-339.628 150.664-96.276-0.1-372.029-73.512-372.029-73.512-38.024-9.763-107.947-4.016-107.947-46.482s49.744-73.462 93.942-73.588l174.055 15.285c42.29-2.66 86.563-27.407 87.919-82.723-0.703-81.845-8.809-144.716-50.347-211.201l-161.356-251.734c-9.638-20.028-11.922-54.212 15.962-69.472s59.583 7.429 70.4 27.156l180.204 245.133c19.25 17.895 53.484 21.358 50.548-16.766l-79.586-364.826c-4.944-25.926 8.207-57.299 38.199-57.299 39.379 0 63.599 15.034 62.821 38.827l87.492 359.957c6.852 17.518 31.097 15.184 37.622-0.979l24.922-350.043c1.28-11.169 15.837-30.62 43.796-26.579 27.959 4.066 44.072 34.008 41.111 45.578l-8.082 345.877c5.672 30.67 29.766 35.137 48.54 18.020l122.454-218.981c7.429-18.372 36.568-22.187 53.434-14.908 15.711 10.24 25.926 23.944 25.926 43.244v0z" - ], - "isMulticolor": false, - "tags": [ - "hand" - ], - "defaultCode": 59889, - "grid": 0, - "attrs": [] - }, - { - "id": 242, - "paths": [ - "M969.432 504.515l-25.236 9.231c-5.1-61.076-24.386-124.138-57.738-184.504l-50.216 35.277c-45.265-80.041-105.893-160.198-180.303-234.606-54.939 104.49-119.958 196.75-194.401 277.441l-365.947-367.050h-65.304v62.972l367.887 367.887c-83.706 78.252-177.651 143.881-281.101 197.62 68.695 68.695 142.291 125.646 216.173 169.608l-36.993 52.643c68.885 38.065 141.285 57.803 210.237 59.036l-10.030 27.414c105.968 26.275 208.742 7.958 280.040-48.485l-0.020-0.013c-25.318 6.044-53.557 8.727-83.769 7.936-117.391-38.526-259.465-130.421-390.306-261.265l132.911-132.91 101.794 77.582-31.026 31.029 157.085 82.445-23.712 23.716 221.443 116.218-116.233-221.438-24.887 24.888-82.451-157.085-29.84 29.843-77.578-101.789 132.913-132.911c136.6 136.6 230.781 285.454 266.063 405.668-0.6 22.663-3.264 44.017-7.946 63.62l0.015 0.028c56.429-71.309 74.74-174.078 48.477-280.046zM117.070 668.784l0.003-0.002-0.003-0.003z" - ], - "isMulticolor": false, - "tags": [ - "harpoon-trident" - ], - "defaultCode": 59890, - "grid": 0, - "attrs": [] - }, - { - "id": 243, - "paths": [ - "M391.998 31.984c-33.242 0-60.003 26.761-60.003 60.003v240h-240c-33.242 0-60.003 26.761-60.003 60.003v240c0 33.242 26.761 60.003 60.003 60.003h240v240c0 33.242 26.761 60.003 60.003 60.003h240c33.242 0 60.003-26.761 60.003-60.003v-240h240c33.242 0 60.003-26.761 60.003-60.003v-240c0-33.242-26.761-60.003-60.003-60.003h-240v-240c0-33.242-26.761-60.003-60.003-60.003h-240zM391.998 301.989h240l-120 120-120-120zM391.998 451.987h240l-120 120-120-120zM391.998 601.986h240l-120 120-120-120z" - ], - "isMulticolor": false, - "tags": [ - "health-decrease" - ], - "defaultCode": 59891, - "grid": 0, - "attrs": [] - }, - { - "id": 244, - "paths": [ - "M391.998 991.986c-33.242 0-60.003-26.761-60.003-60.003v-240h-240c-33.242 0-60.003-26.761-60.003-60.003v-240c0-33.242 26.761-60.003 60.003-60.003h240v-240c0-33.242 26.761-60.003 60.003-60.003h240c33.242 0 60.003 26.761 60.003 60.003v240h240c33.242 0 60.003 26.761 60.003 60.003v240c0 33.242-26.761 60.003-60.003 60.003h-240v240c0 33.242-26.761 60.003-60.003 60.003h-240zM391.998 721.988h240l-120-120-120 120zM391.998 571.99h240l-120-120-120 120zM391.998 421.985h240l-120-120-120 120z" - ], - "isMulticolor": false, - "tags": [ - "health-increase" - ], - "defaultCode": 59892, - "grid": 0, - "attrs": [] - }, - { - "id": 245, - "paths": [ - "M932.004 331.985h-239.999v-239.994c0-33.136-26.862-60.003-60.003-60.003h-240.001c-33.141 0-60.003 26.867-60.003 60.003v239.994h-239.994c-33.141 0-60.003 26.867-60.003 60.003v240.001c0 33.141 26.867 60.003 60.003 60.003h239.994v240.001c0 33.141 26.867 60.003 60.003 60.003h240.001c33.141 0 60.003-26.867 60.003-60.003v-240.001h240.001c33.136 0 59.998-26.862 60.003-60.003v-240.001c0-33.141-26.868-60.003-60.004-60.003z" - ], - "isMulticolor": false, - "tags": [ - "health" - ], - "defaultCode": 59893, - "grid": 0, - "attrs": [] - }, - { - "id": 246, - "paths": [ - "M737.706 315.048l-56.004-15.001 23.273-86.858 72.133 19.327 32.614-121.724-318.005-85.209-32.618 121.724 70.225 18.816-23.275 86.863-54.731-14.663c-75.865-20.33-153.632 23.5-173.956 99.358l-99.589 371.664c-20.326 75.863 24.766 153.974 100.631 174.295l286.388 76.737c75.865 20.33 152.698-25.109 173.028-100.975l99.585-371.659c20.325-75.861-23.836-152.361-99.699-172.695zM720.087 604.075c-32.349 106.828-188.092 103.65-262.759 206.3-15.751-126.862-158.064-196.060-123.714-309.731 32.233-106.651 177.745-108.34 204.675 7.94 79.14-78.731 216.286-18.394 181.798 95.491z" - ], - "isMulticolor": false, - "tags": [ - "heart-bottle" - ], - "defaultCode": 59894, - "grid": 0, - "attrs": [] - }, - { - "id": 247, - "paths": [ - "M898.641 981.291l-57.307-185.374h-78.582v-376.693l122.112-151.377v-221.879h-128.636v104.655h-78.302v-104.655h-130.035v104.655h-76.9v-104.655h-130.035v104.655h-76.9v-104.655h-128.65v221.879l122.115 151.38v376.69h-78.577l-57.307 185.374h777.006zM488.483 374.051c0.834 0.927 1.659 1.869 2.477 2.828 0.226 0.266 0.449 0.536 0.675 0.803 0.814 0.969 1.624 1.944 2.422 2.947 0.067 0.084 0.132 0.172 0.199 0.257 1.425 1.799 2.816 3.663 4.186 5.571 0.471 0.656 0.945 1.305 1.408 1.973 0.476 0.685 0.942 1.388 1.41 2.086 0.575 0.857 1.146 1.719 1.709 2.598 0.401 0.623 0.797 1.251 1.193 1.884 0.662 1.064 1.315 2.145 1.961 3.239 0.294 0.498 0.591 0.989 0.882 1.493 0.945 1.639 1.876 3.301 2.783 5.005 0 0 0-0.002 0.002-0.002 0 0 0 0.002 0 0.002 0.11-0.189 0.226-0.369 0.336-0.558 0.812-1.385 1.637-2.751 2.481-4.093 0.398-0.631 0.809-1.245 1.213-1.866 0.57-0.877 1.141-1.756 1.724-2.614 0.499-0.733 1.009-1.452 1.517-2.17 0.496-0.703 0.994-1.405 1.5-2.095 0.581-0.793 1.171-1.577 1.766-2.352 0.433-0.566 0.869-1.129 1.308-1.687 0.668-0.847 1.341-1.689 2.023-2.514 0.349-0.423 0.702-0.839 1.054-1.255 0.778-0.922 1.562-1.841 2.357-2.736 0.18-0.204 0.366-0.401 0.548-0.603 1.995-2.218 4.036-4.36 6.129-6.413h-0.027c53.778-52.75 138.701-50.415 181.467 0h-0.007c1.066 1.256 2.105 2.542 3.117 3.859 0.048 0.062 0.094 0.129 0.14 0.19 0.937 1.224 1.853 2.474 2.743 3.749 0.207 0.297 0.404 0.608 0.61 0.907 0.715 1.049 1.422 2.106 2.103 3.189 0.287 0.456 0.56 0.925 0.842 1.388 0.576 0.947 1.149 1.898 1.701 2.87 0.327 0.576 0.638 1.168 0.956 1.754 0.476 0.879 0.95 1.759 1.405 2.656 0.346 0.685 0.678 1.383 1.012 2.078 0.396 0.822 0.788 1.647 1.166 2.486 0.352 0.782 0.69 1.577 1.026 2.374 0.327 0.777 0.653 1.555 0.966 2.345 0.346 0.874 0.677 1.757 1.004 2.648 0.271 0.737 0.536 1.475 0.793 2.222 0.331 0.962 0.65 1.936 0.959 2.917 0.219 0.695 0.433 1.395 0.64 2.1 0.309 1.051 0.608 2.111 0.892 3.182 0.174 0.656 0.341 1.318 0.504 1.981 0.282 1.139 0.553 2.289 0.805 3.45 0.134 0.613 0.257 1.233 0.383 1.853 0.249 1.233 0.488 2.472 0.702 3.73 0.097 0.565 0.184 1.136 0.272 1.706 0.21 1.331 0.411 2.669 0.583 4.028 0.063 0.504 0.117 1.016 0.175 1.523 0.167 1.442 0.324 2.892 0.448 4.363 0.035 0.421 0.058 0.85 0.092 1.273 0.119 1.574 0.224 3.156 0.294 4.761 0.164 3.82 0.204 7.724 0.075 11.735-4.128 129.131-179.133 172.172-231.8 309.303-55.635-137.139-235.431-171.927-231.117-309.303 0.119-3.767 0.394-7.45 0.777-11.072 0.155-1.467 0.339-2.915 0.535-4.358 0.063-0.469 0.125-0.942 0.194-1.408 0.205-1.402 0.434-2.79 0.678-4.17 0.085-0.484 0.172-0.967 0.262-1.448 0.256-1.363 0.53-2.713 0.824-4.053 0.104-0.471 0.21-0.94 0.317-1.408 0.309-1.341 0.631-2.673 0.977-3.991 0.114-0.431 0.232-0.859 0.349-1.286 0.366-1.343 0.745-2.678 1.149-3.996 0.109-0.352 0.226-0.7 0.336-1.052 0.436-1.381 0.884-2.753 1.361-4.106 0.068-0.192 0.142-0.381 0.21-0.571 2.791-7.786 6.251-15.079 10.28-21.851 0.137-0.231 0.267-0.466 0.406-0.695 0.67-1.109 1.363-2.195 2.063-3.274 0.227-0.351 0.451-0.707 0.682-1.056 0.668-1.009 1.355-1.998 2.048-2.98 0.282-0.399 0.561-0.8 0.849-1.196 0.682-0.94 1.376-1.866 2.081-2.781 0.317-0.413 0.635-0.824 0.957-1.231 0.702-0.889 1.415-1.767 2.14-2.633 0.341-0.408 0.687-0.812 1.032-1.214 44.329-51.611 126.874-59.507 179.307-1.213z" - ], - "isMulticolor": false, - "tags": [ - "heart-tower" - ], - "defaultCode": 59895, - "grid": 0, - "attrs": [] - }, - { - "id": 248, - "paths": [ - "M531.224 658.918c-38.708-67.043-137.498-49.655-134.942 30.479 2.664 83.455 122.090 132.096 134.942 180.062 11.767-43.893 137.061-100.086 134.548-180.062-2.474-78.796-94.895-99.158-134.548-30.479zM682.49 325.579c106.127 118.627-80.263 167.727-115.233 84.439-30.331-72.245 12.934-119.542 67.206-122.634 137.782-7.858 185.144-162.296 85.909-233.317 21.957 41.922 11.162 87.688-25.655 120.112-27.745-143.978-194.722-185.7-298.525-75.803 108.004-22.256 137.879 18.723 157.429 86.293 33.603 116.161-132.163 140.856-120.114-20.989-50.657 31.883-68.050 105.557 0 170.255 45.277 43.041 26.689 104.952-26.823 104.952-89.324 0.374-215.15-150.358-118.946-278.705-70.711 27.145-118.744 51.197-135.272 118.949-14.176-58.844 12.926-110.919 62.972-136.438-203.624 14.74-148.059 225.495-1.164 268.209 131.167 38.137 9.796 217.283-97.955 59.472-11.647 224.166 128.043 263.509 271.706 361.495 63.45 43.275 92.551 69.295 92.551 110.3 0 70.856 105.128 71.817 105.128-6.278 0-42.286 36.316-69.171 106.68-113.352 115.221-72.342 204.075-182.048 204.075-260.048 0.002-137.999-85.674-181.201-213.969-236.915zM531.341 903.155c-20.308-75.784-208.981-152.631-213.191-284.468-4.041-126.617 152.041-154.079 213.191-48.161 62.646-108.506 208.657-76.336 212.564 48.161 3.962 126.343-193.982 215.115-212.564 284.468zM916.761 132.547c-138.141 130.738 36.298 128.986-4.001 318.71 169.565-219.141-28.234-223.701 4.001-318.71z" - ], - "isMulticolor": false, - "tags": [ - "heartburn" - ], - "defaultCode": 59896, - "grid": 0, - "attrs": [] - }, - { - "id": 249, - "paths": [ - "M914.086 250.29l-370.803-214.083c-48.285-27.877-110.031-11.332-137.909 36.953l-328.213 568.484c-27.879 48.285-11.332 110.031 36.953 137.909l370.803 214.083c48.285 27.879 110.031 11.332 137.909-36.953l328.213-568.484c27.879-48.285 11.332-110.031-36.953-137.909zM472.67 120.643c12.213-21.152 39.261-28.401 60.416-16.189s28.401 39.263 16.189 60.414c-12.213 21.153-39.261 28.401-60.416 16.189s-28.401-39.263-16.189-60.414zM553.324 913.044c-12.213 21.153-39.261 28.401-60.416 16.189s-28.401-39.261-16.189-60.414c12.213-21.153 39.261-28.401 60.416-16.189s28.401 39.261 16.189 60.414zM696.377 599.409v0c-0.398 0.254-0.807 0.498-1.208 0.75-1.422 0.892-2.86 1.769-4.313 2.629-0.583 0.344-1.166 0.69-1.754 1.029-1.771 1.024-3.556 2.031-5.371 3.010-0.352 0.19-0.713 0.374-1.067 0.563-1.61 0.857-3.237 1.697-4.879 2.522-0.528 0.266-1.056 0.531-1.587 0.793-1.929 0.95-3.875 1.884-5.845 2.793-0.302 0.139-0.61 0.274-0.914 0.413-1.792 0.819-3.603 1.619-5.426 2.402-0.459 0.197-0.919 0.398-1.381 0.593-2.073 0.879-4.161 1.739-6.268 2.578-85.779 34.081-199.204 34.849-234.277 69.726-0.084 0.080-0.174 0.159-0.256 0.241 7.434-28.296-5.558-68.426-21.41-113.634-0.127-0.362-0.257-0.733-0.386-1.096-0.952-2.713-1.914-5.444-2.882-8.192-1.711-4.858-3.433-9.747-5.16-14.7-14.374-41.206-28.582-85.438-30.646-128.087-0.087-1.794-0.154-3.585-0.195-5.372 0-0.030-0.002-0.060-0.002-0.090-0.251-10.561 0.292-21.008 1.787-31.278 0.062-0.428 0.115-0.859 0.182-1.286 0.184-1.196 0.396-2.389 0.606-3.58 0.12-0.682 0.236-1.365 0.366-2.045 0.202-1.062 0.426-2.122 0.651-3.179 0.172-0.809 0.344-1.617 0.528-2.422 0.222-0.971 0.461-1.938 0.702-2.903 0.224-0.894 0.454-1.786 0.695-2.676 0.242-0.895 0.493-1.791 0.753-2.683 0.281-0.962 0.573-1.921 0.872-2.878 0.259-0.827 0.521-1.654 0.795-2.477 0.346-1.034 0.71-2.065 1.079-3.092 0.269-0.748 0.533-1.497 0.815-2.24 0.428-1.131 0.884-2.255 1.341-3.379 0.262-0.641 0.515-1.286 0.787-1.926 0.563-1.321 1.161-2.636 1.769-3.947 0.204-0.439 0.391-0.88 0.6-1.318 0.842-1.769 1.722-3.53 2.648-5.28 0.855-1.615 1.732-3.187 2.624-4.732 0.207-0.359 0.419-0.708 0.628-1.064 0.697-1.184 1.405-2.349 2.123-3.493 0.247-0.393 0.494-0.785 0.743-1.173 0.77-1.198 1.55-2.372 2.342-3.525 0.165-0.241 0.327-0.489 0.494-0.728 0.987-1.415 1.99-2.798 3.010-4.144 0.077-0.102 0.155-0.197 0.232-0.297 0.919-1.203 1.851-2.375 2.795-3.523 0.257-0.314 0.518-0.62 0.777-0.929 0.807-0.962 1.624-1.904 2.449-2.826 0.257-0.289 0.515-0.58 0.773-0.864 1.006-1.101 2.020-2.178 3.049-3.222 0.053-0.055 0.107-0.114 0.16-0.167 1.123-1.134 2.26-2.23 3.409-3.296 0.19-0.177 0.384-0.346 0.575-0.52 0.935-0.855 1.879-1.689 2.831-2.501 0.292-0.249 0.586-0.494 0.879-0.74 0.917-0.763 1.841-1.507 2.771-2.232 0.249-0.194 0.496-0.391 0.745-0.583 2.364-1.804 4.771-3.48 7.216-5.031 0.276-0.175 0.555-0.342 0.832-0.515 0.954-0.593 1.913-1.166 2.878-1.721 0.324-0.185 0.648-0.373 0.972-0.553 1.026-0.575 2.056-1.126 3.092-1.659 0.214-0.11 0.424-0.226 0.64-0.334 1.273-0.643 2.554-1.256 3.844-1.836 0.139-0.063 0.281-0.119 0.419-0.182 1.118-0.498 2.24-0.971 3.369-1.422 0.349-0.14 0.7-0.274 1.051-0.409 0.961-0.371 1.923-0.725 2.89-1.064 0.352-0.124 0.707-0.251 1.061-0.369 1.153-0.389 2.309-0.755 3.468-1.098 0.134-0.040 0.266-0.085 0.401-0.124 1.303-0.379 2.611-0.725 3.922-1.047 0.324-0.080 0.65-0.149 0.976-0.226 0.981-0.231 1.963-0.446 2.947-0.645 0.424-0.085 0.849-0.167 1.275-0.247 0.934-0.175 1.869-0.334 2.806-0.483 0.394-0.062 0.79-0.129 1.184-0.187 1.295-0.187 2.593-0.356 3.892-0.489 0.139-0.015 0.277-0.022 0.416-0.037 1.163-0.115 2.327-0.209 3.493-0.284 0.463-0.030 0.927-0.048 1.392-0.072 0.857-0.042 1.714-0.075 2.569-0.095 0.506-0.012 1.011-0.022 1.517-0.027 0.872-0.007 1.744 0.002 2.616 0.017 0.449 0.008 0.899 0.008 1.348 0.022 1.245 0.038 2.489 0.099 3.73 0.182 0.474 0.032 0.947 0.080 1.42 0.119 0.82 0.067 1.642 0.139 2.461 0.226 0.578 0.062 1.154 0.13 1.732 0.202 0.723 0.089 1.445 0.187 2.167 0.291 0.593 0.085 1.188 0.17 1.779 0.267 0.753 0.122 1.503 0.259 2.253 0.398 0.778 0.144 1.555 0.292 2.332 0.453 0.92 0.19 1.839 0.388 2.755 0.605 0.643 0.152 1.283 0.319 1.923 0.481 0.615 0.157 1.229 0.316 1.841 0.483 0.672 0.184 1.343 0.376 2.011 0.573 0.57 0.169 1.139 0.344 1.707 0.521 0.687 0.215 1.373 0.428 2.055 0.656 0.515 0.172 1.024 0.357 1.537 0.538 1.325 0.466 2.643 0.956 3.954 1.473 0.456 0.179 0.912 0.354 1.365 0.54 0.735 0.302 1.467 0.618 2.198 0.935 0.453 0.197 0.905 0.396 1.355 0.598 0.742 0.334 1.482 0.675 2.218 1.026 0.396 0.189 0.787 0.384 1.181 0.578 2.611 1.283 5.183 2.669 7.708 4.159 0.302 0.179 0.605 0.352 0.905 0.533 0.773 0.466 1.54 0.944 2.304 1.43 0.317 0.202 0.635 0.406 0.95 0.611 0.782 0.508 1.562 1.019 2.334 1.547 0.177 0.12 0.351 0.247 0.528 0.369 2.613 1.807 5.163 3.73 7.644 5.763 0.221 0.18 0.443 0.361 0.662 0.543 0.76 0.631 1.512 1.275 2.258 1.928 0.205 0.179 0.408 0.361 0.611 0.543 2.541 2.257 5.003 4.629 7.368 7.125 0.015 0.015 0.028 0.030 0.043 0.045 0.73 0.772 1.448 1.559 2.16 2.352 0.174 0.194 0.349 0.389 0.523 0.585 0.697 0.785 1.385 1.58 2.063 2.387 0.114 0.135 0.226 0.274 0.339 0.409 2.188 2.629 4.28 5.369 6.263 8.217 0.094 0.134 0.187 0.266 0.281 0.399 0.611 0.885 1.211 1.782 1.801 2.688 0.145 0.222 0.289 0.448 0.433 0.672 0.593 0.922 1.179 1.853 1.751 2.796 11.386 18.81 18.328 41.708 18.454 67.768 22.515-13.143 45.141-19.134 66.313-19.406v0.005c18.668-0.239 36.201 3.977 51.519 11.68 0.020 0.010 0.040 0.020 0.058 0.030 0.984 0.494 1.956 1.006 2.922 1.53 0.055 0.030 0.109 0.058 0.164 0.089 0.934 0.508 1.856 1.031 2.771 1.567 0.085 0.050 0.17 0.1 0.256 0.15 0.887 0.523 1.767 1.057 2.638 1.604 0.107 0.067 0.214 0.135 0.321 0.202 0.849 0.536 1.689 1.086 2.519 1.644 0.124 0.084 0.247 0.169 0.373 0.252 0.812 0.551 1.615 1.114 2.41 1.687 0.137 0.099 0.272 0.199 0.409 0.299 0.78 0.568 1.552 1.144 2.315 1.732 0.144 0.11 0.284 0.222 0.426 0.334 0.752 0.586 1.495 1.179 2.23 1.784 0.147 0.122 0.292 0.246 0.439 0.368 0.725 0.603 1.443 1.214 2.15 1.836 0.147 0.13 0.292 0.262 0.438 0.394 0.7 0.623 1.395 1.253 2.078 1.894 0.144 0.135 0.282 0.274 0.426 0.409 0.68 0.646 1.355 1.296 2.016 1.961 0.13 0.13 0.257 0.266 0.386 0.398 0.668 0.678 1.331 1.36 1.981 2.056 0.092 0.099 0.182 0.202 0.274 0.302 2.725 2.942 5.274 6.044 7.642 9.288 0.222 0.304 0.451 0.601 0.67 0.907 0.334 0.468 0.653 0.945 0.979 1.418 0.332 0.483 0.67 0.962 0.996 1.452 0.279 0.419 0.545 0.849 0.817 1.273 0.356 0.555 0.717 1.108 1.062 1.67 0.244 0.396 0.478 0.8 0.715 1.199 0.359 0.601 0.72 1.203 1.066 1.812 0.217 0.383 0.426 0.772 0.64 1.158 0.352 0.638 0.705 1.276 1.044 1.923 0.195 0.373 0.384 0.752 0.575 1.128 0.341 0.67 0.68 1.34 1.006 2.018 0.175 0.366 0.346 0.735 0.518 1.104 0.327 0.7 0.651 1.403 0.962 2.111 0.155 0.354 0.306 0.712 0.458 1.067 0.312 0.733 0.62 1.47 0.917 2.212 0.137 0.344 0.271 0.692 0.404 1.037 0.296 0.763 0.583 1.53 0.86 2.302 0.12 0.336 0.237 0.672 0.354 1.009 0.276 0.793 0.543 1.59 0.8 2.394 0.104 0.324 0.205 0.65 0.306 0.976 0.256 0.825 0.499 1.654 0.735 2.487 0.089 0.312 0.175 0.625 0.261 0.939 0.234 0.859 0.456 1.721 0.667 2.589 0.072 0.296 0.144 0.591 0.214 0.887 0.21 0.899 0.409 1.802 0.598 2.71 0.057 0.272 0.114 0.543 0.169 0.815 0.187 0.944 0.361 1.894 0.523 2.848 0.042 0.242 0.085 0.484 0.125 0.728 0.162 0.996 0.309 1.996 0.443 3.002 0.028 0.209 0.058 0.416 0.085 0.623 0.135 1.061 0.252 2.128 0.357 3.201 0.015 0.155 0.033 0.311 0.048 0.468 0.107 1.148 0.194 2.302 0.264 3.461 0.005 0.084 0.012 0.167 0.017 0.251 0.219 3.784 0.244 7.629 0.063 11.53l0.005-0.008c-0.815 17.575-5.797 36.241-15.846 55.199-11.199 21.115-28.059 37.442-48.352 50.393z" - ], - "isMulticolor": false, - "tags": [ - "hearts-card" - ], - "defaultCode": 59897, - "grid": 0, - "attrs": [] - }, - { - "id": 250, - "paths": [ - "M872.552 367.661c6.725 213.979-328.525 364.303-360.005 481.8-34.397-128.357-353.93-258.507-361.068-481.8-6.846-214.432 257.498-260.961 361.068-81.586 106.098-183.764 353.385-129.263 360.005 81.586z" - ], - "isMulticolor": false, - "tags": [ - "hearts" - ], - "defaultCode": 59898, - "grid": 0, - "attrs": [] - }, - { - "id": 251, - "paths": [ - "M655.119 32.472c-535.869 480.328 476.335 460.767-172.333 945.53 288.37-485.979-663.395-566.97 172.333-945.53zM281.565 204.177c-195.906 331.579 331.517 366.41 121.928 732.771 86.397-302-469.849-463.164-121.928-732.771zM676.775 97.29c-181.151 309.59 444.359 407.931 61.468 719.493 210.67-310.34-429.317-445.178-61.468-719.493z" - ], - "isMulticolor": false, - "tags": [ - "heat-haze" - ], - "defaultCode": 59899, - "grid": 0, - "attrs": [] - }, - { - "id": 252, - "paths": [ - "M918.388 609.277l-208.412 65.217 114.411-387.047-278.872 343.098-57.26-245.030-26.803 133.9c-71.63-186.756-181.281-362.269-280.444-482.7h-151.173v95.067c134.167 130.502 259.282 345.868 320.387 560.596l-170.487-224.872 72.305 310.491-165.878-89.319 93.572 182.892-126.181-11.343 112.012 110.577h180.865l-57.174-83.447 98.018 25.797 0.93-34.898h0.002l2.511-94.073 80.822 92.857 57.276-114.548c0 0 0 0 0 0l23.547-47.092-1.721 180.56 82.543-61.906-58.61 136.752h275.763l133.267-199.904-170.133 46.787 104.916-208.412zM780.559 136.045l-119.856 111.922-4.22 156.772 98.538-148.218zM918.792 731.241l68.803-33.817v-79.297z" - ], - "isMulticolor": false, - "tags": [ - "heavy-fall" - ], - "defaultCode": 59900, - "grid": 0, - "attrs": [] - }, - { - "id": 253, - "paths": [ - "M860.969 319.717l34.609 7.96c20.961-91.241 30.324-183.351 27.987-275.207l-228.561 0.002v34.046h-95.655v-49.999h-167.214v49.999h-95.135v-34.044l-235.553-0.002c-2.365 91.796 7.18 184.026 27.987 275.207l34.616-7.883c8.351 39.271 19.099 78.375 32.203 117.204l-81.539 12.298 125.987 265.527 59.89-53.719c20.092 33.455 42.068 66.518 65.977 99.097l70.723-52.366-99.119 73.466c50.265 70.633 108.612 139.162 174.92 205.239 66.102-66.119 123.49-134.446 173.751-205.239l-28.597-21.108c24.011-32.783 46.092-66.066 66.283-99.752l60.628 54.382 125.987-265.532-82.501-12.438c13.138-38.803 23.93-77.886 32.327-117.137zM346.087 263.422h333.786c3.363 140.6-52.917 264.666-166.892 385.929-114.651-121.514-170.296-245.424-166.894-385.929zM588.884 709.002l0.003 0.002c-23.402 28.779-48.297 56.45-75.794 83.96 0 0-0.002-0.002-0.002-0.003 27.501-27.508 52.393-55.176 75.793-83.958z" - ], - "isMulticolor": false, - "tags": [ - "heavy-shield" - ], - "defaultCode": 59901, - "grid": 0, - "attrs": [] - }, - { - "id": 254, - "paths": [ - "M904.567 516.098c48.852-52.507 77.324-115.423 77.324-183.060-0.002-88.666-50.763-168.886-130.317-228.536 28.19 38.064 46.127 80.76 46.127 126.728 0 47.357-16.878 91.896-46.587 130.732l-19.158-55.241-91.941 28.777c-40.607-54.851-94.161-87.641-162.903-99.592-17.354-88.215-42.113-190.009-63.438-190.009s-46.083 101.794-63.438 190.009c-68.737 11.95-122.289 44.738-162.896 99.582l-91.916-28.771-19.15 55.217c-29.714-38.842-46.595-83.384-46.595-130.739 0-45.968 17.905-88.665 46.127-126.728-79.586 59.681-130.348 139.903-130.348 228.568 0 67.648 28.48 130.572 77.345 183.084l-20.013 57.707 92.065 42.509c-9.857 77.369-14.383 166.84-14.383 268.946 103.078 59.842 217.299 89.588 333.202 88.857 115.903 0.73 230.124-29.015 333.202-88.855 0-102.099-4.526-191.565-14.381-268.931l92.095-42.524-20.022-57.731zM558.070 683.495c-9.812 80.548-23.097 203.684-23.097 280.010h-42.601c0-76.402-13.31-199.705-23.125-280.248-145.354-9.313-207.887-60.224-207.887-60.224s4.603-33.73 9.114-60.188c0.007-0.040 0.013-0.080 0.020-0.12 0.348-2.045 0.698-4.044 1.042-5.982 0.027-0.149 0.054-0.294 0.079-0.442 0.142-0.791 0.283-1.569 0.423-2.339 0.032-0.177 0.065-0.356 0.097-0.532 0.326-1.774 0.648-3.479 0.965-5.102 0.040-0.204 0.079-0.403 0.119-0.604 0.12-0.609 0.239-1.205 0.356-1.787 0.042-0.202 0.082-0.407 0.122-0.606 0.152-0.745 0.305-1.474 0.453-2.17 76.825 25.873 157.713 38.92 239.552 38.444 81.808 0.445 162.696-12.571 239.521-38.444 0.146 0.681 0.293 1.394 0.442 2.122 0.052 0.249 0.102 0.505 0.154 0.76 0.102 0.502 0.204 1.014 0.306 1.534 0.057 0.286 0.112 0.571 0.169 0.863 0.131 0.664 0.259 1.344 0.392 2.035 0.054 0.279 0.107 0.564 0.161 0.848 0.117 0.622 0.234 1.253 0.353 1.894 0.069 0.371 0.137 0.75 0.206 1.128 0.089 0.492 0.179 0.987 0.269 1.487 0.070 0.393 0.142 0.786 0.212 1.186 0.109 0.606 0.216 1.221 0.325 1.841 0.104 0.594 0.209 1.195 0.313 1.799 0.090 0.517 0.179 1.036 0.269 1.559 0.082 0.477 0.162 0.955 0.244 1.437 0.075 0.443 0.151 0.888 0.226 1.335 0.087 0.517 0.174 1.034 0.261 1.556 0.077 0.457 0.152 0.919 0.229 1.379 0.141 0.85 0.281 1.703 0.422 2.56 0.077 0.474 0.156 0.947 0.233 1.424 0.085 0.529 0.171 1.057 0.256 1.588 0.072 0.448 0.144 0.895 0.216 1.344 0.080 0.507 0.162 1.012 0.243 1.519 0.115 0.723 0.229 1.447 0.343 2.17 0.089 0.557 0.176 1.114 0.263 1.672 0.092 0.586 0.184 1.171 0.274 1.757 0.070 0.447 0.139 0.892 0.207 1.337 0.087 0.557 0.172 1.113 0.258 1.667 0.065 0.427 0.132 0.853 0.197 1.278 0.137 0.897 0.274 1.79 0.408 2.675 0.042 0.276 0.084 0.549 0.125 0.823 0.11 0.73 0.221 1.456 0.33 2.177 0.040 0.266 0.080 0.532 0.12 0.798 0.122 0.818 0.244 1.63 0.365 2.431 0.020 0.131 0.040 0.264 0.059 0.395 2.294 15.39 3.945 27.492 3.945 27.492s-60.336 51.829-207.949 60.463z" - ], - "isMulticolor": false, - "tags": [ - "helmet" - ], - "defaultCode": 59902, - "grid": 0, - "attrs": [] - }, - { - "id": 255, - "paths": [ - "M511.992 31.992c-265.111 0-480 214.915-480 480 0 265.111 214.889 480 480 480s480-214.915 480-480-214.889-480-480-480zM511.992 152.010c198.827 0 360.006 161.18 360.006 360.006s-161.18 360.006-360.006 360.006-360.006-161.18-360.006-360.006c0.025-198.827 161.18-360.006 360.006-360.006zM511.992 211.99c-132.543 0-240.013 80.59-240.013 180.003 0 60.009 119.994 60.009 119.994 0 0-33.129 53.735-60.009 119.994-60.009 66.284 0 119.994 26.855 119.994 60.009 0 33.129-60.009 29.992-119.994 60.009-3.74 1.882-6.952 4.267-9.387 6.576-49.569 31.398-50.623 85.283-50.623 113.443v29.992c0 33.23 26.755 60.009 60.009 60.009 33.23 0 60.009-26.755 60.009-60.009v-29.992c0-90.002 180.003-80.59 180.003-180.003 0.025-99.438-107.42-180.028-239.987-180.028zM511.992 691.99c33.129 0 60.009 26.855 60.009 60.009 0 33.129-26.855 60.009-60.009 60.009-33.129 0-60.009-26.855-60.009-60.009 0.025-33.129 26.88-60.009 60.009-60.009z" - ], - "isMulticolor": false, - "tags": [ - "help" - ], - "defaultCode": 59903, - "grid": 0, - "attrs": [] - }, - { - "id": 256, - "paths": [ - "M926.213 270.010l-423.071-243.983-423.073 243.983v487.966l423.071 243.983 423.074-243.985-0.002-487.964zM393.91 706.281l-104.801 60.506-104.801-60.506v-121.013l104.801-60.506 104.801 60.506v121.013zM289.109 524.753l-104.801-60.506v-121.013l104.801-60.506 104.801 60.506v121.013l-104.801 60.506zM604.613 706.199v121.013l-104.801 60.506-104.801-60.506v-121.013l104.523-60.347-104.523-60.347v-121.013l104.801-60.506 104.801 60.506v121.013l-104.523 60.347 104.523 60.347zM499.812 403.822l-104.801-60.506v-121.013l104.801-60.506 104.801 60.506v121.013l-104.801 60.506zM814.567 706.281l-104.801 60.506-104.801-60.506v-121.013l104.801-60.506 104.801 60.506v121.013zM709.766 524.753l-104.801-60.506v-121.013l104.801-60.506 104.801 60.506v121.013l-104.801 60.506z" - ], - "isMulticolor": false, - "tags": [ - "hive-emblem" - ], - "defaultCode": 59904, - "grid": 0, - "attrs": [] - }, - { - "id": 257, - "paths": [ - "M326.776 766.37h368.693l24.384-158.822h-417.461zM272.822 414.941l19.219 125.177h438.165l19.222-125.209c-69.154-28.229-150.934-44.552-238.575-44.511-87.451 0.038-169.032 16.364-238.031 44.543zM844.513 466.834l67.442-371.578c-21.683-27.768-75.395-36.076-109.895-18.151l-19.668 128.114h-542.536l-19.673-128.149c-34.5-17.924-88.213-9.615-109.895 18.151l67.455 371.66c0.082-0.058 0.165-0.115 0.246-0.174-72.21 51.953-116.17 120.865-116.090 196.459 0 0.134 0 0.269 0 0.403 0.17 161.578 201.452 292.473 449.574 292.363s449.127-131.187 448.955-292.765c0-0.134 0-0.269 0-0.403-0.080-75.392-43.948-144.090-115.914-195.93zM679.338 871.449l8.825-57.479h-354.080l8.818 57.444c-36.517-10.542-71.829-22.291-98.563-42.615l-65.792-362.489c27.417-19.655 58.889-36.861 93.552-51.075l-17.323-112.837h512.697l-17.318 112.804c34.662 14.209 66.132 31.415 93.555 51.063l-65.807 362.57c-26.736 20.325-62.048 32.071-98.565 42.615z" - ], - "isMulticolor": false, - "tags": [ - "hole-ladder" - ], - "defaultCode": 59905, - "grid": 0, - "attrs": [] - }, - { - "id": 258, - "paths": [ - "M328.392 576.677l-70.078-120.276 70.080-120.276h140.156l70.078 120.276-70.080 120.276h-140.156zM553.573 454.494l-70.078-120.276 70.080-120.276h140.156l70.078 120.276-70.080 120.276h-140.156zM98.271 447.755l-70.078-120.276 70.080-120.276h140.156l70.078 120.276-70.080 120.276h-140.156zM325.092 316.931l-70.078-120.276 70.080-120.276h140.156l70.078 120.276-70.080 120.276h-140.156zM551.903 967.511l-70.078-120.276 70.080-120.276h140.156l70.078 120.276-70.080 120.276h-140.156zM772.973 837.161l-70.078-120.276 70.080-120.276h140.156l70.078 120.276-70.080 120.276h-140.156zM328.392 833.87l-70.078-120.276 70.080-120.276h140.156l70.078 120.276-70.080 120.276h-140.156zM551.903 708.583l-70.078-120.276 70.080-120.276h140.156l70.078 120.276-70.080 120.276h-140.156zM104.952 708.272l-70.078-120.276 70.078-120.276h140.156l70.078 120.276-70.080 120.276h-140.154zM777.984 324.139l-70.078-120.276 70.080-120.276h140.156l70.078 120.276-70.080 120.276h-140.156z" - ], - "isMulticolor": false, - "tags": [ - "honeycomb" - ], - "defaultCode": 59906, - "grid": 0, - "attrs": [] - }, - { - "id": 259, - "paths": [ - "M513.931 63.964v0c-234.454 110.151-429.353 430.969-478.958 670.307 143.25 0 248 45.619 323.621 125.86l20.933-22.869c-56.023-57.645-129.662-104.663-226.753-151.505 52.197-129.853 131.79-326.419 233.006-337.86 39.607-4.479 82.020 19.434 128.155 86.729 144.421-240.149 281.57 76.994 361.161 251.131-95.222 51.626-168.714 98.8-225.561 157.218l18.439 20.742c74.547-79.388 179.028-129.447 324.915-129.447-58.837-236.347-239.619-553.817-478.958-670.307zM452.114 612.111c0 25.117-33.602 38.962-75.051 30.927s-75.051-34.91-75.051-60.027c0-25.116 33.602-38.962 75.051-30.927s75.051 34.91 75.051 60.027zM569.526 612.111c0 25.117 33.602 38.962 75.051 30.927s75.051-34.91 75.051-60.027c0-25.116-33.602-38.962-75.051-30.927-41.451 8.035-75.051 34.91-75.051 60.027z" - ], - "isMulticolor": false, - "tags": [ - "hood" - ], - "defaultCode": 59907, - "grid": 0, - "attrs": [] - }, - { - "id": 260, - "paths": [ - "M742.941 336.453l239.055-95.623v-169.092zM679.966 34.422l-38.481 178.417 141.1-178.417zM981.996 521.864v-80.465l-169.087 54.81zM660.136 360.939c-94.928-126.627-211.567-204.227-293.865-200.574h0.003c-18.99 0.842-36.697 5.259-51.31 15.158-33.872 22.947-22.546 74.152-45.48 125.942-78.345 176.942-157.459 305.286-227.396 399.985v206.404c122.964-42.619 306.094-86.754 573.736-95.623 56.156-1.863 99.261 25.144 132.94 2.332 83.139-56.322 53.026-244.572-66.468-420.973-7.467-11.023-14.366-22.264-22.159-32.651zM396.609 297.269c32.197-19.573 117.9 54.262 191.423 164.917s107.022 216.226 74.824 235.799c-13.235 8.045-35.514 0.297-62.267-19.292-38.162-38.67-78.896-88.435-117.661-145.66-38.448-56.756-69.634-112.824-91.692-162.589-10.329-37.233-9.363-64.216 5.374-73.175z" - ], - "isMulticolor": false, - "tags": [ - "horn-call" - ], - "defaultCode": 59908, - "grid": 0, - "attrs": [] - }, - { - "id": 261, - "paths": [ - "M852.431 354.388c-81.232-68.68-124.033-203.452 16.765-276.004-188.717 14.359-201.643 208.321-140.953 295.672 103.818 149.474 82.785 224.532 17.438 276.039-7.166-18.81-15.624-37.566-24.868-56.292-141.578 20.762-278.409 38.712-412.463 0-11.768 21.053-21.207 42.104-28.331 63.157-72.336-51.718-100.235-126.654 8.289-282.905 60.69-87.349 47.766-281.313-140.953-295.672 140.797 72.552 97.995 207.324 16.765 276.004-181.749 153.71-164.575 411.518 118.336 495.467 6.749 18.086 15.338 36.172 25.894 54.26 137.488-13.705 274.975-12.988 412.463 0 14.757-20.368 25.689-40.582 33.388-60.668 263.522-89.98 275.575-339.074 98.23-489.059z" - ], - "isMulticolor": false, - "tags": [ - "horns" - ], - "defaultCode": 59909, - "grid": 0, - "attrs": [] - }, - { - "id": 262, - "paths": [ - "M501.556 56.971c-405.275 5.898-379.942 459.647-253.149 817.601-29.308 18.793-34.527 12.749-31.448 34.069 2.205 15.276 24.923 46.391 35.068 51.603s18.716 5.695 34.007 4.681 120.478-17.512 98.277-45.176c-95.847-134.582-252.731-729.724 126.852-746.904 379.583 17.179 222.699 612.322 126.856 746.905-22.201 27.665 82.986 44.162 98.277 45.176s23.863 0.533 34.007-4.681 32.862-36.328 35.068-51.603c3.079-21.32-2.14-15.276-31.448-34.069 126.792-357.954 152.127-811.703-253.149-817.601-3.191-0.047-6.365-0.010-9.609 0-3.247-0.010-6.421-0.047-9.612-0.002v0zM410.454 101.212c13.785 0 24.959 11.174 24.959 24.959s-11.174 24.959-24.959 24.959-24.959-11.174-24.959-24.959c0-13.785 11.174-24.959 24.959-24.959zM611.876 101.212c13.785 0 24.959 11.174 24.959 24.959s-11.174 24.959-24.959 24.959-24.959-11.174-24.959-24.959c-0.002-13.785 11.174-24.959 24.959-24.959zM270.745 218.271c13.785 0 24.959 11.174 24.959 24.959s-11.174 24.959-24.959 24.959-24.959-11.174-24.959-24.959 11.174-24.959 24.959-24.959zM751.584 218.271c13.785 0 24.959 11.174 24.959 24.959s-11.174 24.959-24.959 24.959-24.959-11.174-24.959-24.959 11.174-24.959 24.959-24.959zM218.767 409.957c13.785 0 24.959 11.174 24.959 24.959s-11.174 24.959-24.959 24.959-24.959-11.174-24.959-24.959 11.174-24.959 24.959-24.959zM803.561 409.957c13.785 0 24.959 11.174 24.959 24.959s-11.174 24.959-24.959 24.959-24.959-11.174-24.959-24.959 11.174-24.959 24.959-24.959zM236.051 614.624c13.785 0 24.959 11.174 24.959 24.959s-11.174 24.959-24.959 24.959-24.959-11.174-24.959-24.959 11.174-24.959 24.959-24.959zM786.277 614.624c13.785 0 24.959 11.174 24.959 24.959s-11.174 24.959-24.959 24.959-24.959-11.174-24.959-24.959 11.174-24.959 24.959-24.959zM277.233 782.475c13.785 0 24.959 11.174 24.959 24.959s-11.174 24.959-24.959 24.959-24.959-11.174-24.959-24.959 11.175-24.959 24.959-24.959zM745.094 782.475c13.785 0 24.959 11.174 24.959 24.959s-11.174 24.959-24.959 24.959-24.959-11.174-24.959-24.959 11.174-24.959 24.959-24.959z" - ], - "isMulticolor": false, - "tags": [ - "horseshoe" - ], - "defaultCode": 59910, - "grid": 0, - "attrs": [] - }, - { - "id": 263, - "paths": [ - "M367.444 74.663v305.528h-304.24v282.327h304.24v304.24h282.327v-304.24h305.526v-282.327h-305.525v-305.528h-282.328z" - ], - "isMulticolor": false, - "tags": [ - "hospital-cross" - ], - "defaultCode": 59911, - "grid": 0, - "attrs": [] - }, - { - "id": 264, - "paths": [ - "M452.007 706.999c-90.002-299.997 90.002-299.997 0-599.994h119.994c90.002 299.997-90.002 299.997 0 599.994h-119.994zM31.992 856.985v60.009h960v-60.009c0-60.009 0-60.009-60.009-60.009 0 0-29.992-60.009-60.009-60.009-60.009 0-60.009 90.002-119.994 90.002-60.009 0-60.009-90.002-119.994-90.002s-60.009 90.002-119.994 90.002-60.009-90.002-119.994-90.002-60.009 90.002-119.994 90.002-60.009-90.002-119.994-90.002c-29.992 0-60.009 60.009-60.009 60.009-60.009 0.025-60.009 0.025-60.009 60.009zM211.995 706.999c-90.002-299.997 90.002-299.997 0-599.994h119.994c90.002 299.997-90.002 299.997 0 599.994h-119.994zM691.995 706.999c-90.002-299.997 90.002-299.997 0-599.994h119.994c90.002 299.997-90.002 299.997 0 599.994h-119.994z" - ], - "isMulticolor": false, - "tags": [ - "hot-surface" - ], - "defaultCode": 59912, - "grid": 0, - "attrs": [] - }, - { - "id": 265, - "paths": [ - "M588.912 528.975v-33.817c112.338-53.397 194.745-226.63 194.745-432.634h-535.256c0 204.793 81.088 378.145 192.41 432.634v33.817c-111.325 54.484-192.41 227.843-192.41 432.634h535.256c0-205.999-82.409-379.239-194.745-432.634zM339.651 261.279c105.9 47.41 239.477 47.365 354.504-8.164-28.605 106.324-88.594 182.596-159.338 194.326 2.995 4.058 4.788 9.057 4.788 14.488 0 13.502-10.945 24.447-24.446 24.447s-24.446-10.947-24.446-24.447c0-5.509 1.844-10.576 4.918-14.663-68.501-11.959-126.722-84.347-155.98-185.987zM515.157 643.744c-13.501 0-24.446-10.947-24.446-24.447s10.945-24.447 24.446-24.447 24.446 10.947 24.446 24.447-10.945 24.447-24.446 24.447zM539.603 698.209c0 13.502-10.945 24.447-24.446 24.447s-24.446-10.947-24.446-24.447 10.945-24.447 24.446-24.447c13.501 0 24.446 10.947 24.446 24.447zM515.157 565.303c-13.501 0-24.446-10.947-24.446-24.447s10.945-24.447 24.446-24.447 24.446 10.947 24.446 24.447c0 13.501-10.945 24.447-24.446 24.447zM364.056 904.523c118.293-199.217 183.573-203.681 305.468 0h-305.468z" - ], - "isMulticolor": false, - "tags": [ - "hourglass" - ], - "defaultCode": 59913, - "grid": 0, - "attrs": [] - }, - { - "id": 266, - "paths": [ - "M173.124 75.667l508.123 197.435c-1.281 16.979-5.984 32.447-11.852 45.931l235.958 82.508c13.085-23.579 24.082-47.68 33.481-72.181-10.815 7.495-23.935 11.9-38.088 11.9-36.979 0-66.956-29.978-66.956-66.958 0-6.254 0.875-12.3 2.479-18.043v-0.002c2.691-9.637 7.48-18.394 13.852-25.75 12.278-14.179 30.396-23.163 50.624-23.163 28.872 0 53.475 18.275 62.875 43.89 8.010-30.8 14.364-62.015 19.929-93.426l-488.363-87.606c61.083 28.423 103.464 56.946 132.206 84.533l-445.727-110.928c-27.723-7.425-39.363 23.592-8.539 31.859zM733.961 154.213l98.119 20.54-30.984 40.86-67.135-61.4zM207.713 457.29l0.003 0.010-0.002-0.012zM207.147 606.614l-142.261-434.781c-8.311-27.468-40.805-21-31.565 9.548l107.315 536.975c-17.261 10.536-35.568 15.731-52.433 18.195l54.361 243.984c26.935-1.32 53.211-4.691 78.983-9.629-12.073-5.234-22.735-14.057-30.2-26.083-11.835-19.065-12.916-41.755-4.93-61.014h0.002c1.285-3.097 2.805-6.104 4.55-8.994 0.023-0.040 0.047-0.079 0.072-0.119 1.712-2.823 3.648-5.528 5.79-8.097 0.082-0.097 0.16-0.197 0.242-0.294 1.036-1.228 2.123-2.422 3.256-3.583 0.137-0.14 0.279-0.276 0.418-0.414 1.062-1.069 2.165-2.106 3.309-3.11 0.114-0.1 0.224-0.205 0.339-0.304 1.184-1.024 2.422-2.006 3.692-2.957 0.271-0.202 0.546-0.403 0.822-0.601 1.298-0.94 2.623-1.854 4.006-2.713 0.002-0.002 0.003-0.002 0.005-0.003 0.892-0.553 1.794-1.076 2.699-1.584 0.272-0.152 0.545-0.296 0.819-0.444 0.658-0.356 1.32-0.7 1.985-1.032 0.296-0.147 0.59-0.294 0.887-0.438 0.735-0.352 1.475-0.69 2.218-1.016 0.195-0.085 0.391-0.179 0.588-0.262 0.929-0.394 1.864-0.765 2.803-1.116 0.254-0.095 0.509-0.18 0.765-0.271 0.697-0.251 1.397-0.489 2.098-0.717 0.332-0.107 0.667-0.21 1.001-0.312 0.662-0.2 1.323-0.389 1.988-0.57 0.314-0.085 0.628-0.174 0.942-0.254 0.932-0.237 1.866-0.458 2.803-0.655 0.237-0.050 0.476-0.089 0.715-0.135 0.722-0.142 1.443-0.276 2.167-0.394 0.391-0.063 0.783-0.12 1.174-0.177 0.581-0.085 1.163-0.16 1.746-0.231 0.414-0.048 0.827-0.099 1.241-0.139 0.613-0.062 1.228-0.109 1.841-0.152 0.478-0.033 0.957-0.068 1.435-0.092 0.763-0.038 1.528-0.065 2.292-0.077 0.473-0.007 0.945-0.002 1.418 0.002 0.478 0.003 0.957 0.008 1.435 0.020 0.508 0.013 1.014 0.032 1.522 0.058 0.433 0.022 0.865 0.052 1.298 0.082 0.53 0.037 1.059 0.070 1.589 0.119 0.264 0.025 0.526 0.060 0.79 0.087 1.151 0.122 2.297 0.272 3.44 0.451 0.326 0.052 0.651 0.1 0.977 0.155 0.595 0.104 1.188 0.215 1.779 0.334 0.304 0.060 0.608 0.125 0.91 0.19 0.62 0.134 1.239 0.269 1.858 0.421 0.147 0.035 0.292 0.077 0.439 0.114 1.46 0.368 2.908 0.78 4.34 1.245 0.027 0.008 0.052 0.017 0.079 0.025 0.675 0.221 1.345 0.456 2.013 0.697 0.187 0.068 0.376 0.135 0.563 0.205 0.665 0.247 1.328 0.503 1.986 0.772 0.112 0.045 0.224 0.095 0.336 0.14 2.158 0.894 4.273 1.901 6.334 3.020 0.085 0.047 0.17 0.090 0.256 0.137 0.663 0.364 1.32 0.74 1.973 1.128 0.104 0.062 0.205 0.124 0.309 0.187 2.086 1.255 4.114 2.624 6.067 4.113v0c6.301 4.803 11.859 10.8 16.285 17.931 15.23 24.529 12.679 55.072-4.124 76.568 30.393-9.442 60.264-20.507 89.885-32.349l-183.164-461.106c7.556 62.618 6.4 111.372-0.57 149.314zM277.918 790.493l-48.332-4.266 17.059-90.974 31.273 95.24zM615.314 494.709l0.007 0.007-0.005-0.008zM994.449 814.765l-379.129-320.049c37.597 53.602 59.848 98.453 71.259 136.055l-618.576-582.552c-20.293-20.293-45.886 0.747-23.323 23.323l630.062 692.298c-9.552 13.882-21.25 24.808-32.968 33.473l163.090 189.432c23.123-13.877 44.695-29.252 65.085-45.771-13.112 1.084-26.676-1.662-38.934-8.738-19.439-11.222-31.103-30.723-33.147-51.477-0.319-3.239-0.401-6.508-0.246-9.782 0.008-0.169 0.017-0.339 0.025-0.508 0.040-0.725 0.090-1.45 0.154-2.173 0.017-0.182 0.037-0.364 0.055-0.548 0.207-2.145 0.523-4.288 0.94-6.421 0.074-0.374 0.144-0.748 0.224-1.123 0.114-0.531 0.239-1.061 0.366-1.592 0.11-0.458 0.226-0.915 0.346-1.373 0.127-0.481 0.254-0.961 0.391-1.44 0.169-0.586 0.351-1.169 0.536-1.752 0.114-0.356 0.217-0.713 0.336-1.069 0.307-0.912 0.636-1.821 0.986-2.726 0.125-0.324 0.261-0.645 0.391-0.969 0.259-0.641 0.525-1.283 0.805-1.919 0.149-0.341 0.304-0.678 0.459-1.017 0.299-0.65 0.611-1.296 0.932-1.941 0.145-0.292 0.287-0.586 0.438-0.877 0.479-0.925 0.974-1.846 1.5-2.758 0.523-0.907 1.071-1.791 1.629-2.663 0.17-0.266 0.346-0.526 0.52-0.788 0.408-0.618 0.825-1.229 1.251-1.829 0.194-0.274 0.388-0.546 0.585-0.817 0.479-0.656 0.971-1.3 1.47-1.934 0.134-0.169 0.262-0.344 0.396-0.511 0.626-0.78 1.27-1.54 1.926-2.287 0.195-0.222 0.399-0.438 0.598-0.658 0.478-0.528 0.962-1.049 1.455-1.56 0.252-0.262 0.508-0.521 0.765-0.778 0.478-0.479 0.964-0.949 1.455-1.413 0.242-0.229 0.481-0.461 0.725-0.685 0.7-0.641 1.412-1.268 2.137-1.878 0.232-0.195 0.471-0.379 0.707-0.571 0.52-0.424 1.044-0.844 1.575-1.251 0.331-0.254 0.667-0.503 1.002-0.75 0.454-0.334 0.912-0.663 1.373-0.986 0.354-0.247 0.707-0.496 1.064-0.737 0.501-0.336 1.009-0.66 1.518-0.981 0.563-0.356 1.131-0.703 1.704-1.041 0.491-0.291 0.982-0.581 1.482-0.859 0.439-0.246 0.885-0.479 1.33-0.713 0.391-0.205 0.782-0.409 1.176-0.608 0.476-0.239 0.952-0.474 1.433-0.702 0.354-0.169 0.713-0.327 1.069-0.489 1.821-0.824 3.673-1.565 5.556-2.222 0.276-0.097 0.553-0.195 0.83-0.287 0.601-0.2 1.204-0.393 1.811-0.576 0.246-0.074 0.491-0.145 0.737-0.217 2.168-0.63 4.367-1.154 6.588-1.565 0.075-0.013 0.149-0.030 0.222-0.043 0.722-0.13 1.447-0.247 2.173-0.354 0.152-0.022 0.306-0.043 0.458-0.065 3.147-0.441 6.331-0.662 9.527-0.651 0.080 0 0.162 0 0.242 0 0.793 0.005 1.587 0.023 2.382 0.057 0.015 0 0.030 0.002 0.045 0.002 2.461 0.105 4.925 0.349 7.38 0.732 7.94 1.236 15.793 3.912 23.169 8.172 25.004 14.436 37.173 42.565 32.507 69.447 22.336-22.665 43.447-46.519 63.971-70.94zM839.754 748.36l-47.264 19.897-27.439-86.739 74.704 66.842zM495.178 70.202l0.008 0.002-0.008-0.005z" - ], - "isMulticolor": false, - "tags": [ - "hydra-shot" - ], - "defaultCode": 59914, - "grid": 0, - "attrs": [] - }, - { - "id": 267, - "paths": [ - "M617.97 48.168c66.867 13.985 108.928 43.601 131.513 78.297-30.92-5.287-61.214-8.979-90.842-11.095l-37.683-34.783-38.459 32.831c-15.046 0.334-29.888 1.118-44.53 2.327l-58.817-32.347-29.786 45.554c-16.163 3.543-32.030 7.674-47.58 12.408l-58.826-29.88-22.586 61.435c-17.545 8.382-34.594 17.647-51.138 27.773l-65.275-10.586-0.892 57.989c-12.627 10.492-24.885 21.576-36.75 33.271h-70.466l7.133 73.108c-8.76 11.812-17.224 24.055-25.393 36.715l-40.709-7.327v78.798c-0.030 0.060-0.062 0.119-0.092 0.179l0.005 0.003v522.113h36.943c46.97-185.63 188.824-260.412 337.387-170.255 84.112 51.045 187.29 124.41 297.658 82.226-1.801 15.866-6.533 31.161-13.776 45.001l190.387 38.359c5.967-15.469 11.124-31.376 15.198-47.051-7.105 4.574-20.699 9.515-39.525 6.568-82.468-12.918-66.142-107.872-1.011-116.604 21.796-2.91 42.211 6.41 55.015 22.443l36.507-77.617c-135.977 12.134-258.816-61.522-394.317-33.276l0.005 0.002c70.821 14.809 113.809 47.157 135.31 84.504-14.642 1.128-28.786 1.191-42.473 0.312l-21.624-20.457-27.219 12.853c-11.937-3.037-23.453-6.899-34.582-11.493l-15.422-30.839-21.741 11.905c-14.281-8.75-27.82-18.83-40.641-30.109l-3.608-53.4-38.847 10.045c-14.986-15.226-30.244-27.324-45.662-36.628l-2.542-39.403-47.65 18.748c-23.39-5.394-46.867-5.245-70.051-0.511 88.308-180.505 267.723-184.475 361.069-128.874-10.437 11.341-22.769 20.647-36.223 27.488l132.906 141.613c13.833-9.148 27.252-19.114 39.66-29.531-8.441-0.409-28.241-10.035-34.868-16.13-68.949-63.371 14.151-127.44 65.621-97.034 18.938 11.187 30.682 29.691 31.824 50.176l69.36-47.62c-117.837-68.929-169.867-194.617-296.653-250.135l-0.007 0.002c46.117 49.864 63.291 98.104 61.811 139.311-17.831-13.484-37.158-24.198-57.606-32.362l-27.595-42.423-36.311 25.483c-10.369-1.513-20.896-2.517-31.554-3.025l-38.093-36.087-30.449 39.263c-15.821 2.13-31.736 5.187-47.642 9.126l-31.425-25.924-19.498 41.538c-13.955 5.098-27.808 10.825-41.485 17.166l-47.131-16.583-17.248 51.74c-24.462 15.502-47.846 32.922-69.612 52.022 68.81-274.962 412.677-341.797 589.238-302.731-2.238 13.576-6.632 26.636-12.896 38.608l190.387 38.359c5.967-15.47 11.124-31.366 15.198-47.046-7.105 4.569-14.967 10.628-23.886 9.411-92.462-12.6-87.469-109.292-16.653-119.451 21.77-3.134 42.211 6.418 55.019 22.443 1.996-20.335 3.59-71.216 4.347-91.692-135.98 12.138-226.655-47.435-362.15-19.207z" - ], - "isMulticolor": false, - "tags": [ - "hydra" - ], - "defaultCode": 59915, - "grid": 0, - "attrs": [] - }, - { - "id": 268, - "paths": [ - "M942.185 226.112l-400.955-157.455c-51.821-21.345-80.027-18.43-125.997-0.966l-313.995 113.826c-41.899 15.27-43.1 23.605-44.612 66.433l-14.789 467.318c-2.41 54.945-1.31 66.259 46.421 86.977l370.9 162.575c38.62 16.554 63.752 15.286 90.267 6.431l363.299-112.924c43.832-14.568 49.971-19.177 51.638-73.521l15.355-499.55c1.321-34.684-11.348-49.297-37.532-59.145zM507.43 713.436c-15.539 219.26-17.562 219.351-256.516 118.38-146.058-61.712-173.352-81.556-170.119-177.633l10.95-325.341c2.534-75.298 6.396-81.867 154.161-16.035 281.39 125.369 280.598 131.518 261.524 400.63zM448.271 360.107l-221.71-97.026c-69.024-30.2-89.223-54.872 35.636-100.068 215.463-77.994 216.508-77.857 390.921-10.085 190.778 74.122 263.001 107.43 139.159 155.623-147.763 57.504-255.94 90.094-344.006 51.556zM934.371 539.427c-8.22 269.823-18.064 279.916-240.349 346.879-140.607 42.345-162.727 51.147-157.694-24.025l21.948-327.819c6.423-95.914 15.121-102.793 189.286-167.485 190.611-70.798 193.798-56.905 186.809 172.45zM306.158 470.562c-9.878 119.018-143.519 26.429-191.279 133.030-63.655 142.085 117.93 196.11 230.432 242.81 97.616 40.522 137.039-9.72 140.929-131.972 8.351-262.607-168.028-389.15-180.082-243.867v0zM654.511 849.982c173.535 9.211 272.549-114.755 254.119-370.883-8.695-120.84-138.868-113.407-128.752 5.539 4.721 55.528-42.609 161.982-109.672 171.12-131.83 17.956-137.604 187.756-15.694 194.234l-0.002-0.010zM709.291 423.298c-149.265 8.381-142.137 100.115-96.757 157.693 105.409 133.748 253.15-166.476 96.757-157.693zM579.614 350.933c289.891-56.731 260.859-145.238 25.199-176.506-216.774-28.761-227.893 216.173-25.199 176.506z" - ], - "isMulticolor": false, - "tags": [ - "ice-cube" - ], - "defaultCode": 59916, - "grid": 0, - "attrs": [] - }, - { - "id": 269, - "paths": [ - "M338.127 856.482c-11.175 46.635-53.113 81.31-103.173 81.31-5.99 0-11.857-0.521-17.577-1.475l-37.666 56.277h205.488l37.769-140.878c-12.557 10.019-28.46 16.025-45.774 16.025-14.361 0-27.748-4.136-39.067-11.259zM651.040 649.911c6.582-6.351 12.674-13.203 18.217-20.498l318.79 214.457v-206.624l-286.688-77.421c1.933-8.902 3.201-18.053 3.745-27.397l151.818 10.554c-6.874-9.296-10.943-20.792-10.943-33.241 0-30.914 25.062-55.974 55.974-55.974s55.974 25.060 55.974 55.974c0 15.243-6.102 29.056-15.986 39.151l46.107 3.206v-171.429l-294.13 78.228c-3.206-8.454-7.033-16.601-11.434-24.382l305.565-150.346v-250.898h-6.809l-81.521 81.521c27.574 8.098 47.714 33.573 47.714 63.769 0 36.71-29.759 66.47-66.47 66.47-30.194 0-55.67-20.141-63.769-47.714l-132.248 132.248c6.689 9.959 10.594 21.943 10.594 34.841 0 20.821-10.178 39.253-25.821 50.627-23.856-31.672-58.049-55.119-97.571-65.315 6.61-27.468 31.325-47.882 60.82-47.882 7.704 0 15.079 1.4 21.897 3.947l183.323-272.508h-206.619l-84.519 311.877c-6.393-0.697-12.884-1.064-19.463-1.064-0.743 0-1.483 0.018-2.225 0.028l21.060-310.842h-171.432l16.489 61.712c50.138 4.29 89.502 46.321 89.502 97.567 0 33.272-16.605 62.651-41.962 80.355l22.418 83.9c-6.557 2.629-12.923 5.635-19.067 8.994l-38.005-77.655c-6.872 1.527-14.007 2.359-21.339 2.359-54.098 0-97.955-43.857-97.955-97.955 0-30.386 13.838-57.538 35.553-75.505l-41-83.774h-250.903v6.811l364.896 364.896c-4.308 4.931-8.342 10.103-12.093 15.492l-352.804-237.341v206.624l81.8 22.032c-0.241-2.299-0.368-4.631-0.368-6.993 0-36.71 29.761-66.47 66.47-66.47s66.47 29.759 66.47 66.47c0 14.682-4.769 28.244-12.831 39.243l125.033 33.675c-1.635 6.39-2.913 12.921-3.834 19.568l-322.739-22.376v171.431l325.138-86.3c1.433 6.563 3.219 12.995 5.356 19.266l-330.493 161.259v252.038h6.811l107.759-107.478c-9.173-15.697-14.453-33.949-14.453-53.442 0-58.607 47.512-106.118 106.118-106.118 19.593 0 37.931 5.332 53.682 14.592l103.396-103.125c4.717 5.551 9.767 10.808 15.123 15.741l-46.865 70.023c5.429-1.28 11.084-1.976 16.904-1.976 31.089 0 57.65 19.322 68.377 46.606l21.018-78.395c7.546 2.755 15.333 5.003 23.318 6.725l-20.692 296.848h171.431l-78.212-296.258c8.762-1.741 17.291-4.124 25.538-7.101l79.93 163.793c11.667-19.145 32.74-31.929 56.799-31.929 36.709 0 66.47 29.759 66.47 66.47s-29.759 66.47-66.47 66.47c-2.618 0-5.194-0.169-7.733-0.463l19.042 39.021h252.038v-5.676l-337.010-337.008z" - ], - "isMulticolor": false, - "tags": [ - "implosion" - ], - "defaultCode": 59917, - "grid": 0, - "attrs": [] - }, - { - "id": 270, - "paths": [ - "M836.682 557.282c7.896 94.808-85.709 251.328-197.757 274.222-106.593 21.778-218.89-34.154-256.695-146.888 45.955 80.901 154.317 112.864 227.704 42.933-127.95 43.396-221.102-98.889-233.424-205.56-2.694 6.625-5.018 13.183-7.009 19.67-83.111 122.082-55.495 289.242 64.315 377.774 122.736 90.695 295.951 64.689 386.644-58.049l0.005-0.003c67.739-91.681 70.374-211.52 16.217-304.098zM540.261 446.937c58.709-26.226 75.813-97.982 8.676-141.309-123.005-79.384-183.805 165.026-329.297 133.606l-0.002 0.005c112.819 110.889 169.752-58.316 274.532-76.422 37.337-6.453 72.402 34.261 46.090 84.12zM511.198 245.184c90.040 27.573 162.007 103.508 171.412 190.995 3.466 32.272 0.63 63.030-12.046 88.485h0.003c59.001-19.598 97.183-65.098 91.011-122.528-8.69-80.881-100.578-152.822-204.030-160.243-16.912-1.214-31.118 1.123-46.351 3.291zM637.042 434.774c-0.723-10.076-3.54-18.761-6.339-28.044-10.041 52.309-53.554 90.693-110.3 90.73-20.933 0.018-41.438-3.65-59.335-12.889 18.218 36.685 51.609 62.527 88.859 62.491 52.465-0.052 91.545-50.637 87.115-112.288zM351.892 341.136c-105.586 19.546-268.95-27.718-265.046-162.769-69.381 138.913 113.866 286.085 265.046 162.769zM628.4 211.138c-108.105-168.948-230.732 9.236-367.743-6-48.82-5.426-80.532-65.252-32.427-114.441-81.626 10.272-124.793 88.285-53.609 162.313 130.419 135.627 280.629-129.193 453.779-41.872zM628.405 211.141l-0.005-0.003v0.002zM605.319 119.325c24.528 13.863 45.824 30.6 59.967 50.373l0.003-0.005c5.733-43.471-14.303-87.725-57.944-112.393-61.463-34.741-144.549-17.373-184.846 38.321-6.59 9.107-9.694 18.402-13.269 28.204 50.355-38.103 129.602-42.081 196.088-4.5zM437.861 557.911c33.536 124.544 168.355 149.511 264.013 95.832-13.522 46.067-47.189 96.049-109.254 135.178 144.037-26.362 225.514-187.354 203.183-324.271l-0.005 0.005c-58.056 133.745-232.035 156.923-357.937 93.256z" - ], - "isMulticolor": false, - "tags": [ - "incense" - ], - "defaultCode": 59918, - "grid": 0, - "attrs": [] - }, - { - "id": 271, - "paths": [ - "M952.372 462.895c-50.361 2.988-110.791-15.44-158.743-53.225-29.646-23.36-49.889-50.405-60.010-77.026 48.317-39.149 77.782-91.161 77.782-148.214 0-9.535-11.426-18.277-31.093-26.014-2.718 10.753-8.728 21.821-17.762 31.65 0 0-0.002-0.002-0.002-0.002-1.365 1.483-2.791 2.942-4.293 4.363-25.311 23.976-60.334 29.307-78.227 11.907-0.002-0.002-0.003-0.003-0.005-0.005-0.773-0.752-1.487-1.544-2.17-2.354-0.13-0.154-0.264-0.307-0.391-0.463-0.643-0.792-1.246-1.607-1.807-2.449-0.109-0.164-0.212-0.331-0.319-0.498-0.551-0.86-1.074-1.737-1.542-2.643-0.015-0.028-0.032-0.055-0.045-0.084-0.476-0.927-0.897-1.884-1.286-2.857-0.075-0.187-0.152-0.374-0.226-0.563-0.362-0.95-0.688-1.919-0.971-2.908-0.052-0.18-0.097-0.362-0.145-0.545-0.269-0.994-0.506-2-0.695-3.025-0.010-0.050-0.022-0.1-0.032-0.15-0.19-1.061-0.329-2.142-0.436-3.231-0.020-0.204-0.042-0.409-0.058-0.613-0.090-1.071-0.144-2.155-0.154-3.251-0.002-0.179 0.003-0.361 0.003-0.541 0.002-1.092 0.035-2.192 0.115-3.304 0.005-0.065 0.005-0.13 0.010-0.195 0.087-1.148 0.224-2.307 0.391-3.471 0.030-0.212 0.060-0.426 0.094-0.64 0.179-1.144 0.393-2.295 0.65-3.451 0.038-0.175 0.084-0.351 0.125-0.526 0.262-1.133 0.558-2.27 0.894-3.409 0.027-0.090 0.048-0.18 0.077-0.272 0.352-1.178 0.755-2.357 1.186-3.538 0.084-0.229 0.167-0.456 0.252-0.683 0.438-1.161 0.909-2.32 1.422-3.48 0.080-0.18 0.165-0.359 0.247-0.54 0.498-1.101 1.029-2.2 1.594-3.296 0.072-0.137 0.137-0.276 0.209-0.414 0.598-1.144 1.243-2.28 1.913-3.414 2.619-4.425 5.773-8.758 9.463-12.881-29.46-4.509-62.462-8.083-96.973-10.587-25.912-4.24-52.578-6.463-79.807-6.465h-0.008c-16.242 0-32.277 0.81-48.078 2.339-47.836 0.391-93.959 3.067-133.282 8.394 0.398 0.362 0.798 0.717 1.191 1.087 5.648 5.351 10.329 11.179 14.004 17.196 0 0 0 0-0.002 0 0.77 1.261 1.492 2.532 2.173 3.809 0.042 0.077 0.084 0.154 0.125 0.231 0.678 1.281 1.311 2.568 1.898 3.855 0.020 0.045 0.040 0.090 0.060 0.135 0.586 1.293 1.128 2.591 1.62 3.887 0.005 0.015 0.012 0.028 0.017 0.043 0.489 1.291 0.93 2.584 1.328 3.874 0.030 0.1 0.058 0.199 0.089 0.299 0.768 2.542 1.356 5.075 1.757 7.576 0.022 0.137 0.043 0.274 0.063 0.413 0.376 2.461 0.57 4.888 0.581 7.267 0 0.157 0.002 0.316 0.002 0.473-0.007 1.183-0.050 2.355-0.149 3.51-0.003 0.035-0.008 0.068-0.012 0.102-0.097 1.109-0.246 2.203-0.428 3.282-0.027 0.154-0.048 0.309-0.077 0.461-0.199 1.092-0.439 2.167-0.727 3.222-0.035 0.125-0.075 0.249-0.11 0.374-0.277 0.977-0.595 1.938-0.95 2.88-0.047 0.122-0.087 0.246-0.134 0.366-0.389 0.996-0.825 1.966-1.303 2.917-0.080 0.16-0.167 0.317-0.251 0.478-0.471 0.899-0.976 1.781-1.528 2.634-0.037 0.058-0.070 0.119-0.109 0.175-0.586 0.892-1.226 1.751-1.904 2.588-0.127 0.157-0.257 0.312-0.388 0.468-0.698 0.83-1.427 1.639-2.218 2.407-17.892 17.401-52.917 12.071-78.228-11.905-1.727-1.635-3.356-3.319-4.901-5.036-0.002 0.002-0.003 0.002-0.005 0.003-10.522-11.688-16.817-25.062-18.415-37.546-18.89 8.728-29.826 19.518-29.826 32.583 0 56.542 28.949 108.123 76.494 147.149-9.983 26.965-30.359 54.419-60.401 78.090-47.951 37.783-108.385 56.213-158.743 53.225-4.729 24.357-6.754 48.891-6.754 74.516 0 184.841 127.536 342.395 305.665 397.855-54.001-42.007-52.917-141.265-13.509-190.728-174.284-139.237-100.005-289.366 70.826-348.887 2.372 0.521 4.756 1.021 7.153 1.498-22.418 23.632-36.333 56.494-36.333 92.85 0 61.427 39.695 112.891 93.095 126.644-17.298-18.514-28.961-53.327-28.961-93.254 0-59.324 25.729-107.415 57.466-107.415s57.466 48.091 57.466 107.415c0 39.936-11.668 74.754-28.971 93.264 53.422-13.736 93.139-65.212 93.139-126.654 0-37.662-14.936-71.571-38.787-95.357 2.674-0.621 5.329-1.275 7.968-1.949 167.958 54.528 212.466 220.167 56.669 351.843 50.156 49.037 29.176 147.421-13.509 190.728 178.129-55.46 307.355-213.012 307.355-397.855 0.003-25.617-3.713-50.156-8.441-74.511zM336.373 256.914c19.825-17.279 60.688-17.74 91.27-1.029 30.58 16.708 39.301 44.264 19.476 61.545-19.825 17.279-60.688 17.74-91.27 1.031-30.581-16.711-39.301-44.268-19.476-61.547zM597.241 255.881c30.581-16.711 71.444-16.25 91.27 1.029 19.825 17.281 11.105 44.837-19.476 61.549s-71.444 16.25-91.27-1.031c-19.825-17.279-11.104-44.835 19.476-61.547z" - ], - "isMulticolor": false, - "tags": [ - "insect-jaws" - ], - "defaultCode": 59919, - "grid": 0, - "attrs": [] - }, - { - "id": 272, - "paths": [ - "M754.989 94.218c-233.821-134.998-532.806-54.883-667.803 178.938s-54.883 532.807 178.938 667.803 532.806 54.883 667.803-178.939 54.883-532.806-178.938-667.802zM699.151 190.713c165.652 95.641 231.412 297.819 160.75 470.011l-492.512-492.512c104.361-42.587 226.591-38.22 331.763 22.501zM321.491 844.837c-165.709-95.673-231.459-297.957-160.678-470.188l492.618 492.618c-104.401 42.662-226.708 38.327-331.94-22.429zM743.332 815.081l-530.275-530.275c19.078-24.406 40.748-45.945 64.393-64.447l530.242 530.243c-19.065 24.416-40.724 45.966-64.36 64.479z" - ], - "isMulticolor": false, - "tags": [ - "interdiction" - ], - "defaultCode": 59920, - "grid": 0, - "attrs": [] - }, - { - "id": 273, - "paths": [ - "M989.264 736.969l-152.302-249.078 20.722-35.898-4.261-2.461c34.318-62.72 35.339-144.454-0.675-239.74-78.529 12.605-138.576 40.302-178.908 80.47-3.119-2.208-6.433-4.337-9.959-6.373-3.585-2.070-7.141-3.901-10.671-5.516 14.845-55.035 9.191-120.755-18.728-194.62-101.371 16.274-171.953 57.685-209.060 118.627l-4.261-2.461-20.722 35.9-291.815-7.383-91.903 159.208 238.4 99.919-26.18 45.353 57.020 32.927c-59.452 24.289-103.619 60.055-131.428 105.554l209.967 121.246c25.52-46.86 34.744-102.876 26.489-166.15l56.21 32.459 61.079-105.811c0.002 0.002 0.005 0.003 0.007 0.005l-61.079 105.811 57.017 32.925c-59.45 24.289-103.619 60.055-131.428 105.554l209.967 121.246c25.52-46.86 34.744-102.876 26.489-166.15l56.211 32.461 26.18-45.353 205.719 156.54 91.904-159.211z" - ], - "isMulticolor": false, - "tags": [ - "jetpack" - ], - "defaultCode": 59921, - "grid": 0, - "attrs": [] - }, - { - "id": 274, - "paths": [ - "M984.699 798.344l-60.626-226.254c-28.707-36.208-84.18-9.816-99.158 29.967-11.967 31.764-101.206 48.968-129.782-57.641s64.823-121.811 98.299-93.874c28.532 23.816 102.559 23.567 80.517-61.343l-3.787-12.639c1.49 4.408 2.743 8.616 3.787 12.639l10.569 35.269-51.846-193.491-277.031 74.231c-38.14-16.954-51.706-62.758-20.751-88.674 61.848-51.78 20.629-191.62-103.492-158.352s-77.707 179.447-27.879 189.146c9.908 1.926 30.157 59.412 10.821 95.741l-210.187 56.32 56.043 209.155c-9.31 37.836-69.129 43.539-102.729 16.013-26.039-21.355-137.737 18.723-109.381 124.557s152.985 66.264 161.254 23.778c2.031-10.471 56.955-49.371 90.69-15.686l56.148 209.551 228.895-61.333c58.654-28.827 11.331-71.543-28.777-86.684-31.744-11.957-53.026-129.622 53.594-158.189s134.876 100.105 101.974 128.717c-8.25 7.171-26.756 86.098 31.47 73.638l-7.313 2.073 11.5-3.082c-1.438 0.391-2.821 0.715-4.175 1.006l10.716-3.039c-2.195 0.765-4.301 1.42-6.326 1.976l236.965-63.495z" - ], - "isMulticolor": false, - "tags": [ - "jigsaw-piece" - ], - "defaultCode": 59922, - "grid": 0, - "attrs": [] - }, - { - "id": 275, - "paths": [ - "M659.808 518.747c0 83.905-68.018 151.923-151.923 151.923s-151.923-68.018-151.923-151.923c0-83.905 68.018-151.923 151.923-151.923s151.923 68.018 151.923 151.923zM332.306 450.296c0 44.42-36.010 80.43-80.43 80.43s-80.43-36.010-80.43-80.43c0-44.42 36.010-80.43 80.43-80.43s80.43 36.010 80.43 80.43zM141.285 406.672c0 28.791-23.34 52.13-52.13 52.13s-52.13-23.34-52.13-52.13c0-28.791 23.34-52.13 52.13-52.13s52.13 23.34 52.13 52.13zM847.274 588.326c0 44.42-36.010 80.43-80.43 80.43s-80.43-36.010-80.43-80.43c0-44.42 36.010-80.43 80.43-80.43s80.43 36.010 80.43 80.43zM981.47 631.753c0 28.791-23.34 52.13-52.13 52.13s-52.13-23.34-52.13-52.13c0-28.791 23.34-52.13 52.13-52.13s52.13 23.34 52.13 52.13zM520.605 261.651c0 44.421-36.010 80.432-80.432 80.432s-80.432-36.010-80.432-80.432c0-44.421 36.010-80.432 80.432-80.432s80.432 36.010 80.432 80.432zM448.874 99.156c0 28.791-23.34 52.13-52.13 52.13s-52.13-23.34-52.13-52.13c0-28.791 23.34-52.13 52.13-52.13s52.13 23.34 52.13 52.13zM658.629 776.618c0 44.421-36.010 80.432-80.432 80.432s-80.432-36.010-80.432-80.432c0-44.421 36.010-80.432 80.432-80.432s80.432 36.010 80.432 80.432zM673.957 939.344c0 28.791-23.34 52.13-52.13 52.13s-52.13-23.34-52.13-52.13c0-28.791 23.34-52.13 52.13-52.13s52.13 23.34 52.13 52.13zM778.051 330.535c0 44.422-36.011 80.433-80.433 80.433s-80.433-36.011-80.433-80.433c0-44.422 36.011-80.433 80.433-80.433s80.433 36.011 80.433 80.433zM869.045 211.657c0 28.791-23.34 52.13-52.13 52.13s-52.13-23.34-52.13-52.13c0-28.791 23.34-52.13 52.13-52.13s52.13 23.34 52.13 52.13zM401.107 707.455c0 44.422-36.011 80.433-80.433 80.433s-80.433-36.011-80.433-80.433c0-44.422 36.011-80.433 80.433-80.433s80.433 36.011 80.433 80.433zM253.94 826.761c0 28.791-23.34 52.13-52.13 52.13s-52.13-23.34-52.13-52.13c0-28.791 23.34-52.13 52.13-52.13s52.13 23.34 52.13 52.13zM470.908 854.601c0 28.836-23.376 52.212-52.212 52.212s-52.212-23.376-52.212-52.212c0-28.836 23.376-52.212 52.212-52.212s52.212 23.376 52.212 52.212zM647.547 195.372c0 28.836-23.376 52.212-52.212 52.212s-52.212-23.376-52.212-52.212c0-28.836 23.376-52.212 52.212-52.212s52.212 23.376 52.212 52.212zM229.904 613.257c0 28.837-23.377 52.214-52.214 52.214s-52.214-23.377-52.214-52.214c0-28.837 23.377-52.214 52.214-52.214s52.214 23.377 52.214 52.214zM889.133 436.617c0 28.836-23.376 52.212-52.212 52.212s-52.212-23.376-52.212-52.212c0-28.836 23.376-52.212 52.212-52.212s52.212 23.376 52.212 52.212zM318.302 283.793c0 28.837-23.377 52.214-52.214 52.214s-52.214-23.377-52.214-52.214c0-28.837 23.377-52.214 52.214-52.214s52.214 23.377 52.214 52.214zM800.893 766.385c0 28.837-23.377 52.214-52.214 52.214s-52.214-23.377-52.214-52.214c0-28.837 23.377-52.214 52.214-52.214s52.214 23.377 52.214 52.214z" - ], - "isMulticolor": false, - "tags": [ - "kaleidoscope" - ], - "defaultCode": 59923, - "grid": 0, - "attrs": [] - }, - { - "id": 276, - "paths": [ - "M771.425 386.799h-130.737c20.754-27.238 33.451-60.391 33.451-97.287 0-89.555-72.599-162.153-162.153-162.153s-162.153 72.599-162.153 162.153c0 36.896 12.696 70.047 33.451 97.287h-130.711l-194.57 453.985h907.997l-194.573-453.985zM511.987 386.799c-53.743 0-97.287-43.542-97.287-97.287 0-53.69 43.57-97.287 97.287-97.287 53.743 0 97.287 43.542 97.287 97.287s-43.543 97.287-97.287 97.287z" - ], - "isMulticolor": false, - "tags": [ - "kettlebell" - ], - "defaultCode": 59924, - "grid": 0, - "attrs": [] - }, - { - "id": 277, - "paths": [ - "M453.751 31.992v486.559c-128.899 30.97-208.307 160.572-177.337 289.471 26.252 109.349 124.909 185.795 237.344 183.937 132.538 0.251 240.205-106.964 240.456-239.528 0.226-109.8-74.112-205.722-180.474-232.977v-187.501h119.99v-89.999h-119.99v-89.973h179.997v-119.99h-299.987zM504.372 631.965c1.556-0.025 3.112-0.025 4.693 0 1.556-0.025 3.112-0.025 4.693 0 66.282 0 119.99 53.733 119.99 119.99s-53.733 119.99-119.99 119.99c-66.282 2.259-121.847-49.642-124.106-115.924-2.259-65.805 48.94-121.169 114.719-124.055v0z" - ], - "isMulticolor": false, - "tags": [ - "key-basic" - ], - "defaultCode": 59925, - "grid": 0, - "attrs": [] - }, - { - "id": 278, - "paths": [ - "M874.848 267.693l20.149-32.362 48.409 30.14 34.094-49.757-85.846-58.821c-48.41 70.651-107.781 38.103-165.52-0.899l52.921-77.229-67.237-46.075-359.745 524.991-45.789-31.958c-48.85-34.093-109.16 50.936-59.658 85.483l46.523 32.467-6.729 9.821c-91.193-45.848-190.357-37.141-233.258 25.47h0.003c-48.572 70.877-6.692 184.079 92.893 252.323s219.468 65.878 268.034-5c43.031-62.8 15.691-158.383-60.366-226.825l6.264-9.141 39.62 27.65c45.43 31.704 106.214-52.991 59.658-85.483l-40.352-28.159 209.454-305.667c55.401 38.232 110.589 81.066 66.911 144.81l85.842 58.821 57.678-84.173-53.696-33.431 22.034-35.387 55.249 34.4 35.86-52.333-75.298-46.883 22.034-35.387 29.863 18.594zM197.871 896.869c-36.326 0-65.775-29.449-65.775-65.773s29.447-65.773 65.775-65.773 65.775 29.449 65.775 65.773c-0.002 36.326-29.449 65.773-65.775 65.773z" - ], - "isMulticolor": false, - "tags": [ - "key" - ], - "defaultCode": 59926, - "grid": 0, - "attrs": [] - }, - { - "id": 279, - "paths": [ - "M533.497 184.639c21.277 24.92 30.652 57.648 12.529 110.582 144.483 49.464 280.751 105.651 446.763 93.902-121.26-96.644-257.821-168.962-446.989-240.416l6.704-19.583-282.973-96.879-30.765 89.86c99.545 17.035 194.184 48.424 282.973 96.879l11.758-34.345zM544.245 426.058l16.143-21.043-304.098-233.295-74.084 96.568c113.941 61.368 216.059 138.161 304.098 233.295l28.316-36.909c15.657 38.96 13.671 82.541-29.97 139.426 155.267 119.116 297.815 243.042 504.247 296.606-107.786-166.927-244.095-310.564-444.653-474.648zM279.093 455.668l-161.637-278.007-88.283 51.329c68.867 83.953 123.638 176.108 161.637 278.007l33.744-19.618c-0.269 35.229-15.704 68.418-67.709 98.653 82.528 141.945 153.653 283.568 296.788 390.949-30.436-163.914-90.438-318.847-193.778-510.127l19.239-11.185z" - ], - "isMulticolor": false, - "tags": [ - "kitchen-knives" - ], - "defaultCode": 59927, - "grid": 0, - "attrs": [] - }, - { - "id": 280, - "paths": [ - "M582.624 530.773l82.234-86.866c35.008 15.086 73.614 14.541 101.804-13.646l229.842-229.839-44.156-44.151-160.259 168.116-30.227-28.816 160.948-168.838-33.095-33.095-164.445 172.506-30.227-28.816 165.133-173.23-31.594-31.594-229.84 229.84c-29.345 29.345-30.167 66.122-15.744 99.702l-86.541 82.568-418.545-418.494c-128.656 137.325 115.324 456.27 338.643 494.727l-382.445 364.891c-23.798 88.814 21.494 132.634 109.147 109.145l361.155-381.498 316.69 382.241c90.926 24.361 137.906-21.086 113.216-113.208l-351.695-351.65z" - ], - "isMulticolor": false, - "tags": [ - "knife-fork" - ], - "defaultCode": 59928, - "grid": 0, - "attrs": [] - }, - { - "id": 281, - "paths": [ - "M467.253 267.481l-1.228 1.109c-60.817-104.687-138.192-195.873-260.781-252.16-42.976-19.733-75.591 12.946-92.822 51.329-67.684 150.777 169.755-3.089 293.551 255.071l-0.491 0.444c-9.164 65.412-98.815 131.745-179.649 134.314 155.254 370.173 512.917 637.327 763.284 476.528-329.088-112.605-386.461-421.803-521.864-666.636z" - ], - "isMulticolor": false, - "tags": [ - "knife" - ], - "defaultCode": 59929, - "grid": 0, - "attrs": [] - }, - { - "id": 282, - "paths": [ - "M191.687 127.779h638.956zM543.113 479.205v479.177c117.142-0.406 234.284-5.284 351.426-63.856l-63.896-766.747c-319.478-127.791-319.478-127.791-638.956 0l-63.896 766.747c117.142 58.572 234.284 63.448 351.426 63.856v-479.177h-255.582v-95.843h575.060v95.843h-255.582zM638.956 734.788h-31.948v-31.948h31.948v31.948zM638.956 670.892h-31.948v-31.948h31.948v31.948zM638.956 606.996h-31.948v-31.948h31.948v31.948zM702.852 734.788h-31.948v-31.948h31.948v31.948zM702.852 670.892h-31.948v-31.948h31.948v31.948zM702.852 606.996h-31.948v-31.948h31.948v31.948zM766.747 734.788h-31.948v-31.948h31.948v31.948zM766.747 670.892h-31.948v-31.948h31.948v31.948zM766.747 606.996h-31.948v-31.948h31.948v31.948zM383.374 575.049h31.948v31.948h-31.948v-31.948zM383.374 638.944h31.948v31.948h-31.948v-31.948zM383.374 702.84h31.948v31.948h-31.948v-31.948zM319.478 575.049h31.948v31.948h-31.948v-31.948zM319.478 638.944h31.948v31.948h-31.948v-31.948zM319.478 702.84h31.948v31.948h-31.948v-31.948zM255.582 575.049h31.948v31.948h-31.948v-31.948zM255.582 638.944h31.948v31.948h-31.948v-31.948zM255.582 702.84h31.948v31.948h-31.948v-31.948zM319.478 351.414c-8.822 0-15.975-7.151-15.975-15.975s7.151-15.975 15.975-15.975 15.975 7.151 15.975 15.975-7.153 15.975-15.975 15.975zM415.321 351.414c-8.822 0-15.975-7.151-15.975-15.975s7.151-15.975 15.975-15.975 15.975 7.151 15.975 15.975-7.153 15.975-15.975 15.975zM511.165 351.414c-8.822 0-15.975-7.151-15.975-15.975s7.151-15.975 15.975-15.975 15.975 7.151 15.975 15.975-7.153 15.975-15.975 15.975zM607.008 351.414c-8.822 0-15.975-7.151-15.975-15.975s7.151-15.975 15.975-15.975 15.975 7.151 15.975 15.975-7.153 15.975-15.975 15.975zM702.852 351.414c-8.822 0-15.975-7.151-15.975-15.975s7.151-15.975 15.975-15.975 15.975 7.151 15.975 15.975-7.153 15.975-15.975 15.975z" - ], - "isMulticolor": false, - "tags": [ - "knight-helmet" - ], - "defaultCode": 59930, - "grid": 0, - "attrs": [] - }, - { - "id": 283, - "paths": [ - "M576.771 509.137l-139.172-119.892c14.214-34.517 5.604-75.676-24.23-101.376-37.268-32.105-93.503-27.919-125.606 9.346-32.103 37.267-27.919 93.501 9.35 125.605 29.656 25.547 71.307 28.091 103.267 9.298l137.904 118.799 27.304 141.471 406.493 195.746-253.763-373.038-141.546-5.959zM323.146 393.365c-20.831-17.944-23.171-49.378-5.227-70.207 17.944-20.831 49.376-23.169 70.208-5.225s23.171 49.376 5.227 70.207c-17.944 20.831-49.376 23.169-70.208 5.225zM175.973 297.15c30.062-19.795 45.539-57.267 35.713-93.941-12.275-45.813-59.364-73-105.175-60.723-45.811 12.275-72.996 59.362-60.722 105.175 9.767 36.455 41.583 61.089 77.253 63.458l45.424 169.521-55.025 127.566 217.713 376.625 0.232-435.023-109.57-81.573-45.843-171.085zM82.525 238.313c-6.861-25.607 8.334-51.927 33.941-58.789s51.927 8.334 58.787 33.942c6.862 25.608-8.334 51.928-33.941 58.789s-51.927-8.334-58.787-33.942zM275.508 179.26c37.268 32.103 93.503 27.919 125.606-9.346 2.614-3.035 4.963-6.206 7.096-9.468l130.643 35.005 71.145 95.563 373.060-0.202-322.981-186.7-107.565 46.401-129.923-34.813c1.139-26.31-9.325-52.865-30.827-71.389-37.268-32.105-93.503-27.919-125.606 9.346-32.101 37.267-27.917 93.501 9.351 125.605zM321.212 65.419c25.607-6.861 51.927 8.334 58.787 33.942 6.862 25.608-8.334 51.928-33.941 58.789s-51.927-8.334-58.787-33.942c-6.861-25.607 8.334-51.927 33.941-58.789z" - ], - "isMulticolor": false, - "tags": [ - "kunai" - ], - "defaultCode": 59931, - "grid": 0, - "attrs": [] - }, - { - "id": 284, - "paths": [ - "M867.141 387.446l-309.789-219.171c14.844-12.661 24.269-31.487 24.269-52.526 0-38.12-30.902-69.024-69.024-69.024s-69.024 30.904-69.024 69.024c0 20.587 9.024 39.059 23.32 51.704l-309.656 219.993h709.904zM676.628 890.73l130.566-464.752h-590.014l130.566 464.752h328.883zM533.688 477.964c104.578 82.951-16.3 135.91 31.849 196.302 19.852 24.898 59.927 3.361 69.602-44.705 25.603 92.479-23.752 199.408-121.278 199.408-42.078-1.276-77.924-34.046-100.287-83.961-33.249-126.261 178.039-171.74 120.114-267.043zM204.633 922.925h602.563v56.796h-602.563v-56.796z" - ], - "isMulticolor": false, - "tags": [ - "lantern-flame" - ], - "defaultCode": 59932, - "grid": 0, - "attrs": [] - }, - { - "id": 285, - "paths": [ - "M858.809 394.985l-22.627 39.176-144.606-83.455 41.122-71.217-202.017-116.482-41.077 71.139-133.494-77.042 22.627-39.173-119.661-69.057-215.867 373.738 119.661 69.057 23.6-40.86 133.533 77.062-41.167 71.296 35.062 20.216-223.818 387.271h177.252l178.946-310.94 34.575 19.935 41.122-71.217 144.568 83.43-23.6 40.861 119.661 69.057 215.867-373.738z" - ], - "isMulticolor": false, - "tags": [ - "large-hammer" - ], - "defaultCode": 59933, - "grid": 0, - "attrs": [] - }, - { - "id": 286, - "paths": [ - "M988.347 990.305l-0.005-0.008-0.002-48.768-339.074-341.643c-14.212-35.613-18.998-64.975-22.777-91.674 12.328 4.173 26.494 1.383 36.319-8.448 13.798-13.803 13.795-36.181-0.002-49.982-13.071-13.075-33.827-13.741-47.705-2.043-7.726-25.379-21.451-50.974-50.305-80.669-30.185-31.056-75.287-40.482-118.712-29.208l41.807-41.807-75.019-75.019 39.049-39.049-99.572-99.572-39.049 39.049-102.948-102.948h-190.076v201.74l97.116 97.116-38.16 38.16 99.572 99.572 38.159-38.159 75.019 75.019 154.073-154.073c35.417-2.708 71.76 9.445 98.844 36.537 49.242 49.259 49.257 129.126 0.007 178.393-30.222 30.234-71.959 41.874-111.081 35-2.083-7.412-6.027-14.41-11.855-20.241-13.651-13.654-33.688-17.027-50.497-10.125-1.662-1.497-3.298-3.040-4.898-4.641-25.334-25.343-37.599-58.792-36.866-92.006-8.012 39.204 0.316 79.027 25.902 107.488-17.431 18.188-17.214 47.072 0.685 64.98 18.135 18.14 47.537 18.146 65.675 0.002 4.081-4.081 7.235-8.737 9.478-13.703 48.736 16.441 96.473 6.52 166.159 30.999l45.779 46.127c-13.005 13.852-12.776 35.616 0.753 49.15 13.469 13.474 35.087 13.758 48.945 0.924l241.696 243.53h53.567zM435.001 677.561c-10.739 10.744-10.739 28.169 0.002 38.915s28.157 10.749 38.9 0.002c10.743-10.746 10.739-28.169-0.002-38.915s-28.161-10.744-38.9-0.002zM698.31 386.938c19.398-19.404 19.393-50.861-0.002-70.262s-50.846-19.399-70.237-0.002c-19.391 19.398-19.393 50.861 0.002 70.262s50.839 19.406 70.237 0.002zM693.529 570.547c10.741 10.746 28.157 10.749 38.9 0.002s10.739-28.171-0.002-38.915c-10.741-10.746-28.161-10.744-38.9-0.002-10.739 10.744-10.739 28.169 0.002 38.915z" - ], - "isMulticolor": false, - "tags": [ - "laser-blast" - ], - "defaultCode": 59934, - "grid": 0, - "attrs": [] - }, - { - "id": 287, - "paths": [ - "M511.996 151.988c-198.827 0-359.996 161.18-359.996 359.996s161.18 359.996 359.996 359.996 359.996-161.18 359.996-359.996-161.17-359.996-359.996-359.996zM511.996 331.991c99.408 0 180.003 80.585 180.003 180.003s-80.585 180.003-180.003 180.003-180.003-80.585-180.003-180.003 80.595-180.003 180.003-180.003zM572 625.989v341.996c0 13.252-10.742 24.004-24.004 24.004h-72.001c-13.252 0-24.004-10.742-24.004-24.004v-341.996c0-13.252 10.742-24.004 24.004-24.004h72.001c13.262 0 24.004 10.742 24.004 24.004zM572 55.983v341.996c0 13.252-10.742 24.004-24.004 24.004h-72.001c-13.252 0-24.004-10.742-24.004-24.004v-341.996c0-13.252 10.742-24.004 24.004-24.004h72.001c13.262 0.010 24.004 10.752 24.004 24.004z" - ], - "isMulticolor": false, - "tags": [ - "laser-site" - ], - "defaultCode": 59935, - "grid": 0, - "attrs": [] - }, - { - "id": 288, - "paths": [ - "M31.992 871.744v60.009h960v-60.009c0-60.009 0-60.009-60.009-60.009 0 0-29.992-60.009-60.009-60.009-60.009 0-60.009 90.002-119.994 90.002-60.009 0-60.009-90.002-119.994-90.002s-60.009 90.002-119.994 90.002-60.009-90.002-119.994-90.002-60.009 90.002-119.994 90.002-60.009-90.002-119.994-90.002c-29.992 0-60.009 60.009-60.009 60.009-60.009 0-60.009 0-60.009 60.009zM271.452 271.475c0.276 49.569-39.655 89.951-89.224 90.253-49.569 0.276-89.951-39.655-90.253-89.224 0-0.351 0-0.678 0-1.029-0.276-49.569 39.655-89.951 89.224-90.253 49.569-0.276 89.951 39.655 90.253 89.224 0.025 0.301 0.025 0.678 0 1.029zM601.993 182c0.276 49.569-39.655 89.951-89.224 90.253-49.569 0.276-89.951-39.655-90.253-89.224 0-0.351 0-0.678 0-1.029-0.276-49.569 39.655-89.951 89.224-90.253 49.569-0.276 89.951 39.655 90.253 89.224 0 0.351 0 0.678 0 1.029zM932.007 271.475c0.276 49.569-39.655 89.951-89.224 90.253-49.569 0.276-89.951-39.655-90.253-89.224 0-0.351 0-0.678 0-1.029-0.276-49.569 39.655-89.951 89.224-90.253 49.569-0.276 89.951 39.655 90.253 89.224 0 0.301 0 0.678 0 1.029zM572.001 481.997c0.201 32.979-26.403 59.884-59.382 60.085s-59.884-26.403-60.085-59.382c0-0.226 0-0.452 0-0.678-0.201-32.979 26.403-59.884 59.382-60.085s59.884 26.403 60.085 59.382c0 0.201 0 0.452 0 0.678zM301.996 721.733c0.1 16.565-13.252 30.067-29.816 30.168s-30.067-13.252-30.168-29.816c0-0.125 0-0.226 0-0.351-0.1-16.565 13.252-30.067 29.816-30.168s30.067 13.252 30.168 29.816c0 0.125 0 0.251 0 0.351zM301.996 541.956c0.201 32.979-26.403 59.884-59.382 60.085s-59.884-26.403-60.085-59.382c0-0.226 0-0.452 0-0.678-0.201-32.979 26.403-59.884 59.382-60.085s59.884 26.403 60.085 59.382c0 0.251 0 0.477 0 0.678zM842.006 541.956c0.201 32.979-26.403 59.884-59.382 60.085s-59.884-26.403-60.085-59.382c0-0.226 0-0.452 0-0.678-0.201-32.979 26.403-59.884 59.382-60.085s59.884 26.403 60.085 59.382c0 0.251 0 0.477 0 0.678zM542.009 691.741c0.1 16.565-13.252 30.067-29.816 30.168s-30.067-13.252-30.168-29.816c0-0.125 0-0.226 0-0.351-0.1-16.565 13.252-30.067 29.816-30.168s30.067 13.252 30.168 29.816c0 0.125 0 0.226 0 0.351zM781.996 721.733c0.1 16.565-13.252 30.067-29.816 30.168s-30.067-13.252-30.168-29.816c0-0.125 0-0.226 0-0.351-0.1-16.565 13.252-30.067 29.816-30.168s30.067 13.252 30.168 29.816c0 0.125 0 0.251 0 0.351z" - ], - "isMulticolor": false, - "tags": [ - "lava" - ], - "defaultCode": 59936, - "grid": 0, - "attrs": [] - }, - { - "id": 289, - "paths": [ - "M898.619 305.077c-1.848 5.569-3.742 11.172-5.638 16.807 21.572 105.467 13.594 220.065-40.816 345.175 7.896-80.356 6.59-157.217-5.828-230.894-14.657 28.517-33.349 56.146-52.473 83.961 2.713 79.902-12.176 164.233-51.31 254.216 6.278-63.909 5.128-125.514-1.164-185.418-25.628 29.141-54.235 57.15-86.293 82.797-7.591 50.672-21.875 103.145-45.482 157.43 4.235-43.137 4.915-85.749 3.496-127.106-71.065 48.332-155.463 86.983-257.712 108.447 86.103-48.325 154.818-98.182 211.068-149.265-37.003-7.709-75.076-12.777-113.113-16.326 50.288-12.707 99.963-17.665 148.101-16.326 34.398-35.177 63.139-70.557 86.293-107.284-64.163-11.538-129.101-14.874-194.745-10.492 75.37-36.473 150.451-49.212 225.061-44.313 19.277-39.682 32.454-80.729 41.981-122.441-56.743-5.362-118.52 8.102-188.914 25.655 63.562-58.228 132.266-83.52 200.574-90.959 3.553-28.903 5.422-57.86 5.76-87.718-315.121-224.233-231.651 529.919-725.274 651.082 406.167 251.603 1192.676-113.245 846.43-537.029zM825.227 59.061c20.091-9.774 44.48-10.349 62.972 6.996 10.554 99.306-21.77 309.203-149.265 455.959 97.235-177.214 104.361-305.538 86.293-462.952v-0.003z" - ], - "isMulticolor": false, - "tags": [ - "leaf" - ], - "defaultCode": 59937, - "grid": 0, - "attrs": [] - }, - { - "id": 290, - "paths": [ - "M337.083 610.805c24.883 0 45.059-20.168 45.059-45.059s-20.178-45.051-45.059-45.051c-24.883 0-45.059 20.158-45.059 45.051s20.176 45.059 45.059 45.059v0zM119.504 566.035c0-118.54 95.493-214.766 213.742-215.955-2.329-17.665-3.421-35.967-2.88-55.167 10.746-376.114 595.26-298.198 506.898 62.725-32.72 133.663-89.801 260.696-142.523 376.675-49.282 108.442 27.27 100.451 34.42 65.488l166.924 3.633c-6.079 278.147-516.377 220.497-353.347-138.205 53.467-117.641 97.773-232.73 132.348-347.308 39.562-131.064-261.083-180.152-152.718 99.338 15.539 40.093 29.038 89.347 28.806 137.847l0.271 10.92c0 119.273-96.69 215.964-215.974 215.964s-215.967-96.679-215.967-215.954z" - ], - "isMulticolor": false, - "tags": [ - "leo" - ], - "defaultCode": 59938, - "grid": 0, - "attrs": [] - }, - { - "id": 291, - "paths": [ - "M511.993 240.481c-149.961 0-271.536 121.575-271.536 271.536s121.575 271.536 271.536 271.536 271.536-121.575 271.536-271.536c0-149.986-121.575-271.536-271.536-271.536zM444.127 308.346h135.755v135.755h135.755v135.755h-135.755v135.755h-135.755v-135.755h-135.755v-135.755h135.755v-135.755zM31.992 31.992c192 96 240.013 48.013 335.988 143.988 0 0 0 96-48.013 143.988-48.013 48.013-144.013 48.013-144.013 48.013-95.95-95.975-47.962-143.988-143.963-335.988v0zM991.993 991.993c-192-96-240.013-48.013-335.988-143.988 0 0 0-96 48.013-143.988 48.013-48.013 144.013-48.013 144.013-48.013 95.975 96 47.962 143.988 143.963 335.988v0zM991.993 31.992c-96 192-48.013 240.013-144.013 336.013 0 0-96 0-144.013-48.013s-48.013-143.988-48.013-143.988c96.050-96 144.038-48.013 336.038-144.013v0zM31.992 991.993c96-192 48.013-240.013 144.013-336.013 0 0 96 0 144.013 48.013s48.013 143.988 48.013 143.988c-96.025 96.025-144.038 48.013-336.038 144.013v0z" - ], - "isMulticolor": false, - "tags": [ - "level-four-advanced" - ], - "defaultCode": 59939, - "grid": 0, - "attrs": [] - }, - { - "id": 292, - "paths": [ - "M783.527 511.99c-0.502 149.961-122.479 271.134-272.439 270.632-149.258-0.502-270.13-121.374-270.632-270.632-0.502-149.961 120.671-271.937 270.632-272.439s271.937 120.671 272.439 270.632c0 0.602 0 1.205 0 1.807zM31.991 31.989c192 96 240.013 48.013 335.988 143.988 0 0 0 96-48.013 143.988-48.013 48.013-144.013 48.013-144.013 48.013-95.95-95.975-47.962-143.988-143.962-335.988v0zM991.991 991.99c-192-96-240.013-48.013-335.988-143.988 0 0 0-96 48.013-143.988 48.013-48.013 144.013-48.013 144.013-48.013 95.975 96 47.962 143.988 143.962 335.988v0zM991.991 31.989c-96 192-48.013 240.013-144.013 336.013 0 0-96 0-144.013-48.013s-48.013-143.988-48.013-143.988c96.050-96 144.038-48.013 336.038-144.013v0zM31.991 991.99c96-192 48.013-240.013 144.013-336.013 0 0 96 0 144.013 48.013s48.013 143.988 48.013 143.988c-96.025 96.025-144.038 48.013-336.038 144.013v0z" - ], - "isMulticolor": false, - "tags": [ - "level-four" - ], - "defaultCode": 59940, - "grid": 0, - "attrs": [] - }, - { - "id": 293, - "paths": [ - "M511.992 427.988c-122.453 0-221.691 100.292-221.691 224s99.263 224 221.691 224 221.691-100.292 221.691-224-99.238-224-221.691-224v0zM456.575 483.982h110.858v111.987h110.858v111.987h-110.858v111.987h-110.858v-111.987h-110.858v-111.987h110.858v-111.987zM511.992 92.001c55.416 168.006 110.858 168.006 110.858 279.994 0 0-55.416 55.994-110.858 55.994-55.416 0-110.858-55.994-110.858-55.994 0.025-111.987 55.442-111.987 110.858-279.994zM991.992 932.007c-171.721-35.514-199.429 13.001-295.429-43.018 0 0-20.279-76.499 7.429-124.988s103.429-68.995 103.429-68.995c96 55.969 68.292 104.483 184.571 237.001v0zM31.992 932.007c116.279-132.493 88.571-181.007 184.571-237.001 0 0 75.721 20.505 103.429 68.995s7.429 124.988 7.429 124.988c-96 56.019-123.708 7.504-295.429 43.018z" - ], - "isMulticolor": false, - "tags": [ - "level-three-advanced" - ], - "defaultCode": 59941, - "grid": 0, - "attrs": [] - }, - { - "id": 294, - "paths": [ - "M733.708 651.988c-0.075 123.708-99.388 223.925-221.842 223.849-122.328-0.075-221.49-100.267-221.565-223.849-0.075-123.708 99.112-224.075 221.565-224.151s221.766 100.141 221.842 223.849c0 0.125 0 0.226 0 0.301zM511.991 92.001c55.416 168.006 110.858 168.006 110.858 279.994 0 0-55.416 55.994-110.858 55.994-55.416 0-110.858-55.994-110.858-55.994 0.025-111.987 55.442-111.987 110.858-279.994zM991.991 932.007c-171.721-35.514-199.429 13.001-295.429-42.993 0 0-20.279-76.499 7.429-124.988s103.429-68.995 103.429-68.995c96 55.944 68.292 104.458 184.571 236.976zM31.991 932.007c116.279-132.493 88.571-181.007 184.571-237.001 0 0 75.721 20.505 103.429 68.995s7.429 124.988 7.429 124.988c-96 56.019-123.708 7.504-295.429 43.018z" - ], - "isMulticolor": false, - "tags": [ - "level-three" - ], - "defaultCode": 59942, - "grid": 0, - "attrs": [] - }, - { - "id": 295, - "paths": [ - "M511.992 319.992c-99.413 0-180.003 85.961-180.003 192s80.59 192 180.003 192 180.003-85.961 180.003-192-80.59-192-180.003-192zM466.991 368.004h90.002v96h90.002v96h-90.002v96h-90.002v-96h-90.002v-96h90.002v-96zM511.992 31.992c45.001 143.987 90.002 143.987 90.002 240.013 0 0-45.001 48.013-90.002 48.013s-90.002-48.013-90.002-48.013c0-96 45.001-96 90.002-240.013zM511.992 991.992c-45.001-143.987-90.002-143.987-90.002-240.013 0 0 45.001-48.013 90.002-48.013s90.002 48.013 90.002 48.013c0 96.025-45.001 96.025-90.002 240.013z" - ], - "isMulticolor": false, - "tags": [ - "level-two-advanced" - ], - "defaultCode": 59943, - "grid": 0, - "attrs": [] - }, - { - "id": 296, - "paths": [ - "M691.986 511.992c0 106.039-80.59 192-180.003 192s-180.003-85.961-180.003-192 80.59-192 180.003-192 180.003 85.961 180.003 192v0zM512.008 31.992c45.001 143.987 90.002 143.987 90.002 240.013 0 0-45.001 48.013-90.002 48.013s-90.002-48.013-90.002-48.013c0-96 45.001-96 90.002-240.013zM512.008 991.992c-45.001-143.987-90.002-143.987-90.002-240.013 0 0 45.001-48.013 90.002-48.013s90.002 48.013 90.002 48.013c0 96.025-45.001 96.025-90.002 240.013z" - ], - "isMulticolor": false, - "tags": [ - "level-two" - ], - "defaultCode": 59944, - "grid": 0, - "attrs": [] - }, - { - "id": 297, - "paths": [ - "M848.472 453.68l141.459-245.015-142.286-82.149-141.459 245.015 25.192 14.545-176.579 305.847c-14.361-2.536-29.14-3.865-44.227-3.865-137.465 0-249.28 109.802-252.532 246.482h-75.654v68.593h643.032v-68.593h-62.315c-1.993-83.779-44.784-157.447-109.264-201.932l169.436-293.474 25.197 14.546z" - ], - "isMulticolor": false, - "tags": [ - "lever" - ], - "defaultCode": 59945, - "grid": 0, - "attrs": [] - }, - { - "id": 298, - "paths": [ - "M68.494 760.807h885.015v165.642h-885.015v-165.642zM584.53 627.319v-101.912c49.241-26.748 81.721-76.997 81.721-134.689 0-84.511-69.685-153.015-155.613-153.015s-155.603 68.504-155.603 153.015c0 57 31.687 106.718 78.698 133.050v103.551l-0.611 63.037h-364.639v-165.632h132.235c-19.947-40.892-31.066-86.415-31.066-134.373 0-177.778 152.812-321.905 341.323-321.905s341.323 144.127 341.323 321.905c0 47.958-11.119 93.481-31.066 134.373h132.245v165.632h-368.924l-0.022-63.037z" - ], - "isMulticolor": false, - "tags": [ - "libra" - ], - "defaultCode": 59946, - "grid": 0, - "attrs": [] - }, - { - "id": 299, - "paths": [ - "M803.588 328.001c0-171.143-138.706-309.413-310.394-309.413-171.683 0.002-311.954 138.272-311.954 309.413 0 191.242 138.82 194.712 138.82 436.909h0.351v148.572h79.297v41.028h188.914v-41.028h75.799v-148.572h0.347c0-245.418 138.82-249.507 138.82-436.909zM420.699 429.056l74.632-81.629 73.467 78.133 93.291-78.133-71.622 267.292-190.76 0.444-71.74-267.737 92.731 81.629z" - ], - "isMulticolor": false, - "tags": [ - "light-bulb" - ], - "defaultCode": 59947, - "grid": 0, - "attrs": [] - }, - { - "id": 300, - "paths": [ - "M499.263 255.571v63.896l479.217 127.791v-351.426zM483.29 383.362v-223.635l-191.687-95.843-191.687 95.843v223.635h61.313l-125.209 607.008h511.165l-125.209-607.008h61.313zM147.837 191.675h287.53v127.791h-287.53v-127.791z" - ], - "isMulticolor": false, - "tags": [ - "lighthouse" - ], - "defaultCode": 59948, - "grid": 0, - "attrs": [] - }, - { - "id": 301, - "paths": [ - "M751.997 421.99h-240v-389.998l-240 570.002h240v389.998l240-570.002z" - ], - "isMulticolor": false, - "tags": [ - "lightning-bolt" - ], - "defaultCode": 59949, - "grid": 0, - "attrs": [] - }, - { - "id": 302, - "paths": [ - "M764.844 197.241c18.967-53.238 20.939-109.157 7.836-161.916h-0.003v0.003c-1.35 48.616-16.27 98.388-44.313 143.437-74.804 120.176-225.111 173.4-363.129 139.605 10.399-4.614 20.432-9.652 30.012-15.173 77.984-44.926 114.377-110.731 108.449-183.079-14.75 43.554-49.175 82.5-100.287 111.948-95.94 55.273-235.64 63.269-374.326 33.815v74.632c81.952 16.324 163.915 19.114 236.756 6.872 8.357 5.71 17.074 11.090 26.268 16.077l-1.303 0.085 210.927 245.419-185.787 40.738 598.327 340.584-218.317-351.488 115.904-29.841-182.8-250.903c41.105-23.931 76.995-56.704 103.97-97.414 80.752 29.297 169.341 39.822 254.226 32.73v-78.133c-73.596 7.18-150.149 1.549-222.41-17.999z" - ], - "isMulticolor": false, - "tags": [ - "lightning-storm" - ], - "defaultCode": 59950, - "grid": 0, - "attrs": [] - }, - { - "id": 303, - "paths": [ - "M379.775 749.322l545.323-545.326 69.348-173.826-173.821 69.358-545.321 545.313zM97.141 625.986l0.002-0.002-0.002-0.002zM182.494 540.632l-85.351 85.353 119.369 119.369-188.095 188.095 61.824 61.824 188.095-188.095 119.456 119.457 85.353-85.354c-125.902-72.687-228.783-176.168-300.65-300.648zM289.662 385.971l120.753 111.86 75.564-75.562-63.027-58.386 62.163-57.583-445.223-266.761 311.874 288.902zM734.838 652.803l-126.316-117.015-75.564 75.564 73.511 68.097-57.907 53.646 445.223 266.761-316.795-293.464z" - ], - "isMulticolor": false, - "tags": [ - "lightning-sword" - ], - "defaultCode": 59951, - "grid": 0, - "attrs": [] - }, - { - "id": 304, - "paths": [ - "M108.325 124.707l502.495 669.507-9.737-119.345 334.602 265.024-368.817-556.926 9.737 119.345-468.28-377.605zM154.981 97.323l534.951 234.022-34.35-73.432 269.994 27.688-361.378-203.188 34.35 73.431-443.566-58.52zM72.826 183.197l66.027 572.376 46.351-73.905 123.197 252.076-17.378-436.231-46.351 73.905-171.847-388.221z" - ], - "isMulticolor": false, - "tags": [ - "lightning-trio" - ], - "defaultCode": 59952, - "grid": 0, - "attrs": [] - }, - { - "id": 305, - "paths": [ - "M197.958 266.467c187.636 155.922 173.203 208.263 22.109 417.533 82.142 57.902 156.959 215.202 130.454 304.419h-320.55l12.181-945.742c140.868 13.641 241.278 140.527 155.81 223.79h-0.003zM349.314 36.343c-134.555 269.756 164.964 532.859 507.789 437.966-18.193 153.042-1.908 302.389 121.779 308.508v-746.479l-629.568 0.005zM492.198 986.837c-86.86-46.843-113.54-106.341-124.985-162.671 129.245-14.668 236.679 29.399 274.803 164.253l-149.818-1.582zM414.555 471.075c-199.68 242.942-68.623 367.243 162.153 310.265 33.695 71.622 73.050 141.987 144.259 205.271h136.433c-19.835-28.031-46.070-54.462-82.755-78.282 72.308-125.611 81.045-239.908 11.272-373.718-100.905-15.881-163.741-1.363-260.427 29.143-25.884-46.929-67.389-68.874-110.939-92.681l0.005 0.002zM928.975 983.917c-121.166-33.394-109.272-154.19-55.632-212.746 57.661 30.677 87.506 63.533 114.903 121.306v93.677l-59.272-2.237zM982.764 779.996v-236.93z" - ], - "isMulticolor": false, - "tags": [ - "lightning" - ], - "defaultCode": 59953, - "grid": 0, - "attrs": [] - }, - { - "id": 306, - "paths": [ - "M773.192 387.722l0.003-0.003c-13.26-45.746-47.63-75.661-113.479-105.819 23.45-117.586-32.953-184.799-140.046-247.252l8.575 86.325c-75.814-50.672-184.412-102.906-281.74-98.356-32.442 1.493-65.934 6.587-101.082 16.85l119.131 125.15c-65.075 0.374-173.916 9.483-234.070 54.175l64.393 104.67-73.404 38.122v135.158l79.342 44.814-79.342 68.306v92.228c56.963-4.629 133.842 3.693 202.567-19.296-48.582 56.971-64.054 138.592-121.938 209.863 77.398-2.947 154.582-12.986 237.062-57.76l-19.256 152.827c131.455-48.973 261.287-172.341 250.138-277.671l1.844-8.803c7.661 4.537 15.719 8.593 24.167 12.134l232.426 82.361c12.712-27.493 26.494-55.122 41.1-82.754-9.148 3.558-19.090 5.533-29.499 5.533-44.966 0-81.417-36.453-81.417-81.419s36.451-81.419 81.417-81.419c40.050 0 73.32 28.926 80.123 67.021 24.252-40.993 49.945-81.673 76.521-121.584l-223.538-113.402z" - ], - "isMulticolor": false, - "tags": [ - "lion" - ], - "defaultCode": 59954, - "grid": 0, - "attrs": [] - }, - { - "id": 307, - "paths": [ - "M482.197 189.752c-6.475-9.191-10.026-21.838-8.052-37.591 8.586-68.501 62.322-79.361 74.689 0.005 2.604 16.716 0.301 29.402-4.836 38.371 17.005-11.596 27.869-34.838 21.963-70.95-18.35-112.209-99.335-100.337-112.212 0-4.368 34.036 9.258 57.879 28.448 70.165zM243.881 197.594c-3.503-8.541-4.781-19.728-2.596-33.765 12.368-79.366 66.102-68.506 74.689-0.005 1.433 11.431-0.050 21.222-3.441 29.252 16.366-12.407 27.167-33.394 23.191-61.826-12.993-92.912-94.47-107.804-113.21 0-5.867 33.744 4.666 55.416 21.367 66.345zM811.27 475.211h-28.062v-220.822c-7.469 5.25-14.937 8.249-22.406 9.644l-16.080-58.891-15.54 56.925c-7.826-2.001-15.654-4.798-23.482-7.677v220.822h-25.052c0 31.039 15.814 51.302 36.431 60.778v57.453c0 40.295-31.126 72.587-70.82 72.587h-103.655v-129.736c20.886-9.33 36.984-29.668 36.984-61.083h-29.865v-258.138c-7.183 2.708-14.368 5.033-21.551 6.669l-15.312-56.078-15.808 57.9c-8.279-1.161-16.559-3.827-24.838-8.491v258.138h-23.25c0 31.316 16.098 51.659 36.986 61.026v129.792h-103.888c-39.694 0-72.587-32.893-72.587-72.587v-56.951c21.101-9.239 37.427-29.643 37.427-61.28h-28.368v-241.813c-7.836 4.064-15.671 6.66-23.507 8.023l-16.24-59.487-15.981 58.532c-7.26-1.575-14.52-3.962-21.78-7.068v241.813h-24.746c0 31.096 15.871 51.374 36.543 60.827v57.404c0 70.87 58.371 129.239 129.239 129.239h103.888v184.587c-44.177 7.043-81.841 30.797-81.841 71.232h220.332c0-40.562-37.661-64.285-81.838-71.271v-184.549h103.655c70.871 0 127.472-58.976 127.472-129.239v-56.903c21.157-9.216 37.539-29.636 37.539-61.328zM714.358 228.070c-6.799-9.037-10.265-22.911-7.278-42.086 12.368-79.366 66.102-68.506 74.689-0.005 2.26 18.031-2.713 32-11.035 41.364 20.321-12.351 35.312-37.753 30.812-73.942-12.615-101.453-91.582-118.203-109.75 0-5.985 38.935 5.254 63.222 22.563 74.668z" - ], - "isMulticolor": false, - "tags": [ - "lit-candelabra" - ], - "defaultCode": 59955, - "grid": 0, - "attrs": [] - }, - { - "id": 308, - "paths": [ - "M302.94 307.487h96.971c8.511 0 15.41-8.897 15.41-19.87v-139.967c0-10.975-6.899-19.87-15.41-19.87h-96.971c-8.511 0-15.41 8.895-15.41 19.87v139.967c0 10.975 6.899 19.87 15.41 19.87zM830.643 748.765v-255.582h-255.582v255.582h-127.791l255.582 255.582 255.582-255.582zM227.627 822.645c-8.822 0-15.975-7.151-15.975-15.975v-367.399c0-8.822 7.151-15.975 15.975-15.975h567.074c8.822 0 15.975 7.151 15.975 15.975v17.161h49.713v275.413h50.124v-476.274c0-8.845-134.916-143.766-143.766-143.766h-151.717c5.399 2.198 9.169 7.151 9.169 12.919v197.797c0 7.808-6.899 14.137-15.41 14.137h-339.014c-8.511 0-15.41-6.329-15.41-14.137v-197.797c0-5.768 3.77-10.721 9.169-12.919h-135.743c-8.85 0-15.975 7.125-15.975 15.975v766.747c0 8.85 7.125 15.975 15.975 15.975h461.169l-87.857-87.857h-273.476z" - ], - "isMulticolor": false, - "tags": [ - "load" - ], - "defaultCode": 59956, - "grid": 0, - "attrs": [] - }, - { - "id": 309, - "paths": [ - "M245.87 695.356l-47.116 281.326h638.836l-47.116-281.326h-51.644v-365.471l92.312-103.255v-185.471h-107.697v87.813h-65.591v-87.813h-107.699v87.813h-64.781v-87.813h-107.697v87.813h-64.781v-87.813h-107.694v185.468l92.312 103.255v365.474h-51.644zM518.172 371.953c38.697 0 70.066 31.37 70.066 70.066 0 26.734-14.976 49.964-36.993 61.776l35.439 179.897h-137.056l35.442-179.91c-22.002-11.817-36.966-35.038-36.966-61.762 0-38.697 31.37-70.066 70.066-70.066z" - ], - "isMulticolor": false, - "tags": [ - "locked-fortress" - ], - "defaultCode": 59957, - "grid": 0, - "attrs": [] - }, - { - "id": 310, - "paths": [ - "M987.236 327.085h-0.005c-8.675-276.41-342.943-369.672-482.028-128.775-83.687-235.159-472.224-152.345-463.254 128.775 2.449 76.658 32.994 144.935 77.548 206.995l212.646-70.88c-39.689-2.086-81.745-18.868-137.244-65.113 64.004-37.771 115.58-41.443 181.559-46.835 53.337-28.734 132.719-53.724 167.923-34.983 61.866-36.577 139.002-83.585 216.898-113.113v-0.002h0.005c-0.002 0-0.003 0.002-0.005 0.002 10.15 39.786 10.653 88.934 6.996 135.27l-20.989-27.987c-102.754 23.094-154.442 225.171-1.164 141.102l20.991-33.817c3.521 31.714 6.769 61.057 0 87.459-67.963 47.939-137.425 87.314-206.404 118.944-35.436 31.159-105.044 130.902-125.478 217.469 39.961 40.101 69.762 78.654 80.059 117.085 41.262-153.974 480.75-351.068 471.947-631.596zM444.588 372.679c25.956-12.911 54.204-19.864 85.917-17.811 9.129 63.486-51.517 56.223-85.917 17.811z" - ], - "isMulticolor": false, - "tags": [ - "love-howl" - ], - "defaultCode": 59958, - "grid": 0, - "attrs": [] - }, - { - "id": 311, - "paths": [ - "M942.234 398.695c17.126-82.353-32.694-153.186-113.303-132.806 23.136-65.192-15.527-122.86-68.483-147.261l-0.007 0.010c-41.186-18.978-90.947-18.572-124.166 14.49-34.365-104.258-186.791-132.114-228.2-10.564-62.449-64.666-195.090 21.267-175.632 105.963-105.975-51.776-190.409 128.307-119.912 196.033-90.485 20.756-80.864 162.173-7.634 188.144-64.352 85.912-15.388 155.762 62.81 154.758 8.239 39.122 24.558 63.254 43.634 76.115l-16.549 11.074c21.038 16.11 52.343 15.464 80.458 4.104 79.069 73.018 193.675 104.643 256.122-17.010-76.259 61.014-153.834 25.772-202.289-26.709 9.844-16.305 13.589-35.254 7.226-55.074l-15.846 10.602c-6.030-20.348-23.195-41.642-56.313-60.528 12.699-33.361 6.388-75.931-20.475-111.467 44.291-33.555 44.052-76.897 21.367-120.972 43.72-20.767 63.725-48.432 65.105-101.104 6.106-6.433 13.673-8.311 19.501 5.873 42.767 104.075 79.625 91.148 67.759-14.74-3.146-28.081 63.546-21.106 59.982 10.392-13.852 122.379 23.741 152.964 60.408 11.986 10.766-41.399 65.412-6.699 55.471 15.866-50.141 113.851-25.722 128.633 50.609 35.954 30.301-36.79 60.974 11.765 42.955 32.88-75.49 88.458-70.364 113.27 25.777 57.97 7.218-4.151 15.813-6.968 25.349-9.002-7.051 25.329-8.418 51.115-2.003 74.643-57.247 53.93-58.375 154.136 8.441 237.342-45.413-108.352-11.692-161.473 37.435-175.468 15.778 10.424 35.691 18.753 60.329 24.24 18.47 4.114 35.187 5.446 50.239 4.438 35.175 35.457 38.628 96.862-49.919 169.012 104.988-36.244 134.298-114.952 109.593-189.995 77.64-57.732 61.383-216.373-9.841-269.19z" - ], - "isMulticolor": false, - "tags": [ - "maggot" - ], - "defaultCode": 59959, - "grid": 0, - "attrs": [] - }, - { - "id": 312, - "paths": [ - "M725.829 386.532c-63.822 147.643-180.099 270.861-334.121 337.887 193.021-21.674 333.214-173.245 334.121-337.887zM842.505 386.532c-86.111 199.207-242.992 365.454-450.802 455.884 260.427-29.245 449.574-233.746 450.802-455.884zM987.348 386.532c-113.778 263.208-321.065 482.869-595.641 602.361 344.099-38.646 594.020-308.852 595.641-602.361zM380.614 544.198c-52.398-41.343-111.806-89.185-130.593-107.969-76.259-76.264-85.059-151.671-26.823-209.903 58.236-58.234 132.741-49.169 209.903 27.987 18.589 18.591 65.636 76.568 106.68 128.231l71.471-72.589c-42.552-67.916-97.634-152.379-124.507-179.252-118.829-102.547-263.845-107.011-364.997-6.998h0.003c-115.179 113.881-95.845 264.494 5.827 366.166 27.255 27.255 113.758 83.535 182.148 126.321l70.887-71.994zM322.801 624.344c44.012 27.364 77.654 47.443 77.654 47.443l62.972-62.972c-12.29-9.467-39.604-30.626-70.928-55.258l-69.697 70.786zM549.193 394.412c25.156 31.777 46.868 59.644 56.495 72.136l62.972-62.972c0 0-20.951-35.103-49.22-80.51l-70.247 71.346z" - ], - "isMulticolor": false, - "tags": [ - "magnet" - ], - "defaultCode": 59960, - "grid": 0, - "attrs": [] - }, - { - "id": 313, - "paths": [ - "M632.398 471.93c0-66.508-53.917-120.4-120.4-120.4-66.508 0-120.4 53.917-120.4 120.4 0 66.508 53.917 120.4 120.4 120.4 66.508 0 120.4-53.892 120.4-120.4zM511.998 953.554c-77.639 0-150.468-19.114-215.415-51.726l134.527-268.098c24.251 12.113 51.952 18.812 80.888 18.812s56.636-6.699 80.888-18.812l134.527 268.098c-64.947 32.612-137.776 51.726-215.415 51.726v0zM929.103 231.131c38.807 67.238 58.676 139.866 62.907 212.418l-299.425 17.553c-1.637-27.046-9.695-54.395-24.15-79.452-14.48-25.057-34.123-45.707-56.737-60.641l164.923-250.545c60.691 39.915 113.651 93.429 152.483 160.667v0zM94.893 231.131c38.807-67.238 91.792-120.752 152.508-160.692l164.923 250.545c-22.614 14.959-42.257 35.584-56.737 60.641s-22.514 52.406-24.15 79.477l-299.425-17.553c4.206-72.552 24.075-145.205 62.882-212.418v0z" - ], - "isMulticolor": false, - "tags": [ - "mass-driver" - ], - "defaultCode": 59961, - "grid": 0, - "attrs": [] - }, - { - "id": 314, - "paths": [ - "M931.576 219.478c1.189 27.573-2.501 54.902-12.33 81.337-20.714-79.164-61.296-189.28-181.56-240.937-31.694-11.062-66.812-19.020-105.527-23.206h-0.005c81.369 99.224 55.207 173.111 10.644 245.040 1.602-85.7-74.278-116.049-166.252-88.006 142.645 0.286 126.811 107.323 94.372 201.847-16.778 32.27-28.553 66.37-28.553 104.070 0 42.228 13.446 76.934 37.048 103.68l-543.981 332.459v47.809h119.776l526.587-327.842c10.638 3.784 22.080 5.862 34.013 5.862 56.183 0 101.73-45.669 101.73-102.002s-45.547-102.002-101.73-102.002-101.73 45.669-101.73 102.002c0 7.263 0.77 14.344 2.21 21.178l-19.331 11.814c-4.492-18.768-4.697-39.709 0.221-62.633 20.33-94.794 104.069-144.372 141.1-223.897 19.155 35.309 48.434 60.556 76.965 60.638 38.808 0.112 60.187-45.074 50.146-101.456 82.668 118.964 56.562 303.301-23.325 387.157 131.374-59.983 178.273-273.326 89.514-432.911z" - ], - "isMulticolor": false, - "tags": [ - "match" - ], - "defaultCode": 59962, - "grid": 0, - "attrs": [] - }, - { - "id": 315, - "paths": [ - "M671.278 560.475c7.181-34.717-2.314-71.748-28.695-98.13-32.011-32.013-79.683-39.148-119.887-21.813l-30.008-29.791c9.106-21.91 8.6-45.238-8.685-62.522l-73.431-73.439c-19.55-19.551-43.203-22.189-64.876-14.76l-54.77-54.773c7.978-21.123 6.842-43.274-9.742-59.858l-73.431-73.434c-19.725-19.725-43.629-22.241-65.461-14.563l-38.827-38.827h-83.961v38.483l63.136 62.491c-7.038 21.997-4.479 45.507 13.773 63.76l73.431 73.431c17.106 17.107 39.295 18.287 60.272 10.165l55.373 55.375c-7.076 22.024-4.535 45.576 13.745 63.854l73.431 73.436c18.091 18.093 41.867 18.375 63.882 8.673l28.176 27.972c-19.722 41.045-13.222 90.967 19.907 124.098 22.717 22.718 53.33 32.898 83.564 30.707l0.132 0.399c0.677-0.204 1.402-0.394 2.096-0.593 9.009-0.835 17.961-2.766 26.646-5.8 61.761-9.984 155.889-5.319 217.253 26.432 74.861 38.733 106.919 117.311 71.573 175.43-34.203 56.241-118.099 72.971-192.236 25.020l53.311-24.284-137.679-62.21 18.23 43.933 46.127 138.649 222.707-10.599 15.908-56.562 55.675-15.911 11.49-222.707-308.149-101.728zM523.157 581.774c-11.72-11.72-16.92-27.544-15.697-43.14l22.62 22.456c31.275 31.047 87.344-26.514 57.025-56.614l-19.585-19.444c13.375 0.509 26.47 5.77 36.538 15.839 11.586 11.588 16.808 27.189 15.743 42.612-0.221 3.196-0.72 6.383-1.48 9.527-0.042 0.174-0.079 0.349-0.122 0.523-0.149 0.588-0.314 1.173-0.483 1.757-0.075 0.266-0.147 0.531-0.226 0.795-0.162 0.536-0.339 1.069-0.516 1.602-0.104 0.311-0.204 0.621-0.312 0.93-0.177 0.501-0.366 1.001-0.558 1.498-0.129 0.336-0.257 0.672-0.393 1.006-0.192 0.474-0.394 0.945-0.6 1.417-0.155 0.354-0.311 0.707-0.473 1.057-0.207 0.449-0.421 0.897-0.641 1.343-0.18 0.366-0.366 0.732-0.555 1.096-0.222 0.428-0.448 0.852-0.68 1.275-0.207 0.378-0.423 0.752-0.64 1.126-0.236 0.404-0.471 0.809-0.717 1.208-0.237 0.386-0.483 0.768-0.73 1.149-0.246 0.381-0.491 0.763-0.748 1.141-0.269 0.396-0.55 0.787-0.83 1.178-0.254 0.354-0.504 0.712-0.767 1.062-0.309 0.413-0.633 0.817-0.954 1.223-0.254 0.321-0.501 0.645-0.763 0.962-0.378 0.456-0.772 0.902-1.164 1.35-0.226 0.256-0.441 0.518-0.672 0.77-0.633 0.697-1.285 1.383-1.959 2.058-0.82 0.82-1.665 1.604-2.521 2.365-0.257 0.229-0.521 0.449-0.782 0.675-0.626 0.54-1.261 1.064-1.904 1.572-0.281 0.221-0.56 0.443-0.842 0.658-0.742 0.565-1.493 1.108-2.255 1.632-0.162 0.112-0.321 0.231-0.484 0.341-0.935 0.63-1.884 1.228-2.846 1.797-0.21 0.125-0.426 0.241-0.638 0.362-0.767 0.441-1.54 0.865-2.322 1.27-0.274 0.142-0.55 0.281-0.827 0.418-0.8 0.398-1.609 0.775-2.422 1.134-0.197 0.087-0.393 0.179-0.59 0.264-1.047 0.448-2.101 0.867-3.167 1.25-0.002 0-0.005 0.002-0.007 0.002-1.039 0.373-2.086 0.707-3.139 1.017-0.205 0.060-0.411 0.117-0.616 0.175-0.912 0.259-1.827 0.494-2.748 0.707-0.169 0.038-0.337 0.080-0.506 0.119-2.218 0.491-4.457 0.852-6.704 1.074-0.075 0.007-0.15 0.012-0.224 0.020-1.051 0.1-2.101 0.17-3.154 0.212-0.119 0.005-0.239 0.010-0.357 0.013-3.414 0.114-6.829-0.079-10.198-0.581-0.077-0.012-0.154-0.023-0.231-0.035-1.111-0.17-2.217-0.371-3.316-0.608v0c-9.893-2.142-19.244-6.999-26.861-14.615z" - ], - "isMulticolor": false, - "tags": [ - "meat-hook" - ], - "defaultCode": 59963, - "grid": 0, - "attrs": [] - }, - { - "id": 316, - "paths": [ - "M666.843 431.131c-35.309-68.017-38.421-127.602-7.836-132.088 7.262-1.064 15.333 0.874 24.629 5.598-18.49-14.481-36.963-22.117-50.373-20.151l0.005 0.002c-34.595 5.075-29.86 71.952 10.075 148.879s100.855 134.929 135.447 129.849c11.967-1.757 18.482-11.393 21.265-25.745-3.333 4.367-7.698 6.993-13.434 7.836-30.585 4.489-84.469-46.164-119.778-114.18zM923.379 312.151c31.253-40.716 15.363-82.353-13.795-103.467-8.595-7.146-18.379-11.789-28.139-12.709-23.754-5.077-49.149 2.892-64.667 31.243-18.337 33.503-32.322 57.287-47.074 76.374-64.584-84.259-140.644-129.064-185.26-103.277-1.487 0.859-2.913 1.801-4.3 2.796-0.063-0.079-0.134-0.172-0.195-0.247-170.118 144.79-237.85 154.973-325.816 183.065-68.222 21.785-79.459 147.259-31.151 260.963-37.549 4.829-81.17 8.376-133.269 11.052-98.097 5.038-51.008 142.876 60.109 104.224-98.571 59.703 7.701 173.596 53.848 93.369 24.18-42.039 51.497-78.031 81.417-109.391 76.551 88.383 186.388 137.418 224.901 83.42 60.221-84.446 181.766-136.506 322.856-184.462l0.002-0.003c-0.229-0.535-0.503-1.144-0.797-1.792 2.106-0.87 4.161-1.861 6.146-3.009 42.176-24.376 43.832-104.652 9.594-196.246 22.951-4.457 48.674-6.468 85.981-7.211 103.142-2.051 90.439-148.086-10.389-124.692zM814.605 609.235c-0.81 0.655-1.645 1.275-2.497 1.871-0.149 0.104-0.296 0.209-0.444 0.311-0.879 0.601-1.776 1.178-2.703 1.714-45.943 26.554-131.276-35.3-190.594-138.155s-70.162-207.762-24.219-234.317c0.672-0.388 1.353-0.753 2.041-1.104 0.54-0.274 1.086-0.528 1.635-0.778 0.13-0.060 0.259-0.125 0.391-0.184 0.673-0.299 1.353-0.581 2.041-0.847 0.002 0 0.002-0.002 0.003-0.002 0.695-0.269 1.398-0.52 2.106-0.755 37.987-12.595 96.381 23.853 146.878 88.839-3.303 3.279-6.62 6.533-9.953 9.759-14.162 12.027-30.854 23.094-52.692 35.703-21.091 35.478 25.789 107.231 61.659 107.231 28.866-12.171 50.081-20.909 70.429-27.16 25.762 71.414 25.431 134.004-4.083 157.875z" - ], - "isMulticolor": false, - "tags": [ - "meat" - ], - "defaultCode": 59964, - "grid": 0, - "attrs": [] - }, - { - "id": 317, - "paths": [ - "M152.010 92.001c-66.485 0-119.994 53.509-119.994 119.994v599.994c0 66.485 53.509 119.994 119.994 119.994h720.013c66.485 0 119.994-53.509 119.994-119.994v-599.994c0-66.485-53.509-119.994-119.994-119.994h-720.013zM152.010 211.995h720.013v599.994h-720.013v-599.994zM452.007 331.988v119.994h-119.994v119.994h119.994v119.994h119.994v-119.994h119.994v-119.994h-119.994v-119.994h-119.994z" - ], - "isMulticolor": false, - "tags": [ - "medical-pack" - ], - "defaultCode": 59965, - "grid": 0, - "attrs": [] - }, - { - "id": 318, - "paths": [ - "M842.61 875.644v-830.439h-668.199v830.439h-15.246l60.971 115.916 60.971-115.916h-34.395v-126.784h78.133v126.784h-14.251l60.971 115.916 60.971-115.916h-35.391v-126.784h73.469v126.784h-11.384l60.971 115.916 60.971-115.916h-37.088v-126.784h79.297v126.784h-13.915l60.971 115.916 60.971-115.916h-35.726v-126.784h74.632v126.784h-12.213l60.971 115.916 60.971-115.916h-37.429zM397.143 325.699h73.469v139.002h-73.469v-139.002zM324.844 464.701h-78.133v-139.002h78.133v139.002zM544.081 325.699h79.297v139.002h-79.297v-139.002zM695.679 325.699h74.632v139.002h-74.632v-139.002zM770.31 116.848v136.301h-74.632v-136.301h74.632zM623.379 116.848v136.301h-79.297v-136.301h79.297zM470.612 116.848v136.301h-73.469v-136.301h73.469zM324.844 116.848v136.301h-78.133v-136.301h78.133zM246.71 676.299v-139.049h78.133v139.049h-78.133zM397.143 676.299v-139.049h73.469v139.049h-73.469zM544.081 676.299v-139.049h79.297v139.049h-79.297zM695.679 676.299v-139.049h74.632v139.049h-74.632z" - ], - "isMulticolor": false, - "tags": [ - "metal-gate" - ], - "defaultCode": 59966, - "grid": 0, - "attrs": [] - }, - { - "id": 319, - "paths": [ - "M409.206 459.868l-221.034 287.219c3.227 13.626 6.702 24.99 10.664 34.657-65.895 25.881-112.647 125.979-69.391 182.867 34.49 23.833 52.653 9.787 69.986 1.472-13.213-40.434-34.168-87.252 55.936-130.043 7.606 3.154 16.043 6.181 25.493 9.346l305.665-251.7-14.998 11.665c-93.116-4.266-149.572-59.237-162.322-145.483zM629.895 109.008c-30.149 34.109-48.584 78.805-49.017 127.801l-0.008-0.008-157.544 204.725c10.78 90.072 67.741 147.755 163.232 152.132l193.491-159.33c56.783-0.987 107.664-26.148 142.799-65.638l-2.051 1.981c-155.436-4.128-268.074-67.22-290.901-261.663zM560.442 489.662l-29.071-26.32 62.783-69.348 29.071 26.32-62.783 69.348zM776.543 42.846c-50.961 0.010-97.364 19.501-132.183 51.424 22.52 193.925 134.156 257.513 288.467 262.263 24.785-32.8 39.488-73.643 39.48-117.922 0-0.027 0-0.053 0-0.079-0.022-108.096-87.668-195.708-195.764-195.686z" - ], - "isMulticolor": false, - "tags": [ - "microphone" - ], - "defaultCode": 59967, - "grid": 0, - "attrs": [] - }, - { - "id": 320, - "paths": [ - "M926.486 430.982v-127.489h-50.68c-34.692-63.184-63.179-152.34-141.006-198.337-89.215 1.737-171.2 102.846-255.582 138.434-32.806-37.838-84.947-66.874-159.739-59.901-72.617 6.76-110.245 61.931-143.044 119.805h-112.538v127.489h33.981l77.55 293.247c-5.107-0.92-10.342-1.422-15.687-1.422-52.932 0-95.843 46.934-95.843 104.829s42.911 104.829 95.843 104.829c52.891 0 95.772-46.858 95.84-104.69h125.822c0.068 57.832 42.951 104.69 95.84 104.69s95.772-46.858 95.84-104.69h236.736l9.44-45.066h107.229v-89.853h-88.41l54.852-261.873h33.558z" - ], - "isMulticolor": false, - "tags": [ - "mine-wagon" - ], - "defaultCode": 59968, - "grid": 0, - "attrs": [] - }, - { - "id": 321, - "paths": [ - "M672.715 242.249l-34.709 21.519-20.42 133.112-0.017 0.058 76.539-118.148zM549.627 417.423l-157.136-51.952-43.593 26.903 28.712 34.555zM413.303 156.299c6.376-3.556 11.735-8.611 15.47-15.081 12.943-22.423 1.545-53.24-25.458-68.834s-59.387-10.058-72.33 12.365c-3.735 6.471-5.432 13.643-5.322 20.944-92.551-41.49-193.1-51.13-273.809-11.837 210.069 60.421 384.172 169.774 535.876 309.567-21.267-97.482-89.055-185.765-174.427-247.125zM276.368 205.323l-224.749 389.498c16.67 27.433 41.197 49.68 82.954 47.926l224.749-389.498c-25.55-18.358-53.325-34.191-82.954-47.926zM809.302 386.983l-361.597 111.638-84.506 165.462 432.35 313.984 176.83-502.062z" - ], - "isMulticolor": false, - "tags": [ - "mining-diamonds" - ], - "defaultCode": 59969, - "grid": 0, - "attrs": [] - }, - { - "id": 322, - "paths": [ - "M818.348 128.84h-34.859c-77.772-67.557-169.84-106.803-268.976-106.803-99.138 0-191.204 39.246-268.978 106.803h-34.854v771.979h34.271c77.881 67.736 170.326 107.346 269.561 107.346s191.68-39.609 269.561-107.346h34.275v-771.979zM264.595 186.938h293.678l-293.312 251.41v125.942l440.245-377.352h59.41v657.294h-500.021v-657.294zM264.96 844.165h61.802l437.301-374.326v-220.404l-499.104 427.972z" - ], - "isMulticolor": false, - "tags": [ - "mirror" - ], - "defaultCode": 59970, - "grid": 0, - "attrs": [] - }, - { - "id": 323, - "paths": [ - "M659.977 173.447c-22.622-18.567-49.296-32.349-80.597-40.557-5.97-7.387-13.14-13.758-21.215-18.83-19.94-41.214-45.574-83.071-45.574-83.071s-25.61 41.825-45.547 83.024c-6.884 4.313-13.113 9.567-18.502 15.596-37.17 7.429-68.219 22.242-94.043 43.232-192.532-31.622-365.867 161.819-304.527 365.69 24.673 81.994 145.47 134.642 208.191 100.292-118.224 0.195-153.346-128.234-116.788-217.315 23.368-56.941 64.357-89.096 121.051-89.422-18.779 70.384-25.498 154.131-25.498 244.009h140.953c-3.369 23.996-4.846 50.011-5.033 77.224-3.272 29.422 17.892 152.491 17.892 152.491s60.388-99.859 71.354-132.338c12.291 47.928 45.571 137.122 45.571 137.122s32.953-88.33 45.385-136.423c11.583 33.192 71.115 131.638 71.115 131.638s21.81-126.812 17.729-153.76c-0.224-26.753-1.704-52.333-5.021-75.956h139.905c0-89.861-6.715-173.597-25.486-243.974 58.919-1.305 101.383 31.021 125.336 89.387 36.558 89.081 1.437 217.511-116.788 217.315 62.721 34.35 183.518-18.298 208.191-100.292 61.716-205.114-114.118-399.667-308.054-365.082zM383.679 360.448c17.757 18.875 42.986 32.384 78.192 38.418 0 0.050 0.003 0.099 0.003 0.149 0 26.851-21.768 48.616-48.614 48.616s-48.614-21.765-48.614-48.616c0-15.717 7.465-29.681 19.033-38.566zM657.684 399.014c-0.002 26.851-21.768 48.616-48.614 48.616s-48.614-21.765-48.614-48.616c0-0.613 0.023-1.219 0.047-1.826 32.818-7.118 56.287-21.222 72.756-40.334 3.525 2.026 6.77 4.479 9.667 7.292l0.025 0.094c0.017-0.008 0.032-0.017 0.048-0.025 9.054 8.828 14.685 21.153 14.685 34.799zM228.208 897.061c-23.582 87.994 98.112 114.823 120.247 32.22 8.895-33.207-8.048-210.468-8.048-210.468s-103.304 145.035-112.199 178.248zM670.52 718.813c0 0-16.944 177.261-8.048 210.468 22.135 82.603 143.828 55.774 120.247-32.22-8.897-33.212-112.199-178.248-112.199-178.248zM558.94 766.184c0 0-32.803 127.429-30.137 152.698 6.632 62.847 98.55 57.289 91.485-9.657-2.661-25.266-61.348-143.041-61.348-143.041zM394.187 909.225c-7.064 66.948 84.853 72.504 91.485 9.657 2.664-25.269-30.137-152.698-30.137-152.698s-58.685 117.775-61.348 143.041z" - ], - "isMulticolor": false, - "tags": [ - "monster-skull" - ], - "defaultCode": 59971, - "grid": 0, - "attrs": [] - }, - { - "id": 324, - "paths": [ - "M632.010 362.001c0-66.284-53.735-119.994-119.994-119.994-66.284 0-119.994 53.735-119.994 119.994 0 66.284 53.735 119.994 119.994 119.994s119.994-53.71 119.994-119.994zM31.992 722.007v60.009h960v-60.009c0-29.992-29.992-60.009-60.009-60.009h-60.009l-119.994-119.994-119.994 119.994-119.994-119.994-119.994 119.994-119.994-119.994-119.994 119.994h-60.009c-29.992 0-60.009 29.992-60.009 60.009z" - ], - "isMulticolor": false, - "tags": [ - "montains" - ], - "defaultCode": 59972, - "grid": 0, - "attrs": [] - }, - { - "id": 325, - "paths": [ - "M991.818 442.881l-199.717-75.567 34.418-210.745-201.566 70.489-109.099-183.562-109.1 183.562-201.564-70.489 34.417 210.745-199.718 75.566 161.829 139.317-104.421 186.263 213.518 2.701 39.737 209.805 165.3-135.178 165.298 135.18 39.739-209.806 213.518-2.703-104.418-186.263 161.829-139.314zM527.111 815.802c-159.27 0-288.379-129.114-288.379-288.384 0-159.265 129.109-288.379 288.379-288.379 74.498 0 142.393 28.251 193.568 74.62-17.612-6.849-36.234-11.638-55.538-13.591-7.651-0.783-15.547 0-23.403 0-125.737 0-227.181 101.439-227.181 227.178s101.444 227.178 227.181 227.178c28.804 0 56.305-5.733 81.643-15.743-51.476 47.846-120.448 77.121-196.269 77.121z" - ], - "isMulticolor": false, - "tags": [ - "moon-sun" - ], - "defaultCode": 59973, - "grid": 0, - "attrs": [] - }, - { - "id": 326, - "paths": [ - "M64.674 832.53v0-0.002zM693.499 384.020l217.562-227.751-1.001-1.201 53.94-55.212-17.039-17.039-37.039 31.856-67.414-65.932c-11.281 0.672-21.213 3.438-23.706 17.779l31.129 37.049-473.36 385.963c-0.003 0-0.007-0.002-0.008-0.002-22.571-0.556-33.501 15.332-37.039 22.964-18.589 40.095-29.992 83.124-53.709 123.719-72.144 66.209-163.661 127.81-221.141 196.317 34.504 47.57 81.489 88.899 122.24 133.347 16.494-1.006 25.715-19.476 37.781-31.116 53.387-100.815 92.249-192.505 154.828-285.953 32.001-20.564 73.188-40.344 72.602-63.693 25.929 3.571 47.066 14.326 56.288 42.965-11.321 55.495 4.965 78.252 13.334 110.38l88.896-20.742c-27.277-45.801-32.542-112.356-43.706-173.357l113.298-94.18c70.871 52.15 144.524 99.518 230.235 126.223l18.519-48.895c-81.434-27.399-181.348-85.882-235.49-143.489zM454.071 543.305l-41.122-45.408c0 0-0.002 0-0.002 0l-0.002-0.002 9.37-7.831 211.32-176.958 34.559 49.246-47.619 39.852-0.17-0.134-166.334 141.235z" - ], - "isMulticolor": false, - "tags": [ - "mp5" - ], - "defaultCode": 59974, - "grid": 0, - "attrs": [] - }, - { - "id": 327, - "paths": [ - "M688.313 80.614c-81.492 61.625 13.060 159.209 87.274 89.075 73.691 107.911 17.493 199.404-143.596 131.039-4.915-5.257-9.931-10.215-15.033-14.894 3.617-13.075 5.596-27.015 5.596-41.505 0-74.191-51.248-134.328-114.471-134.328s-114.471 60.145-114.471 134.328c0 14.491 1.98 28.435 5.598 41.511-5.098 4.677-10.113 9.634-15.026 14.889-161.087 68.362-217.283-23.129-143.592-131.040 74.214 70.135 168.768-27.449 87.274-89.075-336.412 71.065-441.179 335.371-33.957 374.305-26.255 69.923-42.341 149.654-44.433 228.073-71.252 65.902-118.913 132.455-118.913 132.455l95.26 95.28-78.592 52.403h226.247c-146.5-146.526-42.54-208.679 130.983-208.679 175.904 0 267.927 71.715 130.987 208.679h228.629l-80.973-52.403 95.26-95.28c0 0-44.373-61.963-111.497-125.518-1.298-80.642-17.57-163.026-44.598-235.012 407.221-38.932 302.454-303.238-33.957-374.303z" - ], - "isMulticolor": false, - "tags": [ - "muscle-fat" - ], - "defaultCode": 59975, - "grid": 0, - "attrs": [] - }, - { - "id": 328, - "paths": [ - "M182.957 489.933v0 0zM690.926 37.273c-81.317 78.609 13.031 203.091 87.085 113.626 76.105 142.475 13.365 262.508-160.559 157.23 10.248-21.367 16.113-46.157 16.113-72.594 0-80.366-54.178-145.512-121.014-145.512s-121.014 65.15-121.014 145.512c0 25.871 5.623 50.159 15.467 71.212-175.647 107.7-239.264-12.756-162.828-155.848 74.054 89.466 168.4-35.016 87.085-113.626-300.134 81.051-415.483 359.163-146.12 452.66h-2.183c1.265 0.17 2.521 0.369 3.78 0.558 17.984 6.159 37.674 11.495 59.11 15.906 100.347 39.483 172.932 135.036 178.821 228.395-66.904 46.118-118.751 125.459-118.751 125.459l52.491 77.248-82.304 46.875h163.661c-80.719-80.736-23.44-171.559 72.173-171.559 96.924 0 147.628 96.092 72.173 171.559h161.972l-80.614-46.875 52.491-77.248c0 0-52.682-80.625-120.366-126.57 6.391-93.007 78.798-187.96 178.752-227.288 21.434-4.412 41.12-9.747 59.101-15.905 1.26-0.189 2.517-0.386 3.782-0.558h-2.185c269.362-93.495 154.014-371.607-146.121-452.658z" - ], - "isMulticolor": false, - "tags": [ - "muscle-up" - ], - "defaultCode": 59976, - "grid": 0, - "attrs": [] - }, - { - "id": 329, - "paths": [ - "M897.343 174.78c-59.761-96.649-133.205-159.56-164.040-140.525-3.934 2.427-6.978 6.079-9.183 10.79-109.232 201.538-263.138 307.116-439.253 416.507-69.66 4.103-114.74 45.806-131.364 92.977l-46.701-46.608c-1.515 22.276 14.004 47.677 42.189 62.626-0.613 2.888-1.133 5.785-1.535 8.68h-0.002v0.002c-79.783 57.426-153.876 192.412-87.763 350.215 59.173 141.244 293.42 64.676 230.044-45.928-30.022-52.391-58.393-105.948-43.895-155.015 84.67 39.373 167.271-27.022 150.434-110.378 5.469-1.787 11.105-3.556 16.93-5.302 0.895-16.519 1.61-33.257 0.66-49.334 159.497-94.44 315.529-168.848 519.36-176.049 6.319 0.653 11.882-0.349 16.488-3.192 30.835-19.035 7.387-112.824-52.369-209.464z" - ], - "isMulticolor": false, - "tags": [ - "musket" - ], - "defaultCode": 59977, - "grid": 0, - "attrs": [] - }, - { - "id": 330, - "paths": [ - "M951.136 342.105l24.648-24.658-218.338-218.339-24.651 24.653 59.161 95.797-50.983 50.983 41.307 41.309-65.449-17.169-21.972 21.972 42.006 42.011-66.555-17.46-21.566 21.564 42.704 42.706-67.659-17.75-113.632 113.632-282.357-282.355 59.748-95.219-24.65-24.641-218.341 218.336 24.651 24.658 95.795-59.171 47.213 47.213 41.912-41.912-17.423 66.401 21.624 21.624 42.612-42.61-17.714 67.507 21.213 21.215 43.314-43.31-18.006 68.618 117.027 117.027-271.131 271.131-43.040 106.628 106.421-43.25 271.131-271.128 271.16 271.16 106.628 43.041-43.254-106.428-271.155-271.153 282.38-282.378z" - ], - "isMulticolor": false, - "tags": [ - "nails" - ], - "defaultCode": 59978, - "grid": 0, - "attrs": [] - }, - { - "id": 331, - "paths": [ - "M687.554 180.321c-15.26-85.208-88.974-147.526-175.561-148.329-99.413 0.929-179.25 82.246-178.322 181.66 0.803 86.563 63.122 160.301 148.329 175.536v97.506c-63.95 17.418-101.672 83.376-84.254 147.325 11.169 41.035 43.219 73.060 84.254 84.254v99.363c-46.607 17.293-70.375 69.070-53.082 115.677 12.925 34.836 45.929 58.152 83.1 58.704 49.694-0.703 89.399-41.587 88.696-91.282-0.527-37.17-23.843-70.174-58.704-83.1v-100.317c63.95-17.418 101.672-83.376 84.254-147.325-11.169-41.035-43.219-73.060-84.254-84.254v-96.552c97.856-17.493 163.010-110.984 145.544-208.866zM511.992 331.988c-66.284 1.481-121.224-51.024-122.704-117.308-1.481-66.158 50.899-121.073 117.082-122.679 1.882-0.050 3.74-0.050 5.622 0 66.284 0 119.994 53.735 119.994 119.994s-53.735 119.994-119.994 119.994z" - ], - "isMulticolor": false, - "tags": [ - "nodular" - ], - "defaultCode": 59979, - "grid": 0, - "attrs": [] - }, - { - "id": 332, - "paths": [ - "M604.282 421.873c15.492-1.173 27.703-14.085 27.703-29.877v-180.001c0-16.565-13.427-29.992-29.992-29.992h-29.992v-120.019c0-16.565-13.427-29.992-29.992-29.992h-60.009c-16.565 0-29.992 13.453-29.992 29.992v120.019h-30.017c-16.565 0-29.992 13.427-29.992 29.992v180.003c0 15.795 12.216 28.707 27.712 29.877-102.956 180.251-207.715 231.451-207.715 300.112 0 180.003 145.669 270.005 299.997 270.005s299.997-90.003 299.997-270.005c0-68.643-104.746-119.853-207.706-300.114zM511.992 902.013c-90.077 0-180.003-90.002-180.003-180.003 0-30.017 150.011-180.003 180.003-270.005 29.992 90.002 180.003 240.013 180.003 270.005 0 90.002-90.077 180.003-180.003 180.003z" - ], - "isMulticolor": false, - "tags": [ - "noose" - ], - "defaultCode": 59980, - "grid": 0, - "attrs": [] - }, - { - "id": 333, - "paths": [ - "M510.824 266.861c-216.057 0-537.114-191.797-486.248 270.206h0.002c18.191 165.237 158.907 257.388 281.64 214.061 65.837-23.241 147.986-177.591 204.608-177.591s138.771 154.352 204.608 177.591c122.73 43.324 260.99-49.197 281.64-214.061 58.022-463.294-276.831-270.206-486.25-270.206zM143.746 424.302c86.657-85.49 173.317-78.315 259.974 0-86.657 109.164-216.645 73.967-259.974 0zM608.331 424.302c86.659-78.315 173.317-85.49 259.974 0-43.329 73.967-173.317 109.164-259.974 0z" - ], - "isMulticolor": false, - "tags": [ - "nuclear" - ], - "defaultCode": 59981, - "grid": 0, - "attrs": [] - }, - { - "id": 334, - "paths": [ - "M903.205 101.789c-268.562-30.012-989.445 421.031-780.625 673.977 107.781 130.566 236.783 131.568 358.864 64.505l106.613 112.732c0 0.003 0 0.007 0 0.010l0.008-0.007c48.136 4.246 79.347-12.777 84.476-67.145l-71.054-134.283c194.59-180.55 341.552-498.498 301.718-649.791zM782.418 254.874c26.652 0 48.257 19.16 48.257 42.794s-21.604 42.794-48.257 42.794c-26.652 0-48.257-19.16-48.257-42.794s21.606-42.794 48.257-42.794zM708.215 400.939c26.652 0 48.257 19.16 48.257 42.794s-21.604 42.794-48.257 42.794c-26.652 0-48.258-19.16-48.258-42.794s21.606-42.794 48.258-42.794zM611.701 519.574c26.652 0 48.257 19.16 48.257 42.794s-21.604 42.794-48.257 42.794-48.258-19.16-48.258-42.794 21.606-42.794 48.258-42.794zM325.5 813.395c-26.652 0-48.258-19.16-48.258-42.794s21.606-42.794 48.258-42.794c26.652 0 48.257 19.16 48.257 42.794s-21.606 42.794-48.257 42.794zM334.639 554.472c-31.701 0-57.397-22.789-57.397-50.899s25.699-50.899 57.397-50.899c31.701 0 57.397 22.789 57.397 50.899s-25.697 50.899-57.397 50.899z" - ], - "isMulticolor": false, - "tags": [ - "ocarina" - ], - "defaultCode": 59982, - "grid": 0, - "attrs": [] - }, - { - "id": 335, - "paths": [ - "M512.057 36.852c-261.078 0-472.725 211.647-472.725 472.725s211.647 472.725 472.725 472.725 472.725-211.647 472.725-472.725-211.647-472.725-472.725-472.725zM681.522 692.48c-83.766 149.509-219.631 135.235-320.696 3.132-35.274 56.73-126.799 100.156-195.646 89.421-44.065-55.027-75.331-120.73-89.306-192.621 46.741 45.324 128.857 60.505 170.33-5.801 64.736 97.31 200.789 103.101 280.486-10.096 47.653 68.094 171.957 129.138 263.213-21.917 40.875 81.349 118.915 54.508 165.48 1.395-9.326 85.133-42.635 163.049-93.053 226.833-68.335 38.47-118.911 16.177-180.808-90.346zM512.865 61.753c245.885 0 445.217 199.33 445.217 445.216 0 9.249-0.316 18.424-0.872 27.533-62.164 17.349-137.285-27.616-172.214-87.301-95.122 132.103-179.466 146.377-258.306-3.132-73.882 135.096-208.357 146.308-274.266 40.125-67.914 92.605-113.905 104.324-183.53 56.183-0.818-11.030-1.245-22.168-1.245-33.407 0-245.885 199.33-445.216 445.216-445.216zM224.477 846.13c48.796 17.15 102.412 10.682 131.136-43.125 96.96 151.055 275.282 90.012 325.91 21.917 34.948 39.898 76.405 41.646 117.315 23.252-77.359 64.904-177.090 104.010-285.97 104.010-110.018 0-210.696-39.928-288.39-106.054z" - ], - "isMulticolor": false, - "tags": [ - "ocean-emblem" - ], - "defaultCode": 59983, - "grid": 0, - "attrs": [] - }, - { - "id": 336, - "paths": [ - "M961.047 544.828c-45.18-48.407-108.985-59.937-134.794 26.206 60.276-40.115 121.348 53.56 67.691 95.015-43.828 33.864-122.86 38.182-172.647 10.955-61.48-33.618-107.338-75.465-140.081-132.819 113.94 27.316 238.767-2.17 285.517-90.568 127.009-240.161-126.692-401.373-227.647-243.321-35.645 55.802-19.603 122.827 70.195 118.016-58.121-43.185-3.799-127.001 53.343-90.503 46.68 29.816 44.941 103.594 19.494 154.315-30.272 60.342-120.939 101.306-189.802 49.296-68.13-129.226-18.806-324.603-215.874-388.514-290.529-94.225-389.095 350.662-35.315 410.494 0.003 0.005 0.007 0.008 0.010 0.013-58.924 1.051-110.607 16.192-183.254 51.863-196.205 96.343-156.55 409.164 43.543 375.285 68.845-11.658 102.261-100.531 1.754-130.581 32.977 59.123-55.859 94.053-83.689 3.874-22.486-72.861 42.22-149.579 104.765-169.718 60.902-19.611 110.318-21.666 164.684-11.647-73.053 68.386-112.901 160.631-84.604 246.812 88.899 270.747 383.659 164.812 325.151-13.374-20.659-62.912-82.707-92.903-135.804-20.323 70.215-17.677 100.743 77.425 36.324 98.575-52.623 17.281-120.207-27.010-131.827-82.551-15.614-74.645 39.425-154.155 109.314-190.217 44.281 70.634 77.545 97.188 166.222 144.123 171.406 90.718 425.207-72.963 287.331-220.706z" - ], - "isMulticolor": false, - "tags": [ - "octopus" - ], - "defaultCode": 59984, - "grid": 0, - "attrs": [] - }, - { - "id": 337, - "paths": [ - "M517.252 145.959c-206.701 0-375.083 179.778-375.083 402.432 0.002 85.207 24.502 165.373 66.42 230.52-48.803-26.424-96.739-58.421-144.563-97.679v189.908h349.037c-95.843-66.405-162.796-164.194-162.796-275.864 0-148.893 119.564-269.591 266.987-269.591s266.987 120.698 266.987 269.591c0 111.668-66.953 209.459-162.796 275.864h349.037v-189.906c-47.963 39.667-96.433 72.281-145.866 98.981 42.522-65.434 67.724-145.944 67.724-231.823-0.002-222.654-168.382-402.432-375.083-402.432h-0.005z" - ], - "isMulticolor": false, - "tags": [ - "omega" - ], - "defaultCode": 59985, - "grid": 0, - "attrs": [] - }, - { - "id": 338, - "paths": [ - "M958.776 543.188h-0.003c-52.707-50.592-175.039-9.154-280.873 91.876-143.716-208.089-289.311-414.297-463.1-592.31 244.529 374.599 215.070 431.603-149.704 111.417 166.416 207.129 365.488 370.723 574.801 520.661-95.214 109.347-130.788 232.009-78.417 282.273 55.811 53.567 190.29 4.575 299.977-109.698s153.127-250.653 97.32-304.22zM740.467 745.479c-19.438 21.957-27.954 45.213-19.045 54.12 9.792 9.792 36.926-1.467 60.608-25.149 23.682-23.684 34.941-50.816 25.149-60.608-9.543-9.543-35.551 0.91-58.789 23.367-8.409-12.163-16.81-24.332-25.206-36.507 46.663-45.011 100.85-63.506 124.146-41.147 24.494 23.509 5.635 83.342-42.504 133.494s-107.612 71.931-132.108 48.422c-22.451-21.546-7.776-73.718 31.891-120.892 11.929 8.329 23.879 16.633 35.857 24.9zM837.832 824.731c-83.931 87.443-187.623 125.409-230.326 84.421-39.834-38.234-12.656-131.775 59.297-215.15 7.41 5.247 14.832 10.479 22.266 15.697-52.912 62.048-72.368 130.846-42.749 159.278 32.010 30.725 109.142 2.623 172.054-62.918 62.912-65.543 87.828-143.764 55.817-174.488l0.005-0.003c-30.356-29.136-100.97-5.038-161.842 53.432-5.187-7.522-10.374-15.043-15.56-22.563 81.058-77.562 174.747-109.232 215.145-70.454 42.704 40.992 9.826 145.306-74.106 232.749zM214.784 42.737l0.015 0.017-0.010-0.017z" - ], - "isMulticolor": false, - "tags": [ - "on-target" - ], - "defaultCode": 59986, - "grid": 0, - "attrs": [] - }, - { - "id": 339, - "paths": [ - "M176.024 54.399c0 0-8.010 133.421 0.438 297.264-70.806 50.928-117.979 142.712-117.683 252.525l144.95-0.374c12.661 70.202 30.722 138.182 57.78 198.613 20.869 46.61 47.293 89.606 85.672 123.797 38.381 34.191 91.517 57.531 147.884 57.531s109.441-23.34 147.82-57.531c38.381-34.191 64.803-77.189 85.672-123.797 15.23-34.014 27.578-70.417 37.751-108.26 56.597-11.075 111.010-46.332 145.324-99.151 35.792-55.089 52.084-125.107 51.915-208.784l-152.001 0.249c11.635-179.35 2.496-332.082 2.496-332.082l-169.411 9.921c0 0 11.526 205.012-10.608 405.526-0.837 7.586-1.737 15.16-2.683 22.713-18.632-13.065-37.29-29.891-54.224-50.792-62.81-77.522-146.993-125.132-232.558-133.22-5.155-136.040 0.874-244.227 0.874-244.227l-169.408-9.921zM357.728 484.447c28.507 9.652 59.616 29.753 87.483 64.144 42.874 52.916 94.494 95.798 150.941 121.988-6.816 23.078-14.291 44.209-22.463 62.461-14.373 32.098-30.585 54.733-43.741 66.453s-20.437 14.538-34.881 14.538c-14.443 0-21.786-2.818-34.943-14.538s-29.369-34.357-43.741-66.453c-27.347-61.078-47.253-153.421-58.654-248.593v0z" - ], - "isMulticolor": false, - "tags": [ - "ophiuchus" - ], - "defaultCode": 59987, - "grid": 0, - "attrs": [] - }, - { - "id": 340, - "paths": [ - "M39.019 244.763c212.502 0 221.116 2.872 221.116 2.872 274.075-445.429 491.062 160.64 519.191 379.9l-80.285 0.348 157.064 274.176 150.828-273.335-78.112-3.221c-180.185-628.712-663.127-656.411-889.801-380.74v0z" - ], - "isMulticolor": false, - "tags": [ - "overhead" - ], - "defaultCode": 59988, - "grid": 0, - "attrs": [] - }, - { - "id": 341, - "paths": [ - "M511.994 422.968c61.583 0 153.964-30.795 153.964-92.374s-30.797-153.964-153.964-277.132c-123.167 123.169-153.964 215.542-153.964 277.132s92.392 92.374 153.964 92.374v0zM671.999 700.089c-30.797 53.336-50.309 148.727 3.015 179.522 53.335 30.795 148.731 50.319 316.984 5.237-45.087-168.252-109.685-241.101-163.020-271.896s-126.181 33.801-156.979 87.137v0zM352.001 700.089c-30.797-53.336-103.644-117.932-156.979-87.149-53.335 30.795-117.933 103.644-163.020 271.896 168.253 45.083 263.649 25.559 316.984-5.237s33.801-126.174 3.015-179.511v0zM511.994 792.462c-30.797 0-61.583 30.795-61.583 61.59s0 61.579 61.583 123.169c61.583-61.579 61.583-92.374 61.583-123.169 0.011-30.795-30.786-61.59-61.583-61.59zM671.999 515.342c15.393 26.668 57.453 37.939 84.121 22.541s53.335-30.795 75.873-114.915c-84.121-22.541-110.788-7.144-137.456 8.254-26.668 15.386-37.931 57.452-22.538 84.12v0zM352.001 515.342c15.393-26.668 4.13-68.734-22.538-84.12-26.668-15.398-53.335-30.795-137.456-8.254 22.538 84.12 49.205 99.518 75.873 114.915 26.656 15.398 68.728 4.127 84.121-22.541v0zM635.173 607.709c0 68.034-55.154 123.162-123.162 123.162-68.034 0-123.162-55.154-123.162-123.162 0-68.034 55.154-123.162 123.162-123.162s123.162 55.154 123.162 123.162z" - ], - "isMulticolor": false, - "tags": [ - "overmind" - ], - "defaultCode": 59989, - "grid": 0, - "attrs": [] - }, - { - "id": 342, - "paths": [ - "M357.665 41.17c-56.013 0.237-107.916 11.606-133.22 19.531 0 0 229.558 38.955 248.657 197.428-174.442-251.515-364.716 52.663-364.716 52.663 39.669-10.407 153.264-41.297 229.125-28.266 51.897 8.915 102.49 55.968 100.307 55.376-123.685 30.429-320.178 580.892-286.815 625.592 29.754 34.185 59.537 22.518 89.292 5.178 14.729-116.657 129.665-628.502 270.308-587.185 0.020 0.007 0.043-0.007 0.062 0 11.84 4.054 23.041 11.164 23.649 22.027 1.159 20.69-12.199 54.508-9.047 77.998 7.315 54.503 17.988 73.461 33.508 92.474 37.066-20.834 72.534-95.955 79.87-134.904 33.214 14.545 86.606 48.232 130.162 173.342 22.769-117.237-10.070-209.713-117.87-250.778 46.681-20.178 249.876 81.923 274.676 138.836 24.132-102.619-146.551-228.185-288.653-221.513 27.244-7.106 57.182 1.199 85.672-19.78 38.229-28.149 82.812-52.394 124.358-78.434-139.72-60.773-268.656-30.767-277.735 32.135-7.131-139.606-115.465-172.129-211.589-171.721v0z" - ], - "isMulticolor": false, - "tags": [ - "palm-tree" - ], - "defaultCode": 59990, - "grid": 0, - "attrs": [] - }, - { - "id": 343, - "paths": [ - "M728.852 748.29c-4.692-31.463-29.106-59.412-65.862-80.221-97.875-62.404-115.025-168.561-69.879-238.415 57.561-16.566 96.904-49.982 96.904-88.512 0-35.048-32.556-65.863-81.763-83.616 25.222-25.147 40.85-59.993 40.85-98.513 0-76.656-61.858-138.8-138.163-138.8s-138.163 62.143-138.163 138.8c0 38.513 15.621 73.354 40.836 98.499-49.226 17.75-81.796 48.572-81.796 83.629 0 38.987 40.287 72.737 98.967 89.093 45.893 69.589 26.362 174.436-74.613 238.814-35.414 20.68-58.675 48.422-63.207 79.274-63.643 26.935-103.516 65.501-103.516 108.34 0 81.409 143.94 147.411 321.499 147.411s321.499-65.995 321.499-147.411c0-42.858-39.906-81.437-103.593-108.374z" - ], - "isMulticolor": false, - "tags": [ - "pawn" - ], - "defaultCode": 59991, - "grid": 0, - "attrs": [] - }, - { - "id": 344, - "paths": [ - "M747.762 710.16c145.652 54.574 71.982 215.199-55.329 214.672-99.712-0.418-105.18-52.269-173.3-52.556-59.993-0.261-86.115 57.541-159.397 57.235-133.521-0.556-228.001-160.25-72.012-213.263 204.453-69.478 110.493-189.791 232.79-188.585 119.43 1.176 41.797 113.013 227.244 182.494l0.003 0.002zM632.611 453.313c103.865-4.171 104.064-237.226-5.178-232.797-111.040 4.515-100.479 237.055 5.178 232.797zM426.174 456.752c103.519-8.885 91.268-241.664-17.608-232.278-110.664 9.552-87.695 241.33 17.608 232.278zM266.703 622.706c103.005-13.005 79.842-245.078-28.49-231.361-110.113 13.955-76.289 244.599 28.49 231.361zM793.418 626.112c103.94 1.969 120.334-230.592 11.003-232.625-111.123-2.048-116.744 230.632-11.003 232.625zM206.151 341.886c59.661-4.986 35.7-80.961-13.207-138.096-33.394 65.715-35.215 142.142 13.207 138.096zM826.398 336.43c-59.686-0.765-42.198-78.487 1.645-139.119 38.638 63.393 46.798 139.742-1.645 139.119zM640.251 177.765c-59.222 6.638-49.354-73.028-11.737-138.925 44.376 58.42 59.795 133.541 11.737 138.925zM403.464 185.083c-58.802 9.258-53.113-70.751-18.98-138.245 47.376 56.38 66.704 130.73 18.98 138.245z" - ], - "isMulticolor": false, - "tags": [ - "pawprint" - ], - "defaultCode": 59992, - "grid": 0, - "attrs": [] - }, - { - "id": 345, - "paths": [ - "M867.542 263.893l-305.007-176.435c-28.637-16.566-75.066-16.566-103.705 0l-305.007 176.435c-22.526 13.031-27.321 32.427-14.408 48.176l347.368 198.342c17.959 3.571 37.83 3.012 55.169-1.716l335.625-192.061c18.058-16.406 14.725-38.419-10.036-52.742zM318.766 318.912c-24.917 14.784-65.314 14.784-90.229 0-24.917-14.784-24.915-38.753 0-53.537 24.917-14.784 65.314-14.784 90.229 0 24.917 14.782 24.917 38.752 0 53.537zM556.72 460.1c-24.917 14.784-65.314 14.784-90.229 0-24.917-14.784-24.915-38.753 0-53.537 24.917-14.784 65.314-14.784 90.229 0 24.917 14.784 24.917 38.753 0 53.537zM466.488 265.894c24.917-14.784 65.314-14.784 90.229 0 24.917 14.784 24.917 38.753 0 53.537s-65.314 14.784-90.229 0c-24.917-14.784-24.917-38.753 0-53.537zM556.72 178.764c-24.917 14.784-65.314 14.784-90.229 0-24.917-14.784-24.915-38.753 0-53.537 24.917-14.784 65.314-14.784 90.229 0 24.917 14.784 24.917 38.753 0 53.537zM793.795 319.433c-24.917 14.784-65.314 14.784-90.229 0s-24.915-38.753 0-53.537c24.917-14.784 65.314-14.784 90.229 0 24.917 14.784 24.915 38.752 0 53.537zM888.516 325.772l-355.188 203.256c-5.419 7.536-10.056 15.801-13.676 24.312h1.727v381.977c9.445 9.338 24.636 10.166 41.772 0.271l293.385-169.418c28.649-16.544 51.875-56.774 51.875-89.858v-314.883c0-19.145-7.789-31.682-19.895-35.658zM642.948 795.381c0.048 27.541-20.027 61.525-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.524 44.839-75.903s44.966-3.708 45.014 23.833c0 0.065 0 0.13 0 0.195zM642.948 550.361c0.048 27.541-20.027 61.524-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.525 44.839-75.903s44.966-3.708 45.014 23.833c0 0.067 0 0.132 0 0.195zM754.765 730.824c0.048 27.541-20.027 61.525-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.525 44.839-75.903s44.966-3.708 45.014 23.833c0 0.065 0 0.13 0 0.195zM754.765 485.804c0.048 27.541-20.027 61.525-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.524 44.839-75.903s44.966-3.708 45.014 23.833c0 0.065 0 0.13 0 0.195zM866.583 666.267c0.048 27.541-20.027 61.524-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.525 44.839-75.903s44.966-3.708 45.014 23.833c0 0.065 0 0.13 0 0.195zM866.583 421.247c0.048 27.541-20.027 61.525-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.525 44.839-75.903 24.812-14.379 44.966-3.708 45.014 23.833 0 0.065 0 0.13 0 0.195zM503.701 555.26c-4.215-10.409-9.978-20.502-16.833-29.414l-351.232-200.547c-13.015 3.368-21.491 16.153-21.491 36.129v314.883c0 33.084 23.225 73.314 51.875 89.858l293.385 169.418c18.756 10.831 35.185 8.822 44.296-3.14v-377.186zM245.83 718.337c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0 0.067 0 0.13 0 0.195zM245.83 473.317c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0 0.067 0 0.132 0 0.195zM469.465 847.453c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0 0.065 0 0.13 0 0.195zM469.465 602.433c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0 0.065 0 0.13 0 0.195z" - ], - "isMulticolor": false, - "tags": [ - "perspective-dice-five" - ], - "defaultCode": 59993, - "grid": 0, - "attrs": [] - }, - { - "id": 346, - "paths": [ - "M867.542 263.893l-305.007-176.435c-28.637-16.566-75.066-16.566-103.705 0l-305.007 176.435c-20.366 11.78-26.233 28.766-17.632 43.553l357.488 204.12c11.961 1.64 24.491 1.537 36.373-0.337l354.606-202.922c9.341-14.986 3.645-32.404-17.117-44.413zM318.766 318.912c-24.917 14.784-65.314 14.784-90.229 0-24.917-14.784-24.915-38.753 0-53.537 24.917-14.784 65.314-14.784 90.229 0 24.917 14.782 24.917 38.752 0 53.537zM556.72 460.1c-24.917 14.784-65.314 14.784-90.229 0-24.917-14.784-24.915-38.753 0-53.537 24.917-14.784 65.314-14.784 90.229 0 24.917 14.784 24.917 38.753 0 53.537zM556.72 178.764c-24.917 14.784-65.314 14.784-90.229 0-24.917-14.784-24.915-38.753 0-53.537 24.917-14.784 65.314-14.784 90.229 0 24.917 14.784 24.917 38.753 0 53.537zM793.795 319.433c-24.917 14.784-65.314 14.784-90.229 0s-24.915-38.753 0-53.537c24.917-14.784 65.314-14.784 90.229 0 24.917 14.784 24.915 38.752 0 53.537zM883.099 324.595l-343.703 196.683c-7.814 9.173-14.451 19.905-19.324 31.103v381.558c9.313 10.623 25.131 12.017 43.080 1.652l293.385-169.418c28.649-16.544 51.875-56.774 51.875-89.858v-314.884c0-21.87-10.155-35.132-25.313-36.836zM642.948 795.381c0.048 27.541-20.027 61.525-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.524 44.839-75.903s44.966-3.708 45.014 23.833c0 0.065 0 0.13 0 0.195zM642.948 550.361c0.048 27.541-20.027 61.524-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.525 44.839-75.903s44.966-3.708 45.014 23.833c0 0.067 0 0.132 0 0.195zM754.772 607.601c0.048 27.541-20.027 61.525-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.525 44.839-75.903s44.966-3.708 45.014 23.833c0 0.065 0 0.13 0 0.195zM866.583 666.267c0.048 27.541-20.027 61.524-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.525 44.839-75.903s44.966-3.708 45.014 23.833c0 0.065 0 0.13 0 0.195zM866.583 421.247c0.048 27.541-20.027 61.525-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.525 44.839-75.903 24.812-14.379 44.966-3.708 45.014 23.833 0 0.065 0 0.13 0 0.195zM502.393 552.163c-4.978-11.379-11.775-22.272-19.775-31.525l-343.326-196.033c-15.068 1.781-25.147 15.029-25.147 36.822v314.883c0 33.084 23.225 73.314 51.875 89.858l293.385 169.418c17.889 10.33 33.663 8.98 42.988-1.544v-381.878zM245.83 718.337c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0 0.067 0 0.13 0 0.195zM245.83 595.119c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0 0.065 0 0.13 0 0.195zM245.83 473.317c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0 0.067 0 0.132 0 0.195zM469.465 847.453c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0 0.065 0 0.13 0 0.195zM469.465 724.234c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0 0.065 0 0.13 0 0.195zM469.465 602.433c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0 0.065 0 0.13 0 0.195z" - ], - "isMulticolor": false, - "tags": [ - "perspective-dice-four" - ], - "defaultCode": 59994, - "grid": 0, - "attrs": [] - }, - { - "id": 347, - "paths": [ - "M867.542 263.893l-305.007-176.435c-28.637-16.566-75.066-16.566-103.705 0l-305.007 176.435c-19.535 11.299-25.732 27.386-18.616 41.73l361.313 206.305c8.641 0.977 17.525 1.059 26.205 0.227l364.315-208.478c5.646-13.837-0.845-28.994-19.499-39.784zM556.717 319.431c-24.917 14.784-65.314 14.784-90.229 0-24.917-14.784-24.917-38.753 0-53.537s65.314-14.784 90.229 0c24.917 14.784 24.917 38.753 0 53.537zM877.583 324.484l-331.728 189.831c-11.67 11.505-21.399 26.589-27.539 42.31v375.068c8.99 12.619 25.697 14.949 44.835 3.897l293.385-169.418c28.649-16.544 51.875-56.774 51.875-89.858v-314.884c0-24.427-12.671-38.11-30.829-36.946zM642.948 550.361c0.048 27.541-20.027 61.524-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.525 44.839-75.903s44.966-3.708 45.014 23.833c0 0.067 0 0.132 0 0.195zM866.583 666.267c0.048 27.541-20.027 61.524-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.525 44.839-75.903s44.966-3.708 45.014 23.833c0 0.065 0 0.13 0 0.195zM500.637 548.289c-5.282-11.028-12.255-21.461-20.31-30.217l-339.118-193.633c-16.123 0.849-27.063 14.284-27.063 36.988v314.883c0 33.084 23.225 73.314 51.875 89.858l293.385 169.418c16.815 9.71 31.754 9.091 41.234 0.242v-387.538h-0.003zM245.83 473.317c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0 0.067 0 0.132 0 0.195zM357.64 659.671c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0.002 0.067 0.002 0.132 0 0.195zM469.465 847.453c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0 0.065 0 0.13 0 0.195z" - ], - "isMulticolor": false, - "tags": [ - "perspective-dice-one" - ], - "defaultCode": 59995, - "grid": 0, - "attrs": [] - }, - { - "id": 348, - "paths": [ - "M501.631 553.977h1.544c-3.658-8.745-8.401-17.243-13.96-24.972l-355.66-203.076c-11.83 4.148-19.409 16.608-19.409 35.498v314.883c0 33.084 23.225 73.314 51.875 89.858l293.385 169.418c17.418 10.058 32.82 9.029 42.228-0.747v-380.861h-0.002zM321.556 775.484l-58.557-33.809v-61.368l58.557 33.809v61.368zM371.353 639.779c-4.218 6.415-11.409 11.8-21.572 16.16l-10.38 3.832c-7.353 2.88-12.166 5.848-14.436 8.904-2.27 2.942-3.406 6.998-3.406 12.169v7.758l-58.557-33.807v-8.448c0-9.423 1.784-16.725 5.352-21.905 3.568-5.295 11.084-10.265 22.546-14.909l10.38-4.004c6.164-2.417 10.651-5.457 13.462-9.121 2.92-3.6 4.38-8.045 4.38-13.33 0-8.045-2.596-15.806-7.786-23.285-5.19-7.594-12.437-14.075-21.736-19.444-8.76-5.057-18.222-8.566-28.386-10.527-10.165-2.076-20.762-2.506-31.792-1.29v-54.128c13.085 2.728 25.034 6.064 35.847 10.009s21.248 8.82 31.306 14.627c26.385 15.235 46.499 32.593 60.341 52.077 13.842 19.369 20.762 40.028 20.762 61.98 0.002 11.257-2.106 20.153-6.324 26.682zM867.542 263.893l-305.007-176.435c-28.637-16.566-75.066-16.566-103.705 0l-305.007 176.435c-24.432 14.132-28.002 35.753-10.744 52.085l338.49 193.274c18.671 4.666 40.006 4.634 58.639-0.104l338.857-193.91c16.376-16.242 12.54-37.427-11.523-51.345zM521.766 333.343l-7.37-4.129c-8.222-4.605-13.469-9.812-15.743-15.617-2.374-5.862-1.978-15.183 1.188-27.965l3.042-11.478c1.771-6.834 1.944-12.437 0.518-16.807-1.303-4.438-4.261-7.948-8.874-10.532-7.019-3.932-15.425-5.346-25.217-4.241-9.893 1.049-20.109 4.525-30.65 10.43-9.926 5.561-18.945 12.524-27.057 20.888-8.21 8.307-15.258 17.817-21.142 28.528l-47.226-26.459c10.618-10.668 21.051-19.996 31.301-27.985s21.075-15.176 32.471-21.562c29.903-16.753 57.712-26.716 83.425-29.886 25.613-3.227 47.996 0.525 67.148 11.252 9.826 5.506 16.26 11.787 19.302 18.846 2.942 7.003 3.114 16.232 0.518 27.685l-3.192 11.394c-2.116 8.152-2.557 14.015-1.321 17.592 1.136 3.52 3.961 6.545 8.473 9.072l6.769 3.792-66.363 37.183zM597.568 375.81l-53.544-29.997 66.363-37.18 53.544 29.997-66.363 37.18zM887.91 325.572l-353.92 202.53c-5.872 8.010-10.871 16.877-14.68 26.014v378.888c9.196 11.451 25.388 13.238 43.842 2.583l293.385-169.418c28.649-16.544 51.875-56.774 51.875-89.858v-314.881c0-19.464-8.047-32.108-20.502-35.858zM740.711 757.772l-58.557 33.807v-61.368l58.557-33.809v61.37zM790.508 564.565c-4.218 11.284-11.409 24.975-21.572 41.072l-10.382 15.819c-7.353 11.371-12.166 19.895-14.436 25.573-2.27 5.563-3.406 10.932-3.406 16.102v7.758l-58.557 33.807v-8.448c0-9.423 1.784-18.786 5.352-28.086 3.568-9.415 11.084-23.063 22.546-40.943l10.38-15.991c6.164-9.535 10.651-17.757 13.462-24.666 2.92-6.973 4.38-13.102 4.38-18.389 0-8.045-2.596-12.809-7.786-14.294-5.19-1.6-12.437 0.286-21.736 5.655-8.76 5.058-18.222 12.473-28.386 22.251-10.165 9.662-20.762 21.469-31.792 35.422v-54.128c13.085-12.382 25.034-22.842 35.847-31.385 10.813-8.541 21.248-15.716 31.306-21.522 26.385-15.233 46.499-21.1 60.341-17.6 13.842 3.386 20.762 16.055 20.762 38.005 0.003 11.261-2.105 22.591-6.323 33.989z" - ], - "isMulticolor": false, - "tags": [ - "perspective-dice-random" - ], - "defaultCode": 59996, - "grid": 0, - "attrs": [] - }, - { - "id": 349, - "paths": [ - "M503.93 555.825c-4.261-10.681-10.163-21.048-17.206-30.165l-332.586-199.443c-22.921-7.031-39.993 6.851-39.993 35.21v314.883c0 33.084 23.225 73.314 51.875 89.858l293.385 169.418c18.918 10.923 35.464 8.782 44.526-3.455v-376.306h-0.002zM357.64 659.671c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0.002 0.067 0.002 0.132 0 0.195zM867.542 263.893l-305.007-176.435c-28.637-16.566-75.066-16.566-103.705 0l-305.007 176.435c-14.715 8.513-21.848 19.742-21.441 30.897l361.542 216.806c11.795 1.592 24.135 1.495 35.852-0.326l348.741-195.505c16.999-16.307 13.349-37.801-10.977-51.872zM556.72 460.1c-24.917 14.784-65.314 14.784-90.229 0-24.917-14.784-24.915-38.753 0-53.537 24.917-14.784 65.314-14.784 90.229 0 24.917 14.784 24.917 38.753 0 53.537zM556.72 178.764c-24.917 14.784-65.314 14.784-90.229 0-24.917-14.784-24.915-38.753 0-53.537 24.917-14.784 65.314-14.784 90.229 0 24.917 14.784 24.917 38.753 0 53.537zM891.112 326.776l-355.659 199.384c-9.637 12.607-17.106 27.536-21.056 42.383v355.797c7.25 18.8 26.342 24.19 48.754 11.247l293.385-169.418c28.649-16.544 51.875-56.774 51.875-89.858v-314.883c0-17.742-6.685-29.815-17.299-34.654zM642.948 795.381c0.048 27.541-20.027 61.525-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.524 44.839-75.903s44.966-3.708 45.014 23.833c0 0.065 0 0.13 0 0.195zM754.772 607.601c0.048 27.541-20.027 61.525-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.525 44.839-75.903s44.966-3.708 45.014 23.833c0 0.065 0 0.13 0 0.195zM866.583 421.247c0.048 27.541-20.027 61.525-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.525 44.839-75.903 24.812-14.379 44.966-3.708 45.014 23.833 0 0.065 0 0.13 0 0.195z" - ], - "isMulticolor": false, - "tags": [ - "perspective-dice-six-two" - ], - "defaultCode": 59997, - "grid": 0, - "attrs": [] - }, - { - "id": 350, - "paths": [ - "M499.169 550.838h2.639c-3.962-8.777-8.995-17.236-14.827-24.84l-351.451-200.674c-12.956 3.409-21.385 16.18-21.385 36.102v314.883c0 33.084 23.225 73.314 51.875 89.858l293.385 169.418c15.97 9.223 30.249 9.127 39.766 1.515l-0.002-386.262zM245.83 718.337c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0 0.067 0 0.13 0 0.195zM245.83 473.317c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0 0.067 0 0.132 0 0.195zM357.64 659.671c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0.002 0.067 0.002 0.132 0 0.195zM469.465 847.453c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0 0.065 0 0.13 0 0.195zM469.465 602.433c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0 0.065 0 0.13 0 0.195zM867.542 263.893l-305.007-176.435c-28.637-16.566-75.066-16.566-103.705 0l-305.007 176.435c-22.607 13.076-27.351 32.564-14.266 48.342l347.034 198.152c13.374 2.684 27.822 3.072 41.5 1.146l357.289-204.458c8.291-14.7 2.357-31.5-17.839-43.182zM466.491 125.227c24.917-14.784 65.314-14.784 90.229 0 24.917 14.784 24.915 38.753 0 53.537-24.917 14.784-65.314 14.784-90.229 0-24.917-14.784-24.917-38.753 0-53.537zM318.766 318.912c-24.917 14.784-65.314 14.784-90.229 0-24.917-14.784-24.915-38.753 0-53.537 24.917-14.784 65.314-14.784 90.229 0 24.917 14.782 24.917 38.752 0 53.537zM347.95 389.765c-24.917-14.784-24.917-38.753 0-53.537s65.314-14.784 90.229 0c24.917 14.784 24.917 38.753 0 53.537-24.915 14.785-65.312 14.785-90.229 0zM556.72 460.1c-24.917 14.784-65.314 14.784-90.229 0-24.917-14.784-24.915-38.753 0-53.537 24.917-14.784 65.314-14.784 90.229 0 24.917 14.784 24.917 38.753 0 53.537zM585.025 249.098c-24.917-14.784-24.917-38.753 0-53.537s65.314-14.784 90.229 0c24.917 14.784 24.917 38.753 0 53.537-24.915 14.784-65.312 14.784-90.229 0zM793.795 319.433c-24.917 14.784-65.314 14.784-90.229 0s-24.915-38.753 0-53.537c24.917-14.784 65.314-14.784 90.229 0 24.917 14.784 24.915 38.752 0 53.537zM881.858 324.486l-341.081 195.183c-10.345 11.693-18.766 26.138-23.93 40.923v368.827c8.551 14.58 26.068 17.854 46.304 6.167l293.385-169.418c28.649-16.544 51.875-56.774 51.875-89.858v-314.881c0-22.461-10.713-35.837-26.554-36.944zM642.948 795.381c0.048 27.541-20.027 61.525-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.524 44.839-75.903s44.966-3.708 45.014 23.833c0 0.065 0 0.13 0 0.195zM642.948 550.361c0.048 27.541-20.027 61.524-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.525 44.839-75.903s44.966-3.708 45.014 23.833c0 0.067 0 0.132 0 0.195zM866.583 666.267c0.048 27.541-20.027 61.524-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.525 44.839-75.903s44.966-3.708 45.014 23.833c0 0.065 0 0.13 0 0.195zM866.583 421.247c0.048 27.541-20.027 61.525-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.525 44.839-75.903 24.812-14.379 44.966-3.708 45.014 23.833 0 0.065 0 0.13 0 0.195z" - ], - "isMulticolor": false, - "tags": [ - "perspective-dice-six" - ], - "defaultCode": 59998, - "grid": 0, - "attrs": [] - }, - { - "id": 351, - "paths": [ - "M880.64 324.426l-338.424 193.663c-9.832 10.694-18.039 23.891-23.534 37.616v376.51c9.076 12.166 25.593 14.274 44.47 3.374l293.385-169.418c28.649-16.544 51.875-56.774 51.875-89.858v-314.883c0-23.032-11.264-36.513-27.772-37.004zM754.772 607.601c0.048 27.541-20.027 61.525-44.839 75.903s-44.966 3.708-45.014-23.833c0-0.065 0-0.13 0-0.195-0.048-27.541 20.027-61.525 44.839-75.903s44.966-3.708 45.014 23.833c0 0.065 0 0.13 0 0.195zM867.542 263.893l-305.007-176.435c-28.637-16.566-75.066-16.566-103.705 0l-305.007 176.435c-20.375 11.787-26.238 28.781-17.62 43.573l357.443 204.095c10.749 1.477 21.958 1.55 32.746 0.187l359.609-205.786c7.38-14.43 1.226-30.682-18.46-42.069zM318.766 318.912c-24.917 14.784-65.314 14.784-90.229 0-24.917-14.784-24.915-38.753 0-53.537 24.917-14.784 65.314-14.784 90.229 0 24.917 14.782 24.917 38.752 0 53.537zM556.717 319.431c-24.917 14.784-65.314 14.784-90.229 0-24.917-14.784-24.917-38.753 0-53.537s65.314-14.784 90.229 0c24.917 14.784 24.917 38.753 0 53.537zM793.795 319.433c-24.917 14.784-65.314 14.784-90.229 0s-24.915-38.753 0-53.537c24.917-14.784 65.314-14.784 90.229 0 24.917 14.784 24.915 38.752 0 53.537zM501.003 549.073c-4.821-10.245-11.099-20.002-18.364-28.41l-343.367-196.057c-15.056 1.791-25.127 15.038-25.127 36.821v314.883c0 33.084 23.225 73.314 51.875 89.858l293.385 169.418c17.029 9.834 32.142 9.084 41.598-0.089v-386.424zM245.83 718.337c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0 0.067 0 0.13 0 0.195zM469.465 602.433c-0.048 27.541-20.203 38.212-45.014 23.833s-44.887-48.362-44.839-75.903c0-0.065 0-0.13 0-0.195 0.048-27.541 20.203-38.212 45.014-23.833s44.887 48.362 44.839 75.903c0 0.065 0 0.13 0 0.195z" - ], - "isMulticolor": false, - "tags": [ - "perspective-dice-three" - ], - "defaultCode": 59999, - "grid": 0, - "attrs": [] - }, - { - "id": 352, - "paths": [ - "M927.592 252.726c-51.788-89.699-166.879-120.921-256.306-68.676-296.738 173.345-203.213 117.326-506.314 292.316v0.005c-89.698 51.783-120.464 166.608-68.676 256.307s166.849 120.867 256.306 68.676c302.314-176.37 208.572-120.698 506.314-292.321 89.734-51.72 120.464-166.608 68.676-256.307zM849.397 484.502l-248.047 143.21c13.569-7.835 21.721-19.945 25.486-34.854 34.165-19.922 78.805-45.711 169.546-97.716 26.701-15.303 46.695-37.208 59.24-62.994l-0.005-0.002c20.913-42.976 20.599-95.678-4.903-140.047-3.682-6.415-8.369-11.773-12.818-17.408 21.714 65.611-4.811 139.952-67.11 175.655-71.565 41.015-114.509 65.82-146.28 84.342-13.332-54.432-52.419-118.016-94.241-157.633-60.403 35.665-83.699 49.879-235.142 136.675-61.472 35.229-88.079 108.071-67.915 173.031-0.742-0.384-1.488-0.76-2.223-1.158-3.481-4.322-6.936-8.656-9.789-13.626-25.501-44.369-25.815-97.071-4.903-140.047l-0.003-0.002c12.545-25.785 32.539-47.69 59.24-62.994 133.616-76.578 167.283-96.314 214.716-124.176-17.104-7.372-33.196-8.371-46.564-0.53l248.047-143.21c166.895-96.358 333.201 185.601 163.668 283.483z" - ], - "isMulticolor": false, - "tags": [ - "pill" - ], - "defaultCode": 60000, - "grid": 0, - "attrs": [] - }, - { - "id": 353, - "paths": [ - "M958.043 735.362c-15.367-57.359-74.401-91.473-131.745-76.067-190.275 51.132-129.704 35.7-323.759 86.754-57.426 15.109-91.432 74.386-76.065 131.745s74.39 91.432 131.745 76.067c193.817-51.938 133.188-36.734 323.759-86.754 57.433-15.078 91.432-74.386 76.065-131.745zM882.86 847.205l-129.149 34.5c-64.291 17.226-108.885-156.299-46.367-173.049l129.149-34.5c103.486-27.728 148.246 145.75 46.367 173.049zM420.999 314.156c-34.864-34.866-91.458-34.869-126.323 0v0c-117.815 117.82-80.532 81.711-196.805 196.807-35.045 34.687-34.864 91.46 0 126.325s91.485 34.888 126.323 0c115.602-115.765 78.45-79.525 196.805-196.807 35.021-34.711 34.864-91.458 0-126.325zM206.504 632.946c-63.1 63.102-167.629-43.396-105.512-105.514l92.322-92.32c-30.374 29.96 69.39 141.634 105.512 105.514l-92.322 92.32zM824.577 457.225c-49.989-182.837-33.495-125.008-83.457-311.466h0.003c-14.784-55.182-71.565-87.96-126.744-73.178s-88.213 71.635-73.177 126.744c50.806 186.239 34.529 128.347 83.457 311.471 14.744 55.186 71.565 87.957 126.744 73.175s88.241-71.645 73.173-126.745zM642.407 508.903l-38.757-144.643c15.163 56.592 178.291 2.892 165.303-44.291l38.757 144.638c26.078 97.317-138.816 143.15-165.303 44.296z" - ], - "isMulticolor": false, - "tags": [ - "pills" - ], - "defaultCode": 60001, - "grid": 0, - "attrs": [] - }, - { - "id": 354, - "paths": [ - "M729.006 674.069l58.067 0.596-87.443-98.548 56.784-40.714c-92.491-72.719-117.461-108.942-139.872-181.666l75.251 34.128-93.227-125.441 51.253-17.288c-86.696-68.506-129.051-137.563-152.063-206.861l-0.003 0.498c-36.171 77.142-89.985 144.486-155.12 205.54l75.308-7.876-102.512 129.896 49.514-15.819-67.091 109.611 32.983 19.656-130.279 183.994 72.081 0.374-103.21 166.88 126.874-16.189 24.013 64.073 112.668-42.848-24.284 167.547h147.85l-14.047-146.464 56.694 24.334 20.368-49.496 88.383 41.849 112.623-41.424-91.567-158.342z" - ], - "isMulticolor": false, - "tags": [ - "pine-tree" - ], - "defaultCode": 60002, - "grid": 0, - "attrs": [] - }, - { - "id": 355, - "paths": [ - "M243.983 558.889c47.926 157.646-109.713 219.423-219.423 329.14 25.204 84.508 24.464 85.246 109.713 109.717 109.713-109.717 164.568-274.278 329.137-219.423l-219.427-219.433zM905.774 776.22c0.015 75.824-62.213 137.305-138.993 137.32-76.778 0.015-139.032-61.442-139.047-137.266 0-0.018 0-0.035 0-0.053-0.015-75.824 62.213-137.305 138.993-137.32s139.032 61.442 139.047 137.266c0 0.017 0 0.035 0 0.053zM614.789 768.64c0-0.018 0-0.037 0-0.055-0.015-79.356 65.112-143.697 145.465-143.712 32.711-0.007 62.902 10.651 87.205 28.642 145.916-125.411 232.54-317.306 35.586-514.257-383.995-383.997-748.776 309.925-639.063 419.631l219.427 219.423c25.724 25.724 83.575 25.346 152.112 4.764-0.481-4.747-0.732-9.563-0.732-14.436z" - ], - "isMulticolor": false, - "tags": [ - "ping-pong" - ], - "defaultCode": 60003, - "grid": 0, - "attrs": [] - }, - { - "id": 356, - "paths": [ - "M561.124 441.785c13.78-158.727 79.974-296.825 175.572-384.438h175.206c-95.598 87.613-150.665 225.709-161.897 384.438h141.133v158.641h-137.876c16.738 146.13 72.094 272.082 162.714 353.083h-175.208c-90.63-81.001-155.556-206.963-175.705-353.083h-115.593c-20.149 146.13-85.076 272.082-175.705 353.083h-175.198c90.62-81.001 145.958-206.963 162.714-353.083h-149.329v-158.641h152.588c-11.252-158.727-66.301-296.825-161.897-384.438h175.216c95.578 87.613 161.782 225.709 175.552 384.438h107.714z" - ], - "isMulticolor": false, - "tags": [ - "pisces" - ], - "defaultCode": 60004, - "grid": 0, - "attrs": [] - }, - { - "id": 357, - "paths": [ - "M280.708 504.14c205.951 195.006 461.689 364.507 708.401 481.706-116.557-245.372-287.216-503.188-482.765-709.527 9.821-5.875 19.862-11.505 30.172-16.835l81.633 6.998 55.246-129.878-137.704 11.561c-66.264 39.931-127.651 84.047-183.089 133.259-48.465-80.579-113.315-143.26-194.568-181.195 0.685-3.994 1.062-8.092 1.062-12.281 0-39.856-32.315-72.171-72.173-72.171s-72.173 32.315-72.173 72.171 32.315 72.161 72.173 72.161c5.205 0 10.277-0.563 15.17-1.61 35.237 88.751 99.036 148.948 178.853 193.13-50.306 54.549-94.068 114.708-130.158 181.44l-11.561 137.704 129.057-54.426-7.004-81.629c6.351-10.332 12.826-20.525 19.429-30.578zM338.049 434.796l102.031-102.027c95.227 95.222 178.741 219.096 234.554 336.584-118.351-56.23-241.353-139.326-336.585-234.556z" - ], - "isMulticolor": false, - "tags": [ - "plain-dagger" - ], - "defaultCode": 60005, - "grid": 0, - "attrs": [] - }, - { - "id": 358, - "paths": [ - "M975.347 428.132c-46.227-43.528-132.175-27.132-191.971 36.622-10.87 11.588-20.104 23.95-27.698 36.672-195.972-91.086-635.909 166.219-342.323 386.888l-0.003 0.003h-238.245l-52.815 95.326h513.49l-176.669-206.163c48.464-53.328 134.689-87.271 193.678-89.983 27.541 90.049 72.38 226.626 143.235 296.143h121.534c-79.214-85.607-142.189-198.307-160.061-325.963 0.443 0.436 0.855 0.895 1.31 1.323 46.227 43.528 132.173 27.132 191.971-36.622s70.796-150.718 24.569-194.246zM447.486 519.851v-496.194h-100.257v575.445c26.236-31.664 61.017-58.355 100.257-79.251zM645.426 23.652h-97.686v457.706c32.456-8.259 65.571-12.965 97.686-13.785v-443.922zM239.265 869.142v-845.49h-100.257v893.225l32.636-47.735zM853.647 402.288v-378.631h-100.253v452.66c5.025-6.827 10.527-13.492 16.553-19.915 24.944-26.594 54.437-44.912 83.701-54.113z" - ], - "isMulticolor": false, - "tags": [ - "player-despair" - ], - "defaultCode": 60006, - "grid": 0, - "attrs": [] - }, - { - "id": 359, - "paths": [ - "M864.837 287.001c23.779-28.679 39.216-68.924 39.216-113.993 0-81.387-48.38-148.814-110.351-156.867-4.134-0.633-8.534 0-12.771 0-25.308 0-48.86 9.747-68.448 26.469l-678.969 49.162 624.667 45.233v23.803c-0.13 2.168-0.219 4.353-0.279 6.547l-624.389 45.208 624.47 45.22v30.364l-624.47 45.215 555.376 40.217v8.379c-4.049 10.38-7.581 21.334-10.653 32.748l-544.723 39.442 519.404 37.611v38.996l-519.404 37.606 520.321 37.678v45.434l-520.321 37.674 604.249 43.756v33.293l-604.249 43.751 619.452 44.856v31.082l-619.452 44.847 628.253 45.492 1.518 23.051h227.087l23.711-318.29h89.377c0-152.491-9.747-369.732-138.623-393.979zM678.461 259.262c0.038 0.074 0.077 0.149 0.115 0.222l-2.055-0.362 1.939 0.14z" - ], - "isMulticolor": false, - "tags": [ - "player-dodge" - ], - "defaultCode": 60007, - "grid": 0, - "attrs": [] - }, - { - "id": 360, - "paths": [ - "M511.651 95.955l-31.159 83.741-41.87-77.899-15.581 79.847-59.397-74.978 8.765 107.904c36.802 36.802 241.144 37.342 278.488 0l7.791-107.904-59.397 74.978-15.581-79.847-41.87 76.925-30.189-82.767zM514.928 282.704c-87.678 0-158.837 90.951-158.837 203.019 0 59.624 20.891 112.959 52.944 150.112-169.9 38.71-180.997 174.541-180.997 372.818h576.24c0-197.54 2.417-340.875-179.768-376.51 30.058-36.946 49.249-88.951 49.249-146.42 0-112.067-71.157-203.019-158.837-203.019h0.007z" - ], - "isMulticolor": false, - "tags": [ - "player-king" - ], - "defaultCode": 60008, - "grid": 0, - "attrs": [] - }, - { - "id": 361, - "paths": [ - "M587.059 791.968l-1.784 23.951h-144.716l-1.579-23.951h-266.148l342.539 200.774 342.562-200.774zM515.525 189.402c2.706 0 5.504-0.446 8.135 0l0.007 0.005c29.105 3.78 53.489 28.126 64.31 61.427h269.965l-342.554-200.766-342.549 200.766h270.276c11.854-36.119 39.851-61.432 72.41-61.432zM427.192 613.085h-63.094c-21.325-113.425 7.086-238.318 96.802-252.23-14.501-18.193-23.831-43.471-23.831-71.485 0-22.867 6.029-43.897 16.14-60.717h-153.672v580.087h140.549l-12.894-195.656zM578.035 228.653c10.009 16.893 15.956 37.948 15.956 60.72 0 28.72-9.837 54.371-24.99 72.642 82.13 15.452 121.562 134.583 97.38 251.069h-65.997l-14.575 195.654h145.408v-580.085h-153.182z" - ], - "isMulticolor": false, - "tags": [ - "player-lift" - ], - "defaultCode": 60009, - "grid": 0, - "attrs": [] - }, - { - "id": 362, - "paths": [ - "M933.541 610.002c54.583-54.583 68.62-129.037 31.353-166.304-37.265-37.267-111.721-23.23-166.304 31.353-10.609 10.608-19.663 21.972-27.13 33.662-187.185-112.735-658.733 152.379-357.366 378.898l-0.003 0.003h-238.245l-52.815 95.326h513.49l-176.669-206.163c48.464-53.328 134.689-87.271 193.678-89.983 27.541 90.049 72.38 226.626 143.235 296.143h121.534c-86.023-92.965-152.895-217.883-163.65-359.207 3.231 6.488 7.394 12.428 12.589 17.625 37.265 37.267 111.721 23.23 166.304-31.353zM300.247 698.789c30.205-177.112 300.044-272.529 459.819-215.606l102.766-255.721-163.952 164.864 38.357-322.993-83.592 191.58-27.703-77.147-65.315 166.732-161.060-308.389 27.651 286.957-260.049-212.568 145.019 279.342-155.167-58.849 68.446 124.069-163.888-4.154 209.743 136.142-207.934 59.92 236.86 45.823z" - ], - "isMulticolor": false, - "tags": [ - "player-pain" - ], - "defaultCode": 60010, - "grid": 0, - "attrs": [] - }, - { - "id": 363, - "paths": [ - "M904.59 371.786c37.156 76.184 2.437 246.589-118.004 269.406 50.924-42.669 86.203-149.654 66.796-193.705-66.314 90.708-150.825 4.874-65.683-82.381 56.567-57.975 76.125-131.164 20.039-211.517 17.353 76.601-71.992 161.882-133.199 107.984-41.328-36.39-19.53-116.105 45.253-136.93-51.38-17.794-90.962 5.362-100.192 41.191-33.668-32.579-77.839-53.906-65.683-107.983l-0.007-0.002c-61.006 27.085-43.604 105.332-15.586 139.155 53.375 64.42-59.744 99.413-93.513-10.019-10.252 33.593-46.763 40.982-67.906 14.473-13.374-16.768-37.16-60.264-23.377-102.418-39.809 28.087-60.383 85.889-36.735 120.231 55.819 81.063-22.368 143.5-112.436 77.928 69.492 91.017 40.347 228.502-31.171 274.973 27.99-61.076 15.756-168.113-42.303-189.253 30.284 89.681-44.857 156.515-81.265 118.004v481.445h92.818c25.445-107.929 84.247-174.468 221.678-200.328-41.491-50.001-67.781-120.887-67.781-199.463 0-151.323 95.76-274.090 214.193-274.090s214.193 122.77 214.193 274.090c0 76.628-24.003 146.983-63.717 196.75 150.344 23.659 206.928 92.105 227.817 203.043h95.924v-438.030c-12.27-59.19-33.625-158.277-80.154-172.553zM161.854 239.564c-46.411-92.827 128.915-114.868 9.605-197.694-4.455 63.089-190.108 90.277-9.605 197.694z" - ], - "isMulticolor": false, - "tags": [ - "player-pyromaniac" - ], - "defaultCode": 60011, - "grid": 0, - "attrs": [] - }, - { - "id": 364, - "paths": [ - "M934.972 609.854c54.665-54.667 68.725-129.267 31.394-166.566-37.327-37.329-111.899-23.271-166.564 31.396-10.62 10.62-19.687 21.996-27.163 33.702-25.987-15.649-57.434-24.039-91.544-26.261l-34.824-280.742 38.311-40.923-11.073-70.019-36.201 38.671-1.211-9.765-14.266 1.77 1.138 9.174-44.835-24.763 11.073 70.019 42.272 23.348 35.062 282.659c-19.448-0.284-39.595 1.305-59.959 4.576l-170.951-296.087 19.515-48.056-35.443-61.391-19.515 48.059-5.942-10.292-12.449 7.188 6.070 10.513-51.791-7.188 35.443 61.391 51.792 7.188 168.23 291.377c-19.416 3.88-38.91 9.244-58.070 15.907l-223.245-189.786 4.134-51.016-52.236-47.922-4.401 54.305-12.715-10.809-9.31 10.951 9.972 8.478-48.824 8.229 52.236 47.922 52.276-8.809 216.62 184.151c-167.857 65.208-300.101 229.558-103.319 377.483h-238.627l-52.898 95.473h514.324l-176.945-206.487c48.535-53.412 134.912-87.403 193.998-90.14 27.576 90.197 72.488 226.992 143.467 296.629h121.737c-86.163-93.104-153.137-218.243-163.925-359.804 3.236 6.502 7.407 12.455 12.614 17.662 37.329 37.329 111.899 23.271 166.566-31.396z" - ], - "isMulticolor": false, - "tags": [ - "player-shot" - ], - "defaultCode": 60012, - "grid": 0, - "attrs": [] - }, - { - "id": 365, - "paths": [ - "M964.331 545.254c0-47.812-114.977-88.867-278.712-106.391-0.291-3.617-0.611-7.22-0.956-10.811-0.048-0.503-0.095-1.007-0.144-1.51-0.359-3.667-0.75-7.317-1.169-10.947-0.062-0.531-0.122-1.061-0.184-1.592-0.426-3.603-0.884-7.185-1.373-10.744-0.074-0.538-0.147-1.074-0.222-1.61-0.499-3.545-1.032-7.061-1.6-10.551-0.045-0.276-0.082-0.56-0.127-0.835l0.012 0.134c-1.194-7.267-2.536-14.415-4.061-21.39 168.94-16.91 288.536-58.645 288.536-107.408 0-55.181-153.164-101.356-357.667-112.749-2.237-57.105-33.687-104.253-75.577-117.969-8.052-2.636-16.489-4.039-25.179-4.039-3.475 0-7.076-0.439-10.461 0l0.005 0.002c-49.18 6.395-87.915 58.425-90.301 122.279-202.035 11.854-352.737 57.737-352.74 112.475-0.003 48.788 119.721 90.543 288.805 107.436-2.639 10.658-4.894 21.699-6.812 33.007l0.010-0.102c-0.053 0.314-0.097 0.635-0.15 0.949-0.616 3.67-1.203 7.362-1.752 11.080-0.077 0.52-0.149 1.041-0.224 1.56-0.533 3.673-1.037 7.365-1.508 11.077-0.072 0.568-0.139 1.139-0.209 1.709-0.443 3.57-0.865 7.151-1.255 10.746-162.768 17.632-276.903 58.557-276.906 106.192-0.003 54.563 149.75 100.324 350.811 112.354l3.849 51.673c-203.342 11.616-355.219 57.62-355.219 112.612 0 63.759 204.154 115.441 455.987 115.441s455.987-51.683 455.987-115.441c0.002-54.828-150.971-100.726-353.409-112.508l3.413-51.791c200.904-12.061 350.502-57.8 350.502-112.336zM833.725 530.091c0 35.862-90.368 66.605-216.635 78.036l2.407-36.535h69.493c0-25.358 0.102-53.002-0.69-81.117l0.003 0.033c-0.003-0.090-0.007-0.18-0.008-0.269-0.11-3.867-0.239-7.744-0.386-11.625-0.013-0.369-0.027-0.737-0.040-1.104-0.149-3.859-0.321-7.721-0.511-11.583-0.020-0.401-0.037-0.802-0.058-1.203-0.050-0.987-0.105-1.973-0.157-2.958 88.318 14.503 146.582 39.528 146.582 68.324zM833.725 246.437c0 31.609-70.202 59.238-173.303 73.177-16.596-38.404-42.824-65.9-84.264-72.326 16.347-20.505 27.574-48.016 30.095-78.758 131.904 10.324 227.472 41.025 227.472 77.908zM181.854 246.437c0.002-36.438 94.024-66.841 223.757-77.525 2.669 31.418 14.491 59.282 31.559 79.867-37.34 7.028-62.462 33.839-79.354 71.070-104.4-13.862-175.961-41.625-175.961-73.412zM181.854 530.091c0-28.57 57.813-53.432 145.314-67.987-0.084 1.046-0.169 2.091-0.247 3.137-0.048 0.63-0.092 1.258-0.137 1.888-0.272 3.683-0.525 7.367-0.755 11.049-0.042 0.677-0.080 1.351-0.12 2.028-0.217 3.618-0.421 7.231-0.601 10.84-0.038 0.778-0.074 1.554-0.11 2.332-0.165 3.463-0.321 6.921-0.454 10.365-0.012 0.309-0.028 0.623-0.040 0.932l0.010-0.114c-0.894 23.181-1.124 45.868-1.124 67.031h73.229l2.721 36.537c-126.585-11.429-217.684-42.173-217.684-78.038zM833.539 807.092c0 45.54-145.824 82.458-325.706 82.458s-325.706-36.917-325.706-82.458c0-36.77 95.077-67.915 226.379-78.547l7.736 103.84c49.194 17.299 143.869 15.437 186.066 0l6.832-103.678c130.277 10.786 224.398 41.8 224.398 78.385z" - ], - "isMulticolor": false, - "tags": [ - "player-teleport" - ], - "defaultCode": 60013, - "grid": 0, - "attrs": [] - }, - { - "id": 366, - "paths": [ - "M985.412 659.536l-120.129 33.79 114.78-185.361-136.827 57.541 108.24-204.356-145.035 86.003 37.006-246.437-103.292 231.513-142.017-287.589 45.918 329.569-132.293-104.824 84.813 171.274-240.466-153.715 146.962-109.152-257.128-234.356h-205.578l0.003 130.733 183.725 141.038-120.057 115.994 470.497 314.543-167.418-11.733 186.196 152.872-154.851 10.868 226.593 81.19-9.188-137.817h-43.519c0-75.475-1.48-183.652 64.96-199.655-10.183-15.273-16.372-35.284-16.372-57.207 0-47.909 29.487-86.751 65.857-86.751s65.857 38.842 65.857 86.751c0 22.443-6.471 42.894-17.087 58.296 60.882 17.286 65.608 123.406 65.608 198.566h-45.856l-10.502 139.374 183.533-118.969-97.985 8.755 115.054-210.749z" - ], - "isMulticolor": false, - "tags": [ - "player-thunder-struck" - ], - "defaultCode": 60014, - "grid": 0, - "attrs": [] - }, - { - "id": 367, - "paths": [ - "M525.228 20.575c61.971 8.053 110.351 75.48 110.351 156.867 0 45.069-15.437 85.314-39.216 113.993 128.875 24.247 138.623 241.489 138.623 393.979h-89.377l-23.711 318.29h-227.087l-20.976-318.29h-84.815c0-152.922-3.072-373.969 137.712-395.805-22.755-28.547-37.392-68.214-37.392-112.167 0-86.808 55.254-156.867 123.117-156.867 4.236 0 8.636-0.633 12.771 0v0z" - ], - "isMulticolor": false, - "tags": [ - "player" - ], - "defaultCode": 60015, - "grid": 0, - "attrs": [] - }, - { - "id": 368, - "paths": [ - "M180.747 778.838h76.867v33.11h-126.941v-33.11l63.764-56.275c5.693-5.148 9.906-10.178 12.635-15.093s4.094-10.023 4.094-15.327c0-8.19-2.77-14.78-8.307-19.772-5.459-4.991-12.752-7.487-21.878-7.487-7.019 0-14.702 1.522-23.048 4.562-8.346 2.963-17.276 7.41-26.793 13.337v-38.374c10.14-3.354 20.163-5.888 30.069-7.604 9.906-1.794 19.616-2.691 29.131-2.691 20.903 0 37.126 4.602 48.671 13.805 11.621 9.204 17.433 22.035 17.433 38.491 0 9.517-2.457 18.407-7.37 26.676-4.915 8.19-15.248 19.187-31.004 32.994l-37.323 32.758zM878.361 844.559c11.777 3.042 20.709 8.346 26.793 15.911 6.162 7.487 9.243 17.042 9.243 28.664 0 17.316-6.63 30.496-19.889 39.545-13.26 8.97-32.603 13.454-58.031 13.454-8.97 0-17.978-0.742-27.027-2.223-8.97-1.403-17.861-3.548-26.676-6.435v-34.748c8.424 4.211 16.77 7.41 25.037 9.594 8.346 2.106 16.536 3.159 24.569 3.159 11.934 0 21.060-2.066 27.377-6.201 6.396-4.134 9.594-10.061 9.594-17.784 0-7.956-3.276-13.962-9.827-18.018-6.473-4.134-16.068-6.201-28.781-6.201h-18.018v-29.014h18.953c11.309 0 19.733-1.754 25.271-5.265 5.538-3.588 8.307-9.009 8.307-16.262 0-6.707-2.691-11.894-8.073-15.56s-12.986-5.499-22.814-5.499c-7.253 0-14.585 0.819-21.995 2.457s-14.78 4.056-22.112 7.253v-32.994c8.892-2.496 17.705-4.368 26.442-5.616 8.735-1.248 17.316-1.871 25.739-1.873 22.697 0 39.662 3.744 50.893 11.232 11.309 7.41 16.964 18.602 16.965 33.578 0 10.218-2.691 18.602-8.073 25.154-5.382 6.476-13.337 11.038-23.868 13.691zM471.356 460.715h39.779v-112.902l-40.831 8.424v-30.653l40.598-8.424h42.821v143.554h39.779v31.121h-122.145v-31.119zM990.382 990.372v-287.53h-287.53v-447.269h-351.426v319.478h-319.478v415.321z" - ], - "isMulticolor": false, - "tags": [ - "podium" - ], - "defaultCode": 60016, - "grid": 0, - "attrs": [] - }, - { - "id": 369, - "paths": [ - "M511.992 211.995c-67.614 0-123.784 45.377-142.507 106.867-20.43-10.441-42.993-16.866-67.489-16.866-82.849 0-150.011 67.162-150.011 150.011 0 3.564 0.703 6.802 0.929 10.315-70.375 24.471-120.947 90.98-120.947 169.688 0 99.413 80.59 180.003 180.003 180.003h599.994c99.413 0 180.003-80.59 180.003-180.003 0-78.707-50.573-145.217-120.947-169.688 0.251-3.514 0.929-6.751 0.929-10.315 0-82.849-67.162-150.011-150.011-150.011-24.521 0-47.059 6.45-67.489 16.866-18.673-61.49-74.817-106.867-142.456-106.867zM391.998 391.998l119.994 119.994 119.994-119.994 60.009 60.009-119.994 119.994 119.994 119.994-60.009 60.009-119.994-119.994-119.994 119.994-60.009-60.009 119.994-119.994-119.994-119.994 60.009-60.009z" - ], - "isMulticolor": false, - "tags": [ - "poison-cloud" - ], - "defaultCode": 60017, - "grid": 0, - "attrs": [] - }, - { - "id": 370, - "paths": [ - "M925.171 528.666c-10.187-51.091-54.508-69.159-95.845-61.094v-196.306l22.917-18.674-12.669-8.907 61.764-63.847c-0.002-66.979-113.333-145.401-184.186-129.495l-39.179 79.723-15.016-10.557-33.525 95.212c0.349 0.797 0.718 1.574 1.076 2.364-105.652 172.69-304.208 206.845-454.12 260.081-157.24 55.847-61.228 328.739 77.371 426.174s427.975 95.468 427.325-71.398c-0.62-159.245-35.731-357.845 91.585-515.752 0.444 0.052 0.875 0.115 1.321 0.165l38.693-31.529v187.491c-39.674 15.003-71.374 54.992-58.425 113.18l48.701 255.136 170.908-56.821-48.698-255.146zM580.929 900.97l-152.162 23.626-159.884-51.673-107.101-131.62-33.548-171.614h518.724l2.581 251.62-68.61 79.662zM837.938 599.877c-26.965 0-48.825-21.856-48.825-48.823s21.86-48.823 48.825-48.823c26.965 0 48.825 21.856 48.825 48.823s-21.861 48.823-48.825 48.823z" - ], - "isMulticolor": false, - "tags": [ - "potion" - ], - "defaultCode": 60018, - "grid": 0, - "attrs": [] - }, - { - "id": 371, - "paths": [ - "M993.116 616.475l-416.843-438.307-482.362 472.196 71.964 15.332-133.307 129.154 334.673 70.569 176.651-89.641-35.698-37.151 174.269 37.13 310.655-159.281zM364.671 855.247l-313.474-64.211 254.376-245.403 59.098 309.614zM488.906 718.556l-182.048-189.452-129.081 125.058-51.106-10.577 447.344-436.045 103.928 550.142-189.037-39.126z" - ], - "isMulticolor": false, - "tags": [ - "pyramids" - ], - "defaultCode": 60019, - "grid": 0, - "attrs": [] - }, - { - "id": 372, - "paths": [ - "M913.69 150.209c-35.315 0-63.944 28.647-63.944 63.971 0 21.397 10.516 40.329 26.647 51.942l-101.125 158.777c21.541 11.408 36.224 34.049 36.224 60.124 0 37.547-30.431 67.993-67.97 67.993s-67.97-30.439-67.97-67.993c0-34.149 25.166-62.412 57.957-67.257l-69.386-162.818c30.528-7.123 53.276-34.499 53.276-67.206 0-38.127-30.895-69.036-69.007-69.036s-69.007 30.915-69.007 69.036c0 29.546 18.566 54.748 44.66 64.597l-88.866 151.589c29.176 9.034 50.373 36.239 50.373 68.389 0 39.525-32.033 71.575-71.55 71.575s-71.55-32.043-71.55-71.575c0-30.262 18.784-56.121 45.317-66.592l-88.148-153.127c26.445-9.665 45.323-35.055 45.323-64.856 0-38.127-30.895-69.036-69.007-69.036s-69.007 30.915-69.007 69.036c0 32.112 21.925 59.105 51.618 66.816l-70.537 163.596c31.676 5.785 55.692 33.518 55.692 66.869 0 37.547-30.431 67.993-67.97 67.993s-67.97-30.439-67.97-67.993c0-26.699 15.39-49.792 37.773-60.919l-101.436-158.164c15.986-11.628 26.39-30.473 26.39-51.76 0-35.329-28.629-63.971-63.944-63.971s-63.944 28.647-63.944 63.971 28.629 63.966 63.944 63.966c1.482 0 2.945-0.068 4.402-0.167l90.438 489.997c-54.797 1.443-54.934 80.216 1.523 80.216h13.282l0.117 0.633h587.647l0.117-0.633h15.215c54.979 0 55.963-80.25 0-80.25h-0.403l90.431-489.96c1.448 0.099 2.903 0.165 4.375 0.165 35.315 0 63.944-28.637 63.944-63.966 0-35.331-28.629-63.972-63.944-63.972z" - ], - "isMulticolor": false, - "tags": [ - "queen-crown" - ], - "defaultCode": 60020, - "grid": 0, - "attrs": [] - }, - { - "id": 373, - "paths": [ - "M992.273 28.094c-189.98 6.983-344.077 48.068-461.856 111.437l-58.821 98.351-9.923-56.058c-21.025 14.772-40.509 30.379-58.473 46.713l-29.359 90.007-10.070-50.301c-87.16 97.557-126.152 215.543-116.307 336.136h-147.264v98.030h80.607l-86.492 75.938-44.458 169.683 29.036 31.686h353.851l29.036-31.686-44.46-169.685-81.857-75.936h70.579v-98.030h-129.752c51.076-26.462 100.668-63.074 149.773-105.388l-59.591 3.105 0.55-0.611 106.985-45.545c93.52-87.102 186.487-189.584 285.942-275.994l-48.918-10.357 113.118-42.131c53.53-40.816 109.231-75.445 168.121-99.363z" - ], - "isMulticolor": false, - "tags": [ - "quill-ink" - ], - "defaultCode": 60021, - "grid": 0, - "attrs": [] - }, - { - "id": 374, - "paths": [ - "M766.747 191.668c-10.654-0.222-21.783 0.418-32.968 2.080-141.25-63.864-186.921-157.24-249.99-157.24-54.563 0-51.853 100.763 156.274 208.67-0.368 0.488-0.747 0.961-1.108 1.457-15.875 21.773-223.554-99.118-287.53-98.991-86.14 0.177 40.235 203.768 246.057 171.82 19.528-3.034-9.672 29.093-7.268 47.345v-0.007c0.745 5.646 2.076 11.035 3.921 16.185-200.809-5.247-326.030 31.42-398.827 88.777-51.708-28.896-53.494-130.86-106.793-104.476-56.649 28.029-21.721 178.639 26.599 228.549-32.711 141.816 71.894 311.101 155.085 362.585h656.287c35.588-25.253 15.581-45.114 0-63.896-19.249-23.205-78.764-38.377-127.791-31.948-71.344-29.051 174.215-191.142 0.865-382.41 32.668 1.861 69.948-0.732 102.412-10.943 0.738 0.525 1.492 1.042 2.27 1.554l1.433-2.751c29.8-10.031 55.129-26.743 68.393-52.725 16.314-31.948-105.693-221.511-207.321-223.635zM798.638 351.132c-17.644 0-31.948-14.304-31.948-31.948s14.304-31.948 31.948-31.948c17.645 0 31.948 14.304 31.948 31.948s-14.304 31.948-31.948 31.948z" - ], - "isMulticolor": false, - "tags": [ - "rabbit" - ], - "defaultCode": 60022, - "grid": 0, - "attrs": [] - }, - { - "id": 375, - "paths": [ - "M458.010 32.101l0.003 0.007 0.002-0.002zM974.935 258.11c-17.266-29.932-55.533-40.172-85.461-22.877-22.548 13.030-33.932 37.977-30.795 62.289l-210.645 64.004-190.020-329.417c-111.010 105.074-163.92 257.497-143.395 406.171l-71.535 12.585 21.32 120.921-83.978 78.589 37.317 64.138 117.155-35.531 14.998 19.735-227.517 284.184h506.548l-33.461-180.528c98.666 41.104 210.672 48.202 316.459 16.636l-190.016-329.414 160.653-150.535c19.476 14.974 46.828 17.63 69.438 4.565 29.935-17.298 40.202-55.583 22.936-85.515z" - ], - "isMulticolor": false, - "tags": [ - "radar-dish" - ], - "defaultCode": 60023, - "grid": 0, - "attrs": [] - }, - { - "id": 376, - "paths": [ - "M166.372 445.283l134.127 35.939c0.007-0.055 0.017-0.109 0.023-0.164-1.143 8.927-1.724 17.829-1.744 26.661l76.451-36.695-48.023-69.617c-5.447 9.51-10.203 19.54-14.211 30.030 0.094-0.244 0.179-0.491 0.272-0.733l-133.416-35.748 15.327-57.19-159.552 41.839 116.953 117.154 13.791-51.474zM301.452 474.625c0.033-0.209 0.060-0.418 0.094-0.626-0.033 0.209-0.060 0.418-0.094 0.626zM302.69 467.589c0.047-0.247 0.087-0.493 0.135-0.74-0.048 0.246-0.089 0.493-0.135 0.74zM304.125 460.758c0.080-0.354 0.147-0.708 0.229-1.061-0.082 0.354-0.149 0.707-0.229 1.061zM310.798 437.477c0.362-1.039 0.733-2.073 1.109-3.105-0.376 1.032-0.747 2.066-1.109 3.105zM306.169 452.448c0.545-2.028 1.123-4.038 1.722-6.034-0.598 1.996-1.176 4.006-1.722 6.034zM308.642 444.012c0.383-1.219 0.768-2.437 1.171-3.647-0.401 1.209-0.788 2.426-1.171 3.647zM990.739 635.52l-117.259-116.013-15.327 57.195-133.14-35.675c-0.040 0.257-0.090 0.515-0.13 0.77 1.747-10.907 2.646-21.791 2.71-32.574l-71.638 35.514 44.974 66.894c3.794-6.892 7.218-14.054 10.278-21.449-0.134 0.324-0.256 0.656-0.391 0.981l133.858 35.867-13.791 51.474 159.856-42.985zM724.315 545.132c-0.175 0.997-0.359 1.995-0.548 2.993 0.19-0.997 0.373-1.996 0.548-2.993zM723.154 551.234c-0.251 1.216-0.518 2.432-0.79 3.647 0.272-1.216 0.54-2.432 0.79-3.647zM721.808 557.357c-0.489 2.070-1.002 4.141-1.557 6.209 0.553-2.068 1.066-4.138 1.557-6.209zM713.748 583.754c-0.249 0.66-0.506 1.313-0.76 1.969 0.256-0.656 0.513-1.311 0.76-1.969zM718.302 570.366c-0.184 0.605-0.384 1.199-0.573 1.802 0.19-0.601 0.391-1.198 0.573-1.802zM716.13 577.112c-0.219 0.646-0.453 1.285-0.678 1.928 0.226-0.643 0.458-1.281 0.678-1.928zM381.417 339.006c0.561-0.436 1.136-0.852 1.701-1.281-6.849 5.224-13.407 10.848-19.608 16.882l80.315 26.398 14.51-80.178c-11.057 2.937-21.83 6.752-32.22 11.381l-68.934-119.397 51.275-29.606-142.401-83.235-0.149 165.539 46.148-26.644 69.363 120.14zM414.184 317.975c0.438-0.229 0.882-0.443 1.321-0.668-0.438 0.226-0.884 0.441-1.321 0.668zM385.477 335.946c0.986-0.73 1.98-1.447 2.977-2.16-0.997 0.713-1.993 1.43-2.977 2.16zM391.001 331.985c0.947-0.656 1.903-1.298 2.86-1.939-0.957 0.641-1.913 1.283-2.86 1.939zM396.642 328.203c0.889-0.575 1.786-1.134 2.683-1.697-0.897 0.561-1.794 1.121-2.683 1.697zM402.392 324.603c0.8-0.483 1.61-0.95 2.417-1.423-0.807 0.474-1.617 0.94-2.417 1.423zM408.242 321.194c0.667-0.374 1.341-0.732 2.013-1.099-0.672 0.368-1.346 0.725-2.013 1.099zM408.461 163.21l-0.003-0.005-0.002 0.002zM708.296 800.962l-69.004-119.519c9.074-6.592 17.65-13.9 25.628-21.877l-77.876-27.14-14.795 81.763c7.98-2.295 15.793-5.068 23.422-8.255-0.646 0.271-1.285 0.556-1.934 0.82l69.433 120.262-46.148 26.644 143.434 82.643-0.88-164.944-51.279 29.602zM601.693 703.308c-0.929 0.421-1.854 0.845-2.79 1.253 0.934-0.408 1.861-0.832 2.79-1.253zM629.197 688.328c-0.264 0.17-0.523 0.347-0.788 0.516 0.266-0.169 0.525-0.347 0.788-0.516zM624.214 691.432c-0.501 0.304-0.996 0.616-1.498 0.915 0.503-0.301 0.997-0.613 1.498-0.915zM618.875 694.558c-0.655 0.371-1.305 0.752-1.963 1.116 0.658-0.364 1.308-0.745 1.963-1.116zM613.319 697.6c-0.772 0.409-1.542 0.824-2.319 1.223 0.778-0.399 1.547-0.814 2.319-1.223zM607.581 700.525c-0.86 0.423-1.719 0.85-2.584 1.261 0.865-0.411 1.724-0.839 2.584-1.261zM339.831 634.183c6.744 9.286 14.234 18.053 22.424 26.186l27.78-79.715-83.714-16.249c2.374 8.686 5.3 17.187 8.725 25.468-0.162-0.391-0.337-0.777-0.496-1.169l-120.242 69.423-26.644-46.148-82.645 143.43 164.944-0.88-29.602-51.277 119.517-69.002c-0.015-0.022-0.030-0.045-0.047-0.067zM317.736 596.092c-0.503-1.116-0.992-2.238-1.477-3.363 0.483 1.124 0.974 2.247 1.477 3.363zM337.218 630.473c-0.429-0.616-0.867-1.226-1.288-1.848 0.421 0.62 0.859 1.229 1.288 1.848zM333.69 625.231c-0.499-0.767-1.006-1.528-1.497-2.302 0.491 0.773 0.997 1.535 1.497 2.302zM330.214 619.72c-0.53-0.867-1.061-1.734-1.577-2.608 0.516 0.874 1.047 1.741 1.577 2.608zM326.856 614.022c-0.538-0.945-1.074-1.893-1.599-2.848 0.525 0.956 1.061 1.903 1.599 2.848zM323.649 608.177c-0.535-1.014-1.064-2.030-1.584-3.050 0.518 1.021 1.049 2.036 1.584 3.050zM320.606 602.196c-0.523-1.069-1.036-2.142-1.54-3.219 0.504 1.076 1.017 2.15 1.54 3.219zM858.115 403.414l-0.002-0.003-0.002 0.003zM682.313 376.376c0.332 0.426 0.646 0.865 0.976 1.295-5.108-6.672-10.602-13.063-16.484-19.117l-25.657 76.549 78.193 14.151c-2.895-10.105-6.538-19.952-10.855-29.481 0.199 0.438 0.411 0.87 0.606 1.31l119.419-68.945 29.604 51.274 83.236-142.403-165.539-0.145 26.644 46.148-120.144 69.365zM705.68 413.82c0.451 0.922 0.895 1.846 1.335 2.775-0.439-0.927-0.884-1.853-1.335-2.775zM685.006 379.951c0.737 0.991 1.468 1.985 2.188 2.987-0.72-1.002-1.45-1.998-2.188-2.987zM688.875 385.315c0.692 0.991 1.376 1.985 2.050 2.987-0.673-1.002-1.358-1.998-2.050-2.987zM692.585 390.807c0.64 0.979 1.273 1.963 1.896 2.953-0.623-0.991-1.255-1.974-1.896-2.953zM696.13 396.417c0.586 0.962 1.168 1.928 1.739 2.898-0.573-0.971-1.153-1.936-1.739-2.898zM699.496 402.13c0.536 0.944 1.066 1.889 1.589 2.841-0.523-0.952-1.052-1.898-1.589-2.841zM702.681 407.935c0.491 0.929 0.974 1.859 1.452 2.795-0.478-0.934-0.961-1.866-1.452-2.795zM589.734 307.867c0.297 0.114 0.6 0.217 0.895 0.332l35.741-133.389 57.185 15.322-41.839-159.554-117.154 116.953 51.474 13.791-35.93 134.092c0.204 0.027 0.409 0.062 0.613 0.089-8.212-1.072-16.402-1.675-24.538-1.796l34.943 72.801 67.28-45.235c-9.104-5.118-18.681-9.6-28.672-13.407zM586.401 306.63c-0.877-0.317-1.759-0.63-2.641-0.935 0.882 0.306 1.764 0.616 2.641 0.935zM580.636 304.627c-1.123-0.371-2.255-0.727-3.388-1.081 1.133 0.354 2.265 0.708 3.388 1.081zM574.75 302.767c-2.015-0.603-4.041-1.186-6.084-1.734-0.077-0.020-0.154-0.037-0.231-0.058 0.077 0.020 0.155 0.037 0.232 0.058 2.045 0.548 4.069 1.129 6.082 1.734zM547.666 296.522c-0.504-0.084-1.009-0.154-1.515-0.234 0.504 0.080 1.009 0.152 1.515 0.234zM561.732 299.302c-0.513-0.12-1.026-0.221-1.537-0.336 0.511 0.114 1.024 0.215 1.537 0.336zM554.704 297.792c-0.509-0.1-1.017-0.187-1.527-0.284 0.509 0.097 1.019 0.184 1.527 0.284zM479.745 646.921l-71.057 48.392c7.11 3.961 14.51 7.53 22.162 10.706-0.229-0.095-0.463-0.18-0.69-0.276l-35.873 133.885-51.474-13.791 42.985 159.859 116.013-117.259-57.19-15.325 35.685-133.18c-0.028-0.005-0.057-0.010-0.085-0.015 11.997 1.881 23.966 2.723 35.8 2.574l-36.274-75.571zM435.594 707.913c0.593 0.229 1.183 0.466 1.779 0.69-0.596-0.224-1.186-0.459-1.779-0.69zM442.216 710.354c0.625 0.219 1.243 0.448 1.869 0.66-0.628-0.212-1.246-0.441-1.869-0.66zM456.696 714.869c0.337 0.092 0.668 0.195 1.007 0.287 2.205 0.591 4.413 1.134 6.62 1.652-2.207-0.516-4.415-1.059-6.62-1.65-0.339-0.090-0.668-0.195-1.007-0.289zM448.9 712.572c0.67 0.21 1.33 0.434 2.003 0.638-0.673-0.204-1.335-0.428-2.003-0.638zM473.561 718.758c1.325 0.251 2.649 0.479 3.972 0.705-1.325-0.226-2.648-0.456-3.972-0.705zM466.478 717.293c1.453 0.326 2.907 0.635 4.362 0.929-1.455-0.294-2.908-0.605-4.362-0.929z" - ], - "isMulticolor": false, - "tags": [ - "radial-balance" - ], - "defaultCode": 60024, - "grid": 0, - "attrs": [] - }, - { - "id": 377, - "paths": [ - "M577.942 567.508c24.888-43.107 10.12-98.23-32.987-123.117s-98.227-10.12-123.116 32.99-10.118 98.227 32.987 123.116c43.107 24.887 98.227 10.118 123.116-32.989zM394.055 516.843c0.844-16.177 5.389-32.402 14.045-47.395 10.182-17.634 24.67-31.223 41.363-40.233l-150.256-260.2c-54.108 33.394-101.191 80.199-135.211 139.12-37.958 65.745-53.779 137.991-51.93 208.701v0.005l281.989 0.002zM449.165 615.472l-137.226 236.45c58.814 33.516 121.874 50.29 185.182 51.93 69.024 1.794 137.208-15.569 197.918-48.008l-140.006-242.867c-31.33 19.045-71.603 21.195-105.868 2.494zM708.757 164.111l-153.937 267.72c31.037 18.8 49.073 51.123 50.901 85.007h298.996c3.282-139.794-66.901-277.275-195.96-352.727z" - ], - "isMulticolor": false, - "tags": [ - "radioactive" - ], - "defaultCode": 60025, - "grid": 0, - "attrs": [] - }, - { - "id": 378, - "paths": [ - "M807.919 118.971c-17.659-43.456-65.143-74.632-122.442-74.632-114.471 0-122.285 72.236-181.916 109.616-194.492-69.036-237.76 288.279-164.423 504.932-30.742 63.744-61.351 151.555-87.463 269.379 113.467 61.218 237.845 77.226 363.832 19.822-12.382-75.303-28.335-137.512-43.885-190.456 49.966-25.217 119.021-29.118 172.742 28.744 0.511-61.303-43.801-85.169-90.359-84.573l-41.299-87.232c88.405-91.226 156.069-204.105 122.314-320.646-20.572-76.775 116.248-124.236 244.32-107.316-48.962-42.26-111.808-60.862-171.421-67.639zM546.457 676.383c17.5-14.896 34.948-30.702 51.828-47.291l35.28 74.52c-26.829 4.332-52.303 16.232-68.174 33.191-6.587-21.648-13.003-41.695-18.935-60.419zM740.457 137.35c-7.292 0-13.202-5.912-13.202-13.202 0-7.292 5.912-13.202 13.202-13.202s13.202 5.912 13.202 13.202c0 7.29-5.91 13.202-13.202 13.202z" - ], - "isMulticolor": false, - "tags": [ - "raven" - ], - "defaultCode": 60026, - "grid": 0, - "attrs": [] - }, - { - "id": 379, - "paths": [ - "M383.297 469.825l-83.269-83.269 60.571-181.688c30.273-90.844 30.273-121.117 151.415-121.117s121.117 30.273 151.415 121.117l60.571 181.688-83.269 83.269c-32.882-32.882-78.532-52.996-128.691-52.996s-95.86 20.114-128.742 52.996zM633.13 598.516c0 66.904-54.238 121.117-121.117 121.117-66.904 0-121.117-54.238-121.117-121.117 0-66.904 54.238-121.117 121.117-121.117s121.117 54.212 121.117 121.117zM687.799 551.397l113.745-30.476 127.070 143.283c63.535 71.642 89.755 86.791 29.184 191.669-60.571 104.904-86.791 89.755-180.598 70.552l-187.616-38.405-30.476-113.745c44.915-12.033 85.144-41.495 110.249-84.967 25.080-43.421 30.476-92.997 18.442-137.912v0zM464.895 774.301l-30.476 113.745-187.616 38.405c-93.808 19.202-120.027 34.326-180.598-70.552-60.571-104.904-34.326-120.027 29.184-191.669l127.070-143.283 113.745 30.476c-12.033 44.915-6.637 94.492 18.468 137.938 25.080 43.446 65.308 72.933 110.224 84.941v0z" - ], - "isMulticolor": false, - "tags": [ - "reactor" - ], - "defaultCode": 60027, - "grid": 0, - "attrs": [] - }, - { - "id": 380, - "paths": [ - "M510.918 39.438c-31.027 0.675-60.82 8.364-89.825 20.954l44.914 83.843c14.814-5.294 29.985-8.874 44.914-8.982 51.182 0 105.355 27.296 146.716 98.802l170.669 296.434 56.891-92.835-143.722-251.511c-54.863-94.858-141.898-147.461-230.557-146.704 0.002 0 0 0 0 0zM229.463 281.956l-131.745 230.557c-50.223 86.876-53.773 185.342-11.976 263.49 17.321 32.387 43.586 58.953 74.856 80.846l47.907-80.846c-16.057-12.701-29.741-27.76-38.924-44.906-24.979-46.726-26.602-109.115 8.982-170.674l161.687-278.468h-110.787zM870.223 689.164c-3.122 15.352-7.652 28.68-14.971 41.936-25.62 46.336-75.895 80.836-155.7 80.836h-326.365l56.888 95.813h269.479c108.866 0 196.682-51.237 239.537-128.748 15.104-27.349 23.427-58.37 26.946-89.838l-95.815 0.002zM360.717 403.204l-215.309-124.136 215.311-124.14-0.002 248.276zM711.005 480.164l215.311 124.136 0.002-248.276-215.312 124.14zM262.187 857.908l215.311-124.136 0.002 248.276-215.312-124.14z" - ], - "isMulticolor": false, - "tags": [ - "recycle" - ], - "defaultCode": 60028, - "grid": 0, - "attrs": [] - }, - { - "id": 381, - "paths": [ - "M459.21 31.992c-147.15 9.813-257.983 133.572-257.983 284.712 0 37.12 7.027 72.609 19.827 105.136 13.051 33.155 29.967 71.555 163.464 198.124l38.902-22.689c-2.435-6.902-3.715-14.356-3.715-22.111 0-31.347 21.76-57.55 50.849-64.075v-45.453c-112.64-6.977-202.039-101.371-202.039-216.897 0-113.669 80.64-207.109 190.695-216.747v0zM963.631 824.387c65.155-133.672 14.482-292.493-115.075-368.063-31.824-18.573-65.757-30.168-100.041-35.213-34.936-5.145-76.323-9.562-251.558 43.947v45.377c7.153 1.305 14.155 3.94 20.806 7.805 26.855 15.661 38.45 47.812 29.515 76.524l38.977 22.739c62.293-95.071 187.909-126.067 286.946-68.317 97.405 56.822 137.211 174.080 90.428 275.2v0zM31.992 869.011c81.995 123.834 243.501 158.921 373.057 83.351 31.824-18.573 58.729-42.441 80.213-69.898 21.885-27.984 46.356-61.992 88.119-242.071l-38.902-22.689c-4.693 5.597-10.466 10.416-17.092 14.281-26.855 15.661-60.21 9.738-80.339-12.449l-38.977 22.739c50.347 102.024 14.13 227.438-84.932 285.214-97.431 56.822-217.876 33.004-281.148-58.478v0zM484.71 306.639c-59.307 0-114.146 19.501-158.469 52.53 13.628 19.325 30.595 36.317 49.845 49.895 31.197-20.681 68.543-32.753 108.649-32.753 42.29 0 81.493 13.402 113.669 36.191 28.26-6.902 56.797-12.449 85.735-15.511-48.941-55.416-120.119-90.353-199.429-90.353v0zM716.189 711.872c29.666-51.903 40.358-109.603 34.209-164.919-23.391 2.259-46.431 8.609-67.689 18.648 2.133 37.647-6.199 76.348-26.253 111.435-21.133 36.995-52.229 64.602-87.868 81.368-8.207 28.16-17.744 55.918-29.565 82.773 71.981-15.134 137.512-59.909 177.167-129.305zM253.331 711.496c29.666 51.878 73.788 90.127 124.26 112.389 9.763-21.584 15.837-44.925 17.845-68.543-33.33-16.941-62.344-43.595-82.397-78.682-21.133-36.995-29.264-78.005-25.801-117.559-20.053-21.258-39.053-43.47-56.169-67.263-23.065 70.525-17.393 150.262 22.262 219.658v0z" - ], - "isMulticolor": false, - "tags": [ - "regeneration" - ], - "defaultCode": 60029, - "grid": 0, - "attrs": [] - }, - { - "id": 382, - "paths": [ - "M655.362 147.82l-2.265 72.482-50.971 13.593-2.265 56.631-272.96 271.826c1.739 49.952-34.17 84.299-65.691 81.547-47.216-4.128-65.904-34.136-65.691-74.75-31.532 34.283-48.44 77.749-48.701 121.196 32.279 0.005 64.662 8.763 93.283 26.048l-5.396 19.296c-49.117 34.679-103.865 92.14-130.451 138.616-3.271 5.716-5.949 11.012-8.12 15.918l-63.678 17.816-2.973 83.133 83.133-2.988 17.964-64.246c4.763-2.133 9.889-4.741 15.405-7.896 46.294-26.482 103.479-80.908 138.2-129.876l19.376-5.421c16.705 28.361 25.493 60.388 25.607 91.953 44.623 0.008 89.985-16.964 124.587-49.834-48.232-7.088-76.588-35.267-73.621-66.824 4.854-51.593 34.868-64.748 78.151-63.426l277.494-277.492 45.305-1.121 12.448-45.307 79.282-3.398 84.959-302.429-302.409 84.955zM844.16 328.114l-78.13 2.314-12.844 46.645-117.782 4.664 3.5-117.788 51.305-13.994 2.332-73.466 209.922-58.279-58.303 209.905z" - ], - "isMulticolor": false, - "tags": [ - "relic-blade" - ], - "defaultCode": 60030, - "grid": 0, - "attrs": [] - }, - { - "id": 383, - "paths": [ - "M879.089 821.449l112.337 85.241c24.432-63.468 6.398-137.962-50.519-181.154-43.774-33.216-99.453-39.939-147.511-22.816l-17.008-12.904-2.224-4.22c11.843-16.824 22.103-34.426 30.764-52.611l77.342-2.133 15.84-50.573-62.481-46.025c3.028-18.921 4.536-38.040 4.571-57.167l69.356-35.187-7.314-52.493-76.531-14.963c-6.397-22.028-14.903-43.584-25.543-64.35l45.635-63.15-30.518-43.338-75.098 21.814c-0.94-0.994-1.862-1.999-2.816-2.987-11.999-12.408-24.675-23.763-37.891-34.11l14.421-74.272-45.913-26.475-56.986 49.636c-18.452-7.427-37.393-13.279-56.613-17.574l-18.693-73.313-52.836-4.327-30.446 69.493c-15.743 0.954-31.438 2.925-46.979 5.92l-46.535-60.061-50.183 17.060-0.258 76.484c-21.26 10.933-41.683 24.109-60.93 39.538l-70.872-31.931-36.298 38.616 36.278 68.837c-11.701 16.684-21.852 34.138-30.439 52.172l-77.862 2.148-15.84 50.573 62.904 46.336c-3.008 18.767-4.529 37.729-4.611 56.703l-69.746 35.385 7.314 52.493 76.621 14.98c4.566 15.942 10.22 31.642 16.993 46.97l-50.557 62.7 28.202 44.865 78.505-18.352c4.944 5.796 10.074 11.488 15.44 17.038 11.284 11.671 23.125 22.419 35.437 32.259l-15.276 78.682 45.913 26.475 59.949-52.212c17.202 6.919 34.844 12.459 52.781 16.622l19.588 76.82 52.836 4.327 31.726-72.431c21.942-1.322 43.814-4.598 65.317-9.872l50.419 58.415 49.204-19.71-2.67-53.921 31.172 23.651c-3.688 51.111 17.363 103.471 61.1 136.66 56.881 43.157 133.515 40.498 188.066-0.115l-112.334-85.21c-19.821-15.010-24.375-43.463-9.974-62.479s42.486-21.494 62.273-6.479zM443.056 759.545c-63.525-7.155-124.536-35.852-172.425-85.402-109.484-113.232-106.332-293.329 6.899-402.775s293.43-107.525 402.882 5.704c96.383 99.683 105.375 252.098 28.898 361.847l-186.293-141.342c3.525-50.859-17.943-102.705-61.681-135.894-56.881-43.157-133.515-40.498-188.066 0.115l112.334 85.21c19.787 15.015 24.957 42.695 10.556 61.713-14.401 19.016-43.068 22.26-62.856 7.247l-112.334-85.21c-24.432 63.468-6.398 137.962 50.519 181.154 43.734 33.158 99.858 39.324 148.087 22.018l147.752 112.1c-40.115 13.697-82.626 18.211-124.272 13.516z" - ], - "isMulticolor": false, - "tags": [ - "repair" - ], - "defaultCode": 60031, - "grid": 0, - "attrs": [] - }, - { - "id": 384, - "paths": [ - "M502.662 992.477l498.294-119.529-145.473-490.7-109.755 189.819-109.63-63.202 53.848-92.87-327.419-188.433 82.431-142.159-374.229 89.519 109.254 367.487 82.424-142.154 110.943 63.849-87.052 150.555 326.115 188.002-109.747 189.811z" - ], - "isMulticolor": false, - "tags": [ - "reverse" - ], - "defaultCode": 60032, - "grid": 0, - "attrs": [] - }, - { - "id": 385, - "paths": [ - "M738.013 437.495h259.451l-0.992-103.314h-19.788v-99.478c-54.646 12.47-104.812 36.495-135.487 99.478h-242.367c0-0.002 0-0.005 0-0.007l-407.841 0.027c-8.977 32.803-15.642 57.556-21.604 77.34-40.614-24.898-141.569-92.761-141.569-92.761 14.194 74.296 47.794 133.969 96.471 182.267-9.442 11.366-21.145 24.072-36.311 40.395-83.312 157.803-68.369 241.166-62.693 327.804 54.807 69.467 164.391 66.371 230.263 43.364-2.093-96.283 12.834-188.152 78.691-282.099 80.649 74.715 203.826 39.124 263.19-26.058 26.617-29.228 30.363-63.703 26.091-102.468h114.496v-64.489z" - ], - "isMulticolor": false, - "tags": [ - "revolver" - ], - "defaultCode": 60033, - "grid": 0, - "attrs": [] - }, - { - "id": 386, - "paths": [ - "M512.003 31.989c0 0-240.001 119.995-240.001 419.999v240.001c0 60.003 0 60.003 60.003 60.003h359.996c60.003 0 60.003 0 60.003-60.003v-240.001c0-300.003-240.001-419.999-240.001-419.999zM512.003 181.986c0 0 119.995 60.003 119.995 270.002v119.995h-240.001v-119.995c0-209.999 120.006-270.002 120.006-270.002zM297.259 841.985h429.478c13.949 0 25.267 11.307 25.267 25.267v99.473c0 13.949-11.307 25.267-25.267 25.267h-429.478c-13.949 0-25.267-11.307-25.267-25.267v-99.473c0.011-13.96 11.318-25.267 25.267-25.267z" - ], - "isMulticolor": false, - "tags": [ - "rifle" - ], - "defaultCode": 60034, - "grid": 0, - "attrs": [] - }, - { - "id": 387, - "paths": [ - "M804.759 611.194c-0.015-97.313-62.676-83.108-102.326-230.985-41.018-152.977-74.702-229.426-154.211-246.739 2.429-5.499 3.787-11.578 3.785-17.976-0.003-24.611-19.962-44.565-44.575-44.57-24.613-0.003-44.565 19.947-44.562 44.555 0.002 6.702 1.492 13.053 4.143 18.756-77.067 18.721-110.348 95.152-150.73 245.915-39.607 147.867-102.275 133.645-102.261 230.96 0.005 27.349 31.261 49.506 80.348 65.317-1.305 4.469-2.018 9.189-2.016 14.079 0.005 27.691 22.46 50.144 50.158 50.148 25.52 0.003 46.568-19.055 49.72-43.711 36.602 4.661 76.459 7.101 117.172 7.11 153.862 0.030 295.365-34.617 295.356-92.858zM746.553 656.743c0.272-0.287 0.548-0.571 0.814-0.862-0.052 0.226-0.095 0.443-0.149 0.668l-0.665 0.194zM641.908 378.67c33.288 143.353 105.236 172.785 108.942 242.023l-88.497 31.881c6.221-88.851-67.315-116.183-66.213-231.519 1.258-131.767-37.713-213.862-85.164-248.099 79.812 8.078 112.657 127.009 130.932 205.714zM910.343 358.124c31.856 89.933 35.361 210.064 2.066 334.32-34.923 130.337-102.153 235.759-179.21 296.497v0h0.003c105.328-42.009 195.903-143.9 232.259-279.594 35.314-131.777 10.618-262.224-55.119-351.224zM870.654 684.637c26.136-97.551 0.765-196.010-58.557-264.753 30.241 68.356 37.081 158.431 12.433 250.409-25.851 96.482-80.248 173.268-144.516 216.303 89.158-28.109 163.728-101.516 190.639-201.959zM680.001 886.6v0.005l0.013-0.010zM110.697 692.445c-33.294-124.256-29.79-244.387 2.066-334.32-65.735 88.999-90.431 219.447-55.119 351.224 36.358 135.694 126.931 237.585 232.259 279.594h0.005c-77.057-60.738-144.287-166.16-179.212-296.497zM198.577 670.292c-24.648-91.978-17.807-182.053 12.433-250.409-59.322 68.743-84.693 167.203-58.557 264.753 26.911 100.442 101.481 173.849 190.639 201.959-64.268-43.035-118.665-119.821-144.516-216.303zM343.107 886.605v-0.005l-0.013-0.005z" - ], - "isMulticolor": false, - "tags": [ - "ringing-bell" - ], - "defaultCode": 60035, - "grid": 0, - "attrs": [] - }, - { - "id": 388, - "paths": [ - "M668.294 86.616c-40.16-52.531-96.45-63.64-168.856 8.767-72.524-72.524-128.84-61.38-168.987-8.77-112.393-2.24-194.867 131.060-193.985 321.987l126.069-119.623c-4.607 35.058-6.912 70.825-6.912 105.023 0 9.505 0.239 18.926 0.71 28.251-44.71 2.668-76.184 44.854-76.942 113.373-1.041 93.982 56.086 201.893 127.599 241.029 16.162 8.845 31.67 13.406 46.015 14.104 4.038 50.111 10.474 114.361-8.108 154.25-22.421 48.136 54.546 53.836 62.78 8.329 25.513 42.948 90.702 3.204 54.878-31.273l0.003 0.002c-30.768-29.612-49.371-94.774-65.449-143.699 11.274-7.925 20.68-19.464 27.65-34.2 23.54 11.428 48.632 17.623 74.68 17.623s51.142-6.197 74.682-17.625c6.969 14.735 16.374 26.275 27.648 34.2-16.078 48.926-34.681 114.088-65.449 143.702h0.005c-35.823 34.477 29.365 74.221 54.878 31.273 8.234 45.507 85.201 39.807 62.78-8.329-18.581-39.889-12.146-104.139-8.108-154.251 14.344-0.698 29.855-5.259 46.017-14.104 71.511-39.136 128.64-147.047 127.599-241.029-0.758-68.523-32.233-110.707-76.945-113.373 0.469-9.325 0.71-18.746 0.71-28.251 0-34.208-2.314-69.979-6.931-105.041l126.087 119.639c0.885-191.004-81.656-324.332-194.116-321.984z" - ], - "isMulticolor": false, - "tags": [ - "roast-chicken" - ], - "defaultCode": 60036, - "grid": 0, - "attrs": [] - }, - { - "id": 389, - "paths": [ - "M981.207 461.537l-114.975-21.23c-7.074-13.639-19.090-24.761-34.676-30.399-1.964-0.71-3.941-1.311-5.923-1.817l-128.758-254.814c12.223-24.531 13.778-53.904 1.712-80.515-21.502-47.42-78.11-68.1-126.431-46.19l-480.493 195.993c-58.542 26.547-84.877 94.657-58.821 152.107 11.1 24.476 29.932 43.043 52.404 54.272l174.972 431.421 7.412 18.856c-33.876 31.371-55.089 76.222-55.089 126.036h343.496c0-94.858-76.894-171.75-171.748-171.75-0.311 0-0.62 0.010-0.93 0.012l-12.246-33.647 1.916 0.466-3.351-4.412-140.253-385.338-0.134-1.63 386.11-193.324 135.602 230.798c-0.197 0.504-0.406 1.001-0.591 1.512-1.067 2.952-1.893 5.93-2.504 8.917l-108.093 65.835 36.344 33.107 52.683 112.404 53.747 10.003-21.863-155.441 8.245-4.971c5.609 4.766 12.144 8.635 19.473 11.286 27.853 10.075 58.154-0.578 74.024-24.040l39.378 151.166 46.974-27.979 9.416-110.133 4.433 0.797 18.537-57.357zM123.74 251.999c41.401-6.849 80.513 21.157 87.362 62.564 6.849 41.398-21.158 80.517-62.559 87.366s-80.515-21.167-87.362-62.564c-6.849-41.398 21.158-80.517 62.559-87.366zM555.756 121.129c-5.118-30.935 15.811-60.167 46.748-65.285 24.947-4.128 48.771 8.686 59.749 30.025 0.635 1.233 1.221 2.496 1.767 3.782 0.052 0.122 0.1 0.244 0.15 0.366 0.518 1.245 0.999 2.509 1.432 3.802 0.013 0.037 0.027 0.074 0.040 0.112 0.419 1.261 0.785 2.551 1.118 3.854 0.072 0.281 0.14 0.565 0.207 0.847 0.311 1.301 0.595 2.616 0.815 3.957 0 0.002 0.002 0.005 0.002 0.007 0.961 5.8 1.004 11.541 0.237 17.074-3.319 23.975-21.85 44.054-46.985 48.212-0.912 0.15-1.822 0.276-2.733 0.381-0.291 0.033-0.581 0.055-0.872 0.085-0.618 0.062-1.234 0.122-1.849 0.164-0.346 0.023-0.69 0.038-1.034 0.055-0.561 0.028-1.123 0.052-1.68 0.063-0.359 0.007-0.717 0.010-1.074 0.010-0.546 0-1.092-0.007-1.635-0.022-0.356-0.010-0.713-0.020-1.067-0.037-0.551-0.025-1.099-0.062-1.647-0.104-0.339-0.025-0.678-0.048-1.016-0.080-0.593-0.055-1.181-0.127-1.769-0.2-0.286-0.037-0.573-0.065-0.857-0.105-0.854-0.12-1.702-0.257-2.546-0.418-0.023-0.005-0.047-0.008-0.070-0.013-0.847-0.16-1.686-0.344-2.521-0.541-0.287-0.068-0.57-0.147-0.855-0.221-0.556-0.142-1.111-0.286-1.662-0.443-0.332-0.095-0.66-0.199-0.991-0.301-0.499-0.154-0.999-0.311-1.493-0.478-0.339-0.115-0.677-0.234-1.014-0.356-0.483-0.174-0.962-0.352-1.438-0.538-0.334-0.13-0.667-0.261-0.997-0.398-0.479-0.197-0.956-0.404-1.43-0.615-0.314-0.139-0.628-0.276-0.94-0.421-0.515-0.239-1.022-0.491-1.528-0.747-0.259-0.13-0.521-0.256-0.778-0.389-0.748-0.391-1.488-0.795-2.218-1.218-0.010-0.007-0.022-0.012-0.032-0.018v0c-14.147-8.212-24.653-22.448-27.531-39.849z" - ], - "isMulticolor": false, - "tags": [ - "robot-arm" - ], - "defaultCode": 60037, - "grid": 0, - "attrs": [] - }, - { - "id": 390, - "paths": [ - "M624.313 379.207c-51.183-62.325 21.412-207.844 47.279-267.441h-39.463l26.039-70.414h-294.376l30.027 70.414h-40.225c31.395 86.024 106.773 186.31 49.246 267.441-59.709 84.215-200.582 156.938-200.582 289.73 0 171.621 139.003 312.016 310.623 312.016s312.016-140.4 312.016-312.016c0-132.507-134.932-209.788-200.584-289.73zM512.967 929.855c-139.316 0-252.624-114.534-252.624-253.847 0-51.138 26.636-90.921 58.862-126.311h391.198c31.062 35.558 56.41 75.89 56.41 126.311 0.002 139.312-114.531 253.847-253.847 253.847z" - ], - "isMulticolor": false, - "tags": [ - "round-bottom-flask" - ], - "defaultCode": 60038, - "grid": 0, - "attrs": [] - }, - { - "id": 391, - "paths": [ - "M512.413 33.026c-264.47 0.060-478.817 214.503-478.758 478.974 0 0.072 0 0.144 0 0.216 0.060 264.471 214.505 478.819 478.974 478.758 264.471-0.060 478.819-214.505 478.758-478.974 0-0.072 0-0.144 0-0.216-0.059-264.471-214.503-478.819-478.974-478.758zM492.614 68.899l22.285-12.869 22.285 12.869v25.734l-22.285 12.869-22.285-12.869v-25.734zM114.153 282.534l22.285-12.869 22.285 12.869v25.734l-22.285 12.869-22.285-12.869v-25.734zM159.597 742.664l-22.285 12.869-22.285-12.869v-25.734l22.285-12.869 22.285 12.869v25.734zM533.959 955.429l-22.285 12.869-22.285-12.869v-25.734l22.285-12.869 22.285 12.869v25.734zM512.597 895.162c-211.576 0.038-383.127-171.446-383.165-383.025 0-0.047 0-0.095 0-0.142-0.038-211.575 171.446-383.125 383.025-383.163 211.576-0.038 383.127 171.446 383.165 383.025 0 0.047 0 0.094 0 0.142 0.038 211.576-171.446 383.125-383.025 383.163zM908.321 740.891l-22.285 12.869-22.285-12.869v-25.734l22.285-12.869 22.285 12.869v25.734zM909.197 308.268l-22.285 12.869-22.285-12.869v-25.734l22.285-12.869 22.285 12.869v25.734zM697.469 234.228c-46.030-30.715-100.121-50.295-158.431-54.879v665.326c58.313-4.585 112.401-24.168 158.431-54.881v-555.565zM332.191 792.829c47.372 30.489 102.956 49.318 162.701 52.428v-666.493c-59.747 3.11-115.331 21.939-162.701 52.428v561.637zM288.045 265.106c-67.085 61.043-109.19 149.059-109.171 246.906 0 0.042 0 0.082 0 0.124 0.018 97.802 42.116 185.766 109.171 246.781v-493.811zM741.615 269.402v485.217c64.39-60.841 104.573-147.029 104.557-242.608 0-0.042 0-0.082 0-0.124-0.018-95.535-40.195-181.675-104.557-242.486z" - ], - "isMulticolor": false, - "tags": [ - "round-shield" - ], - "defaultCode": 60039, - "grid": 0, - "attrs": [] - }, - { - "id": 392, - "paths": [ - "M306.092 842.196c0-69.146-56.054-125.2-125.2-125.2s-125.2 56.054-125.2 125.2c0 69.146 56.054 125.2 125.2 125.2s125.2-56.054 125.2-125.2zM660.827 967.398h-177.367c0-236.25-191.518-427.77-427.77-427.77v-177.367c334.208 0 605.137 270.929 605.137 605.137v0zM786.028 967.396c0-403.354-326.983-730.338-730.338-730.338v-182.584c504.192 0 912.922 408.73 912.922 912.922h-182.584z" - ], - "isMulticolor": false, - "tags": [ - "rss" - ], - "defaultCode": 60040, - "grid": 0, - "attrs": [] - }, - { - "id": 393, - "paths": [ - "M393.323 756.505l-2.205 1.133-203.011-395.259 1.752-0.9 93.533-326.861-231.010 234.788 159.826 628.873 436.282 103.671 118.368-109.127zM206.945 362.493l194.821 379.311 378.912 138.28 0.641-0.591 222.789-418.896-145.786-271.103-553.568-168.81-97.81 341.809zM463.331 506.486c9.704-16.808 37.071-19.177 61.126-5.289s35.686 38.773 25.983 55.582c-9.704 16.808-37.074 19.175-61.126 5.289s-35.686-38.773-25.983-55.582zM812.513 501.94c13.34-64.652 12.605-128.775-17.68-191.76 77.289 34.464 106.8 133.503 17.68 191.76zM780.53 473.806v0.005c-56.205-135.773-185.149-265.495-330.658-230.995-125.823 29.831-10.359 160.534 131.419 195.063 156.587 38.132 336.958 166.274 217.606 292.493-110.154 116.494-317.774 4.059-300.941-135.235 35.651 65.172 163.274 170.906 240.996 86.731 108.94-117.975-155.214-186.781-244.145-225.4-91.54-39.744-277.352-171.731-161.901-265.764 171.337-139.543 482.697 59.825 447.623 283.102zM510.707 382.061c-115.311-84.681-60.784-130.255 50.956-109.69-50.62 22.717-60.493 62.212-50.956 109.69z" - ], - "isMulticolor": false, - "tags": [ - "rune-stone" - ], - "defaultCode": 60041, - "grid": 0, - "attrs": [] - }, - { - "id": 394, - "paths": [ - "M534.994 917.738l-159.766-159.896-200.303 199.914-114.847-114.847 200.173-200.173c-120.743-120.924-154.049-154.402-159.393-159.896l114.847-114.857 159.644 159.645 255.639-255.639c-275.286-68.803-213.471-53.557-223.095-56.098l39.293-157.596 406.966 101.458 99.891 406.585-158.129 39.423-53.435-214.838-252.011 251.802 159.776 159.776-115.249 115.236z" - ], - "isMulticolor": false, - "tags": [ - "sagittarius" - ], - "defaultCode": 60042, - "grid": 0, - "attrs": [] - }, - { - "id": 395, - "paths": [ - "M808.698 65.66l-633.014 220.598 37.799 668.061 633.012-220.598-37.798-668.061zM771.501 89.693c-128.803 114.583-449.559 284.909-587.435 197.138l587.435-197.138zM183.361 299.227c132.081 64.975 100.843 369.863 38.484 618.132l-38.484-618.132zM247.885 931.356l92.653-149.866 236.753-80.099c-73.252 79.352-218.718 175.38-329.406 229.966zM335.551 771.997l-21.552-393.478 372.564-130.588 21.552 393.478-372.564 130.588zM710.676 499.313l-16.479-249.268 103.123-142.872c-8.142 123.090-41.289 294.152-86.644 392.14zM570.281 563.733c-42.534-3.015-72.644-44.394-67.25-92.419s44.249-84.514 86.783-81.499c7.165 0.508 13.963 2.127 20.313 4.661-3.269-31.909-11.334-63.425-24.312-92.558h-0.003l-259.090 87.857 17.632 273.187c114.793 25.879 193.898-22.977 234.852-99.193-2.95 0.172-5.927 0.177-8.924-0.037z" - ], - "isMulticolor": false, - "tags": [ - "sapphire" - ], - "defaultCode": 60043, - "grid": 0, - "attrs": [] - }, - { - "id": 396, - "paths": [ - "M729.923 746.175l-4.029-6.029 35.424-22.518-94.495-148.664-38.842 24.69-16.67-24.94c26.148-23.265 43.897-55.757 48.141-92.372l129.66 188.835 199.817-60.307-354.87-516.823-199.817 60.307 116.086 169.065c-11.608-2.962-23.769-4.539-36.299-4.539-61.285 0-113.764 37.656-135.591 91.091l-131.030-190.832-199.819 60.307 354.87 516.824 199.817-60.307-85.338-124.283c28.418-0.555 54.848-9.206 77.087-23.742l15.621 23.37-32.833 20.871 94.495 148.664 36.253-23.044 3.844 5.75c-32.397 23.545-55.052 60.85-62.083 103.254l192.946-120.722c-41.588-14.333-80.428-10.232-112.346 6.094zM825.292 851.798c0 20.412-16.547 36.959-36.959 36.959s-36.959-16.547-36.959-36.959c0-20.412 16.547-36.959 36.959-36.959s36.959 16.547 36.959 36.959z" - ], - "isMulticolor": false, - "tags": [ - "sattelite" - ], - "defaultCode": 60044, - "grid": 0, - "attrs": [] - }, - { - "id": 397, - "paths": [ - "M302.94 99.381h96.971c8.511 0 15.41 8.895 15.41 19.87v139.967c0 10.973-6.899 19.87-15.41 19.87h-96.971c-8.511 0-15.41-8.895-15.41-19.87v-139.967c0-10.975 6.899-19.87 15.41-19.87zM702.852 464.784l255.582 255.582h-127.791v255.582h-255.582v-255.582h-127.791l255.582-255.582zM557.52 792.576h-329.892c-8.822 0-15.975-7.151-15.975-15.975v-367.399c0-8.822 7.151-15.975 15.975-15.975h567.074c8.822 0 15.975 7.151 15.975 15.975v140.854l99.837 99.837v-424.392c0-8.845-134.916-143.766-143.766-143.766h-151.717c5.399 2.198 9.169 7.151 9.169 12.919v197.797c0 7.808-6.899 14.137-15.41 14.137h-339.016c-8.511 0-15.41-6.329-15.41-14.137v-197.797c0-5.768 3.77-10.721 9.169-12.919h-135.743c-8.85 0-15.975 7.125-15.975 15.975v766.747c0 8.85 7.125 15.975 15.975 15.975h429.729v-87.857zM848.183 732.895v147.536h46.356c8.85 0 15.975-7.125 15.975-15.975v-131.563l-62.33 0.002z" - ], - "isMulticolor": false, - "tags": [ - "save" - ], - "defaultCode": 60045, - "grid": 0, - "attrs": [] - }, - { - "id": 398, - "paths": [ - "M743.518 931.892c-26.581 0-49.957-2.8-70.534-7.97-28.254-10.023-53.178-21.883-83.614-63.698-2.885-3.934-5.616-8.055-8.159-12.255l-1.717-2.868c-28.229-48.566-34.704-112.598-37.968-172.475l-0.429-15.88v-460.493c0-14.832-1.889-30.11-8.331-43.885-4.981-8.391-11.568-9.017-16.686-6.466-6.587 3.281-14.78 13.621-16.093 34.343 1.889 145.164-3.177 351.468-5.265 492.38h-155.556v-476.364c0-14.832-1.873-30.11-8.322-43.885-5.162-8.683-12.066-9.173-17.58-5.985-7.059 4.088-15.382 16.205-15.382 39.548 1.219 158.347-2.997 329.087-5.359 486.687h-155.546v-476.365c0-42.674-17.674-79.327-72.629-79.543l-16.815-0.068c34.783-39.617 69.383-56.639 125.317-56.639 36.035 0 69.719 14.274 93 38.57l3.779-3.418 4.423-3.805c33.485-25.815 71.874-31.338 100.97-31.338 35.984 0 69.607 14.231 92.888 38.449l3.642-3.298 4.423-3.805c33.511-25.815 71.874-31.338 100.995-31.338 65.965 0 123.643 47.74 124.905 116.634 0.326 17.657 0.498 38.012 0.533 60.246 0 125.103-5.564 474.595-1.425 499.595l2.001 11.070c1.039 5.143 2.138 10.040 3.341 14.737 19.53 75.283 47.75 92.563 98.986 91.447 22.879-2.061 43.259-10.546 59.111-19.573l-32.952-59.327 145.448 4.732-57.944 154.895c-0.438-1.736-12.41-23.841-27.387-51.090-13.529 17.735-50.981 48.497-148.069 48.497v0z" - ], - "isMulticolor": false, - "tags": [ - "scorpio" - ], - "defaultCode": 60046, - "grid": 0, - "attrs": [] - }, - { - "id": 399, - "paths": [ - "M854.173 764.089h-141.775l-1.355-2.419c0.501-86.681 34.198-175.368 98.214-245.312 47.831-52.261 83.95-121.041 102.458-189.368l-82.338-49.795 76.414-13.791-86.599-51.529 104.084-17.674c-10.445-78.138-57.588-136.002-154.489-136.002-94.565 18.374-363.959 23.983-503.322 5.922-17.664-5.751-35.459-9.136-52.817-9.731-0.129-0.035-0.267-0.068-0.394-0.102 0.074 0.032 0.145 0.065 0.219 0.097-45.31-1.502-87.613 16.030-116.708 60.236-40.414 61.408 2.616 166.812 97.48 166.812 5.359 0 10.253-0.289 14.727-0.832v0.733h118.467c-17.921 72.21-62.36 152.533-113.828 233.474-4.318 6.79-8.509 13.721-12.575 20.767l69.657 71.359-112.351 18.818c-65.349 171.651-54.745 363.552 96.403 363.552v-0.002l15.634 0.11v0.234h171.175v-0.311h451.103c135.99 0.002 154.656-225.247-37.485-225.247zM452.277 872.408c-0.003-0.935-0.030-1.888-0.055-2.836 0.025 0.95 0.052 1.903 0.055 2.836zM447.891 836.62c0.027 0.119 0.047 0.232 0.074 0.351-0.027-0.117-0.047-0.231-0.074-0.347-5.374-23.696-20.779-43.454-40.897-56.175h0.007c20.114 12.721 35.516 32.477 40.89 56.171zM452.105 866.267c-0.047-0.952-0.107-1.914-0.174-2.88 0.067 0.966 0.127 1.928 0.174 2.88zM451.646 859.881c-0.089-0.952-0.18-1.908-0.287-2.875 0.107 0.967 0.199 1.923 0.287 2.875zM450.881 853.199c-0.125-0.924-0.242-1.844-0.384-2.781 0.144 0.937 0.261 1.858 0.384 2.781zM449.768 846.056c-0.144-0.814-0.269-1.615-0.426-2.437 0.157 0.822 0.282 1.624 0.426 2.437zM236.579 269.87c28.031-23.871-1.146-80.303-34.722-127.243h115.747c19.346 37.343 21.335 80.462 11.471 127.243h-92.496zM325.781 792.123c51.786-17.213 110.468 15.682 122.11 67.013 1.991 8.782 3.269 17.061 3.911 24.882 0.075-0.817 0.112-1.662 0.17-2.491-1.291 18.519-6.792 33.936-15.602 46.701h-1.034c-0.984 1.412-2.003 2.781-3.062 4.103l1.614-0.707c-14.802 19.359-37.539 32.29-64.57 40.636h-28.104l1.368-0.6c-29.614-0.008-63.612-2.798-63.612-2.798 43.925-0.703 62.862-19.294 70.065-40.598-31.298 11.376-64.654-9.072-75.146-39.264-14.161-40.748 12.502-83.784 51.893-96.877zM452.239 875.575c-0.018 0.919-0.027 1.846-0.065 2.75 0.038-0.905 0.045-1.831 0.065-2.75zM434.019 931.447c0.795-1.044 1.577-2.1 2.327-3.182-0.748 1.084-1.533 2.138-2.327 3.182z" - ], - "isMulticolor": false, - "tags": [ - "scroll-unfurled" - ], - "defaultCode": 60047, - "grid": 0, - "attrs": [] - }, - { - "id": 400, - "paths": [ - "M971.856 255.549c-106.030-267.787-458.603-225.21-790.964-139.256v0.003c-6.929 68.047 4.437 137.607 28.005 208.179 152.852-172.846 577.128-235.005 762.959-68.927zM131.085 122.663v0.012l-75.348 19.114c11.266 155.812 56.968 264.361 120.663 348.381-33.024 20.652-81.26 39.251-137.316 53.559 11.311 13.172 28.41 32.279 60.915 36.973 49.6-8.646 79.682-29.91 107.31-53.088 152.229 170.049 379.862 237.531 505.478 447.735l98.668-0.261c-230.445-425.359-649.712-246.677-680.37-852.424z" - ], - "isMulticolor": false, - "tags": [ - "scythe" - ], - "defaultCode": 60048, - "grid": 0, - "attrs": [] - }, - { - "id": 401, - "paths": [ - "M937.738 425.191l41.75-121.123c-57.795-24.995-104.269-53.093-141.982-87.575 2.537-56.397-21.278-112.799-67.698-169.202 1.508 27.533 1.201 55.069-3.181 82.605-65.668-83.046-172.114-114.060-265.403-63.199 69.853-5.070 131.239 16.329 148.4 67.714-257.28-33.603-519.525 226.381-63.241 489.622 123.809 71.434 38.683 255.173-208.295 149.948-329.165-140.24-305.256-400.91-186.699-537.284 14.63 24.623 26.789 52.298 37.814 81.374 38.070-97.034 112.58-137.021 186.872-177.334-104.224-49.078-203.706-29.491-301.337 16.808 20.706 11.478 38.149 26.983 53.233 45.402-226.725 135.627-155.304 559.834 142.557 731.806 379.084 218.867 828.249-264.047 415.665-421.439-296.721-113.19-225.886-273.251-84.13-253.265l-11.406 79.576 307.078 85.565z" - ], - "isMulticolor": false, - "tags": [ - "sea-serpent" - ], - "defaultCode": 60049, - "grid": 0, - "attrs": [] - }, - { - "id": 402, - "paths": [ - "M745.572 737.111c161.897-72.285 273.951-246.169 212.062-477.137-52.296-195.171-162.808-210.677-269.818-106.67-47.49 46.159-142.161 43.644-156.787 112.152 226.613-90.939 275.63 64.861 100.935 93.415-235.909 38.556-346.981 330.463-589.65 336.437h-0.005c33.079 40.987 150.889 82.167 293.136 95.942l93.121 161.119c-16.802 8.671-32.223 20.238-45.263 35.016h458.4c-33.927-44.296-111.070-66.087-179.85-50.407l-87.399-151.22c59.447-9.146 117.708-24.8 171.12-48.648zM735.68 195.312c0-14.75 11.959-26.708 26.708-26.708s26.708 11.957 26.708 26.708c0.002 14.75-11.957 26.708-26.708 26.708s-26.708-11.957-26.708-26.708zM630.936 946.911c-6.069 2.573-11.994 5.491-17.735 8.768-42.316-23.794-102.151-31.281-154.913-15.313l-84.449-146.116c53.935 3.209 110.467 2.352 166.575-3.964l90.523 156.625z" - ], - "isMulticolor": false, - "tags": [ - "seagull" - ], - "defaultCode": 60050, - "grid": 0, - "attrs": [] - }, - { - "id": 403, - "paths": [ - "M515.067 40.362c-217.927 138.442-375.656 520.013-375.656 965.949h749.384c0-445.936-155.803-827.507-373.728-965.949zM301.779 526.451l36.662 30.653-12.56-70.334c14.719-21.923 30.393-41.338 46.872-57.944l38.424 54.665 7.885-92.444c18.788-11.919 38.321-20.38 58.42-25.055l36.617 72.388 36.618-72.393c19.967 4.644 39.375 13.028 58.047 24.822l8.269 96.943 40.173-57.154c15.841 16.209 30.927 35.025 45.124 56.171l-12.56 70.335 36.664-30.655c48.743 88.507 84.077 206.99 98.999 341.263-20.031-64.297-53.074-120.777-95.204-164.665l8.015-71.506-51.195 33.358c-12.181-9.049-24.877-17.171-38.020-24.285l-6.65-81.788-52.498 57.623c-14.598-4.144-29.564-7.115-44.829-8.83l-30.966-66.378-30.967 66.381c-16.264 1.831-32.188 5.083-47.689 9.662l-49.6-54.442-6.308 77.587c-13.265 7.158-26.073 15.34-38.359 24.467l-51.193-33.358 8.015 71.503c-42.124 43.882-75.165 100.349-95.199 164.633 14.921-134.253 50.255-252.723 98.992-341.223z" - ], - "isMulticolor": false, - "tags": [ - "shark" - ], - "defaultCode": 60051, - "grid": 0, - "attrs": [] - }, - { - "id": 404, - "paths": [ - "M977.422 224.069c-10.564-17.495-41.6-25.294-51.39-33.443-30.606-25.473-98.618-46.264-156.563 13.299l-0.007-0.008c-7.477 6.55-13.912 11.336-19.64 15.444-20.796-22.914-48.793-25.625-75.221-25.719-30.13-0.099-70.265 17.251-80.709 45.348-6.126-30.466-50.057-44.657-80.911-45.003-31.427-0.351-71.623 22.632-83.402 43.969-10.579-34.38-53.393-50.482-83.47-48.793-31.482 1.769-73.36 24.569-84.242 60.718-59.681-32.531-117.145-15.25-155.965 19.967-77.971 70.741-96.482 187.295-70.304 307.918 15.215 70.086 42.171 115.931 93.012 138.354l0.040-0.022c11.932 5.26 22.147 10.791 32.454 14.408l-34.41 164c12.041 29.273 39.305 28.094 75.813 8.424l67.135-187.574c9.924 13.805 19.805 24.437 29.728 32.568l4.315 134.084c37.191 38.337 56.626 15.517 75.858-7.987l-9.791-102.504c5.955-0.117 11.987-0.571 18.116-1.27 39.373-4.48 81.746-31.47 101.718-86.079 22.595 52.967 54.755 61.919 90.292 63.273 19.593 0.752 39.721 0.887 55.804-14.745l26.861 161.612c34.863 27.453 56.739 12.604 74.946-14.199l-17.411-144.872c2.96-0.566 5.934-1.181 8.92-1.774 8.678-1.722 16.939-3.436 24.686-6.207l39.979 149.522c31.001 7.176 59.227 8.185 72.063-25.009l-62.12-184.794c33.338 23.163 73.056-1.674 94.395-29.023 34.864-44.7 34.392-111.472 28.567-174.446 2.162-1.482 4.076-3.149 5.653-5.033 15.744-18.227 24.994-82.927 25.998-118.726 0.508 20.761 11.099 47.326 34.104 44.642 41.030-10.123 12.844-114.376-14.901-160.32zM920.429 406.115c-1.759 4.477-4.387 8.703-7.599 12.527-0.144 0.17-0.287 0.339-0.433 0.508-0.388 0.449-0.778 0.895-1.181 1.333-0.147 0.16-0.301 0.314-0.451 0.473-0.665 0.703-1.348 1.39-2.050 2.060-0.307 0.294-0.615 0.588-0.93 0.874-0.326 0.297-0.655 0.588-0.986 0.877-0.394 0.344-0.795 0.68-1.199 1.012-0.271 0.224-0.538 0.451-0.812 0.67-0.656 0.521-1.325 1.029-2.003 1.52-0.242 0.177-0.489 0.346-0.735 0.518-0.515 0.361-1.032 0.715-1.555 1.059-0.252 0.165-0.504 0.331-0.758 0.493-0.69 0.438-1.385 0.862-2.088 1.268-0.055 0.032-0.11 0.067-0.167 0.1l-1.898-46.063c0.747-0.418 1.497-0.795 2.245-1.153 0.149-0.070 0.297-0.142 0.444-0.21 0.735-0.339 1.468-0.653 2.2-0.934 0.095-0.037 0.189-0.067 0.284-0.102 0.638-0.237 1.271-0.449 1.903-0.641 0.187-0.057 0.374-0.117 0.56-0.169 0.663-0.189 1.32-0.352 1.969-0.491 0.229-0.048 0.453-0.085 0.68-0.127 0.453-0.084 0.9-0.152 1.343-0.21 0.262-0.033 0.528-0.074 0.787-0.099 0.546-0.053 1.081-0.082 1.61-0.095 0.329-0.007 0.651-0.002 0.974 0.007 0.262 0.007 0.518 0.022 0.775 0.038 0.621 0.042 1.226 0.114 1.812 0.219 0.15 0.027 0.304 0.048 0.453 0.079 0.369 0.077 0.73 0.167 1.082 0.269 0.102 0.030 0.199 0.065 0.297 0.095 0.665 0.21 1.298 0.466 1.894 0.772 0.077 0.038 0.155 0.075 0.231 0.115 0.331 0.179 0.651 0.369 0.959 0.578 0 0 0 0 0 0 2.932 1.995 4.773 5.367 4.801 10.287 0.027 4.31-0.879 8.524-2.459 12.545zM847.93 400.504c-1.331-15.061 13.075-18.582 25.503-12.766v-0.003l7.51 44.956c-11.982-7.335-30.812-7.28-33.014-32.187zM843.382 306.096c0.002 8.372-7.029 15.161-15.702 15.161s-15.702-6.789-15.702-15.161c0-8.374 7.031-15.161 15.702-15.161s15.702 6.789 15.702 15.161zM934.205 314.492c-8.673 0-15.702-6.789-15.702-15.161s7.031-15.161 15.702-15.161 15.702 6.789 15.702 15.161c0 8.372-7.029 15.161-15.702 15.161z" - ], - "isMulticolor": false, - "tags": [ - "sheep" - ], - "defaultCode": 60052, - "grid": 0, - "attrs": [] - }, - { - "id": 405, - "paths": [ - "M974.673 390.231c-9.435-35.207-45.621-56.099-80.828-46.665-22.458 6.019-39.074 22.927-45.728 43.519l-167.55-45.614-45.432-166.89c20.844-6.53 38.007-23.243 44.080-45.905 9.435-35.209-11.456-71.393-46.665-80.828s-71.393 11.456-80.828 46.665c-6.112 22.807 0.513 46.015 15.5 62.105l-122.606 121.632-168.115-44.329c4.626-21.222-1.293-44.278-17.792-60.777-25.774-25.774-67.557-25.774-93.331 0s-25.774 67.557 0 93.331c16.934 16.934 40.78 22.74 62.454 17.421l44.055 167.077-123.428 124.413c-16.088-14.964-39.278-21.576-62.066-15.469-35.207 9.435-56.099 45.619-46.665 80.828 9.435 35.207 45.621 56.099 80.828 46.665 23.435-6.281 40.514-24.419 46.541-46.227l168.008 45.739 45.908 168.641c-21.554 6.166-39.428 23.156-45.654 46.389-9.435 35.209 11.456 71.393 46.665 80.828 35.207 9.433 71.393-11.458 80.828-46.665 6.187-23.089-0.668-46.598-16.050-62.706l124.25-123.266 168.163 44.343c-5.588 21.841 0.154 45.983 17.253 63.080 25.775 25.774 67.557 25.774 93.331 0s25.775-67.556 0-93.329c-16.665-16.665-40.018-22.538-61.413-17.654l-44.605-169.164 121.48-122.449c16.11 15.407 39.639 22.279 62.745 16.087 35.209-9.435 56.101-45.619 46.666-80.828zM453.988 709.847c-110.836-29.698-176.609-143.622-146.913-254.453 21.324-79.581 86.074-135.931 161.927-150.386-49.052 22.668-88.056 66.136-103.135 122.411-26.955 100.598 32.745 204.002 133.346 230.956 77.276 20.706 156.199-9.725 200.863-70.541-38.944 95.543-143.828 149.412-246.087 122.013z" - ], - "isMulticolor": false, - "tags": [ - "sherif" - ], - "defaultCode": 60053, - "grid": 0, - "attrs": [] - }, - { - "id": 406, - "paths": [ - "M511.992 31.992c49.995 48.013 200.006 143.987 299.997 143.987 0 48.013 0 143.987 0 192 0 192-150.011 480-299.997 623.987-150.011-143.987-299.997-431.987-299.997-623.987 0-48.013 0-143.987 0-192 100.016 0.025 250.002-95.975 299.997-143.987v0z" - ], - "isMulticolor": false, - "tags": [ - "shield" - ], - "defaultCode": 60054, - "grid": 0, - "attrs": [] - }, - { - "id": 407, - "paths": [ - "M506.969 49.874c-251.969 0-456.228 204.26-456.228 456.228s204.259 456.228 456.228 456.228 456.228-204.26 456.228-456.228-204.259-456.228-456.228-456.228zM506.957 897.136c-217.649 0-394.085-176.439-394.085-394.085s176.437-394.085 394.085-394.085 394.085 176.437 394.085 394.085-176.437 394.085-394.085 394.085zM552.257 158.271h-90.618l-57.324 360.727-164.802 50.629v101.75h158.915l36.775 36.406h-38.98v83.22h221.445v-83.22h-38.974l36.775-36.406h158.915v-101.75l-164.804-50.627-57.324-360.729zM558.429 480.565h-102.966c0-198.935 102.966-198.674 102.966 0z" - ], - "isMulticolor": false, - "tags": [ - "ship-emblem" - ], - "defaultCode": 60055, - "grid": 0, - "attrs": [] - }, - { - "id": 408, - "paths": [ - "M871.263 669.358l-198.706-53.244c6.526-71.036-0.015-151.851-38.567-227.517-5.751-198.231 59.756-382.774 218.714-340.181 174.971 46.922 155.667 444.808 18.559 620.942v0zM858.18 753.157c-10.977 383.141-400.372 207.907-202.173-54.173l202.173 54.173zM161.858 669.384l198.706-53.244c-6.526-71.036 0.015-151.851 38.567-227.517 5.751-198.231-59.756-382.774-218.714-340.181-174.98 46.887-155.676 444.773-18.559 620.942v0zM174.979 753.173c10.986 383.176 400.372 207.907 202.173-54.173l-202.173 54.173z" - ], - "isMulticolor": false, - "tags": [ - "shoe-prints" - ], - "defaultCode": 60056, - "grid": 0, - "attrs": [] - }, - { - "id": 409, - "paths": [ - "M866.508 647.482c-21.070 59.805-48.975 122.9-171.173 7.811 97.004-89.88 174.117-174.69 175.879-298.21 3.508-245.899-279.39-287.898-383.145-86.477-67.664-132.395-193.853-151.161-282.008-92.723l-154.52-150.8h-33.852v79.852l131.279 128.1c-24.188 36.077-39.341 82.095-40.083 136.027l-0.003 0.005c-3.378 245.406 300.354 300.709 325.326 558.12 59.982-87.917 132.547-156.627 201.172-219.178 91.29 93.585 77.446 129.355-5.842 168.434 95.892 63.922 245.693 122.89 369.871 130.222 5.411-125.043-63.378-265.184-132.901-361.183z" - ], - "isMulticolor": false, - "tags": [ - "shot-through-the-heart" - ], - "defaultCode": 60057, - "grid": 0, - "attrs": [] - }, - { - "id": 410, - "paths": [ - "M271.993 91.987v599.999c0 60.001 0 60.001 60.001 60.001h359.995c60.001 0 60.001 0 60.001-60.001v-599.999c0-60.001 0-60.001-60.001-60.001h-359.995c-60.001 0-60.001 0-60.001 60.001zM391.995 151.988h240.004v419.996h-240.004v-419.996zM298.664 841.983h426.666c14.724 0 26.671 11.936 26.671 26.671v96.666c0 14.724-11.936 26.671-26.671 26.671h-426.666c-14.724 0-26.671-11.936-26.671-26.671v-96.666c0-14.735 11.947-26.671 26.671-26.671z" - ], - "isMulticolor": false, - "tags": [ - "shotgun-shell" - ], - "defaultCode": 60058, - "grid": 0, - "attrs": [] - }, - { - "id": 411, - "paths": [ - "M826.401 398.423h-0.003c-27.88 32.933-107.821 68.040-201.743 97.46-3.448-35.723-8.2-66.064-12.766-82.887-12.007-8.85-32.893-10.765-56.883-8.204l-101.775-373.703-106.115 0.005 109.251 401.941c-23.615 10.87-42.012 23.146-48.11 33.827 4.479 16.501 15.393 44.359 30.065 76.219-98.788 19.496-186.814 27.75-222.975 16.269 55.089 202.971 143.023 350.888 240.222 431.468h320.687c94.338-105.001 124.178-319.613 50.144-592.395z" - ], - "isMulticolor": false, - "tags": [ - "shovel" - ], - "defaultCode": 60059, - "grid": 0, - "attrs": [] - }, - { - "id": 412, - "paths": [ - "M647.619 262.963c-7.918 33.597-38.073 58.612-74.087 58.612-42.047 0-76.137-34.089-76.137-76.135 0-7.497 1.101-14.734 3.12-21.576l-251.234-152.903 6.79 293.492c32.521 8.666 56.485 38.311 56.485 73.561 0 42.047-34.089 76.135-76.137 76.135-6.846 0-13.474-0.917-19.785-2.613l-152.581 250.705 285.487-6.603c8.012-33.466 38.105-58.353 74.027-58.353 42.047 0 76.137 34.089 76.137 76.135 0 5.94-0.703 11.712-1.99 17.261l257.62 156.789-6.398-276.594c-36.174-5.902-63.792-37.283-63.792-75.125 0-42.047 34.089-76.135 76.137-76.135 6.091 0 12.007 0.737 17.685 2.086l161.597-265.515-292.946 6.775zM579.706 643.279c-74.034 42.744-168.698 17.376-211.44-56.657-42.746-74.037-17.38-168.698 56.654-211.44 74.034-42.744 168.694-17.38 211.44 56.657 42.744 74.035 17.38 168.696-56.654 211.44z" - ], - "isMulticolor": false, - "tags": [ - "shuriken" - ], - "defaultCode": 60060, - "grid": 0, - "attrs": [] - }, - { - "id": 413, - "paths": [ - "M227.677 707.156c-39.029 3.61-54.444 24.947-58.891 51.609l108.768 104.249 1.562 1.634 0.072-0.070 14.612 14.005c36.391-3.344 57.643-20.672 53.622-52.882l-119.745-118.545zM60.708 889.119c-33.418 53.906 29.365 122.172 102.046 89.146l102.017-99.614-89.599-93.807-114.464 104.274zM514.258 50.208c705.168 552.836 33.81 816.464-175.435 585.551l-84.040 76.559 87.027 91.113 4.24-4.141c434.971 390.488 1069.432-489.632 168.208-749.082z" - ], - "isMulticolor": false, - "tags": [ - "sickle" - ], - "defaultCode": 60061, - "grid": 0, - "attrs": [] - }, - { - "id": 414, - "paths": [ - "M857.962 797.283c0-199.052-2.691-207.121-2.691-207.121 442.608-126.524-459.922-167.023-546.835-155.472l-0.326 75.205-256.821-147.122 256.034-141.281 3.017 73.167c657.126-12.355 803.196 181.702 547.621 502.625v0z" - ], - "isMulticolor": false, - "tags": [ - "sideswipe" - ], - "defaultCode": 60062, - "grid": 0, - "attrs": [] - }, - { - "id": 415, - "paths": [ - "M511.982 58.893c-92.414 0-178.954 27.521-250.634 75.053l133.087 133.087c73.954-35.365 161.061-35.365 235.053 0l133.087-133.087c-71.64-47.496-158.139-75.053-250.592-75.053v0zM133.947 261.348c-47.534 71.68-75.053 158.18-75.053 250.596 0 92.414 27.521 178.954 75.053 250.634l133.087-133.087c-35.366-73.954-35.366-161.062 0-235.053l-133.087-133.090zM890.053 261.348l-133.087 133.087c35.366 73.954 35.366 161.099 0 235.053l133.087 133.087c47.534-71.68 75.055-158.18 75.055-250.634-0.038-92.372-27.559-178.912-75.055-250.592v0zM394.473 756.967l-133.087 133.087c71.68 47.496 158.181 75.053 250.634 75.053 92.414 0 178.954-27.521 250.596-75.053l-133.087-133.087c-73.994 35.366-161.103 35.366-235.057 0v0zM647.911 512.059c0 75.053-60.839 135.931-135.931 135.931-75.053 0-135.931-60.838-135.931-135.931 0-75.053 60.839-135.931 135.931-135.931s135.931 60.838 135.931 135.931z" - ], - "isMulticolor": false, - "tags": [ - "site" - ], - "defaultCode": 60063, - "grid": 0, - "attrs": [] - }, - { - "id": 416, - "paths": [ - "M511.992 32.013c-119.994 0-240.013 60.009-240.013 150.011 0 60.009 45.001 90.002 45.001 150.011 0 45.001-15.009 45.001-15.009 74.993 0 15.009 48.013 32 90.002 45.001v60.009h239.987v-60.009c0 0 90.579-27.959 90.002-45.001-0.929-27.959-15.009-29.992-15.009-74.993 0-29.992 45.653-91.432 45.001-150.011 0.050-90.027-119.969-150.011-239.962-150.011zM421.99 211.991c33.129 0 60.009 26.855 60.009 60.009s-26.855 60.009-60.009 60.009c-33.129 0-60.009-26.855-60.009-60.009s26.88-60.009 60.009-60.009zM601.993 211.991c33.129 0 60.009 26.855 60.009 60.009s-26.855 60.009-60.009 60.009c-33.129 0-60.009-26.855-60.009-60.009s26.88-60.009 60.009-60.009zM511.992 317.001c15.009 0 45.001 60.009 45.001 74.993 0 29.992 0 29.992-15.009 29.992h-60.009c-15.009 0-15.009 0-15.009-29.992 0.025-15.009 30.042-74.993 45.026-74.993zM272.004 571.997v90.002h480v-90.002h-480zM272.004 722.008v90.002h480v-90.002h-480zM211.995 871.994c-29.992 0-60.009 29.992-60.009 60.009v60.009h720.013v-60.009c0-29.992-29.992-60.009-60.009-60.009h-599.994z" - ], - "isMulticolor": false, - "tags": [ - "skull-trophy" - ], - "defaultCode": 60064, - "grid": 0, - "attrs": [] - }, - { - "id": 417, - "paths": [ - "M511.985 31.993c-240.009 0-479.993 119.992-479.993 299.993 0 119.992 90 180.001 90 299.993 0 90-29.992 90-29.992 150.009 0 29.992 96.024 63.999 180.001 90v119.992h480.018v-119.992c0 0 181.13-55.918 180.001-90-1.857-55.893-29.992-60.009-29.992-150.009 0-60.009 91.28-182.837 90-299.993-0.050-180.001-240.034-299.993-480.043-299.993zM331.984 391.969c66.283 0 119.992 53.734 119.992 119.992 0 66.283-53.734 119.992-119.992 119.992s-119.992-53.734-119.992-119.992c0-66.258 53.734-119.992 119.992-119.992zM691.985 391.969c66.283 0 119.992 53.734 119.992 119.992 0 66.283-53.734 119.992-119.992 119.992s-119.992-53.734-119.992-119.992c0-66.258 53.734-119.992 119.992-119.992zM511.985 601.986c29.992 0 90 119.992 90 150.009 0 60.009 0 60.009-29.992 60.009h-119.992c-29.992 0-29.992 0-29.992-60.009-0.025-30.017 59.983-150.009 89.975-150.009z" - ], - "isMulticolor": false, - "tags": [ - "skull" - ], - "defaultCode": 60065, - "grid": 0, - "attrs": [] - }, - { - "id": 418, - "paths": [ - "M943.032 698.475c107.877-186.842 17.779-440.824-199.782-566.432-217.561-125.606-481.387-75.966-589.261 110.881-10.429 18.061-17.63 36.777-24.439 55.909 114.371-157.083 308.486-217.776 453.642-133.97 157.387 90.864 196.992 315.99 88.664 503.623-51.624 89.417-127.506 153.799-209.958 187.138 190.451 58.423 390.759-0.613 481.135-157.148v0zM652.816 271.898c-94.522-141.87-299.481-146.327-456.729-10.856-157.248 135.475-208.108 360.314-113.58 502.188 9.137 13.715 19.768 25.057 30.817 36.213-71.812-138.12-51.132-310.798 53.788-401.186 113.758-98.003 282.425-62.020 377.343 80.453 45.236 67.895 65.302 147.586 61.749 223.2 101.972-134.045 125.807-311.154 46.618-430.013l-0.005 0.002zM167.821 436.662c-97.537 96.941-95.554 283.915 2.284 411.207s256.226 151.898 353.761 54.959c-94.063 59.192-169.486 52.508-257.141-41.767-78.769-84.721-48.788-245.202 49.159-342.551 46.676-46.392 102.091-71.505 155.1-75.267-83.178-85.319-221.45-87.793-303.162-6.582z" - ], - "isMulticolor": false, - "tags": [ - "slash-ring" - ], - "defaultCode": 60066, - "grid": 0, - "attrs": [] - }, - { - "id": 419, - "paths": [ - "M490.103 31.026c68.576 97.631-47.072 641.084-180.607 273.438-95.905 345.759-231.583 360.575-231.744 200.64-143.199 158.623 87.647 441.533 174.751 487.869h104.256c-91.839-80.031-153.567-155.999-164.35-271.934 94.623 18.849 143.711 41.92 162.527-124.095 121.471 173.183 201.887-98.751 274.367-214.239-3.296 80.64-6.688 186.91 45.695 259.775 17.472 24.288 66.463 32.224 109.471 31.615-19.839 32.159-89.695 138.752-34.016 178.399 55.679 39.648 66.143-0.768 51.712 32.351-26.527 41.76-45.983 78.751-118.143 108.127h112.128c118.879-37.441 223.613-183.328 189.214-271.071-44.032 37.312-87.552 61.791-122.591 59.072 98.239-144.16 75.679-291.807 29.504-442.686-40.448 144.767-66.975 164.991-109.151 199.039 58.207-137.311-170.879-428.894-293.021-506.303v0z" - ], - "isMulticolor": false, - "tags": [ - "small-fire" - ], - "defaultCode": 60067, - "grid": 0, - "attrs": [] - }, - { - "id": 420, - "paths": [ - "M39.067 896.809l0.003-0.007h-0.005zM959.261 196.548c-20.63 0-37.357 16.726-37.357 37.357 0 4.18 0.697 8.192 1.963 11.944-53.383 20.869-42.691 122.058-35.080 217.165-29.93 26.868-64.15 23.432-94.439-16.317-3.772-99.453-29.076-229.276 18.542-267.936-0.428 2.26-0.66 4.589-0.66 6.973 0 20.63 16.725 37.357 37.357 37.357s37.357-16.726 37.357-37.357c0-20.63-16.725-37.357-37.357-37.357-14.314 0-26.743 8.055-33.015 19.877-73.922 11.695-50.99 145.010-44.039 254.766-3.528 57.857-17.231 110.209-37.911 154.753-16.030-118.667-85.684-226.155-150.177-280.259-124.871-104.769-300.047-94.729-421.754 13.735s-127.235 307.79-19.443 428.471c16.995 16.927 36.502 30.124 57.593 39.667-77.543 31.961-137.002 74.66-161.77 117.416h642.294c195.616 0 268.161-194.475 229.436-415.36-6.607-89.594-19.964-189.804 18.131-225.739 6.782 9.42 17.836 15.559 30.329 15.559 20.632 0 37.357-16.726 37.357-37.357s-16.726-37.357-37.357-37.357z" - ], - "isMulticolor": false, - "tags": [ - "snail" - ], - "defaultCode": 60068, - "grid": 0, - "attrs": [] - }, - { - "id": 421, - "paths": [ - "M705.691 389.793c-138.332-21.601-238.323-46.718-286.869-123.61-35.579-56.365 65.259-171.446 195.039-119.172 18.764 31.443 27.645 71.034 30.633 130.693l166.74 78.978 6.435-10.861 0.117 0.2c17.042-8.964 29.838-29.253 41.727-51.965-21.788 9.328-46.058 8.935-69.176 2.947-5.581-3.633-11.010-7.616-16.205-11.967-46.708-39.106-57.386-91.838-23.843-117.777 24.832-19.204 66.929-18.323 106.073-0.715 17.171 36.081 19.337 70.397 22.302 104.809 20.428-27.975 31.37-58.744 37.083-91.062l21.429-36.167c-110.505-84.553-264.214-111.639-385.415-101.837h-0.005c0.002 0 0.003 0 0.005 0-0.002 0-0.003 0-0.005 0v0c-400.813 0.005-368.804 394.325 0.008 451.293 368.815 56.968 274.509 381.142 19.77 381.142-168.050 0-281.219-39.699-361.449-128.097-83.988-92.529-24.918-198.825 88.447-103.668 113.866 95.578 200.268 166.83 343.022 55.861-178.786 59.3-248.839-85.278-376.005-163.441-120.58-74.112-275.616 77.326-171.713 242.065 86.662 137.408 304.948 215.242 485.912 215.242 440.569 0 517.761-541.713 125.942-602.89z" - ], - "isMulticolor": false, - "tags": [ - "snake" - ], - "defaultCode": 60069, - "grid": 0, - "attrs": [] - }, - { - "id": 422, - "paths": [ - "M797.030 211.991v-119.97c0-29.992 0-60.009-29.992-60.009l-60.035 0.002c-29.992 0-29.992 29.992-29.992 60.009v119.967c-16.59 0-30.017 13.429-29.992 29.992v60.009c0 16.565 13.427 29.992 29.992 29.992v0 420.042c0 66.284-53.735 119.994-119.994 119.994s-119.994-53.735-119.994-119.994c0 0 29.992-29.992 29.992-60.009s90.002-60.009 90.002-90.002c0-29.992-29.992-29.992-29.992-29.992s-90.002 90.002-150.011 90.002-150.011-90.002-150.011-90.002-29.992 0-29.992 29.992 90.002 60.009 90.002 90.002c0 29.992 29.992 60.009 29.992 60.009 0 132.543 107.445 240.013 240.013 240.013 132.543 0 240.013-107.445 240.013-240.013v-420.044c16.553-0.013 29.967-13.434 29.967-29.99v-60.009c0-16.556-13.414-29.977-29.967-29.99z" - ], - "isMulticolor": false, - "tags": [ - "snorkel" - ], - "defaultCode": 60070, - "grid": 0, - "attrs": [] - }, - { - "id": 423, - "paths": [ - "M951.338 490.212l28.284-134.518-102.353-91.754-130.638 42.764-21.699 103.197c-25.969-55.433-73.501-100.053-134.234-121.032l99.119-32.446 28.284-134.518-102.353-91.754-130.638 42.764-28.284 134.517 77.49 69.465c-64.33-5.559-126.141 16.097-172.456 56.504l21.402-101.787-102.353-91.754-130.638 42.762-28.284 134.518 102.353 91.754 99.071-32.431c-16.972 24.606-29.45 52.914-35.985 83.998-6.674 31.736-6.51 63.316-0.526 93.221l-78.253-70.15-130.638 42.762-28.284 134.518 102.353 91.754 130.638-42.764 21.671-103.065c26.003 55.388 73.541 99.958 134.268 120.897l-99.123 32.447-28.284 134.518 102.353 91.754 130.638-42.764 28.284-134.517-77.527-69.498c64.37 5.541 126.214-16.165 172.53-56.637l-21.437 101.956 102.353 91.754 130.638-42.762 28.284-134.518-102.353-91.754-99.249 32.489c17.007-24.629 29.509-52.972 36.054-84.097 6.679-31.761 6.508-63.364 0.511-93.291l78.379 70.262 130.634-42.764zM482.92 659.58c-83.587-17.575-137.097-99.58-119.522-183.166s99.58-137.097 183.166-119.522 137.097 99.58 119.522 183.166c-17.575 83.584-99.58 137.097-183.166 119.522zM487.959 408.239l-72.946 72.946 26.699 99.645 99.645 26.701 72.946-72.945-26.699-99.647z" - ], - "isMulticolor": false, - "tags": [ - "snowflake" - ], - "defaultCode": 60071, - "grid": 0, - "attrs": [] - }, - { - "id": 424, - "paths": [ - "M759.238 121.61c-217.88-138.546-506.262-75.111-644.121 141.686-0.038 0.060-0.077 0.12-0.115 0.18-137.857 216.797-72.988 504.86 144.892 643.406s506.262 75.111 644.121-141.686c0.038-0.060 0.077-0.12 0.115-0.18 137.857-216.797 72.988-504.86-144.892-643.406zM321.494 725.969l-153.998 24.402-79.251-201.802 95.633-117.309 140.841 92.324-3.226 202.384zM458.966 71.102v0l-61.731 97.13-181.674 90.645-53.295-41.247c39.513-68.032 187.066-141.915 215.043-139.037 38.202-19.075 83.213-9.939 81.656-7.49zM786.611 798.877l-110.363 124.46-182.591 21.995-16.483-118.316 181.956-96.166 127.48 68.027zM664.825 551.101l-171.883-101.515 39.041-200.699 190.651 0.687 91.803 181.641-149.611 119.887zM821.916 189.781l-66.872-17.765-74.573-72.131c0-0.002 130.335 60.479 141.446 89.897v0zM907.879 687.664v0l10.131-180.084 32.705-61.415c13.269 8.434 11.229 198.753-27.341 258.015-25.572 15.363-15.495-16.516-15.495-16.516z" - ], - "isMulticolor": false, - "tags": [ - "soccer-ball" - ], - "defaultCode": 60072, - "grid": 0, - "attrs": [] - }, - { - "id": 425, - "paths": [ - "M914.086 250.29l-370.803-214.083c-48.285-27.877-110.031-11.332-137.909 36.953l-328.213 568.484c-27.879 48.285-11.332 110.031 36.953 137.909l370.803 214.083c48.285 27.879 110.031 11.332 137.909-36.953l328.213-568.484c27.879-48.285 11.332-110.031-36.953-137.909zM472.67 120.643c12.213-21.152 39.261-28.401 60.416-16.189s28.401 39.263 16.189 60.414c-12.213 21.153-39.261 28.401-60.416 16.189s-28.401-39.263-16.189-60.414zM553.324 913.044c-12.213 21.153-39.261 28.401-60.416 16.189s-28.401-39.261-16.189-60.414c12.213-21.153 39.261-28.401 60.416-16.189s28.401 39.261 16.189 60.414zM669.091 602.249v-0.010c-51.178 82.548-158.291 55.214-172.388-33.877l-6.466 158.306-148.567-85.782 129.764-82.151c-81.539 25.52-161.321-52.396-110.442-134.366 58.132-93.645 226.772-70.432 273.129-116.786-15.53 57.95 90.627 204.902 34.97 294.666z" - ], - "isMulticolor": false, - "tags": [ - "spades-card" - ], - "defaultCode": 60073, - "grid": 0, - "attrs": [] - }, - { - "id": 426, - "paths": [ - "M790.551 546.955c-5.508-172.531-278.977-372.26-278.977-372.26s-283.346 206.933-278.155 372.26c4.437 141.362 148.864 191.734 240.563 109.837l-80.387 192.515 236.793-0.015-80.453-192.666c92.967 79.869 245.197 33.665 240.617-109.672z" - ], - "isMulticolor": false, - "tags": [ - "spades" - ], - "defaultCode": 60074, - "grid": 0, - "attrs": [] - }, - { - "id": 427, - "paths": [ - "M152.009 932.001c0-29.992 29.992-60.009 60.009-60.009h599.993c29.992 0 60.009 29.992 60.009 60.009v60.009h-720.012v-60.009zM272.003 571.995h480v240.012h-480v-240.012zM272.003 152.005h480v119.994h-480v-119.994zM272.003 331.983h480v180.003h-480v-180.003zM272.003 31.986h480v60.009h-480v-60.009z" - ], - "isMulticolor": false, - "tags": [ - "spawn-node" - ], - "defaultCode": 60075, - "grid": 0, - "attrs": [] - }, - { - "id": 428, - "paths": [ - "M781.044 476.667c-75.912 54.469-149.762 58.755-229.42 26.403 0.077-1.372 0.125-2.751 0.125-4.141 0-39.995-32.425-72.418-72.418-72.418-7.017 0-13.792 1.017-20.209 2.88l-390.688-389.701-24.822 0.223 0.112 60.004 369.788 368.816c-4.225 9.194-6.599 19.416-6.599 30.196 0 39.993 32.423 72.418 72.418 72.418 3.929 0 7.78-0.323 11.538-0.925 26.918 78.692 20.408 152.822-25.198 221.616 128.144 87.157 326.997 167.573 492.941 177.572 7.23-170.493-84.661-362.051-177.569-492.942z" - ], - "isMulticolor": false, - "tags": [ - "spear-head" - ], - "defaultCode": 60076, - "grid": 0, - "attrs": [] - }, - { - "id": 429, - "paths": [ - "M507.455 132.352c-248.695 0-450.304 149.162-450.304 333.176 0 103.482 63.76 195.945 163.797 257.056l-27.955 211.647 201.357-146.121c36.142 6.917 74.042 10.602 113.106 10.602 248.695 0 450.304-149.17 450.304-333.184 0-184.006-201.609-333.176-450.304-333.176zM313.513 547.97c25.339 0 45.885 20.542 45.885 45.885 0 25.341-20.545 45.885-45.885 45.885s-45.885-20.545-45.885-45.885 20.545-45.885 45.885-45.885zM506.828 639.739c-25.339 0-45.885-20.545-45.885-45.885s20.545-45.885 45.885-45.885c25.339 0 45.885 20.542 45.885 45.885 0 25.341-20.545 45.885-45.885 45.885zM706.204 639.739c-25.339 0-45.885-20.545-45.885-45.885s20.545-45.885 45.885-45.885c25.339 0 45.885 20.542 45.885 45.885 0 25.341-20.543 45.885-45.885 45.885z" - ], - "isMulticolor": false, - "tags": [ - "speech-bubble" - ], - "defaultCode": 60077, - "grid": 0, - "attrs": [] - }, - { - "id": 430, - "paths": [ - "M897.179 832.114c49.808-33.779 80.696-80.731 80.696-132.654 0-102.868-121.198-186.263-270.715-186.263s-270.72 83.393-270.72 186.263 121.208 186.263 270.72 186.263c36.406 0 71.125-4.956 102.834-13.923l136.825 102.136-49.64-141.821zM785.58 274.94c0-118.29-162.801-214.186-363.624-214.186s-363.624 95.89-363.624 214.186c0 55.652 36.037 106.341 95.107 144.426l-57.306 233.771 197.066-177.839c40.028 8.93 83.417 13.833 128.757 13.833 200.823 0 363.624-95.895 363.624-214.191z" - ], - "isMulticolor": false, - "tags": [ - "speech-bubbles" - ], - "defaultCode": 60078, - "grid": 0, - "attrs": [] - }, - { - "id": 431, - "paths": [ - "M701.249 425.012c0 33.155-26.878 60.033-60.033 60.033s-60.033-26.878-60.033-60.033c0-33.155 26.878-60.033 60.033-60.033s60.033 26.878 60.033 60.033zM745.055 515.765c0 16.577-13.438 30.016-30.016 30.016s-30.016-13.438-30.016-30.016c0-16.577 13.438-30.016 30.016-30.016s30.016 13.438 30.016 30.016zM197.983 648.532c-23.744 0-50.944 10.016-79.711 34.528-19.936 35.233-31.040 74.369-31.040 115.617 0 73.889 35.679 141.088 93.857 190.976-0.224-5.952-0.32-11.968-0.32-17.984 0-93.601 40.704-176.767 103.519-228.16 0.032-48.481-35.137-94.978-86.305-94.978zM938.432 798.645c0-41.248-11.103-80.384-31.040-115.617-28.736-24.512-55.937-34.528-79.711-34.528-51.168 0-86.336 46.497-86.336 94.944 62.815 51.424 103.519 134.561 103.519 228.16 0 6.015-0.129 12-0.32 17.984 58.206-49.855 93.887-117.022 93.887-190.943v0zM32 34.356v473.312c0 40.96 38.656 80.735 96.32 114.944 23.008-12.127 46.528-19.105 69.632-19.105 58.048 0 106.879 40.609 124.16 96.385 3.776 0.992 7.519 1.697 11.264 2.655 27.648-19.841 52.512-24.415 69.376-24.415 35.104 0 66.080 19.329 84.256 48.576 8.575 0.417 17.408 1.088 25.536 1.088 8.353 0 17.023-0.351 25.888-0.863 18.176-29.376 49.184-48.801 84.385-48.801 16.16 0 39.68 4.352 65.919 22.143 5.312-1.472 10.625-3.104 15.967-4.64 18.432-53.568 66.336-92.096 122.912-92.096 20.544 0 41.408 5.471 61.984 15.104 61.023-35.423 102.4-74.784 102.4-110.687v-473.6h-959.998zM167.039 437.012c-41.44 0-75.040-33.6-75.040-75.040s33.6-75.040 75.040-75.040 75.040 33.568 75.040 75.040c0.002 41.44-33.6 75.040-75.040 75.040zM362.113 574.548c-66.272 0-120.032-53.76-120.032-120.032s53.76-120.032 120.032-120.032 120.032 53.728 120.032 120.032c0.032 66.272-53.728 120.032-120.032 120.032zM662.24 574.548c-66.272 0-120.032-53.76-120.032-120.032s53.76-120.032 120.032-120.032 120.032 53.728 120.032 120.032c0.032 66.272-53.728 120.032-120.032 120.032zM857.312 437.012c-41.44 0-75.040-33.6-75.040-75.040s33.6-75.040 75.040-75.040c41.44 0 75.040 33.568 75.040 75.040 0 41.44-33.6 75.040-75.040 75.040zM186.912 343.54c0 18.221-14.771 32.992-32.992 32.992s-32.992-14.771-32.992-32.992c0-18.221 14.771-32.992 32.992-32.992s32.992 14.771 32.992 32.992zM213.183 400.277c0 7.263-5.888 13.151-13.151 13.151s-13.151-5.888-13.151-13.151c0-7.263 5.888-13.151 13.151-13.151s13.151 5.888 13.151 13.151zM877.185 343.54c0 18.221-14.771 32.992-32.992 32.992s-32.992-14.771-32.992-32.992c0-18.221 14.771-32.992 32.992-32.992s32.992 14.771 32.992 32.992zM903.456 400.277c0 7.263-5.888 13.151-13.151 13.151s-13.151-5.888-13.151-13.151c0-7.263 5.888-13.151 13.151-13.151s13.151 5.888 13.151 13.151zM402.815 720.212c-16.289 0-34.977 7.041-54.689 24.288-13.663 24.8-21.312 52.351-21.312 81.376 0 52.032 24.481 99.328 64.417 134.432-0.161-4.191-0.224-8.416-0.224-12.639 0-65.887 27.936-124.448 71.041-160.641 0-34.048-24.128-66.816-59.233-66.816zM698.848 825.908c0-29.023-7.616-56.576-21.312-81.376-19.712-17.247-38.368-24.32-54.689-24.288-35.104 0-59.231 32.736-59.231 66.848 43.103 36.191 71.039 94.72 71.039 160.641 0 4.225-0.064 8.448-0.224 12.639 39.936-35.136 64.417-82.43 64.417-134.464v0zM401.152 425.012c0 33.155-26.878 60.033-60.033 60.033s-60.033-26.878-60.033-60.033c0-33.155 26.878-60.033 60.033-60.033s60.033 26.878 60.033 60.033zM444.96 515.765c0 16.577-13.438 30.016-30.016 30.016s-30.016-13.438-30.016-30.016c0-16.577 13.438-30.016 30.016-30.016s30.016 13.438 30.016 30.016z" - ], - "isMulticolor": false, - "tags": [ - "spider-face" - ], - "defaultCode": 60079, - "grid": 0, - "attrs": [] - }, - { - "id": 432, - "paths": [ - "M511.992 31.992c-14.783 0-30.143 50.322-45.001 113.945-66.309 8.282-129.104 34.409-181.735 75.57-55.542-34.535-102.325-59.507-112.791-49.042-10.441 10.441 14.582 57.048 49.042 112.489-41.311 52.681-67.539 115.602-75.871 182.011-63.498 14.833-113.644 30.243-113.644 45.001 0 14.783 50.322 30.143 113.945 45.001 8.282 66.309 34.409 129.104 75.57 181.735-34.535 55.542-59.507 102.325-49.042 112.791 10.466 10.441 57.048-14.582 112.489-49.042 52.681 41.311 115.602 67.539 182.011 75.871 14.833 63.498 30.218 113.644 45.001 113.644s30.143-50.322 45.001-113.945c66.309-8.282 129.104-34.409 181.735-75.57 55.542 34.535 102.325 59.507 112.791 49.042 10.441-10.441-14.582-57.048-49.042-112.489 41.311-52.681 67.539-115.602 75.871-182.011 63.498-14.833 113.644-30.243 113.644-45.001 0-14.783-50.322-30.143-113.945-45.001-8.282-66.309-34.409-129.104-75.57-181.735 34.535-55.542 59.507-102.325 49.042-112.791-10.466-10.441-57.048 14.582-112.489 49.042-52.681-41.311-115.602-67.539-182.011-75.871-14.833-63.473-30.218-113.644-45.001-113.644v0zM518.341 290.451c119.868 3.438 215.241 101.622 215.191 221.54-0.1 122.353-99.363 221.465-221.716 221.365-122.227-0.1-221.264-99.137-221.365-221.365-0.050-122.353 99.087-221.591 221.44-221.641 2.158 0.025 4.317 0.050 6.45 0.1v0z" - ], - "isMulticolor": false, - "tags": [ - "spikeball" - ], - "defaultCode": 60080, - "grid": 0, - "attrs": [] - }, - { - "id": 433, - "paths": [ - "M19.139 885.782v121.049h117.528l220.603-220.294-119.444-119.444zM814.559 689.955l-92.603-181.098 79.085-73.947 190.561 97.070-94.975-186.445 72.281-67.586-51.13-51.13 53.322-53.248-119.88-119.873-53.281 53.281-51.748-51.748-232.884 245.942-179.121-91.592 93.222 182.31-80.009 84.494-169.839-87.279 88.822 172.841-65.028 68.675 188.635 188.635 68.060-63.638 176.967 90.944-89.003-173.193 83.474-78.051 185.072 94.636zM741.703 194.020c49.563 0 89.743 40.18 89.743 89.743s-40.18 89.743-89.743 89.743c-49.563 0-89.743-40.18-89.743-89.743s40.18-89.743 89.743-89.743zM317.754 620.041c0-48.096 38.989-87.085 87.085-87.085s87.085 38.989 87.085 87.085-38.991 87.085-87.085 87.085c-48.096 0-87.085-38.989-87.085-87.085zM482.498 451.379c0-49.563 40.18-89.743 89.743-89.743s89.743 40.18 89.743 89.743-40.18 89.743-89.743 89.743-89.743-40.18-89.743-89.743zM678.037 127.208l-185.9-94.694 96.391 189.223zM822.646 283.763c0 45.436-36.833 82.269-82.269 82.269s-82.269-36.833-82.269-82.269c0-45.436 36.833-82.269 82.269-82.269s82.269 36.833 82.269 82.269zM628.65 395.488c30.899 30.899 31.032 80.865 0.295 111.601s-80.702 30.604-111.601-0.295c-30.899-30.899-31.032-80.865-0.295-111.601s80.702-30.604 111.601 0.295zM457.589 566.545c29.425 29.425 29.715 76.843 0.647 105.91s-76.485 28.778-105.91-0.647c-29.425-29.425-29.715-76.843-0.647-105.91s76.485-28.778 105.91 0.647z" - ], - "isMulticolor": false, - "tags": [ - "spiked-mace" - ], - "defaultCode": 60081, - "grid": 0, - "attrs": [] - }, - { - "id": 434, - "paths": [ - "M880.391 585.875c3.683 18.352-10.098 59.546-20.221 74.937 31.844 11.013 81.091 8.498 117.057 8.322-18.252-26.569-61.467-69.423-96.836-83.26zM627.273 517.623c-83.166-154.335 56.059-151.149 92.73-87.636 40.357 69.904 46.868 167.822-56.044 227.244-81.354 46.97-172.941-53.407-157.948-194.634 29.574-278.618-98.937-455.623-456.527-334.242v411.683c87.618-176.729 255.776-210.705 255.776 69.296 0 188.421 306.533 299.985 485.059 105.978 78.125-84.902 96.149-283.63 2.038-398.44-90.887-110.874-383.856 26.27-165.083 200.749zM973.099 399.94c-26.255-12.046-79.204-25.144-112.777-19.528 7.571 17.587 14.897 48.958 18.896 66.946 29.562-6.172 66.289-30.745 93.881-47.418zM823.532 200.338v0.002l0.005-0.002zM823.532 200.34c-23.961 9.099-65.197 34.41-82.55 59.126 15.829 6.166 40.22 21.065 54.078 29.733 14.505-22.528 21.833-61.041 28.472-88.859zM583.526 286.383c14.46-8.919 41.049-19.401 56.317-25.238-9.236-25.149-35.551-54.21-53.751-76.269-7.178 24.604-11.835 72.767-2.566 101.506zM586.089 184.871l0.003 0.005 0.002-0.005zM474.837 834.279c-0.591 42.473 17.41 98.514 28.899 140.582 24.367-28.522 58.498-86.895 68.738-133.683-36.938 2.068-69.298-0.645-97.637-6.899zM713.992 802.455c14.772 42.998 90.070 80.759 140.091 109.317-3.398-43.26-25.802-124.003-58.7-160.036-26.373 20.669-55.837 37.761-81.39 50.719zM173.803 841.658c40.302-3.166 128.317-33.951 179.598-72.293-26.123-26.099-43.491-55.679-54.99-82.366-49.596 33.79-99.368 110.45-124.607 154.659zM278.749 592.012c5.092-43.153-3.503-76.511-12.644-98.229-58.923 7.285-135.205 46.304-177.236 70.843 36.142 17.246 126.381 34.422 189.879 27.386z" - ], - "isMulticolor": false, - "tags": [ - "spiked-tentacle" - ], - "defaultCode": 60082, - "grid": 0, - "attrs": [] - }, - { - "id": 435, - "paths": [ - "M908.682 797.44c139.17-191.525 122.422-461.107-50.286-633.818-176.21-176.21-453.266-190.090-645.372-41.652-27.817-32.566-54.723-65.058-78.801-95.832l-103.269 103.275c30.778 23.828 63.451 50.248 96.266 77.522-151.767 192.241-138.96 471.937 38.483 649.38 172.129 172.129 440.475 189.331 631.878 51.674l40.78 40.778 154.422 38.458-43.596-149.283-40.504-40.502zM660.181 548.939l-233.218-233.215 87.314-87.321-63.667-63.672c180.697-9.014 330.398 207.332 209.571 384.207zM446.375 164.971l-103.723 103.731c-12.597-13.938-25.675-28.458-39.017-43.372 46.748-38.523 95.723-57.103 142.74-60.359zM234.065 298.068c14.496 12.654 28.604 25.077 42.134 37.090l-107.757 107.764 65.666 65.67 82.032-82.037 478.47 478.465c-382.463 257.445-869.867-216.731-560.546-606.951z" - ], - "isMulticolor": false, - "tags": [ - "spinning-sword" - ], - "defaultCode": 60083, - "grid": 0, - "attrs": [] - }, - { - "id": 436, - "paths": [ - "M968.609 77.956c-14.254 0.748-99.293 11.516-104.047 45.998-19.508-5.285-39.293-3.595-53.617 6.219-10.766 7.377-16.718 18.173-17.986 30.291-22.73-5.341-44.423-3.035-59.641 8.189-12.781 9.426-18.923 23.642-18.873 39.797-28.866-6.854-56.439-3.977-75.758 10.272-13.589 10.025-21.238 24.334-23.301 40.775-45.15-13.294-89.146-10.384-119.183 11.772-24.477 18.054-35.531 45.809-34.026 77.169-92.462-23.95-175.218-1.433-180.505 110.316-8.631 182.427-209.168 251.932-215.302 508.47 142.104-212.596 509.302-558.574 478.415-273.949-16.090 148.265-185.316 49.306-423.159 230.545 216.579-149.437 447.856-30.469 464.245-242.558 39.884 21.875 58.373 12.527 92.317-12.512 48.708-35.929 54.264-82.894 33.911-130.043 13.927-3.127 26.651-8.59 37.524-16.61 33.832-24.954 42.024-68.439 26.833-114.369 14.966-1.079 28.553-5.491 39.49-13.558 22.645-16.703 28.866-45.277 20.051-75.858 14.303 0.070 27.344-3.431 37.494-10.92 19.548-14.42 23.604-40.025 13.621-66.67 8.922-1.057 17.214-3.899 24.202-8.686 17.226-11.804 22.155-32.352 15.203-53.089 35.471-6.684 40.078-87.035 42.094-100.992z" - ], - "isMulticolor": false, - "tags": [ - "spiral-shell" - ], - "defaultCode": 60084, - "grid": 0, - "attrs": [] - }, - { - "id": 437, - "paths": [ - "M32.025 331.987c99.413 0 180.003 80.59 180.003 180.003s-80.59 180.003-180.003 180.003v-360.007zM901.999 421.989c0 0 90.002 0 90.002 90.002s-90.002 90.002-90.002 90.002l-630.011-60.009v-60.009l630.011-59.984zM677.496 70.039c0 0 51.953-29.992 81.97 21.961 29.992 51.953-21.961 81.97-21.961 81.97l-482.661 244.028-29.992-51.953 452.643-296.006zM737.506 850.036c0 0 51.953 29.992 21.961 81.97-29.992 51.953-81.97 21.961-81.97 21.961l-452.669-295.981 29.992-51.953 482.686 244.003zM323.965 897.698c0 0 29.992 51.953-21.961 81.97s-81.97-21.961-81.97-21.961l-94.017-222.846 51.953-29.992 145.995 192.828zM220.034 66.299c0 0 29.992-51.953 81.97-21.961s21.961 81.97 21.961 81.97l-145.97 192.853-51.953-29.992 93.992-222.871z" - ], - "isMulticolor": false, - "tags": [ - "splash" - ], - "defaultCode": 60085, - "grid": 0, - "attrs": [] - }, - { - "id": 438, - "paths": [ - "M396.166 558.202c0-39.55-35.148-72.196-85.737-86.885v-31.575c-4.403 5.085-10.856 8.314-18.066 8.314-13.267 0-24.025-10.878-24.025-24.285s10.758-24.277 24.025-24.277c7.21 0 13.663 3.226 18.066 8.309v-32.765c0-13.32-27.324-23.487-61.027-23.487s-61.024 10.158-61.022 23.487v95.802c-50.594 13.985-85.745 45.619-85.745 87.362 0 3.321 0.895 6.567 2.584 9.712h-2.218v440.215h292.797v-440.215h-2.212c1.689-3.146 2.584-6.391 2.584-9.712h-0.003zM984.639 144.015c-34.241-80.883-139.693-93.144-197.074-20.918-76.077-157.746-281.264-46.91-228.561 83.888l-0.002 0.012c-52.378 4.689-82.809 54.848-76.66 100.641 20.682 63.057 67.659 89.886 123.196 90.204-54.606 14.289-110.245 11.049-144.625-35.184l-162.403 61.238 215.685 102.639c34.639-38.785 86.923-40.851 138.3-27.422-40.011 0.227-75.571 14.237-100.065 45.617l0.588 0.281c-2.725 2.972-5.098 5.977-7.168 8.995-1.442 2.237-2.84 4.539-4.183 6.924-24.705 46.985 23.435 94.788 73.153 84.367-45.716 72.614 36.892 129.091 95.214 113.926-20.059-51.464 4.706-99.837 43.422-139.015-28.152 49.406-27.713 104.919 19.777 155.307 52.515 36.871 148.186 30.725 165.928-57.144 13.319 14.877 42.301 26.146 57.139 28.096v-607.117l-11.662 4.664zM657.979 327.518c2.688-48.641-6.765-78.395-43.798-107.448 47.941 17.309 95.559 16.536 148.944-15.086-53.153 45.178-82.779 61.213-105.146 122.534zM822.573 422.179c-49.114 13.942-87.869 69.43-69.555 125.11-60.8-55.082-10.33-141.305 49.214-149.716-18.587-31.432-19.994-72.819 14.575-104.137-23.094 70.213 44.555 140.136 109.296 126.807-32.614 34.791-74.695 27.354-103.529 1.936z" - ], - "isMulticolor": false, - "tags": [ - "spray-can" - ], - "defaultCode": 60086, - "grid": 0, - "attrs": [] - }, - { - "id": 439, - "paths": [ - "M510.553 57.444c-252.502 0-457.193 204.693-457.193 457.187s204.698 457.187 457.193 457.187 457.187-204.685 457.187-457.187c0-252.495-204.686-457.187-457.187-457.187zM511.668 940.157c-233.302 0-422.431-189.131-422.431-422.431s189.129-422.431 422.431-422.431 422.431 189.131 422.431 422.431-189.131 422.431-422.431 422.431zM604.431 483.595c0.72-7.008 0.112-13.987 0-20.989-1.407-102.071-95.623-199.406-95.623-199.411 0 0-92.365 106.665-90.959 208.739 0.037 3.339 0.925 7.168 1.164 10.492-62.661-78.128-146.35-118.946-247.22-118.946 0 0 0.526 153.087 87.461 234.391 50.966 47.669 139.122 48.474 184.248 81.629 48.749 35.82 43.955 119.337 12.829 206.404-7.534 12.246-20.804 20.822-36.152 20.989-2.374 0.025-6.998-1.164-6.998-1.164l101.455 33.815 95.623-32.651c-2.272 0.374-4.624 1.164-6.996 1.164-17.964 0-33.125-11.211-39.649-26.823-0.149-0.334 0.112-0.844 0-1.164-29.397-85.271-32.935-166.72 15.158-201.738 45.492-33.125 133.69-33.174 184.248-80.46 86.935-81.309 87.458-234.391 87.461-234.391-112.179 0-189.066 46.635-246.051 120.114zM511.225 660.848c-30.788-14.027-51.623-45.54-51.623-81.563s20.834-66.502 51.623-80.528v0 0 0c30.413 14.179 51.623 44.782 51.623 80.528s-21.213 67.387-51.623 81.563z" - ], - "isMulticolor": false, - "tags": [ - "sprout-emblem" - ], - "defaultCode": 60087, - "grid": 0, - "attrs": [] - }, - { - "id": 440, - "paths": [ - "M620.339 393.114c0.419-5.655 0.615-11.312 0.538-16.959-1.532-111.329-104.737-217.663-104.737-217.663v0h-0.002v0.003c0 0-100.14 116.328-98.605 227.659 0.018 1.305 0.063 2.608 0.109 3.911-93.553-122.619-225.429-186.819-389.379-186.819 0 0 1.004 192.069 126.886 293.865 73.8 59.676 200.283 59.94 265.632 101.456 102.956 65.401 43.623 257.873-64.034 405.813h323.736c-108.464-149.040-166.695-341.603-62.852-406.977 65.875-41.469 192.417-41.080 265.632-100.287 125.882-101.795 126.886-293.865 126.886-293.865-184.868 0-304.841 74.973-389.81 189.863z" - ], - "isMulticolor": false, - "tags": [ - "sprout" - ], - "defaultCode": 60088, - "grid": 0, - "attrs": [] - }, - { - "id": 441, - "paths": [ - "M511.203 163.735c-225.617 0-408.865 183.144-408.865 408.636s183.249 408.636 408.865 408.636 408.865-183.149 408.865-408.636-183.248-408.636-408.865-408.636zM511.203 910.956c-186.532 0-337.716-152.157-337.716-338.585s151.179-337.522 337.716-337.522c186.532 0 337.711 151.094 337.711 337.522s-151.179 338.585-337.711 338.585zM583.264 561.944c-0.115-0.631-0.214-1.263-0.347-1.896-2.359-11.267-7.168-21.395-13.753-29.943l94.22-254.782-152.34 225.905c-5.18-0.035-10.439 0.461-15.716 1.565-40.006 8.364-65.653 47.557-57.286 87.541 8.369 39.984 47.583 65.62 87.59 57.255 16.847-3.523 31.133-12.525 41.419-24.738l260.749 40.192-244.536-101.099zM339.97 22.648h323.318v119.962h-323.318v-119.962z" - ], - "isMulticolor": false, - "tags": [ - "stopwatch" - ], - "defaultCode": 60089, - "grid": 0, - "attrs": [] - }, - { - "id": 442, - "paths": [ - "M524.687 300.371c150.687 262.015 336.002 77.734 321.852-88.625-8.531-100.272-104.63-191.364-277.539-184.248v-0.003c-11.526 0.474-23.95 2.135-36.152 3.496-338.002 37.804-462.589 304.45-177.252 516.597 174.782 129.946 168.14 259.172-174.92 419.807h250.72c55.892-52.986 195.13-33.607 235.558-3.496 164.953-117.416 134.017-395.581-78.133-489.774-269.422-119.621-236.805-316.211-47.809-352.171 107.173-20.393 195.437 34.16 212.235 101.455 24.768 99.201-72.933 216.448-228.559 76.964zM633.991 905.642c-56.013 6.752-104.406-12.597-108.096-43.215-3.692-30.618 38.718-60.914 94.729-67.666 56.013-6.752 104.405 12.597 108.096 43.215s-38.717 60.914-94.729 67.666zM744.306 701.936c3.605 26.16-32.26 52.712-80.116 59.307-47.854 6.595-89.566-9.266-93.171-35.426s32.26-52.712 80.116-59.307c47.854-6.595 89.566 9.266 93.171 35.426zM690.724 586.054c5.467 20.405-20.356 45.056-57.685 55.057-37.328 10.003-72.017 1.567-77.485-18.838s20.356-45.056 57.685-55.057c37.327-10.003 72.017-1.569 77.485 18.838zM596.17 508.263c4.001 14.931-14.896 32.967-42.21 40.285s-52.697 1.146-56.698-13.785c-4.001-14.931 14.896-32.967 42.21-40.285s52.697-1.146 56.698 13.785zM469.244 447.399c17.436-4.672 33.64-0.732 36.194 8.8s-9.508 21.046-26.946 25.719-33.642 0.732-36.194-8.8c-2.554-9.532 9.508-21.046 26.946-25.719zM424.516 403.95c12.029-3.224 23.21-0.504 24.972 6.070 1.762 6.577-6.56 14.52-18.591 17.744-12.029 3.224-23.21 0.504-24.972-6.070-1.762-6.577 6.56-14.52 18.591-17.744z" - ], - "isMulticolor": false, - "tags": [ - "suckered-tentacle" - ], - "defaultCode": 60090, - "grid": 0, - "attrs": [] - }, - { - "id": 443, - "paths": [ - "M508.387 397.569c16.476-61.495 191.941-140.173 188.421-252.166-3.465-110.355-132.891-138.88-188.421-42.701-54.207-93.882-192.56-69.53-188.977 42.701 3.735 116.868 170.975 184.987 188.977 252.166zM337.574 775.977l170.682 209.943 170.684-209.942-170.684-209.943zM988.235 495.766c-3.361-105.303-170.27-227.204-170.27-227.204s-172.937 126.299-169.769 227.204c2.708 86.278 90.857 117.022 146.823 67.036l-49.062 117.498 144.523-0.008-49.102-117.59c56.743 48.746 149.653 20.547 146.856-66.936zM381.543 503.355c0-48.973-39.084-89.168-88.056-89.168-4.191 0-8.224 0.531-12.263 1.106 11.757-15.039 18.947-34.039 18.947-54.614 0-48.97-39.081-88.051-88.049-88.054-48.968 0.003-89.162 39.084-89.162 88.054 0 20.401 7.36 39.629 18.947 54.614-3.688-0.461-7.333-1.106-11.145-1.106-48.972 0-89.168 40.197-89.168 89.168s40.197 89.168 89.168 89.168c19.981 0 38.428-6.707 53.273-17.936l-44.739 107.146 144.523-0.008-45.4-108.724c15.18 12.141 34.337 19.523 55.070 19.523 48.973 0 88.054-40.195 88.054-89.168zM212.115 272.625h0.013z" - ], - "isMulticolor": false, - "tags": [ - "suits" - ], - "defaultCode": 60091, - "grid": 0, - "attrs": [] - }, - { - "id": 444, - "paths": [ - "M912.004 411.996c-40.963 0-66.205 20.967-105.233 44.116-7.779-41.291-24.009-79.596-46.841-113.043 43.973-11.232 76.649-14.246 105.611-43.207 28.289-28.289 28.289-84.867-14.127-127.281-42.432-42.432-98.993-42.416-127.281-14.127-28.966 28.966-31.98 61.642-43.204 105.608-33.451-22.838-71.759-39.073-113.058-46.853 23.147-39.024 44.112-64.258 44.112-105.208 0.025-40.006-39.981-80.013-99.991-80.013s-99.991 40.006-99.991 80.013c0 40.958 20.969 66.192 44.116 105.208-41.296 7.78-79.603 24.012-113.052 46.846-11.234-43.977-14.247-76.654-43.209-105.618-28.289-28.289-84.867-28.289-127.281 14.127s-42.416 98.993-14.127 127.281c28.966 28.966 61.642 31.988 105.611 43.217-22.834 33.449-39.066 71.754-46.846 113.048-39.024-23.147-64.259-44.112-105.208-44.112-40.006 0-80.013 40.006-80.013 99.991s40.006 99.991 80.013 99.991c40.95 0.013 66.185-20.954 105.209-44.104 7.78 41.293 24.014 79.598 46.846 113.043-43.965 11.229-76.638 14.246-105.594 43.204-28.289 28.289-28.289 84.867 14.127 127.282s98.993 42.416 127.282 14.127c28.958-28.958 31.972-61.634 43.197-105.604 33.451 22.834 71.759 39.066 113.055 46.845-23.152 39.036-44.126 64.273-44.126 105.229 0 40.006 40.006 80.013 99.991 80.013s99.991-40.006 99.991-80.013c0.013-40.965-20.955-66.205-44.107-105.233 41.296-7.78 79.603-24.014 113.050-46.85 11.232 43.975 14.246 76.651 43.209 105.613 28.289 28.289 84.867 28.289 127.281-14.127 42.416-42.416 42.416-98.993 14.127-127.282-28.953-28.972-61.631-31.985-105.611-43.215 22.833-33.451 39.064-71.757 46.843-113.053 39.036 23.152 64.273 44.126 105.229 44.126 40.006 0 80.013-40.006 80.013-99.991s-40.008-99.992-80.014-99.992zM511.992 631.982c-33.136 0-63.128-13.429-84.84-35.137 0.002-0.002 0.002-0.003 0.003-0.005-0.002 0.002-0.003 0.002-0.005 0.003-21.72-21.716-35.152-51.72-35.152-84.855 0-66.259 53.735-119.994 119.994-119.994 66.284 0 119.994 53.735 119.994 119.994s-53.735 119.994-119.994 119.994z" - ], - "isMulticolor": false, - "tags": [ - "sun-symbol" - ], - "defaultCode": 60092, - "grid": 0, - "attrs": [] - }, - { - "id": 445, - "paths": [ - "M748.639 451.394c94.651-44.271 90.505-194.181 184.246-188.291-132.001-87.688-128.61 99.381-290.863 39.525 35.431-98.18-73.332-201.165-2.923-263.25-155.361 31.338-20.639 161.241-177.772 233.644-44.273-94.649-194.179-90.503-188.291-184.243-87.686 132.001 99.378 128.608 39.525 290.859-98.18-35.431-201.165 73.332-263.25 2.923 31.338 155.361 161.242 20.637 233.644 177.773-94.651 44.273-90.503 194.181-184.245 188.291 132.001 87.686 128.61-99.378 290.859-39.527-35.429 98.18 73.332 201.163 2.925 263.248 155.361-31.338 20.639-161.242 177.772-233.644 44.273 94.651 194.181 90.503 188.291 184.245 87.686-132.001-99.38-128.61-39.525-290.861 98.18 35.427 201.163-73.332 263.248-2.925-31.338-155.357-161.241-20.635-233.642-177.768z" - ], - "isMulticolor": false, - "tags": [ - "sun" - ], - "defaultCode": 60093, - "grid": 0, - "attrs": [] - }, - { - "id": 446, - "paths": [ - "M985.32 35.7h-224.071l-84.432 64.95c-9.284-16.259-20.405-30.147-33.555-43.299l16.237-21.651h-324.737l15.155 19.483c-13.86 13.441-24.917 28.637-34.637 45.462l-83.35-64.95-197.011 0.002v18.4l255.459 106.083c-3.085 14.269-4.328 30.276-4.328 45.462 0 2.374-0.079 4.141 0 6.496l-251.131-33.553v126.647l263.038-35.723c5.011 15.151 11.322 29.905 19.483 43.299l-282.52 116.903v171.028l314.994-245.715c11.202 10.855 22.319 19.997 35.723 28.144l-350.717 453.548v149.38h158.038l238.141-583.443c13.046 4.134 27.118 8.242 41.134 9.744l-76.853 573.704h203.5l-76.853-573.702c13.923-1.884 28.219-7.415 41.134-11.907l238.141 585.609h184.018v-116.905l-378.86-489.273c11.404-7.292 21.639-15.596 31.39-24.898l347.47 267.366v-180.769l-312.829-128.812c7.784-12.769 15.639-26.756 20.565-41.134l292.264 38.97v-136.391l-281.438 37.886c0.079-2.35 0-4.124 0-6.496 0-14.408-1.549-29.711-4.328-43.299l285.768-117.987v-8.661z" - ], - "isMulticolor": false, - "tags": [ - "sunbeams" - ], - "defaultCode": 60094, - "grid": 0, - "attrs": [] - }, - { - "id": 447, - "paths": [ - "M954.243 436.374h0.005c-57.184-427.482-796.149-546.514-888.673 0-20.639 121.888 112.526 172.002 275.81 188.74-46.118 198.77-96.649 334.262 158.369 334.262 273.027 0 214.659-147.088 161.109-338.331 165.522-22.957 307.098-82.124 293.38-184.671zM562.971 109.112c68.050-12.899 132.824 79.869 40.86 97.303-68.047 12.893-132.821-79.869-40.86-97.303zM416.554 116.634c43.576 28.201-1.169 78.739-33.413 57.875-43.579-28.203 1.169-78.743 33.413-57.875zM385.759 210.769c43.529-28.169 103.935 40.060 45.106 78.131-43.529 28.166-103.933-40.060-45.106-78.131zM184.856 480.416c-49.124-31.789 1.316-88.764 37.666-65.242 49.122 31.786-1.316 88.761-37.666 65.242zM259.383 345.123c-71.231 12.25-82.019-123.269 14.251-139.835 71.234-12.25 82.022 123.278-14.251 139.835zM377.437 441.162c59.255 38.344-1.589 107.067-45.434 78.696-59.255-38.344 1.589-107.067 45.434-78.696zM620.688 490.14c-89.714 58.059-214.213-82.56-92.965-161.020 89.713-58.059 214.215 82.561 92.965 161.020zM744.628 293.2c-41.409-12.617-44.020-84.975 11.942-67.926 41.411 12.619 44.022 84.975-11.942 67.926zM810.24 490.568c-84.472-54.666 2.265-152.636 64.769-112.184 84.471 54.665-2.267 152.636-64.769 112.184z" - ], - "isMulticolor": false, - "tags": [ - "super-mushroom" - ], - "defaultCode": 60095, - "grid": 0, - "attrs": [] - }, - { - "id": 448, - "paths": [ - "M773.041 701.159l-65.544-61.174c234.554-246.592 353.614-507.269 266.917-593.965-60.959-60.957-207.93-20.198-375.539 90.907l0.319-0.332c-61.746 40.875-125.803 90.999-189.661 149.27-2.197 2.001-4.392 4.017-6.587 6.037-0.175 0.162-0.351 0.324-0.526 0.484-11.187 10.298-22.356 20.827-33.49 31.602l-60.334-56.313c12.113-109.727-44.779-158.521-139.924-235.572l-6.139 99.246-61.194-57.115-23.323 23.323 59.987 64.271-105.579 6.527c83.522 102.764 130.461 136.509 238.052 135.409l57.257 61.346c-243.672 250.781-369.896 520.742-281.518 609.113 87.028 87.022 350.128-34.048 597.61-270.441l63.234 67.751-147.499 47.304 421.546 162.829-162.836-421.546-45.228 141.038zM905.288 178.923c38.79 38.788-28.769 172.577-156.871 325.38 10.145-28.396 10.228-51.132-2.053-63.411-26.482-26.479-101.581 4.53-177.22 69.963l-90.094-84.087c191.465-184.965 379.072-295.011 426.238-247.845zM179.952 904.264c-47.395-47.395 63.957-236.606 250.554-429.038l83.646 89.621c-70.562 78.484-105.193 158.513-77.72 185.98 12.016 12.014 34.091 12.138 61.687 2.584-149.78 124.193-279.988 189.031-318.167 150.852z" - ], - "isMulticolor": false, - "tags": [ - "supersonic-arrow" - ], - "defaultCode": 60096, - "grid": 0, - "attrs": [] - }, - { - "id": 449, - "paths": [ - "M960.435 348.319v0 0c-0.685-0.621-2.461-1.584-5.050-2.793-11.977-6.41-24.107-11.244-36.38-14.557-25.127-9.435-52.291-19.020-52.291-19.020v0l-569.528-221.015c-50.072-14.45-104.841-16.374-167.151 1.809l-0.002-0.002-44.7 223.551 173.094 72.971 68.337 350.564c-0.738 0.6-1.463 1.223-2.173 1.866l-248.379 53.945-2.167 152.7 293.569-93.827 51.409-9.979c0.855 0.047 1.714 0.074 2.578 0.072 29.071-0.060 52.597-27.88 52.545-62.138 0-0.074 0-0.147 0-0.221-0.052-34.256-23.661-61.978-52.732-61.918-8.536 0.018-16.586 2.444-23.709 6.709l-65.397-306.625 360.7 152.060 166.55-10.569 100.877-213.582c0 0 0 0 0 0zM874.264 488.824c-18.925 35.808-50.076 53.19-69.577 38.822s-19.967-55.044-1.042-90.852c18.925-35.808 50.076-53.19 69.577-38.822s19.967 55.044 1.042 90.852z" - ], - "isMulticolor": false, - "tags": [ - "surveillance-camera" - ], - "defaultCode": 60097, - "grid": 0, - "attrs": [] - }, - { - "id": 450, - "paths": [ - "M578.050 475.826v-79.736c0-6.551-3.037-16.238-24.546-16.238-21.484 0-24.546 9.688-24.546 16.238v79.736c0 6.551 4.267 14.030 24.546 14.030s24.546-7.479 24.546-14.030zM499.242 987.6l-6.049-233.562c-28.411-1.054-44.775-1.456-59.934-5.296-10.516-2.66-15.686-10.24-15.686-21.936v-335.009c0-7.705-0.678-12.298-13.001-12.223-20.882 0.151-102.551 1.18-102.551 1.18l15.134-26.102c2.811-4.844 5.396-8.458 12.725-8.458 5.245 0 46.657 5.12 74.968 2.359 14.406-1.405 20.831-3.062 27.307-12.85 11.445-17.368 9.161-59.231-11.57-88.295-5.020-7.027 0.402-13.277 9.186-10.391 19.25 6.275 51.501 5.321 51.501 5.321v-163.991c0-5.572-3.313-8.835-10.039-8.835h-116.781c0 0 15.962-31.172 39.053-34.409 25.224-3.564 78.984-3.062 118.488-3.062s93.264-0.502 118.488 3.062c23.090 3.263 39.053 34.409 39.053 34.409h-116.781c-6.726 0-10.039 3.263-10.039 8.835v163.991c0 0 32.251 0.954 51.501-5.321 8.784-2.861 14.205 3.363 9.186 10.391-20.731 29.064-23.015 70.927-11.57 88.295 6.475 9.813 12.875 11.445 27.307 12.85 28.311 2.761 69.722-2.359 74.968-2.359 7.329 0 9.914 3.614 12.725 8.458l15.134 26.102c0 0-81.669-1.029-102.551-1.18-12.323-0.1-13.001 4.493-13.001 12.223v335.009c0 11.721-5.17 19.3-15.686 21.936-15.159 3.815-31.523 4.242-59.934 5.296l-6.049 233.562c-0.1 3.84-5.998 4.417-12.775 4.417-6.726-0.025-12.624-0.602-12.725-4.417v0zM470.505 489.856c20.279 0 24.546-7.479 24.546-14.030v-79.736c0-6.551-3.037-16.238-24.546-16.238s-24.546 9.688-24.546 16.238v79.736c0 6.551 4.267 14.030 24.546 14.030z" - ], - "isMulticolor": false, - "tags": [ - "syringe" - ], - "defaultCode": 60098, - "grid": 0, - "attrs": [] - }, - { - "id": 451, - "paths": [ - "M993.081 817.304l-135.826-135.826h-139.239l-34.046-34.295c30.515-38.070 48.778-86.382 48.778-138.967 0-50.124-16.589-96.371-44.57-133.563l142.677-142.967c20.488 24.431 37.896 52.872 52.635 87.19l0.003 0.003c46.197-97.94 86.637-195.88 107.866-293.825-97.94 25.032-195.88 62.284-293.823 107.866 35.245 17.59 65.929 36.248 92.608 58.385l-142.131 142.242c-37.863-29.88-85.672-47.715-137.65-47.715-52.002 0-99.832 17.854-137.705 47.76l-141.621-142.657c26.574-21.973 57.103-40.526 92.152-58.016-97.942-45.582-195.881-82.834-293.821-107.866 21.228 97.945 61.669 195.885 107.866 293.825l0.003-0.003c14.54-33.857 31.687-61.988 51.818-86.198l142.329 143.549c-27.27 36.919-43.402 82.566-43.402 131.987 0 52.040 17.881 99.899 47.826 137.786l-35.449 35.476h-136.885l-135.826 135.826h136.992l-21.678 21.694 41.459 40.44 19.638-19.678 0.002 133.96 135.831-135.826-0.003-134.241 37.272-37.347c37.13 27.817 83.241 44.294 133.205 44.294 48.739 0 93.807-15.692 130.454-42.283l40.020 40.362-0.002 129.213 135.831 135.826 0.002-128.043 40.143 40.487 42.671-41.89-46.628-46.969h140.226zM642.74 508.216c0 27.583-8.444 53.188-22.877 74.39l-69.425-69.933 73.063-73.212c12.206 20.041 19.239 43.576 19.239 68.755zM510.368 375.845c27.1 0 52.287 8.159 73.269 22.132l-73.771 73.828-73.088-73.623c21.046-14.102 46.356-22.338 73.591-22.338zM377.996 508.216c0-24.349 6.603-47.144 18.075-66.745l71.774 72.388-67.659 67.713c-14.010-20.998-22.189-46.219-22.189-73.355zM510.368 640.588c-25.084 0-48.536-6.979-68.524-19.099l66.573-66.709 67.716 68.296c-19.379 11.12-41.819 17.512-65.765 17.512z" - ], - "isMulticolor": false, - "tags": [ - "target-arrows" - ], - "defaultCode": 60099, - "grid": 0, - "attrs": [] - }, - { - "id": 452, - "paths": [ - "M121.993 31.991l360.006 389.998 329.989 389.998-389.998-329.989-389.998-360.006 90.002-90.002zM873.705 544.819c-75.018-44.122-168.558-43.57-243.526 0.502l90.805 90.805c20.053-5.271 41.211-4.894 61.214 0.301l91.507-91.507v-0.1zM959.189 630.278l-91.507 91.507c5.12 20.003 5.471 41.161 0.201 61.214l90.805 90.805c44.072-74.943 44.624-168.483 0.502-243.526v0zM545.322 630.278c-44.047 74.968-44.599 168.508-0.477 243.526l91.507-91.507c-5.12-20.003-5.496-41.161-0.201-61.214l-90.83-90.805zM783 867.981c-20.053 5.271-41.211 4.919-61.214-0.301l-91.507 91.507c75.018 44.122 168.558 43.57 243.526-0.502l-90.805-90.805v0.1z" - ], - "isMulticolor": false, - "tags": [ - "target-laser" - ], - "defaultCode": 60100, - "grid": 0, - "attrs": [] - }, - { - "id": 453, - "paths": [ - "M631.634 512.948c0 65.255-52.706 120.471-120.471 120.471-65.255 0-120.471-52.706-120.471-120.471s52.706-120.471 120.471-120.471 120.471 52.706 120.471 120.471zM481.046 211.772h60.235c17.569 0 30.118 12.549 30.118 30.118v60.235c0 17.569-12.549 30.118-30.118 30.118h-60.235c-17.569 0-30.118-12.549-30.118-30.118v-60.235c0-17.569 15.059-30.118 30.118-30.118zM721.987 452.713h60.235c17.569 0 30.118 12.549 30.118 30.118v60.235c0 17.569-12.549 30.118-30.118 30.118h-60.235c-17.569 0-30.118-12.549-30.118-30.118v-60.235c0-17.569 12.549-30.118 30.118-30.118zM481.046 691.144h60.235c17.569 0 30.118 12.549 30.118 30.118v60.235c0 17.569-12.549 30.118-30.118 30.118h-60.235c-17.569 0-30.118-12.549-30.118-30.118v-60.235c0-15.059 15.059-30.118 30.118-30.118zM242.614 452.713h60.235c17.569 0 30.118 12.549 30.118 30.118v60.235c0 17.569-12.549 30.118-30.118 30.118h-60.235c-17.569 0-30.118-12.549-30.118-30.118v-60.235c0-17.569 12.549-30.118 30.118-30.118zM511.163 32.627c-266.039 0-479.373 215.843-479.373 479.373 0 266.039 215.843 479.373 479.373 479.373s479.373-215.843 479.373-479.373-213.333-479.373-479.373-479.373zM511.163 153.098c198.275 0 358.902 160.627 358.902 358.902s-160.627 358.902-358.902 358.902-358.902-160.627-358.902-358.902 160.627-358.902 358.902-358.902z" - ], - "isMulticolor": false, - "tags": [ - "targeted" - ], - "defaultCode": 60101, - "grid": 0, - "attrs": [] - }, - { - "id": 454, - "paths": [ - "M61.662 60.169c0 0 66.943-21.579 183.876 39.221 121.794 63.333 170.978 233.155 265.38 235.331 94.412-2.175 143.606-171.999 265.39-235.331 116.925-60.8 183.876-39.221 183.876-39.221v170.689c0 0-75.998-4.899-117.675 26.97-30.281 23.148-90.311 108.415-142.516 159.899 77.607 55.575 127.723 143.519 127.723 242.501 0 168.051-144.451 304.283-322.649 304.283s-322.659-136.232-322.659-304.283c0-101.891 53.111-192.094 134.643-247.324-51.031-51.83-108.349-132.642-137.704-155.087-41.685-31.868-117.685-26.97-117.685-26.97v-170.679zM358.315 659.89c0 79.887 65.853 144.645 147.088 144.645s147.099-64.766 147.099-144.645-65.853-144.645-147.099-144.645-147.088 64.768-147.088 144.645z" - ], - "isMulticolor": false, - "tags": [ - "taurus" - ], - "defaultCode": 60102, - "grid": 0, - "attrs": [] - }, - { - "id": 455, - "paths": [ - "M942.731 631.395c-13.755-13.755-31.48-22.192-51.676-25.685l-234.209-188.931c-19.359-19.357-48.885-24.977-81.623-18.594-2.718-7.754-6.884-14.662-12.609-20.386l-107.233-86.499 0.844-0.844c-3.899-3.899-8.418-6.966-13.399-9.284l-48.295-38.957c-14.388-14.388-37.627-16.805-62.626-9.042-1.179-7.257-4.138-13.624-9.034-18.521l-92.893-74.937c11.545-29.222 10.23-57.222-6.37-73.822-27.007-27.005-84.182-13.613-127.708 29.913s-56.92 100.703-29.913 127.708c16.556 16.554 44.45 17.904 73.586 6.461l74.996 92.972c4.898 4.899 11.269 7.858 18.527 9.037-7.763 24.999-5.346 48.238 9.041 62.624l43.432 53.841c1.555 2.327 3.306 4.52 5.282 6.548l86.871 107.69c5.723 5.725 12.629 9.891 20.383 12.609-6.383 32.74-0.763 62.267 18.594 81.626l188.941 234.225c3.495 20.188 11.931 37.905 25.682 51.654 53.355 53.355 166.316 26.896 252.31-59.098s112.451-198.955 59.098-252.31zM740.997 800.781c37.536-37.536 85.941-51.008 112.921-32.897 1.3 3.102 2.279 6.396 2.942 9.851-8.838 3.595-17.877 9.567-25.961 17.65-21.451 21.451-28.051 49.628-14.742 62.938 2.666 2.666 5.935 4.519 9.62 5.628-2.756 3.216-5.66 6.381-8.745 9.468-37.536 37.536-85.941 51.010-112.921 32.897-11.65-27.812 2.571-71.221 36.886-105.535z" - ], - "isMulticolor": false, - "tags": [ - "telescope" - ], - "defaultCode": 60103, - "grid": 0, - "attrs": [] - }, - { - "id": 456, - "paths": [ - "M653.793 402.866c-1.604-2.307-4.241-4.4-7.908-6.035-57.93-39.383-146.295-1.911-115.368 94.943 76.424 239.354 483.918 36.615 398.814-222.731-52.279-159.328-158.466-228.011-302.028-229.728v0.018c-184.577-2.213-394.111 106.696-475.777 265.878-115.856 225.806-57.19 442.806 69.963 671.687l380.472-0.003c1.467 0.058 2.955 0.085 4.487 0.043 0.296-0.008 0.58-0.033 0.874-0.043l107.446-0.002c-20.936-6.993-41.697-15.751-62.073-26.034 20.126-33.911 4.719-88.665-46.25-87.291-22.528 0.608-38.1 11.809-46.738 26.948-1.642-26.911-19.859-52.171-54.676-51.232-0.89 0.023-1.761 0.079-2.631 0.135 37.21-29.003 26.103-103.706-33.313-102.103-16.411 0.443-29.121 6.515-38.162 15.626 8.082-25.5-3.414-57.603-34.5-61.767 58.515-15.201 53.793-113.246-14.192-111.409-9.239 0.251-17.306 2.285-24.208 5.638 17.005-19.767 14.582-54.32-7.273-68.693 3.546 0.54 7.297 0.793 11.277 0.685 70.796-1.844 73.008-108.372 6.625-113.22 0.573-1.381 1.141-2.765 1.739-4.139 13.963-6.914 20.458-22.234 19.484-36.762 1.584-2.507 3.232-4.996 4.913-7.477 8.157 6.368 18.943 10.188 32.384 9.824 48.93-1.281 62.832-55.991 41.722-86.323 8.397-6.313 17.261-12.457 26.636-18.405 3.222-2.045 6.506-3.979 9.846-5.815 4.256 22.054 20.974 40.953 50.174 40.167 39.385-1.032 56.073-36.697 50.072-66.39 20.574-0.763 41.020 0.895 60.314 4.621-7.748 26.427 6.124 59.591 41.615 58.634 19.829-0.521 32.9-11.341 39.233-25.324 5.040 3.769 9.644 7.766 13.733 11.979 1.627 10.604 7.347 20.346 17.156 25.515 0.438 1.081 0.847 2.168 1.223 3.264 1.525 4.443 2.731 9.056 3.652 13.791-45.771 1.822-48.212 69.116-7.322 75.711-1.38 3.889-2.905 7.756-4.572 11.588-8.421 6.324-13.15 16.189-14.186 26.41-4.206 6.488-8.854 12.746-13.92 18.689-3.787-9.963-12.654-17.657-26.649-17.278-30.909 0.837-36.909 39.602-18.028 54.123-6.5 3.597-13.31 6.75-20.428 9.376-8.117 2.992-16.341 5.488-24.482 7.004 3.336-12.853-3.536-28.528-20.639-28.067-14.739 0.396-21.868 12.36-21.429 23.771-8.336-4.211-16.093-10.935-22.979-20.929 22.034-6.501 20.131-43.621-5.74-43.407 3.613-7.776 9.652-14.737 17.343-20.388 4.839 3.926 13.394 6.684 25.709 6.52 25.082-0.324 34.641-12.326 28.725-21.325 0.058 0.005 0.117 0.007 0.174 0.012-0.105-0.095-0.219-0.182-0.331-0.277z" - ], - "isMulticolor": false, - "tags": [ - "tentacle" - ], - "defaultCode": 60104, - "grid": 0, - "attrs": [] - }, - { - "id": 457, - "paths": [ - "M481.999 632.005h-119.994v-119.994l-90.002-60.009v-420.016h209.995v60.009l-90.002 60.009v119.994l90.002 60.009v299.997zM542.009 632.005v-299.997l90.002-60.009v-119.994l-90.002-60.009v-60.009h209.995v419.991l-90.002 60.009v119.994l-119.994 0.025zM662.003 691.99c60.009 0 90.002 29.992 90.002 60.009h-480c0-29.992 29.992-60.009 90.002-60.009h299.997zM811.988 811.983c29.992 0 60.009 29.992 60.009 60.009v119.994h-719.987v-119.994c0-29.992 29.992-60.009 60.009-60.009h599.969zM601.993 211.99c0 49.694-40.282 90.002-90.002 90.002s-90.002-40.282-90.002-90.002c0-49.694 40.282-90.002 90.002-90.002s90.002 40.307 90.002 90.002z" - ], - "isMulticolor": false, - "tags": [ - "tesla" - ], - "defaultCode": 60105, - "grid": 0, - "attrs": [] - }, - { - "id": 458, - "paths": [ - "M899.269 618.354c-23.851 23.265-46.925 44.809-72.761 58.199-1.816-28.834-5.868-55.687-13.17-79.662 18.175-24.758 30.952-51.274 34.585-83.826h-0.003c-18.808 17.961-39.166 26.986-61.395 28.806-28.411-38.098-74.658-60.403-147.915-58.784-4.253-25.256-10.455-48.708-19.443-69.587 11.493-22.602 16.635-51.598 15.871-81.852v0.002c-12.525 15.569-29.008 26.469-47.682 32.143-33.294-35.247-84.785-53.676-164.226-46.267 23.128-12.879 43.025-31.405 56.763-60.698-20.199 8.718-39.655 10.245-58.585 5.195-3.5-68.174-33.538-114.944-77.428-142.174-9.064-28.239-27.195-56.231-62.82-83.746 3.959 20.016 1.425 39.401-5.404 58.37-12.824-2.29-26.094-3.533-39.65-3.739-7.679-28.933-33.625-72.657-33.625-72.657l-127.028 2.068c37.561 7.781 56.158 38.994 56.273 91.694-75.766 30.332-100.080 2.502-110.615-44.685l-5.147 125.406c28.555 9.248 63.52 12.818 105.821 9.924-6.416 55.249-2.902 98.55 9.488 131.172-13.938 11.7-33.685 18.37-56.171 22.673 26.26 18.584 57.633 28.261 89.17 25.929 34.601 29.843 87.865 37.23 156.33 26.33 0.971 69.383 18.546 111.115 45.626 137.017-3.55 23.473-18.185 41.825-38.498 56.083h0.003c34.661 0.989 64.445-8.566 90.72-25.72 33.157 11.256 71.232 14.323 108.422 18.866-1.751 14.607-2.748 28.163-3.072 40.773-22.304 6.953-44.61 3.189-66.914-2.31l0.002 0.003c20.612 32.457 43.77 59.464 73.902 71.533 20.341 75.265 81.746 93.089 149.529 101.984l-2.973 2.9c1.398 0.795 2.81 1.55 4.211 2.334-9.221 24.613-27.915 45.916-55.677 72.986h0.003c110.818 53.918 231.965 82.745 359.758 95.429-5.351-125.252-40.432-244.734-86.275-362.113zM337.9 316.697c-109.184 61.276-140.674-19.002-141.656-130.23 89.028-36.667 151.515 4.669 141.656 130.23zM403.755 409.826c78.394-19.15 134.032 12.218 134.201 88.159-95.272 39.293-120.79-16.209-134.201-88.159zM593.873 575.092c91.362-34.751 164.426 0.822 141.656 130.227-100.564 58.049-141.935-21.878-141.656-130.227z" - ], - "isMulticolor": false, - "tags": [ - "thorn-arrow" - ], - "defaultCode": 60106, - "grid": 0, - "attrs": [] - }, - { - "id": 459, - "paths": [ - "M866.281 805.626c22.055-71.546 26.644-150.411 21.030-228.726 83.626-40.805 119.758-154.176 65.706-269.364-9.386 70.015-56.054 107.119-94.706 96.966-17.51-53.96-46.285-102.333-83.069-143.18 18.94-77.203-31.296-168.554-136.037-211.432 36.286 49.65 35.927 97.203 11.409 116.589-51.507-25.884-108.372-41.426-166.822-44.403-33.635-64.367-117.386-100.564-205.126-72.764 53.861 15.403 81.708 51.863 74.065 79.434-52.742 8.483-102.173 24.466-145.209 49.341-58.348-33.094-140.579-12.637-179.427 65.904 38.798-23.569 80.923-17.365 96.256 3.784-13.586 16.437-25.617 34.656-35.833 54.787l0.008 0.005c-96.418 189.973-58.375 374.457 122.855 446.678 136.603 54.434 316.232-46.807 258.88-206.404-25.804 171.24-274.043 101.937-246.37-53.691 28.634-161.024 257.385-209.94 349.993-49.545 70.367 121.883 5.362 244.014-107.121 330.628-94.758 72.965-249.996 89.761-439.63 29.151v206.404h691.514c22.409-14.658 42.158-30.987 59.532-48.703 95.249 10.108 191.242-64.432 213.376-190.918-44.952 48.004-96.495 58.807-125.275 39.458z" - ], - "isMulticolor": false, - "tags": [ - "thorny-vine" - ], - "defaultCode": 60107, - "grid": 0, - "attrs": [] - }, - { - "id": 460, - "paths": [ - "M392.595 547.1h233.226v54.813h71.986v67.629h47.826v-108.793h49.474v108.793h58.112v-122.441h61.802v-89.79l-524.759-0.002c-18.457-65.422-72.435-113.113-136.434-113.113l-0.005-0.008c-79.199 0-143.437 72.599-143.437 162.094s64.235 162.089 143.437 162.094c66.649 0 122.681-51.644 138.771-121.278zM210.074 547.67c-23.773 0-43.043-19.271-43.043-43.043s19.272-43.043 43.043-43.043 43.043 19.271 43.043 43.043c0 23.773-19.271 43.043-43.043 43.043zM304.258 222.434h233.226v122.441h51.998v-71.334h49.473v71.334h125.925v-51.608h-64.711v-57.722h64.711v-13.112h61.802v-89.79h-524.757c-18.457-65.422-72.435-113.113-136.434-113.113l-0.005-0.008c-79.199 0-143.437 72.599-143.437 162.094s64.235 162.089 143.437 162.094c66.649 0 122.681-51.644 138.771-121.278zM84.411 181.657c0-52.722 36.296-95.459 81.068-95.459s81.063 42.737 81.063 95.459c0 52.722-36.296 95.459-81.063 95.459s-81.068-42.737-81.068-95.459zM1003.889 858.085v-68.235h-515.429l-122.441-109.611-124.778 68.803v184.248l124.778 66.466 122.441-120.114h240.222v16.372h84.548v49.474h-84.548v56.596h275.207v-94.527h-88.223v-49.474l88.223 0.002zM325.036 869.122c-16.488 0-29.855-13.367-29.855-29.855s13.367-29.855 29.855-29.855 29.855 13.367 29.855 29.855-13.365 29.855-29.855 29.855z" - ], - "isMulticolor": false, - "tags": [ - "three-keys" - ], - "defaultCode": 60108, - "grid": 0, - "attrs": [] - }, - { - "id": 461, - "paths": [ - "M338.446 90.779v840.687zM90.852 683.504h840.458zM677.893 90.779v840.687zM90.852 344.057h836.755zM453.054 453.042l116.221 116.221zM454.572 567.745l113.185-113.185zM788.627 109.374l116.221 116.221zM790.147 224.079l113.185-113.185zM113.609 796.647l116.221 116.221zM115.127 911.352l113.185-113.185zM329.918 90.779h16.705v840.687h-16.705v-840.687zM670.695 90.779h15.034v840.689h-15.034v-840.689zM90.852 672.354h840.458v11.15h-840.458v-11.15zM90.852 338.483h840.458v11.15h-840.458v-11.15zM908.282 220.44l-8.231 8.275-114.904-114.288 8.231-8.275 114.904 114.288zM793.112 228.523l-8.192-8.314 115.442-113.756 8.192 8.314-115.442 113.756zM572.548 562.886l-8.231 8.275-114.904-114.288 8.231-8.275 114.904 114.288zM457.348 570.969l-8.192-8.314 115.442-113.756 8.192 8.314-115.442 113.756zM233.324 907.712l-8.231 8.275-114.904-114.288 8.231-8.275 114.904 114.288zM118.091 915.795l-8.192-8.314 115.442-113.756 8.192 8.314-115.442 113.756zM511.165 90.779c-44.662 0-80.868 34.343-80.868 76.708s36.206 76.708 80.868 76.708 80.868-34.343 80.868-76.708-36.206-76.708-80.868-76.708zM511.165 232.558c-37.886 0-68.6-29.133-68.6-65.072s30.713-65.072 68.6-65.072 68.6 29.133 68.6 65.072-30.713 65.072-68.6 65.072zM171.72 90.779c-44.662 0-80.868 34.343-80.868 76.708s36.206 76.708 80.868 76.708 80.868-34.343 80.868-76.708-36.206-76.708-80.868-76.708zM171.72 232.558c-37.886 0-68.6-29.133-68.6-65.072s30.713-65.072 68.6-65.072 68.6 29.133 68.6 65.072-30.713 65.072-68.6 65.072zM846.739 433.226c-44.662 0-80.868 34.343-80.868 76.708s36.206 76.708 80.868 76.708c44.662 0 80.868-34.343 80.868-76.708s-36.206-76.708-80.868-76.708zM846.739 575.005c-37.886 0-68.6-29.133-68.6-65.072s30.713-65.072 68.6-65.072c37.886 0 68.6 29.133 68.6 65.072 0 35.937-30.713 65.072-68.6 65.072zM509.494 778.051c-44.662 0-80.868 34.343-80.868 76.708s36.206 76.708 80.868 76.708 80.868-34.343 80.868-76.708-36.206-76.708-80.868-76.708zM509.494 919.829c-37.886 0-68.6-29.133-68.6-65.072s30.713-65.072 68.6-65.072 68.6 29.133 68.6 65.072-30.713 65.072-68.6 65.072z" - ], - "isMulticolor": false, - "tags": [ - "tic-tac-toe" - ], - "defaultCode": 60109, - "grid": 0, - "attrs": [] - }, - { - "id": 462, - "paths": [ - "M511.992 31.987c-270.005 0-480 119.994-480 240.013 0 60.009 29.992 90.002 60.009 119.994-29.992 29.992-60.009 108.825-60.009 150.011v329.989c0 60.009 60.009 119.994 119.994 119.994h719.987c60.009 0 119.994-29.992 119.994-119.994v-360.006c0-37.923-29.992-90.002-60.009-119.994 29.992-29.992 60.009-60.009 60.009-119.994 0.025-119.994-209.97-240.013-479.975-240.013zM511.992 152.005c209.995 0 360.006 29.992 360.006 119.994 0 29.992-29.992 90.002-60.009 119.994 29.992 29.992 60.009 119.994 60.009 150.011v329.989h-719.987v-329.989c0-29.992 29.992-119.994 60.009-150.011-29.992-29.992-60.009-90.002-60.009-119.994 0-90.002 149.986-119.994 359.981-119.994zM512.017 215.002l21.208 21.208c11.721 11.721 11.721 30.72 0 42.416l-254.569 254.569c-11.721 11.721-30.72 11.721-42.416 0l-21.208-21.208c-11.721-11.721-11.721-30.72 0-42.416l254.569-254.569c11.696-11.696 30.695-11.696 42.416 0zM713.529 289.242l21.208 21.208c11.721 11.721 11.721 30.72 0 42.416l-381.816 381.867c-11.721 11.721-30.72 11.721-42.416 0l-21.208-21.208c-11.721-11.721-11.721-30.72 0-42.416l381.842-381.842c11.696-11.721 30.695-11.721 42.391-0.025zM787.794 490.754l21.208 21.208c11.721 11.721 11.721 30.72 0 42.416l-254.569 254.569c-11.721 11.721-30.72 11.721-42.416 0l-21.208-21.208c-11.721-11.721-11.721-30.72 0-42.416l254.569-254.569c11.696-11.696 30.695-11.696 42.416 0z" - ], - "isMulticolor": false, - "tags": [ - "toast" - ], - "defaultCode": 60110, - "grid": 0, - "attrs": [] - }, - { - "id": 463, - "paths": [ - "M178.791 799.308v177.433h69.447c-9.993-61.943-36.259-120.586-69.447-177.433zM178.792 372.175v0l-0.002 404.812c59.516 43.165 110.539 90.018 122.775 152.005-7.004-88.782-8.311-177.095 29.151-265.878 10.511 76.912 16.128 153.981 53.642 230.894 50.549-106.429 119.733-150.825 204.075-144.599-59.313 51.795-112.344 110.295-149.265 190.081 62.853-60.299 133.529-77.278 207.571-81.629-49.598 35.058-95.025 69.866-118.46 118.883h171.381c13.837-56.592-8.778-110.405-35.085-167.48 55.092 36.274 102.016 80.701 123.61 155.093 7.043-77.872-7.662-147.129-30.316-213.395-0.002 0-0.002-0.002-0.003-0.002v-0.007c0.002 0.003 0.002 0.007 0.003 0.008 35.631 17.211 61.138 44.014 76.706 80.402v-459.19c-0.002-471.042-655.784-470.557-655.784 0z" - ], - "isMulticolor": false, - "tags": [ - "tombstone" - ], - "defaultCode": 60111, - "grid": 0, - "attrs": [] - }, - { - "id": 464, - "paths": [ - "M492.698 46.078c-23.32-0.409-45.988 8.509-61.802 30.319-58.433 80.569-78.823 157.055-88.625 222.731-9.011 60.369-26.968 119.247-61.802 173.754-63.483 99.331-131.498 249.083-146.933 334.679-11.71 64.671 35.756 83.971 65.304 13.994 40.42-95.723 130.768-251.127 243.719-207.571 102.333 39.453 17.819 243.931-44.313 304.36-50.141 48.768-14.381 102.766 47.809 44.313 65.987-62.023 156.944-184.213 188.914-293.865 12.445-42.687 31.529-87.409 68.803-108.45 79.494-44.882 163.384-117.788 195.91-265.878 21.766-99.099-100.87-140.619-170.255-74.632-10.586-100.629-92.82-124.48-152.765-71.134 20.109-55.174-32.664-101.718-83.963-102.621z" - ], - "isMulticolor": false, - "tags": [ - "tooth" - ], - "defaultCode": 60112, - "grid": 0, - "attrs": [] - }, - { - "id": 465, - "paths": [ - "M43.217 933.713l325.213-382.263 128.439 140.99-410.838 288.27-42.814-46.997zM379.548 511.506l158.127 173.577 149.94-99.874-194.685-213.71-113.382 140.007zM951.884 102.6c-10.537 60.272-249.572 215.419-164.667 33.667-160.17 90.61-214.764 46.78-156.807-11.279-109.469 5.593-125.289 176.018-110.498 224.405l34.836 38.239c-4.27-62.334 0.809-96.782 38.937-142.754 27.484 41.159 36.919 67.318 103.945 13.94-18.754 106.867 109.033 37.402 177.202 21.808-30.446 28.051-70.208 65.361-77.64 110.777-2.479 15.146 12.417 35.79 28.226 51.167-18.855 4.464-82.852 17.797-77.037 52.361 5.813 34.564 24.265 23.716 7.016 30.494-24.766 5.523-42.268 11.162-79.082-4.347l37.693 41.376c56.688 29.531 147.585 14.61 166.932-29.681-29.506-2.439-54.157-9.343-65.888-23.034 87.902-16.653 133.275-78.38 171.249-149.843-67.166 37.836-84.128 35.541-111.766 32.603 70.91-28.68 93.575-217.526 77.351-289.899v0z" - ], - "isMulticolor": false, - "tags": [ - "torch" - ], - "defaultCode": 60113, - "grid": 0, - "attrs": [] - }, - { - "id": 466, - "paths": [ - "M905.017 980.080l-57.307-185.374h-78.581v-376.693l122.113-151.378v-221.879h-128.636v104.655h-78.302v-104.655h-130.035v104.655h-76.9v-104.655h-130.035v104.655h-76.902v-104.655h-128.648v221.879l122.113 151.378v376.693h-78.579l-57.307 185.374z" - ], - "isMulticolor": false, - "tags": [ - "tower" - ], - "defaultCode": 60114, - "grid": 0, - "attrs": [] - }, - { - "id": 467, - "paths": [ - "M965.286 988.368c-51.325 2.442-688.702-1.372-688.702-1.372-387.221-388.841 583.007-517.551-16.678-836.92l-41.964 44.241-55.875-146.629 180.323 14.039-36.101 40.558c750.018 218.558-100.845 628.191 658.998 886.084v0z" - ], - "isMulticolor": false, - "tags": [ - "trail" - ], - "defaultCode": 60115, - "grid": 0, - "attrs": [] - }, - { - "id": 468, - "paths": [ - "M865.896 329.132c-20.909-9.976-43.708-13.882-67.272-12.276 30.257-9.589 60.159-17.836 88.993-24.035 34.32-33.323 82.476-89.066 98.678-132.955-50.046-8.638-121.271 10.591-164.481 18.982-19.468 22.232-41.13 44.112-64.076 65.451 12.853-19.391 20.674-40.81 22.465-63.588 6.259-79.677-92.646-140.318-165.061-101.406 46.476 7.614 73.979 42.614 74.319 91.345 0.55 79.105-53.337 123.020-174.608 175.127l-0.002 0.003c65.030 0.533 123.258-13.33 168.526-37.238-51.527 41.762-104.69 80.248-151.402 113.627 52.642-22.944 112.678-49.14 174.189-72.712-43.112 27.272-83.996 70.626-115.897 126.943l0.005 0.002c105.763-78.97 170.737-103.68 238.968-63.652 42.032 24.66 58.59 65.977 41.947 110.034 69.904-43.259 66.839-159.233-5.29-193.651zM439.301 476.399l0.005-0.002c-31.899-56.312-72.779-99.664-115.889-126.938 61.507 23.572 121.542 49.767 174.182 72.711-46.715-33.381-99.878-71.869-151.407-113.631 45.266 23.908 103.498 37.771 168.527 37.24l-0.002-0.003c-121.271-52.109-175.157-96.022-174.608-175.127 0.339-48.731 27.845-83.731 74.319-91.345-72.415-38.912-171.32 21.731-165.061 101.406 1.791 22.779 9.612 44.199 22.465 63.59-22.944-21.339-44.607-43.218-64.074-65.451-43.208-8.391-114.436-27.62-164.481-18.982 16.2 43.887 64.357 99.634 98.678 132.955 28.831 6.197 58.727 14.445 88.981 24.031-23.56-1.605-46.356 2.302-67.262 12.276-72.129 34.417-75.196 150.393-5.29 193.651-16.643-44.055-0.085-85.375 41.947-110.034 68.232-40.028 133.207-15.318 238.97 63.652zM654.45 716.117c-68.782-39.076-79.87-107.7-64.36-238.779l-0.003-0.003c-32.82 55.785-49.924 112.869-51.987 163.84-10.34-65.057-17.674-130.148-24.123-187.208-5.553 57.145-12.301 122.427-22.703 187.932-1.929-51.155-19.038-108.514-52.014-164.565l-0.003 0.003c15.51 131.079 4.422 199.703-64.36 238.779-42.372 24.072-86.434 17.75-116.267-18.691 2.511 82.171 104.48 137.503 170.352 92.245 18.831-12.939 33.47-30.423 43.837-51.248-7.008 30.54-15.124 60.239-24.644 88.214 14.338 41.615 33.299 112.914 65.803 151.936 29.908-35.974 54.107-105.552 65.803-151.936-9.049-28.071-16.857-58.089-23.682-89.086 10.39 21.21 25.174 39.001 44.268 52.12 65.872 45.258 167.842-10.075 170.352-92.245-29.833 36.443-73.893 42.762-116.267 18.693z" - ], - "isMulticolor": false, - "tags": [ - "trefoil-lily" - ], - "defaultCode": 60116, - "grid": 0, - "attrs": [] - }, - { - "id": 469, - "paths": [ - "M923.832 922.788l-107.543-251.042-47.877 47.877-271.064-271.064 96.74-96.74 189.121 189.119-46.685 46.685 251.044 107.542-107.543-251.042-49.013 49.013-235.784-235.782-126.645 126.644-351.162-351.162-83.138-0.003v83.138l350.654 351.675-126.595 126.595 235.784 235.782-48.96 48.96 251.044 107.542-107.543-251.042-46.74 46.74-189.121-189.119 96.74-96.74 271.064 271.064-47.821 47.821z" - ], - "isMulticolor": false, - "tags": [ - "trident" - ], - "defaultCode": 60117, - "grid": 0, - "attrs": [] - }, - { - "id": 470, - "paths": [ - "M737.429 511.148l226.267 391.906h-452.534l226.267-391.906zM284.903 511.148l226.267 391.906h-452.534l226.267-391.906zM511.16 119.248l226.267 391.906h-452.536l226.269-391.906z" - ], - "isMulticolor": false, - "tags": [ - "triforce" - ], - "defaultCode": 60118, - "grid": 0, - "attrs": [] - }, - { - "id": 471, - "paths": [ - "M691.8 885.862c-111.365-59.293-155.71-166.598-35.526-188.241-63.044-13.75-91.144-36.986-46.867-72.455 31.452-14.274 61.054-35.227 88.112-61.829 13.279 9.535 25.617 20.042 36.861 31.392-8.197 8.337-16.673 16.468-25.426 24.379l32.345 59.113c157.978-143.674 232.024-358.474 219.717-569.068l-54.65 15.866c0.902 15.205 1.263 30.369 1.108 45.47h-51.098c1.402-19.558 2.147-39.42 2.147-59.552h-20.286c-5.598-27.27-149.736-49.114-326.746-49.114-177.012 0-321.148 21.841-326.746 49.114h-20.265c0 20.133 0.745 39.994 2.147 59.552h-51.778c-0.241-15.891 0.007-31.806 0.753-47.7l-53.537-12.52c-17.061 213 65.93 420.314 218.606 567.952l31.229-59.113c-8.372-6.936-16.439-14.099-24.237-21.452 11.68-12.211 24.579-23.47 38.541-33.623 26.865 26.27 56.221 46.989 87.396 61.138 44.276 35.467 16.175 58.704-46.867 72.453 120.176 21.641 75.843 128.935-35.508 188.231-48.312 8.369-78.337 20.072-78.337 33.025 0 25.443 115.777 46.067 258.593 46.067s258.593-20.624 258.593-46.067c0-12.95-29.998-24.648-78.275-33.017zM511.504 75.19c129.457 0 235.042 15.859 240.585 35.746v0c0.075 0.271 0.135 0.54 0.177 0.81 0.038 0.277 0.068 0.555 0.068 0.834 0 4.517-5.16 8.847-14.613 12.856-2.701 1.146-5.753 2.265-9.136 3.354-4.228 1.361-8.972 2.678-14.192 3.942s-10.918 2.476-17.054 3.63c-1.226 0.231-2.471 0.459-3.734 0.685-2.524 0.453-5.115 0.895-7.774 1.328-1.33 0.217-2.674 0.431-4.038 0.641-6.811 1.057-14.025 2.051-21.608 2.977-1.517 0.185-3.047 0.368-4.592 0.546-10.818 1.256-22.339 2.374-34.454 3.338-6.922 0.551-14.040 1.051-21.332 1.497-10.937 0.67-22.266 1.218-33.917 1.635-17.478 0.626-35.685 0.957-54.387 0.957s-36.909-0.331-54.387-0.957c-11.652-0.418-22.981-0.967-33.917-1.635-7.292-0.446-14.41-0.947-21.332-1.497-12.116-0.964-23.636-2.081-34.454-3.338-1.545-0.179-3.077-0.362-4.592-0.546-7.582-0.925-14.797-1.919-21.608-2.977-1.361-0.212-2.708-0.426-4.038-0.641-2.658-0.433-5.25-0.875-7.774-1.328-1.261-0.226-2.506-0.454-3.734-0.685-6.136-1.154-11.832-2.367-17.054-3.63-5.22-1.265-9.964-2.581-14.192-3.942-3.383-1.089-6.435-2.208-9.136-3.354-9.455-4.009-14.613-8.339-14.613-12.856 0-0.279 0.028-0.556 0.068-0.834 0.042-0.271 0.102-0.541 0.177-0.81v0c5.543-19.887 111.128-35.746 240.585-35.746zM904.698 224.022c-11.154 119.050-55.383 231.942-129.859 325.102-10.865-12.093-22.795-23.41-35.645-33.869 55.517-74.64 95.514-176.085 111.551-291.232h53.953zM172.258 224.022c16.092 115.533 56.298 217.28 112.105 291.99-13.925 11.461-26.739 23.963-38.284 37.385-77.198-92.763-117.897-208.976-128.488-329.374h54.666z" - ], - "isMulticolor": false, - "tags": [ - "trophy" - ], - "defaultCode": 60119, - "grid": 0, - "attrs": [] - }, - { - "id": 472, - "paths": [ - "M784.047 696.93h-3.186c25.78-19.787 41.433-45.88 41.433-74.525 0.002-59.27-66.986-108.041-152.155-112.184 57.095-191.229-269.843-134.558-216.121-269.99-116.632 42.24-130.633 153.446-102.502 234.912 9.881 12.694 37.292 25.274 62.609 34.788h-49.588c-90.682 0-164.565 50.495-164.565 112.476 0 14.204 3.891 27.778 10.963 40.272 9.605 11.189 40.765 23.642 73.366 34.251h-50.37c-107.164 0-194.473 63.782-194.473 142.064s87.312 141.507 194.473 141.507h550.115c107.164 0 193.711-63.226 193.711-141.507s-86.547-142.064-193.711-142.064zM111.631 668.762c117.952-224.061-62.426-222.325 9.254-371.49-174.778 154.948 49.862 129.308-9.254 371.49zM894.241 671.859c115.187-226.521-3.445-307.304-21.213-526.139-71.059 300.050 69.684 249.088 21.213 526.139zM276.574 455.919c-57.217-168.96 102.432-258.711-41.287-421.105 84.614 213.752-124.048 228.895 41.287 421.105z" - ], - "isMulticolor": false, - "tags": [ - "turd" - ], - "defaultCode": 60120, - "grid": 0, - "attrs": [] - }, - { - "id": 473, - "paths": [ - "M334.987 63.107l0.010-0.003h-0.010zM460.681 404.004l-0.008-0.007-0.002 0.003zM985.768 735.169c-280.107-110.627-224.991-246.194-525.086-331.166 80.305 55.679 127.791 109.962 150.857 159.863-163.295-63.366-328.422-67.987-457.334 17.603 84.396-204.013 346.219-281.749 451.444-235.051-3.276 9.401-7.23 18.524-11.802 27.262l306.652 61.508c4.161-10.786 7.99-21.609 11.546-32.461l0.631 0.241c20.213-34.55 16.949-64.146 0.149-95.581-2.337 23.433-12.029 43.813-29.467 67.12-51.922 5.813-99.333-30.743-106.586-82.807-7.377-52.946 29.564-101.845 82.508-109.221 16.559-2.307 32.716-0.272 47.333 5.229 14.455 32.489 20.366 57.628 16.025 84.122 20.276-21.646 31.151-44.493 28.144-73.793 2.153-26.061 3.57-52.201 4.537-78.389-297.892 44.249-317.946-133.005-620.322-56.544 114.541 9.488 188.785 45.642 232.162 92.705-47.999-10.24-98.81-14.032-150.571-11.64l-0.005 0.008c-130.688 6.030-265.811 51.706-371.998 132.94v704.433h138.275c49.090-247.998 299.718-302.9 408.543-246.201-12.756 14.899-28.256 28.022-45.697 39.079l234.812 206.596c9.076-7.323 17.874-14.847 26.45-22.535l0.322 0.396c34.774-19.818 46.747-47.082 47.914-82.703-13.816 19.225-32.529 32.065-59.517 43.578-47.645-21.038-70.277-76.26-50.572-124.865 20.084-49.54 76.526-73.417 126.066-53.333 15.524 6.294 28.522 16.16 38.436 28.264-3.74 35.152-11.199 59.768-28.139 80.468 28.204-8.556 48.963-22.78 61.046-49.334 14.939-21.547 29.277-43.534 43.245-65.792zM653.279 140.535c17.223-2.399 33.13 9.619 35.531 26.841s-9.619 33.132-26.841 35.531c-0.845 0.117-1.684 0.174-2.521 0.222-0.957 0.057-1.908 0.062-2.851 0.033-0.070-0.002-0.142 0-0.214-0.003-0.899-0.035-1.787-0.115-2.669-0.224-0.115-0.015-0.232-0.023-0.347-0.040-0.842-0.114-1.672-0.269-2.494-0.449-0.152-0.033-0.304-0.062-0.456-0.099-0.783-0.184-1.555-0.404-2.317-0.646-0.185-0.058-0.371-0.115-0.553-0.177-0.723-0.244-1.433-0.52-2.133-0.814-0.214-0.090-0.426-0.18-0.638-0.276-0.662-0.296-1.31-0.616-1.948-0.956-0.237-0.127-0.473-0.257-0.707-0.389-0.598-0.339-1.184-0.695-1.757-1.071-0.257-0.169-0.509-0.344-0.762-0.521-0.533-0.373-1.057-0.757-1.567-1.161-0.272-0.215-0.536-0.441-0.8-0.667-0.469-0.398-0.93-0.803-1.376-1.229-0.279-0.267-0.545-0.545-0.814-0.822-0.406-0.418-0.81-0.839-1.193-1.278-0.277-0.319-0.538-0.653-0.803-0.984-0.346-0.431-0.692-0.862-1.016-1.311-0.267-0.374-0.515-0.765-0.767-1.151-0.287-0.439-0.58-0.874-0.844-1.328-0.251-0.429-0.473-0.877-0.703-1.321-0.231-0.443-0.471-0.877-0.682-1.333-0.226-0.488-0.416-0.997-0.616-1.5-0.175-0.436-0.366-0.865-0.521-1.311-0.199-0.57-0.354-1.161-0.521-1.746-0.115-0.406-0.252-0.8-0.352-1.213-0.194-0.8-0.336-1.622-0.468-2.449-0.033-0.212-0.089-0.414-0.119-0.626-0.005-0.042-0.007-0.082-0.012-0.124-0.105-0.778-0.157-1.552-0.205-2.324-0.025-0.479-0.048-0.959-0.057-1.437 0 0-0.002 0-0.002 0-0.247-15.669 11.197-29.432 27.115-31.649zM731.101 643.249c-6.533 16.115-24.897 23.884-41.010 17.35s-23.883-24.895-17.35-41.012c6.533-16.115 24.897-23.884 41.010-17.35s23.883 24.897 17.35 41.012z" - ], - "isMulticolor": false, - "tags": [ - "two-dragons" - ], - "defaultCode": 60121, - "grid": 0, - "attrs": [] - }, - { - "id": 474, - "paths": [ - "M972.782 623.302c-46.242 197.112-389.282 252.403-446.786 351.989 0.002-125.678-260.041-322.772-211.9-528.484 46.235-197.558 299.093-175.348 349.795 13.867 141.893-141.895 354.454-31.605 308.891 162.629v0zM41.018 203.878c23.609 100.643 198.75 128.875 228.106 179.711-0.002-64.165 132.768-164.789 108.187-269.823-23.605-100.861-152.705-89.519-178.587 7.079-72.447-72.437-180.971-16.135-157.706 83.033z" - ], - "isMulticolor": false, - "tags": [ - "two-hearts" - ], - "defaultCode": 60122, - "grid": 0, - "attrs": [] - }, - { - "id": 475, - "paths": [ - "M514.756 38.795c-255.455 0-462.803 207.347-462.803 462.803 0 111.284 39.383 213.194 104.922 292.951l-41.555 72.2h264.384l-132.45-229.062-44.672 77.913c-41.727-60.86-65.967-134.704-65.967-214.001 0-208.701 169.434-378.137 378.137-378.137s378.137 169.434 378.137 378.137c0 78.091-23.315 151.083-63.889 211.405l-43.629-75.315-132.455 229.062h264.386l-43.112-74.797c64.345-79.436 103.366-180.229 103.366-290.353 0-255.455-207.347-462.803-462.803-462.803l0.003-0.002zM522.917 189.707c-100.451-3.959-228.915 53.28-265.878 209.32l121.278 28.57c53.844-152.235 181.42-141.397 226.229-57.139 53.458 100.526-179.031 214.181-167.923 380.158h155.093c12.96-195.97 237.573-246.552 118.946-458.288-35.828-63.946-109.62-99.54-187.744-102.619v-0.003h-0.002zM631.833 887.639c0 63.894-51.795 115.689-115.687 115.689s-115.687-51.795-115.687-115.689 51.795-115.689 115.687-115.689 115.687 51.795 115.687 115.689z" - ], - "isMulticolor": false, - "tags": [ - "uncertainty" - ], - "defaultCode": 60123, - "grid": 0, - "attrs": [] - }, - { - "id": 476, - "paths": [ - "M34.737 749.65c205.803 0 214.146-2.781 214.146-2.781 265.435 431.388 475.584-155.574 502.825-367.922l-77.755-0.337 152.113-265.533 146.073 264.719-75.65 3.118c-174.505 608.895-642.223 635.72-861.752 368.736z" - ], - "isMulticolor": false, - "tags": [ - "underhand" - ], - "defaultCode": 60124, - "grid": 0, - "attrs": [] - }, - { - "id": 477, - "paths": [ - "M391.998 278.705c-122.353 0-223.322 91.658-238.13 209.995h-121.876v60.009h121.876c14.808 118.337 115.777 209.995 238.13 209.995h29.992c16.615 0 29.992-13.377 29.992-29.992v-60.009h90.002v-60.009h-90.002v-180.003h90.002v-60.009h-90.002v-60.009c0-16.615-13.377-29.992-29.992-29.992l-29.992 0.025zM811.988 278.705c-16.615 0-29.992 13.377-29.992 29.992v60.009h60.009v60.009h-60.009v180.003h60.009v60.009h-60.009v60.009c0 16.615 13.377 29.992 29.992 29.992h180.003v-480l-180.003-0.025z" - ], - "isMulticolor": false, - "tags": [ - "unplugged" - ], - "defaultCode": 60125, - "grid": 0, - "attrs": [] - }, - { - "id": 478, - "paths": [ - "M787.327 175.715c-35.616-31.001-84.052-1.669-134.328 37.906-1.545-18.437-14.042-25.924-14.042-45.908 0 0 51.382-11.692 63.896-31.948 11.197-18.116 12.948-46.985 0-63.896-40.238-52.55-159.744-51.778-191.678-51.778-31.948 0-151.45-0.77-191.678 51.778-12.948 16.91-11.197 45.784 0 63.896 12.519 20.254 63.896 31.948 63.896 31.948 0 14.638-14.247 24.003-14.176 47.664-52.451-40.121-103.080-70.86-139.008-38.361-64.318 58.166 3.737 187.526 41.667 261.392-24.214 64.181-32.35 128.434-16.305 176.574 31.948 95.847 127.796 159.744 127.796 223.628 0 31.948-31.948 31.948-31.948 63.896s63.896 95.847 159.744 95.847c95.847 0 159.744-63.896 159.744-95.847 0-31.948-31.948-31.948-31.948-63.896 0-63.896 95.847-127.796 127.796-223.628 16.052-48.156 7.903-112.438-16.331-176.641 36.465-74.496 102.462-205.58 36.904-262.627zM383.365 263.561c-33.189 33.189-62.543 74.042-85.418 117.245-31.555-53.515-88.081-134.543-43.94-175.221 29.676-27.356 109.194 32.648 122.771 43.267 1.819 4.572 3.981 9.442 6.613 14.709h-0.027zM646.445 246.911c21.083-16.561 89.81-66.862 117.635-42.179 44.692 39.635-9.527 121.126-40.14 175.241-22.81-42.898-52.003-83.435-84.982-116.412 3.055-6.109 5.516-11.625 7.487-16.65z" - ], - "isMulticolor": false, - "tags": [ - "vase" - ], - "defaultCode": 60126, - "grid": 0, - "attrs": [] - }, - { - "id": 479, - "paths": [ - "M362.006 362.001c29.992 0 119.994-119.994 60.009-209.995 29.992-29.992 29.992-60.009 90.002-60.009s119.994 90.002 119.994 150.011-60.009 119.994-150.011 180.003-240.013 180.003-240.013 329.989c0 119.994 90.002 240.013 240.013 240.013s299.997-60.009 299.997-240.013c0-119.994-119.994-180.003-180.003-180.003-90.002 0-150.011 60.009-180.003 150.011 90.002-119.994 270.005-119.994 270.005 29.992 0 90.002-90.002 150.011-209.995 150.011-60.009 0-119.994-60.009-119.994-150.011s90.002-180.003 180.003-240.013 180.003-150.011 180.003-240.013c0-119.994-90.002-240.013-209.995-240.013-60.009 0-119.994 60.009-150.011 90.002s-90.002 29.992-90.002 119.994c0 30.042 59.984 120.044 90.002 120.044z" - ], - "isMulticolor": false, - "tags": [ - "venomous-snake" - ], - "defaultCode": 60127, - "grid": 0, - "attrs": [] - }, - { - "id": 480, - "paths": [ - "M871.998 879.042v-282.35c-59.997-56.468-120.006-112.947-120.006-169.415 0-112.947 59.997-282.35 240-338.829 0 0-59.997-56.468-120.006-56.468h-179.991c0 112.947-120.006 169.415-180.003 169.415s-180.003-56.468-180.003-169.415h-180.003c-59.997 0-120.006 56.468-120.006 56.468 180.003 56.468 240 225.882 240 338.829 0 56.468-59.997 112.947-120.006 169.415v282.35c120.006 56.468 240 112.947 359.994 112.947 120.031-0.012 240.038-56.479 360.031-112.947z" - ], - "isMulticolor": false, - "tags": [ - "vest" - ], - "defaultCode": 60128, - "grid": 0, - "attrs": [] - }, - { - "id": 481, - "paths": [ - "M628.192 249.976c0 65.655 0 150.31 0 215.99h-232.404c0-65.655 0-150.31 0-215.99zM372.322 185.45h-40.307l30.268 49.216v614.993c0 78.857 66.785 142.329 149.733 142.329s149.733-63.472 149.733-142.329v-614.993l30.268-49.216h-40.307zM462.096 521.683c15.31 0 27.683 11.771 27.683 26.327s-12.373 26.403-27.683 26.403-27.758-11.821-27.758-26.403 12.423-26.327 27.758-26.327zM551.996 564.826c24.119 0 43.67 18.597 43.67 41.511s-19.551 41.511-43.67 41.511-43.67-18.597-43.67-41.511 19.551-41.511 43.67-41.511zM594.185 419.335c0.151 14.557-12.122 26.478-27.432 26.629s-27.858-11.52-28.009-26.076c0-0.176 0-0.376 0-0.552-0.151-14.557 12.122-26.478 27.432-26.629s27.858 11.52 28.009 26.076c0 0.201 0 0.376 0 0.552zM599.23 131.791c0.151 14.557-12.122 26.478-27.432 26.629s-27.858-11.52-28.009-26.076c0-0.176 0-0.376 0-0.552-0.151-14.557 12.122-26.478 27.432-26.629s27.858 11.52 28.009 26.076c0 0.176 0 0.376 0 0.552zM525.242 73.515c0 22.939-19.551 41.511-43.67 41.511s-43.67-18.597-43.67-41.511 19.551-41.511 43.67-41.511 43.67 18.572 43.67 41.511z" - ], - "isMulticolor": false, - "tags": [ - "vial" - ], - "defaultCode": 60129, - "grid": 0, - "attrs": [] - }, - { - "id": 482, - "paths": [ - "M946.473 866.966c83.905-70.4 28.448-249.021-81.436-362.277 105.377-100.644-17.919-178.699-144.194-209.365 54.939 43.339 43.265 97.123 64.297 145.73-34.671-20.271-71.885-33.127-110.024-35.284-143.383-11.344-135.405 93.876-2.8 139.628-63.349-22.662-67.26-135.079 32.808-103.908l-0.060-0.326c172.66 80.701 260.278 339.011 169.346 355.119-46.102 8.167-110.534-22.072-187.83-98.57 38.486-8.815 62.24-47.72 107.385-81.345-67.165-3.667-125.561-32.228-139.033 48.202-39.016-43.063-80.871-97.196-124.953-163.317-139.299-208.928-262.035-320.803-350.108-357.379 28.846-11.211 58.147-31.868 108.674-11.722-71.648-75.111-133.474-110.246-160.693-1.649-4.905-0.344-9.642-0.383-14.184-0.082h-0.003c-110.485 7.297-112.971 203.016 71.132 489.774-143.657-350.888-71.094-452.448 88.475-313.461-76.922 35.163-43.195 90.272-10.723 146.756-2.571-61.27 39.45-76.88 48.561-110.904 47.396 48.35 100.649 114.898 157.061 199.478 15.422 23.123 30.68 44.862 45.756 65.356-29.046 21.063-15.814 66.493-71.16 90.292 62.080 1.463 108.105-6.795 106.439-44.209 160.621 201.247 296.309 255.001 369.191 229.553-3.045 27.955 17.841 57.424-12.647 98.274 67.439-36.836 105.497-74.291 40.723-114.364z" - ], - "isMulticolor": false, - "tags": [ - "vine-whip" - ], - "defaultCode": 60130, - "grid": 0, - "attrs": [] - }, - { - "id": 483, - "paths": [ - "M351.643 190.477c0-15.434-1.948-31.331-8.66-45.674-5.371-9.036-12.555-9.543-18.283-6.229-7.355 4.253-16.005 16.863-16.005 41.152 1.26 164.77-3.127 342.437-5.576 506.431h-161.869v-495.688c0-44.405-18.392-82.546-75.576-82.77l-17.488-0.080c36.184-41.216 72.206-58.936 130.392-58.936 37.497 0 72.547 14.861 96.782 40.143l3.922-3.556 4.621-3.959c34.843-26.871 74.78-32.618 105.066-32.618 37.435 0 72.422 14.807 96.649 40.018l3.789-3.431 4.602-3.959c34.861-26.871 74.78-32.618 105.074-32.618 68.65 0 128.658 49.687 129.981 121.375 0.742 39.794 0.67 92.706 0.187 150.348 15.826-44.79 46.755-101.59 101.921-101.59 45.54 0 136.611 2.279 136.611 280.060 0 201.472-104.69 316.54-177.139 372.875 9.33 3.602 19.16 5.085 29.141 5.085 50.097 0 91.081-40.983 91.081-40.983v56.935c0 0-17.077 55.782-142.304 55.782-37.318 0-67.738-6.014-92.591-16.64-77.157 24.593-170.383 38.266-170.383 38.266v-61.483c0 0 47.899-2.412 106.424-27.346-38.14-51.877-46.032-126.219-49.785-195.208l-0.456-16.524v-479.174c0-15.434-1.958-31.331-8.66-45.674-5.183-8.732-12.029-9.375-17.363-6.72-6.846 3.404-15.37 14.174-16.738 35.736 1.958 151.044-3.306 365.725-5.488 512.356h-161.867v-495.698l-0.013-0.002zM727.189 478.93l-0.062 4.103-0.286 16.899c-1.224 73.235-2.537 140.732-3.209 186.236 0 44.861 3.951 79.804 10.805 106.792 49.651-57.757 87.64-144.217 87.64-273.582 0-367.674-92.055-130.33-94.888-40.447z" - ], - "isMulticolor": false, - "tags": [ - "virgo" - ], - "defaultCode": 60131, - "grid": 0, - "attrs": [] - }, - { - "id": 484, - "paths": [ - "M812.086 632.006c48.213 192.878-101.17 360.006-299.997 360.006s-348.813-164.769-299.997-360.006c29.992-119.994 180.003-299.997 299.997-599.994 119.994 299.972 270.005 480 299.997 599.994z" - ], - "isMulticolor": false, - "tags": [ - "water-drop" - ], - "defaultCode": 60132, - "grid": 0, - "attrs": [] - }, - { - "id": 485, - "paths": [ - "M578.906 675.845c-36.951-36.951-96.861-36.951-133.812 0s-36.951 96.861 0 133.812c36.951 36.951 96.861 36.951 133.812 0 36.951-36.953 36.951-96.861 0-133.812zM835.379 553.186l-94.783 94.783c-126.249-126.249-330.941-126.249-457.19 0l-94.783-94.783c178.597-178.599 468.158-178.599 646.755 0v0zM902.284 486.278c-215.548-215.548-565.021-215.548-780.569 0l-97.571-97.571c269.434-269.434 706.276-269.434 975.71 0l-97.571 97.571z" - ], - "isMulticolor": false, - "tags": [ - "wifi" - ], - "defaultCode": 60133, - "grid": 0, - "attrs": [] - }, - { - "id": 486, - "paths": [ - "M275.932 77.577c-141.172 81.076-236.731 232.488-236.731 406.969 0 175.418 96.622 327.393 239.043 408.123-94.749-93.217-156.249-240.695-156.249-408.123-0.002-166.242 60.312-313.595 153.937-406.969zM750.552 82.261c91.002 93.562 149.257 238.759 149.257 402.315 0 163.994-59.003 308.785-150.443 402.315 137.144-82.105 229.738-230.863 229.738-402.315s-91.908-320.118-228.552-402.315zM254.923 484.576c0-132.524 55.475-248.47 137.612-309.036-122.658 49.137-209.915 168.8-209.915 309.036 0 140.58 87.88 260.116 211.071 309.036-82.575-60.409-138.768-176.105-138.768-309.036zM849.639 484.576c0.030-125.561-69.961-234.765-172.577-291.551 70.242 63.809 115.446 170.861 115.446 291.551 0 122.066-46.142 229.145-117.788 292.707 103.835-56.414 174.919-166.209 174.919-292.707zM357.413 484.606c0-89.003 36.837-165.865 89.597-203.547-85.164 28.627-146.011 108.736-146.011 203.547 0 95.653 61.876 176.699 148.226 204.641-54.006-37.058-91.813-114.354-91.813-204.641zM602.981 287.709c47.608 39.774 78.547 113.293 78.547 196.897 0 84.883-31.936 158.655-80.762 198.021 76.705-32.873 130.526-109.266 130.526-198.021-0.002-87.849-52.824-163.491-128.311-196.897zM523.154 421.982c-40.552 0-73.396 32.873-73.396 73.394 0 30.924 19.125 57.346 46.174 68.157v425.6h54.414v-425.586c27.075-10.808 46.204-37.253 46.204-68.17 0-40.521-32.873-73.362-73.396-73.394z" - ], - "isMulticolor": false, - "tags": [ - "wireless-signal" - ], - "defaultCode": 60134, - "grid": 0, - "attrs": [] - }, - { - "id": 487, - "paths": [ - "M682.981 292.548c-73.556-41.216-168.111-52.506-243.228-36.978l-81.628-177.862c-17.796 28.049-31.243 57.506-39.757 88.717l-0.438-60.1c-25.132 63.62-38.991 141.255-21.773 212.893-75.365-15.945-151.839-20.049-229.802-8.252 68.043 20.31 105.36 47.513 153.122 93.304-53.569 19.486-120.354 60.406-185.611 140.235 70.825-17.68 129.495-22.902 178.625-12.6-73.771 44.854-127.983 112.117-176.457 227.896 71.687-34.423 129.585-37.591 205.558-37.703-46.057 65.391-70.434 154.323-72.515 225.328 48.983-51.933 115.047-120.092 174.083-157.638 5.994 59.701 30.003 116.402 71.769 170.146-0.484-95.578 24.608-192.654 75.502-291.234l4.569-2.272 1.533-1.333c59.708-24.651 121.246-38.065 182.741-41.616l-29.081-20.637c68.591-14.169 144.115-24.412 236.337-28.398 15.238-25.699 27.509-48.412 37.647-69.447l-12.577-48.746-48.753 61.505-15.734-54.86-44.857 58.274-15.026-52.11-47.635 62.805-15.32-56.32-47.634 62.803 2.442-82.144 45.024-85.119 15.32 56.313 47.634-62.793 15.323 56.308 46.807-59.89 13.075 53.724 48.753-61.498 15.734 54.855 49.162-63.861c4.542-21.509 9.173-44.859 14.712-71.366-110.861-7.347-212.33 9.587-307.648 19.668z" - ], - "isMulticolor": false, - "tags": [ - "wolf-head" - ], - "defaultCode": 60135, - "grid": 0, - "attrs": [] - }, - { - "id": 488, - "paths": [ - "M510.323 44.106c-253.205 0-458.466 205.261-458.466 458.466 0 50.724 8.255 99.515 23.465 145.126 80.174-48.325 151.779-82.196 214.759-103.883-71.391 11.212-132.602 47.204-219.336 7.945 63-55.436 175.081-131.465 276.614-143.078 53.078-43.16 136.032-87.775 179.046-74.435 60.885-53.657 135.731-121.976 215.885-171.21l0.002 0.002c21.3 32.259 34.166 71.774 25.057 115.568-160.477 40.344-123.141 297.378 26.935 134.664 12.672 26.088 18.784 53.201 18.155 82.697-65.244 67.551-133.723 125.902-203.54 175.58 0.929 47.899-11.232 105.657-37.977 169.349-11.251 26.791-14.64 72.677 45.656 107.744 201.967-47.929 352.216-229.439 352.216-446.065-0.003-253.209-205.264-458.47-458.47-458.47z" - ], - "isMulticolor": false, - "tags": [ - "wolf-howl" - ], - "defaultCode": 60136, - "grid": 0, - "attrs": [] - }, - { - "id": 489, - "paths": [ - "M958.424 708.424l-12.769-142.825-299.051-7.833 296.606-19.516-17.622-197.114-295.996-7.377 320.302-20.049-3.172-146.728-391.95 8.473-2.305-82.715c-2.836-57.85-160.165-50.954-156.844 11.343l2.11 74.767-349.66 7.557 3.070 142.045 327.51 8.145-314.527 19.646-6.224 211.866 17.779 4.059-15.905 155.68 353.232-7.636 8.137 288.395h156.842l-8.13-291.785 388.569-8.399z" - ], - "isMulticolor": false, - "tags": [ - "wooden-sign" - ], - "defaultCode": 60137, - "grid": 0, - "attrs": [] - }, - { - "id": 490, - "paths": [ - "M969.446 271.193l-210.271 210.271-179.76-47.824-47.824-179.756 210.271-210.274c-105.54-27.24-222.49-0.149-305.094 82.458-87.59 87.588-113.417 213.704-77.502 324.023l-325.286 325.286v207.571h200.574l328.975-328.973c110.184 35.643 236.021 9.749 323.459-77.689 82.693-82.693 109.844-199.463 82.458-305.094z" - ], - "isMulticolor": false, - "tags": [ - "wrench" - ], - "defaultCode": 60138, - "grid": 0, - "attrs": [] - }, - { - "id": 491, - "paths": [ - "M640.67 356.85l-0.022 0.013 0.015-0.003zM648.882 35.010c0.058 0.070 0.114 0.142 0.17 0.212l-69.736 64.753 73.688-7.494-30.742 60.142 75.971-32.098c52.214 139.708 1.239 308.067-104.956 331.985-14.847-57.436-83.649-82.035-70.546-131.009 4.398 3.191 9.437 5.655 14.999 7.145 4.343 1.164 8.707 1.649 12.985 1.542l-0.788 0.89 45.816 53.24 44.904-27.454c-15.445 3.881-57.247-10.006-62.736-36.518 7.452-5.885 13.14-14.134 15.788-24.013 0.246-0.919 0.453-1.838 0.64-2.756l20.622 40.761 10.424-33.84c15.225 11.137 24.903 27.179 22.937 42.216l33.294-58.707-144.043-59.018-115.927-95.905 34.148 62.397-96.258-39.438 70.162 62.367c-81.070 56.23-44.095 169.809-3.576 238.196-114.815-19.337-205.924-154.621-191.216-289.595l98.256-42.661-62.056-10.263 58.318-66.729-63.926 23.046c0.074-0.134 0.14-0.269 0.215-0.403-336.174 132.443-232.45 732.805-127.252 834.618-8.565-59.389-10.729-97.527-3.82-114.113 6.376 41.89 14.807 81.825 25.381 118.31l5.335-120c10.883 7.606 24.561 20.729 41.393 39.45-9.622-26.656-13.549-52.921-12.955-76.439 40.502 83.196 134.47 138.25 208.936 124.42 44.814-8.324 83.467-25.418 115.43-48.87l14.59 30.78c-40.070 10.055-45.537 65.163-29.424 110.046 3.49-39.7 22.685-59.491 43.389-64.5-13.17 31.682-9.376 61.146-6.219 88.173 20.266-24.252 42.866-47.512 47.178-78.579 17.445 14.638 24.591 42.911 2.382 77.984 52.555-30.897 63.027-83.854 15.923-115.184l-64.029-68.476c11.819-11.089 22.446-23.169 31.844-36.081l78.434 31.5c-7.876 27.336 11.643 62.923 39.472 86.48-16.080-34.519-9.635-60.060 5.117-74.084 3.254 34.721 21.245 58.293 37.405 80.001 5.447-31.281 13.559-62.888-0.428-91.829 21.998 3.115 42.338 23.098 40.613 63.652 28.702-50.585 12.184-99.333-41.541-102.889l-141.908-19.74c25.471-45.891 37.288-99.487 33.967-154.704 28.333-69.29 99.953-23.58 108.868 98.169 54.761-160.426 133.95-77.102 117.464 48.95 18.537-36.704 34.878-58.919 48.806-67.936l38.077 152.726c0.824-46.429-1.706-96.010-7.133-146.826 14.202 19.6 22.635 65.977 24.578 134.906 87.010-229.974-1.694-715.517-306.702-770.903zM377.261 792.756c-55.157 14.541-139.226-22.762-167.964-107.161 24.518-42.084 74.603-43.89 125.473 45.119-38.17-126.179 105.928-184.387 126.632-92.616-0.002 71.678-19.060 137.5-84.14 154.657zM589.976 987.415c0.028-0.045 0.053-0.090 0.082-0.135-0.017 0.010-0.033 0.020-0.050 0.030l-0.032 0.105z" - ], - "isMulticolor": false, - "tags": [ - "wyvern" - ], - "defaultCode": 60139, - "grid": 0, - "attrs": [] - }, - { - "id": 492, - "paths": [ - "M836.968 632.881c-10.041-4.297-31.777 7.131-57.498 26.575l-147.463-147.463 147.474-147.474c25.715 19.439 47.447 30.864 57.486 26.567 35.708-15.303 173.402-336.64 152.998-357.046-20.405-20.423-341.742 117.29-357.045 152.998-4.302 10.038 7.118 31.766 26.554 57.476l-147.474 147.473-147.473-147.473c19.436-25.712 30.856-47.439 26.554-57.476-15.303-35.708-336.638-173.421-357.043-152.998-20.405 20.406 117.29 341.742 152.998 357.046 10.039 4.297 31.771-7.128 57.486-26.567l147.474 147.474-147.463 147.463c-25.72-19.444-47.457-30.872-57.498-26.575-35.709 15.303-173.402 336.64-152.998 357.045 20.405 20.425 341.742-117.288 357.045-152.998 4.302-10.036-7.114-31.759-26.545-57.464l147.463-147.464 147.464 147.464c-19.429 25.705-30.845 47.429-26.545 57.464 15.303 35.709 336.64 173.422 357.045 152.998 20.406-20.405-117.288-341.742-152.996-357.045z" - ], - "isMulticolor": false, - "tags": [ - "x-mark" - ], - "defaultCode": 60140, - "grid": 0, - "attrs": [] - }, - { - "id": 493, - "paths": [ - "M220.74 841.070l155.752 88.959c83.647-41.459 162.769-100.486 234.591-169.784-39.341-104.727-134.089-208.41-260.995-316.261 129.782 47.862 267.573 144.566 340.284 232.371 18.734-21.668 36.792-43.942 54.105-66.654-16.526-63.603-140.644-185.21-254.294-252.203 133.524 25.298 267.429 94.559 315.639 165.265 25.6-39.251 48.916-79.132 69.645-118.866-62.999-100.030-156.652-186.455-323.863-264.957 158.638 30.593 284.709 93.76 369.004 169.064 9.107-21.725 17.345-43.207 24.646-64.312l0.017-0.008c-213.172-138.432-446.832-208.173-725.632-201.193-23.786 54.092-44.709 113.091-61.609 174.757 121.343-4.195 250.905 11.054 370.895 48.003-68.129-57.812-170.904-102.271-294.64-137.127-0.149 0.007-0.297 0.008-0.446 0.015l0.023-0.137c0.142 0.040 0.282 0.080 0.424 0.12 212.766-9.555 423.136 127.44 506.249 241.031-110.402-37.696-344.208-82.212-525-85.754 129.141 37.425 268.377 121.726 337.223 194.196-121.027-62.578-294.678-128.618-420.36-147.859-5.205 28.548-9.482 57.357-12.699 86.245 196.57 33.782 335.282 178.455 417.328 320.139-164.231-160.091-299.497-217.404-423.263-244.793-1.119 24.436-1.428 48.796-0.854 72.968 150.764 27.496 310.439 126.672 391.221 231.234-75.263-6.969-114.875-7.671-167.463 0 29.706 30.683 43.658 61.368 53.976 93.381-55.022-46.025-146.514-89.893-207.202-116.678 45.96-25.099 117.7-20.918 167.351-25.099-55.466-53.37-151.179-93.181-232.283-100.16 14.281 125.384 55.45 241.464 133.137 330.224 14.899-3.864 29.704-8.341 44.405-13.396l-75.315-122.733z" - ], - "isMulticolor": false, - "tags": [ - "zebra-shield" - ], - "defaultCode": 60141, - "grid": 0, - "attrs": [] - }, - { - "id": 494, - "paths": [ - "M922.766 43.193c-181.303 124.721-570.632-7.17-724.738 119.329-150.47 123.523-157.467 410.245 29.439 480.497l3.468-3.792c73.962-54.185 175.061-67.962 265.403-42.878 20.066-106.123-50.508-232.792-213.107-241.631 82.244-25.318 155.914-12.233 213.886 22.956 56.24-36.939 130.928-44.47 196.628-23.651 27.229-49.294 10.968-123.842-69.632-149.873 23.059-0.935 43.499 3.1 61.148 10.753 48.405-45.991 145.938-41.165 173.94 40.726-41.61-50.376-100.947-41.62-130.088-8.747 32.857 37.293 42.975 92.269 26.25 137.35 48.419 33.814 83.592 88.024 88.333 161.987-57.327-126.049-184.554-139.613-262.219-87.103 40.756 60.989 57.514 137.122 40.826 206.816 48.81 45.692 82.54 110.336 87.864 193.409-78.547-172.702-254.226-189.111-358.681-114.614l-1.933-0.264c218.219 388.111 804.45 187.602 573.214-701.27zM159.356 978.896c48.552-142.769 120.453-252.039 230.211-331.991-156.74 31.366-256.262 139.872-347.594 261.905 16.392 46.299 52.448 72.756 117.382 70.086zM497.896 420.082c23.375 44.157 68.005 143.99 11.825 223.324-126.918-45.716-280.847 22.221-356.462 138.532l124.193-27.596c89.076-114.91 224.492-91.413 285.604-75.48 24.289-76.546 24.095-168.004-25.896-226.967 48.485-50.253 134.635-66.852 196.097-39.174-78.303-49.232-162.679-43.621-235.36 7.38v-0.018h-0.002z" - ], - "isMulticolor": false, - "tags": [ - "zigzag-leaf" - ], - "defaultCode": 60142, - "grid": 0, - "attrs": [] - } - ], - "invisible": false - }, - { - "selection": [ - { - "order": 0, - "prevSize": 16, - "ligatures": "home, house", - "name": "home", - "id": 1 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "home2, house2", - "name": "home2", - "id": 2 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "home3, house3", - "name": "home3", - "id": 3 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "office, buildings", - "name": "office", - "id": 4 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "newspaper, news", - "name": "newspaper", - "id": 5 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "pencil, write", - "name": "pencil", - "id": 6 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "pencil2, write2", - "name": "pencil2", - "id": 7 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "quill, feather", - "name": "quill", - "id": 8 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "pen, write3", - "name": "pen", - "id": 9 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "blog, pen2", - "name": "blog", - "id": 10 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "eyedropper, color", - "name": "eyedropper", - "id": 11 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "droplet, color2", - "name": "droplet", - "id": 12 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "paint-format, format", - "name": "paint-format", - "id": 13 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "image, picture", - "name": "image", - "id": 14 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "images, pictures", - "name": "images", - "id": 15 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "camera, photo", - "name": "camera", - "id": 16 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "headphones, headset", - "name": "headphones", - "id": 17 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "music, song", - "name": "music", - "id": 18 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "play, video", - "name": "play", - "id": 19 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "film, video2", - "name": "film", - "id": 20 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "video-camera, video3", - "name": "video-camera", - "id": 21 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "dice, game", - "name": "dice", - "id": 22 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "pacman, game2", - "name": "pacman", - "id": 23 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "spades, cards", - "name": "spades", - "id": 24 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "clubs, cards2", - "name": "clubs", - "id": 25 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "diamonds, cards3", - "name": "diamonds", - "id": 26 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "bullhorn, megaphone", - "name": "bullhorn", - "id": 27 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "connection, wifi", - "name": "connection", - "id": 28 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "podcast, broadcast", - "name": "podcast", - "id": 29 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "feed, wave", - "name": "feed", - "id": 30 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "mic, microphone", - "name": "mic", - "id": 31 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "book, read", - "name": "book", - "id": 32 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "books, library", - "name": "books", - "id": 33 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "library2, bank", - "name": "library", - "id": 34 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "file-text, file", - "name": "file-text", - "id": 35 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "profile, file2", - "name": "profile", - "id": 36 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "file-empty, file3", - "name": "file-empty", - "id": 37 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "files-empty, files", - "name": "files-empty", - "id": 38 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "file-text2, file4", - "name": "file-text2", - "id": 39 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "file-picture, file5", - "name": "file-picture", - "id": 40 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "file-music, file6", - "name": "file-music", - "id": 41 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "file-play, file7", - "name": "file-play", - "id": 42 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "file-video, file8", - "name": "file-video", - "id": 43 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "file-zip, file9", - "name": "file-zip", - "id": 44 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "copy, duplicate", - "name": "copy", - "id": 45 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "paste, clipboard-file", - "name": "paste", - "id": 46 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "stack, layers", - "name": "stack", - "id": 47 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "folder, directory", - "name": "folder", - "id": 48 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "folder-open, directory2", - "name": "folder-open", - "id": 49 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "folder-plus, directory3", - "name": "folder-plus", - "id": 50 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "folder-minus, directory4", - "name": "folder-minus", - "id": 51 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "folder-download, directory5", - "name": "folder-download", - "id": 52 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "folder-upload, directory6", - "name": "folder-upload", - "id": 53 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "price-tag", - "name": "price-tag", - "id": 54 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "price-tags", - "name": "price-tags", - "id": 55 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "barcode", - "name": "barcode", - "id": 56 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "qrcode", - "name": "qrcode", - "id": 57 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "ticket, theater", - "name": "ticket", - "id": 58 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "cart, purchase", - "name": "cart", - "id": 59 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "coin-dollar, money", - "name": "coin-dollar", - "id": 60 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "coin-euro, money2", - "name": "coin-euro", - "id": 61 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "coin-pound, money3", - "name": "coin-pound", - "id": 62 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "coin-yen, money4", - "name": "coin-yen", - "id": 63 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "credit-card, money5", - "name": "credit-card", - "id": 64 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "calculator, compute", - "name": "calculator", - "id": 65 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "lifebuoy, support", - "name": "lifebuoy", - "id": 66 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "phone, telephone", - "name": "phone", - "id": 67 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "phone-hang-up, telephone2", - "name": "phone-hang-up", - "id": 68 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "address-book, contact", - "name": "address-book", - "id": 69 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "envelop, mail", - "name": "envelop", - "id": 70 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "pushpin, pin", - "name": "pushpin", - "id": 71 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "location, map-marker", - "name": "location", - "id": 72 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "location2, map-marker2", - "name": "location2", - "id": 73 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "compass, direction", - "name": "compass", - "id": 74 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "compass2, direction2", - "name": "compass2", - "id": 75 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "map, guide", - "name": "map", - "id": 76 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "map2, guide2", - "name": "map2", - "id": 77 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "history, time", - "name": "history", - "id": 78 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "clock, time2", - "name": "clock", - "id": 79 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "clock2, time3", - "name": "clock2", - "id": 80 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "alarm, time4", - "name": "alarm", - "id": 81 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "bell, alarm2", - "name": "bell", - "id": 82 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "stopwatch, time5", - "name": "stopwatch", - "id": 83 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "calendar, date", - "name": "calendar", - "id": 84 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "printer, print", - "name": "printer", - "id": 85 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "keyboard, typing", - "name": "keyboard", - "id": 86 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "display, screen", - "name": "display", - "id": 87 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "laptop, computer", - "name": "laptop", - "id": 88 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "mobile, cell-phone", - "name": "mobile", - "id": 89 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "mobile2, cell-phone2", - "name": "mobile2", - "id": 90 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "tablet, mobile3", - "name": "tablet", - "id": 91 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "tv, television", - "name": "tv", - "id": 92 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "drawer, box", - "name": "drawer", - "id": 93 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "drawer2, box2", - "name": "drawer2", - "id": 94 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "box-add, box3", - "name": "box-add", - "id": 95 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "box-remove, box4", - "name": "box-remove", - "id": 96 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "download, save", - "name": "download", - "id": 97 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "upload, load", - "name": "upload", - "id": 98 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "floppy-disk, save2", - "name": "floppy-disk", - "id": 99 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "drive, save3", - "name": "drive", - "id": 100 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "database, db", - "name": "database", - "id": 101 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "undo, ccw", - "name": "undo", - "id": 102 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "redo, cw", - "name": "redo", - "id": 103 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "undo2, left", - "name": "undo2", - "id": 104 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "redo2, right", - "name": "redo2", - "id": 105 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "forward, right2", - "name": "forward", - "id": 106 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "reply, left2", - "name": "reply", - "id": 107 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "bubble, comment", - "name": "bubble", - "id": 108 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "bubbles, comments", - "name": "bubbles", - "id": 109 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "bubbles2, comments2", - "name": "bubbles2", - "id": 110 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "bubble2, comment2", - "name": "bubble2", - "id": 111 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "bubbles3, comments3", - "name": "bubbles3", - "id": 112 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "bubbles4, comments4", - "name": "bubbles4", - "id": 113 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "user, profile2", - "name": "user", - "id": 114 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "users, group", - "name": "users", - "id": 115 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "user-plus, user2", - "name": "user-plus", - "id": 116 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "user-minus, user3", - "name": "user-minus", - "id": 117 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "user-check, user4", - "name": "user-check", - "id": 118 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "user-tie, user5", - "name": "user-tie", - "id": 119 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "quotes-left, ldquo", - "name": "quotes-left", - "id": 120 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "quotes-right, rdquo", - "name": "quotes-right", - "id": 121 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "hour-glass, loading", - "name": "hour-glass", - "id": 122 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "spinner, loading2", - "name": "spinner", - "id": 123 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "spinner2, loading3", - "name": "spinner2", - "id": 124 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "spinner3, loading4", - "name": "spinner3", - "id": 125 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "spinner4, loading5", - "name": "spinner4", - "id": 126 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "spinner5, loading6", - "name": "spinner5", - "id": 127 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "spinner6, loading7", - "name": "spinner6", - "id": 128 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "spinner7, loading8", - "name": "spinner7", - "id": 129 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "spinner8, loading9", - "name": "spinner8", - "id": 130 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "spinner9, loading10", - "name": "spinner9", - "id": 131 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "spinner10, loading11", - "name": "spinner10", - "id": 132 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "spinner11, loading12", - "name": "spinner11", - "id": 133 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "binoculars, lookup", - "name": "binoculars", - "id": 134 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "search, magnifier", - "name": "search", - "id": 135 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "zoom-in, magnifier2", - "name": "zoom-in", - "id": 136 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "zoom-out, magnifier3", - "name": "zoom-out", - "id": 137 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "enlarge, expand", - "name": "enlarge", - "id": 138 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "shrink, collapse", - "name": "shrink", - "id": 139 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "enlarge2, expand2", - "name": "enlarge2", - "id": 140 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "shrink2, collapse2", - "name": "shrink2", - "id": 141 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "key, password", - "name": "key", - "id": 142 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "key2, password2", - "name": "key2", - "id": 143 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "lock, secure", - "name": "lock", - "id": 144 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "unlocked, lock-open", - "name": "unlocked", - "id": 145 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "wrench, tool", - "name": "wrench", - "id": 146 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "equalizer, sliders", - "name": "equalizer", - "id": 147 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "equalizer2, sliders2", - "name": "equalizer2", - "id": 148 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "cog, gear", - "name": "cog", - "id": 149 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "cogs, gears", - "name": "cogs", - "id": 150 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "hammer, tool2", - "name": "hammer", - "id": 151 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "magic-wand, wizard", - "name": "magic-wand", - "id": 152 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "aid-kit, health", - "name": "aid-kit", - "id": 153 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "bug, virus", - "name": "bug", - "id": 154 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "pie-chart, stats", - "name": "pie-chart", - "id": 155 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "stats-dots, stats2", - "name": "stats-dots", - "id": 156 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "stats-bars, stats3", - "name": "stats-bars", - "id": 157 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "stats-bars2, stats4", - "name": "stats-bars2", - "id": 158 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "trophy, cup", - "name": "trophy", - "id": 159 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "gift, present", - "name": "gift", - "id": 160 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "glass, drink", - "name": "glass", - "id": 161 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "glass2, drink2", - "name": "glass2", - "id": 162 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "mug, drink3", - "name": "mug", - "id": 163 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "spoon-knife, food", - "name": "spoon-knife", - "id": 164 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "leaf, nature", - "name": "leaf", - "id": 165 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "rocket, jet", - "name": "rocket", - "id": 166 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "meter, gauge", - "name": "meter", - "id": 167 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "meter2, gauge2", - "name": "meter2", - "id": 168 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "hammer2, gavel", - "name": "hammer2", - "id": 169 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "fire, flame", - "name": "fire", - "id": 170 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "lab, beta", - "name": "lab", - "id": 171 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "magnet, attract", - "name": "magnet", - "id": 172 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "bin, trashcan", - "name": "bin", - "id": 173 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "bin2, trashcan2", - "name": "bin2", - "id": 174 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "briefcase, portfolio", - "name": "briefcase", - "id": 175 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "airplane, travel", - "name": "airplane", - "id": 176 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "truck, transit", - "name": "truck", - "id": 177 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "road, asphalt", - "name": "road", - "id": 178 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "accessibility", - "name": "accessibility", - "id": 179 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "target, goal", - "name": "target", - "id": 180 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "shield, security", - "name": "shield", - "id": 181 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "power, lightning", - "name": "power", - "id": 182 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "switch", - "name": "switch", - "id": 183 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "power-cord, plugin", - "name": "power-cord", - "id": 184 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "clipboard, board", - "name": "clipboard", - "id": 185 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "list-numbered, options", - "name": "list-numbered", - "id": 186 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "list, todo", - "name": "list", - "id": 187 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "list2, todo2", - "name": "list2", - "id": 188 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "tree, branches", - "name": "tree", - "id": 189 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "menu, list3", - "name": "menu", - "id": 190 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "menu2, options2", - "name": "menu2", - "id": 191 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "menu3, options3", - "name": "menu3", - "id": 192 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "menu4, options4", - "name": "menu4", - "id": 193 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "cloud, weather", - "name": "cloud", - "id": 194 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "cloud-download, cloud2", - "name": "cloud-download", - "id": 195 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "cloud-upload, cloud3", - "name": "cloud-upload", - "id": 196 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "cloud-check, cloud4", - "name": "cloud-check", - "id": 197 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "download2, save4", - "name": "download2", - "id": 198 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "upload2, load2", - "name": "upload2", - "id": 199 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "download3, save5", - "name": "download3", - "id": 200 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "upload3, load3", - "name": "upload3", - "id": 201 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "sphere, globe", - "name": "sphere", - "id": 202 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "earth, globe2", - "name": "earth", - "id": 203 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "link, chain", - "name": "link", - "id": 204 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "flag, report", - "name": "flag", - "id": 205 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "attachment, paperclip", - "name": "attachment", - "id": 206 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "eye, views", - "name": "eye", - "id": 207 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "eye-plus, views2", - "name": "eye-plus", - "id": 208 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "eye-minus, views3", - "name": "eye-minus", - "id": 209 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "eye-blocked, views4", - "name": "eye-blocked", - "id": 210 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "bookmark, ribbon", - "name": "bookmark", - "id": 211 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "bookmarks, ribbons", - "name": "bookmarks", - "id": 212 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "sun, weather2", - "name": "sun", - "id": 213 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "contrast", - "name": "contrast", - "id": 214 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "brightness-contrast", - "name": "brightness-contrast", - "id": 215 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "star-empty, rate", - "name": "star-empty", - "id": 216 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "star-half, rate2", - "name": "star-half", - "id": 217 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "star-full, rate3", - "name": "star-full", - "id": 218 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "heart, like", - "name": "heart", - "id": 219 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "heart-broken, heart2", - "name": "heart-broken", - "id": 220 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "man, male", - "name": "man", - "id": 221 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "woman, female", - "name": "woman", - "id": 222 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "man-woman, toilet", - "name": "man-woman", - "id": 223 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "happy, emoticon", - "name": "happy", - "id": 224 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "happy2, emoticon2", - "name": "happy2", - "id": 225 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "smile, emoticon3", - "name": "smile", - "id": 226 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "smile2, emoticon4", - "name": "smile2", - "id": 227 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "tongue, emoticon5", - "name": "tongue", - "id": 228 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "tongue2, emoticon6", - "name": "tongue2", - "id": 229 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "sad, emoticon7", - "name": "sad", - "id": 230 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "sad2, emoticon8", - "name": "sad2", - "id": 231 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "wink, emoticon9", - "name": "wink", - "id": 232 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "wink2, emoticon10", - "name": "wink2", - "id": 233 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "grin, emoticon11", - "name": "grin", - "id": 234 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "grin2, emoticon12", - "name": "grin2", - "id": 235 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "cool, emoticon13", - "name": "cool", - "id": 236 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "cool2, emoticon14", - "name": "cool2", - "id": 237 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "angry, emoticon15", - "name": "angry", - "id": 238 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "angry2, emoticon16", - "name": "angry2", - "id": 239 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "evil, emoticon17", - "name": "evil", - "id": 240 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "evil2, emoticon18", - "name": "evil2", - "id": 241 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "shocked, emoticon19", - "name": "shocked", - "id": 242 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "shocked2, emoticon20", - "name": "shocked2", - "id": 243 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "baffled, emoticon21", - "name": "baffled", - "id": 244 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "baffled2, emoticon22", - "name": "baffled2", - "id": 245 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "confused, emoticon23", - "name": "confused", - "id": 246 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "confused2, emoticon24", - "name": "confused2", - "id": 247 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "neutral, emoticon25", - "name": "neutral", - "id": 248 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "neutral2, emoticon26", - "name": "neutral2", - "id": 249 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "hipster, emoticon27", - "name": "hipster", - "id": 250 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "hipster2, emoticon28", - "name": "hipster2", - "id": 251 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "wondering, emoticon29", - "name": "wondering", - "id": 252 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "wondering2, emoticon30", - "name": "wondering2", - "id": 253 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "sleepy, emoticon31", - "name": "sleepy", - "id": 254 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "sleepy2, emoticon32", - "name": "sleepy2", - "id": 255 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "frustrated, emoticon33", - "name": "frustrated", - "id": 256 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "frustrated2, emoticon34", - "name": "frustrated2", - "id": 257 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "crying, emoticon35", - "name": "crying", - "id": 258 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "crying2, emoticon36", - "name": "crying2", - "id": 259 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "point-up, finger", - "name": "point-up", - "id": 260 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "point-right, finger2", - "name": "point-right", - "id": 261 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "point-down, finger3", - "name": "point-down", - "id": 262 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "point-left, finger4", - "name": "point-left", - "id": 263 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "warning, sign", - "name": "warning", - "id": 264 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "notification, warning2", - "name": "notification", - "id": 265 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "question, help", - "name": "question", - "id": 266 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "plus, add", - "name": "plus", - "id": 267 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "minus, subtract", - "name": "minus", - "id": 268 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "info, information", - "name": "info", - "id": 269 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "cancel-circle, close", - "name": "cancel-circle", - "id": 270 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "blocked, forbidden", - "name": "blocked", - "id": 271 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "cross, cancel", - "name": "cross", - "id": 272 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "checkmark, tick", - "name": "checkmark", - "id": 273 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "checkmark2, tick2", - "name": "checkmark2", - "id": 274 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "spell-check, spelling", - "name": "spell-check", - "id": 275 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "enter, signin", - "name": "enter", - "id": 276 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "exit, signout", - "name": "exit", - "id": 277 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "play2, player", - "name": "play2", - "id": 278 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "pause, player2", - "name": "pause", - "id": 279 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "stop, player3", - "name": "stop", - "id": 280 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "previous, player4", - "name": "previous", - "id": 281 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "next, player5", - "name": "next", - "id": 282 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "backward, player6", - "name": "backward", - "id": 283 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "forward2, player7", - "name": "forward2", - "id": 284 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "play3, player8", - "name": "play3", - "id": 285 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "pause2, player9", - "name": "pause2", - "id": 286 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "stop2, player10", - "name": "stop2", - "id": 287 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "backward2, player11", - "name": "backward2", - "id": 288 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "forward3, player12", - "name": "forward3", - "id": 289 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "first, player13", - "name": "first", - "id": 290 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "last, player14", - "name": "last", - "id": 291 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "previous2, player15", - "name": "previous2", - "id": 292 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "next2, player16", - "name": "next2", - "id": 293 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "eject, player17", - "name": "eject", - "id": 294 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "volume-high, volume", - "name": "volume-high", - "id": 295 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "volume-medium, volume2", - "name": "volume-medium", - "id": 296 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "volume-low, volume3", - "name": "volume-low", - "id": 297 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "volume-mute, volume4", - "name": "volume-mute", - "id": 298 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "volume-mute2, volume5", - "name": "volume-mute2", - "id": 299 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "volume-increase, volume6", - "name": "volume-increase", - "id": 300 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "volume-decrease, volume7", - "name": "volume-decrease", - "id": 301 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "loop, repeat", - "name": "loop", - "id": 302 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "loop2, repeat2", - "name": "loop2", - "id": 303 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "infinite", - "name": "infinite", - "id": 304 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "shuffle, random", - "name": "shuffle", - "id": 305 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "arrow-up-left, up-left", - "name": "arrow-up-left", - "id": 306 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "arrow-up, up", - "name": "arrow-up", - "id": 307 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "arrow-up-right, up-right", - "name": "arrow-up-right", - "id": 308 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "arrow-right, right3", - "name": "arrow-right", - "id": 309 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "arrow-down-right, down-right", - "name": "arrow-down-right", - "id": 310 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "arrow-down, down", - "name": "arrow-down", - "id": 311 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "arrow-down-left, down-left", - "name": "arrow-down-left", - "id": 312 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "arrow-left, left3", - "name": "arrow-left", - "id": 313 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "arrow-up-left2, up-left2", - "name": "arrow-up-left2", - "id": 314 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "arrow-up2, up2", - "name": "arrow-up2", - "id": 315 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "arrow-up-right2, up-right2", - "name": "arrow-up-right2", - "id": 316 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "arrow-right2, right4", - "name": "arrow-right2", - "id": 317 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "arrow-down-right2, down-right2", - "name": "arrow-down-right2", - "id": 318 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "arrow-down2, down2", - "name": "arrow-down2", - "id": 319 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "arrow-down-left2, down-left2", - "name": "arrow-down-left2", - "id": 320 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "arrow-left2, left4", - "name": "arrow-left2", - "id": 321 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "circle-up, up3", - "name": "circle-up", - "id": 322 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "circle-right, right5", - "name": "circle-right", - "id": 323 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "circle-down, down3", - "name": "circle-down", - "id": 324 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "circle-left, left5", - "name": "circle-left", - "id": 325 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "tab, arrows", - "name": "tab", - "id": 326 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "move-up, sort", - "name": "move-up", - "id": 327 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "move-down, sort2", - "name": "move-down", - "id": 328 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "sort-alpha-asc, arrange", - "name": "sort-alpha-asc", - "id": 329 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "sort-alpha-desc, arrange2", - "name": "sort-alpha-desc", - "id": 330 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "sort-numeric-asc, arrange3", - "name": "sort-numeric-asc", - "id": 331 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "sort-numberic-desc, arrange4", - "name": "sort-numberic-desc", - "id": 332 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "sort-amount-asc, arrange5", - "name": "sort-amount-asc", - "id": 333 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "sort-amount-desc, arrange6", - "name": "sort-amount-desc", - "id": 334 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "command, cmd", - "name": "command", - "id": 335 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "shift", - "name": "shift", - "id": 336 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "ctrl, control", - "name": "ctrl", - "id": 337 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "opt, option", - "name": "opt", - "id": 338 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "checkbox-checked, checkbox", - "name": "checkbox-checked", - "id": 339 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "checkbox-unchecked, checkbox2", - "name": "checkbox-unchecked", - "id": 340 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "radio-checked, radio-button", - "name": "radio-checked", - "id": 341 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "radio-checked2, radio-button2", - "name": "radio-checked2", - "id": 342 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "radio-unchecked, radio-button3", - "name": "radio-unchecked", - "id": 343 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "crop, resize", - "name": "crop", - "id": 344 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "make-group", - "name": "make-group", - "id": 345 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "ungroup", - "name": "ungroup", - "id": 346 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "scissors, cut", - "name": "scissors", - "id": 347 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "filter, funnel", - "name": "filter", - "id": 348 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "font, typeface", - "name": "font", - "id": 349 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "ligature, typography", - "name": "ligature", - "id": 350 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "ligature2, typography2", - "name": "ligature2", - "id": 351 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "text-height, wysiwyg", - "name": "text-height", - "id": 352 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "text-width, wysiwyg2", - "name": "text-width", - "id": 353 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "font-size, wysiwyg3", - "name": "font-size", - "id": 354 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "bold, wysiwyg4", - "name": "bold", - "id": 355 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "underline, wysiwyg5", - "name": "underline", - "id": 356 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "italic, wysiwyg6", - "name": "italic", - "id": 357 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "strikethrough, wysiwyg7", - "name": "strikethrough", - "id": 358 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "omega, wysiwyg8", - "name": "omega", - "id": 359 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "sigma, wysiwyg9", - "name": "sigma", - "id": 360 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "page-break, wysiwyg10", - "name": "page-break", - "id": 361 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "superscript, wysiwyg11", - "name": "superscript", - "id": 362 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "subscript, wysiwyg12", - "name": "subscript", - "id": 363 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "superscript2, wysiwyg13", - "name": "superscript2", - "id": 364 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "subscript2, wysiwyg14", - "name": "subscript2", - "id": 365 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "text-color, wysiwyg15", - "name": "text-color", - "id": 366 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "pagebreak, wysiwyg16", - "name": "pagebreak", - "id": 367 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "clear-formatting, wysiwyg17", - "name": "clear-formatting", - "id": 368 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "table, wysiwyg18", - "name": "table", - "id": 369 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "table2, wysiwyg19", - "name": "table2", - "id": 370 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "insert-template, wysiwyg20", - "name": "insert-template", - "id": 371 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "pilcrow, wysiwyg21", - "name": "pilcrow", - "id": 372 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "ltr, wysiwyg22", - "name": "ltr", - "id": 373 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "rtl, wysiwyg23", - "name": "rtl", - "id": 374 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "section, wysiwyg24", - "name": "section", - "id": 375 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "paragraph-left, wysiwyg25", - "name": "paragraph-left", - "id": 376 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "paragraph-center, wysiwyg26", - "name": "paragraph-center", - "id": 377 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "paragraph-right, wysiwyg27", - "name": "paragraph-right", - "id": 378 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "paragraph-justify, wysiwyg28", - "name": "paragraph-justify", - "id": 379 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "indent-increase, wysiwyg29", - "name": "indent-increase", - "id": 380 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "indent-decrease, wysiwyg30", - "name": "indent-decrease", - "id": 381 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "share, out", - "name": "share", - "id": 382 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "new-tab, out2", - "name": "new-tab", - "id": 383 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "embed, code", - "name": "embed", - "id": 384 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "embed2, code2", - "name": "embed2", - "id": 385 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "terminal, console", - "name": "terminal", - "id": 386 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "share2, social", - "name": "share2", - "id": 387 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "mail2, contact2", - "name": "mail", - "id": 388 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "mail3, contact3", - "name": "mail2", - "id": 389 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "mail4, contact4", - "name": "mail3", - "id": 390 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "mail5, contact5", - "name": "mail4", - "id": 391 - }, - { - "order": 0, - "prevSize": 16, - "name": "amazon", - "ligatures": "amazon, brand", - "id": 392 - }, - { - "order": 0, - "prevSize": 16, - "name": "google", - "ligatures": "google, brand2", - "id": 393 - }, - { - "order": 0, - "prevSize": 16, - "name": "google2", - "ligatures": "google2, brand3", - "id": 394 - }, - { - "order": 0, - "prevSize": 16, - "name": "google3", - "ligatures": "google3, brand4", - "id": 395 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "google-plus, brand5", - "name": "google-plus", - "id": 396 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "google-plus2, brand6", - "name": "google-plus2", - "id": 397 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "google-plus3, brand7", - "name": "google-plus3", - "id": 398 - }, - { - "order": 0, - "prevSize": 16, - "name": "hangouts", - "ligatures": "hangouts, brand8", - "id": 399 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "google-drive, brand9", - "name": "google-drive", - "id": 400 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "facebook, brand10", - "name": "facebook", - "id": 401 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "facebook2, brand11", - "name": "facebook2", - "id": 402 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "instagram, brand12", - "name": "instagram", - "id": 403 - }, - { - "order": 0, - "prevSize": 16, - "name": "whatsapp", - "ligatures": "whatsapp, brand13", - "id": 404 - }, - { - "order": 0, - "prevSize": 16, - "name": "spotify", - "ligatures": "spotify, brand14", - "id": 405 - }, - { - "order": 0, - "prevSize": 16, - "name": "telegram", - "ligatures": "telegram, brand15", - "id": 406 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "twitter, brand16", - "name": "twitter", - "id": 407 - }, - { - "order": 0, - "prevSize": 16, - "name": "vine", - "ligatures": "vine, brand17", - "id": 408 - }, - { - "order": 0, - "prevSize": 16, - "name": "vk", - "ligatures": "vk, brand18", - "id": 409 - }, - { - "order": 0, - "prevSize": 16, - "name": "renren", - "ligatures": "renren, brand19", - "id": 410 - }, - { - "order": 0, - "prevSize": 16, - "name": "sina-weibo", - "ligatures": "sina-weibo, brand20", - "id": 411 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "feed2, rss", - "name": "rss", - "id": 412 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "feed3, rss2", - "name": "rss2", - "id": 413 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "youtube, brand21", - "name": "youtube", - "id": 414 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "youtube2, brand22", - "name": "youtube2", - "id": 415 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "twitch, brand23", - "name": "twitch", - "id": 416 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "vimeo, brand24", - "name": "vimeo", - "id": 417 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "vimeo2, brand25", - "name": "vimeo2", - "id": 418 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "lanyrd, brand26", - "name": "lanyrd", - "id": 419 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "flickr, brand27", - "name": "flickr", - "id": 420 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "flickr2, brand28", - "name": "flickr2", - "id": 421 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "flickr3, brand29", - "name": "flickr3", - "id": 422 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "flickr4, brand30", - "name": "flickr4", - "id": 423 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "dribbble, brand31", - "name": "dribbble", - "id": 424 - }, - { - "order": 0, - "prevSize": 16, - "name": "behance", - "ligatures": "behance, brand32", - "id": 425 - }, - { - "order": 0, - "prevSize": 16, - "name": "behance2", - "ligatures": "behance2, brand33", - "id": 426 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "deviantart, brand34", - "name": "deviantart", - "id": 427 - }, - { - "order": 0, - "prevSize": 16, - "name": "500px", - "ligatures": "500px, brand35", - "id": 428 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "steam, brand36", - "name": "steam", - "id": 429 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "steam2, brand37", - "name": "steam2", - "id": 430 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "dropbox, brand38", - "name": "dropbox", - "id": 431 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "onedrive, brand39", - "name": "onedrive", - "id": 432 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "github, brand40", - "name": "github", - "id": 433 - }, - { - "order": 0, - "prevSize": 16, - "name": "npm", - "ligatures": "npm, brand41", - "id": 434 - }, - { - "order": 0, - "prevSize": 16, - "name": "basecamp", - "ligatures": "basecamp, brand42", - "id": 435 - }, - { - "order": 0, - "prevSize": 16, - "name": "trello", - "ligatures": "trello, brand43", - "id": 436 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "wordpress, brand44", - "name": "wordpress", - "id": 437 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "joomla, brand45", - "name": "joomla", - "id": 438 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "ello, brand46", - "name": "ello", - "id": 439 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "blogger, brand47", - "name": "blogger", - "id": 440 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "blogger2, brand48", - "name": "blogger2", - "id": 441 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "tumblr, brand49", - "name": "tumblr", - "id": 442 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "tumblr2, brand50", - "name": "tumblr2", - "id": 443 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "yahoo, brand51", - "name": "yahoo", - "id": 444 - }, - { - "order": 0, - "prevSize": 16, - "name": "yahoo2", - "ligatures": "yahoo2", - "id": 445 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "tux, brand52", - "name": "tux", - "id": 446 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "apple, brand53", - "name": "appleinc", - "id": 447 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "finder, brand54", - "name": "finder", - "id": 448 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "android, brand55", - "name": "android", - "id": 449 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "windows, brand56", - "name": "windows", - "id": 450 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "windows8, brand57", - "name": "windows8", - "id": 451 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "soundcloud, brand58", - "name": "soundcloud", - "id": 452 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "soundcloud2, brand59", - "name": "soundcloud2", - "id": 453 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "skype, brand60", - "name": "skype", - "id": 454 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "reddit, brand61", - "name": "reddit", - "id": 455 - }, - { - "order": 0, - "prevSize": 16, - "name": "hackernews", - "ligatures": "hackernews, brand62", - "id": 456 - }, - { - "order": 0, - "prevSize": 16, - "name": "wikipedia", - "ligatures": "wikipedia, brand63", - "id": 457 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "linkedin, brand64", - "name": "linkedin", - "id": 458 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "linkedin2, brand65", - "name": "linkedin2", - "id": 459 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "lastfm, brand66", - "name": "lastfm", - "id": 460 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "lastfm2, brand67", - "name": "lastfm2", - "id": 461 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "delicious, brand68", - "name": "delicious", - "id": 462 - }, - { - "order": 0, - "name": "stumbleupon", - "prevSize": 16, - "ligatures": "stumbleupon, brand69", - "id": 463 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "stumbleupon2, brand70", - "name": "stumbleupon2", - "id": 464 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "stackoverflow, brand71", - "name": "stackoverflow", - "id": 465 - }, - { - "order": 0, - "prevSize": 16, - "name": "pinterest", - "ligatures": "pinterest, brand72", - "id": 466 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "pinterest2, brand73", - "name": "pinterest2", - "id": 467 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "xing, brand74", - "name": "xing", - "id": 468 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "xing2, brand75", - "name": "xing2", - "codes": [ - 61231 - ], - "id": 469 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "flattr, brand76", - "name": "flattr", - "id": 470 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "foursquare, brand77", - "name": "foursquare", - "id": 471 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "yelp, brand78", - "name": "yelp", - "id": 472 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "paypal, brand79", - "name": "paypal", - "codes": [ - 61234 - ], - "id": 473 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "chrome, browser", - "name": "chrome", - "id": 474 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "firefox, browser2", - "name": "firefox", - "id": 475 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "IE, browser3", - "name": "IE", - "id": 476 - }, - { - "order": 0, - "prevSize": 16, - "name": "edge", - "ligatures": "edge, browser4", - "id": 477 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "safari, browser5", - "name": "safari", - "id": 478 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "opera, browser6", - "name": "opera", - "id": 479 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "file-pdf, file10", - "name": "file-pdf", - "id": 480 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "file-openoffice, file11", - "name": "file-openoffice", - "id": 481 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "file-word, file12", - "name": "file-word", - "id": 482 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "file-excel, file13", - "name": "file-excel", - "id": 483 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "libreoffice, file14", - "name": "libreoffice", - "id": 484 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "html-five, w3c", - "name": "html-five", - "id": 485 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "html-five2, w3c2", - "name": "html-five2", - "id": 486 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "css3, w3c3", - "name": "css3", - "id": 487 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "git, brand80", - "name": "git", - "id": 488 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "codepen, brand81", - "name": "codepen", - "id": 489 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "svg", - "name": "svg", - "id": 490 - }, - { - "order": 0, - "prevSize": 16, - "ligatures": "IcoMoon, icomoon", - "name": "IcoMoon", - "id": 491 - } - ], - "id": 0, - "metadata": { - "name": "IcoMoon - Free", - "licenseURL": "https://icomoon.io/#icons-icomoon", - "license": "GPL or CC BY 4.0", - "designerURL": "http://keyamoon.com", - "designer": "Keyamoon", - "url": "https://icomoon.io/#icons-icomoon" - }, - "height": 1024, - "prevSize": 32, - "icons": [ - { - "id": 0, - "paths": [ - "M1024 590.444l-512-397.426-512 397.428v-162.038l512-397.426 512 397.428zM896 576v384h-256v-256h-256v256h-256v-384l384-288z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "home", - "house" - ], - "grid": 16 - }, - { - "id": 1, - "paths": [ - "M512 32l-512 512 96 96 96-96v416h256v-192h128v192h256v-416l96 96 96-96-512-512zM512 448c-35.346 0-64-28.654-64-64s28.654-64 64-64c35.346 0 64 28.654 64 64s-28.654 64-64 64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "home", - "house" - ], - "grid": 16 - }, - { - "id": 2, - "paths": [ - "M1024 608l-192-192v-288h-128v160l-192-192-512 512v32h128v320h320v-192h128v192h320v-320h128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "home", - "house" - ], - "grid": 16 - }, - { - "id": 3, - "paths": [ - "M0 1024h512v-1024h-512v1024zM320 128h128v128h-128v-128zM320 384h128v128h-128v-128zM320 640h128v128h-128v-128zM64 128h128v128h-128v-128zM64 384h128v128h-128v-128zM64 640h128v128h-128v-128zM576 320h448v64h-448zM576 1024h128v-256h192v256h128v-576h-448z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "office", - "buildings", - "work" - ], - "grid": 16 - }, - { - "id": 4, - "paths": [ - "M896 256v-128h-896v704c0 35.346 28.654 64 64 64h864c53.022 0 96-42.978 96-96v-544h-128zM832 832h-768v-640h768v640zM128 320h640v64h-640zM512 448h256v64h-256zM512 576h256v64h-256zM512 704h192v64h-192zM128 448h320v320h-320z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "newspaper", - "news", - "paper" - ], - "grid": 16 - }, - { - "id": 5, - "paths": [ - "M864 0c88.364 0 160 71.634 160 160 0 36.020-11.91 69.258-32 96l-64 64-224-224 64-64c26.742-20.090 59.978-32 96-32zM64 736l-64 288 288-64 592-592-224-224-592 592zM715.578 363.578l-448 448-55.156-55.156 448-448 55.156 55.156z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "pencil", - "write", - "edit" - ], - "grid": 16 - }, - { - "id": 6, - "paths": [ - "M384 640l128-64 448-448-64-64-448 448-64 128zM289.3 867.098c-31.632-66.728-65.666-100.762-132.396-132.394l99.096-272.792 128-77.912 384-384h-192l-384 384-192 640 640-192 384-384v-192l-384 384-77.912 128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "pencil", - "write", - "edit" - ], - "grid": 16 - }, - { - "id": 7, - "paths": [ - "M0 1024c128-384 463-1024 1024-1024-263 211-384 704-576 704s-192 0-192 0l-192 320h-64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "quill", - "feather", - "write", - "edit" - ], - "grid": 16 - }, - { - "id": 8, - "paths": [ - "M1018.17 291.89l-286.058-286.058c-9.334-9.334-21.644-7.234-27.356 4.666l-38.354 79.904 267.198 267.198 79.904-38.354c11.9-5.712 14-18.022 4.666-27.356z", - "M615.384 135.384l-263.384 21.95c-17.5 2.166-32.080 5.898-37.090 28.752-0.006 0.024-0.012 0.042-0.018 0.066-71.422 343.070-314.892 677.848-314.892 677.848l57.374 57.374 271.986-271.99c-5.996-12.53-9.36-26.564-9.36-41.384 0-53.020 42.98-96 96-96s96 42.98 96 96-42.98 96-96 96c-14.82 0-28.852-3.364-41.384-9.36l-271.988 271.986 57.372 57.374c0 0 334.778-243.47 677.848-314.892 0.024-0.006 0.042-0.012 0.066-0.018 22.854-5.010 26.586-19.59 28.752-37.090l21.95-263.384-273.232-273.232z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "pen", - "write", - "edit" - ], - "grid": 16 - }, - { - "id": 9, - "paths": [ - "M384 0v96c73.482 0 144.712 14.37 211.716 42.71 64.768 27.394 122.958 66.632 172.948 116.624s89.228 108.18 116.624 172.948c28.342 67.004 42.712 138.238 42.712 211.718h96c0-353.46-286.54-640-640-640z", - "M384 192v96c94.022 0 182.418 36.614 248.9 103.098 66.486 66.484 103.1 154.878 103.1 248.902h96c0-247.422-200.576-448-448-448z", - "M480 384l-64 64-224 64-192 416 25.374 25.374 232.804-232.804c-1.412-5.286-2.178-10.84-2.178-16.57 0-35.346 28.654-64 64-64s64 28.654 64 64-28.654 64-64 64c-5.732 0-11.282-0.764-16.568-2.178l-232.804 232.804 25.372 25.374 416-192 64-224 64-64-160-160z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "blog", - "pen", - "feed", - "publish", - "broadcast", - "write" - ], - "grid": 16 - }, - { - "id": 10, - "paths": [ - "M986.51 37.49c-49.988-49.986-131.032-49.986-181.020 0l-172.118 172.118-121.372-121.372-135.764 135.764 106.426 106.426-472.118 472.118c-8.048 8.048-11.468 18.958-10.3 29.456h-0.244v160c0 17.674 14.328 32 32 32h160c0 0 2.664 0 4 0 9.212 0 18.426-3.516 25.456-10.544l472.118-472.118 106.426 106.426 135.764-135.764-121.372-121.372 172.118-172.118c49.986-49.988 49.986-131.032 0-181.020zM173.090 960h-109.090v-109.090l469.574-469.572 109.088 109.088-469.572 469.574z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "eyedropper", - "color", - "color-picker", - "sample" - ], - "grid": 16 - }, - { - "id": 11, - "paths": [ - "M864.626 473.162c-65.754-183.44-205.11-348.15-352.626-473.162-147.516 125.012-286.87 289.722-352.626 473.162-40.664 113.436-44.682 236.562 12.584 345.4 65.846 125.14 198.632 205.438 340.042 205.438s274.196-80.298 340.040-205.44c57.27-108.838 53.25-231.962 12.586-345.398zM738.764 758.956c-43.802 83.252-132.812 137.044-226.764 137.044-55.12 0-108.524-18.536-152.112-50.652 13.242 1.724 26.632 2.652 40.112 2.652 117.426 0 228.668-67.214 283.402-171.242 44.878-85.292 40.978-173.848 23.882-244.338 14.558 28.15 26.906 56.198 36.848 83.932 22.606 63.062 40.024 156.34-5.368 242.604z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "droplet", - "color", - "water" - ], - "grid": 16 - }, - { - "id": 12, - "paths": [ - "M1024 576v-384h-192v-64c0-35.2-28.8-64-64-64h-704c-35.2 0-64 28.8-64 64v192c0 35.2 28.8 64 64 64h704c35.2 0 64-28.8 64-64v-64h128v256h-576v128h-32c-17.674 0-32 14.326-32 32v320c0 17.674 14.326 32 32 32h128c17.674 0 32-14.326 32-32v-320c0-17.674-14.326-32-32-32h-32v-64h576zM768 192h-704v-64h704v64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "paint-format", - "format", - "color" - ], - "grid": 16 - }, - { - "id": 13, - "paths": [ - "M959.884 128c0.040 0.034 0.082 0.076 0.116 0.116v767.77c-0.034 0.040-0.076 0.082-0.116 0.116h-895.77c-0.040-0.034-0.082-0.076-0.114-0.116v-767.772c0.034-0.040 0.076-0.082 0.114-0.114h895.77zM960 64h-896c-35.2 0-64 28.8-64 64v768c0 35.2 28.8 64 64 64h896c35.2 0 64-28.8 64-64v-768c0-35.2-28.8-64-64-64v0z", - "M832 288c0 53.020-42.98 96-96 96s-96-42.98-96-96 42.98-96 96-96 96 42.98 96 96z", - "M896 832h-768v-128l224-384 256 320h64l224-192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "image", - "picture", - "photo", - "graphic" - ], - "grid": 16 - }, - { - "id": 14, - "paths": [ - "M1088 128h-64v-64c0-35.2-28.8-64-64-64h-896c-35.2 0-64 28.8-64 64v768c0 35.2 28.8 64 64 64h64v64c0 35.2 28.8 64 64 64h896c35.2 0 64-28.8 64-64v-768c0-35.2-28.8-64-64-64zM128 192v640h-63.886c-0.040-0.034-0.082-0.076-0.114-0.116v-767.77c0.034-0.040 0.076-0.082 0.114-0.114h895.77c0.040 0.034 0.082 0.076 0.116 0.116v63.884h-768c-35.2 0-64 28.8-64 64v0zM1088 959.884c-0.034 0.040-0.076 0.082-0.116 0.116h-895.77c-0.040-0.034-0.082-0.076-0.114-0.116v-767.77c0.034-0.040 0.076-0.082 0.114-0.114h895.77c0.040 0.034 0.082 0.076 0.116 0.116v767.768z", - "M960 352c0 53.020-42.98 96-96 96s-96-42.98-96-96 42.98-96 96-96 96 42.98 96 96z", - "M1024 896h-768v-128l224-384 256 320h64l224-192z" - ], - "width": 1152, - "attrs": [], - "isMulticolor": false, - "tags": [ - "images", - "pictures", - "photos", - "graphics" - ], - "grid": 16 - }, - { - "id": 15, - "paths": [ - "M304 608c0 114.876 93.124 208 208 208s208-93.124 208-208-93.124-208-208-208-208 93.124-208 208zM960 256h-224c-16-64-32-128-96-128h-256c-64 0-80 64-96 128h-224c-35.2 0-64 28.8-64 64v576c0 35.2 28.8 64 64 64h896c35.2 0 64-28.8 64-64v-576c0-35.2-28.8-64-64-64zM512 892c-156.85 0-284-127.148-284-284 0-156.85 127.15-284 284-284 156.852 0 284 127.15 284 284 0 156.852-127.146 284-284 284zM960 448h-128v-64h128v64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "camera", - "photo", - "picture", - "image" - ], - "grid": 16 - }, - { - "id": 16, - "paths": [ - "M288 576h-64v448h64c17.6 0 32-14.4 32-32v-384c0-17.6-14.4-32-32-32z", - "M736 576c-17.602 0-32 14.4-32 32v384c0 17.6 14.398 32 32 32h64v-448h-64z", - "M1024 512c0-282.77-229.23-512-512-512s-512 229.23-512 512c0 61.412 10.83 120.29 30.656 174.848-19.478 33.206-30.656 71.87-30.656 113.152 0 112.846 83.448 206.188 192 221.716v-443.418c-31.914 4.566-61.664 15.842-87.754 32.378-5.392-26.718-8.246-54.364-8.246-82.676 0-229.75 186.25-416 416-416s416 186.25 416 416c0 28.314-2.83 55.968-8.22 82.696-26.1-16.546-55.854-27.848-87.78-32.418v443.44c108.548-15.532 192-108.874 192-221.714 0-41.274-11.178-79.934-30.648-113.138 19.828-54.566 30.648-113.452 30.648-174.866z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "headphones", - "headset", - "music", - "audio" - ], - "grid": 16 - }, - { - "id": 17, - "paths": [ - "M960 0h64v736c0 88.366-100.29 160-224 160s-224-71.634-224-160c0-88.368 100.29-160 224-160 62.684 0 119.342 18.4 160 48.040v-368.040l-512 113.778v494.222c0 88.366-100.288 160-224 160s-224-71.634-224-160c0-88.368 100.288-160 224-160 62.684 0 119.342 18.4 160 48.040v-624.040l576-128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "music", - "song", - "audio", - "sound", - "note" - ], - "grid": 16 - }, - { - "id": 18, - "paths": [ - "M981.188 160.108c-143.632-20.65-302.332-32.108-469.186-32.108-166.86 0-325.556 11.458-469.194 32.108-27.53 107.726-42.808 226.75-42.808 351.892 0 125.14 15.278 244.166 42.808 351.89 143.638 20.652 302.336 32.11 469.194 32.11 166.854 0 325.552-11.458 469.186-32.11 27.532-107.724 42.812-226.75 42.812-351.89 0-125.142-15.28-244.166-42.812-351.892zM384.002 704v-384l320 192-320 192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "play", - "video", - "movie" - ], - "grid": 16 - }, - { - "id": 19, - "paths": [ - "M0 128v768h1024v-768h-1024zM192 832h-128v-128h128v128zM192 576h-128v-128h128v128zM192 320h-128v-128h128v128zM768 832h-512v-640h512v640zM960 832h-128v-128h128v128zM960 576h-128v-128h128v128zM960 320h-128v-128h128v128zM384 320v384l256-192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "film", - "video", - "movie", - "tape", - "play" - ], - "grid": 16 - }, - { - "id": 20, - "paths": [ - "M384 288c0-88.366 71.634-160 160-160s160 71.634 160 160c0 88.366-71.634 160-160 160s-160-71.634-160-160zM0 288c0-88.366 71.634-160 160-160s160 71.634 160 160c0 88.366-71.634 160-160 160s-160-71.634-160-160zM768 608v-96c0-35.2-28.8-64-64-64h-640c-35.2 0-64 28.8-64 64v320c0 35.2 28.8 64 64 64h640c35.2 0 64-28.8 64-64v-96l256 160v-448l-256 160zM640 768h-512v-192h512v192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "video-camera", - "video", - "media", - "film", - "movie" - ], - "grid": 16 - }, - { - "id": 21, - "paths": [ - "M864 192h-512c-88 0-160 72-160 160v512c0 88 72 160 160 160h512c88 0 160-72 160-160v-512c0-88-72-160-160-160zM416 896c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96zM416 512c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96zM608 704c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96zM800 896c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96zM800 512c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96zM828.76 128c-14.93-72.804-79.71-128-156.76-128h-512c-88 0-160 72-160 160v512c0 77.046 55.196 141.83 128 156.76v-636.76c0-35.2 28.8-64 64-64h636.76z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "dice", - "game", - "chance", - "luck", - "random", - "gample" - ], - "grid": 16 - }, - { - "id": 22, - "paths": [ - "M964.73 178.804c-93.902-109.45-233.21-178.804-388.73-178.804-282.77 0-512 229.23-512 512s229.23 512 512 512c155.52 0 294.828-69.356 388.728-178.804l-324.728-333.196 324.73-333.196zM704 120.602c39.432 0 71.398 31.964 71.398 71.398 0 39.432-31.966 71.398-71.398 71.398s-71.398-31.966-71.398-71.398c0-39.432 31.966-71.398 71.398-71.398z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "pacman", - "game", - "arcade" - ], - "grid": 16 - }, - { - "id": 23, - "paths": [ - "M817.57 348.15c-193.566-143.858-260.266-259.018-305.566-348.148v0c-0.004 0-0.004-0.002-0.004-0.002v0.002c-45.296 89.13-112 204.292-305.566 348.148-330.036 245.286-19.376 587.668 253.758 399.224-17.796 116.93-78.53 202.172-140.208 238.882v37.744h384.032v-37.74c-61.682-36.708-122.41-121.954-140.212-238.884 273.136 188.446 583.8-153.94 253.766-399.226z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "spades", - "cards", - "poker" - ], - "grid": 16 - }, - { - "id": 24, - "paths": [ - "M786.832 392.772c-59.032 0-112.086 24.596-149.852 64.694-15.996 16.984-43.762 37.112-73.8 54.81 14.11-53.868 58.676-121.7 89.628-151.456 39.64-38.17 63.984-91.83 63.984-151.5 0.006-114.894-91.476-208.096-204.788-209.32-113.32 1.222-204.796 94.426-204.796 209.318 0 59.672 24.344 113.33 63.986 151.5 30.954 29.756 75.52 97.588 89.628 151.456-30.042-17.7-57.806-37.826-73.8-54.81-37.768-40.098-90.82-64.694-149.85-64.694-114.386 0-207.080 93.664-207.080 209.328 0 115.638 92.692 209.338 207.080 209.338 59.042 0 112.082-25.356 149.85-65.452 16.804-17.872 46.444-40.138 78.292-58.632-3.002 147.692-73.532 256.168-145.318 298.906v37.742h384.014v-37.74c-71.792-42.736-142.32-151.216-145.32-298.906 31.852 18.494 61.488 40.768 78.292 58.632 37.766 40.094 90.808 65.452 149.852 65.452 114.386 0 207.078-93.7 207.078-209.338-0.002-115.664-92.692-209.328-207.080-209.328z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "clubs", - "cards", - "poker" - ], - "grid": 16 - }, - { - "id": 25, - "paths": [ - "M512 0l-320 512 320 512 320-512z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "diamonds", - "cards", - "poker" - ], - "grid": 16 - }, - { - "id": 26, - "paths": [ - "M1024 429.256c0-200.926-58.792-363.938-131.482-365.226 0.292-0.006 0.578-0.030 0.872-0.030h-82.942c0 0-194.8 146.336-475.23 203.754-8.56 45.292-14.030 99.274-14.030 161.502s5.466 116.208 14.030 161.5c280.428 57.418 475.23 203.756 475.23 203.756h82.942c-0.292 0-0.578-0.024-0.872-0.032 72.696-1.288 131.482-164.298 131.482-365.224zM864.824 739.252c-9.382 0-19.532-9.742-24.746-15.548-12.63-14.064-24.792-35.96-35.188-63.328-23.256-61.232-36.066-143.31-36.066-231.124 0-87.81 12.81-169.89 36.066-231.122 10.394-27.368 22.562-49.266 35.188-63.328 5.214-5.812 15.364-15.552 24.746-15.552 9.38 0 19.536 9.744 24.744 15.552 12.634 14.064 24.796 35.958 35.188 63.328 23.258 61.23 36.068 143.312 36.068 231.122 0 87.804-12.81 169.888-36.068 231.124-10.39 27.368-22.562 49.264-35.188 63.328-5.208 5.806-15.36 15.548-24.744 15.548zM251.812 429.256c0-51.95 3.81-102.43 11.052-149.094-47.372 6.554-88.942 10.324-140.34 10.324-67.058 0-67.058 0-67.058 0l-55.466 94.686v88.17l55.46 94.686c0 0 0 0 67.060 0 51.398 0 92.968 3.774 140.34 10.324-7.236-46.664-11.048-97.146-11.048-149.096zM368.15 642.172l-127.998-24.51 81.842 321.544c4.236 16.634 20.744 25.038 36.686 18.654l118.556-47.452c15.944-6.376 22.328-23.964 14.196-39.084l-123.282-229.152zM864.824 548.73c-3.618 0-7.528-3.754-9.538-5.992-4.87-5.42-9.556-13.86-13.562-24.408-8.962-23.6-13.9-55.234-13.9-89.078s4.938-65.478 13.9-89.078c4.006-10.548 8.696-18.988 13.562-24.408 2.010-2.24 5.92-5.994 9.538-5.994 3.616 0 7.53 3.756 9.538 5.994 4.87 5.42 9.556 13.858 13.56 24.408 8.964 23.598 13.902 55.234 13.902 89.078 0 33.842-4.938 65.478-13.902 89.078-4.004 10.548-8.696 18.988-13.56 24.408-2.008 2.238-5.92 5.992-9.538 5.992z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "bullhorn", - "megaphone", - "announcement", - "advertisement", - "news" - ], - "grid": 16 - }, - { - "id": 27, - "paths": [ - "M640 576c105.87 0 201.87 43.066 271.402 112.598l-90.468 90.468c-46.354-46.356-110.356-75.066-180.934-75.066s-134.578 28.71-180.934 75.066l-90.468-90.468c69.532-69.532 165.532-112.598 271.402-112.598zM187.452 507.452c120.88-120.88 281.598-187.452 452.548-187.452s331.668 66.572 452.55 187.452l-90.51 90.508c-96.706-96.704-225.28-149.96-362.040-149.96-136.762 0-265.334 53.256-362.038 149.962l-90.51-90.51zM988.784 134.438c106.702 45.132 202.516 109.728 284.782 191.996v0l-90.508 90.508c-145.056-145.056-337.92-224.942-543.058-224.942-205.14 0-398 79.886-543.058 224.942l-90.51-90.51c82.268-82.266 178.082-146.862 284.784-191.994 110.504-46.738 227.852-70.438 348.784-70.438s238.278 23.7 348.784 70.438zM576 896c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64z" - ], - "width": 1280, - "attrs": [], - "isMulticolor": false, - "tags": [ - "connection", - "wifi", - "wave" - ], - "grid": 16 - }, - { - "id": 28, - "paths": [ - "M1024 512c0-282.77-229.23-512-512-512s-512 229.23-512 512c0 220.054 138.836 407.664 333.686 480.068l-13.686 31.932h384l-13.686-31.932c194.85-72.404 333.686-260.014 333.686-480.068zM486.79 634.826c-22.808-9.788-38.79-32.436-38.79-58.826 0-35.346 28.654-64 64-64s64 28.654 64 64c0 26.39-15.978 49.044-38.786 58.834l-25.214-58.834-25.21 58.826zM538.268 637.292c58.092-12.118 101.732-63.602 101.732-125.292 0-70.694-57.306-128-128-128-70.692 0-128 57.306-128 128 0 61.692 43.662 113.122 101.76 125.228l-74.624 174.122c-91.23-39.15-155.136-129.784-155.136-235.35 0-141.384 114.616-268 256-268s256 126.616 256 268c0 105.566-63.906 196.2-155.136 235.35l-74.596-174.058zM688.448 987.708l-73.924-172.486c126.446-42.738 217.476-162.346 217.476-303.222 0-176.73-143.268-320-320-320-176.73 0-320 143.27-320 320 0 140.876 91.030 260.484 217.476 303.222l-73.924 172.486c-159.594-68.488-271.386-227.034-271.386-411.708 0-247.332 200.502-459.834 447.834-459.834s447.834 212.502 447.834 459.834c0 184.674-111.792 343.22-271.386 411.708z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "podcast", - "broadcast", - "live", - "radio", - "feed" - ], - "grid": 16 - }, - { - "id": 29, - "paths": [ - "M384 512c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128zM664.348 230.526c99.852 54.158 167.652 159.898 167.652 281.474s-67.8 227.316-167.652 281.474c44.066-70.126 71.652-170.27 71.652-281.474s-27.586-211.348-71.652-281.474zM288 512c0 111.204 27.584 211.348 71.652 281.474-99.852-54.16-167.652-159.898-167.652-281.474s67.8-227.314 167.652-281.474c-44.068 70.126-71.652 170.27-71.652 281.474zM96 512c0 171.9 54.404 326.184 140.652 431.722-142.302-90.948-236.652-250.314-236.652-431.722s94.35-340.774 236.652-431.722c-86.248 105.538-140.652 259.822-140.652 431.722zM787.352 80.28c142.298 90.946 236.648 250.312 236.648 431.72s-94.35 340.774-236.648 431.72c86.244-105.536 140.648-259.82 140.648-431.72s-54.404-326.184-140.648-431.72z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "feed", - "wave", - "radio", - "live", - "broadcast" - ], - "grid": 16 - }, - { - "id": 30, - "paths": [ - "M480 704c88.366 0 160-71.634 160-160v-384c0-88.366-71.634-160-160-160s-160 71.634-160 160v384c0 88.366 71.636 160 160 160zM704 448v96c0 123.71-100.29 224-224 224-123.712 0-224-100.29-224-224v-96h-64v96c0 148.238 112.004 270.3 256 286.22v129.78h-128v64h320v-64h-128v-129.78c143.994-15.92 256-137.982 256-286.22v-96h-64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "mic", - "microphone", - "voice", - "audio" - ], - "grid": 16 - }, - { - "id": 31, - "paths": [ - "M896 128v832h-672c-53.026 0-96-42.98-96-96s42.974-96 96-96h608v-768h-640c-70.398 0-128 57.6-128 128v768c0 70.4 57.602 128 128 128h768v-896h-64z", - "M224.056 832v0c-0.018 0.002-0.038 0-0.056 0-17.672 0-32 14.326-32 32s14.328 32 32 32c0.018 0 0.038-0.002 0.056-0.002v0.002h607.89v-64h-607.89z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "book", - "read", - "reading" - ], - "grid": 16 - }, - { - "id": 32, - "paths": [ - "M224 128h-192c-17.6 0-32 14.4-32 32v704c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-704c0-17.6-14.4-32-32-32zM192 320h-128v-64h128v64z", - "M544 128h-192c-17.6 0-32 14.4-32 32v704c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-704c0-17.6-14.4-32-32-32zM512 320h-128v-64h128v64z", - "M765.088 177.48l-171.464 86.394c-15.716 7.918-22.096 27.258-14.178 42.976l287.978 571.548c7.918 15.718 27.258 22.098 42.976 14.178l171.464-86.392c15.716-7.92 22.096-27.26 14.178-42.974l-287.978-571.55c-7.92-15.718-27.26-22.1-42.976-14.18z" - ], - "width": 1152, - "attrs": [], - "isMulticolor": false, - "tags": [ - "books", - "library", - "archive" - ], - "grid": 16 - }, - { - "id": 33, - "paths": [ - "M1024 960v-64h-64v-384h64v-64h-192v64h64v384h-192v-384h64v-64h-192v64h64v384h-192v-384h64v-64h-192v64h64v384h-192v-384h64v-64h-192v64h64v384h-64v64h-64v64h1088v-64h-64z", - "M512 0h64l512 320v64h-1088v-64l512-320z" - ], - "width": 1088, - "attrs": [], - "isMulticolor": false, - "tags": [ - "library", - "bank", - "building" - ], - "grid": 16 - }, - { - "id": 34, - "paths": [ - "M864 0h-768c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h768c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM832 896h-704v-768h704v768zM256 448h448v64h-448zM256 576h448v64h-448zM256 704h448v64h-448zM256 320h448v64h-448z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "file-text", - "file", - "document", - "list", - "paper" - ], - "grid": 16 - }, - { - "id": 35, - "paths": [ - "M864 0h-768c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h768c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM832 896h-704v-768h704v768zM256 576h448v64h-448zM256 704h448v64h-448zM320 288c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96zM480 384h-128c-52.8 0-96 28.8-96 64v64h320v-64c0-35.2-43.2-64-96-64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "profile", - "file", - "document", - "page", - "user", - "paper" - ], - "grid": 16 - }, - { - "id": 36, - "paths": [ - "M917.806 229.076c-22.212-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.888 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.984 17.78 50.678 41.878 81.374 72.572zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.326 32 32 32h224v624z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "file-empty", - "file", - "document", - "paper", - "page", - "new", - "empty", - "blank" - ], - "grid": 16 - }, - { - "id": 37, - "paths": [ - "M917.806 357.076c-22.21-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-368c-44.114 0-80 35.888-80 80v736c0 44.112 35.886 80 80 80h608c44.112 0 80-35.888 80-80v-496c0-14.332-4.372-39.35-42.194-90.924zM785.374 302.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.982 17.78 50.678 41.878 81.374 72.572v0zM896 944c0 8.672-7.328 16-16 16h-608c-8.672 0-16-7.328-16-16v-736c0-8.672 7.328-16 16-16 0 0 367.956-0.002 368 0v224c0 17.672 14.324 32 32 32h224v496z", - "M602.924 42.196c-51.574-37.822-76.592-42.196-90.924-42.196h-368c-44.112 0-80 35.888-80 80v736c0 38.632 27.528 70.958 64 78.39v-814.39c0-8.672 7.328-16 16-16h486.876c-9.646-7.92-19.028-15.26-27.952-21.804z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "files-empty", - "files", - "documents", - "papers", - "pages" - ], - "grid": 16 - }, - { - "id": 38, - "paths": [ - "M917.806 229.076c-22.212-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.888 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.984 17.78 50.678 41.878 81.374 72.572zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.326 32 32 32h224v624z", - "M736 832h-448c-17.672 0-32-14.326-32-32s14.328-32 32-32h448c17.674 0 32 14.326 32 32s-14.326 32-32 32z", - "M736 704h-448c-17.672 0-32-14.326-32-32s14.328-32 32-32h448c17.674 0 32 14.326 32 32s-14.326 32-32 32z", - "M736 576h-448c-17.672 0-32-14.326-32-32s14.328-32 32-32h448c17.674 0 32 14.326 32 32s-14.326 32-32 32z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "file-text", - "file", - "document", - "list", - "paper", - "page" - ], - "grid": 16 - }, - { - "id": 39, - "paths": [ - "M832 896h-640v-128l192-320 263 320 185-128v256z", - "M832 480c0 53.020-42.98 96-96 96-53.022 0-96-42.98-96-96s42.978-96 96-96c53.020 0 96 42.98 96 96z", - "M917.806 229.076c-22.212-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.888 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.984 17.78 50.678 41.878 81.374 72.572zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.326 32 32 32h224v624z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "file-picture", - "file", - "document", - "file-image" - ], - "grid": 16 - }, - { - "id": 40, - "paths": [ - "M917.806 229.076c-22.21-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.886 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924v0zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.982 17.78 50.678 41.878 81.374 72.572v0zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.324 32 32 32h224v624z", - "M756.288 391.252c-7.414-6.080-17.164-8.514-26.562-6.632l-320 64c-14.958 2.994-25.726 16.126-25.726 31.38v236.876c-18.832-8.174-40.678-12.876-64-12.876-70.692 0-128 42.98-128 96s57.308 96 128 96 128-42.98 128-96v-229.766l256-51.202v133.842c-18.832-8.174-40.678-12.876-64-12.876-70.692 0-128 42.98-128 96s57.308 96 128 96 128-42.98 128-96v-319.998c0-9.586-4.298-18.668-11.712-24.748z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "file-music", - "file", - "document", - "file-song", - "file-audio" - ], - "grid": 16 - }, - { - "id": 41, - "paths": [ - "M384 384l320 224-320 224v-448z", - "M917.806 229.076c-22.212-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.888 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.984 17.78 50.678 41.878 81.374 72.572zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.326 32 32 32h224v624z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "file-play", - "file", - "document", - "file-media", - "file-video" - ], - "grid": 16 - }, - { - "id": 42, - "paths": [ - "M917.806 229.076c-22.208-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.594-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.882 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924v0 0zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.98 17.78 50.678 41.878 81.374 72.572v0 0zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.32 32 32 32h224v624z", - "M256 512h320v320h-320v-320z", - "M576 640l192-128v320l-192-128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "file-video", - "file", - "document", - "file-camera" - ], - "grid": 16 - }, - { - "id": 43, - "paths": [ - "M917.806 229.076c-22.208-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.884 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924v0 0zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.98 17.78 50.678 41.878 81.374 72.572v0 0zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.322 32 32 32h224v624z", - "M256 64h128v64h-128v-64z", - "M384 128h128v64h-128v-64z", - "M256 192h128v64h-128v-64z", - "M384 256h128v64h-128v-64z", - "M256 320h128v64h-128v-64z", - "M384 384h128v64h-128v-64z", - "M256 448h128v64h-128v-64z", - "M384 512h128v64h-128v-64z", - "M256 848c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-80v-64h-128v272zM448 768v64h-128v-64h128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "file-zip", - "file", - "document", - "file-compressed", - "file-type", - "file-format" - ], - "grid": 16 - }, - { - "id": 44, - "paths": [ - "M640 256v-256h-448l-192 192v576h384v256h640v-768h-384zM192 90.51v101.49h-101.49l101.49-101.49zM64 704v-448h192v-192h320v192l-192 192v256h-320zM576 346.51v101.49h-101.49l101.49-101.49zM960 960h-512v-448h192v-192h320v640z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "copy", - "duplicate", - "files", - "pages", - "papers", - "documents" - ], - "grid": 16 - }, - { - "id": 45, - "paths": [ - "M704 128h-128v-64c0-35.2-28.8-64-64-64h-128c-35.204 0-64 28.8-64 64v64h-128v128h512v-128zM512 128h-128v-63.886c0.034-0.038 0.072-0.078 0.114-0.114h127.768c0.042 0.036 0.082 0.076 0.118 0.114v63.886zM832 320v-160c0-17.6-14.4-32-32-32h-64v64h32v128h-192l-192 192v256h-256v-576h32v-64h-64c-17.602 0-32 14.4-32 32v640c0 17.6 14.398 32 32 32h288v192h640v-704h-192zM576 410.51v101.49h-101.49l101.49-101.49zM960 960h-512v-384h192v-192h320v576z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "paste", - "clipboard-file" - ], - "grid": 16 - }, - { - "id": 46, - "paths": [ - "M1024 320l-512-256-512 256 512 256 512-256zM512 148.97l342.058 171.030-342.058 171.030-342.058-171.030 342.058-171.030zM921.444 460.722l102.556 51.278-512 256-512-256 102.556-51.278 409.444 204.722zM921.444 652.722l102.556 51.278-512 256-512-256 102.556-51.278 409.444 204.722z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "stack", - "layers" - ], - "grid": 16 - }, - { - "id": 47, - "paths": [ - "M448 128l128 128h448v704h-1024v-832z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "folder", - "directory", - "category", - "browse" - ], - "grid": 16 - }, - { - "id": 48, - "paths": [ - "M832 960l192-512h-832l-192 512zM128 384l-128 576v-832h288l128 128h416v128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "folder-open", - "directory", - "category", - "browse" - ], - "grid": 16 - }, - { - "id": 49, - "paths": [ - "M576 256l-128-128h-448v832h1024v-704h-448zM704 704h-128v128h-128v-128h-128v-128h128v-128h128v128h128v128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "folder-plus", - "directory", - "folder-add" - ], - "grid": 16 - }, - { - "id": 50, - "paths": [ - "M576 256l-128-128h-448v832h1024v-704h-448zM704 704h-384v-128h384v128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "folder-minus", - "directory", - "folder-remove" - ], - "grid": 16 - }, - { - "id": 51, - "paths": [ - "M576 256l-128-128h-448v832h1024v-704h-448zM512 864l-224-224h160v-256h128v256h160l-224 224z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "folder-download", - "directory", - "folder-save" - ], - "grid": 16 - }, - { - "id": 52, - "paths": [ - "M576 256l-128-128h-448v832h1024v-704h-448zM512 480l224 224h-160v256h-128v-256h-160l224-224z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "folder-upload", - "directory", - "folder-load" - ], - "grid": 16 - }, - { - "id": 53, - "paths": [ - "M976 0h-384c-26.4 0-63.274 15.274-81.942 33.942l-476.116 476.116c-18.668 18.668-18.668 49.214 0 67.882l412.118 412.118c18.668 18.668 49.214 18.668 67.882 0l476.118-476.118c18.666-18.666 33.94-55.54 33.94-81.94v-384c0-26.4-21.6-48-48-48zM736 384c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "price-tag" - ], - "grid": 16 - }, - { - "id": 54, - "paths": [ - "M1232 0h-384c-26.4 0-63.274 15.274-81.942 33.942l-476.116 476.116c-18.668 18.668-18.668 49.214 0 67.882l412.118 412.118c18.668 18.668 49.214 18.668 67.882 0l476.118-476.118c18.666-18.666 33.94-55.54 33.94-81.94v-384c0-26.4-21.6-48-48-48zM992 384c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96z", - "M128 544l544-544h-80c-26.4 0-63.274 15.274-81.942 33.942l-476.116 476.116c-18.668 18.668-18.668 49.214 0 67.882l412.118 412.118c18.668 18.668 49.214 18.668 67.882 0l30.058-30.058-416-416z" - ], - "width": 1280, - "attrs": [], - "isMulticolor": false, - "tags": [ - "price-tags" - ], - "grid": 16 - }, - { - "id": 55, - "paths": [ - "M0 128h128v640h-128zM192 128h64v640h-64zM320 128h64v640h-64zM512 128h64v640h-64zM768 128h64v640h-64zM960 128h64v640h-64zM640 128h32v640h-32zM448 128h32v640h-32zM864 128h32v640h-32zM0 832h64v64h-64zM192 832h64v64h-64zM320 832h64v64h-64zM640 832h64v64h-64zM960 832h64v64h-64zM768 832h128v64h-128zM448 832h128v64h-128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "barcode" - ], - "grid": 16 - }, - { - "id": 56, - "paths": [ - "M320 64h-256v256h256v-256zM384 0v0 384h-384v-384h384zM128 128h128v128h-128zM960 64h-256v256h256v-256zM1024 0v0 384h-384v-384h384zM768 128h128v128h-128zM320 704h-256v256h256v-256zM384 640v0 384h-384v-384h384zM128 768h128v128h-128zM448 0h64v64h-64zM512 64h64v64h-64zM448 128h64v64h-64zM512 192h64v64h-64zM448 256h64v64h-64zM512 320h64v64h-64zM448 384h64v64h-64zM448 512h64v64h-64zM512 576h64v64h-64zM448 640h64v64h-64zM512 704h64v64h-64zM448 768h64v64h-64zM512 832h64v64h-64zM448 896h64v64h-64zM512 960h64v64h-64zM960 512h64v64h-64zM64 512h64v64h-64zM128 448h64v64h-64zM0 448h64v64h-64zM256 448h64v64h-64zM320 512h64v64h-64zM384 448h64v64h-64zM576 512h64v64h-64zM640 448h64v64h-64zM704 512h64v64h-64zM768 448h64v64h-64zM832 512h64v64h-64zM896 448h64v64h-64zM960 640h64v64h-64zM576 640h64v64h-64zM640 576h64v64h-64zM704 640h64v64h-64zM832 640h64v64h-64zM896 576h64v64h-64zM960 768h64v64h-64zM576 768h64v64h-64zM640 704h64v64h-64zM768 704h64v64h-64zM832 768h64v64h-64zM896 704h64v64h-64zM960 896h64v64h-64zM640 832h64v64h-64zM704 896h64v64h-64zM768 832h64v64h-64zM832 896h64v64h-64zM640 960h64v64h-64zM768 960h64v64h-64zM896 960h64v64h-64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "qrcode" - ], - "grid": 16 - }, - { - "id": 57, - "paths": [ - "M575.996 320l127.998 127.998-255.994 255.994-127.998-127.998zM1001.526 297.504l-73.516-73.516-32.008 32.008c-16.378 16.38-39.010 26.51-64 26.51-49.988 0-90.514-40.522-90.514-90.51 0-25.002 10.14-47.638 26.534-64.018l31.988-31.986-73.518-73.516c-29.968-29.968-79.008-29.968-108.976 0l-595.040 595.038c-29.966 29.968-29.966 79.010 0 108.976l73.52 73.518 31.962-31.964c16.382-16.406 39.030-26.552 64.044-26.552 49.988 0 90.51 40.524 90.51 90.51 0 25.006-10.14 47.64-26.534 64.022l-31.984 31.986 73.516 73.518c29.966 29.966 79.008 29.966 108.976 0l595.040-595.040c29.964-29.976 29.964-79.016 0-108.984zM448.002 831.996l-256-256 384-384 256 256-384 384z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "ticket", - "theater", - "cinema" - ], - "grid": 16 - }, - { - "id": 58, - "paths": [ - "M384 928c0 53.019-42.981 96-96 96s-96-42.981-96-96c0-53.019 42.981-96 96-96s96 42.981 96 96z", - "M1024 928c0 53.019-42.981 96-96 96s-96-42.981-96-96c0-53.019 42.981-96 96-96s96 42.981 96 96z", - "M1024 512v-384h-768c0-35.346-28.654-64-64-64h-192v64h128l48.074 412.054c-29.294 23.458-48.074 59.5-48.074 99.946 0 70.696 57.308 128 128 128h768v-64h-768c-35.346 0-64-28.654-64-64 0-0.218 0.014-0.436 0.016-0.656l831.984-127.344z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "cart", - "purchase", - "ecommerce", - "shopping" - ], - "grid": 16 - }, - { - "id": 59, - "paths": [ - "M480 64c-265.096 0-480 214.904-480 480 0 265.098 214.904 480 480 480 265.098 0 480-214.902 480-480 0-265.096-214.902-480-480-480zM480 928c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.078 0 384 171.922 384 384s-171.922 384-384 384zM512 512v-128h128v-64h-128v-64h-64v64h-128v256h128v128h-128v64h128v64h64v-64h128.002l-0.002-256h-128zM448 512h-64v-128h64v128zM576.002 704h-64.002v-128h64.002v128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "coin-dollar", - "money", - "cash", - "currency-dollar" - ], - "grid": 16 - }, - { - "id": 60, - "paths": [ - "M480 64c-265.096 0-480 214.904-480 480s214.904 480 480 480c265.098 0 480-214.902 480-480s-214.902-480-480-480zM480 928c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.076 0 384 171.922 384 384s-171.924 384-384 384z", - "M670.824 644.34c-15.27-8.884-34.862-3.708-43.75 11.57-17.256 29.662-49.088 48.090-83.074 48.090h-128c-41.716 0-77.286-26.754-90.496-64h154.496c17.672 0 32-14.326 32-32s-14.328-32-32-32h-160v-64h160c17.672 0 32-14.328 32-32s-14.328-32-32-32h-154.496c13.21-37.246 48.78-64 90.496-64h128c33.986 0 65.818 18.426 83.074 48.090 8.888 15.276 28.478 20.456 43.752 11.568 15.276-8.888 20.456-28.476 11.568-43.752-28.672-49.288-81.702-79.906-138.394-79.906h-128c-77.268 0-141.914 55.056-156.78 128h-35.22c-17.672 0-32 14.328-32 32s14.328 32 32 32h32v64h-32c-17.672 0-32 14.326-32 32s14.328 32 32 32h35.22c14.866 72.944 79.512 128 156.78 128h128c56.692 0 109.72-30.62 138.394-79.91 8.888-15.276 3.708-34.864-11.57-43.75z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "coin-euro", - "money", - "cash", - "currency-euro" - ], - "grid": 16 - }, - { - "id": 61, - "paths": [ - "M480 64c-265.096 0-480 214.904-480 480s214.904 480 480 480c265.098 0 480-214.902 480-480s-214.902-480-480-480zM480 928c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.074 0 384 171.922 384 384s-171.926 384-384 384z", - "M608 704h-224v-128h96c17.672 0 32-14.326 32-32s-14.328-32-32-32h-96v-32c0-52.934 43.066-96 96-96 34.17 0 66.042 18.404 83.18 48.030 8.85 15.298 28.426 20.526 43.722 11.676 15.296-8.848 20.526-28.424 11.676-43.722-28.538-49.336-81.638-79.984-138.578-79.984-88.224 0-160 71.776-160 160v32h-32c-17.672 0-32 14.326-32 32s14.328 32 32 32h32v192h288c17.674 0 32-14.326 32-32s-14.326-32-32-32z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "coin-pound", - "money", - "cash", - "currency-pound" - ], - "grid": 16 - }, - { - "id": 62, - "paths": [ - "M480 64c-265.096 0-480 214.904-480 480s214.904 480 480 480c265.098 0 480-214.902 480-480s-214.902-480-480-480zM480 928c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.076 0 384 171.922 384 384s-171.924 384-384 384z", - "M608 576c17.674 0 32-14.326 32-32s-14.326-32-32-32h-68.208l94.832-142.25c9.804-14.704 5.83-34.572-8.876-44.376-14.704-9.802-34.572-5.83-44.376 8.876l-101.372 152.062-101.374-152.062c-9.804-14.706-29.672-18.68-44.376-8.876-14.706 9.804-18.678 29.672-8.876 44.376l94.834 142.25h-68.208c-17.672 0-32 14.326-32 32s14.328 32 32 32h96v64h-96c-17.672 0-32 14.326-32 32s14.328 32 32 32h96v96c0 17.674 14.328 32 32 32s32-14.326 32-32v-96h96c17.674 0 32-14.326 32-32s-14.326-32-32-32h-96v-64h96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "coin-yen", - "money", - "cash", - "currency-yen" - ], - "grid": 16 - }, - { - "id": 63, - "paths": [ - "M928 128h-832c-52.8 0-96 43.2-96 96v576c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-576c0-52.8-43.2-96-96-96zM96 192h832c17.346 0 32 14.654 32 32v96h-896v-96c0-17.346 14.654-32 32-32zM928 832h-832c-17.346 0-32-14.654-32-32v-288h896v288c0 17.346-14.654 32-32 32zM128 640h64v128h-64zM256 640h64v128h-64zM384 640h64v128h-64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "credit-card", - "money", - "payment", - "ecommerce" - ], - "grid": 16 - }, - { - "id": 64, - "paths": [ - "M384 64h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.796 64 64 64h320c35.2 0 64-28.8 64-64v-320c0-35.2-28.8-64-64-64zM384 320h-320v-64h320v64zM896 64h-320c-35.204 0-64 28.8-64 64v832c0 35.2 28.796 64 64 64h320c35.2 0 64-28.8 64-64v-832c0-35.2-28.8-64-64-64zM896 640h-320v-64h320v64zM896 448h-320v-64h320v64zM384 576h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.796 64 64 64h320c35.2 0 64-28.8 64-64v-320c0-35.2-28.8-64-64-64zM384 832h-128v128h-64v-128h-128v-64h128v-128h64v128h128v64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "calculator", - "compute", - "math", - "arithmetic", - "sum" - ], - "grid": 16 - }, - { - "id": 65, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM320 512c0-106.040 85.96-192 192-192s192 85.96 192 192-85.96 192-192 192-192-85.96-192-192zM925.98 683.476v0l-177.42-73.49c12.518-30.184 19.44-63.276 19.44-97.986s-6.922-67.802-19.44-97.986l177.42-73.49c21.908 52.822 34.020 110.73 34.020 171.476s-12.114 118.654-34.020 171.476v0zM683.478 98.020v0 0l-73.49 177.42c-30.184-12.518-63.276-19.44-97.988-19.44s-67.802 6.922-97.986 19.44l-73.49-177.422c52.822-21.904 110.732-34.018 171.476-34.018 60.746 0 118.654 12.114 171.478 34.020zM98.020 340.524l177.422 73.49c-12.518 30.184-19.442 63.276-19.442 97.986s6.922 67.802 19.44 97.986l-177.42 73.49c-21.906-52.822-34.020-110.73-34.020-171.476s12.114-118.654 34.020-171.476zM340.524 925.98l73.49-177.42c30.184 12.518 63.276 19.44 97.986 19.44s67.802-6.922 97.986-19.44l73.49 177.42c-52.822 21.904-110.73 34.020-171.476 34.020-60.744 0-118.654-12.114-171.476-34.020z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "lifebuoy", - "support", - "help" - ], - "grid": 16 - }, - { - "id": 66, - "paths": [ - "M704 640c-64 64-64 128-128 128s-128-64-192-128-128-128-128-192 64-64 128-128-128-256-192-256-192 192-192 192c0 128 131.5 387.5 256 512s384 256 512 256c0 0 192-128 192-192s-192-256-256-192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "phone", - "telephone", - "contact", - "support", - "call" - ], - "grid": 16 - }, - { - "id": 67, - "paths": [ - "M1017.378 575.994c8.004 55.482 13.216 131.392-11.664 160.446-41.142 48.044-301.712 48.044-301.712-48.042 0-48.398 42.856-80.134 1.712-128.178-40.472-47.262-113.026-48.030-193.714-48.042-80.686 0.012-153.242 0.78-193.714 48.042-41.142 48.046 1.714 79.78 1.714 128.178 0 96.086-260.57 96.086-301.714 48.044-24.878-29.054-19.668-104.964-11.662-160.446 6.16-37.038 21.724-76.996 71.548-127.994 0-0.002 0.002-0.002 0.002-0.004 74.738-69.742 187.846-126.738 429.826-127.968v-0.030c1.344 0 2.664 0.010 4 0.014 1.338-0.004 2.656-0.014 4-0.014v0.028c241.98 1.23 355.088 58.226 429.826 127.968 0.002 0.002 0.002 0.004 0.002 0.004 49.824 50.996 65.39 90.954 71.55 127.994z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "phone-hang-up", - "telephone", - "contact", - "support", - "call" - ], - "grid": 16 - }, - { - "id": 68, - "paths": [ - "M192 0v1024h768v-1024h-768zM576 256.33c70.51 0 127.67 57.16 127.67 127.67s-57.16 127.67-127.67 127.67-127.67-57.16-127.67-127.67 57.16-127.67 127.67-127.67v0zM768 768h-384v-64c0-70.696 57.306-128 128-128v0h128c70.696 0 128 57.304 128 128v64z", - "M64 64h96v192h-96v-192z", - "M64 320h96v192h-96v-192z", - "M64 576h96v192h-96v-192z", - "M64 832h96v192h-96v-192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "address-book", - "contact", - "book", - "contacts" - ], - "grid": 16 - }, - { - "id": 69, - "paths": [ - "M928 128h-832c-52.8 0-96 43.2-96 96v640c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-640c0-52.8-43.2-96-96-96zM398.74 550.372l-270.74 210.892v-501.642l270.74 290.75zM176.38 256h671.24l-335.62 252-335.62-252zM409.288 561.698l102.712 110.302 102.71-110.302 210.554 270.302h-626.528l210.552-270.302zM625.26 550.372l270.74-290.75v501.642l-270.74-210.892z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "envelop", - "mail", - "email", - "contact", - "letter" - ], - "grid": 16 - }, - { - "id": 70, - "paths": [ - "M544 0l-96 96 96 96-224 256h-224l176 176-272 360.616v39.384h39.384l360.616-272 176 176v-224l256-224 96 96 96-96-480-480zM448 544l-64-64 224-224 64 64-224 224z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "pushpin", - "pin" - ], - "grid": 16 - }, - { - "id": 71, - "paths": [ - "M512 0c-176.732 0-320 143.268-320 320 0 320 320 704 320 704s320-384 320-704c0-176.732-143.27-320-320-320zM512 512c-106.040 0-192-85.96-192-192s85.96-192 192-192 192 85.96 192 192-85.96 192-192 192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "location", - "map-marker", - "pin" - ], - "grid": 16 - }, - { - "id": 72, - "paths": [ - "M512 0c-176.732 0-320 143.268-320 320 0 320 320 704 320 704s320-384 320-704c0-176.732-143.27-320-320-320zM512 516c-108.248 0-196-87.752-196-196s87.752-196 196-196 196 87.752 196 196-87.752 196-196 196zM388 320c0-68.483 55.517-124 124-124s124 55.517 124 124c0 68.483-55.517 124-124 124s-124-55.517-124-124z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "location", - "map-marker", - "pin" - ], - "grid": 16 - }, - { - "id": 73, - "paths": [ - "M544.010 1024.004c-2.296 0-4.622-0.25-6.94-0.764-14.648-3.25-25.070-16.238-25.070-31.24v-480h-480c-15.002 0-27.992-10.422-31.24-25.070-3.25-14.646 4.114-29.584 17.708-35.928l960-448c12.196-5.688 26.644-3.144 36.16 6.372 9.516 9.514 12.060 23.966 6.372 36.16l-448 960c-5.342 11.44-16.772 18.47-28.99 18.47zM176.242 448h367.758c17.674 0 32 14.328 32 32v367.758l349.79-749.546-749.548 349.788z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "compass", - "direction", - "location" - ], - "grid": 16 - }, - { - "id": 74, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM96 512c0-229.75 186.25-416 416-416 109.574 0 209.232 42.386 283.534 111.628l-411.534 176.372-176.372 411.534c-69.242-74.302-111.628-173.96-111.628-283.534zM585.166 585.166l-256.082 109.75 109.75-256.082 146.332 146.332zM512 928c-109.574 0-209.234-42.386-283.532-111.628l411.532-176.372 176.372-411.532c69.242 74.298 111.628 173.958 111.628 283.532 0 229.75-186.25 416-416 416z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "compass", - "direction", - "location" - ], - "grid": 16 - }, - { - "id": 75, - "paths": [ - "M0 192l320-128v768l-320 128z", - "M384 32l320 192v736l-320-160z", - "M768 224l256-192v768l-256 192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "map", - "guide" - ], - "grid": 16 - }, - { - "id": 76, - "paths": [ - "M672 192l-320-128-352 128v768l352-128 320 128 352-128v-768l-352 128zM384 145.73l256 102.4v630.138l-256-102.398v-630.14zM64 236.828l256-93.090v631.8l-256 93.088v-631.798zM960 787.172l-256 93.092v-631.8l256-93.090v631.798z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "map", - "guide" - ], - "grid": 16 - }, - { - "id": 77, - "paths": [ - "M640 64c247.424 0 448 200.576 448 448s-200.576 448-448 448v-96c94.024 0 182.418-36.614 248.902-103.098s103.098-154.878 103.098-248.902c0-94.022-36.614-182.418-103.098-248.902s-154.878-103.098-248.902-103.098c-94.022 0-182.418 36.614-248.902 103.098-51.14 51.138-84.582 115.246-97.306 184.902h186.208l-224 256-224-256h164.57c31.060-217.102 217.738-384 443.43-384zM832 448v128h-256v-320h128v192z" - ], - "width": 1088, - "attrs": [], - "isMulticolor": false, - "tags": [ - "history", - "time", - "archive", - "past" - ], - "grid": 16 - }, - { - "id": 78, - "paths": [ - "M658.744 749.256l-210.744-210.746v-282.51h128v229.49l173.256 173.254zM512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 896c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.078 0 384 171.922 384 384s-171.922 384-384 384z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "clock", - "time", - "schedule" - ], - "grid": 16 - }, - { - "id": 79, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM658.744 749.256l-210.744-210.746v-282.51h128v229.49l173.256 173.254-90.512 90.512z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "clock", - "time", - "schedule" - ], - "grid": 16 - }, - { - "id": 80, - "paths": [ - "M512 128c-247.424 0-448 200.576-448 448s200.576 448 448 448 448-200.576 448-448-200.576-448-448-448zM512 936c-198.824 0-360-161.178-360-360 0-198.824 161.176-360 360-360 198.822 0 360 161.176 360 360 0 198.822-161.178 360-360 360zM934.784 287.174c16.042-28.052 25.216-60.542 25.216-95.174 0-106.040-85.96-192-192-192-61.818 0-116.802 29.222-151.92 74.596 131.884 27.236 245.206 105.198 318.704 212.578v0zM407.92 74.596c-35.116-45.374-90.102-74.596-151.92-74.596-106.040 0-192 85.96-192 192 0 34.632 9.174 67.122 25.216 95.174 73.5-107.38 186.822-185.342 318.704-212.578z", - "M512 576v-256h-64v320h256v-64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "alarm", - "time", - "clock" - ], - "grid": 16 - }, - { - "id": 81, - "paths": [ - "M1025.5 800c0-288-256-224-256-448 0-18.56-1.788-34.42-5.048-47.928-16.83-113.018-92.156-203.72-189.772-231.36 0.866-3.948 1.32-8.032 1.32-12.21 0-33.278-28.8-60.502-64-60.502s-64 27.224-64 60.5c0 4.18 0.456 8.264 1.32 12.21-109.47 30.998-190.914 141.298-193.254 273.442-0.040 1.92-0.066 3.864-0.066 5.846 0 224.002-256 160.002-256 448.002 0 76.226 170.59 139.996 398.97 156.080 21.524 40.404 64.056 67.92 113.030 67.92s91.508-27.516 113.030-67.92c228.38-16.084 398.97-79.854 398.97-156.080 0-0.228-0.026-0.456-0.028-0.682l1.528 0.682zM826.246 854.096c-54.23 14.47-118.158 24.876-186.768 30.648-5.704-65.418-60.582-116.744-127.478-116.744s-121.774 51.326-127.478 116.744c-68.608-5.772-132.538-16.178-186.768-30.648-74.63-19.914-110.31-42.19-123.368-54.096 13.058-11.906 48.738-34.182 123.368-54.096 86.772-23.152 198.372-35.904 314.246-35.904s227.474 12.752 314.246 35.904c74.63 19.914 110.31 42.19 123.368 54.096-13.058 11.906-48.738 34.182-123.368 54.096z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "bell", - "alarm", - "notification" - ], - "grid": 16 - }, - { - "id": 82, - "paths": [ - "M512.002 193.212v-65.212h128v-64c0-35.346-28.654-64-64.002-64h-191.998c-35.346 0-64 28.654-64 64v64h128v65.212c-214.798 16.338-384 195.802-384 414.788 0 229.75 186.25 416 416 416s416-186.25 416-416c0-218.984-169.202-398.448-384-414.788zM706.276 834.274c-60.442 60.44-140.798 93.726-226.274 93.726s-165.834-33.286-226.274-93.726c-60.44-60.44-93.726-140.8-93.726-226.274s33.286-165.834 93.726-226.274c58.040-58.038 134.448-91.018 216.114-93.548l-21.678 314.020c-1.86 26.29 12.464 37.802 31.836 37.802s33.698-11.512 31.836-37.802l-21.676-314.022c81.666 2.532 158.076 35.512 216.116 93.55 60.44 60.44 93.726 140.8 93.726 226.274s-33.286 165.834-93.726 226.274z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "stopwatch", - "time", - "speed", - "meter", - "chronometer" - ], - "grid": 16 - }, - { - "id": 83, - "paths": [ - "M320 384h128v128h-128zM512 384h128v128h-128zM704 384h128v128h-128zM128 768h128v128h-128zM320 768h128v128h-128zM512 768h128v128h-128zM320 576h128v128h-128zM512 576h128v128h-128zM704 576h128v128h-128zM128 576h128v128h-128zM832 0v64h-128v-64h-448v64h-128v-64h-128v1024h960v-1024h-128zM896 960h-832v-704h832v704z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "calendar", - "date", - "schedule", - "time", - "day" - ], - "grid": 16 - }, - { - "id": 84, - "paths": [ - "M256 64h512v128h-512v-128z", - "M960 256h-896c-35.2 0-64 28.8-64 64v320c0 35.2 28.794 64 64 64h192v256h512v-256h192c35.2 0 64-28.8 64-64v-320c0-35.2-28.8-64-64-64zM128 448c-35.346 0-64-28.654-64-64s28.654-64 64-64 64 28.654 64 64-28.652 64-64 64zM704 896h-384v-320h384v320z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "printer", - "print" - ], - "grid": 16 - }, - { - "id": 85, - "paths": [ - "M1088 128h-1024c-35.2 0-64 28.8-64 64v640c0 35.2 28.8 64 64 64h1024c35.2 0 64-28.8 64-64v-640c0-35.2-28.8-64-64-64zM640 256h128v128h-128v-128zM832 448v128h-128v-128h128zM448 256h128v128h-128v-128zM640 448v128h-128v-128h128zM256 256h128v128h-128v-128zM448 448v128h-128v-128h128zM128 256h64v128h-64v-128zM128 448h128v128h-128v-128zM192 768h-64v-128h64v128zM768 768h-512v-128h512v128zM1024 768h-192v-128h192v128zM1024 576h-128v-128h128v128zM1024 384h-192v-128h192v128z" - ], - "width": 1152, - "attrs": [], - "isMulticolor": false, - "tags": [ - "keyboard", - "typing", - "type" - ], - "grid": 16 - }, - { - "id": 86, - "paths": [ - "M0 64v640h1024v-640h-1024zM960 640h-896v-512h896v512zM672 768h-320l-32 128-64 64h512l-64-64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "display", - "screen", - "monitor", - "computer", - "desktop", - "pc" - ], - "grid": 16 - }, - { - "id": 87, - "paths": [ - "M896 704v-512c0-35.2-28.8-64-64-64h-640c-35.2 0-64 28.8-64 64v512h-128v192h1024v-192h-128zM640 832h-256v-64h256v64zM832 704h-640v-511.886c0.034-0.040 0.076-0.082 0.114-0.114h639.77c0.040 0.034 0.082 0.076 0.116 0.116v511.884z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "laptop", - "computer", - "pc" - ], - "grid": 16 - }, - { - "id": 88, - "paths": [ - "M736 0h-448c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h448c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM384 48h256v32h-256v-32zM512 960c-35.346 0-64-28.654-64-64s28.654-64 64-64 64 28.654 64 64-28.654 64-64 64zM768 768h-512v-640h512v640z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "mobile", - "cell-phone", - "handheld" - ], - "grid": 16 - }, - { - "id": 89, - "paths": [ - "M768 0h-576c-35.2 0-64 28.798-64 64v896c0 35.2 28.798 64 64 64h576c35.2 0 64-28.8 64-64v-896c0-35.202-28.8-64-64-64zM480 977.782c-27.492 0-49.782-22.29-49.782-49.782s22.29-49.782 49.782-49.782 49.782 22.29 49.782 49.782-22.29 49.782-49.782 49.782zM768 832h-576v-704h576v704z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "mobile", - "cell-phone", - "handheld", - "tablet", - "phablet" - ], - "grid": 16 - }, - { - "id": 90, - "paths": [ - "M800 0h-640c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h640c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM480 992c-17.672 0-32-14.326-32-32s14.328-32 32-32 32 14.326 32 32-14.328 32-32 32zM768 896h-576v-768h576v768z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "tablet", - "mobile" - ], - "grid": 16 - }, - { - "id": 91, - "paths": [ - "M981.188 288.108c-88.808-12.768-183.382-22.016-282.076-27.22l164.888-164.888-64-64-224.558 224.556c-21.006-0.368-42.156-0.556-63.442-0.556v0l-256-256-64 64 194.196 194.196c-120.922 4.242-236.338 14.524-343.386 29.912-27.532 107.726-42.81 226.752-42.81 351.892s15.278 244.166 42.804 351.89c143.642 20.652 302.34 32.11 469.196 32.11s325.55-11.458 469.188-32.11c27.534-107.724 42.812-226.75 42.812-351.89s-15.278-244.166-42.812-351.892zM863.892 874.594c-107.73 13.766-226.75 21.406-351.892 21.406s-244.166-7.64-351.892-21.406c-20.648-71.816-32.108-151.166-32.108-234.594 0-83.43 11.458-162.78 32.108-234.596 107.726-13.766 226.75-21.404 351.892-21.404 125.136 0 244.162 7.638 351.886 21.404 20.656 71.816 32.114 151.166 32.114 234.596 0 83.428-11.458 162.778-32.108 234.594z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "tv", - "television", - "show" - ], - "grid": 16 - }, - { - "id": 92, - "paths": [ - "M1016.988 652.010l-256-320c-6.074-7.592-15.266-12.010-24.988-12.010h-448c-9.72 0-18.916 4.418-24.988 12.010l-256 320c-4.538 5.674-7.012 12.724-7.012 19.99v288c0 35.346 28.654 64 64 64h896c35.348 0 64-28.654 64-64v-288c0-7.266-2.472-14.316-7.012-19.99zM960 704h-224l-128 128h-192l-128-128h-224v-20.776l239.38-299.224h417.24l239.38 299.224v20.776z", - "M736 512h-448c-17.672 0-32-14.328-32-32s14.328-32 32-32h448c17.674 0 32 14.328 32 32s-14.326 32-32 32z", - "M800 640h-576c-17.672 0-32-14.326-32-32s14.328-32 32-32h576c17.674 0 32 14.326 32 32s-14.326 32-32 32z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "drawer", - "box", - "inbox", - "archive", - "category" - ], - "grid": 16 - }, - { - "id": 93, - "paths": [ - "M1016.988 652.010l-256-320c-6.074-7.592-15.266-12.010-24.988-12.010h-448c-9.72 0-18.916 4.418-24.988 12.010l-256 320c-4.538 5.674-7.012 12.724-7.012 19.99v288c0 35.346 28.654 64 64 64h896c35.348 0 64-28.654 64-64v-288c0-7.266-2.472-14.316-7.012-19.99zM960 704h-224l-128 128h-192l-128-128h-224v-20.776l239.38-299.224h417.24l239.38 299.224v20.776z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "drawer", - "box", - "inbox", - "archive", - "category" - ], - "grid": 16 - }, - { - "id": 94, - "paths": [ - "M832 64h-640l-192 192v672c0 17.674 14.326 32 32 32h960c17.672 0 32-14.326 32-32v-672l-192-192zM512 832l-320-256h192v-192h256v192h192l-320 256zM154.51 192l64-64h586.978l64 64h-714.978z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "box-add", - "box", - "download", - "storage", - "inbox", - "archive" - ], - "grid": 16 - }, - { - "id": 95, - "paths": [ - "M832 64h-640l-192 192v672c0 17.674 14.326 32 32 32h960c17.672 0 32-14.326 32-32v-672l-192-192zM640 640v192h-256v-192h-192l320-256 320 256h-192zM154.51 192l64-64h586.976l64 64h-714.976z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "box-remove", - "box", - "upload", - "storage", - "outbox", - "archive" - ], - "grid": 16 - }, - { - "id": 96, - "paths": [ - "M512 576l256-256h-192v-256h-128v256h-192zM744.726 471.272l-71.74 71.742 260.080 96.986-421.066 157.018-421.066-157.018 260.080-96.986-71.742-71.742-279.272 104.728v256l512 192 512-192v-256z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "download", - "save", - "store", - "arrow" - ], - "grid": 16 - }, - { - "id": 97, - "paths": [ - "M448 576h128v-256h192l-256-256-256 256h192zM640 432v98.712l293.066 109.288-421.066 157.018-421.066-157.018 293.066-109.288v-98.712l-384 144v256l512 192 512-192v-256z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "upload", - "load", - "arrow" - ], - "grid": 16 - }, - { - "id": 98, - "paths": [ - "M896 0h-896v1024h1024v-896l-128-128zM512 128h128v256h-128v-256zM896 896h-768v-768h64v320h576v-320h74.978l53.022 53.018v714.982z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "floppy-disk", - "save" - ], - "grid": 16 - }, - { - "id": 99, - "paths": [ - "M192 896h640c106.038 0 192-85.96 192-192h-1024c0 106.040 85.962 192 192 192zM832 768h64v64h-64v-64zM960 128h-896l-64 512h1024z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "drive", - "save", - "hdd", - "hard-disk" - ], - "grid": 16 - }, - { - "id": 100, - "paths": [ - "M512 0c-282.77 0-512 71.634-512 160v128c0 88.366 229.23 160 512 160s512-71.634 512-160v-128c0-88.366-229.23-160-512-160z", - "M512 544c-282.77 0-512-71.634-512-160v192c0 88.366 229.23 160 512 160s512-71.634 512-160v-192c0 88.366-229.23 160-512 160z", - "M512 832c-282.77 0-512-71.634-512-160v192c0 88.366 229.23 160 512 160s512-71.634 512-160v-192c0 88.366-229.23 160-512 160z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "database", - "db", - "server", - "host", - "storage", - "save", - "datecenter" - ], - "grid": 16 - }, - { - "id": 101, - "paths": [ - "M512 64c-141.384 0-269.376 57.32-362.032 149.978l-149.968-149.978v384h384l-143.532-143.522c69.496-69.492 165.492-112.478 271.532-112.478 212.068 0 384 171.924 384 384 0 114.696-50.292 217.636-130.018 288l84.666 96c106.302-93.816 173.352-231.076 173.352-384 0-282.77-229.23-512-512-512z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "undo", - "ccw", - "arrow" - ], - "grid": 16 - }, - { - "id": 102, - "paths": [ - "M0 576c0 152.924 67.048 290.184 173.35 384l84.666-96c-79.726-70.364-130.016-173.304-130.016-288 0-212.076 171.93-384 384-384 106.042 0 202.038 42.986 271.53 112.478l-143.53 143.522h384v-384l-149.97 149.978c-92.654-92.658-220.644-149.978-362.030-149.978-282.77 0-512 229.23-512 512z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "redo", - "cw", - "arrow" - ], - "grid": 16 - }, - { - "id": 103, - "paths": [ - "M761.862 1024c113.726-206.032 132.888-520.306-313.862-509.824v253.824l-384-384 384-384v248.372c534.962-13.942 594.57 472.214 313.862 775.628z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "undo", - "left", - "arrow-left" - ], - "grid": 16 - }, - { - "id": 104, - "paths": [ - "M576 248.372v-248.372l384 384-384 384v-253.824c-446.75-10.482-427.588 303.792-313.86 509.824-280.712-303.414-221.1-789.57 313.86-775.628z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "redo", - "right", - "arrow-right" - ], - "grid": 16 - }, - { - "id": 105, - "paths": [ - "M262.14 0c-113.728 206.032-132.89 520.304 313.86 509.824v-253.824l384 384-384 384v-248.372c-534.96 13.942-594.572-472.214-313.86-775.628z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "forward", - "right", - "arrow-right" - ], - "grid": 16 - }, - { - "id": 106, - "paths": [ - "M448 775.628v248.372l-384-384 384-384v253.824c446.75 10.48 427.588-303.792 313.862-509.824 280.71 303.414 221.1 789.57-313.862 775.628z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "reply", - "left", - "arrow-left" - ], - "grid": 16 - }, - { - "id": 107, - "paths": [ - "M512 64c282.77 0 512 186.25 512 416 0 229.752-229.23 416-512 416-27.156 0-53.81-1.734-79.824-5.044-109.978 109.978-241.25 129.7-368.176 132.596v-26.916c68.536-33.578 128-94.74 128-164.636 0-9.754-0.758-19.33-2.164-28.696-115.796-76.264-189.836-192.754-189.836-323.304 0-229.75 229.23-416 512-416z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "bubble", - "comment", - "chat", - "talk" - ], - "grid": 16 - }, - { - "id": 108, - "paths": [ - "M1088 901.166c0 45.5 26.028 84.908 64 104.184v15.938c-10.626 1.454-21.472 2.224-32.5 2.224-68.008 0-129.348-28.528-172.722-74.264-26.222 6.982-54.002 10.752-82.778 10.752-159.058 0-288-114.616-288-256s128.942-256 288-256c159.058 0 288 114.616 288 256 0 55.348-19.764 106.592-53.356 148.466-6.824 14.824-10.644 31.312-10.644 48.7zM512 0c278.458 0 504.992 180.614 511.836 405.52-49.182-21.92-103.586-33.52-159.836-33.52-95.56 0-185.816 33.446-254.138 94.178-70.846 62.972-109.862 147.434-109.862 237.822 0 44.672 9.544 87.888 27.736 127.788-5.228 0.126-10.468 0.212-15.736 0.212-27.156 0-53.81-1.734-79.824-5.044-109.978 109.978-241.25 129.7-368.176 132.596v-26.916c68.536-33.578 128-94.74 128-164.636 0-9.754-0.758-19.33-2.164-28.696-115.796-76.264-189.836-192.754-189.836-323.304 0-229.75 229.23-416 512-416z" - ], - "width": 1152, - "attrs": [], - "isMulticolor": false, - "tags": [ - "bubbles", - "comments", - "chat", - "talk" - ], - "grid": 16 - }, - { - "id": 109, - "paths": [ - "M480 0v0c265.096 0 480 173.914 480 388.448s-214.904 388.448-480 388.448c-25.458 0-50.446-1.62-74.834-4.71-103.106 102.694-222.172 121.108-341.166 123.814v-25.134c64.252-31.354 116-88.466 116-153.734 0-9.106-0.712-18.048-2.030-26.794-108.558-71.214-177.97-179.988-177.97-301.89 0-214.534 214.904-388.448 480-388.448zM996 870.686c0 55.942 36.314 104.898 92 131.772v21.542c-103.126-2.318-197.786-18.102-287.142-106.126-21.14 2.65-42.794 4.040-64.858 4.040-95.47 0-183.408-25.758-253.614-69.040 144.674-0.506 281.26-46.854 384.834-130.672 52.208-42.252 93.394-91.826 122.414-147.348 30.766-58.866 46.366-121.582 46.366-186.406 0-10.448-0.45-20.836-1.258-31.168 72.57 59.934 117.258 141.622 117.258 231.676 0 104.488-60.158 197.722-154.24 258.764-1.142 7.496-1.76 15.16-1.76 22.966z" - ], - "width": 1152, - "attrs": [], - "isMulticolor": false, - "tags": [ - "bubbles", - "comments", - "chat", - "talk" - ], - "grid": 16 - }, - { - "id": 110, - "paths": [ - "M512 192c-54.932 0-107.988 8.662-157.694 25.742-46.712 16.054-88.306 38.744-123.628 67.444-66.214 53.798-102.678 122.984-102.678 194.814 0 40.298 11.188 79.378 33.252 116.152 22.752 37.92 56.982 72.586 98.988 100.252 30.356 19.992 50.78 51.948 56.176 87.894 1.8 11.984 2.928 24.088 3.37 36.124 7.47-6.194 14.75-12.846 21.88-19.976 24.154-24.152 56.78-37.49 90.502-37.49 5.368 0 10.762 0.336 16.156 1.024 20.974 2.666 42.398 4.020 63.676 4.020 54.934 0 107.988-8.66 157.694-25.742 46.712-16.054 88.306-38.744 123.628-67.444 66.214-53.796 102.678-122.984 102.678-194.814s-36.464-141.016-102.678-194.814c-35.322-28.698-76.916-51.39-123.628-67.444-49.706-17.080-102.76-25.742-157.694-25.742zM512 64v0c282.77 0 512 186.25 512 416 0 229.752-229.23 416-512 416-27.156 0-53.81-1.734-79.824-5.044-109.978 109.978-241.25 129.7-368.176 132.596v-26.916c68.536-33.578 128-94.74 128-164.636 0-9.754-0.758-19.33-2.164-28.696-115.796-76.264-189.836-192.754-189.836-323.304 0-229.75 229.23-416 512-416z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "bubble", - "comment", - "chat", - "talk" - ], - "grid": 16 - }, - { - "id": 111, - "paths": [ - "M1088 901.166c0 45.5 26.028 84.908 64 104.184v15.938c-10.626 1.454-21.472 2.224-32.5 2.224-68.008 0-129.348-28.528-172.722-74.264-26.222 6.982-54.002 10.752-82.778 10.752-159.058 0-288-114.616-288-256s128.942-256 288-256c159.058 0 288 114.616 288 256 0 55.348-19.764 106.592-53.356 148.466-6.824 14.824-10.644 31.312-10.644 48.7zM230.678 221.186c-66.214 53.798-102.678 122.984-102.678 194.814 0 40.298 11.188 79.378 33.252 116.15 22.752 37.92 56.982 72.586 98.988 100.252 30.356 19.992 50.78 51.948 56.176 87.894 1.8 11.984 2.928 24.088 3.37 36.124 7.47-6.194 14.75-12.846 21.88-19.976 24.154-24.152 56.78-37.49 90.502-37.49 5.368 0 10.762 0.336 16.156 1.024 20.948 2.662 42.344 4.016 63.594 4.020v128c-27.128-0.002-53.754-1.738-79.742-5.042-109.978 109.978-241.25 129.7-368.176 132.596v-26.916c68.536-33.578 128-94.74 128-164.636 0-9.754-0.758-19.33-2.164-28.696-115.796-76.264-189.836-192.754-189.836-323.304 0-229.75 229.23-416 512-416 278.458 0 504.992 180.614 511.836 405.52-41.096-18.316-85.84-29.422-132.262-32.578-11.53-56.068-45.402-108.816-98.252-151.756-35.322-28.698-76.916-51.39-123.628-67.444-49.706-17.080-102.76-25.742-157.694-25.742-54.932 0-107.988 8.662-157.694 25.742-46.712 16.054-88.306 38.744-123.628 67.444z" - ], - "width": 1152, - "attrs": [], - "isMulticolor": false, - "tags": [ - "bubbles", - "comments", - "chat", - "talk" - ], - "grid": 16 - }, - { - "id": 112, - "paths": [ - "M480 128c-50.666 0-99.582 7.95-145.386 23.628-42.924 14.694-81.114 35.436-113.502 61.646-60.044 48.59-93.112 110.802-93.112 175.174 0 35.99 10.066 70.948 29.92 103.898 20.686 34.34 51.898 65.794 90.26 90.958 30.44 19.968 50.936 51.952 56.362 87.95 0.902 5.99 1.63 12.006 2.18 18.032 2.722-2.52 5.424-5.114 8.114-7.794 24.138-24.040 56.688-37.312 90.322-37.312 5.348 0 10.718 0.336 16.094 1.018 19.36 2.452 39.124 3.696 58.748 3.696 50.666 0 99.58-7.948 145.384-23.628 42.926-14.692 81.116-35.434 113.504-61.644 60.046-48.59 93.112-110.802 93.112-175.174s-33.066-126.582-93.112-175.174c-32.388-26.212-70.578-46.952-113.504-61.646-45.804-15.678-94.718-23.628-145.384-23.628zM480 0v0c265.096 0 480 173.914 480 388.448s-214.904 388.448-480 388.448c-25.458 0-50.446-1.62-74.834-4.71-103.106 102.694-222.172 121.108-341.166 123.814v-25.134c64.252-31.354 116-88.466 116-153.734 0-9.106-0.712-18.048-2.030-26.794-108.558-71.214-177.97-179.988-177.97-301.89 0-214.534 214.904-388.448 480-388.448zM996 870.686c0 55.942 36.314 104.898 92 131.772v21.542c-103.126-2.318-197.786-18.102-287.142-106.126-21.14 2.65-42.794 4.040-64.858 4.040-95.47 0-183.408-25.758-253.614-69.040 144.674-0.506 281.26-46.854 384.834-130.672 52.208-42.252 93.394-91.826 122.414-147.348 30.766-58.866 46.366-121.582 46.366-186.406 0-10.448-0.45-20.836-1.258-31.168 72.57 59.934 117.258 141.622 117.258 231.676 0 104.488-60.158 197.722-154.24 258.764-1.142 7.496-1.76 15.16-1.76 22.966z" - ], - "width": 1152, - "attrs": [], - "isMulticolor": false, - "tags": [ - "bubbles", - "comments", - "chat", - "talk" - ], - "grid": 16 - }, - { - "id": 113, - "paths": [ - "M576 706.612v-52.78c70.498-39.728 128-138.772 128-237.832 0-159.058 0-288-192-288s-192 128.942-192 288c0 99.060 57.502 198.104 128 237.832v52.78c-217.102 17.748-384 124.42-384 253.388h896c0-128.968-166.898-235.64-384-253.388z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "user", - "profile", - "avatar", - "person", - "member" - ], - "grid": 16 - }, - { - "id": 114, - "paths": [ - "M768 770.612v-52.78c70.498-39.728 128-138.772 128-237.832 0-159.058 0-288-192-288s-192 128.942-192 288c0 99.060 57.502 198.104 128 237.832v52.78c-217.102 17.748-384 124.42-384 253.388h896c0-128.968-166.898-235.64-384-253.388z", - "M327.196 795.328c55.31-36.15 124.080-63.636 199.788-80.414-15.054-17.784-28.708-37.622-40.492-59.020-30.414-55.234-46.492-116.058-46.492-175.894 0-86.042 0-167.31 30.6-233.762 29.706-64.504 83.128-104.496 159.222-119.488-16.914-76.48-61.94-126.75-181.822-126.75-192 0-192 128.942-192 288 0 99.060 57.502 198.104 128 237.832v52.78c-217.102 17.748-384 124.42-384 253.388h279.006c14.518-12.91 30.596-25.172 48.19-36.672z" - ], - "width": 1152, - "attrs": [], - "isMulticolor": false, - "tags": [ - "users", - "group", - "team", - "members", - "community", - "collaborate" - ], - "grid": 16 - }, - { - "id": 115, - "paths": [ - "M384 736c0-151.234 95.874-280.486 230.032-330.2 16.28-36.538 25.968-77.164 25.968-117.8 0-159.058 0-288-192-288s-192 128.942-192 288c0 99.060 57.502 198.104 128 237.832v52.78c-217.102 17.748-384 124.42-384 253.388h397.306c-8.664-30.53-13.306-62.732-13.306-96z", - "M736 448c-159.058 0-288 128.942-288 288s128.942 288 288 288c159.056 0 288-128.942 288-288s-128.942-288-288-288zM896 768h-128v128h-64v-128h-128v-64h128v-128h64v128h128v64z" - ], - "width": 1024, - "attrs": [], - "isMulticolor": false, - "tags": [ - "user-plus", - "user", - "user-add", - "profile", - "avatar", - "person", - "member" - ], - "grid": 16 - }, - { - "id": 116, - "paths": [ - "M384 736c0-151.234 95.874-280.486 230.032-330.2 16.28-36.538 25.968-77.164 25.968-117.8 0-159.058 0-288-192-288s-192 128.942-192 288c0 99.060 57.502 198.104 128 237.832v52.78c-217.102 17.748-384 124.42-384 253.388h397.306c-8.664-30.53-13.306-62.732-13.306-96z", - "M736 448c-159.058 0-288 128.942-288 288s128.942 288 288 288c159.056 0 288-128.942 288-288s-128.942-288-288-288zM896 768h-320v-64h320v64z" - ], - "width": 1024, - "attrs": [], - "isMulticolor": false, - "tags": [ - "user-minus", - "user", - "user-remove", - "profile", - "avatar", - "person", - "member" - ], - "grid": 16 - }, - { - "id": 117, - "paths": [ - "M960 608l-288 288-96-96-64 64 160 160 352-352z", - "M448 768h320v-115.128c-67.22-39.2-156.308-66.11-256-74.26v-52.78c70.498-39.728 128-138.772 128-237.832 0-159.058 0-288-192-288s-192 128.942-192 288c0 99.060 57.502 198.104 128 237.832v52.78c-217.102 17.748-384 124.42-384 253.388h448v-64z" - ], - "width": 1024, - "attrs": [], - "isMulticolor": false, - "tags": [ - "user-check", - "user", - "user-tick", - "profile", - "avatar", - "person", - "member" - ], - "grid": 16 - }, - { - "id": 118, - "paths": [ - "M320 192c0-106.039 85.961-192 192-192s192 85.961 192 192c0 106.039-85.961 192-192 192s-192-85.961-192-192zM768.078 448h-35.424l-199.104 404.244 74.45-372.244-96-96-96 96 74.45 372.244-199.102-404.244h-35.424c-127.924 0-127.924 85.986-127.924 192v320h768v-320c0-106.014 0-192-127.922-192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "user-tie", - "user", - "user-employee", - "profile", - "avatar", - "person", - "member", - "job", - "official" - ], - "grid": 16 - }, - { - "id": 119, - "paths": [ - "M225 448c123.712 0 224 100.29 224 224 0 123.712-100.288 224-224 224s-224-100.288-224-224l-1-32c0-247.424 200.576-448 448-448v128c-85.474 0-165.834 33.286-226.274 93.726-11.634 11.636-22.252 24.016-31.83 37.020 11.438-1.8 23.16-2.746 35.104-2.746zM801 448c123.71 0 224 100.29 224 224 0 123.712-100.29 224-224 224s-224-100.288-224-224l-1-32c0-247.424 200.576-448 448-448v128c-85.474 0-165.834 33.286-226.274 93.726-11.636 11.636-22.254 24.016-31.832 37.020 11.44-1.8 23.16-2.746 35.106-2.746z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "quotes-left", - "ldquo" - ], - "grid": 16 - }, - { - "id": 120, - "paths": [ - "M800 640c-123.712 0-224-100.29-224-224 0-123.712 100.288-224 224-224s224 100.288 224 224l1 32c0 247.424-200.576 448-448 448v-128c85.474 0 165.834-33.286 226.274-93.726 11.634-11.636 22.252-24.016 31.83-37.020-11.438 1.8-23.16 2.746-35.104 2.746zM224 640c-123.71 0-224-100.29-224-224 0-123.712 100.29-224 224-224s224 100.288 224 224l1 32c0 247.424-200.576 448-448 448v-128c85.474 0 165.834-33.286 226.274-93.726 11.636-11.636 22.254-24.016 31.832-37.020-11.44 1.8-23.16 2.746-35.106 2.746z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "quotes-right", - "rdquo" - ], - "grid": 16 - }, - { - "id": 121, - "paths": [ - "M728.992 512c137.754-87.334 231.008-255.208 231.008-448 0-21.676-1.192-43.034-3.478-64h-889.042c-2.29 20.968-3.48 42.326-3.48 64 0 192.792 93.254 360.666 231.006 448-137.752 87.334-231.006 255.208-231.006 448 0 21.676 1.19 43.034 3.478 64h889.042c2.288-20.966 3.478-42.324 3.478-64 0.002-192.792-93.252-360.666-231.006-448zM160 960c0-186.912 80.162-345.414 224-397.708v-100.586c-143.838-52.29-224-210.792-224-397.706v0h704c0 186.914-80.162 345.416-224 397.706v100.586c143.838 52.294 224 210.796 224 397.708h-704zM619.626 669.594c-71.654-40.644-75.608-93.368-75.626-125.366v-64.228c0-31.994 3.804-84.914 75.744-125.664 38.504-22.364 71.808-56.348 97.048-98.336h-409.582c25.266 42.032 58.612 76.042 97.166 98.406 71.654 40.644 75.606 93.366 75.626 125.366v64.228c0 31.992-3.804 84.914-75.744 125.664-72.622 42.18-126.738 125.684-143.090 226.336h501.67c-16.364-100.708-70.53-184.248-143.212-226.406z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "hour-glass", - "loading", - "busy", - "wait" - ], - "grid": 16 - }, - { - "id": 122, - "paths": [ - "M384 128c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128zM655.53 240.47c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128zM832 512c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM719.53 783.53c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM448.002 896c0 0 0 0 0 0 0-35.346 28.654-64 64-64s64 28.654 64 64c0 0 0 0 0 0 0 35.346-28.654 64-64 64s-64-28.654-64-64zM176.472 783.53c0 0 0 0 0 0 0-35.346 28.654-64 64-64s64 28.654 64 64c0 0 0 0 0 0 0 35.346-28.654 64-64 64s-64-28.654-64-64zM144.472 240.47c0 0 0 0 0 0 0-53.019 42.981-96 96-96s96 42.981 96 96c0 0 0 0 0 0 0 53.019-42.981 96-96 96s-96-42.981-96-96zM56 512c0-39.765 32.235-72 72-72s72 32.235 72 72c0 39.765-32.235 72-72 72s-72-32.235-72-72z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "spinner", - "loading", - "loading-wheel", - "busy", - "wait" - ], - "grid": 16 - }, - { - "id": 123, - "paths": [ - "M1024 512c-1.278-66.862-15.784-133.516-42.576-194.462-26.704-61-65.462-116.258-113.042-161.92-47.552-45.696-103.944-81.82-164.984-105.652-61.004-23.924-126.596-35.352-191.398-33.966-64.81 1.282-129.332 15.374-188.334 41.356-59.048 25.896-112.542 63.47-156.734 109.576-44.224 46.082-79.16 100.708-102.186 159.798-23.114 59.062-34.128 122.52-32.746 185.27 1.286 62.76 14.964 125.148 40.134 182.206 25.088 57.1 61.476 108.828 106.11 151.548 44.61 42.754 97.472 76.504 154.614 98.72 57.118 22.304 118.446 32.902 179.142 31.526 60.708-1.29 120.962-14.554 176.076-38.914 55.15-24.282 105.116-59.48 146.366-102.644 41.282-43.14 73.844-94.236 95.254-149.43 13.034-33.458 21.88-68.4 26.542-103.798 1.246 0.072 2.498 0.12 3.762 0.12 35.346 0 64-28.652 64-64 0-1.796-0.094-3.572-0.238-5.332h0.238zM922.306 681.948c-23.472 53.202-57.484 101.4-99.178 141.18-41.67 39.81-91 71.186-144.244 91.79-53.228 20.678-110.29 30.452-166.884 29.082-56.604-1.298-112.596-13.736-163.82-36.474-51.25-22.666-97.684-55.49-135.994-95.712-38.338-40.198-68.528-87.764-88.322-139.058-19.87-51.284-29.228-106.214-27.864-160.756 1.302-54.552 13.328-108.412 35.254-157.69 21.858-49.3 53.498-93.97 92.246-130.81 38.73-36.868 84.53-65.87 133.874-84.856 49.338-19.060 102.136-28.006 154.626-26.644 52.5 1.306 104.228 12.918 151.562 34.034 47.352 21.050 90.256 51.502 125.624 88.782 35.396 37.258 63.21 81.294 81.39 128.688 18.248 47.392 26.782 98.058 25.424 148.496h0.238c-0.144 1.76-0.238 3.536-0.238 5.332 0 33.012 24.992 60.174 57.086 63.624-6.224 34.822-16.53 68.818-30.78 100.992z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "spinner", - "loading", - "loading-wheel", - "busy", - "wait" - ], - "grid": 16 - }, - { - "id": 124, - "paths": [ - "M512 303.096c-32.964 0-59.686-26.724-59.686-59.686v-179.060c0-32.964 26.722-59.686 59.686-59.686 32.962 0 59.688 26.722 59.688 59.686v179.060c0 32.964-26.726 59.686-59.688 59.686z", - "M512 996.956c-20.602 0-37.304-16.702-37.304-37.304v-179.060c0-20.602 16.702-37.304 37.304-37.304 20.604 0 37.304 16.704 37.304 37.304v179.060c0 20.602-16.7 37.304-37.304 37.304z", - "M377.756 335.36c-19.34 0-38.146-10.034-48.512-27.988l-89.53-155.070c-15.452-26.764-6.282-60.986 20.482-76.438 26.762-15.45 60.986-6.284 76.438 20.482l89.53 155.072c15.452 26.764 6.282 60.986-20.482 76.438-8.81 5.084-18.432 7.504-27.926 7.504z", - "M735.856 933.256c-11.602 0-22.886-6.022-29.108-16.792l-89.53-155.070c-9.27-16.056-3.77-36.592 12.29-45.864 16.056-9.264 36.59-3.77 45.864 12.292l89.532 155.068c9.27 16.058 3.768 36.592-12.292 45.864-5.286 3.048-11.060 4.502-16.756 4.502z", - "M279.344 429.94c-8.86 0-17.838-2.256-26.064-7.006l-155.072-89.53c-24.978-14.422-33.538-46.362-19.116-71.342 14.42-24.978 46.364-33.538 71.342-19.116l155.070 89.53c24.98 14.422 33.538 46.362 19.116 71.34-9.668 16.756-27.226 26.124-45.276 26.124z", - "M899.648 765.674c-5.064 0-10.196-1.29-14.894-4.004l-155.068-89.53c-14.274-8.24-19.164-26.494-10.924-40.768 8.242-14.276 26.496-19.166 40.766-10.924l155.070 89.532c14.274 8.24 19.164 26.492 10.924 40.766-5.53 9.574-15.562 14.928-25.874 14.928z", - "M243.41 560.496h-179.060c-26.784 0-48.496-21.712-48.496-48.496s21.712-48.496 48.496-48.496h179.060c26.784 0 48.496 21.712 48.496 48.496s-21.712 48.496-48.496 48.496z", - "M959.65 541.844c-0.002 0 0 0 0 0h-179.060c-16.482-0.002-29.844-13.364-29.844-29.844s13.364-29.844 29.844-29.844c0.002 0 0 0 0 0h179.060c16.482 0 29.844 13.362 29.844 29.844 0 16.48-13.364 29.844-29.844 29.844z", - "M124.366 780.598c-15.472 0-30.518-8.028-38.81-22.39-12.362-21.41-5.026-48.79 16.384-61.148l155.072-89.532c21.41-12.368 48.79-5.028 61.15 16.384 12.362 21.412 5.026 48.79-16.384 61.15l-155.072 89.53c-7.050 4.070-14.748 6.006-22.34 6.006z", - "M744.632 407.552c-10.314 0-20.346-5.352-25.874-14.926-8.24-14.274-3.35-32.526 10.924-40.768l155.070-89.528c14.272-8.236 32.526-3.352 40.768 10.922 8.24 14.274 3.35 32.526-10.924 40.768l-155.070 89.528c-4.7 2.714-9.83 4.004-14.894 4.004z", - "M288.136 940.716c-6.962 0-14.016-1.774-20.48-5.504-19.626-11.332-26.35-36.428-15.020-56.054l89.53-155.070c11.33-19.628 36.426-26.352 56.054-15.022 19.626 11.332 26.35 36.43 15.020 56.054l-89.53 155.072c-7.598 13.166-21.392 20.524-35.574 20.524z", - "M646.266 309.242c-5.062 0-10.196-1.29-14.894-4.002-14.274-8.242-19.164-26.494-10.924-40.766l89.534-155.070c8.24-14.274 26.492-19.166 40.766-10.922 14.274 8.242 19.164 26.494 10.924 40.766l-89.532 155.070c-5.53 9.57-15.56 14.924-25.874 14.924z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "spinner", - "loading", - "loading-wheel", - "busy", - "wait" - ], - "grid": 16 - }, - { - "id": 125, - "paths": [ - "M192 512c0-12.18 0.704-24.196 2.030-36.022l-184.98-60.104c-5.916 31.14-9.050 63.264-9.050 96.126 0 147.23 62.166 279.922 161.654 373.324l114.284-157.296c-52.124-56.926-83.938-132.758-83.938-216.028zM832 512c0 83.268-31.812 159.102-83.938 216.028l114.284 157.296c99.488-93.402 161.654-226.094 161.654-373.324 0-32.862-3.132-64.986-9.048-96.126l-184.98 60.104c1.324 11.828 2.028 23.842 2.028 36.022zM576 198.408c91.934 18.662 169.544 76.742 214.45 155.826l184.978-60.102c-73.196-155.42-222.24-268.060-399.428-290.156v194.432zM233.55 354.232c44.906-79.084 122.516-137.164 214.45-155.826v-194.43c-177.188 22.096-326.23 134.736-399.426 290.154l184.976 60.102zM644.556 803.328c-40.39 18.408-85.272 28.672-132.556 28.672s-92.166-10.264-132.554-28.67l-114.292 157.31c73.206 40.366 157.336 63.36 246.846 63.36s173.64-22.994 246.848-63.36l-114.292-157.312z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "spinner", - "loading", - "loading-wheel", - "busy", - "wait" - ], - "grid": 16 - }, - { - "id": 126, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 256c141.384 0 256 114.616 256 256s-114.616 256-256 256-256-114.616-256-256 114.616-256 256-256zM817.47 817.47c-81.594 81.594-190.080 126.53-305.47 126.53-115.392 0-223.876-44.936-305.47-126.53s-126.53-190.078-126.53-305.47c0-115.39 44.936-223.876 126.53-305.47l67.882 67.882c0 0 0 0 0 0-131.006 131.006-131.006 344.17 0 475.176 63.462 63.462 147.838 98.412 237.588 98.412 89.748 0 174.124-34.95 237.588-98.412 131.006-131.006 131.006-344.168 0-475.176l67.882-67.882c81.594 81.594 126.53 190.080 126.53 305.47 0 115.392-44.936 223.876-126.53 305.47z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "spinner", - "loading", - "loading-wheel", - "busy", - "wait" - ], - "grid": 16 - }, - { - "id": 127, - "paths": [ - "M384 128c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128zM790.994 512c0 0 0 0 0 0 0-57.993 47.013-105.006 105.006-105.006s105.006 47.013 105.006 105.006c0 0 0 0 0 0 0 57.993-47.013 105.006-105.006 105.006s-105.006-47.013-105.006-105.006zM688.424 783.53c0-52.526 42.58-95.106 95.106-95.106s95.106 42.58 95.106 95.106c0 52.526-42.58 95.106-95.106 95.106s-95.106-42.58-95.106-95.106zM425.862 896c0-47.573 38.565-86.138 86.138-86.138s86.138 38.565 86.138 86.138c0 47.573-38.565 86.138-86.138 86.138s-86.138-38.565-86.138-86.138zM162.454 783.53c0-43.088 34.93-78.018 78.018-78.018s78.018 34.93 78.018 78.018c0 43.088-34.93 78.018-78.018 78.018s-78.018-34.93-78.018-78.018zM57.338 512c0-39.026 31.636-70.662 70.662-70.662s70.662 31.636 70.662 70.662c0 39.026-31.636 70.662-70.662 70.662s-70.662-31.636-70.662-70.662zM176.472 240.472c0 0 0 0 0 0 0-35.346 28.654-64 64-64s64 28.654 64 64c0 0 0 0 0 0 0 35.346-28.654 64-64 64s-64-28.654-64-64zM899.464 240.472c0 64.024-51.906 115.934-115.936 115.934-64.024 0-115.936-51.91-115.936-115.934 0-64.032 51.912-115.934 115.936-115.934 64.030 0 115.936 51.902 115.936 115.934z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "spinner", - "loading", - "loading-wheel", - "busy", - "wait" - ], - "grid": 16 - }, - { - "id": 128, - "paths": [ - "M416 928c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96zM0 512c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96zM832 512c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96zM121.844 217.844c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96zM710.156 806.156c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96zM121.844 806.156c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96zM710.156 217.844c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "spinner", - "loading", - "loading-wheel", - "busy", - "wait" - ], - "grid": 16 - }, - { - "id": 129, - "paths": [ - "M512 1024c-136.76 0-265.334-53.258-362.040-149.96-96.702-96.706-149.96-225.28-149.96-362.040 0-96.838 27.182-191.134 78.606-272.692 50-79.296 120.664-143.372 204.356-185.3l43 85.832c-68.038 34.084-125.492 86.186-166.15 150.67-41.746 66.208-63.812 142.798-63.812 221.49 0 229.382 186.618 416 416 416s416-186.618 416-416c0-78.692-22.066-155.282-63.81-221.49-40.66-64.484-98.114-116.584-166.15-150.67l43-85.832c83.692 41.928 154.358 106.004 204.356 185.3 51.422 81.558 78.604 175.854 78.604 272.692 0 136.76-53.258 265.334-149.96 362.040-96.706 96.702-225.28 149.96-362.040 149.96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "spinner", - "loading", - "loading-wheel", - "busy", - "wait" - ], - "grid": 16 - }, - { - "id": 130, - "paths": [ - "M512 0c-278.748 0-505.458 222.762-511.848 499.974 5.92-241.864 189.832-435.974 415.848-435.974 229.75 0 416 200.576 416 448 0 53.020 42.98 96 96 96s96-42.98 96-96c0-282.77-229.23-512-512-512zM512 1024c278.748 0 505.458-222.762 511.848-499.974-5.92 241.864-189.832 435.974-415.848 435.974-229.75 0-416-200.576-416-448 0-53.020-42.98-96-96-96s-96 42.98-96 96c0 282.77 229.23 512 512 512z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "spinner", - "loading", - "loading-wheel", - "busy", - "wait" - ], - "grid": 16 - }, - { - "id": 131, - "paths": [ - "M0.042 513.618l-0.022 0.004c0 0 0.012 0.090 0.028 0.222 0.11 3.878 0.55 7.676 1.322 11.352 0.204 1.746 0.428 3.66 0.674 5.774 0.222 1.886 0.46 3.914 0.718 6.078 0.374 2.566 0.77 5.292 1.19 8.176 0.856 5.746 1.8 12.124 2.908 18.958 1.348 6.446 2.804 13.414 4.364 20.864 0.71 3.718 1.776 7.504 2.786 11.406 1.024 3.89 2.078 7.894 3.16 12.004 0.566 2.042 1.040 4.132 1.708 6.208 0.656 2.074 1.32 4.176 1.988 6.3 1.348 4.234 2.726 8.566 4.136 12.988 0.352 1.106 0.708 2.21 1.064 3.324 0.408 1.102 0.814 2.208 1.226 3.316 0.826 2.218 1.658 4.458 2.502 6.714 1.696 4.496 3.422 9.078 5.18 13.742 1.968 4.566 3.97 9.214 6.004 13.934 1.018 2.348 2.044 4.714 3.078 7.098 1.048 2.376 2.27 4.704 3.408 7.074 2.322 4.714 4.678 9.496 7.062 14.332 2.47 4.786 5.208 9.512 7.846 14.328 1.336 2.398 2.68 4.808 4.028 7.23 1.368 2.41 2.902 4.75 4.356 7.14 2.95 4.738 5.93 9.524 8.934 14.348 12.64 18.894 26.676 37.566 42.21 55.278 15.712 17.578 32.726 34.25 50.692 49.602 18.18 15.136 37.264 28.902 56.726 41.114 19.604 12.036 39.644 22.312 59.376 31.144 5.004 2.040 9.964 4.062 14.878 6.066 2.462 0.972 4.868 2.032 7.336 2.918 2.47 0.868 4.93 1.734 7.376 2.594 4.898 1.684 9.678 3.468 14.484 4.992 4.832 1.43 9.604 2.844 14.312 4.242 2.356 0.672 4.66 1.426 7.004 2.012 2.346 0.574 4.676 1.14 6.986 1.704 4.606 1.118 9.142 2.214 13.604 3.296 4.5 0.868 8.926 1.722 13.27 2.558 2.166 0.41 4.31 0.82 6.434 1.222 1.062 0.2 2.118 0.398 3.166 0.598 1.060 0.148 2.118 0.292 3.166 0.442 4.192 0.582 8.292 1.152 12.3 1.71 1.998 0.274 3.972 0.546 5.922 0.816 1.946 0.286 3.904 0.378 5.814 0.57 3.822 0.336 7.544 0.664 11.164 0.98 3.616 0.304 7.104 0.688 10.526 0.738 0.23 0.008 0.452 0.016 0.682 0.026 0.614 34.812 29.008 62.846 63.968 62.846 0.542 0 1.080-0.028 1.62-0.042v0.022c0 0 0.090-0.012 0.224-0.028 3.878-0.11 7.674-0.55 11.35-1.322 1.748-0.204 3.662-0.426 5.776-0.672 1.884-0.222 3.912-0.462 6.076-0.718 2.566-0.376 5.292-0.772 8.176-1.192 5.746-0.856 12.124-1.8 18.958-2.908 6.446-1.348 13.414-2.804 20.864-4.362 3.718-0.712 7.504-1.778 11.406-2.786 3.892-1.026 7.894-2.080 12.004-3.162 2.044-0.566 4.132-1.040 6.208-1.708 2.074-0.656 4.174-1.318 6.3-1.988 4.232-1.348 8.564-2.726 12.988-4.134 1.104-0.354 2.21-0.708 3.324-1.066 1.1-0.406 2.206-0.814 3.316-1.226 2.216-0.824 4.456-1.658 6.714-2.5 4.496-1.698 9.078-3.424 13.74-5.182 4.568-1.968 9.216-3.97 13.936-6.004 2.348-1.018 4.714-2.044 7.098-3.078 2.376-1.048 4.702-2.27 7.074-3.408 4.714-2.322 9.494-4.678 14.33-7.062 4.786-2.47 9.512-5.208 14.328-7.846 2.398-1.336 4.808-2.678 7.23-4.028 2.41-1.366 4.75-2.9 7.14-4.354 4.738-2.952 9.524-5.93 14.35-8.936 18.89-12.64 37.564-26.674 55.278-42.21 17.574-15.712 34.248-32.726 49.602-50.69 15.136-18.182 28.902-37.264 41.112-56.728 12.036-19.602 22.314-39.644 31.142-59.376 2.042-5.002 4.062-9.964 6.068-14.878 0.974-2.462 2.032-4.868 2.918-7.334 0.87-2.472 1.732-4.932 2.592-7.376 1.686-4.898 3.468-9.678 4.994-14.484 1.432-4.832 2.846-9.604 4.24-14.31 0.674-2.358 1.43-4.66 2.016-7.004 0.57-2.348 1.138-4.676 1.702-6.988 1.118-4.606 2.216-9.14 3.296-13.602 0.868-4.502 1.72-8.928 2.558-13.272 0.41-2.164 0.818-4.308 1.222-6.434 0.2-1.060 0.398-2.116 0.596-3.164 0.148-1.062 0.296-2.118 0.444-3.168 0.582-4.19 1.152-8.292 1.708-12.3 0.278-1.996 0.55-3.97 0.82-5.922 0.284-1.946 0.376-3.902 0.568-5.812 0.336-3.822 0.664-7.546 0.98-11.164 0.304-3.616 0.686-7.106 0.738-10.528 0.020-0.534 0.040-1.044 0.058-1.574 35.224-0.146 63.732-28.738 63.732-63.992 0-0.542-0.028-1.080-0.042-1.62h0.022c0 0-0.012-0.090-0.028-0.224-0.11-3.878-0.55-7.674-1.322-11.35-0.204-1.748-0.428-3.662-0.674-5.776-0.222-1.886-0.46-3.914-0.718-6.076-0.374-2.566-0.77-5.294-1.19-8.176-0.856-5.746-1.8-12.124-2.908-18.958-1.348-6.444-2.804-13.414-4.364-20.862-0.71-3.72-1.776-7.506-2.786-11.408-1.024-3.892-2.078-7.894-3.16-12.002-0.566-2.044-1.040-4.134-1.708-6.208-0.656-2.076-1.32-4.174-1.988-6.3-1.348-4.234-2.726-8.566-4.136-12.99-0.352-1.102-0.708-2.21-1.064-3.324-0.408-1.1-0.814-2.206-1.226-3.316-0.826-2.216-1.658-4.454-2.502-6.714-1.696-4.498-3.422-9.080-5.18-13.74-1.968-4.57-3.97-9.216-6.004-13.936-1.020-2.348-2.044-4.714-3.078-7.098-1.048-2.376-2.27-4.702-3.408-7.076-2.322-4.714-4.678-9.494-7.062-14.33-2.47-4.786-5.208-9.512-7.846-14.328-1.336-2.398-2.68-4.808-4.028-7.23-1.368-2.41-2.902-4.75-4.356-7.14-2.95-4.74-5.93-9.524-8.934-14.35-12.64-18.892-26.676-37.564-42.21-55.278-15.712-17.576-32.726-34.25-50.692-49.602-18.18-15.136-37.264-28.902-56.726-41.112-19.604-12.036-39.644-22.314-59.376-31.142-5.004-2.040-9.964-4.062-14.878-6.068-2.462-0.974-4.868-2.032-7.336-2.918-2.47-0.87-4.93-1.734-7.376-2.592-4.898-1.684-9.678-3.468-14.484-4.994-4.832-1.432-9.604-2.846-14.312-4.242-2.356-0.672-4.66-1.428-7.004-2.014-2.346-0.572-4.676-1.138-6.986-1.702-4.606-1.118-9.142-2.216-13.604-3.298-4.5-0.868-8.926-1.72-13.27-2.558-2.166-0.412-4.31-0.82-6.434-1.222-1.062-0.2-2.118-0.398-3.166-0.596-1.060-0.148-2.118-0.296-3.166-0.442-4.192-0.584-8.292-1.154-12.3-1.71-1.998-0.276-3.972-0.55-5.922-0.82-1.946-0.284-3.904-0.376-5.814-0.57-3.822-0.336-7.544-0.664-11.164-0.98-3.616-0.304-7.104-0.686-10.526-0.738-0.852-0.032-1.674-0.062-2.512-0.092-0.65-34.78-29.028-62.778-63.966-62.778-0.542 0-1.080 0.028-1.62 0.042l-0.002-0.022c0 0-0.090 0.012-0.222 0.028-3.878 0.11-7.676 0.55-11.352 1.322-1.748 0.204-3.662 0.426-5.776 0.672-1.884 0.222-3.912 0.462-6.076 0.718-2.566 0.376-5.292 0.772-8.176 1.192-5.746 0.856-12.124 1.8-18.958 2.908-6.446 1.348-13.414 2.804-20.864 4.362-3.718 0.712-7.504 1.778-11.406 2.786-3.892 1.026-7.894 2.080-12.004 3.162-2.044 0.566-4.132 1.040-6.208 1.708-2.074 0.656-4.174 1.318-6.3 1.988-4.232 1.348-8.564 2.726-12.988 4.134-1.104 0.354-2.21 0.708-3.324 1.066-1.1 0.406-2.206 0.814-3.316 1.226-2.216 0.824-4.456 1.658-6.714 2.5-4.496 1.698-9.078 3.424-13.74 5.182-4.568 1.968-9.216 3.97-13.936 6.004-2.348 1.018-4.714 2.044-7.098 3.078-2.376 1.048-4.702 2.27-7.074 3.408-4.714 2.322-9.494 4.678-14.33 7.062-4.786 2.47-9.512 5.208-14.328 7.846-2.398 1.336-4.808 2.678-7.23 4.028-2.41 1.366-4.75 2.9-7.14 4.354-4.738 2.952-9.524 5.93-14.35 8.936-18.89 12.64-37.564 26.674-55.278 42.21-17.574 15.712-34.248 32.726-49.602 50.69-15.136 18.182-28.902 37.264-41.112 56.728-12.036 19.602-22.314 39.644-31.142 59.376-2.042 5.002-4.062 9.964-6.068 14.878-0.974 2.462-2.032 4.868-2.918 7.334-0.87 2.472-1.732 4.932-2.592 7.376-1.686 4.898-3.468 9.678-4.994 14.484-1.432 4.832-2.846 9.604-4.24 14.31-0.674 2.358-1.43 4.66-2.016 7.004-0.57 2.348-1.138 4.676-1.702 6.988-1.118 4.606-2.216 9.14-3.296 13.602-0.868 4.502-1.72 8.928-2.558 13.272-0.41 2.164-0.818 4.308-1.222 6.434-0.2 1.060-0.398 2.116-0.596 3.164-0.148 1.062-0.296 2.118-0.444 3.168-0.582 4.19-1.152 8.292-1.708 12.3-0.278 1.996-0.55 3.97-0.82 5.922-0.284 1.946-0.376 3.902-0.568 5.812-0.336 3.822-0.664 7.546-0.98 11.164-0.304 3.616-0.686 7.106-0.738 10.528-0.020 0.548-0.040 1.076-0.058 1.62-34.376 1.112-61.902 29.304-61.902 63.946 0 0.542 0.028 1.078 0.042 1.618zM73.518 448.706c0.042-0.196 0.086-0.384 0.128-0.58 0.644-3.248 1.632-6.542 2.556-9.942 0.934-3.388 1.894-6.876 2.88-10.454 0.516-1.78 0.934-3.602 1.546-5.406 0.596-1.802 1.202-3.628 1.81-5.476 1.218-3.682 2.464-7.45 3.736-11.294 0.316-0.958 0.634-1.924 0.956-2.892 0.37-0.954 0.74-1.914 1.114-2.876 0.746-1.924 1.5-3.868 2.26-5.83 1.52-3.904 3.070-7.882 4.646-11.93 1.768-3.96 3.566-7.99 5.392-12.080 0.908-2.038 1.824-4.090 2.746-6.156 0.932-2.060 2.036-4.072 3.052-6.126 2.070-4.084 4.17-8.222 6.294-12.412 2.202-4.142 4.654-8.224 6.998-12.392 1.184-2.074 2.374-4.16 3.57-6.256 1.21-2.086 2.586-4.102 3.876-6.166 2.616-4.098 5.256-8.232 7.918-12.402 11.234-16.298 23.632-32.398 37.33-47.638 13.874-15.104 28.842-29.404 44.598-42.548 15.974-12.928 32.686-24.65 49.676-35.022 17.13-10.194 34.6-18.838 51.734-26.258 4.35-1.7 8.662-3.382 12.934-5.050 2.136-0.812 4.216-1.71 6.36-2.444 2.146-0.714 4.28-1.428 6.404-2.136 4.25-1.386 8.382-2.888 12.548-4.142 4.184-1.174 8.314-2.332 12.392-3.474 2.038-0.55 4.026-1.19 6.054-1.662 2.030-0.458 4.044-0.914 6.044-1.368 3.978-0.91 7.896-1.806 11.748-2.688 3.888-0.686 7.71-1.36 11.462-2.022 1.868-0.33 3.716-0.658 5.546-0.98 0.914-0.162 1.824-0.324 2.728-0.484 0.916-0.112 1.828-0.222 2.734-0.332 3.612-0.448 7.148-0.882 10.604-1.31 1.72-0.216 3.422-0.432 5.102-0.644 1.674-0.226 3.364-0.266 5.010-0.408 3.292-0.238 6.498-0.472 9.616-0.7 3.11-0.218 6.11-0.524 9.058-0.508 5.848-0.132 11.32-0.256 16.38-0.372 4.664 0.168 8.948 0.324 12.818 0.462 1.914 0.054 3.726 0.108 5.432 0.156 2.122 0.134 4.108 0.26 5.958 0.378 2.13 0.138 4.060 0.266 5.82 0.38 3.256 0.51 6.592 0.782 9.99 0.782 0.466 0 0.93-0.026 1.396-0.036 0.132 0.008 0.224 0.014 0.224 0.014v-0.020c31.14-0.778 56.75-23.784 61.556-53.754 0.542 0.12 1.064 0.236 1.612 0.356 3.246 0.644 6.542 1.632 9.942 2.556 3.386 0.934 6.876 1.894 10.454 2.88 1.778 0.516 3.602 0.934 5.404 1.546 1.802 0.596 3.63 1.202 5.478 1.812 3.68 1.218 7.448 2.464 11.292 3.736 0.96 0.316 1.924 0.634 2.892 0.956 0.956 0.37 1.914 0.74 2.876 1.112 1.926 0.746 3.868 1.5 5.83 2.26 3.904 1.52 7.884 3.070 11.932 4.646 3.96 1.768 7.988 3.566 12.080 5.392 2.038 0.908 4.088 1.824 6.156 2.746 2.060 0.932 4.072 2.036 6.126 3.054 4.082 2.070 8.222 4.17 12.41 6.294 4.144 2.202 8.226 4.654 12.394 6.998 2.074 1.184 4.16 2.374 6.256 3.572 2.086 1.21 4.102 2.586 6.166 3.876 4.098 2.616 8.23 5.256 12.402 7.918 16.296 11.234 32.398 23.632 47.636 37.33 15.104 13.874 29.406 28.842 42.55 44.598 12.928 15.974 24.648 32.686 35.020 49.676 10.196 17.13 18.84 34.6 26.26 51.736 1.698 4.348 3.382 8.662 5.050 12.932 0.812 2.136 1.71 4.216 2.444 6.36 0.714 2.146 1.428 4.28 2.136 6.404 1.386 4.25 2.888 8.384 4.142 12.548 1.174 4.184 2.33 8.316 3.474 12.392 0.55 2.038 1.19 4.026 1.66 6.054 0.46 2.030 0.916 4.046 1.368 6.046 0.91 3.978 1.808 7.896 2.688 11.748 0.688 3.888 1.362 7.71 2.024 11.462 0.33 1.868 0.656 3.716 0.98 5.548 0.162 0.914 0.324 1.824 0.484 2.728 0.11 0.916 0.222 1.828 0.332 2.734 0.446 3.612 0.882 7.148 1.31 10.604 0.216 1.72 0.432 3.42 0.642 5.1 0.226 1.674 0.268 3.364 0.41 5.010 0.238 3.292 0.472 6.498 0.7 9.616 0.218 3.11 0.524 6.11 0.508 9.058 0.132 5.848 0.256 11.32 0.372 16.38-0.168 4.664-0.324 8.948-0.462 12.818-0.054 1.914-0.108 3.726-0.156 5.432-0.134 2.122-0.26 4.108-0.378 5.958-0.138 2.13-0.266 4.060-0.38 5.82-0.498 3.256-0.768 6.592-0.768 9.99 0 0.468 0.026 0.93 0.036 1.396-0.008 0.132-0.016 0.224-0.016 0.224h0.022c0.768 30.766 23.236 56.128 52.682 61.37-0.066 0.296-0.13 0.584-0.198 0.884-0.644 3.248-1.632 6.542-2.556 9.942-0.934 3.388-1.894 6.876-2.88 10.454-0.516 1.78-0.934 3.602-1.546 5.406-0.596 1.802-1.202 3.628-1.81 5.476-1.218 3.682-2.464 7.45-3.736 11.294-0.316 0.958-0.634 1.924-0.956 2.892-0.37 0.954-0.74 1.914-1.114 2.876-0.746 1.924-1.5 3.868-2.26 5.83-1.52 3.904-3.070 7.882-4.646 11.93-1.768 3.96-3.566 7.99-5.392 12.080-0.908 2.038-1.824 4.090-2.746 6.156-0.932 2.060-2.036 4.072-3.052 6.126-2.070 4.084-4.17 8.222-6.294 12.412-2.202 4.142-4.654 8.224-6.998 12.392-1.184 2.074-2.374 4.16-3.57 6.256-1.21 2.086-2.586 4.102-3.876 6.166-2.616 4.098-5.256 8.232-7.918 12.402-11.234 16.298-23.632 32.398-37.33 47.638-13.874 15.104-28.842 29.404-44.598 42.548-15.974 12.928-32.686 24.65-49.676 35.022-17.13 10.194-34.6 18.838-51.734 26.258-4.35 1.7-8.662 3.382-12.934 5.050-2.136 0.812-4.216 1.71-6.36 2.444-2.146 0.714-4.28 1.428-6.404 2.136-4.25 1.386-8.382 2.888-12.548 4.142-4.184 1.174-8.314 2.332-12.392 3.474-2.038 0.55-4.026 1.19-6.054 1.662-2.030 0.458-4.044 0.914-6.044 1.368-3.978 0.91-7.896 1.806-11.748 2.688-3.888 0.686-7.71 1.36-11.462 2.022-1.868 0.33-3.716 0.658-5.546 0.98-0.914 0.162-1.824 0.324-2.728 0.484-0.916 0.112-1.828 0.222-2.734 0.332-3.612 0.448-7.148 0.882-10.604 1.31-1.72 0.216-3.422 0.432-5.102 0.644-1.674 0.226-3.364 0.266-5.010 0.408-3.292 0.238-6.498 0.472-9.616 0.7-3.11 0.218-6.11 0.524-9.058 0.508-5.848 0.132-11.32 0.256-16.38 0.372-4.664-0.168-8.948-0.324-12.818-0.462-1.914-0.054-3.726-0.108-5.432-0.156-2.122-0.134-4.108-0.26-5.958-0.378-2.13-0.138-4.060-0.266-5.82-0.38-3.256-0.51-6.592-0.782-9.99-0.782-0.466 0-0.93 0.026-1.396 0.036-0.132-0.008-0.224-0.014-0.224-0.014v0.020c-31.004 0.774-56.524 23.586-61.488 53.364-3.2-0.64-6.446-1.61-9.792-2.522-3.386-0.934-6.876-1.894-10.454-2.878-1.778-0.516-3.602-0.938-5.404-1.546-1.802-0.598-3.63-1.204-5.478-1.812-3.68-1.218-7.448-2.464-11.292-3.738-0.96-0.316-1.924-0.632-2.892-0.954-0.956-0.372-1.914-0.742-2.876-1.114-1.926-0.746-3.868-1.5-5.83-2.258-3.904-1.524-7.884-3.070-11.932-4.648-3.96-1.77-7.988-3.566-12.080-5.39-2.038-0.91-4.088-1.824-6.156-2.746-2.060-0.934-4.072-2.036-6.126-3.054-4.082-2.070-8.222-4.172-12.41-6.296-4.144-2.2-8.226-4.652-12.394-6.996-2.074-1.184-4.16-2.376-6.256-3.57-2.086-1.21-4.102-2.586-6.166-3.878-4.098-2.614-8.23-5.254-12.402-7.918-16.296-11.23-32.398-23.632-47.636-37.328-15.104-13.876-29.406-28.84-42.55-44.598-12.928-15.972-24.648-32.684-35.020-49.676-10.196-17.128-18.84-34.602-26.26-51.734-1.698-4.352-3.382-8.664-5.050-12.934-0.812-2.136-1.71-4.218-2.444-6.36-0.714-2.148-1.428-4.282-2.136-6.406-1.386-4.25-2.888-8.382-4.142-12.546-1.174-4.184-2.33-8.316-3.474-12.394-0.55-2.036-1.19-4.024-1.66-6.054-0.46-2.028-0.916-4.042-1.368-6.042-0.91-3.98-1.808-7.898-2.688-11.75-0.688-3.886-1.362-7.71-2.024-11.46-0.33-1.868-0.656-3.718-0.98-5.546-0.162-0.914-0.324-1.824-0.484-2.73-0.11-0.914-0.222-1.828-0.332-2.734-0.446-3.61-0.882-7.148-1.31-10.602-0.216-1.722-0.432-3.422-0.642-5.102-0.226-1.676-0.268-3.364-0.41-5.012-0.238-3.29-0.472-6.496-0.7-9.614-0.218-3.11-0.524-6.11-0.508-9.058-0.132-5.848-0.256-11.32-0.372-16.382 0.168-4.664 0.324-8.946 0.462-12.816 0.054-1.914 0.108-3.726 0.156-5.434 0.134-2.122 0.26-4.106 0.378-5.958 0.138-2.128 0.266-4.058 0.38-5.82 0.496-3.26 0.766-6.596 0.766-9.994 0-0.466-0.026-0.93-0.036-1.396 0.008-0.132 0.016-0.224 0.016-0.224h-0.022c-0.78-31.38-24.134-57.154-54.44-61.674z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "spinner", - "loading", - "loading-wheel", - "busy", - "wait" - ], - "grid": 16 - }, - { - "id": 132, - "paths": [ - "M1024 384h-384l143.53-143.53c-72.53-72.526-168.96-112.47-271.53-112.47s-199 39.944-271.53 112.47c-72.526 72.53-112.47 168.96-112.47 271.53s39.944 199 112.47 271.53c72.53 72.526 168.96 112.47 271.53 112.47s199-39.944 271.528-112.472c6.056-6.054 11.86-12.292 17.456-18.668l96.32 84.282c-93.846 107.166-231.664 174.858-385.304 174.858-282.77 0-512-229.23-512-512s229.23-512 512-512c141.386 0 269.368 57.326 362.016 149.984l149.984-149.984v384z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "spinner", - "loading", - "loading-wheel", - "refresh", - "repeat", - "busy", - "wait", - "arrow" - ], - "grid": 16 - }, - { - "id": 133, - "paths": [ - "M64 0h384v64h-384zM576 0h384v64h-384zM952 320h-56v-256h-256v256h-256v-256h-256v256h-56c-39.6 0-72 32.4-72 72v560c0 39.6 32.4 72 72 72h304c39.6 0 72-32.4 72-72v-376h128v376c0 39.6 32.4 72 72 72h304c39.6 0 72-32.4 72-72v-560c0-39.6-32.4-72-72-72zM348 960h-248c-19.8 0-36-14.4-36-32s16.2-32 36-32h248c19.8 0 36 14.4 36 32s-16.2 32-36 32zM544 512h-64c-17.6 0-32-14.4-32-32s14.4-32 32-32h64c17.6 0 32 14.4 32 32s-14.4 32-32 32zM924 960h-248c-19.8 0-36-14.4-36-32s16.2-32 36-32h248c19.8 0 36 14.4 36 32s-16.2 32-36 32z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "binoculars", - "lookup", - "search", - "find" - ], - "grid": 16 - }, - { - "id": 134, - "paths": [ - "M992.262 871.396l-242.552-206.294c-25.074-22.566-51.89-32.926-73.552-31.926 57.256-67.068 91.842-154.078 91.842-249.176 0-212.078-171.922-384-384-384-212.076 0-384 171.922-384 384s171.922 384 384 384c95.098 0 182.108-34.586 249.176-91.844-1 21.662 9.36 48.478 31.926 73.552l206.294 242.552c35.322 39.246 93.022 42.554 128.22 7.356s31.892-92.898-7.354-128.22zM384 640c-141.384 0-256-114.616-256-256s114.616-256 256-256 256 114.616 256 256-114.614 256-256 256z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "search", - "magnifier", - "magnifying-glass", - "inspect", - "find" - ], - "grid": 16 - }, - { - "id": 135, - "paths": [ - "M992.262 871.396l-242.552-206.294c-25.074-22.566-51.89-32.926-73.552-31.926 57.256-67.068 91.842-154.078 91.842-249.176 0-212.078-171.922-384-384-384-212.076 0-384 171.922-384 384s171.922 384 384 384c95.098 0 182.108-34.586 249.176-91.844-1 21.662 9.36 48.478 31.926 73.552l206.294 242.552c35.322 39.246 93.022 42.554 128.22 7.356s31.892-92.898-7.354-128.22zM384 640c-141.384 0-256-114.616-256-256s114.616-256 256-256 256 114.616 256 256-114.614 256-256 256zM448 192h-128v128h-128v128h128v128h128v-128h128v-128h-128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "zoom-in", - "magnifier", - "magnifier-plus", - "enlarge" - ], - "grid": 16 - }, - { - "id": 136, - "paths": [ - "M992.262 871.396l-242.552-206.294c-25.074-22.566-51.89-32.926-73.552-31.926 57.256-67.068 91.842-154.078 91.842-249.176 0-212.078-171.922-384-384-384-212.076 0-384 171.922-384 384s171.922 384 384 384c95.098 0 182.108-34.586 249.176-91.844-1 21.662 9.36 48.478 31.926 73.552l206.294 242.552c35.322 39.246 93.022 42.554 128.22 7.356s31.892-92.898-7.354-128.22zM384 640c-141.384 0-256-114.616-256-256s114.616-256 256-256 256 114.616 256 256-114.614 256-256 256zM192 320h384v128h-384z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "zoom-out", - "magnifier", - "magnifier-minus", - "reduce" - ], - "grid": 16 - }, - { - "id": 137, - "paths": [ - "M1024 0h-416l160 160-192 192 96 96 192-192 160 160z", - "M1024 1024v-416l-160 160-192-192-96 96 192 192-160 160z", - "M0 1024h416l-160-160 192-192-96-96-192 192-160-160z", - "M0 0v416l160-160 192 192 96-96-192-192 160-160z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "enlarge", - "expand", - "maximize", - "fullscreen" - ], - "grid": 16 - }, - { - "id": 138, - "paths": [ - "M576 448h416l-160-160 192-192-96-96-192 192-160-160z", - "M576 576v416l160-160 192 192 96-96-192-192 160-160z", - "M448 575.996h-416l160 160-192 192 96 96 192-192 160 160z", - "M448 448v-416l-160 160-192-192-96 96 192 192-160 160z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "shrink", - "collapse", - "minimize", - "contract" - ], - "grid": 16 - }, - { - "id": 139, - "paths": [ - "M1024 0v416l-160-160-192 192-96-96 192-192-160-160zM448 672l-192 192 160 160h-416v-416l160 160 192-192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "enlarge", - "expand", - "maximize", - "fullscreen" - ], - "grid": 16 - }, - { - "id": 140, - "paths": [ - "M448 576v416l-160-160-192 192-96-96 192-192-160-160zM1024 96l-192 192 160 160h-416v-416l160 160 192-192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "shrink", - "collapse", - "minimize", - "contract" - ], - "grid": 16 - }, - { - "id": 141, - "paths": [ - "M704 0c-176.73 0-320 143.268-320 320 0 20.026 1.858 39.616 5.376 58.624l-389.376 389.376v192c0 35.346 28.654 64 64 64h64v-64h128v-128h128v-128h128l83.042-83.042c34.010 12.316 70.696 19.042 108.958 19.042 176.73 0 320-143.268 320-320s-143.27-320-320-320zM799.874 320.126c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "key", - "password", - "login", - "signin" - ], - "grid": 16 - }, - { - "id": 142, - "paths": [ - "M1002.132 314.242l-101.106-101.104c-24.792-24.794-65.37-65.368-90.162-90.164l-101.106-101.104c-24.792-24.794-68.954-29.166-98.13-9.716l-276.438 184.292c-29.176 19.452-40.218 61.028-24.536 92.39l70.486 140.974c2.154 4.306 4.646 8.896 7.39 13.66l-356.53 356.53-32 224h192v-64h128v-128h128v-128h128v-71.186c6.396 3.812 12.534 7.216 18.192 10.044l140.97 70.488c31.366 15.682 72.94 4.638 92.39-24.538l184.294-276.44c19.454-29.172 15.078-73.33-9.714-98.126zM150.628 854.626l-45.254-45.254 311.572-311.57 45.254 45.254-311.572 311.57zM917.020 423.764l-45.256 45.256c-12.446 12.444-32.808 12.444-45.254 0l-271.53-271.53c-12.446-12.444-12.446-32.81 0-45.254l45.256-45.256c12.446-12.444 32.808-12.444 45.254 0l271.53 271.53c12.446 12.444 12.446 32.81 0 45.254z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "key", - "password", - "login", - "signin" - ], - "grid": 16 - }, - { - "id": 143, - "paths": [ - "M592 448h-16v-192c0-105.87-86.13-192-192-192h-128c-105.87 0-192 86.13-192 192v192h-16c-26.4 0-48 21.6-48 48v480c0 26.4 21.6 48 48 48h544c26.4 0 48-21.6 48-48v-480c0-26.4-21.6-48-48-48zM192 256c0-35.29 28.71-64 64-64h128c35.29 0 64 28.71 64 64v192h-256v-192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "lock", - "secure", - "private", - "encrypted" - ], - "grid": 16 - }, - { - "id": 144, - "paths": [ - "M768 64c105.87 0 192 86.13 192 192v192h-128v-192c0-35.29-28.71-64-64-64h-128c-35.29 0-64 28.71-64 64v192h16c26.4 0 48 21.6 48 48v480c0 26.4-21.6 48-48 48h-544c-26.4 0-48-21.6-48-48v-480c0-26.4 21.6-48 48-48h400v-192c0-105.87 86.13-192 192-192h128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "unlocked", - "lock-open" - ], - "grid": 16 - }, - { - "id": 145, - "paths": [ - "M1002.934 817.876l-460.552-394.76c21.448-40.298 33.618-86.282 33.618-135.116 0-159.058-128.942-288-288-288-29.094 0-57.172 4.332-83.646 12.354l166.39 166.39c24.89 24.89 24.89 65.62 0 90.51l-101.49 101.49c-24.89 24.89-65.62 24.89-90.51 0l-166.39-166.39c-8.022 26.474-12.354 54.552-12.354 83.646 0 159.058 128.942 288 288 288 48.834 0 94.818-12.17 135.116-33.62l394.76 460.552c22.908 26.724 62.016 28.226 86.904 3.338l101.492-101.492c24.888-24.888 23.386-63.994-3.338-86.902z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "wrench", - "tool", - "fix", - "settings", - "control", - "options", - "preferences" - ], - "grid": 16 - }, - { - "id": 146, - "paths": [ - "M448 128v-16c0-26.4-21.6-48-48-48h-160c-26.4 0-48 21.6-48 48v16h-192v128h192v16c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-16h576v-128h-576zM256 256v-128h128v128h-128zM832 432c0-26.4-21.6-48-48-48h-160c-26.4 0-48 21.6-48 48v16h-576v128h576v16c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-16h192v-128h-192v-16zM640 576v-128h128v128h-128zM448 752c0-26.4-21.6-48-48-48h-160c-26.4 0-48 21.6-48 48v16h-192v128h192v16c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-16h576v-128h-576v-16zM256 896v-128h128v128h-128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "equalizer", - "sliders", - "settings", - "preferences", - "dashboard", - "control" - ], - "grid": 16 - }, - { - "id": 147, - "paths": [ - "M896 448h16c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-16v-192h-128v192h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h16v576h128v-576zM768 256h128v128h-128v-128zM592 832c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-16v-576h-128v576h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h16v192h128v-192h16zM448 640h128v128h-128v-128zM272 448c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-16v-192h-128v192h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h16v576h128v-576h16zM128 256h128v128h-128v-128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "equalizer", - "sliders", - "settings", - "preferences", - "dashboard", - "control" - ], - "grid": 16 - }, - { - "id": 148, - "paths": [ - "M933.79 610.25c-53.726-93.054-21.416-212.304 72.152-266.488l-100.626-174.292c-28.75 16.854-62.176 26.518-97.846 26.518-107.536 0-194.708-87.746-194.708-195.99h-201.258c0.266 33.41-8.074 67.282-25.958 98.252-53.724 93.056-173.156 124.702-266.862 70.758l-100.624 174.292c28.97 16.472 54.050 40.588 71.886 71.478 53.638 92.908 21.512 211.92-71.708 266.224l100.626 174.292c28.65-16.696 61.916-26.254 97.4-26.254 107.196 0 194.144 87.192 194.7 194.958h201.254c-0.086-33.074 8.272-66.57 25.966-97.218 53.636-92.906 172.776-124.594 266.414-71.012l100.626-174.29c-28.78-16.466-53.692-40.498-71.434-71.228zM512 719.332c-114.508 0-207.336-92.824-207.336-207.334 0-114.508 92.826-207.334 207.336-207.334 114.508 0 207.332 92.826 207.332 207.334-0.002 114.51-92.824 207.334-207.332 207.334z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "cog", - "gear", - "preferences", - "settings", - "generate", - "control", - "options" - ], - "grid": 16 - }, - { - "id": 149, - "paths": [ - "M363.722 722.052l41.298-57.816-45.254-45.256-57.818 41.296c-10.722-5.994-22.204-10.774-34.266-14.192l-11.682-70.084h-64l-11.68 70.086c-12.062 3.418-23.544 8.198-34.266 14.192l-57.818-41.298-45.256 45.256 41.298 57.816c-5.994 10.72-10.774 22.206-14.192 34.266l-70.086 11.682v64l70.086 11.682c3.418 12.060 8.198 23.544 14.192 34.266l-41.298 57.816 45.254 45.256 57.818-41.296c10.722 5.994 22.204 10.774 34.266 14.192l11.682 70.084h64l11.68-70.086c12.062-3.418 23.544-8.198 34.266-14.192l57.818 41.296 45.254-45.256-41.298-57.816c5.994-10.72 10.774-22.206 14.192-34.266l70.088-11.68v-64l-70.086-11.682c-3.418-12.060-8.198-23.544-14.192-34.266zM224 864c-35.348 0-64-28.654-64-64s28.652-64 64-64 64 28.654 64 64-28.652 64-64 64zM1024 384v-64l-67.382-12.25c-1.242-8.046-2.832-15.978-4.724-23.79l57.558-37.1-24.492-59.128-66.944 14.468c-4.214-6.91-8.726-13.62-13.492-20.13l39.006-56.342-45.256-45.254-56.342 39.006c-6.512-4.766-13.22-9.276-20.13-13.494l14.468-66.944-59.128-24.494-37.1 57.558c-7.812-1.892-15.744-3.482-23.79-4.724l-12.252-67.382h-64l-12.252 67.382c-8.046 1.242-15.976 2.832-23.79 4.724l-37.098-57.558-59.128 24.492 14.468 66.944c-6.91 4.216-13.62 8.728-20.13 13.494l-56.342-39.006-45.254 45.254 39.006 56.342c-4.766 6.51-9.278 13.22-13.494 20.13l-66.944-14.468-24.492 59.128 57.558 37.1c-1.892 7.812-3.482 15.742-4.724 23.79l-67.384 12.252v64l67.382 12.25c1.242 8.046 2.832 15.978 4.724 23.79l-57.558 37.1 24.492 59.128 66.944-14.468c4.216 6.91 8.728 13.618 13.494 20.13l-39.006 56.342 45.254 45.256 56.342-39.006c6.51 4.766 13.22 9.276 20.13 13.492l-14.468 66.944 59.128 24.492 37.102-57.558c7.81 1.892 15.742 3.482 23.788 4.724l12.252 67.384h64l12.252-67.382c8.044-1.242 15.976-2.832 23.79-4.724l37.1 57.558 59.128-24.492-14.468-66.944c6.91-4.216 13.62-8.726 20.13-13.492l56.342 39.006 45.256-45.256-39.006-56.342c4.766-6.512 9.276-13.22 13.492-20.13l66.944 14.468 24.492-59.13-57.558-37.1c1.892-7.812 3.482-15.742 4.724-23.79l67.382-12.25zM672 491.2c-76.878 0-139.2-62.322-139.2-139.2s62.32-139.2 139.2-139.2 139.2 62.322 139.2 139.2c0 76.878-62.32 139.2-139.2 139.2z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "cogs", - "gears", - "preferences", - "settings", - "generate", - "control", - "options" - ], - "grid": 16 - }, - { - "id": 150, - "paths": [ - "M1009.996 828.976l-301.544-301.544c-18.668-18.668-49.214-18.668-67.882 0l-22.626 22.626-184-184 302.056-302.058h-320l-142.058 142.058-14.060-14.058h-67.882v67.882l14.058 14.058-206.058 206.060 160 160 206.058-206.058 184 184-22.626 22.626c-18.668 18.668-18.668 49.214 0 67.882l301.544 301.544c18.668 18.668 49.214 18.668 67.882 0l113.136-113.136c18.67-18.666 18.67-49.214 0.002-67.882z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "hammer", - "tool", - "fix", - "make", - "generate", - "work", - "build" - ], - "grid": 16 - }, - { - "id": 151, - "paths": [ - "M256 192l-128-128h-64v64l128 128zM320 0h64v128h-64zM576 320h128v64h-128zM640 128v-64h-64l-128 128 64 64zM0 320h128v64h-128zM320 576h64v128h-64zM64 576v64h64l128-128-64-64zM1010 882l-636.118-636.118c-18.668-18.668-49.214-18.668-67.882 0l-60.118 60.118c-18.668 18.668-18.668 49.214 0 67.882l636.118 636.118c18.668 18.668 49.214 18.668 67.882 0l60.118-60.118c18.668-18.668 18.668-49.214 0-67.882zM480 544l-192-192 64-64 192 192-64 64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "magic-wand", - "wizard" - ], - "grid": 16 - }, - { - "id": 152, - "paths": [ - "M896 256h-192v-128c0-35.2-28.8-64-64-64h-256c-35.2 0-64 28.8-64 64v128h-192c-70.4 0-128 57.6-128 128v512c0 70.4 57.6 128 128 128h768c70.4 0 128-57.6 128-128v-512c0-70.4-57.6-128-128-128zM384 128h256v128h-256v-128zM768 704h-192v192h-128v-192h-192v-128h192v-192h128v192h192v128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "aid-kit", - "health", - "medicine", - "medical" - ], - "grid": 16 - }, - { - "id": 153, - "paths": [ - "M1024 576v-64h-193.29c-5.862-72.686-31.786-139.026-71.67-192.25h161.944l70.060-280.24-62.090-15.522-57.94 231.76h-174.68c-0.892-0.694-1.796-1.374-2.698-2.056 6.71-19.502 10.362-40.422 10.362-62.194 0.002-105.76-85.958-191.498-191.998-191.498s-192 85.738-192 191.5c0 21.772 3.65 42.692 10.362 62.194-0.9 0.684-1.804 1.362-2.698 2.056h-174.68l-57.94-231.76-62.090 15.522 70.060 280.24h161.944c-39.884 53.222-65.806 119.562-71.668 192.248h-193.29v64h193.37c3.802 45.664 15.508 88.812 33.638 127.75h-123.992l-70.060 280.238 62.090 15.524 57.94-231.762h112.354c58.692 78.032 147.396 127.75 246.66 127.75s187.966-49.718 246.662-127.75h112.354l57.94 231.762 62.090-15.524-70.060-280.238h-123.992c18.13-38.938 29.836-82.086 33.636-127.75h193.37z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "bug", - "virus", - "error" - ], - "grid": 16 - }, - { - "id": 154, - "paths": [ - "M448 576v-448c-247.424 0-448 200.576-448 448s200.576 448 448 448 448-200.576 448-448c0-72.034-17.028-140.084-47.236-200.382l-400.764 200.382zM912.764 247.618c-73.552-146.816-225.374-247.618-400.764-247.618v448l400.764-200.382z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "pie-chart", - "stats", - "statistics", - "graph" - ], - "grid": 16 - }, - { - "id": 155, - "paths": [ - "M128 896h896v128h-1024v-1024h128zM288 832c-53.020 0-96-42.98-96-96s42.98-96 96-96c2.828 0 5.622 0.148 8.388 0.386l103.192-171.986c-9.84-15.070-15.58-33.062-15.58-52.402 0-53.020 42.98-96 96-96s96 42.98 96 96c0 19.342-5.74 37.332-15.58 52.402l103.192 171.986c2.766-0.238 5.56-0.386 8.388-0.386 2.136 0 4.248 0.094 6.35 0.23l170.356-298.122c-10.536-15.408-16.706-34.036-16.706-54.11 0-53.020 42.98-96 96-96s96 42.98 96 96c0 53.020-42.98 96-96 96-2.14 0-4.248-0.094-6.35-0.232l-170.356 298.124c10.536 15.406 16.706 34.036 16.706 54.11 0 53.020-42.98 96-96 96s-96-42.98-96-96c0-19.34 5.74-37.332 15.578-52.402l-103.19-171.984c-2.766 0.238-5.56 0.386-8.388 0.386s-5.622-0.146-8.388-0.386l-103.192 171.986c9.84 15.068 15.58 33.060 15.58 52.4 0 53.020-42.98 96-96 96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "stats-dots", - "stats", - "plot", - "statistics", - "chart" - ], - "grid": 16 - }, - { - "id": 156, - "paths": [ - "M0 832h1024v128h-1024zM128 576h128v192h-128zM320 320h128v448h-128zM512 512h128v256h-128zM704 128h128v640h-128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "stats-bars", - "stats", - "statistics", - "chart" - ], - "grid": 16 - }, - { - "id": 157, - "paths": [ - "M288 384h-192c-17.6 0-32 14.4-32 32v576c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-576c0-17.6-14.4-32-32-32zM288 960h-192v-256h192v256zM608 256h-192c-17.6 0-32 14.4-32 32v704c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-704c0-17.6-14.4-32-32-32zM608 960h-192v-320h192v320zM928 128h-192c-17.6 0-32 14.4-32 32v832c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-832c0-17.6-14.4-32-32-32zM928 960h-192v-384h192v384z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "stats-bars", - "stats", - "statistics", - "chart" - ], - "grid": 16 - }, - { - "id": 158, - "paths": [ - "M832 192v-128h-640v128h-192v128c0 106.038 85.958 192 192 192 20.076 0 39.43-3.086 57.62-8.802 46.174 66.008 116.608 113.796 198.38 130.396v198.406h-64c-70.694 0-128 57.306-128 128h512c0-70.694-57.306-128-128-128h-64v-198.406c81.772-16.6 152.206-64.386 198.38-130.396 18.19 5.716 37.544 8.802 57.62 8.802 106.042 0 192-85.962 192-192v-128h-192zM192 436c-63.962 0-116-52.038-116-116v-64h116v64c0 40.186 7.43 78.632 20.954 114.068-6.802 1.246-13.798 1.932-20.954 1.932zM948 320c0 63.962-52.038 116-116 116-7.156 0-14.152-0.686-20.954-1.932 13.524-35.436 20.954-73.882 20.954-114.068v-64h116v64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "trophy", - "cup", - "prize", - "award", - "winner", - "tournament" - ], - "grid": 16 - }, - { - "id": 159, - "paths": [ - "M771.516 320c18.126-12.88 35.512-27.216 51.444-43.148 33.402-33.402 55.746-74.5 62.912-115.722 7.858-45.186-3.672-87.14-31.63-115.1-22.3-22.298-52.51-34.086-87.364-34.086-49.632 0-101.922 23.824-143.46 65.362-66.476 66.476-105.226 158.238-126.076 223.722-15.44-65.802-46.206-154.644-106.018-214.458-32.094-32.092-73.114-48.57-111.846-48.57-31.654 0-61.78 11.004-84.26 33.486-49.986 49.988-43.232 137.786 15.086 196.104 20.792 20.792 45.098 38.062 70.72 52.412h-217.024v256h64v448h768v-448.002h64v-256h-188.484zM674.326 128.218c27.724-27.724 62.322-44.274 92.55-44.274 10.7 0 25.708 2.254 36.45 12.998 26.030 26.028 11.412 86.308-31.28 128.998-43.946 43.946-103.060 74.168-154.432 94.060h-50.672c18.568-57.548 52.058-136.456 107.384-191.782zM233.934 160.89c-0.702-9.12-0.050-26.248 12.196-38.494 10.244-10.244 23.788-12.396 33.348-12.396v0c21.258 0 43.468 10.016 60.932 27.48 33.872 33.872 61.766 87.772 80.668 155.876 0.51 1.84 1.008 3.67 1.496 5.486-1.816-0.486-3.646-0.984-5.486-1.496-68.104-18.904-122.002-46.798-155.874-80.67-15.828-15.826-25.77-36.16-27.28-55.786zM448 960h-256v-416h256v416zM448 512h-320v-128h320v128zM832 960h-256v-416h256v416zM896 512h-320v-128h320v128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "gift", - "present", - "box" - ], - "grid": 16 - }, - { - "id": 160, - "paths": [ - "M777.784 16.856c-5.576-10.38-16.406-16.856-28.19-16.856h-475.188c-11.784 0-22.614 6.476-28.19 16.856-35.468 66.020-54.216 143.184-54.216 223.144 0 105.412 32.372 204.828 91.154 279.938 45.428 58.046 102.48 96.54 164.846 112.172v327.89h-96c-17.672 0-32 14.326-32 32s14.328 32 32 32h320c17.674 0 32-14.326 32-32s-14.326-32-32-32h-96v-327.89c62.368-15.632 119.418-54.124 164.846-112.172 58.782-75.11 91.154-174.526 91.154-279.938 0-79.96-18.748-157.122-54.216-223.144zM294.1 64h435.8c24.974 52.902 38.1 113.338 38.1 176 0 5.364-0.108 10.696-0.296 16h-511.406c-0.19-5.304-0.296-10.636-0.296-16-0.002-62.664 13.126-123.098 38.098-176z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "glass", - "drink", - "beverage", - "wine" - ], - "grid": 16 - }, - { - "id": 161, - "paths": [ - "M889.162 179.77c7.568-9.632 8.972-22.742 3.62-33.758-5.356-11.018-16.532-18.012-28.782-18.012h-704c-12.25 0-23.426 6.994-28.78 18.012-5.356 11.018-3.95 24.126 3.618 33.758l313.162 398.57v381.66h-96c-17.672 0-32 14.326-32 32s14.328 32 32 32h320c17.674 0 32-14.326 32-32s-14.326-32-32-32h-96v-381.66l313.162-398.57zM798.162 192l-100.572 128h-371.18l-100.57-128h572.322z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "glass", - "drink", - "beverage", - "wine" - ], - "grid": 16 - }, - { - "id": 162, - "paths": [ - "M960 320h-192v-96c0-88.366-171.922-160-384-160s-384 71.634-384 160v640c0 88.366 171.922 160 384 160s384-71.634 384-160v-96h192c35.346 0 64-28.654 64-64v-320c0-35.346-28.654-64-64-64zM176.056 258.398c-36.994-12.19-59.408-25.246-71.41-34.398 12.004-9.152 34.416-22.208 71.41-34.398 57.942-19.090 131.79-29.602 207.944-29.602s150.004 10.512 207.944 29.602c36.994 12.188 59.408 25.246 71.41 34.398-12.002 9.152-34.416 22.208-71.41 34.398-57.94 19.090-131.79 29.602-207.944 29.602s-150.002-10.512-207.944-29.602zM896 640h-128v-192h128v192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "mug", - "drink", - "glass", - "beverage" - ], - "grid": 16 - }, - { - "id": 163, - "paths": [ - "M224 0c-106.040 0-192 100.288-192 224 0 105.924 63.022 194.666 147.706 217.998l-31.788 518.124c-2.154 35.132 24.882 63.878 60.082 63.878h32c35.2 0 62.236-28.746 60.082-63.878l-31.788-518.124c84.684-23.332 147.706-112.074 147.706-217.998 0-123.712-85.96-224-192-224zM869.334 0l-53.334 320h-40l-26.666-320h-26.668l-26.666 320h-40l-53.334-320h-26.666v416c0 17.672 14.326 32 32 32h83.338l-31.42 512.122c-2.154 35.132 24.882 63.878 60.082 63.878h32c35.2 0 62.236-28.746 60.082-63.878l-31.42-512.122h83.338c17.674 0 32-14.328 32-32v-416h-26.666z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "spoon-knife", - "food", - "restaurant" - ], - "grid": 16 - }, - { - "id": 164, - "paths": [ - "M1011.328 134.496c-110.752-83.928-281.184-134.034-455.91-134.034-216.12 0-392.226 75.456-483.16 207.020-42.708 61.79-66.33 134.958-70.208 217.474-3.454 73.474 8.884 154.726 36.684 242.146 94.874-284.384 359.82-507.102 665.266-507.102 0 0-285.826 75.232-465.524 308.192-0.112 0.138-2.494 3.090-6.614 8.698-36.080 48.278-67.538 103.162-91.078 165.328-39.87 94.83-76.784 224.948-76.784 381.782h128c0 0-19.43-122.222 14.36-262.79 55.89 7.556 105.858 11.306 150.852 11.306 117.678 0 201.37-25.46 263.388-80.124 55.568-48.978 86.198-114.786 118.624-184.456 49.524-106.408 105.654-227.010 268.654-320.152 9.33-5.332 15.362-14.992 16.056-25.716s-4.040-21.080-12.606-27.572z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "leaf", - "nature", - "plant", - "tea", - "green", - "vegan", - "vegetarian" - ], - "grid": 16 - }, - { - "id": 165, - "paths": [ - "M704 64l-320 320h-192l-192 256c0 0 203.416-56.652 322.066-30.084l-322.066 414.084 421.902-328.144c58.838 134.654-37.902 328.144-37.902 328.144l256-192v-192l320-320 64-320-320 64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "rocket", - "jet", - "speed", - "spaceship", - "fast" - ], - "grid": 16 - }, - { - "id": 166, - "paths": [ - "M512 64c282.77 0 512 229.23 512 512 0 192.792-106.576 360.666-264.008 448h-495.984c-157.432-87.334-264.008-255.208-264.008-448 0-282.77 229.23-512 512-512zM801.914 865.914c77.438-77.44 120.086-180.398 120.086-289.914h-90v-64h85.038c-7.014-44.998-21.39-88.146-42.564-128h-106.474v-64h64.284c-9.438-11.762-19.552-23.096-30.37-33.914-46.222-46.22-101.54-80.038-161.914-99.798v69.712h-64v-85.040c-20.982-3.268-42.36-4.96-64-4.96s-43.018 1.69-64 4.96v85.040h-64v-69.712c-60.372 19.76-115.692 53.576-161.914 99.798-10.818 10.818-20.932 22.152-30.37 33.914h64.284v64h-106.476c-21.174 39.854-35.552 83.002-42.564 128h85.040v64h-90c0 109.516 42.648 212.474 120.086 289.914 10.71 10.71 21.924 20.728 33.56 30.086h192.354l36.572-512h54.856l36.572 512h192.354c11.636-9.358 22.852-19.378 33.56-30.086z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "meter", - "gauge", - "dashboard", - "speedometer", - "performance" - ], - "grid": 16 - }, - { - "id": 167, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM302.836 834.152c11.106-30.632 17.164-63.688 17.164-98.152 0-124.35-78.81-230.292-189.208-270.606 10.21-84.924 48.254-163.498 109.678-224.924 72.53-72.526 168.96-112.47 271.53-112.47s199 39.944 271.53 112.47c61.428 61.426 99.468 140 109.682 224.924-110.402 40.314-189.212 146.256-189.212 270.606 0 34.468 6.060 67.52 17.166 98.15-61.706 40.242-133.77 61.85-209.166 61.85-75.394 0-147.458-21.608-209.164-61.848zM551.754 640.996c13.878 3.494 24.246 16.080 24.246 31.004v64c0 17.6-14.4 32-32 32h-64c-17.6 0-32-14.4-32-32v-64c0-14.924 10.368-27.51 24.246-31.004l23.754-448.996h32l23.754 448.996z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "meter", - "gauge", - "dashboard", - "speedometer", - "performance" - ], - "grid": 16 - }, - { - "id": 168, - "paths": [ - "M1010.174 915.75l-548.634-499.458 25.534-25.598c20.894-20.954 32.188-48.030 33.918-75.61 1.002-0.45 2.002-0.912 2.958-1.442l102.99-64.402c13.934-16.392 12.916-42.268-2.284-57.502l-179.12-179.608c-15.19-15.234-40.998-16.262-57.344-2.284l-64.236 103.268c-0.526 0.966-0.99 1.966-1.44 2.974-27.502 1.736-54.5 13.056-75.398 34.006l-97.428 97.702c-20.898 20.956-32.184 48.026-33.918 75.604-1.004 0.45-2.004 0.916-2.964 1.446l-102.986 64.406c-13.942 16.39-12.916 42.264 2.276 57.496l179.12 179.604c15.194 15.238 40.996 16.262 57.35 2.286l64.228-103.27c0.528-0.958 0.988-1.96 1.442-2.966 27.502-1.738 54.504-13.050 75.398-34.004l28.292-28.372 498.122 550.114c14.436 15.944 36.7 18.518 49.474 5.712l50.356-50.488c12.764-12.808 10.196-35.132-5.706-49.614z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "hammer", - "gavel", - "rules", - "justice", - "legal" - ], - "grid": 16 - }, - { - "id": 169, - "paths": [ - "M321.008 1024c-68.246-142.008-31.902-223.378 20.55-300.044 57.44-83.956 72.244-167.066 72.244-167.066s45.154 58.7 27.092 150.508c79.772-88.8 94.824-230.28 82.782-284.464 180.314 126.012 257.376 398.856 153.522 601.066 552.372-312.532 137.398-780.172 65.154-832.85 24.082 52.676 28.648 141.85-20 185.126-82.352-312.276-285.972-376.276-285.972-376.276 24.082 161.044-87.296 337.144-194.696 468.73-3.774-64.216-7.782-108.528-41.55-169.98-7.58 116.656-96.732 211.748-120.874 328.628-32.702 158.286 24.496 274.18 241.748 396.622z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "fire", - "flame", - "hot", - "popular" - ], - "grid": 16 - }, - { - "id": 170, - "paths": [ - "M956.29 804.482l-316.29-527.024v-213.458h32c17.6 0 32-14.4 32-32s-14.4-32-32-32h-320c-17.6 0-32 14.4-32 32s14.4 32 32 32h32v213.458l-316.288 527.024c-72.442 120.734-16.512 219.518 124.288 219.518h640c140.8 0 196.73-98.784 124.29-219.518zM241.038 640l206.962-344.938v-231.062h128v231.062l206.964 344.938h-541.926z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "lab", - "beta", - "beaker", - "test", - "experiment" - ], - "grid": 16 - }, - { - "id": 171, - "paths": [ - "M896 0h-256l64 576c0 106.040-85.96 192-192 192s-192-85.96-192-192l64-576h-256l-64 576c0 247.424 200.576 448 448 448s448-200.576 448-448l-64-576zM777.874 841.874c-71.018 71.014-165.44 110.126-265.874 110.126s-194.856-39.112-265.872-110.126c-70.116-70.118-109.13-163.048-110.11-262.054l36.092-324.82h111.114l-35.224 317.010v3.99c0 70.518 27.46 136.814 77.324 186.676 49.862 49.864 116.158 77.324 186.676 77.324s136.814-27.46 186.676-77.324c49.864-49.862 77.324-116.158 77.324-186.676v-3.988l-0.44-3.962-34.782-313.050h111.114l36.090 324.818c-0.98 99.006-39.994 191.938-110.108 262.056z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "magnet", - "attract" - ], - "grid": 16 - }, - { - "id": 172, - "paths": [ - "M128 320v640c0 35.2 28.8 64 64 64h576c35.2 0 64-28.8 64-64v-640h-704zM320 896h-64v-448h64v448zM448 896h-64v-448h64v448zM576 896h-64v-448h64v448zM704 896h-64v-448h64v448z", - "M848 128h-208v-80c0-26.4-21.6-48-48-48h-224c-26.4 0-48 21.6-48 48v80h-208c-26.4 0-48 21.6-48 48v80h832v-80c0-26.4-21.6-48-48-48zM576 128h-192v-63.198h192v63.198z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "bin", - "trashcan", - "remove", - "delete", - "recycle", - "dispose" - ], - "grid": 16 - }, - { - "id": 173, - "paths": [ - "M192 1024h640l64-704h-768zM640 128v-128h-256v128h-320v192l64-64h768l64 64v-192h-320zM576 128h-128v-64h128v64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "bin", - "trashcan", - "remove", - "delete", - "recycle", - "dispose" - ], - "grid": 16 - }, - { - "id": 174, - "paths": [ - "M960 256h-256v-64c0-35.2-28.8-64-64-64h-256c-35.204 0-64 28.8-64 64v64h-256c-35.2 0-64 28.8-64 64v576c0 35.202 28.796 64 64 64h896c35.2 0 64-28.798 64-64v-576c0-35.2-28.8-64-64-64zM384 192.116c0.034-0.040 0.074-0.082 0.114-0.116h255.772c0.042 0.034 0.082 0.076 0.118 0.116v63.884h-256.004v-63.884zM960 512h-128v96c0 17.602-14.4 32-32 32h-64c-17.604 0-32-14.398-32-32v-96h-384v96c0 17.602-14.4 32-32 32h-64c-17.602 0-32-14.398-32-32v-96h-128v-64h896v64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "briefcase", - "portfolio", - "suitcase", - "work", - "job", - "employee" - ], - "grid": 16 - }, - { - "id": 175, - "paths": [ - "M768 639.968l-182.82-182.822 438.82-329.15-128.010-127.996-548.52 219.442-172.7-172.706c-49.78-49.778-119.302-61.706-154.502-26.508-35.198 35.198-23.268 104.726 26.51 154.5l172.686 172.684-219.464 548.582 127.99 128.006 329.19-438.868 182.826 182.828v255.98h127.994l63.992-191.988 191.988-63.996v-127.992l-255.98 0.004z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "airplane", - "travel", - "flight", - "plane", - "transport", - "fly", - "vacation" - ], - "grid": 16 - }, - { - "id": 176, - "paths": [ - "M1024 576l-128-256h-192v-128c0-35.2-28.8-64-64-64h-576c-35.2 0-64 28.8-64 64v512l64 64h81.166c-10.898 18.832-17.166 40.678-17.166 64 0 70.692 57.308 128 128 128s128-57.308 128-128c0-23.322-6.268-45.168-17.166-64h354.334c-10.898 18.832-17.168 40.678-17.168 64 0 70.692 57.308 128 128 128s128-57.308 128-128c0-23.322-6.27-45.168-17.168-64h81.168v-192zM704 576v-192h132.668l96 192h-228.668z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "truck", - "transit", - "transport", - "delivery", - "vehicle" - ], - "grid": 16 - }, - { - "id": 177, - "paths": [ - "M704 1024h320l-256-1024h-192l32 256h-192l32-256h-192l-256 1024h320l32-256h320l32 256zM368 640l32-256h224l32 256h-288z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "road", - "asphalt", - "travel" - ], - "grid": 16 - }, - { - "id": 178, - "paths": [ - "M416 96c0-53.018 42.98-96 96-96s96 42.982 96 96c0 53.020-42.98 96-96 96s-96-42.98-96-96z", - "M640 320l329.596-142.172-23.77-59.424-401.826 137.596h-64l-401.826-137.596-23.77 59.424 329.596 142.172v256l-131.27 424.57 59.84 22.7 185.716-415.27h27.428l185.716 415.27 59.84-22.7-131.27-424.57z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "accessibility" - ], - "grid": 16 - }, - { - "id": 179, - "paths": [ - "M1024 448h-100.924c-27.64-178.24-168.836-319.436-347.076-347.076v-100.924h-128v100.924c-178.24 27.64-319.436 168.836-347.076 347.076h-100.924v128h100.924c27.64 178.24 168.836 319.436 347.076 347.076v100.924h128v-100.924c178.24-27.64 319.436-168.836 347.076-347.076h100.924v-128zM792.822 448h-99.762c-19.284-54.55-62.51-97.778-117.060-117.060v-99.762c107.514 24.49 192.332 109.31 216.822 216.822zM512 576c-35.346 0-64-28.654-64-64s28.654-64 64-64c35.346 0 64 28.654 64 64s-28.654 64-64 64zM448 231.178v99.762c-54.55 19.282-97.778 62.51-117.060 117.060h-99.762c24.49-107.512 109.31-192.332 216.822-216.822zM231.178 576h99.762c19.282 54.55 62.51 97.778 117.060 117.060v99.762c-107.512-24.49-192.332-109.308-216.822-216.822zM576 792.822v-99.762c54.55-19.284 97.778-62.51 117.060-117.060h99.762c-24.49 107.514-109.308 192.332-216.822 216.822z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "target", - "goal", - "location", - "spot" - ], - "grid": 16 - }, - { - "id": 180, - "paths": [ - "M960 0l-448 128-448-128c0 0-4.5 51.698 0 128l448 140.090 448-140.090c4.498-76.302 0-128 0-128zM72.19 195.106c23.986 250.696 113.49 672.234 439.81 828.894 326.32-156.66 415.824-578.198 439.81-828.894l-439.81 165.358-439.81-165.358z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "shield", - "security", - "defense", - "protection", - "anti virus" - ], - "grid": 16 - }, - { - "id": 181, - "paths": [ - "M384 0l-384 512h384l-256 512 896-640h-512l384-384z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "power", - "lightning", - "bolt", - "electricity" - ], - "grid": 16 - }, - { - "id": 182, - "paths": [ - "M640 146.588v135.958c36.206 15.804 69.5 38.408 98.274 67.18 60.442 60.44 93.726 140.8 93.726 226.274s-33.286 165.834-93.726 226.274c-60.44 60.44-140.798 93.726-226.274 93.726s-165.834-33.286-226.274-93.726c-60.44-60.44-93.726-140.8-93.726-226.274s33.286-165.834 93.726-226.274c28.774-28.774 62.068-51.378 98.274-67.182v-135.956c-185.048 55.080-320 226.472-320 429.412 0 247.424 200.578 448 448 448 247.424 0 448-200.576 448-448 0-202.94-134.95-374.332-320-429.412zM448 0h128v512h-128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "switch" - ], - "grid": 16 - }, - { - "id": 183, - "paths": [ - "M1024 282.5l-90.506-90.5-178.746 178.752-101.5-101.502 178.75-178.75-90.5-90.5-178.75 178.75-114.748-114.75-86.626 86.624 512.002 512 86.624-86.622-114.752-114.752 178.752-178.75z", - "M794.040 673.79l-443.824-443.824c-95.818 114.904-204.52 292.454-129.396 445.216l-132.248 132.248c-31.112 31.114-31.112 82.024 0 113.136l14.858 14.858c31.114 31.114 82.026 31.114 113.138 0l132.246-132.244c152.764 75.132 330.318-33.566 445.226-129.39z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "power-cord", - "plugin", - "extension" - ], - "grid": 16 - }, - { - "id": 184, - "paths": [ - "M928 128h-288c0-70.692-57.306-128-128-128-70.692 0-128 57.308-128 128h-288c-17.672 0-32 14.328-32 32v832c0 17.674 14.328 32 32 32h832c17.674 0 32-14.326 32-32v-832c0-17.672-14.326-32-32-32zM512 64c35.346 0 64 28.654 64 64s-28.654 64-64 64c-35.346 0-64-28.654-64-64s28.654-64 64-64zM896 960h-768v-768h128v96c0 17.672 14.328 32 32 32h448c17.674 0 32-14.328 32-32v-96h128v768z", - "M448 858.51l-205.254-237.254 58.508-58.51 146.746 114.744 274.742-242.744 58.514 58.508z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "clipboard", - "board", - "signup", - "register", - "agreement" - ], - "grid": 16 - }, - { - "id": 185, - "paths": [ - "M384 832h640v128h-640zM384 448h640v128h-640zM384 64h640v128h-640zM192 0v256h-64v-192h-64v-64zM128 526v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM256 704v320h-192v-64h128v-64h-128v-64h128v-64h-128v-64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "list-numbered", - "options" - ], - "grid": 16 - }, - { - "id": 186, - "paths": [ - "M0 0h256v256h-256zM384 64h640v128h-640zM0 384h256v256h-256zM384 448h640v128h-640zM0 768h256v256h-256zM384 832h640v128h-640z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "list", - "todo", - "bullet", - "menu", - "options" - ], - "grid": 16 - }, - { - "id": 187, - "paths": [ - "M384 64h640v128h-640v-128zM384 448h640v128h-640v-128zM384 832h640v128h-640v-128zM0 128c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128zM0 512c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128zM0 896c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "list", - "todo", - "bullet", - "menu", - "options" - ], - "grid": 16 - }, - { - "id": 188, - "paths": [ - "M976 768h-16v-208c0-61.756-50.242-112-112-112h-272v-128h16c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-160c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h16v128h-272c-61.756 0-112 50.244-112 112v208h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-16v-192h256v192h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-16v-192h256v192h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48zM192 960h-128v-128h128v128zM576 960h-128v-128h128v128zM448 256v-128h128v128h-128zM960 960h-128v-128h128v128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "tree", - "branches", - "inheritance" - ], - "grid": 16 - }, - { - "id": 189, - "paths": [ - "M64 192h896v192h-896zM64 448h896v192h-896zM64 704h896v192h-896z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "menu", - "list", - "options", - "lines", - "hamburger" - ], - "grid": 16 - }, - { - "id": 190, - "paths": [ - "M0 192h896v192h-896v-192zM0 448h896v192h-896v-192zM0 704h896v192h-896v-192z", - "M992 576l192 192 192-192z", - "M1376 512l-192-192-192 192z" - ], - "width": 1408, - "attrs": [], - "isMulticolor": false, - "tags": [ - "menu", - "options", - "hamburger" - ], - "grid": 16 - }, - { - "id": 191, - "paths": [ - "M0 192h896v192h-896v-192zM0 448h896v192h-896v-192zM0 704h896v192h-896v-192z", - "M992 448l192 192 192-192z" - ], - "width": 1408, - "attrs": [], - "isMulticolor": false, - "tags": [ - "menu", - "options", - "hamburger" - ], - "grid": 16 - }, - { - "id": 192, - "paths": [ - "M0 192h896v192h-896v-192zM0 448h896v192h-896v-192zM0 704h896v192h-896v-192z", - "M992 640l192-192 192 192z" - ], - "width": 1408, - "attrs": [], - "isMulticolor": false, - "tags": [ - "menu", - "options", - "hamburger" - ], - "grid": 16 - }, - { - "id": 193, - "paths": [ - "M1024 657.542c0-82.090-56.678-150.9-132.996-169.48-3.242-128.7-108.458-232.062-237.862-232.062-75.792 0-143.266 35.494-186.854 90.732-24.442-31.598-62.69-51.96-105.708-51.96-73.81 0-133.642 59.874-133.642 133.722 0 6.436 0.48 12.76 1.364 18.954-11.222-2.024-22.766-3.138-34.57-3.138-106.998-0.002-193.732 86.786-193.732 193.842 0 107.062 86.734 193.848 193.73 193.848l656.262-0.012c96.138-0.184 174.008-78.212 174.008-174.446z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "cloud", - "weather" - ], - "grid": 16 - }, - { - "id": 194, - "paths": [ - "M891.004 360.060c-3.242-128.698-108.458-232.060-237.862-232.060-75.792 0-143.266 35.494-186.854 90.732-24.442-31.598-62.69-51.96-105.708-51.96-73.81 0-133.642 59.876-133.642 133.722 0 6.436 0.48 12.76 1.364 18.954-11.222-2.024-22.766-3.138-34.57-3.138-106.998-0.002-193.732 86.786-193.732 193.842 0 107.062 86.734 193.848 193.73 193.848h91.76l226.51 234.51 226.51-234.51 111.482-0.012c96.138-0.184 174.008-78.21 174.008-174.446 0-82.090-56.678-150.9-132.996-169.482zM512 832l-192-192h128v-192h128v192h128l-192 192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "cloud-download", - "cloud", - "save", - "download" - ], - "grid": 16 - }, - { - "id": 195, - "paths": [ - "M892.268 386.49c2.444-11.11 3.732-22.648 3.732-34.49 0-88.366-71.634-160-160-160-14.222 0-28.014 1.868-41.132 5.352-24.798-77.352-97.29-133.352-182.868-133.352-87.348 0-161.054 58.336-184.326 138.17-22.742-6.622-46.792-10.17-71.674-10.17-141.384 0-256 114.616-256 256 0 141.388 114.616 256 256 256h128v192h256v-192h224c88.366 0 160-71.632 160-160 0-78.72-56.854-144.162-131.732-157.51zM576 640v192h-128v-192h-160l224-224 224 224h-160z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "cloud-upload", - "cloud", - "load", - "upload" - ], - "grid": 16 - }, - { - "id": 196, - "paths": [ - "M892.268 514.49c2.442-11.108 3.732-22.646 3.732-34.49 0-88.366-71.634-160-160-160-14.224 0-28.014 1.868-41.134 5.352-24.796-77.352-97.288-133.352-182.866-133.352-87.348 0-161.054 58.336-184.326 138.17-22.742-6.62-46.792-10.17-71.674-10.17-141.384 0-256 114.616-256 256 0 141.382 114.616 256 256 256h608c88.366 0 160-71.632 160-160 0-78.718-56.854-144.16-131.732-157.51zM416 768l-160-160 64-64 96 96 224-224 64 64-288 288z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "cloud-check", - "cloud", - "synced" - ], - "grid": 16 - }, - { - "id": 197, - "paths": [ - "M896 512h-160l-224 224-224-224h-160l-128 256v64h1024v-64l-128-256zM0 896h1024v64h-1024v-64zM576 320v-256h-128v256h-224l288 288 288-288h-224z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "download", - "save", - "store" - ], - "grid": 16 - }, - { - "id": 198, - "paths": [ - "M0 896h1024v64h-1024zM1024 768v64h-1024v-64l128-256h256v128h256v-128h256zM224 320l288-288 288 288h-224v256h-128v-256z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "upload", - "load", - "open" - ], - "grid": 16 - }, - { - "id": 199, - "paths": [ - "M736 448l-256 256-256-256h160v-384h192v384zM480 704h-480v256h960v-256h-480zM896 832h-128v-64h128v64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "download", - "save", - "store" - ], - "grid": 16 - }, - { - "id": 200, - "paths": [ - "M480 704h-480v256h960v-256h-480zM896 832h-128v-64h128v64zM224 320l256-256 256 256h-160v320h-192v-320z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "upload", - "load", - "open" - ], - "grid": 16 - }, - { - "id": 201, - "paths": [ - "M480 64c-265.096 0-480 214.904-480 480 0 265.098 214.904 480 480 480 265.098 0 480-214.902 480-480 0-265.096-214.902-480-480-480zM751.59 704c8.58-40.454 13.996-83.392 15.758-128h127.446c-3.336 44.196-13.624 87.114-30.68 128h-112.524zM208.41 384c-8.58 40.454-13.996 83.392-15.758 128h-127.444c3.336-44.194 13.622-87.114 30.678-128h112.524zM686.036 384c9.614 40.962 15.398 83.854 17.28 128h-191.316v-128h174.036zM512 320v-187.338c14.59 4.246 29.044 11.37 43.228 21.37 26.582 18.74 52.012 47.608 73.54 83.486 14.882 24.802 27.752 52.416 38.496 82.484h-155.264zM331.232 237.516c21.528-35.878 46.956-64.748 73.54-83.486 14.182-10 28.638-17.124 43.228-21.37v187.34h-155.264c10.746-30.066 23.616-57.68 38.496-82.484zM448 384v128h-191.314c1.88-44.146 7.666-87.038 17.278-128h174.036zM95.888 704c-17.056-40.886-27.342-83.804-30.678-128h127.444c1.762 44.608 7.178 87.546 15.758 128h-112.524zM256.686 576h191.314v128h-174.036c-9.612-40.96-15.398-83.854-17.278-128zM448 768v187.34c-14.588-4.246-29.044-11.372-43.228-21.37-26.584-18.74-52.014-47.61-73.54-83.486-14.882-24.804-27.75-52.418-38.498-82.484h155.266zM628.768 850.484c-21.528 35.876-46.958 64.746-73.54 83.486-14.184 9.998-28.638 17.124-43.228 21.37v-187.34h155.266c-10.746 30.066-23.616 57.68-38.498 82.484zM512 704v-128h191.314c-1.88 44.146-7.666 87.040-17.28 128h-174.034zM767.348 512c-1.762-44.608-7.178-87.546-15.758-128h112.524c17.056 40.886 27.344 83.806 30.68 128h-127.446zM830.658 320h-95.9c-18.638-58.762-44.376-110.294-75.316-151.428 42.536 20.34 81.058 47.616 114.714 81.272 21.48 21.478 40.362 44.938 56.502 70.156zM185.844 249.844c33.658-33.658 72.18-60.932 114.714-81.272-30.942 41.134-56.676 92.666-75.316 151.428h-95.898c16.138-25.218 35.022-48.678 56.5-70.156zM129.344 768h95.898c18.64 58.762 44.376 110.294 75.318 151.43-42.536-20.34-81.058-47.616-114.714-81.274-21.48-21.478-40.364-44.938-56.502-70.156zM774.156 838.156c-33.656 33.658-72.18 60.934-114.714 81.274 30.942-41.134 56.678-92.668 75.316-151.43h95.9c-16.14 25.218-35.022 48.678-56.502 70.156z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "sphere", - "globe", - "internet" - ], - "grid": 16 - }, - { - "id": 202, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 960.002c-62.958 0-122.872-13.012-177.23-36.452l233.148-262.29c5.206-5.858 8.082-13.422 8.082-21.26v-96c0-17.674-14.326-32-32-32-112.99 0-232.204-117.462-233.374-118.626-6-6.002-14.14-9.374-22.626-9.374h-128c-17.672 0-32 14.328-32 32v192c0 12.122 6.848 23.202 17.69 28.622l110.31 55.156v187.886c-116.052-80.956-192-215.432-192-367.664 0-68.714 15.49-133.806 43.138-192h116.862c8.488 0 16.626-3.372 22.628-9.372l128-128c6-6.002 9.372-14.14 9.372-22.628v-77.412c40.562-12.074 83.518-18.588 128-18.588 70.406 0 137.004 16.26 196.282 45.2-4.144 3.502-8.176 7.164-12.046 11.036-36.266 36.264-56.236 84.478-56.236 135.764s19.97 99.5 56.236 135.764c36.434 36.432 85.218 56.264 135.634 56.26 3.166 0 6.342-0.080 9.518-0.236 13.814 51.802 38.752 186.656-8.404 372.334-0.444 1.744-0.696 3.488-0.842 5.224-81.324 83.080-194.7 134.656-320.142 134.656z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "earth", - "globe", - "language", - "web", - "internet", - "sphere", - "planet" - ], - "grid": 16 - }, - { - "id": 203, - "paths": [ - "M440.236 635.766c-13.31 0-26.616-5.076-36.77-15.23-95.134-95.136-95.134-249.934 0-345.070l192-192c46.088-46.086 107.36-71.466 172.534-71.466s126.448 25.38 172.536 71.464c95.132 95.136 95.132 249.934 0 345.070l-87.766 87.766c-20.308 20.308-53.23 20.308-73.54 0-20.306-20.306-20.306-53.232 0-73.54l87.766-87.766c54.584-54.586 54.584-143.404 0-197.99-26.442-26.442-61.6-41.004-98.996-41.004s-72.552 14.562-98.996 41.006l-192 191.998c-54.586 54.586-54.586 143.406 0 197.992 20.308 20.306 20.306 53.232 0 73.54-10.15 10.152-23.462 15.23-36.768 15.23z", - "M256 1012c-65.176 0-126.45-25.38-172.534-71.464-95.134-95.136-95.134-249.934 0-345.070l87.764-87.764c20.308-20.306 53.234-20.306 73.54 0 20.308 20.306 20.308 53.232 0 73.54l-87.764 87.764c-54.586 54.586-54.586 143.406 0 197.992 26.44 26.44 61.598 41.002 98.994 41.002s72.552-14.562 98.998-41.006l192-191.998c54.584-54.586 54.584-143.406 0-197.992-20.308-20.308-20.306-53.232 0-73.54 20.306-20.306 53.232-20.306 73.54 0.002 95.132 95.134 95.132 249.932 0.002 345.068l-192.002 192c-46.090 46.088-107.364 71.466-172.538 71.466z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "link", - "chain", - "url", - "uri", - "anchor" - ], - "grid": 16 - }, - { - "id": 204, - "paths": [ - "M0 0h128v1024h-128v-1024z", - "M832 643.002c82.624 0 154.57-19.984 192-49.5v-512c-37.43 29.518-109.376 49.502-192 49.502s-154.57-19.984-192-49.502v512c37.43 29.516 109.376 49.5 192 49.5z", - "M608 32.528c-46.906-19.94-115.52-32.528-192-32.528-96.396 0-180.334 19.984-224 49.502v512c43.666-29.518 127.604-49.502 224-49.502 76.48 0 145.094 12.588 192 32.528v-512z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "flag", - "report", - "mark" - ], - "grid": 16 - }, - { - "id": 205, - "paths": [ - "M665.832 327.048l-64.952-64.922-324.81 324.742c-53.814 53.792-53.814 141.048 0 194.844 53.804 53.792 141.060 53.792 194.874 0l389.772-389.708c89.714-89.662 89.714-235.062 0-324.726-89.666-89.704-235.112-89.704-324.782 0l-409.23 409.178c-0.29 0.304-0.612 0.576-0.876 0.846-125.102 125.096-125.102 327.856 0 452.906 125.054 125.056 327.868 125.056 452.988 0 0.274-0.274 0.516-0.568 0.82-0.876l0.032 0.034 279.332-279.292-64.986-64.92-279.33 279.262c-0.296 0.268-0.564 0.57-0.846 0.844-89.074 89.058-233.98 89.058-323.076 0-89.062-89.042-89.062-233.922 0-322.978 0.304-0.304 0.604-0.582 0.888-0.846l-0.046-0.060 409.28-409.166c53.712-53.738 141.144-53.738 194.886 0 53.712 53.734 53.712 141.148 0 194.84l-389.772 389.7c-17.936 17.922-47.054 17.922-64.972 0-17.894-17.886-17.894-47.032 0-64.92l324.806-324.782z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "attachment", - "paperclip" - ], - "grid": 16 - }, - { - "id": 206, - "paths": [ - "M512 192c-223.318 0-416.882 130.042-512 320 95.118 189.958 288.682 320 512 320 223.312 0 416.876-130.042 512-320-95.116-189.958-288.688-320-512-320zM764.45 361.704c60.162 38.374 111.142 89.774 149.434 150.296-38.292 60.522-89.274 111.922-149.436 150.296-75.594 48.218-162.89 73.704-252.448 73.704-89.56 0-176.858-25.486-252.452-73.704-60.158-38.372-111.138-89.772-149.432-150.296 38.292-60.524 89.274-111.924 149.434-150.296 3.918-2.5 7.876-4.922 11.86-7.3-9.96 27.328-15.41 56.822-15.41 87.596 0 141.382 114.616 256 256 256 141.382 0 256-114.618 256-256 0-30.774-5.452-60.268-15.408-87.598 3.978 2.378 7.938 4.802 11.858 7.302v0zM512 416c0 53.020-42.98 96-96 96s-96-42.98-96-96 42.98-96 96-96 96 42.982 96 96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "eye", - "views", - "vision", - "visit" - ], - "grid": 16 - }, - { - "id": 207, - "paths": [ - "M1024 128h-128v-128h-128v128h-128v128h128v128h128v-128h128z", - "M863.862 446.028c18.436 20.478 35.192 42.53 50.022 65.972-38.292 60.522-89.274 111.922-149.436 150.296-75.594 48.218-162.89 73.704-252.448 73.704-89.56 0-176.86-25.486-252.454-73.704-60.156-38.372-111.136-89.772-149.43-150.296 38.292-60.524 89.274-111.924 149.434-150.296 3.918-2.5 7.876-4.922 11.862-7.3-9.962 27.328-15.412 56.822-15.412 87.596 0 141.382 114.616 256 256 256 141.38 0 256-114.618 256-256 0-0.692-0.018-1.38-0.024-2.072-109.284-28.138-190.298-126.63-191.932-244.31-21.026-2.38-42.394-3.618-64.044-3.618-223.318 0-416.882 130.042-512 320 95.118 189.958 288.682 320 512 320 223.31 0 416.876-130.042 512-320-17.64-35.23-38.676-68.394-62.65-99.054-29.28 17.178-62.272 28.71-97.488 33.082zM416 320c53.020 0 96 42.982 96 96 0 53.020-42.98 96-96 96s-96-42.98-96-96 42.98-96 96-96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "eye-plus", - "views", - "vision", - "visit" - ], - "grid": 16 - }, - { - "id": 208, - "paths": [ - "M640 128h384v128h-384v-128z", - "M870.32 320h-294.32v-124.388c-21.014-2.376-42.364-3.612-64-3.612-223.318 0-416.882 130.042-512 320 95.118 189.958 288.682 320 512 320 223.31 0 416.876-130.042 512-320-37.396-74.686-90.020-140.1-153.68-192zM416 320c53.020 0 96 42.982 96 96 0 53.020-42.98 96-96 96s-96-42.98-96-96 42.98-96 96-96zM764.448 662.296c-75.594 48.218-162.89 73.704-252.448 73.704-89.56 0-176.86-25.486-252.454-73.704-60.156-38.372-111.136-89.772-149.43-150.296 38.292-60.524 89.274-111.924 149.434-150.296 3.918-2.5 7.876-4.922 11.862-7.3-9.962 27.328-15.412 56.822-15.412 87.596 0 141.382 114.616 256 256 256 141.38 0 256-114.618 256-256 0-30.774-5.454-60.268-15.408-87.598 3.976 2.378 7.938 4.802 11.858 7.302 60.162 38.374 111.142 89.774 149.434 150.296-38.292 60.522-89.274 111.922-149.436 150.296z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "eye-minus", - "views", - "vision", - "visit" - ], - "grid": 16 - }, - { - "id": 209, - "paths": [ - "M945.942 14.058c-18.746-18.744-49.136-18.744-67.882 0l-202.164 202.164c-51.938-15.754-106.948-24.222-163.896-24.222-223.318 0-416.882 130.042-512 320 41.122 82.124 100.648 153.040 173.022 207.096l-158.962 158.962c-18.746 18.746-18.746 49.136 0 67.882 9.372 9.374 21.656 14.060 33.94 14.060s24.568-4.686 33.942-14.058l864-864c18.744-18.746 18.744-49.138 0-67.884zM416 320c42.24 0 78.082 27.294 90.92 65.196l-121.724 121.724c-37.902-12.838-65.196-48.68-65.196-90.92 0-53.020 42.98-96 96-96zM110.116 512c38.292-60.524 89.274-111.924 149.434-150.296 3.918-2.5 7.876-4.922 11.862-7.3-9.962 27.328-15.412 56.822-15.412 87.596 0 54.89 17.286 105.738 46.7 147.418l-60.924 60.924c-52.446-36.842-97.202-83.882-131.66-138.342z", - "M768 442c0-27.166-4.256-53.334-12.102-77.898l-321.808 321.808c24.568 7.842 50.742 12.090 77.91 12.090 141.382 0 256-114.618 256-256z", - "M830.026 289.974l-69.362 69.362c1.264 0.786 2.53 1.568 3.786 2.368 60.162 38.374 111.142 89.774 149.434 150.296-38.292 60.522-89.274 111.922-149.436 150.296-75.594 48.218-162.89 73.704-252.448 73.704-38.664 0-76.902-4.76-113.962-14.040l-76.894 76.894c59.718 21.462 123.95 33.146 190.856 33.146 223.31 0 416.876-130.042 512-320-45.022-89.916-112.118-166.396-193.974-222.026z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "eye-blocked", - "views", - "vision", - "visit", - "banned", - "blocked", - "forbidden", - "private" - ], - "grid": 16 - }, - { - "id": 210, - "paths": [ - "M192 0v1024l320-320 320 320v-1024z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "bookmark", - "ribbon" - ], - "grid": 16 - }, - { - "id": 211, - "paths": [ - "M256 128v896l320-320 320 320v-896zM768 0h-640v896l64-64v-768h576z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "bookmarks", - "ribbons" - ], - "grid": 16 - }, - { - "id": 212, - "paths": [ - "M512 832c35.346 0 64 28.654 64 64v64c0 35.346-28.654 64-64 64s-64-28.654-64-64v-64c0-35.346 28.654-64 64-64zM512 192c-35.346 0-64-28.654-64-64v-64c0-35.346 28.654-64 64-64s64 28.654 64 64v64c0 35.346-28.654 64-64 64zM960 448c35.346 0 64 28.654 64 64s-28.654 64-64 64h-64c-35.348 0-64-28.654-64-64s28.652-64 64-64h64zM192 512c0 35.346-28.654 64-64 64h-64c-35.346 0-64-28.654-64-64s28.654-64 64-64h64c35.346 0 64 28.654 64 64zM828.784 738.274l45.256 45.258c24.992 24.99 24.992 65.516 0 90.508-24.994 24.992-65.518 24.992-90.51 0l-45.256-45.256c-24.992-24.99-24.992-65.516 0-90.51 24.994-24.992 65.518-24.992 90.51 0zM195.216 285.726l-45.256-45.256c-24.994-24.994-24.994-65.516 0-90.51s65.516-24.994 90.51 0l45.256 45.256c24.994 24.994 24.994 65.516 0 90.51s-65.516 24.994-90.51 0zM828.784 285.726c-24.992 24.992-65.516 24.992-90.51 0-24.992-24.994-24.992-65.516 0-90.51l45.256-45.254c24.992-24.994 65.516-24.994 90.51 0 24.992 24.994 24.992 65.516 0 90.51l-45.256 45.254zM195.216 738.274c24.992-24.992 65.518-24.992 90.508 0 24.994 24.994 24.994 65.52 0 90.51l-45.254 45.256c-24.994 24.992-65.516 24.992-90.51 0s-24.994-65.518 0-90.508l45.256-45.258z", - "M512 256c-141.384 0-256 114.616-256 256 0 141.382 114.616 256 256 256 141.382 0 256-114.618 256-256 0-141.384-114.616-256-256-256zM512 672c-88.366 0-160-71.634-160-160s71.634-160 160-160 160 71.634 160 160-71.634 160-160 160z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "sun", - "weather" - ], - "grid": 16 - }, - { - "id": 213, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM128 512c0-212.078 171.922-384 384-384v768c-212.078 0-384-171.922-384-384z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "contrast" - ], - "grid": 16 - }, - { - "id": 214, - "paths": [ - "M512 256c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.616-256-256-256zM512 672v-320c88.224 0 160 71.776 160 160s-71.776 160-160 160zM512 832c35.346 0 64 28.654 64 64v64c0 35.346-28.654 64-64 64s-64-28.654-64-64v-64c0-35.346 28.654-64 64-64zM512 192c-35.346 0-64-28.654-64-64v-64c0-35.346 28.654-64 64-64s64 28.654 64 64v64c0 35.346-28.654 64-64 64zM960 448c35.346 0 64 28.654 64 64s-28.654 64-64 64h-64c-35.346 0-64-28.654-64-64s28.654-64 64-64h64zM192 512c0 35.346-28.654 64-64 64h-64c-35.346 0-64-28.654-64-64s28.654-64 64-64h64c35.346 0 64 28.654 64 64zM828.784 738.274l45.256 45.256c24.992 24.992 24.992 65.516 0 90.51-24.994 24.992-65.518 24.992-90.51 0l-45.256-45.256c-24.992-24.992-24.992-65.516 0-90.51 24.994-24.992 65.518-24.992 90.51 0zM195.216 285.726l-45.256-45.256c-24.994-24.994-24.994-65.516 0-90.51s65.516-24.994 90.51 0l45.256 45.256c24.994 24.994 24.994 65.516 0 90.51s-65.516 24.994-90.51 0zM828.784 285.726c-24.992 24.992-65.516 24.992-90.51 0-24.992-24.994-24.992-65.516 0-90.51l45.256-45.254c24.992-24.994 65.516-24.994 90.51 0 24.992 24.994 24.992 65.516 0 90.51l-45.256 45.254zM195.216 738.274c24.992-24.992 65.516-24.992 90.508 0 24.994 24.994 24.994 65.518 0 90.51l-45.254 45.256c-24.994 24.992-65.516 24.992-90.51 0-24.994-24.994-24.994-65.518 0-90.51l45.256-45.256z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "brightness-contrast" - ], - "grid": 16 - }, - { - "id": 215, - "paths": [ - "M1024 397.050l-353.78-51.408-158.22-320.582-158.216 320.582-353.784 51.408 256 249.538-60.432 352.352 316.432-166.358 316.432 166.358-60.434-352.352 256.002-249.538zM512 753.498l-223.462 117.48 42.676-248.83-180.786-176.222 249.84-36.304 111.732-226.396 111.736 226.396 249.836 36.304-180.788 176.222 42.678 248.83-223.462-117.48z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "star-empty", - "rate", - "star", - "favorite", - "bookmark" - ], - "grid": 16 - }, - { - "id": 216, - "paths": [ - "M1024 397.050l-353.78-51.408-158.22-320.582-158.216 320.582-353.784 51.408 256 249.538-60.432 352.352 316.432-166.358 316.432 166.358-60.434-352.352 256.002-249.538zM512 753.498l-0.942 0.496 0.942-570.768 111.736 226.396 249.836 36.304-180.788 176.222 42.678 248.83-223.462-117.48z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "star-half", - "rate", - "star" - ], - "grid": 16 - }, - { - "id": 217, - "paths": [ - "M1024 397.050l-353.78-51.408-158.22-320.582-158.216 320.582-353.784 51.408 256 249.538-60.432 352.352 316.432-166.358 316.432 166.358-60.434-352.352 256.002-249.538z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "star-full", - "rate", - "star", - "favorite", - "bookmark" - ], - "grid": 16 - }, - { - "id": 218, - "paths": [ - "M755.188 64c-107.63 0-200.258 87.554-243.164 179-42.938-91.444-135.578-179-243.216-179-148.382 0-268.808 120.44-268.808 268.832 0 301.846 304.5 380.994 512.022 679.418 196.154-296.576 511.978-387.206 511.978-679.418 0-148.392-120.43-268.832-268.812-268.832z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "heart", - "like", - "love", - "favorite" - ], - "grid": 16 - }, - { - "id": 219, - "paths": [ - "M755.188 64c148.382 0 268.812 120.44 268.812 268.832 0 292.21-315.824 382.842-511.978 679.418-207.522-298.424-512.022-377.572-512.022-679.418 0-148.392 120.426-268.832 268.808-268.832 60.354 0 115.99 27.53 160.796 67.834l-77.604 124.166 224 128-128 320 352-384-224-128 61.896-92.846c35.42-21.768 75.21-35.154 117.292-35.154z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "heart-broken", - "heart", - "like", - "love" - ], - "grid": 16 - }, - { - "id": 220, - "paths": [ - "M576 96c0 53.019-42.981 96-96 96s-96-42.981-96-96c0-53.019 42.981-96 96-96s96 42.981 96 96z", - "M576 256h-192c-35.346 0-64 28.654-64 64v320h64v384h80v-384h32v384h80v-384h64v-320c0-35.346-28.652-64-64-64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "man", - "male", - "gender", - "sex" - ], - "grid": 16 - }, - { - "id": 221, - "paths": [ - "M576 96c0 53.019-42.981 96-96 96s-96-42.981-96-96c0-53.019 42.981-96 96-96s96 42.981 96 96z", - "M719 512l49-35.5-133.286-206.116c-5.92-8.98-15.958-14.384-26.714-14.384h-256c-10.756 0-20.792 5.404-26.714 14.384l-133.286 206.116 49 35.5 110.644-143.596 38.458 89.74-134.102 245.856h122.666l21.334 320h64v-320h32v320h64l21.334-320h122.666l-134.104-245.858 38.458-89.74 110.646 143.598z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "woman", - "female", - "gender", - "sex" - ], - "grid": 16 - }, - { - "id": 222, - "paths": [ - "M256 96c0 53.019-42.981 96-96 96s-96-42.981-96-96c0-53.019 42.981-96 96-96s96 42.981 96 96z", - "M832 96c0 53.019-42.981 96-96 96s-96-42.981-96-96c0-53.019 42.981-96 96-96s96 42.981 96 96z", - "M256 256h-192c-35.346 0-64 28.654-64 64v320h64v384h80v-384h32v384h80v-384h64v-320c0-35.346-28.652-64-64-64z", - "M975 512l49-35.5-133.286-206.116c-5.92-8.98-15.958-14.384-26.714-14.384h-256c-10.756 0-20.792 5.404-26.714 14.384l-133.286 206.116 49 35.5 110.644-143.596 38.458 89.74-134.102 245.856h122.666l21.334 320h64v-320h32v320h64l21.334-320h122.666l-134.104-245.858 38.458-89.74 110.646 143.598z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "man-woman", - "toilet", - "bathroom", - "sex", - "gender" - ], - "grid": 16 - }, - { - "id": 223, - "paths": [ - "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM512 598.76c115.95 0 226.23-30.806 320-84.92-14.574 178.438-153.128 318.16-320 318.16-166.868 0-305.422-139.872-320-318.304 93.77 54.112 204.050 85.064 320 85.064zM256 352c0-53.019 28.654-96 64-96s64 42.981 64 96c0 53.019-28.654 96-64 96s-64-42.981-64-96zM640 352c0-53.019 28.654-96 64-96s64 42.981 64 96c0 53.019-28.654 96-64 96s-64-42.981-64-96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "happy", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 224, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM704 256c35.348 0 64 42.98 64 96s-28.652 96-64 96-64-42.98-64-96 28.652-96 64-96zM320 256c35.346 0 64 42.98 64 96s-28.654 96-64 96-64-42.98-64-96 28.654-96 64-96zM512 896c-166.868 0-305.422-139.872-320-318.304 93.77 54.114 204.050 85.064 320 85.064s226.23-30.806 320-84.92c-14.574 178.438-153.128 318.16-320 318.16z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "happy", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 225, - "paths": [ - "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM256 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM640 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM704.098 627.26l82.328 49.396c-55.962 93.070-157.916 155.344-274.426 155.344s-218.464-62.274-274.426-155.344l82.328-49.396c39.174 65.148 110.542 108.74 192.098 108.74s152.924-43.592 192.098-108.74z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "smile", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 226, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM704 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64 28.654-64 64-64zM320 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64 28.654-64 64-64zM512 832c-116.51 0-218.464-62.274-274.426-155.344l82.328-49.396c39.174 65.148 110.542 108.74 192.098 108.74s152.924-43.592 192.098-108.74l82.328 49.396c-55.962 93.070-157.916 155.344-274.426 155.344z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "smile", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 227, - "paths": [ - "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM256 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM640 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM768 576v64h-64v96c0 53.020-42.98 96-96 96s-96-42.98-96-96v-96h-256v-64h512z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "tongue", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 228, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM320 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64 28.654-64 64-64zM768 640h-64v96c0 53.020-42.98 96-96 96s-96-42.98-96-96v-96h-256v-64h512v64zM704 384c-35.346 0-64-28.654-64-64s28.654-64 64-64 64 28.654 64 64-28.654 64-64 64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "tongue", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 229, - "paths": [ - "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM256 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM640 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM319.902 780.74l-82.328-49.396c55.962-93.070 157.916-155.344 274.426-155.344 116.508 0 218.462 62.274 274.426 155.344l-82.328 49.396c-39.174-65.148-110.542-108.74-192.098-108.74-81.558 0-152.924 43.592-192.098 108.74z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "sad", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 230, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM704 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64 28.654-64 64-64zM320 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64 28.654-64 64-64zM704.098 780.74c-39.174-65.148-110.544-108.74-192.098-108.74-81.556 0-152.924 43.592-192.098 108.74l-82.328-49.396c55.96-93.070 157.916-155.344 274.426-155.344 116.508 0 218.464 62.274 274.426 155.344l-82.328 49.396z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "sad", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 231, - "paths": [ - "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM542.74 711.028c140.248-27.706 249.11-91.542 288.454-176.594-21.654 167.956-161.518 297.566-330.85 297.566-119.242 0-223.858-64.282-282.892-160.948 70.41 55.058 194.534 65.808 325.288 39.976zM640 352c0-53.019 28.654-96 64-96s64 42.981 64 96c0 53.019-28.654 96-64 96s-64-42.981-64-96zM352 371.5c-41.796 0-77.334 15.656-90.516 37.5-3.54-5.866-5.484-32.174-5.484-38.75 0-31.066 42.98-56.25 96-56.25s96 25.184 96 56.25c0 6.576-1.944 32.884-5.484 38.75-13.182-21.844-48.72-37.5-90.516-37.5z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "wink", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 232, - "paths": [ - "M512 0c-282.77 0-512 229.228-512 512 0 282.77 229.228 512 512 512 282.77 0 512-229.23 512-512 0-282.772-229.23-512-512-512zM704 256c35.346 0 64 42.98 64 96s-28.654 96-64 96-64-42.98-64-96 28.654-96 64-96zM352 312.062c59.646 0 102 22.332 102 57.282 0 7.398 3.812 42.994-0.17 49.594-14.828-24.576-54.81-42.188-101.83-42.188s-87.002 17.612-101.83 42.188c-3.982-6.6-0.17-42.196-0.17-49.594 0-34.95 42.354-57.282 102-57.282zM500.344 832c-119.242 0-223.858-64.28-282.892-160.952 70.41 55.060 194.534 65.81 325.288 39.978 140.248-27.706 249.11-91.542 288.454-176.594-21.654 167.96-161.518 297.568-330.85 297.568z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "wink", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 233, - "paths": [ - "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM192 512v64c0 140.8 115.2 256 256 256h128c140.8 0 256-115.2 256-256v-64h-640zM384 756.988c-26.538-9.458-50.924-24.822-71.544-45.446-36.406-36.402-56.456-84.54-56.456-135.542h128v180.988zM576 768h-128v-192h128v192zM711.544 711.542c-20.624 20.624-45.010 35.988-71.544 45.446v-180.988h128c0 51.002-20.048 99.14-56.456 135.542zM225.352 384c0.002 0 0 0 0 0 9.768 0 18.108-7.056 19.724-16.69 6.158-36.684 37.668-63.31 74.924-63.31s68.766 26.626 74.924 63.31c1.616 9.632 9.956 16.69 19.722 16.69 9.768 0 18.108-7.056 19.724-16.688 1.082-6.436 1.628-12.934 1.628-19.312 0-63.962-52.038-116-116-116s-116 52.038-116 116c0 6.378 0.548 12.876 1.628 19.312 1.62 9.632 9.96 16.688 19.726 16.688zM609.352 384c0.002 0 0 0 0 0 9.77 0 18.112-7.056 19.724-16.69 6.158-36.684 37.668-63.31 74.924-63.31s68.766 26.626 74.924 63.31c1.616 9.632 9.958 16.69 19.722 16.69s18.108-7.056 19.722-16.688c1.082-6.436 1.628-12.934 1.628-19.312 0-63.962-52.038-116-116-116s-116 52.038-116 116c0 6.378 0.544 12.876 1.626 19.312 1.624 9.632 9.964 16.688 19.73 16.688z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "grin", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 234, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.226 512 512 512c282.77 0 512-229.23 512-512s-229.23-512-512-512zM704 236c63.962 0 116 52.038 116 116 0 6.378-0.546 12.876-1.628 19.312-1.618 9.632-9.958 16.688-19.724 16.688s-18.108-7.056-19.722-16.69c-6.16-36.684-37.67-53.31-74.926-53.31s-68.766 16.626-74.924 53.31c-1.616 9.632-9.956 16.69-19.722 16.69-0.002 0 0 0-0.002 0-9.766 0-18.106-7.056-19.722-16.688-1.084-6.436-1.63-12.934-1.63-19.312 0-63.962 52.038-116 116-116zM320 236c63.962 0 116 52.038 116 116 0 6.378-0.548 12.876-1.628 19.312-1.618 9.632-9.956 16.688-19.724 16.688s-18.106-7.056-19.722-16.69c-6.16-36.684-37.67-53.31-74.926-53.31s-68.766 16.626-74.924 53.31c-1.616 9.632-9.956 16.69-19.722 16.69 0 0 0 0 0 0-9.766 0-18.106-7.056-19.724-16.688-1.082-6.436-1.63-12.934-1.63-19.312 0-63.962 52.038-116 116-116zM192 576h192v247.846c-110.094-28.606-192-129.124-192-247.846zM448 832v-256h128v256h-128zM640 823.846v-247.846h192c0 118.722-81.904 219.24-192 247.846z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "grin", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 235, - "paths": [ - "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM800 256c17.6 0 32 14.4 32 32v96c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64h-128c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-96c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v32h128v-32c0-17.6 14.4-32 32-32h192zM512 768c93.208 0 174.772-49.818 219.546-124.278l54.88 32.934c-55.966 93.070-157.916 155.344-274.426 155.344-48.458 0-94.384-10.796-135.54-30.082l33.162-55.278c31.354 13.714 65.964 21.36 102.378 21.36z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "cool", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 236, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.226 512 512 512c282.77 0 512-229.23 512-512s-229.23-512-512-512zM512 832c-48.458 0-94.384-10.796-135.542-30.082l33.162-55.276c31.356 13.712 65.966 21.358 102.38 21.358 93.208 0 174.772-49.818 219.542-124.278l54.882 32.934c-55.964 93.070-157.914 155.344-274.424 155.344zM832 384c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64h-128c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-96c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v32h128v-32c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "cool", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 237, - "paths": [ - "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM704.098 780.74c-39.174-65.148-110.544-108.74-192.098-108.74-81.556 0-152.924 43.592-192.098 108.74l-82.328-49.396c55.96-93.070 157.916-155.344 274.426-155.344 116.508 0 218.464 62.274 274.426 155.344l-82.328 49.396zM767.042 280.24c4.284 17.144-6.14 34.518-23.282 38.804-17.626 4.45-38.522 12.12-56.936 21.35 10.648 11.43 17.174 26.752 17.174 43.606 0 35.346-28.654 64-64 64s-64-28.654-64-64c0-1.17 0.036-2.33 0.098-3.484 2.032-47.454 45.212-78.946 81.592-97.138 34.742-17.37 69.102-26.060 70.548-26.422 17.146-4.288 34.518 6.138 38.806 23.284zM256.958 280.24c4.288-17.146 21.66-27.572 38.806-23.284 1.446 0.362 35.806 9.052 70.548 26.422 36.38 18.192 79.56 49.684 81.592 97.138 0.062 1.154 0.098 2.314 0.098 3.484 0 35.346-28.654 64-64 64s-64-28.654-64-64c0-16.854 6.526-32.176 17.174-43.606-18.414-9.23-39.31-16.9-56.936-21.35-17.142-4.286-27.566-21.66-23.282-38.804z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "angry", - "emoticon", - "smiley", - "face", - "rage" - ], - "grid": 16 - }, - { - "id": 238, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM576.094 380.516c2.032-47.454 45.21-78.948 81.592-97.138 34.742-17.372 69.104-26.060 70.548-26.422 17.146-4.288 34.52 6.138 38.806 23.284s-6.138 34.518-23.284 38.806c-17.624 4.45-38.522 12.12-56.936 21.35 10.648 11.43 17.174 26.752 17.174 43.606 0 35.346-28.654 64-64 64s-64-28.654-64-64c0.002-1.17 0.038-2.332 0.1-3.486zM256.958 280.24c4.288-17.146 21.66-27.572 38.806-23.284 1.446 0.362 35.806 9.052 70.548 26.422 36.38 18.192 79.56 49.684 81.592 97.138 0.062 1.154 0.098 2.314 0.098 3.484 0 35.346-28.654 64-64 64s-64-28.654-64-64c0-16.854 6.526-32.176 17.174-43.606-18.414-9.23-39.31-16.9-56.936-21.35-17.142-4.286-27.566-21.66-23.282-38.804zM704.098 780.74c-39.174-65.148-110.544-108.74-192.098-108.74-81.556 0-152.924 43.592-192.098 108.74l-82.328-49.396c55.96-93.070 157.916-155.344 274.426-155.344 116.508 0 218.464 62.274 274.426 155.344l-82.328 49.396z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "angry", - "emoticon", - "smiley", - "face", - "rage" - ], - "grid": 16 - }, - { - "id": 239, - "paths": [ - "M639.996 448c-35.346 0-64-28.654-63.998-64.002 0-1.17 0.036-2.33 0.098-3.484 2.032-47.454 45.212-78.946 81.592-97.138 34.742-17.37 69.102-26.060 70.548-26.422 17.146-4.288 34.518 6.138 38.806 23.284 4.284 17.146-6.14 34.518-23.284 38.806-17.626 4.45-38.522 12.12-56.936 21.35 10.648 11.43 17.174 26.752 17.174 43.606 0 35.346-28.654 64-64 64zM280.242 319.044c-17.144-4.286-27.568-21.66-23.282-38.804 4.286-17.146 21.66-27.572 38.806-23.284 1.444 0.362 35.806 9.050 70.548 26.422 36.382 18.19 79.56 49.684 81.592 97.138 0.062 1.154 0.098 2.316 0.098 3.484 0 35.346-28.654 64-64 64s-64-28.654-64-64c0-16.854 6.526-32.176 17.174-43.606-18.414-9.23-39.312-16.9-56.936-21.35zM512 736c81.554 0 152.924-43.592 192.098-108.74l82.328 49.396c-55.962 93.070-157.916 155.344-274.426 155.344s-218.464-62.274-274.426-155.344l82.328-49.396c39.174 65.148 110.542 108.74 192.098 108.74zM1024 64c0-45.516-9.524-88.8-26.652-128-33.576 76.836-96.448 137.932-174.494 169.178-86.194-65.96-193.936-105.178-310.854-105.178s-224.66 39.218-310.854 105.178c-78.048-31.246-140.918-92.342-174.494-169.178-17.128 39.2-26.652 82.484-26.652 128 0 73.574 24.85 141.328 66.588 195.378-42.37 74.542-66.588 160.75-66.588 252.622 0 282.77 229.23 512 512 512s512-229.23 512-512c0-91.872-24.218-178.080-66.588-252.622 41.738-54.050 66.588-121.804 66.588-195.378zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "evil", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 240, - "paths": [ - "M1024 64c0-45.516-9.524-88.8-26.652-128-33.576 76.836-96.448 137.932-174.494 169.178-86.194-65.96-193.936-105.178-310.854-105.178s-224.66 39.218-310.854 105.178c-78.048-31.246-140.918-92.342-174.494-169.178-17.128 39.2-26.652 82.484-26.652 128 0 73.574 24.85 141.328 66.588 195.378-42.37 74.542-66.588 160.75-66.588 252.622 0 282.77 229.23 512 512 512s512-229.23 512-512c0-91.872-24.218-178.080-66.588-252.622 41.738-54.050 66.588-121.804 66.588-195.378zM576.094 380.516c2.032-47.454 45.21-78.948 81.592-97.138 34.742-17.372 69.104-26.060 70.548-26.422 17.146-4.288 34.52 6.138 38.806 23.284s-6.138 34.518-23.284 38.806c-17.624 4.45-38.522 12.12-56.936 21.35 10.648 11.43 17.174 26.752 17.174 43.606 0 35.346-28.654 64-64 64s-64-28.654-64-64c0.002-1.17 0.038-2.332 0.1-3.486zM256.958 280.24c4.288-17.146 21.66-27.572 38.806-23.284 1.446 0.362 35.806 9.052 70.548 26.422 36.38 18.192 79.56 49.684 81.592 97.138 0.062 1.154 0.098 2.314 0.098 3.484 0 35.346-28.654 64-64 64s-64-28.654-64-64c0-16.854 6.526-32.176 17.174-43.606-18.414-9.23-39.31-16.9-56.936-21.35-17.142-4.286-27.566-21.66-23.282-38.804zM512 832c-116.51 0-218.464-62.274-274.426-155.344l82.328-49.396c39.174 65.148 110.542 108.74 192.098 108.74 81.554 0 152.924-43.592 192.098-108.74l82.328 49.396c-55.962 93.070-157.916 155.344-274.426 155.344z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "evil", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 241, - "paths": [ - "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM384 704c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128zM640 352c0-53.019 28.654-96 64-96s64 42.981 64 96c0 53.019-28.654 96-64 96s-64-42.981-64-96zM256 352c0-53.019 28.654-96 64-96s64 42.981 64 96c0 53.019-28.654 96-64 96s-64-42.981-64-96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "shocked", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 242, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM320 448c-35.346 0-64-42.98-64-96s28.654-96 64-96 64 42.98 64 96-28.654 96-64 96zM512 832c-70.692 0-128-57.308-128-128s57.308-128 128-128c70.692 0 128 57.308 128 128s-57.308 128-128 128zM704 448c-35.346 0-64-42.98-64-96s28.654-96 64-96 64 42.98 64 96-28.654 96-64 96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "shocked", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 243, - "paths": [ - "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416z", - "M384 416c0 17.673-14.327 32-32 32s-32-14.327-32-32c0-17.673 14.327-32 32-32s32 14.327 32 32z", - "M352 320c53.020 0 96 42.98 96 96s-42.98 96-96 96-96-42.98-96-96 42.98-96 96-96zM352 256c-88.224 0-160 71.776-160 160s71.776 160 160 160 160-71.776 160-160-71.776-160-160-160v0z", - "M704 416c0 17.673-14.327 32-32 32s-32-14.327-32-32c0-17.673 14.327-32 32-32s32 14.327 32 32z", - "M672 320c53.020 0 96 42.98 96 96s-42.98 96-96 96-96-42.98-96-96 42.98-96 96-96zM672 256c-88.224 0-160 71.776-160 160s71.776 160 160 160 160-71.776 160-160-71.776-160-160-160v0z", - "M384 704h256v64h-256v-64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "baffled", - "emoticon", - "smiley", - "shocked", - "face" - ], - "grid": 16 - }, - { - "id": 244, - "paths": [ - "M384 416c0 17.674-14.326 32-32 32s-32-14.326-32-32 14.326-32 32-32 32 14.326 32 32z", - "M704 416c0 17.674-14.326 32-32 32s-32-14.326-32-32 14.326-32 32-32 32 14.326 32 32z", - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM256 416c0-53.020 42.98-96 96-96s96 42.98 96 96-42.98 96-96 96-96-42.98-96-96zM640 768h-256v-64h256v64zM672 512c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "baffled", - "emoticon", - "smiley", - "shocked", - "face" - ], - "grid": 16 - }, - { - "id": 245, - "paths": [ - "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM256 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM640 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM726.106 640h64.864c9.246 72.506-32.452 144.53-103.958 170.56-82.904 30.176-174.9-12.716-205.080-95.616-18.108-49.744-73.306-75.482-123.048-57.372-45.562 16.588-70.956 64.298-60.988 110.424h-64.86c-9.242-72.508 32.45-144.528 103.956-170.56 82.904-30.178 174.902 12.716 205.082 95.614 18.104 49.748 73.306 75.482 123.044 57.372 45.562-16.584 70.956-64.298 60.988-110.422z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "confused", - "emoticon", - "smiley", - "face", - "bewildered" - ], - "grid": 16 - }, - { - "id": 246, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.226 512 512 512c282.77 0 512-229.23 512-512s-229.23-512-512-512zM704 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64c0-35.346 28.654-64 64-64zM320 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64c0-35.346 28.654-64 64-64zM687.010 810.56c-82.902 30.18-174.9-12.712-205.080-95.614-18.108-49.742-73.306-75.478-123.048-57.372-45.562 16.588-70.958 64.296-60.988 110.424h-64.86c-9.244-72.508 32.45-144.532 103.956-170.56 82.904-30.18 174.902 12.712 205.082 95.614 18.108 49.742 73.306 75.476 123.046 57.37 45.562-16.584 70.958-64.294 60.988-110.422h64.864c9.24 72.506-32.454 144.532-103.96 170.56z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "confused", - "emoticon", - "smiley", - "face", - "bewildered" - ], - "grid": 16 - }, - { - "id": 247, - "paths": [ - "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM256 320c0 35.346 28.654 64 64 64s64-28.654 64-64-28.654-64-64-64-64 28.654-64 64zM640 320c0 35.346 28.654 64 64 64s64-28.654 64-64-28.654-64-64-64-64 28.654-64 64zM384 704h256v64h-256v-64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "neutral", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 248, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.226 512 512 512c282.77 0 512-229.23 512-512s-229.23-512-512-512zM640 768h-256v-64h256v64zM704 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64c0-35.346 28.654-64 64-64zM320 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64c0-35.346 28.654-64 64-64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "neutral", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 249, - "paths": [ - "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM256 320c0-35.346 28.654-64 64-64s64 28.654 64 64-28.654 64-64 64-64-28.654-64-64zM640 320c0-35.346 28.654-64 64-64s64 28.654 64 64-28.654 64-64 64-64-28.654-64-64z", - "M675.882 540.118c-37.49-37.49-98.276-37.49-135.766 0s-37.49 98.276 0 135.766c1.204 1.204 2.434 2.368 3.684 3.492 86.528 78.512 288.2-1.842 288.2-103.376-62 40-110.45 9.786-156.118-35.882z", - "M348.118 540.118c37.49-37.49 98.276-37.49 135.766 0s37.49 98.276 0 135.766c-1.204 1.204-2.434 2.368-3.684 3.492-86.528 78.512-288.2-1.842-288.2-103.376 62 40 110.45 9.786 156.118-35.882z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "hipster", - "emoticon", - "smiley", - "mustache", - "face" - ], - "grid": 16 - }, - { - "id": 250, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM704 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64 28.654-64 64-64zM320 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64 28.654-64 64-64zM543.8 679.376c-1.25-1.124-2.48-2.29-3.684-3.492-18.74-18.74-28.112-43.3-28.118-67.864-0.004 24.562-9.376 49.124-28.118 67.864-1.204 1.204-2.434 2.368-3.684 3.492-86.524 78.512-288.196-1.842-288.196-103.376 62 40 110.45 9.786 156.118-35.882 37.49-37.49 98.276-37.49 135.766 0 18.74 18.74 28.112 43.3 28.118 67.864 0.004-24.562 9.376-49.124 28.118-67.864 37.49-37.49 98.276-37.49 135.766 0 45.664 45.668 94.114 75.882 156.114 35.882 0 101.534-201.672 181.888-288.2 103.376z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "hipster", - "emoticon", - "smiley", - "mustache", - "face" - ], - "grid": 16 - }, - { - "id": 251, - "paths": [ - "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM745.74 601.62l22.488 76.776-437.008 128.002-22.488-76.776zM256 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM640 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "wondering", - "emoticon", - "smiley", - "face", - "question" - ], - "grid": 16 - }, - { - "id": 252, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM704 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64 28.654-64 64-64zM256 320c0-35.346 28.654-64 64-64s64 28.654 64 64-28.654 64-64 64-64-28.654-64-64zM331.244 806.386l-22.488-76.774 437-128 22.488 76.774-437 128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "wondering", - "emoticon", - "smiley", - "face", - "question" - ], - "grid": 16 - }, - { - "id": 253, - "paths": [ - "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416z", - "M640 672c0 88.366-57.308 160-128.002 160s-128.002-71.634-128.002-160c0-88.366 57.308-160 128.002-160s128.002 71.634 128.002 160z", - "M416 340c-8.19 0-16.378-3.124-22.626-9.374-19.334-19.332-63.412-19.332-82.746 0-12.496 12.498-32.758 12.498-45.254 0-12.498-12.496-12.498-32.758 0-45.254 44.528-44.53 128.726-44.53 173.254 0 12.498 12.496 12.498 32.758 0 45.254-6.248 6.25-14.438 9.374-22.628 9.374z", - "M736 340c-8.19 0-16.378-3.124-22.626-9.374-19.332-19.332-63.414-19.332-82.746 0-12.496 12.498-32.758 12.498-45.254 0-12.498-12.496-12.498-32.758 0-45.254 44.528-44.53 128.726-44.53 173.254 0 12.498 12.496 12.498 32.758 0 45.254-6.248 6.25-14.438 9.374-22.628 9.374z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "sleepy", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 254, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM310.628 330.626c-12.496 12.498-32.758 12.498-45.254 0-12.498-12.496-12.498-32.758 0-45.254 44.528-44.53 128.726-44.53 173.254 0 12.498 12.496 12.498 32.758 0 45.254-6.248 6.25-14.438 9.374-22.628 9.374s-16.378-3.124-22.626-9.374c-19.334-19.332-63.412-19.332-82.746 0zM511.998 832c-70.694 0-128.002-71.634-128.002-160s57.308-160 128.002-160 128.002 71.634 128.002 160-57.308 160-128.002 160zM758.628 330.626c-6.248 6.25-14.438 9.374-22.628 9.374s-16.378-3.124-22.626-9.374c-19.332-19.332-63.414-19.332-82.746 0-12.496 12.498-32.758 12.498-45.254 0-12.498-12.496-12.498-32.758 0-45.254 44.528-44.53 128.726-44.53 173.254 0 12.498 12.498 12.498 32.758 0 45.254z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "sleepy", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 255, - "paths": [ - "M366.312 283.378c-34.742-17.37-69.102-26.060-70.548-26.422-17.146-4.288-34.518 6.138-38.806 23.284-4.284 17.144 6.14 34.518 23.282 38.804 17.626 4.45 38.522 12.12 56.936 21.35-10.648 11.43-17.174 26.752-17.174 43.606 0 35.346 28.654 64 64 64s64-28.654 64-64c0-1.17-0.036-2.33-0.098-3.484-2.032-47.454-45.212-78.946-81.592-97.138z", - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM236.498 823.664c10.706 5.324 22.756 8.336 35.502 8.336h480c12.746 0 24.796-3.012 35.502-8.338-73.378 64.914-169.828 104.338-275.502 104.338-105.672 0-202.124-39.424-275.502-104.336zM256 752v-96c0-8.674 7.328-16 16-16h112v128h-112c-8.672 0-16-7.326-16-16zM448 768v-128h128v128h-128zM640 768v-128h112c8.674 0 16 7.326 16 16v96c0 8.674-7.326 16-16 16h-112zM823.662 787.502c5.326-10.706 8.338-22.756 8.338-35.502v-96c0-44.112-35.888-80-80-80h-480c-44.112 0-80 35.888-80 80v96c0 12.746 3.012 24.796 8.336 35.502-64.912-73.378-104.336-169.828-104.336-275.502 0-229.75 186.25-416 416-416s416 186.25 416 416c0 105.674-39.424 202.124-104.338 275.502z", - "M728.236 256.956c-1.448 0.362-35.806 9.052-70.548 26.422-36.378 18.192-79.558 49.684-81.592 97.138-0.060 1.154-0.098 2.314-0.098 3.484 0 35.346 28.654 64 64 64s64-28.654 64-64c0-16.854-6.526-32.176-17.174-43.606 18.414-9.23 39.31-16.9 56.936-21.35 17.142-4.286 27.566-21.66 23.284-38.804-4.29-17.146-21.662-27.572-38.808-23.284z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "frustrated", - "emoticon", - "smiley", - "face", - "angry" - ], - "grid": 16 - }, - { - "id": 256, - "paths": [ - "M256 656v96c0 8.674 7.328 16 16 16h112v-128h-112c-8.672 0-16 7.326-16 16z", - "M448 640h128v128h-128v-128z", - "M752 640h-112v128h112c8.674 0 16-7.326 16-16v-96c0-8.674-7.326-16-16-16z", - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM576.096 380.516c2.034-47.454 45.212-78.946 81.592-97.138 34.742-17.37 69.102-26.060 70.548-26.422 17.146-4.288 34.518 6.138 38.806 23.284 4.284 17.144-6.14 34.518-23.284 38.804-17.624 4.45-38.522 12.12-56.936 21.35 10.648 11.43 17.174 26.752 17.174 43.606 0 35.346-28.654 64-64 64s-64-28.654-64-64c0.002-1.17 0.040-2.33 0.1-3.484zM256.958 280.24c4.288-17.146 21.66-27.572 38.806-23.284 1.446 0.362 35.806 9.052 70.548 26.422 36.38 18.192 79.56 49.684 81.592 97.138 0.062 1.154 0.098 2.314 0.098 3.484 0 35.346-28.654 64-64 64s-64-28.654-64-64c0-16.854 6.526-32.176 17.174-43.606-18.414-9.23-39.31-16.9-56.936-21.35-17.142-4.286-27.566-21.66-23.282-38.804zM832 752c0 44.112-35.888 80-80 80h-480c-44.112 0-80-35.888-80-80v-96c0-44.112 35.888-80 80-80h480c44.112 0 80 35.888 80 80v96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "frustrated", - "emoticon", - "smiley", - "face", - "angry" - ], - "grid": 16 - }, - { - "id": 257, - "paths": [ - "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416z", - "M800 384h-128c-17.674 0-32-14.328-32-32s14.326-32 32-32h128c17.674 0 32 14.328 32 32s-14.326 32-32 32z", - "M352 384h-128c-17.672 0-32-14.328-32-32s14.328-32 32-32h128c17.672 0 32 14.328 32 32s-14.328 32-32 32z", - "M608 856c-8.19 0-16.378-3.124-22.626-9.374-4.582-4.582-29.42-14.626-73.374-14.626s-68.79 10.044-73.374 14.626c-12.496 12.496-32.758 12.496-45.254 0-12.498-12.496-12.498-32.758 0-45.254 30.122-30.12 92.994-33.372 118.628-33.372 25.632 0 88.506 3.252 118.626 33.374 12.498 12.496 12.498 32.758 0 45.254-6.248 6.248-14.436 9.372-22.626 9.372z", - "M736 576c-17.674 0-32-14.326-32-32v-64c0-17.672 14.326-32 32-32s32 14.328 32 32v64c0 17.674-14.326 32-32 32z", - "M736 768c-17.674 0-32-14.326-32-32v-64c0-17.674 14.326-32 32-32s32 14.326 32 32v64c0 17.674-14.326 32-32 32z", - "M288 576c-17.672 0-32-14.326-32-32v-64c0-17.672 14.328-32 32-32s32 14.328 32 32v64c0 17.674-14.328 32-32 32z", - "M288 768c-17.672 0-32-14.326-32-32v-64c0-17.674 14.328-32 32-32s32 14.326 32 32v64c0 17.674-14.328 32-32 32z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "crying", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 258, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM320 736c0 17.674-14.328 32-32 32s-32-14.326-32-32v-64c0-17.674 14.328-32 32-32s32 14.326 32 32v64zM320 544c0 17.674-14.328 32-32 32s-32-14.326-32-32v-64c0-17.672 14.328-32 32-32s32 14.328 32 32v64zM352 384h-128c-17.672 0-32-14.328-32-32s14.328-32 32-32h128c17.672 0 32 14.328 32 32s-14.328 32-32 32zM630.626 846.626c-6.248 6.25-14.436 9.374-22.626 9.374s-16.378-3.124-22.626-9.374c-4.582-4.582-29.42-14.626-73.374-14.626s-68.79 10.044-73.374 14.626c-12.496 12.496-32.758 12.496-45.254 0-12.498-12.496-12.498-32.758 0-45.254 30.122-30.12 92.994-33.372 118.628-33.372 25.632 0 88.506 3.252 118.626 33.374 12.498 12.496 12.498 32.756 0 45.252zM768 736c0 17.674-14.326 32-32 32s-32-14.326-32-32v-64c0-17.674 14.326-32 32-32s32 14.326 32 32v64zM768 544c0 17.674-14.326 32-32 32s-32-14.326-32-32v-64c0-17.672 14.326-32 32-32s32 14.328 32 32v64zM800 384h-128c-17.674 0-32-14.328-32-32s14.326-32 32-32h128c17.674 0 32 14.328 32 32s-14.326 32-32 32z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "crying", - "emoticon", - "smiley", - "face" - ], - "grid": 16 - }, - { - "id": 259, - "paths": [ - "M960 608v-160c0-52.934-43.066-96-96-96-17.104 0-33.176 4.494-47.098 12.368-17.076-26.664-46.958-44.368-80.902-44.368-24.564 0-47.004 9.274-64 24.504-16.996-15.23-39.436-24.504-64-24.504-11.214 0-21.986 1.934-32 5.484v-229.484c0-52.934-43.066-96-96-96s-96 43.066-96 96v394.676l-176.018-93.836c-14.536-8.4-31.126-12.84-47.982-12.84-52.934 0-96 43.066-96 96 0 26.368 10.472 50.954 29.49 69.226 0.248 0.238 0.496 0.47 0.75 0.7l239.17 218.074h-45.41c-17.672 0-32 14.326-32 32v192c0 17.674 14.328 32 32 32h640c17.674 0 32-14.326 32-32v-192c0-17.674-14.326-32-32-32h-44.222l72.844-145.69c2.222-4.442 3.378-9.342 3.378-14.31zM896 864c0 17.674-14.326 32-32 32s-32-14.326-32-32 14.326-32 32-32 32 14.326 32 32zM896 600.446l-83.776 167.554h-383.826l-290.818-265.166c-6.18-6.070-9.58-14.164-9.58-22.834 0-17.644 14.356-32 32-32 5.46 0 10.612 1.31 15.324 3.894 0.53 0.324 1.070 0.632 1.622 0.926l224 119.416c9.92 5.288 21.884 4.986 31.52-0.8 9.638-5.782 15.534-16.196 15.534-27.436v-448c0-17.644 14.356-32 32-32s32 14.356 32 32v320c0 17.672 14.326 32 32 32s32-14.328 32-32c0-17.644 14.356-32 32-32s32 14.356 32 32c0 17.672 14.326 32 32 32s32-14.328 32-32c0-17.644 14.356-32 32-32s32 14.356 32 32v32c0 17.672 14.326 32 32 32s32-14.328 32-32c0-17.644 14.356-32 32-32s32 14.356 32 32v152.446z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "point-up", - "finger", - "direction", - "hand" - ], - "grid": 16 - }, - { - "id": 260, - "paths": [ - "M416 960h160c52.934 0 96-43.066 96-96 0-17.104-4.494-33.176-12.368-47.098 26.664-17.076 44.368-46.958 44.368-80.902 0-24.564-9.276-47.004-24.504-64 15.228-16.996 24.504-39.436 24.504-64 0-11.214-1.934-21.986-5.484-32h229.484c52.934 0 96-43.066 96-96s-43.066-96-96-96h-394.676l93.836-176.018c8.4-14.536 12.84-31.126 12.84-47.982 0-52.934-43.066-96-96-96-26.368 0-50.954 10.472-69.226 29.49-0.238 0.248-0.47 0.496-0.7 0.75l-218.074 239.17v-45.41c0-17.672-14.326-32-32-32h-192c-17.674 0-32 14.328-32 32v640c0 17.674 14.326 32 32 32h192c17.674 0 32-14.326 32-32v-44.222l145.69 72.844c4.444 2.222 9.342 3.378 14.31 3.378zM160 896c-17.674 0-32-14.326-32-32s14.326-32 32-32 32 14.326 32 32-14.326 32-32 32zM423.556 896l-167.556-83.778v-383.824l265.168-290.818c6.066-6.18 14.162-9.58 22.832-9.58 17.644 0 32 14.356 32 32 0 5.46-1.308 10.612-3.894 15.324-0.324 0.53-0.632 1.070-0.926 1.622l-119.418 224c-5.288 9.92-4.986 21.884 0.8 31.52 5.784 9.638 16.198 15.534 27.438 15.534h448c17.644 0 32 14.356 32 32s-14.356 32-32 32h-320c-17.672 0-32 14.326-32 32s14.328 32 32 32c17.644 0 32 14.356 32 32s-14.356 32-32 32c-17.674 0-32 14.326-32 32s14.326 32 32 32c17.644 0 32 14.356 32 32s-14.356 32-32 32h-32c-17.674 0-32 14.326-32 32s14.326 32 32 32c17.644 0 32 14.356 32 32s-14.356 32-32 32h-152.444z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "point-right", - "finger", - "direction", - "hand" - ], - "grid": 16 - }, - { - "id": 261, - "paths": [ - "M960 416v160c0 52.934-43.066 96-96 96-17.104 0-33.176-4.494-47.098-12.368-17.076 26.662-46.96 44.368-80.902 44.368-24.564 0-47.004-9.276-64-24.504-16.996 15.228-39.436 24.504-64 24.504-11.214 0-21.986-1.934-32-5.484v229.484c0 52.934-43.066 96-96 96-52.936 0-96-43.066-96-96v-394.676l-176.018 93.836c-14.538 8.398-31.126 12.84-47.982 12.84-52.936 0-96-43.066-96-96 0-26.368 10.472-50.952 29.488-69.226 0.248-0.238 0.496-0.47 0.75-0.7l239.17-218.074h-45.408c-17.674 0-32-14.326-32-32v-192c0-17.674 14.326-32 32-32h640c17.674 0 32 14.326 32 32v192c0 17.674-14.326 32-32 32h-44.222l72.842 145.69c2.224 4.442 3.38 9.342 3.38 14.31zM896 160c0-17.674-14.326-32-32-32s-32 14.326-32 32 14.326 32 32 32 32-14.326 32-32zM896 423.554l-83.778-167.554h-383.824l-290.82 265.168c-6.18 6.066-9.578 14.162-9.578 22.832 0 17.644 14.356 32 32 32 5.458 0 10.612-1.308 15.324-3.894 0.53-0.324 1.070-0.632 1.622-0.926l224-119.416c9.92-5.288 21.884-4.986 31.52 0.8 9.638 5.782 15.534 16.196 15.534 27.436v448c0 17.644 14.356 32 32 32s32-14.356 32-32v-320c0-17.672 14.326-32 32-32s32 14.328 32 32c0 17.644 14.356 32 32 32s32-14.356 32-32c0-17.674 14.326-32 32-32s32 14.326 32 32c0 17.644 14.356 32 32 32s32-14.356 32-32v-32c0-17.674 14.326-32 32-32s32 14.326 32 32c0 17.644 14.356 32 32 32s32-14.356 32-32v-152.446z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "point-down", - "finger", - "direction", - "hand" - ], - "grid": 16 - }, - { - "id": 262, - "paths": [ - "M608 960h-160c-52.934 0-96-43.066-96-96 0-17.104 4.494-33.176 12.368-47.098-26.662-17.076-44.368-46.958-44.368-80.902 0-24.564 9.276-47.004 24.504-64-15.228-16.996-24.504-39.436-24.504-64 0-11.214 1.934-21.986 5.484-32h-229.484c-52.934 0-96-43.066-96-96 0-52.936 43.066-96 96-96h394.676l-93.836-176.018c-8.398-14.536-12.84-31.126-12.84-47.982 0-52.936 43.066-96 96-96 26.368 0 50.952 10.472 69.224 29.488 0.238 0.248 0.472 0.496 0.7 0.75l218.076 239.17v-45.408c0-17.674 14.326-32 32-32h192c17.674 0 32 14.326 32 32v640c0 17.674-14.326 32-32 32h-192c-17.674 0-32-14.326-32-32v-44.222l-145.69 72.844c-4.442 2.222-9.34 3.378-14.31 3.378zM864 896c17.674 0 32-14.326 32-32s-14.326-32-32-32-32 14.326-32 32 14.326 32 32 32zM600.446 896l167.554-83.778v-383.824l-265.168-290.82c-6.066-6.18-14.162-9.578-22.832-9.578-17.644 0-32 14.356-32 32 0 5.458 1.308 10.612 3.894 15.324 0.324 0.53 0.632 1.070 0.926 1.622l119.416 224c5.29 9.92 4.988 21.884-0.798 31.52-5.784 9.638-16.198 15.534-27.438 15.534h-448c-17.644 0-32 14.356-32 32s14.356 32 32 32h320c17.672 0 32 14.326 32 32s-14.328 32-32 32c-17.644 0-32 14.356-32 32s14.356 32 32 32c17.674 0 32 14.326 32 32s-14.326 32-32 32c-17.644 0-32 14.356-32 32s14.356 32 32 32h32c17.674 0 32 14.326 32 32s-14.326 32-32 32c-17.644 0-32 14.356-32 32s14.356 32 32 32h152.446z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "point-left", - "finger", - "direction", - "hand" - ], - "grid": 16 - }, - { - "id": 263, - "paths": [ - "M512 92.774l429.102 855.226h-858.206l429.104-855.226zM512 0c-22.070 0-44.14 14.882-60.884 44.648l-437.074 871.112c-33.486 59.532-5 108.24 63.304 108.24h869.308c68.3 0 96.792-48.708 63.3-108.24h0.002l-437.074-871.112c-16.742-29.766-38.812-44.648-60.882-44.648v0z", - "M576 832c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64z", - "M512 704c-35.346 0-64-28.654-64-64v-192c0-35.346 28.654-64 64-64s64 28.654 64 64v192c0 35.346-28.654 64-64 64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "warning", - "sign" - ], - "grid": 16 - }, - { - "id": 264, - "paths": [ - "M512 96c-111.118 0-215.584 43.272-294.156 121.844s-121.844 183.038-121.844 294.156c0 111.118 43.272 215.584 121.844 294.156s183.038 121.844 294.156 121.844c111.118 0 215.584-43.272 294.156-121.844s121.844-183.038 121.844-294.156c0-111.118-43.272-215.584-121.844-294.156s-183.038-121.844-294.156-121.844zM512 0v0c282.77 0 512 229.23 512 512s-229.23 512-512 512c-282.77 0-512-229.23-512-512s229.23-512 512-512zM448 704h128v128h-128zM448 192h128v384h-128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "notification", - "warning", - "notice", - "note", - "exclamation" - ], - "grid": 16 - }, - { - "id": 265, - "paths": [ - "M448 704h128v128h-128zM704 256c35.346 0 64 28.654 64 64v192l-192 128h-128v-64l192-128v-64h-320v-128h384zM512 96c-111.118 0-215.584 43.272-294.156 121.844s-121.844 183.038-121.844 294.156c0 111.118 43.272 215.584 121.844 294.156s183.038 121.844 294.156 121.844c111.118 0 215.584-43.272 294.156-121.844s121.844-183.038 121.844-294.156c0-111.118-43.272-215.584-121.844-294.156s-183.038-121.844-294.156-121.844zM512 0v0c282.77 0 512 229.23 512 512s-229.23 512-512 512c-282.77 0-512-229.23-512-512s229.23-512 512-512z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "question", - "help", - "support" - ], - "grid": 16 - }, - { - "id": 266, - "paths": [ - "M992 384h-352v-352c0-17.672-14.328-32-32-32h-192c-17.672 0-32 14.328-32 32v352h-352c-17.672 0-32 14.328-32 32v192c0 17.672 14.328 32 32 32h352v352c0 17.672 14.328 32 32 32h192c17.672 0 32-14.328 32-32v-352h352c17.672 0 32-14.328 32-32v-192c0-17.672-14.328-32-32-32z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "plus", - "add", - "sum" - ], - "grid": 16 - }, - { - "id": 267, - "paths": [ - "M0 416v192c0 17.672 14.328 32 32 32h960c17.672 0 32-14.328 32-32v-192c0-17.672-14.328-32-32-32h-960c-17.672 0-32 14.328-32 32z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "minus", - "subtract", - "minimize", - "line" - ], - "grid": 16 - }, - { - "id": 268, - "paths": [ - "M448 304c0-26.4 21.6-48 48-48h32c26.4 0 48 21.6 48 48v32c0 26.4-21.6 48-48 48h-32c-26.4 0-48-21.6-48-48v-32z", - "M640 768h-256v-64h64v-192h-64v-64h192v256h64z", - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "info", - "information" - ], - "grid": 16 - }, - { - "id": 269, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416z", - "M672 256l-160 160-160-160-96 96 160 160-160 160 96 96 160-160 160 160 96-96-160-160 160-160z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "cancel-circle", - "close", - "remove", - "delete" - ], - "grid": 16 - }, - { - "id": 270, - "paths": [ - "M874.040 149.96c-96.706-96.702-225.28-149.96-362.040-149.96s-265.334 53.258-362.040 149.96c-96.702 96.706-149.96 225.28-149.96 362.040s53.258 265.334 149.96 362.040c96.706 96.702 225.28 149.96 362.040 149.96s265.334-53.258 362.040-149.96c96.702-96.706 149.96-225.28 149.96-362.040s-53.258-265.334-149.96-362.040zM896 512c0 82.814-26.354 159.588-71.112 222.38l-535.266-535.268c62.792-44.758 139.564-71.112 222.378-71.112 211.738 0 384 172.262 384 384zM128 512c0-82.814 26.354-159.586 71.112-222.378l535.27 535.268c-62.794 44.756-139.568 71.11-222.382 71.11-211.738 0-384-172.262-384-384z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "blocked", - "forbidden", - "denied", - "banned" - ], - "grid": 16 - }, - { - "id": 271, - "paths": [ - "M1014.662 822.66c-0.004-0.004-0.008-0.008-0.012-0.010l-310.644-310.65 310.644-310.65c0.004-0.004 0.008-0.006 0.012-0.010 3.344-3.346 5.762-7.254 7.312-11.416 4.246-11.376 1.824-24.682-7.324-33.83l-146.746-146.746c-9.148-9.146-22.45-11.566-33.828-7.32-4.16 1.55-8.070 3.968-11.418 7.31 0 0.004-0.004 0.006-0.008 0.010l-310.648 310.652-310.648-310.65c-0.004-0.004-0.006-0.006-0.010-0.010-3.346-3.342-7.254-5.76-11.414-7.31-11.38-4.248-24.682-1.826-33.83 7.32l-146.748 146.748c-9.148 9.148-11.568 22.452-7.322 33.828 1.552 4.16 3.97 8.072 7.312 11.416 0.004 0.002 0.006 0.006 0.010 0.010l310.65 310.648-310.65 310.652c-0.002 0.004-0.006 0.006-0.008 0.010-3.342 3.346-5.76 7.254-7.314 11.414-4.248 11.376-1.826 24.682 7.322 33.83l146.748 146.746c9.15 9.148 22.452 11.568 33.83 7.322 4.16-1.552 8.070-3.97 11.416-7.312 0.002-0.004 0.006-0.006 0.010-0.010l310.648-310.65 310.648 310.65c0.004 0.002 0.008 0.006 0.012 0.008 3.348 3.344 7.254 5.762 11.414 7.314 11.378 4.246 24.684 1.826 33.828-7.322l146.746-146.748c9.148-9.148 11.57-22.454 7.324-33.83-1.552-4.16-3.97-8.068-7.314-11.414z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "cross", - "cancel", - "close", - "quit", - "remove" - ], - "grid": 16 - }, - { - "id": 272, - "paths": [ - "M864 128l-480 480-224-224-160 160 384 384 640-640z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "checkmark", - "tick", - "correct", - "accept", - "ok" - ], - "grid": 16 - }, - { - "id": 273, - "paths": [ - "M397.434 917.696l-397.868-391.6 197.378-194.27 200.49 197.332 429.62-422.852 197.378 194.27-626.998 617.12zM107.912 526.096l289.524 284.962 518.656-510.482-89.036-87.632-429.62 422.852-200.49-197.334-89.034 87.634z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "checkmark", - "tick", - "correct", - "accept", - "ok" - ], - "grid": 16 - }, - { - "id": 274, - "paths": [ - "M128 256h128v192h64v-384c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v384h64v-192zM128 64h128v128h-128v-128zM960 64v-64h-192c-35.202 0-64 28.8-64 64v320c0 35.2 28.798 64 64 64h192v-64h-192v-320h192zM640 160v-96c0-35.2-28.8-64-64-64h-192v448h192c35.2 0 64-28.8 64-64v-96c0-35.2-8.8-64-44-64 35.2 0 44-28.8 44-64zM576 384h-128v-128h128v128zM576 192h-128v-128h128v128zM832 576l-416 448-224-288 82-70 142 148 352-302z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "spell-check", - "spelling", - "correct" - ], - "grid": 16 - }, - { - "id": 275, - "paths": [ - "M384 512h-320v-128h320v-128l192 192-192 192zM1024 0v832l-384 192v-192h-384v-256h64v192h320v-576l256-128h-576v256h-64v-320z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "enter", - "signin", - "login" - ], - "grid": 16 - }, - { - "id": 276, - "paths": [ - "M768 640v-128h-320v-128h320v-128l192 192zM704 576v256h-320v192l-384-192v-832h704v320h-64v-256h-512l256 128v576h256v-192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "exit", - "signout", - "logout", - "quit", - "close" - ], - "grid": 16 - }, - { - "id": 277, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416zM384 288l384 224-384 224z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "play", - "player" - ], - "grid": 16 - }, - { - "id": 278, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416zM320 320h128v384h-128zM576 320h128v384h-128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "pause", - "player" - ], - "grid": 16 - }, - { - "id": 279, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416zM320 320h384v384h-384z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "stop", - "player" - ], - "grid": 16 - }, - { - "id": 280, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416z", - "M448 512l256-192v384z", - "M320 320h128v384h-128v-384z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "previous", - "player" - ], - "grid": 16 - }, - { - "id": 281, - "paths": [ - "M512 0c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 928c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416z", - "M576 512l-256-192v384z", - "M704 320h-128v384h128v-384z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "next", - "player" - ], - "grid": 16 - }, - { - "id": 282, - "paths": [ - "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM704 672l-224-160 224-160zM448 672l-224-160 224-160z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "backward", - "player" - ], - "grid": 16 - }, - { - "id": 283, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416zM320 352l224 160-224 160zM576 352l224 160-224 160z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "forward", - "player" - ], - "grid": 16 - }, - { - "id": 284, - "paths": [ - "M192 128l640 384-640 384z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "play", - "player" - ], - "grid": 16 - }, - { - "id": 285, - "paths": [ - "M128 128h320v768h-320zM576 128h320v768h-320z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "pause", - "player" - ], - "grid": 16 - }, - { - "id": 286, - "paths": [ - "M128 128h768v768h-768z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "stop", - "player", - "square" - ], - "grid": 16 - }, - { - "id": 287, - "paths": [ - "M576 160v320l320-320v704l-320-320v320l-352-352z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "backward", - "player" - ], - "grid": 16 - }, - { - "id": 288, - "paths": [ - "M512 864v-320l-320 320v-704l320 320v-320l352 352z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "forward", - "player" - ], - "grid": 16 - }, - { - "id": 289, - "paths": [ - "M128 896v-768h128v352l320-320v320l320-320v704l-320-320v320l-320-320v352z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "first", - "player" - ], - "grid": 16 - }, - { - "id": 290, - "paths": [ - "M896 128v768h-128v-352l-320 320v-320l-320 320v-704l320 320v-320l320 320v-352z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "last", - "player" - ], - "grid": 16 - }, - { - "id": 291, - "paths": [ - "M256 896v-768h128v352l320-320v704l-320-320v352z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "previous", - "player" - ], - "grid": 16 - }, - { - "id": 292, - "paths": [ - "M768 128v768h-128v-352l-320 320v-704l320 320v-352z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "next", - "player" - ], - "grid": 16 - }, - { - "id": 293, - "paths": [ - "M0 768h1024v128h-1024zM512 128l512 512h-1024z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "eject", - "player" - ], - "grid": 16 - }, - { - "id": 294, - "paths": [ - "M890.040 922.040c-12.286 0-24.566-4.686-33.942-14.056-18.744-18.746-18.744-49.136 0-67.882 87.638-87.642 135.904-204.16 135.904-328.1 0-123.938-48.266-240.458-135.904-328.098-18.744-18.746-18.744-49.138 0-67.882s49.138-18.744 67.882 0c105.77 105.772 164.022 246.4 164.022 395.98s-58.252 290.208-164.022 395.98c-9.372 9.372-21.656 14.058-33.94 14.058zM719.53 831.53c-12.286 0-24.566-4.686-33.942-14.056-18.744-18.744-18.744-49.136 0-67.882 131.006-131.006 131.006-344.17 0-475.176-18.744-18.746-18.744-49.138 0-67.882 18.744-18.742 49.138-18.744 67.882 0 81.594 81.59 126.53 190.074 126.53 305.466 0 115.39-44.936 223.876-126.53 305.47-9.372 9.374-21.656 14.060-33.94 14.060v0zM549.020 741.020c-12.286 0-24.568-4.686-33.942-14.058-18.746-18.746-18.746-49.134 0-67.88 81.1-81.1 81.1-213.058 0-294.156-18.746-18.746-18.746-49.138 0-67.882s49.136-18.744 67.882 0c118.53 118.53 118.53 311.392 0 429.922-9.372 9.368-21.656 14.054-33.94 14.054z", - "M416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z" - ], - "width": 1088, - "attrs": [], - "isMulticolor": false, - "tags": [ - "volume-high", - "volume", - "audio", - "speaker", - "player" - ], - "grid": 16 - }, - { - "id": 295, - "paths": [ - "M719.53 831.53c-12.286 0-24.566-4.686-33.942-14.056-18.744-18.744-18.744-49.136 0-67.882 131.006-131.006 131.006-344.17 0-475.176-18.744-18.746-18.744-49.138 0-67.882 18.744-18.742 49.138-18.744 67.882 0 81.594 81.59 126.53 190.074 126.53 305.466 0 115.39-44.936 223.876-126.53 305.47-9.372 9.374-21.656 14.060-33.94 14.060v0zM549.020 741.020c-12.286 0-24.566-4.686-33.942-14.058-18.746-18.746-18.746-49.134 0-67.88 81.1-81.1 81.1-213.058 0-294.156-18.746-18.746-18.746-49.138 0-67.882s49.136-18.744 67.882 0c118.53 118.53 118.53 311.392 0 429.922-9.372 9.368-21.656 14.054-33.94 14.054z", - "M416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "volume-medium", - "volume", - "audio", - "speaker", - "player" - ], - "grid": 16 - }, - { - "id": 296, - "paths": [ - "M549.020 741.020c-12.286 0-24.566-4.686-33.942-14.058-18.746-18.746-18.746-49.134 0-67.88 81.1-81.1 81.1-213.058 0-294.156-18.746-18.746-18.746-49.138 0-67.882s49.136-18.744 67.882 0c118.53 118.53 118.53 311.392 0 429.922-9.372 9.368-21.656 14.054-33.94 14.054z", - "M416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "volume-low", - "volume", - "audio", - "speaker", - "player" - ], - "grid": 16 - }, - { - "id": 297, - "paths": [ - "M416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "volume-mute", - "volume", - "audio", - "speaker", - "player" - ], - "grid": 16 - }, - { - "id": 298, - "paths": [ - "M960 619.148v84.852h-84.852l-107.148-107.148-107.148 107.148h-84.852v-84.852l107.148-107.148-107.148-107.148v-84.852h84.852l107.148 107.148 107.148-107.148h84.852v84.852l-107.148 107.148 107.148 107.148z", - "M416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "volume-mute", - "volume", - "audio", - "player" - ], - "grid": 16 - }, - { - "id": 299, - "paths": [ - "M1024 576h-192v192h-128v-192h-192v-128h192v-192h128v192h192v128z", - "M416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "volume-increase", - "volume", - "audio", - "speaker", - "player" - ], - "grid": 16 - }, - { - "id": 300, - "paths": [ - "M512 448h512v128h-512v-128z", - "M416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "volume-decrease", - "volume", - "audio", - "speaker", - "player" - ], - "grid": 16 - }, - { - "id": 301, - "paths": [ - "M128 320h640v192l256-256-256-256v192h-768v384h128zM896 704h-640v-192l-256 256 256 256v-192h768v-384h-128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "loop", - "repeat", - "player" - ], - "grid": 16 - }, - { - "id": 302, - "paths": [ - "M889.68 166.32c-93.608-102.216-228.154-166.32-377.68-166.32-282.77 0-512 229.23-512 512h96c0-229.75 186.25-416 416-416 123.020 0 233.542 53.418 309.696 138.306l-149.696 149.694h352v-352l-134.32 134.32z", - "M928 512c0 229.75-186.25 416-416 416-123.020 0-233.542-53.418-309.694-138.306l149.694-149.694h-352v352l134.32-134.32c93.608 102.216 228.154 166.32 377.68 166.32 282.77 0 512-229.23 512-512h-96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "loop", - "repeat", - "player", - "reload", - "refresh", - "update", - "synchronize", - "arrows" - ], - "grid": 16 - }, - { - "id": 303, - "paths": [ - "M783.988 752.012c-64.104 0-124.372-24.96-169.7-70.288l-102.288-102.282-102.276 102.27c-45.332 45.336-105.6 70.3-169.706 70.3-64.118 0-124.39-24.964-169.722-70.3-45.332-45.334-70.296-105.604-70.296-169.712s24.964-124.38 70.296-169.714c45.334-45.332 105.608-70.296 169.714-70.296 64.108 0 124.38 24.964 169.712 70.296l102.278 102.276 102.276-102.276c45.332-45.332 105.604-70.298 169.712-70.298 64.112 0 124.384 24.966 169.71 70.298 45.338 45.334 70.302 105.606 70.302 169.714 0 64.112-24.964 124.382-70.3 169.71-45.326 45.336-105.598 70.302-169.712 70.302zM681.72 614.288c27.322 27.31 63.64 42.354 102.268 42.352 38.634 0 74.958-15.044 102.276-42.362 27.316-27.322 42.364-63.644 42.364-102.278s-15.046-74.956-42.364-102.274c-27.32-27.318-63.64-42.364-102.276-42.364-38.632 0-74.956 15.044-102.278 42.364l-102.268 102.274 102.278 102.288zM240.012 367.362c-38.634 0-74.956 15.044-102.274 42.364-27.32 27.318-42.364 63.64-42.364 102.274 0 38.632 15.044 74.954 42.364 102.276 27.32 27.316 63.642 42.364 102.274 42.364 38.634 0 74.956-15.044 102.272-42.362l102.276-102.278-102.276-102.274c-27.318-27.32-63.64-42.366-102.272-42.364v0z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "infinite" - ], - "grid": 16 - }, - { - "id": 304, - "paths": [ - "M768 704h-101.49l-160-160 160-160h101.49v160l224-224-224-224v160h-128c-16.974 0-33.252 6.744-45.254 18.746l-178.746 178.744-178.746-178.746c-12-12-28.28-18.744-45.254-18.744h-192v128h165.49l160 160-160 160h-165.49v128h192c16.974 0 33.252-6.742 45.254-18.746l178.746-178.744 178.746 178.744c12.002 12.004 28.28 18.746 45.254 18.746h128v160l224-224-224-224v160z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "shuffle", - "random", - "player" - ], - "grid": 16 - }, - { - "id": 305, - "paths": [ - "M0 736l256-256 544 544 224-224-544-544 255.998-256h-735.998v736z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrow-up-left", - "up-left", - "arrow-top-left" - ], - "grid": 16 - }, - { - "id": 306, - "paths": [ - "M512 32l-480 480h288v512h384v-512h288z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrow-up", - "up", - "upload", - "top" - ], - "grid": 16 - }, - { - "id": 307, - "paths": [ - "M288 0l256 256-544 544 224 224 544-544 256 255.998v-735.998h-736z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrow-up-right", - "up-right", - "arrow-top-right" - ], - "grid": 16 - }, - { - "id": 308, - "paths": [ - "M992 512l-480-480v288h-512v384h512v288z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrow-right", - "right", - "next" - ], - "grid": 16 - }, - { - "id": 309, - "paths": [ - "M1024 288l-256 256-544-544-224 224 544 544-255.998 256h735.998v-736z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrow-down-right", - "down-right", - "arrow-bottom-right" - ], - "grid": 16 - }, - { - "id": 310, - "paths": [ - "M512 992l480-480h-288v-512h-384v512h-288z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrow-down", - "down", - "download", - "bottom" - ], - "grid": 16 - }, - { - "id": 311, - "paths": [ - "M736 1024l-256-256 544-544-224-224-544 544-256-255.998v735.998h736z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrow-down-left", - "down-left", - "arrow-bottom-left" - ], - "grid": 16 - }, - { - "id": 312, - "paths": [ - "M32 512l480 480v-288h512v-384h-512v-288z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrow-left", - "left", - "previous" - ], - "grid": 16 - }, - { - "id": 313, - "paths": [ - "M877.254 786.746l-530.744-530.746h229.49c35.346 0 64-28.654 64-64s-28.654-64-64-64h-384c-25.886 0-49.222 15.592-59.128 39.508-3.282 7.924-4.84 16.242-4.838 24.492h-0.034v384c0 35.346 28.654 64 64 64s64-28.654 64-64v-229.49l530.746 530.744c12.496 12.498 28.876 18.746 45.254 18.746s32.758-6.248 45.254-18.746c24.994-24.992 24.994-65.516 0-90.508z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrow-up-left", - "up-left", - "arrow-top-left" - ], - "grid": 16 - }, - { - "id": 314, - "paths": [ - "M877.254 402.746l-320-320c-24.992-24.994-65.514-24.994-90.508 0l-320 320c-24.994 24.994-24.994 65.516 0 90.51 24.994 24.996 65.516 24.996 90.51 0l210.744-210.746v613.49c0 35.346 28.654 64 64 64s64-28.654 64-64v-613.49l210.746 210.746c12.496 12.496 28.876 18.744 45.254 18.744s32.758-6.248 45.254-18.746c24.994-24.994 24.994-65.514 0-90.508z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrow-up", - "up", - "upload", - "top" - ], - "grid": 16 - }, - { - "id": 315, - "paths": [ - "M237.254 877.254l530.746-530.744v229.49c0 35.346 28.654 64 64 64s64-28.654 64-64v-384c0-25.884-15.594-49.222-39.508-59.126-7.924-3.284-16.242-4.84-24.492-4.838v-0.036h-384c-35.346 0-64 28.654-64 64 0 35.348 28.654 64 64 64h229.49l-530.744 530.746c-12.498 12.496-18.746 28.876-18.746 45.254s6.248 32.758 18.746 45.254c24.992 24.994 65.516 24.994 90.508 0z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrow-up-right", - "up-right", - "arrow-top-right" - ], - "grid": 16 - }, - { - "id": 316, - "paths": [ - "M621.254 877.254l320-320c24.994-24.992 24.994-65.516 0-90.51l-320-320c-24.994-24.992-65.516-24.992-90.51 0-24.994 24.994-24.994 65.516 0 90.51l210.746 210.746h-613.49c-35.346 0-64 28.654-64 64s28.654 64 64 64h613.49l-210.746 210.746c-12.496 12.496-18.744 28.876-18.744 45.254s6.248 32.758 18.744 45.254c24.994 24.994 65.516 24.994 90.51 0z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrow-right", - "right", - "next" - ], - "grid": 16 - }, - { - "id": 317, - "paths": [ - "M146.746 237.254l530.742 530.746h-229.488c-35.346 0-64 28.654-64 64s28.654 64 64 64h384c25.884 0 49.222-15.594 59.126-39.508 3.284-7.924 4.84-16.242 4.838-24.492h0.036v-384c0-35.346-28.654-64-64-64-35.348 0-64 28.654-64 64v229.49l-530.746-530.744c-12.496-12.498-28.874-18.746-45.254-18.746s-32.758 6.248-45.254 18.746c-24.994 24.992-24.994 65.516 0 90.508z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrow-down-right", - "down-right", - "arrow-bottom-right" - ], - "grid": 16 - }, - { - "id": 318, - "paths": [ - "M877.254 621.254l-320 320c-24.992 24.994-65.514 24.994-90.508 0l-320-320c-24.994-24.994-24.994-65.516 0-90.51 24.994-24.996 65.516-24.996 90.51 0l210.744 210.746v-613.49c0-35.346 28.654-64 64-64s64 28.654 64 64v613.49l210.746-210.746c12.496-12.496 28.876-18.744 45.254-18.744s32.758 6.248 45.254 18.746c24.994 24.994 24.994 65.514 0 90.508z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrow-down", - "down", - "download", - "bottom" - ], - "grid": 16 - }, - { - "id": 319, - "paths": [ - "M786.744 146.744l-530.744 530.744v-229.49c0-35.346-28.654-64-64-64s-64 28.654-64 64v384.002c0 25.886 15.592 49.222 39.508 59.128 7.924 3.282 16.242 4.84 24.492 4.836v0.036l384-0.002c35.344 0 64-28.654 64-63.998 0-35.348-28.656-64-64-64h-229.49l530.744-530.746c12.496-12.496 18.746-28.876 18.746-45.256 0-16.376-6.25-32.758-18.746-45.254-24.992-24.992-65.518-24.992-90.51 0v0z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrow-down-left", - "down-left", - "arrow-bottom-left" - ], - "grid": 16 - }, - { - "id": 320, - "paths": [ - "M402.746 877.254l-320-320c-24.994-24.992-24.994-65.516 0-90.51l320-320c24.994-24.992 65.516-24.992 90.51 0 24.994 24.994 24.994 65.516 0 90.51l-210.746 210.746h613.49c35.346 0 64 28.654 64 64s-28.654 64-64 64h-613.49l210.746 210.746c12.496 12.496 18.744 28.876 18.744 45.254s-6.248 32.758-18.744 45.254c-24.994 24.994-65.516 24.994-90.51 0z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrow-left", - "left", - "previous" - ], - "grid": 16 - }, - { - "id": 321, - "paths": [ - "M0 512c0 282.77 229.23 512 512 512s512-229.23 512-512-229.23-512-512-512-512 229.23-512 512zM928 512c0 229.75-186.25 416-416 416s-416-186.25-416-416 186.25-416 416-416 416 186.25 416 416z", - "M706.744 669.256l90.512-90.512-285.256-285.254-285.254 285.256 90.508 90.508 194.746-194.744z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "circle-up", - "up", - "circle-top", - "arrow" - ], - "grid": 16 - }, - { - "id": 322, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416z", - "M354.744 706.744l90.512 90.512 285.254-285.256-285.256-285.254-90.508 90.508 194.744 194.746z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "circle-right", - "right", - "circle-next", - "arrow" - ], - "grid": 16 - }, - { - "id": 323, - "paths": [ - "M1024 512c0-282.77-229.23-512-512-512s-512 229.23-512 512 229.23 512 512 512 512-229.23 512-512zM96 512c0-229.75 186.25-416 416-416s416 186.25 416 416-186.25 416-416 416-416-186.25-416-416z", - "M317.256 354.744l-90.512 90.512 285.256 285.254 285.254-285.256-90.508-90.508-194.746 194.744z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "circle-down", - "down", - "circle-bottom", - "arrow" - ], - "grid": 16 - }, - { - "id": 324, - "paths": [ - "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416z", - "M669.256 317.256l-90.512-90.512-285.254 285.256 285.256 285.254 90.508-90.508-194.744-194.746z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "circle-left", - "left", - "circle-previous", - "arrow" - ], - "grid": 16 - }, - { - "id": 325, - "paths": [ - "M960 0h64v512h-64v-512z", - "M0 512h64v512h-64v-512z", - "M320 704h704v128h-704v160l-224-224 224-224v160z", - "M704 320h-704v-128h704v-160l224 224-224 224z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "tab", - "arrows" - ], - "grid": 16 - }, - { - "id": 326, - "paths": [ - "M704 512v384h64v-384h160l-192-192-192 192z", - "M64 192h96v64h-96v-64z", - "M192 192h96v64h-96v-64z", - "M320 192h64v96h-64v-96z", - "M64 416h64v96h-64v-96z", - "M160 448h96v64h-96v-64z", - "M288 448h96v64h-96v-64z", - "M64 288h64v96h-64v-96z", - "M320 320h64v96h-64v-96z", - "M320 704v192h-192v-192h192zM384 640h-320v320h320v-320z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "move-up", - "sort", - "arrange" - ], - "grid": 16 - }, - { - "id": 327, - "paths": [ - "M768 704v-384h-64v384h-160l192 192 192-192z", - "M320 256v192h-192v-192h192zM384 192h-320v320h320v-320z", - "M64 640h96v64h-96v-64z", - "M192 640h96v64h-96v-64z", - "M320 640h64v96h-64v-96z", - "M64 864h64v96h-64v-96z", - "M160 896h96v64h-96v-64z", - "M288 896h96v64h-96v-64z", - "M64 736h64v96h-64v-96z", - "M320 768h64v96h-64v-96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "move-down", - "sort", - "arrange" - ], - "grid": 16 - }, - { - "id": 328, - "paths": [ - "M320 768v-768h-128v768h-160l224 224 224-224h-160z", - "M928 1024h-256c-11.8 0-22.644-6.496-28.214-16.9-5.566-10.404-4.958-23.030 1.59-32.85l222.832-334.25h-196.208c-17.672 0-32-14.328-32-32s14.328-32 32-32h256c11.8 0 22.644 6.496 28.214 16.9 5.566 10.404 4.958 23.030-1.59 32.85l-222.83 334.25h196.206c17.672 0 32 14.328 32 32s-14.328 32-32 32z", - "M1020.622 401.686l-192.002-384c-5.42-10.842-16.502-17.69-28.622-17.69-12.122 0-23.202 6.848-28.624 17.69l-191.996 384c-7.904 15.806-1.496 35.030 14.31 42.932 4.594 2.296 9.476 3.386 14.288 3.386 11.736 0 23.040-6.484 28.644-17.698l55.156-110.31h216.446l55.156 110.31c7.902 15.806 27.124 22.21 42.932 14.31 15.808-7.902 22.216-27.124 14.312-42.93zM723.778 255.996l76.22-152.446 76.224 152.446h-152.444z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "sort-alpha-asc", - "arrange", - "alphabetic" - ], - "grid": 16 - }, - { - "id": 329, - "paths": [ - "M320 768v-768h-128v768h-160l224 224 224-224h-160z", - "M928 448h-256c-11.8 0-22.644-6.496-28.214-16.9-5.566-10.406-4.958-23.030 1.59-32.85l222.832-334.25h-196.208c-17.672 0-32-14.328-32-32s14.328-32 32-32h256c11.8 0 22.644 6.496 28.214 16.9 5.566 10.406 4.958 23.030-1.59 32.85l-222.83 334.25h196.206c17.672 0 32 14.328 32 32s-14.328 32-32 32z", - "M1020.622 977.69l-192.002-384c-5.42-10.842-16.502-17.69-28.622-17.69-12.122 0-23.202 6.848-28.624 17.69l-191.996 384c-7.904 15.806-1.496 35.030 14.31 42.932 4.594 2.296 9.476 3.386 14.288 3.386 11.736 0 23.040-6.484 28.644-17.698l55.158-110.31h216.446l55.156 110.31c7.902 15.806 27.124 22.21 42.932 14.31 15.806-7.902 22.214-27.124 14.31-42.93zM723.778 832l76.22-152.446 76.226 152.446h-152.446z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "sort-alpha-desc", - "arrange", - "alphabetic" - ], - "grid": 16 - }, - { - "id": 330, - "paths": [ - "M320 768v-768h-128v768h-160l224 224 224-224h-160z", - "M864 448c-17.674 0-32-14.328-32-32v-352h-32c-17.674 0-32-14.328-32-32s14.326-32 32-32h64c17.674 0 32 14.328 32 32v384c0 17.672-14.326 32-32 32z", - "M928 576h-192c-17.674 0-32 14.326-32 32v192c0 17.674 14.326 32 32 32h160v128h-160c-17.674 0-32 14.326-32 32s14.326 32 32 32h192c17.674 0 32-14.326 32-32v-384c0-17.674-14.326-32-32-32zM768 640h128v128h-128v-128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "sort-numeric-asc", - "arrange" - ], - "grid": 16 - }, - { - "id": 331, - "paths": [ - "M320 768v-768h-128v768h-160l224 224 224-224h-160z", - "M864 1024c-17.674 0-32-14.328-32-32v-352h-32c-17.674 0-32-14.328-32-32s14.326-32 32-32h64c17.674 0 32 14.328 32 32v384c0 17.672-14.326 32-32 32z", - "M928 0h-192c-17.674 0-32 14.326-32 32v192c0 17.674 14.326 32 32 32h160v128h-160c-17.674 0-32 14.326-32 32s14.326 32 32 32h192c17.674 0 32-14.326 32-32v-384c0-17.674-14.326-32-32-32zM768 64h128v128h-128v-128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "sort-numberic-desc", - "arrange" - ], - "grid": 16 - }, - { - "id": 332, - "paths": [ - "M320 768v-768h-128v768h-160l224 224 224-224h-160z", - "M448 576h576v128h-576v-128z", - "M448 384h448v128h-448v-128z", - "M448 192h320v128h-320v-128z", - "M448 0h192v128h-192v-128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "sort-amount-asc", - "arrange" - ], - "grid": 16 - }, - { - "id": 333, - "paths": [ - "M320 768v-768h-128v768h-160l224 224 224-224h-160z", - "M448 0h576v128h-576v-128z", - "M448 192h448v128h-448v-128z", - "M448 384h320v128h-320v-128z", - "M448 576h192v128h-192v-128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "sort-amount-desc", - "arrange" - ], - "grid": 16 - }, - { - "id": 334, - "paths": [ - "M736 896c-88.224 0-160-71.776-160-160v-96h-128v96c0 88.224-71.776 160-160 160s-160-71.776-160-160 71.776-160 160-160h96v-128h-96c-88.224 0-160-71.776-160-160s71.776-160 160-160 160 71.776 160 160v96h128v-96c0-88.224 71.776-160 160-160s160 71.776 160 160-71.776 160-160 160h-96v128h96c88.224 0 160 71.776 160 160s-71.774 160-160 160zM640 640v96c0 52.934 43.066 96 96 96s96-43.066 96-96-43.066-96-96-96h-96zM288 640c-52.934 0-96 43.066-96 96s43.066 96 96 96 96-43.066 96-96v-96h-96zM448 576h128v-128h-128v128zM640 384h96c52.934 0 96-43.066 96-96s-43.066-96-96-96-96 43.066-96 96v96zM288 192c-52.934 0-96 43.066-96 96s43.066 96 96 96h96v-96c0-52.934-43.064-96-96-96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "command", - "cmd" - ], - "grid": 16 - }, - { - "id": 335, - "paths": [ - "M672 896h-320c-17.672 0-32-14.326-32-32v-352h-128c-12.942 0-24.612-7.796-29.564-19.754-4.954-11.958-2.214-25.722 6.936-34.874l320-320c12.498-12.496 32.758-12.496 45.254 0l320 320c9.152 9.152 11.89 22.916 6.938 34.874s-16.62 19.754-29.564 19.754h-128v352c0 17.674-14.326 32-32 32zM384 832h256v-352c0-17.672 14.326-32 32-32h82.744l-242.744-242.746-242.744 242.746h82.744c17.672 0 32 14.328 32 32v352z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "shift" - ], - "grid": 16 - }, - { - "id": 336, - "paths": [ - "M736.014 448c-8.908 0-17.77-3.698-24.096-10.928l-199.918-228.478-199.918 228.478c-11.636 13.3-31.856 14.65-45.154 3.010-13.3-11.638-14.648-31.854-3.010-45.154l224-256c6.076-6.944 14.854-10.928 24.082-10.928s18.006 3.984 24.082 10.928l224 256c11.638 13.3 10.292 33.516-3.010 45.154-6.070 5.312-13.582 7.918-21.058 7.918z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "ctrl", - "control" - ], - "grid": 16 - }, - { - "id": 337, - "paths": [ - "M928 832h-256c-12.646 0-24.106-7.448-29.242-19.004l-247.554-556.996h-299.204c-17.672 0-32-14.328-32-32s14.328-32 32-32h320c12.646 0 24.106 7.448 29.242 19.004l247.556 556.996h235.202c17.674 0 32 14.326 32 32s-14.326 32-32 32z", - "M928 256h-320c-17.674 0-32-14.328-32-32s14.326-32 32-32h320c17.674 0 32 14.328 32 32s-14.326 32-32 32z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "opt", - "option", - "alt" - ], - "grid": 16 - }, - { - "id": 338, - "paths": [ - "M896 0h-768c-70.4 0-128 57.6-128 128v768c0 70.4 57.6 128 128 128h768c70.4 0 128-57.6 128-128v-768c0-70.4-57.6-128-128-128zM448 794.51l-237.254-237.256 90.51-90.508 146.744 146.744 306.746-306.746 90.508 90.51-397.254 397.256z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "checkbox-checked", - "checkbox", - "tick", - "checked", - "selected" - ], - "grid": 16 - }, - { - "id": 339, - "paths": [ - "M896 0h-768c-70.4 0-128 57.6-128 128v768c0 70.4 57.6 128 128 128h768c70.4 0 128-57.6 128-128v-768c0-70.4-57.6-128-128-128zM896 896h-768v-768h768v768z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "checkbox-unchecked", - "checkbox", - "unchecked", - "square" - ], - "grid": 16 - }, - { - "id": 340, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 896c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.078 0 384 171.922 384 384s-171.922 384-384 384zM320 512c0-106.039 85.961-192 192-192s192 85.961 192 192c0 106.039-85.961 192-192 192s-192-85.961-192-192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "radio-checked", - "radio-button" - ], - "grid": 16 - }, - { - "id": 341, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 640c-70.692 0-128-57.306-128-128 0-70.692 57.308-128 128-128 70.694 0 128 57.308 128 128 0 70.694-57.306 128-128 128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "radio-checked", - "radio-button" - ], - "grid": 16 - }, - { - "id": 342, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 896c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.078 0 384 171.922 384 384s-171.922 384-384 384z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "radio-unchecked", - "radio-button", - "circle" - ], - "grid": 16 - }, - { - "id": 343, - "paths": [ - "M832 256l192-192-64-64-192 192h-448v-192h-128v192h-192v128h192v512h512v192h128v-192h192v-128h-192v-448zM320 320h320l-320 320v-320zM384 704l320-320v320h-320z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "crop", - "resize", - "cut" - ], - "grid": 16 - }, - { - "id": 344, - "paths": [ - "M320 128h-128c-35.2 0-64 28.8-64 64v128c0 35.2 28.8 64 64 64h128c35.2 0 64-28.8 64-64v-128c0-35.2-28.8-64-64-64z", - "M704 384h128c35.2 0 64-28.8 64-64v-128c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v128c0 35.2 28.8 64 64 64zM704 192h128v128h-128v-128z", - "M320 640h-128c-35.2 0-64 28.8-64 64v128c0 35.2 28.8 64 64 64h128c35.2 0 64-28.8 64-64v-128c0-35.2-28.8-64-64-64zM320 832h-128v-128h128v128z", - "M832 640h-128c-35.2 0-64 28.8-64 64v128c0 35.2 28.8 64 64 64h128c35.2 0 64-28.8 64-64v-128c0-35.2-28.8-64-64-64z", - "M896 512h-64c-85.476 0-165.834-33.286-226.274-93.724-60.44-60.442-93.726-140.802-93.726-226.276v-64c0-70.4-57.6-128-128-128h-256c-70.4 0-128 57.6-128 128v256c0 70.4 57.6 128 128 128h64c85.476 0 165.834 33.286 226.274 93.724 60.44 60.442 93.726 140.802 93.726 226.276v64c0 70.4 57.6 128 128 128h256c70.4 0 128-57.6 128-128v-256c0-70.4-57.6-128-128-128zM960 896c0 16.954-6.696 32.986-18.856 45.144-12.158 12.16-28.19 18.856-45.144 18.856h-256c-16.954 0-32.986-6.696-45.144-18.856-12.16-12.158-18.856-28.19-18.856-45.144v-64c0-212.078-171.922-384-384-384h-64c-16.954 0-32.986-6.696-45.146-18.854-12.158-12.16-18.854-28.192-18.854-45.146v-256c0-16.954 6.696-32.986 18.854-45.146 12.16-12.158 28.192-18.854 45.146-18.854h256c16.954 0 32.986 6.696 45.146 18.854 12.158 12.16 18.854 28.192 18.854 45.146v64c0 212.078 171.922 384 384 384h64c16.954 0 32.986 6.696 45.144 18.856 12.16 12.158 18.856 28.19 18.856 45.144v256z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "make-group" - ], - "grid": 16 - }, - { - "id": 345, - "paths": [ - "M384 464c0 26.4-21.6 48-48 48h-96c-26.4 0-48-21.6-48-48v-96c0-26.4 21.6-48 48-48h96c26.4 0 48 21.6 48 48v96z", - "M704 464c0 26.4-21.6 48-48 48h-96c-26.4 0-48-21.6-48-48v-96c0-26.4 21.6-48 48-48h96c26.4 0 48 21.6 48 48v96z", - "M384 784c0 26.4-21.6 48-48 48h-96c-26.4 0-48-21.6-48-48v-96c0-26.4 21.6-48 48-48h96c26.4 0 48 21.6 48 48v96z", - "M704 784c0 26.4-21.6 48-48 48h-96c-26.4 0-48-21.6-48-48v-96c0-26.4 21.6-48 48-48h96c26.4 0 48 21.6 48 48v96z", - "M912.082 160l111.918-111.916v-48.084h-48.082l-111.918 111.916-111.918-111.916h-48.082v48.084l111.918 111.916-111.918 111.916v48.084h48.082l111.918-111.916 111.918 111.916h48.082v-48.084z", - "M0 768h64v128h-64v-128z", - "M0 576h64v128h-64v-128z", - "M832 448h64v128h-64v-128z", - "M832 832h64v128h-64v-128z", - "M832 640h64v128h-64v-128z", - "M0 384h64v128h-64v-128z", - "M0 192h64v128h-64v-128z", - "M512 128h128v64h-128v-64z", - "M320 128h128v64h-128v-64z", - "M128 128h128v64h-128v-64z", - "M448 960h128v64h-128v-64z", - "M640 960h128v64h-128v-64z", - "M256 960h128v64h-128v-64z", - "M64 960h128v64h-128v-64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "ungroup" - ], - "grid": 16 - }, - { - "id": 346, - "paths": [ - "M913.826 679.694c-66.684-104.204-181.078-150.064-255.51-102.434-6.428 4.116-12.334 8.804-17.744 13.982l-79.452-124.262 183.462-287.972c15.016-27.73 20.558-60.758 13.266-93.974-6.972-31.75-24.516-58.438-48.102-77.226l-12.278-7.808-217.468 340.114-217.47-340.114-12.276 7.806c-23.586 18.79-41.13 45.476-48.1 77.226-7.292 33.216-1.75 66.244 13.264 93.974l183.464 287.972-79.454 124.262c-5.41-5.178-11.316-9.868-17.744-13.982-74.432-47.63-188.826-1.77-255.51 102.434-66.68 104.2-60.398 227.286 14.032 274.914 74.43 47.632 188.824 1.77 255.508-102.432l164.286-257.87 164.288 257.872c66.684 104.202 181.078 150.064 255.508 102.432 74.428-47.63 80.71-170.716 14.030-274.914zM234.852 800.43c-30.018 46.904-68.534 69.726-94.572 75.446-0.004 0-0.004 0-0.004 0-8.49 1.868-20.294 3.010-28.324-2.128-8.898-5.694-14.804-20.748-15.8-40.276-1.616-31.644 9.642-68.836 30.888-102.034 30.014-46.906 68.53-69.726 94.562-75.444 8.496-1.866 20.308-3.010 28.336 2.126 8.898 5.694 14.802 20.75 15.798 40.272 1.618 31.65-9.64 68.84-30.884 102.038zM480 512c-17.672 0-32-14.328-32-32s14.328-32 32-32 32 14.328 32 32-14.328 32-32 32zM863.85 833.47c-0.996 19.528-6.902 34.582-15.8 40.276-8.030 5.138-19.834 3.996-28.324 2.128 0 0 0 0-0.004 0-26.040-5.718-64.554-28.542-94.572-75.446-21.244-33.198-32.502-70.388-30.884-102.038 0.996-19.522 6.9-34.578 15.798-40.272 8.028-5.136 19.84-3.992 28.336-2.126 26.034 5.716 64.548 28.538 94.562 75.444 21.246 33.198 32.502 70.39 30.888 102.034z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "scissors", - "cut" - ], - "grid": 16 - }, - { - "id": 347, - "paths": [ - "M512 0c-282.77 0-512 71.634-512 160v96l384 384v320c0 35.346 57.306 64 128 64 70.692 0 128-28.654 128-64v-320l384-384v-96c0-88.366-229.23-160-512-160zM94.384 138.824c23.944-13.658 57.582-26.62 97.278-37.488 87.944-24.076 201.708-37.336 320.338-37.336 118.628 0 232.394 13.26 320.338 37.336 39.696 10.868 73.334 23.83 97.28 37.488 15.792 9.006 24.324 16.624 28.296 21.176-3.972 4.552-12.506 12.168-28.296 21.176-23.946 13.658-57.584 26.62-97.28 37.488-87.942 24.076-201.708 37.336-320.338 37.336s-232.394-13.26-320.338-37.336c-39.696-10.868-73.334-23.83-97.278-37.488-15.792-9.008-24.324-16.624-28.298-21.176 3.974-4.552 12.506-12.168 28.298-21.176z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "filter", - "funnel" - ], - "grid": 16 - }, - { - "id": 348, - "paths": [ - "M799.596 16.208c-90.526 0-148.62-16.208-241.848-16.208-301.284 0-441.792 171.584-441.792 345.872 0 102.678 48.64 136.458 144.564 136.458-6.758-14.864-18.914-31.080-18.914-104.034 0-204.010 77.006-263.458 175.636-267.51 0 0-80.918 793.374-315.778 888.542v24.672h316.594l108.026-512h197.844l44.072-128h-214.908l51.944-246.19c59.446 12.156 117.542 24.316 167.532 24.316 62.148 0 118.894-18.914 149.968-162.126-37.826 12.16-78.362 16.208-122.94 16.208z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "font", - "typeface", - "typography", - "font-family", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 349, - "paths": [ - "M768 871.822c0-0.040 0.002-0.076 0.002-0.116l-0.344-436.562-127.492 6.19h-251.93v-21.494c0-81.542 5.8-162.976 17.24-194.716 7.896-21.948 22.598-41.744 43.698-58.836 20.618-16.702 41.178-25.17 61.11-25.17 16.772 0 30.702 2.878 41.402 8.554 15.026 8.562 29.716 22.964 43.67 42.818 36.95 52.504 51.99 66.454 60.094 72.376 13.804 10.094 30.512 15.212 49.658 15.212 18.668 0 34.962-6.97 48.436-20.714 13.372-13.636 20.15-30.682 20.15-50.666 0-21.452-8.916-44.204-26.502-67.622-17.184-22.888-43.708-41.742-78.834-56.032-34.322-13.964-72.94-21.044-114.778-21.044-60.716 0-116.012 14.596-164.356 43.384-48.424 28.834-85.558 68.952-110.37 119.24-22.994 46.604-21.334 134.706-22.732 214.712h-125.732v71.402h125.598v324.668c0 71.666-21.906 91.008-30.216 101.324-11.436 14.202-32.552 29.104-60.444 29.104h-38.654v56.166h385.326v-56.168h-6.708c-91.144 0-117.020-9.832-117.020-120.842 0-0.018 0-0.034 0-0.048l-0.038-334.206h140.204c74.404 0 91.496 3.444 95.392 4.924 4.706 1.79 10.798 4.832 13.084 9.144 0.868 1.684 5.194 25.008 5.194 82.972v250.67c0 58.454-7.124 77.896-11.45 84.402-9.248 14.194-20.41 22.066-54.66 22.904v56.248h293.61v-55.846c-91.608 0-101.608-9.82-101.608-96.332z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "ligature", - "typography", - "font" - ], - "grid": 16 - }, - { - "id": 350, - "paths": [ - "M855.328 917.454c-11.734 0-83.62-13.2-88.020-29.338-10.274-39.612-11.738-82.152-11.738-130.568v-540.974c0-80.686 16.138-127.632 16.138-127.632-1.468-7.334-8.804-23.472-17.604-23.472h-4.404c-4.4 0-55.746 32.276-102.692 32.276-38.14-0.002-61.89-33.746-105.902-33.746-185.106 0-271.942 150.31-271.942 363.032v11.072c0 4.402-2.934 8.804-7.336 8.804h-60.148c-7.336 0-22.006 41.078-22.006 60.148 0 5.87 1.466 8.8 4.4 8.8h77.754c4.402 0 7.336 5.872 7.336 10.27 0 130.566-1.466 259.298-1.466 259.298 0 20.54-1.466 66.016-10.27 102.692-4.4 16.138-71.884 29.338-89.488 29.338-7.334 0-7.334 35.212 0 42.546 60.148-2.934 99.758-7.334 159.908-7.334 55.75 0 98.292 4.4 156.974 7.334 2.934-8.802 2.934-42.546-4.4-42.546-11.736 0-83.624-13.2-88.022-29.338-10.27-39.612-10.27-82.152-11.738-130.568v-232.888c0-4.402 4.402-8.804 8.802-8.804h151.104c10.27-20.538 17.606-45.476 17.606-58.68 0-8.802 0-10.27-7.336-10.27h-162.84c-2.934 0-7.336-4.402-7.336-7.334v-52.82c0-130.568 53.482-245.538 142.97-245.538 63.372 0 118.666 41.060 118.666 197.922 0 0.006 0 0.012 0 0.018 0.208 4.036 0.314 7.294 0.314 9.452v436.816c0 20.54-1.47 66.016-10.27 102.692-4.404 16.138-71.884 29.338-89.492 29.338-7.336 0-7.336 35.212 0 42.546 60.15-2.934 99.762-7.334 159.912-7.334 55.746 0 98.288 4.4 156.972 7.334 2.928-8.8 2.928-42.544-4.406-42.544z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "ligature", - "typography", - "font" - ], - "grid": 16 - }, - { - "id": 351, - "paths": [ - "M896 768h128l-160 192-160-192h128v-512h-128l160-192 160 192h-128zM640 64v256l-64-128h-192v704h128v64h-384v-64h128v-704h-192l-64 128v-256z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "text-height", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 352, - "paths": [ - "M256 896v128l-192-160 192-160v128h512v-128l192 160-192 160v-128zM832 64v256l-64-128h-192v448h128v64h-384v-64h128v-448h-192l-64 128v-256z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "text-width", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 353, - "paths": [ - "M64 512h384v128h-128v384h-128v-384h-128zM960 256h-251.75v768h-136.5v-768h-251.75v-128h640z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "font-size", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 354, - "paths": [ - "M707.88 484.652c37.498-44.542 60.12-102.008 60.12-164.652 0-141.16-114.842-256-256-256h-320v896h384c141.158 0 256-114.842 256-256 0-92.956-49.798-174.496-124.12-219.348zM384 192h101.5c55.968 0 101.5 57.42 101.5 128s-45.532 128-101.5 128h-101.5v-256zM543 832h-159v-256h159c58.45 0 106 57.42 106 128s-47.55 128-106 128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "bold", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 355, - "paths": [ - "M704 64h128v416c0 159.058-143.268 288-320 288-176.73 0-320-128.942-320-288v-416h128v416c0 40.166 18.238 78.704 51.354 108.506 36.896 33.204 86.846 51.494 140.646 51.494s103.75-18.29 140.646-51.494c33.116-29.802 51.354-68.34 51.354-108.506v-416zM192 832h640v128h-640z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "underline", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 356, - "paths": [ - "M896 64v64h-128l-320 768h128v64h-448v-64h128l320-768h-128v-64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "italic", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 357, - "paths": [ - "M1024 512v64h-234.506c27.504 38.51 42.506 82.692 42.506 128 0 70.878-36.66 139.026-100.58 186.964-59.358 44.518-137.284 69.036-219.42 69.036-82.138 0-160.062-24.518-219.42-69.036-63.92-47.938-100.58-116.086-100.58-186.964h128c0 69.382 87.926 128 192 128s192-58.618 192-128c0-69.382-87.926-128-192-128h-512v-64h299.518c-2.338-1.654-4.656-3.324-6.938-5.036-63.92-47.94-100.58-116.086-100.58-186.964s36.66-139.024 100.58-186.964c59.358-44.518 137.282-69.036 219.42-69.036 82.136 0 160.062 24.518 219.42 69.036 63.92 47.94 100.58 116.086 100.58 186.964h-128c0-69.382-87.926-128-192-128s-192 58.618-192 128c0 69.382 87.926 128 192 128 78.978 0 154.054 22.678 212.482 64h299.518z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "strikethrough", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 358, - "paths": [ - "M704 896h256l64-128v256h-384v-214.214c131.112-56.484 224-197.162 224-361.786 0-214.432-157.598-382.266-352-382.266-194.406 0-352 167.832-352 382.266 0 164.624 92.886 305.302 224 361.786v214.214h-384v-256l64 128h256v-32.59c-187.63-66.46-320-227.402-320-415.41 0-247.424 229.23-448 512-448s512 200.576 512 448c0 188.008-132.37 348.95-320 415.41v32.59z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "omega", - "wysiwyg", - "symbols" - ], - "grid": 16 - }, - { - "id": 359, - "paths": [ - "M941.606 734.708l44.394-94.708h38l-64 384h-960v-74.242l331.546-391.212-331.546-331.546v-227h980l44 256h-34.376l-18.72-38.88c-35.318-73.364-61.904-89.12-138.904-89.12h-662l353.056 353.056-297.42 350.944h542.364c116.008 0 146.648-41.578 173.606-97.292z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "sigma", - "wysiwyg", - "symbols" - ], - "grid": 16 - }, - { - "id": 360, - "paths": [ - "M0 512h128v64h-128zM192 512h192v64h-192zM448 512h128v64h-128zM640 512h192v64h-192zM896 512h128v64h-128zM880 0l16 448h-768l16-448h32l16 384h640l16-384zM144 1024l-16-384h768l-16 384h-32l-16-320h-640l-16 320z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "page-break", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 361, - "paths": [ - "M768 206v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM676 256h-136l-188 188-188-188h-136l256 256-256 256h136l188-188 188 188h136l-256-256z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "superscript", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 362, - "paths": [ - "M768 910v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM676 256h-136l-188 188-188-188h-136l256 256-256 256h136l188-188 188 188h136l-256-256z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "subscript", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 363, - "paths": [ - "M194.018 832l57.6-192h264.764l57.6 192h113.632l-192-640h-223.232l-192 640h113.636zM347.618 320h72.764l57.6 192h-187.964l57.6-192zM704 832l160-256 160 256h-320z", - "M864 128h-64c-17.644 0-32-14.356-32-32s14.356-32 32-32h128c17.674 0 32-14.328 32-32s-14.326-32-32-32h-128c-52.936 0-96 43.066-96 96 0 24.568 9.288 47.002 24.524 64 17.588 19.624 43.11 32 71.476 32h64c17.644 0 32 14.356 32 32s-14.356 32-32 32h-128c-17.674 0-32 14.328-32 32s14.326 32 32 32h128c52.936 0 96-43.066 96-96 0-24.568-9.288-47.002-24.524-64-17.588-19.624-43.108-32-71.476-32z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "superscript", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 364, - "paths": [ - "M194.018 832l57.6-192h264.764l57.6 192h113.632l-192-640h-223.232l-192 640h113.636zM347.618 320h72.764l57.6 192h-187.964l57.6-192zM1024 192l-160 256-160-256h320z", - "M864 832h-64c-17.644 0-32-14.356-32-32s14.356-32 32-32h128c17.674 0 32-14.328 32-32s-14.326-32-32-32h-128c-52.936 0-96 43.066-96 96 0 24.568 9.29 47.002 24.524 64 17.588 19.624 43.112 32 71.476 32h64c17.644 0 32 14.356 32 32s-14.356 32-32 32h-128c-17.674 0-32 14.328-32 32s14.326 32 32 32h128c52.936 0 96-43.066 96-96 0-24.568-9.29-47.002-24.524-64-17.588-19.624-43.108-32-71.476-32z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "subscript", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 365, - "paths": [ - "M322.018 832l57.6-192h264.764l57.6 192h113.632l-191.996-640h-223.236l-192 640h113.636zM475.618 320h72.764l57.6 192h-187.964l57.6-192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "text-color", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 366, - "paths": [ - "M256 384v-384h768v384h-64v-320h-640v320zM1024 576v448h-768v-448h64v384h640v-384zM512 448h128v64h-128zM320 448h128v64h-128zM704 448h128v64h-128zM896 448h128v64h-128zM0 288l192 192-192 192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "pagebreak", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 367, - "paths": [ - "M0 896h576v128h-576zM896 128h-302.56l-183.764 704h-132.288l183.762-704h-269.15v-128h704zM929.774 1024l-129.774-129.774-129.774 129.774-62.226-62.226 129.774-129.774-129.774-129.774 62.226-62.226 129.774 129.774 129.774-129.774 62.226 62.226-129.774 129.774 129.774 129.774z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "clear-formatting", - "wysiwyg", - "remove-style" - ], - "grid": 16 - }, - { - "id": 368, - "paths": [ - "M0 192v704h1024v-704h-1024zM384 640v-128h256v128h-256zM640 704v128h-256v-128h256zM640 320v128h-256v-128h256zM320 320v128h-256v-128h256zM64 512h256v128h-256v-128zM704 512h256v128h-256v-128zM704 448v-128h256v128h-256zM64 704h256v128h-256v-128zM704 832v-128h256v128h-256z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "table", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 369, - "paths": [ - "M0 64v896h1024v-896h-1024zM384 640v-192h256v192h-256zM640 704v192h-256v-192h256zM640 192v192h-256v-192h256zM320 192v192h-256v-192h256zM64 448h256v192h-256v-192zM704 448h256v192h-256v-192zM704 384v-192h256v192h-256zM64 704h256v192h-256v-192zM704 896v-192h256v192h-256z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "table", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 370, - "paths": [ - "M384 192h128v64h-128zM576 192h128v64h-128zM896 192v256h-192v-64h128v-128h-64v-64zM320 384h128v64h-128zM512 384h128v64h-128zM192 256v128h64v64h-128v-256h192v64zM384 576h128v64h-128zM576 576h128v64h-128zM896 576v256h-192v-64h128v-128h-64v-64zM320 768h128v64h-128zM512 768h128v64h-128zM192 640v128h64v64h-128v-256h192v64zM960 64h-896v896h896v-896zM1024 0v0 1024h-1024v-1024h1024z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "insert-template", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 371, - "paths": [ - "M384 0h512v128h-128v896h-128v-896h-128v896h-128v-512c-141.384 0-256-114.616-256-256s114.616-256 256-256z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "pilcrow", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 372, - "paths": [ - "M512 0c-141.384 0-256 114.616-256 256s114.616 256 256 256v512h128v-896h128v896h128v-896h128v-128h-512zM0 704l256-256-256-256z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "ltr", - "wysiwyg", - "left-to-right", - "direction" - ], - "grid": 16 - }, - { - "id": 373, - "paths": [ - "M256 0c-141.384 0-256 114.616-256 256s114.616 256 256 256v512h128v-896h128v896h128v-896h128v-128h-512zM1024 192l-256 256 256 256z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "rtl", - "wysiwyg", - "right-to-left", - "direction" - ], - "grid": 16 - }, - { - "id": 374, - "paths": [ - "M495.964 1024c-49.36 0-91.116-14.406-124.104-42.82-33.224-28.614-50.068-62.038-50.068-99.344 0-18.128 6.6-33.756 19.622-46.458 13.232-12.914 29.782-19.744 47.85-19.744 18.002 0 34.194 6.41 46.826 18.542 12.472 11.972 18.796 27.824 18.796 47.104 0 11.318-1.85 23.818-5.494 37.146-3.616 13.178-4.376 19.938-4.376 23.292 0 3.682 0.924 8.076 7.774 12.756 12.76 8.824 28.066 13.084 46.876 13.084 22.576 0 42.718-7.858 61.574-24.022 18.578-15.942 27.612-32.318 27.612-50.056 0-19.736-5.27-36.826-16.12-52.242-18.336-25.758-52.878-55.954-102.612-89.668-79.858-53.454-133.070-99.766-162.58-141.52-22.89-32.684-34.476-67.89-34.476-104.704 0-37.062 12.142-73.948 36.092-109.63 20.508-30.554 50.8-58.12 90.228-82.138-21.096-22.7-36.896-44.064-47.094-63.688-12.872-24.76-19.398-50.372-19.398-76.122 0-47.814 18.91-89.16 56.206-122.89 37.32-33.76 83.86-50.878 138.322-50.878 50.086 0 92.206 14.082 125.182 41.852 33.328 28.082 50.222 60.898 50.222 97.54 0 18.656-6.986 35.364-20.766 49.66l-0.276 0.282c-7.976 7.924-22.618 17.37-47.046 17.37-19.148 0-35.934-6.272-48.54-18.136-12.558-11.794-18.93-25.918-18.93-41.966 0-6.934 1.702-17.416 5.352-32.98 1.778-7.364 2.668-14.142 2.668-20.25 0-10.338-3.726-18.272-11.724-24.966-8.282-6.93-20.108-10.302-36.142-10.302-24.868 0-45.282 7.562-62.41 23.118-17.19 15.606-25.544 34.088-25.544 56.508 0 20.156 4.568 36.762 13.58 49.362 17.112 23.938 46.796 49.79 88.22 76.836 84.17 54.588 142.902 104.672 174.518 148.826 23.35 33.12 35.152 68.34 35.152 104.792 0 36.598-11.882 73.496-35.318 109.676-20.208 31.18-50.722 59.276-90.884 83.71 22.178 23.466 37.812 44.042 47.554 62.538 12.082 22.97 18.208 48.048 18.208 74.542 0 49.664-18.926 91.862-56.244 125.422-37.34 33.554-83.866 50.566-138.288 50.566zM446.416 356.346c-48.222 28.952-71.712 62.19-71.712 101.314 0 22.756 6.498 43.13 19.86 62.278 19.936 27.926 59.27 62.054 116.804 101.288 24.358 16.586 46.36 32.712 65.592 48.060 49.060-29.504 72.956-62.366 72.956-100.178 0-20.598-8.142-42.774-24.204-65.916-16.808-24.196-52.85-55.796-107.128-93.914-28.328-19.562-52.558-37.334-72.168-52.932z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "section", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 375, - "paths": [ - "M0 64h1024v128h-1024zM0 256h640v128h-640zM0 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "paragraph-left", - "wysiwyg", - "align-left", - "left" - ], - "grid": 16 - }, - { - "id": 376, - "paths": [ - "M0 64h1024v128h-1024zM192 256h640v128h-640zM192 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "paragraph-center", - "wysiwyg", - "align-center", - "center" - ], - "grid": 16 - }, - { - "id": 377, - "paths": [ - "M0 64h1024v128h-1024zM384 256h640v128h-640zM384 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "paragraph-right", - "wysiwyg", - "align-right", - "right" - ], - "grid": 16 - }, - { - "id": 378, - "paths": [ - "M0 64h1024v128h-1024zM0 256h1024v128h-1024zM0 448h1024v128h-1024zM0 640h1024v128h-1024zM0 832h1024v128h-1024z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "paragraph-justify", - "wysiwyg", - "justify" - ], - "grid": 16 - }, - { - "id": 379, - "paths": [ - "M0 64h1024v128h-1024zM384 256h640v128h-640zM384 448h640v128h-640zM384 640h640v128h-640zM0 832h1024v128h-1024zM0 704v-384l256 192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "indent-increase", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 380, - "paths": [ - "M0 64h1024v128h-1024zM384 256h640v128h-640zM384 448h640v128h-640zM384 640h640v128h-640zM0 832h1024v128h-1024zM256 320v384l-256-192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "indent-decrease", - "wysiwyg" - ], - "grid": 16 - }, - { - "id": 381, - "paths": [ - "M256 640c0 0 58.824-192 384-192v192l384-256-384-256v192c-256 0-384 159.672-384 320zM704 768h-576v-384h125.876c10.094-11.918 20.912-23.334 32.488-34.18 43.964-41.19 96.562-72.652 156.114-93.82h-442.478v640h832v-268.624l-128 85.334v55.29z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "share", - "out", - "external", - "outside" - ], - "grid": 16 - }, - { - "id": 382, - "paths": [ - "M192 64v768h768v-768h-768zM896 768h-640v-640h640v640zM128 896v-672l-64-64v800h800l-64-64h-672z", - "M352 256l160 160-192 192 96 96 192-192 160 160v-416z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "new-tab", - "out", - "external", - "outside", - "popout", - "link", - "blank" - ], - "grid": 16 - }, - { - "id": 383, - "paths": [ - "M576 736l96 96 320-320-320-320-96 96 224 224z", - "M448 288l-96-96-320 320 320 320 96-96-224-224z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "embed", - "code", - "html", - "xml" - ], - "grid": 16 - }, - { - "id": 384, - "paths": [ - "M832 736l96 96 320-320-320-320-96 96 224 224z", - "M448 288l-96-96-320 320 320 320 96-96-224-224z", - "M701.298 150.519l69.468 18.944-191.987 704.026-69.468-18.944 191.987-704.026z" - ], - "width": 1280, - "attrs": [], - "isMulticolor": false, - "tags": [ - "embed", - "code", - "html", - "xml" - ], - "grid": 16 - }, - { - "id": 385, - "paths": [ - "M0 64v896h1024v-896h-1024zM960 896h-896v-768h896v768zM896 192h-768v640h768v-640zM448 512h-64v64h-64v64h-64v-64h64v-64h64v-64h-64v-64h-64v-64h64v64h64v64h64v64zM704 640h-192v-64h192v64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "terminal", - "console", - "cmd", - "command-line" - ], - "grid": 16 - }, - { - "id": 386, - "paths": [ - "M864 704c-45.16 0-85.92 18.738-115.012 48.83l-431.004-215.502c1.314-8.252 2.016-16.706 2.016-25.328s-0.702-17.076-2.016-25.326l431.004-215.502c29.092 30.090 69.852 48.828 115.012 48.828 88.366 0 160-71.634 160-160s-71.634-160-160-160-160 71.634-160 160c0 8.622 0.704 17.076 2.016 25.326l-431.004 215.504c-29.092-30.090-69.852-48.83-115.012-48.83-88.366 0-160 71.636-160 160 0 88.368 71.634 160 160 160 45.16 0 85.92-18.738 115.012-48.828l431.004 215.502c-1.312 8.25-2.016 16.704-2.016 25.326 0 88.368 71.634 160 160 160s160-71.632 160-160c0-88.364-71.634-160-160-160z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "share", - "social" - ], - "grid": 16 - }, - { - "id": 387, - "paths": [ - "M853.31 0h-682.62c-93.88 0-170.69 76.784-170.69 170.658v682.656c0 93.876 76.81 170.686 170.69 170.686h682.622c93.938 0 170.688-76.81 170.688-170.686v-682.656c0-93.874-76.75-170.658-170.69-170.658zM256 256h512c9.138 0 18.004 1.962 26.144 5.662l-282.144 329.168-282.144-329.17c8.14-3.696 17.006-5.66 26.144-5.66zM192 704v-384c0-1.34 0.056-2.672 0.14-4l187.664 218.94-185.598 185.6c-1.444-5.338-2.206-10.886-2.206-16.54zM768 768h-512c-5.654 0-11.202-0.762-16.54-2.206l182.118-182.118 90.422 105.496 90.424-105.494 182.116 182.118c-5.34 1.442-10.886 2.204-16.54 2.204zM832 704c0 5.654-0.762 11.2-2.206 16.54l-185.598-185.598 187.664-218.942c0.084 1.328 0.14 2.66 0.14 4v384z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "mail", - "contact", - "support", - "newsletter", - "letter", - "email", - "envelop", - "social" - ], - "grid": 16 - }, - { - "id": 388, - "paths": [ - "M853.342 0h-682.656c-93.874 0-170.686 76.81-170.686 170.69v682.622c0 93.938 76.812 170.688 170.686 170.688h682.656c93.876 0 170.658-76.75 170.658-170.69v-682.62c0-93.88-76.782-170.69-170.658-170.69zM853.342 128c7.988 0 15.546 2.334 22.020 6.342l-363.362 300.404-363.354-300.4c6.478-4.010 14.044-6.346 22.040-6.346h682.656zM170.686 896c-1.924 0-3.82-0.146-5.684-0.408l225.626-312.966-29.256-29.254-233.372 233.37v-611.138l384 464.396 384-464.394v611.136l-233.372-233.37-29.254 29.254 225.628 312.968c-1.858 0.26-3.746 0.406-5.662 0.406h-682.654z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "mail", - "contact", - "support", - "newsletter", - "letter", - "email", - "envelop", - "social" - ], - "grid": 16 - }, - { - "id": 389, - "paths": [ - "M853.342 0h-682.656c-93.874 0-170.686 76.81-170.686 170.69v682.622c0 93.938 76.812 170.688 170.686 170.688h682.656c93.876 0 170.658-76.75 170.658-170.69v-682.62c0-93.88-76.782-170.69-170.658-170.69zM182.628 886.626l-77.256-77.254 256-256 29.256 29.254-208 304zM153.372 198.628l29.256-29.256 329.372 265.374 329.374-265.374 29.254 29.256-358.628 422.626-358.628-422.626zM841.374 886.626l-208-304 29.254-29.254 256 256-77.254 77.254z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "mail", - "contact", - "support", - "newsletter", - "letter", - "email", - "envelop", - "social" - ], - "grid": 16 - }, - { - "id": 390, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM256 256h512c9.138 0 18.004 1.962 26.144 5.662l-282.144 329.168-282.144-329.17c8.14-3.696 17.006-5.66 26.144-5.66zM192 704v-384c0-1.34 0.056-2.672 0.14-4l187.664 218.942-185.598 185.598c-1.444-5.336-2.206-10.886-2.206-16.54zM768 768h-512c-5.654 0-11.202-0.762-16.54-2.208l182.118-182.118 90.422 105.498 90.424-105.494 182.116 182.12c-5.34 1.44-10.886 2.202-16.54 2.202zM832 704c0 5.654-0.762 11.2-2.206 16.54l-185.6-185.598 187.666-218.942c0.084 1.328 0.14 2.66 0.14 4v384z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "mail", - "contact", - "support", - "newsletter", - "letter", - "email", - "envelop", - "social" - ], - "grid": 16 - }, - { - "id": 391, - "paths": [ - "M925.6 885.2c-112.2 82.8-274.6 126.8-414.6 126.8-196.2 0-372.8-72.4-506.4-193.2-10.4-9.4-1.2-22.4 11.4-15 144.2 84 322.6 134.4 506.8 134.4 124.2 0 260.8-25.8 386.6-79.2 18.8-8 34.8 12.6 16.2 26.2z", - "M972.2 832c-14.4-18.4-94.8-8.8-131-4.4-11 1.2-12.6-8.2-2.8-15.2 64.2-45 169.4-32 181.6-17 12.4 15.2-3.2 120.6-63.4 171-9.2 7.8-18 3.6-14-6.6 13.8-33.8 44-109.4 29.6-127.8z", - "M707.4 757.6l0.2 0.2c24.8-21.8 69.4-60.8 94.6-81.8 10-8 8.2-21.4 0.4-32.6-22.6-31.2-46.6-56.6-46.6-114.2v-192c0-81.4 5.6-156-54.2-212-47.2-45.2-125.6-61.2-185.6-61.2-117.2 0-248 43.8-275.4 188.6-3 15.4 8.4 23.6 18.4 25.8l119.4 13c11.2-0.6 19.2-11.6 21.4-22.8 10.2-49.8 52-74 99-74 25.4 0 54.2 9.2 69.2 32 17.2 25.4 15 60 15 89.4v16c-71.4 8-164.8 13.2-231.6 42.6-77.2 33.4-131.4 101.4-131.4 201.4 0 128 80.6 192 184.4 192 87.6 0 135.4-20.6 203-89.8 22.4 32.4 29.6 48.2 70.6 82.2 9.4 5 21 4.6 29.2-2.8zM583.2 457.2c0 48 1.2 88-23 130.6-19.6 34.8-50.6 56-85.2 56-47.2 0-74.8-36-74.8-89.2 0-105 94.2-124 183.2-124v26.6z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "amazon", - "brand" - ], - "grid": 16 - }, - { - "id": 392, - "paths": [ - "M522.2 438.8v175.6h290.4c-11.8 75.4-87.8 220.8-290.4 220.8-174.8 0-317.4-144.8-317.4-323.2s142.6-323.2 317.4-323.2c99.4 0 166 42.4 204 79l139-133.8c-89.2-83.6-204.8-134-343-134-283 0-512 229-512 512s229 512 512 512c295.4 0 491.6-207.8 491.6-500.2 0-33.6-3.6-59.2-8-84.8l-483.6-0.2z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "google", - "brand" - ], - "grid": 16 - }, - { - "id": 393, - "paths": [ - "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM519.6 896c-212.2 0-384-171.8-384-384s171.8-384 384-384c103.6 0 190.4 37.8 257.2 100.4l-104.2 100.4c-28.6-27.4-78.4-59.2-153-59.2-131.2 0-238 108.6-238 242.4s107 242.4 238 242.4c152 0 209-109.2 217.8-165.6h-217.8v-131.6h362.6c3.2 19.2 6 38.4 6 63.6 0.2 219.4-146.8 375.2-368.6 375.2z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "google", - "brand" - ], - "grid": 16 - }, - { - "id": 394, - "paths": [ - "M512 0c-282.8 0-512 229.2-512 512s229.2 512 512 512 512-229.2 512-512-229.2-512-512-512zM519.6 896c-212.2 0-384-171.8-384-384s171.8-384 384-384c103.6 0 190.4 37.8 257.2 100.4l-104.2 100.4c-28.6-27.4-78.4-59.2-153-59.2-131.2 0-238 108.6-238 242.4s107 242.4 238 242.4c152 0 209-109.2 217.8-165.6h-217.8v-131.6h362.6c3.2 19.2 6 38.4 6 63.6 0.2 219.4-146.8 375.2-368.6 375.2z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "google", - "brand" - ], - "grid": 16 - }, - { - "id": 395, - "paths": [ - "M325.8 457.4v111.8h184.8c-7.4 48-55.8 140.6-184.8 140.6-111.2 0-202-92.2-202-205.8s90.8-205.8 202-205.8c63.4 0 105.6 27 129.8 50.2l88.4-85.2c-56.8-53-130.4-85.2-218.2-85.2-180.2 0.2-325.8 145.8-325.8 326s145.6 325.8 325.8 325.8c188 0 312.8-132.2 312.8-318.4 0-21.4-2.4-37.8-5.2-54h-307.6z", - "M1024 448h-96v-96h-96v96h-96v96h96v96h96v-96h96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "google-plus", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 396, - "paths": [ - "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM384 768c-141.6 0-256-114.4-256-256s114.4-256 256-256c69.2 0 127 25.2 171.6 67l-69.6 66.8c-19-18.2-52.2-39.4-102-39.4-87.4 0-158.8 72.4-158.8 161.6s71.4 161.6 158.8 161.6c101.4 0 139.4-72.8 145.2-110.4h-145.2v-87.8h241.8c2.2 12.8 4 25.6 4 42.4 0 146.4-98 250.2-245.8 250.2zM896 512h-64v64h-64v-64h-64v-64h64v-64h64v64h64v64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "google-plus", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 397, - "paths": [ - "M512 0c-282.8 0-512 229.2-512 512s229.2 512 512 512 512-229.2 512-512-229.2-512-512-512zM384 768c-141.6 0-256-114.4-256-256s114.4-256 256-256c69.2 0 127 25.2 171.6 67l-69.6 66.8c-19-18.2-52.2-39.4-102-39.4-87.4 0-158.8 72.4-158.8 161.6s71.4 161.6 158.8 161.6c101.4 0 139.4-72.8 145.2-110.4h-145.2v-87.8h241.8c2.2 12.8 4 25.6 4 42.4 0 146.4-98 250.2-245.8 250.2zM832 512v64h-64v-64h-64v-64h64v-64h64v64h64v64h-64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "google-plus", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 398, - "paths": [ - "M511.8 0c-244.2 0-442.2 198-442.2 442.2 0 231.4 210.8 419 442.2 419v162.8c268.6-136.2 442.6-355.6 442.6-581.8 0-244.2-198.4-442.2-442.6-442.2zM448 512c0 53-28.6 96-64 96v-96h-128v-192h192v192zM768 512c0 53-28.6 96-64 96v-96h-128v-192h192v192z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "hangouts", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 399, - "paths": [ - "M438 640l-184.6 320h580.6l184.6-320z", - "M992.4 576l-295.6-512h-369.6l295.6 512z", - "M290.2 128l-290.2 502.8 184.8 320 290.2-502.8z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "google-drive", - "brand" - ], - "grid": 16 - }, - { - "id": 400, - "paths": [ - "M608 192h160v-192h-160c-123.514 0-224 100.486-224 224v96h-128v192h128v512h192v-512h160l32-192h-192v-96c0-17.346 14.654-32 32-32z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "facebook", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 401, - "paths": [ - "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h416v-448h-128v-128h128v-64c0-105.8 86.2-192 192-192h128v128h-128c-35.2 0-64 28.8-64 64v64h192l-32 128h-160v448h288c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "facebook", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 402, - "paths": [ - "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM704 160c0-17.6 14.4-32 32-32h128c17.6 0 32 14.4 32 32v128c0 17.6-14.4 32-32 32h-128c-17.6 0-32-14.4-32-32v-128zM512 320c106 0 192 86 192 192s-86 192-192 192c-106 0-192-86-192-192s86-192 192-192zM896 864v0c0 17.6-14.4 32-32 32h-704c-17.6 0-32-14.4-32-32v0-416h70.4c-4.2 20.6-6.4 42-6.4 64 0 176.8 143.2 320 320 320s320-143.2 320-320c0-22-2.2-43.4-6.4-64h70.4v416z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "instagram", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 403, - "paths": [ - "M873 148.8c-95.8-96-223.2-148.8-359-148.8-279.6 0-507.2 227.6-507.2 507.4 0 89.4 23.4 176.8 67.8 253.6l-72 263 269-70.6c74.2 40.4 157.6 61.8 242.4 61.8h0.2c0 0 0 0 0 0 279.6 0 507.4-227.6 507.4-507.4 0-135.6-52.8-263-148.6-359zM514.2 929.6v0c-75.8 0-150-20.4-214.8-58.8l-15.4-9.2-159.6 41.8 42.6-155.6-10-16c-42.4-67-64.6-144.6-64.6-224.4 0-232.6 189.2-421.8 422-421.8 112.6 0 218.6 44 298.2 123.6 79.6 79.8 123.4 185.6 123.4 298.4-0.2 232.8-189.4 422-421.8 422zM745.4 613.6c-12.6-6.4-75-37-86.6-41.2s-20-6.4-28.6 6.4c-8.4 12.6-32.8 41.2-40.2 49.8-7.4 8.4-14.8 9.6-27.4 3.2s-53.6-19.8-102-63c-37.6-33.6-63.2-75.2-70.6-87.8s-0.8-19.6 5.6-25.8c5.8-5.6 12.6-14.8 19-22.2s8.4-12.6 12.6-21.2c4.2-8.4 2.2-15.8-1-22.2s-28.6-68.8-39-94.2c-10.2-24.8-20.8-21.4-28.6-21.8-7.4-0.4-15.8-0.4-24.2-0.4s-22.2 3.2-33.8 15.8c-11.6 12.6-44.4 43.4-44.4 105.8s45.4 122.6 51.8 131.2c6.4 8.4 89.4 136.6 216.6 191.4 30.2 13 53.8 20.8 72.2 26.8 30.4 9.6 58 8.2 79.8 5 24.4-3.6 75-30.6 85.6-60.2s10.6-55 7.4-60.2c-3-5.6-11.4-8.8-24.2-15.2z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "whatsapp", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 404, - "paths": [ - "M512 0c-281.6 0-512 230.4-512 512s230.4 512 512 512 512-230.4 512-512-227.8-512-512-512zM747.6 739.8c-10.2 15.4-28.2 20.4-43.6 10.2-120.4-74.2-271.4-89.6-450.6-48.6-18 5.2-33.2-7.6-38.4-23-5.2-18 7.6-33.2 23-38.4 194.6-43.6 363.6-25.6 496.6 56.4 18 7.6 20.6 28 13 43.4zM809 599c-12.8 18-35.8 25.6-53.8 12.8-138.2-84.4-348.2-110-509.4-58.8-20.4 5.2-43.6-5.2-48.6-25.6-5.2-20.4 5.2-43.6 25.6-48.6 186.8-56.4 417.2-28.2 576 69.2 15.2 7.6 23 33.2 10.2 51zM814 455.6c-163.8-97.2-437.8-107.6-594-58.8-25.6 7.6-51.2-7.6-58.8-30.8-7.6-25.6 7.6-51.2 30.8-58.8 181.8-53.8 481.2-43.6 670.8 69.2 23 12.8 30.8 43.6 18 66.6-13 17.8-43.6 25.4-66.8 12.6z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "spotify", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 405, - "paths": [ - "M512 0c-282.8 0-512 229.2-512 512s229.2 512 512 512 512-229.2 512-512-229.2-512-512-512zM763.6 351l-84 395.8c-5.8 28.2-22.8 34.8-46.4 21.8l-128-94.6-61.4 59.8c-7.2 7-12.8 12.8-25.6 12.8-16.6 0-13.8-6.2-19.4-22l-43.6-143.2-126.6-39.4c-27.4-8.4-27.6-27.2 6.2-40.6l493.2-190.4c22.4-10.2 44.2 5.4 35.6 40z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "telegram", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 406, - "paths": [ - "M1024 226.4c-37.6 16.8-78.2 28-120.6 33 43.4-26 76.6-67.2 92.4-116.2-40.6 24-85.6 41.6-133.4 51-38.4-40.8-93-66.2-153.4-66.2-116 0-210 94-210 210 0 16.4 1.8 32.4 5.4 47.8-174.6-8.8-329.4-92.4-433-219.6-18 31-28.4 67.2-28.4 105.6 0 72.8 37 137.2 93.4 174.8-34.4-1-66.8-10.6-95.2-26.2 0 0.8 0 1.8 0 2.6 0 101.8 72.4 186.8 168.6 206-17.6 4.8-36.2 7.4-55.4 7.4-13.6 0-26.6-1.4-39.6-3.8 26.8 83.4 104.4 144.2 196.2 146-72 56.4-162.4 90-261 90-17 0-33.6-1-50.2-3 93.2 59.8 203.6 94.4 322.2 94.4 386.4 0 597.8-320.2 597.8-597.8 0-9.2-0.2-18.2-0.6-27.2 41-29.4 76.6-66.4 104.8-108.6z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "twitter", - "brand", - "tweet", - "social" - ], - "grid": 16 - }, - { - "id": 407, - "paths": [ - "M960.8 509c-26.4 6-51.8 8.8-74.8 8.8-129.2 0-228.6-90.2-228.6-247.2 0-77 29.8-116.8 71.8-116.8 40 0 66.6 35.8 66.6 108.6 0 41.4-11 86.8-19.2 113.6 0 0 39.8 69.4 148.6 48.2 23.2-51.4 35.6-117.8 35.6-176 0-156.8-80-248.2-226.6-248.2-150.8 0-239 115.8-239 268.6 0 151.4 70.8 281.2 187.4 340.4-49 98.2-111.4 184.6-176.6 249.8-118-142.8-224.8-333.2-268.6-705h-174.2c80.6 619.2 320.4 816.4 384 854.2 35.8 21.6 66.8 20.6 99.6 2 51.6-29.2 206.2-184 292-365 36 0 79.2-4.2 122.2-14v-122z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "vine", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 408, - "paths": [ - "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM829.4 716.8l-93.6 1.4c0 0-20.2 4-46.6-14.2-35-24-68-86.6-93.8-78.4-26 8.2-25.2 64.4-25.2 64.4s0.2 12-5.8 18.4c-6.4 7-19.2 8.4-19.2 8.4h-41.8c0 0-92.4 5.6-173.8-79.2-88.8-92.4-167.2-275.8-167.2-275.8s-4.6-12 0.4-17.8c5.6-6.6 20.6-7 20.6-7l100.2-0.6c0 0 9.4 1.6 16.2 6.6 5.6 4 8.6 11.8 8.6 11.8s16.2 41 37.6 78c41.8 72.2 61.4 88 75.6 80.4 20.6-11.2 14.4-102.2 14.4-102.2s0.4-33-10.4-47.6c-8.4-11.4-24.2-14.8-31-15.6-5.6-0.8 3.6-13.8 15.6-19.8 18-8.8 49.8-9.4 87.4-9 29.2 0.2 37.8 2.2 49.2 4.8 34.6 8.4 22.8 40.6 22.8 117.8 0 24.8-4.4 59.6 13.4 71 7.6 5 26.4 0.8 73.4-79 22.2-37.8 39-82.2 39-82.2s3.6-8 9.2-11.4c5.8-3.4 13.6-2.4 13.6-2.4l105.4-0.6c0 0 31.6-3.8 36.8 10.6 5.4 15-11.8 50-54.8 107.4-70.6 94.2-78.6 85.4-19.8 139.8 56 52 67.6 77.4 69.6 80.6 22.8 38.4-26 41.4-26 41.4z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "vk", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 409, - "paths": [ - "M425.2 10.6c-241.2 40.6-425.2 250.4-425.2 503.2 0 125.6 45.6 240.6 120.8 329.6 178.6-86.4 303.6-282 304.4-509.8v-323z", - "M598.8 10.6c241.2 40.6 425.2 250.4 425.2 503.2 0 125.6-45.6 240.6-120.8 329.6-178.6-86.4-303.6-282-304.4-509.8v-323z", - "M510.2 642.6c-31.8 131.6-126.8 244-245 318.8 72.8 39.8 156.2 62.6 245 62.6s172.2-22.8 245-62.6c-118.2-74.8-213.2-187.2-245-318.8z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "renren", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 410, - "paths": [ - "M430.2 898c-169.6 16.8-316-60-327-171.2-11-111.4 117.6-215 287-231.8 169.6-16.8 316 60 326.8 171.2 11.2 111.4-117.4 215.2-286.8 231.8zM769.2 528.6c-14.4-4.4-24.4-7.2-16.8-26.2 16.4-41.2 18-76.6 0.2-102-33.2-47.4-124.2-45-228.4-1.2 0 0-32.8 14.2-24.4-11.6 16-51.6 13.6-94.6-11.4-119.6-56.6-56.6-207 2.2-336 131.2-96.4 96.2-152.4 198.8-152.4 287.4 0 169.2 217.2 272.2 429.6 272.2 278.4 0 463.8-161.8 463.8-290.2 0-77.8-65.4-121.8-124.2-140z", - "M954.2 218.6c-67.2-74.6-166.4-103-258-83.6v0c-21.2 4.6-34.6 25.4-30 46.4 4.6 21.2 25.2 34.6 46.4 30 65.2-13.8 135.6 6.4 183.4 59.4s60.8 125.2 40.2 188.4v0c-6.6 20.6 4.6 42.6 25.2 49.4 20.6 6.6 42.6-4.6 49.4-25.2v-0.2c28.8-88.4 10.6-190-56.6-264.6z", - "M850.8 312c-32.8-36.4-81.2-50.2-125.6-40.6-18.2 3.8-29.8 22-26 40.2 4 18.2 22 29.8 40 25.8v0c21.8-4.6 45.4 2.2 61.4 19.8 16 17.8 20.4 42 13.4 63.2v0c-5.6 17.6 4 36.8 21.8 42.6 17.8 5.6 36.8-4 42.6-21.8 14-43.4 5.2-93-27.6-129.2z", - "M439.6 696.6c-6 10.2-19 15-29.2 10.8-10.2-4-13.2-15.6-7.4-25.4 6-9.8 18.6-14.6 28.6-10.8 10 3.6 13.6 15 8 25.4zM385.4 765.8c-16.4 26.2-51.6 37.6-78 25.6-26-11.8-33.8-42.2-17.4-67.8 16.2-25.4 50.2-36.8 76.4-25.8 26.6 11.4 35.2 41.6 19 68zM447 580.6c-80.6-21-171.8 19.2-206.8 90.2-35.8 72.4-1.2 153 80.2 179.4 84.4 27.2 184-14.6 218.6-92.6 34.2-76.6-8.4-155.2-92-177z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "sina-weibo", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 411, - "paths": [ - "M136.294 750.93c-75.196 0-136.292 61.334-136.292 136.076 0 75.154 61.1 135.802 136.292 135.802 75.466 0 136.494-60.648 136.494-135.802-0.002-74.742-61.024-136.076-136.494-136.076zM0.156 347.93v196.258c127.784 0 247.958 49.972 338.458 140.512 90.384 90.318 140.282 211.036 140.282 339.3h197.122c-0.002-372.82-303.282-676.070-675.862-676.070zM0.388 0v196.356c455.782 0 826.756 371.334 826.756 827.644h196.856c0-564.47-459.254-1024-1023.612-1024z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "feed", - "rss", - "social" - ], - "grid": 16 - }, - { - "id": 412, - "paths": [ - "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM279 831.2c-48 0-87-38.6-87-86.6 0-47.6 39-86.8 87-86.8 48.2 0 87 39.2 87 86.8 0 48-39 86.6-87 86.6zM497.4 832c0-81.8-31.8-158.8-89.4-216.4-57.8-57.8-134.4-89.6-216-89.6v-125.2c237.6 0 431.2 193.4 431.2 431.2h-125.8zM719.6 832c0-291-236.6-528-527.4-528v-125.2c360 0 653 293.2 653 653.2h-125.6z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "feed", - "rss", - "social" - ], - "grid": 16 - }, - { - "id": 413, - "paths": [ - "M1013.8 307.2c0 0-10-70.6-40.8-101.6-39-40.8-82.6-41-102.6-43.4-143.2-10.4-358.2-10.4-358.2-10.4h-0.4c0 0-215 0-358.2 10.4-20 2.4-63.6 2.6-102.6 43.4-30.8 31-40.6 101.6-40.6 101.6s-10.2 82.8-10.2 165.8v77.6c0 82.8 10.2 165.8 10.2 165.8s10 70.6 40.6 101.6c39 40.8 90.2 39.4 113 43.8 82 7.8 348.2 10.2 348.2 10.2s215.2-0.4 358.4-10.6c20-2.4 63.6-2.6 102.6-43.4 30.8-31 40.8-101.6 40.8-101.6s10.2-82.8 10.2-165.8v-77.6c-0.2-82.8-10.4-165.8-10.4-165.8zM406.2 644.8v-287.8l276.6 144.4-276.6 143.4z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "youtube", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 414, - "paths": [ - "M344.012 169.399c0.209-0.865 0.344-1.479 0.388-1.8l1.042-7.559-47.349-0.267c-42.779-0.242-55.87 0.007-57.047 1.084-0.565 0.516-15.333 56.633-41.655 158.273-12.556 48.484-23.124 87.206-23.487 86.051s-15.391-56.498-33.397-122.98c-18.006-66.482-33.104-121.243-33.55-121.692-0.623-0.623-57.98-0.9-104.417-0.502-6.735 0.056-10.477-13.11 60.021 211.133 9.759 31.041 24.371 74.997 32.469 97.679 9.333 26.141 15.989 46.323 20.534 63.173 8.038 32.067 8.319 52.163 6.565 75.625-2.026 27.101-2.321 218.438-0.342 221.638 1.512 2.449 91.223 3.589 99.712 1.268 1.358-0.372 2.265-1.691 2.87-8.928 2.119-6.219 2.286-30.969 2.286-133.744v-131.281l5.742-18.112c3.756-11.849 13.201-42.995 20.989-69.22 7.789-26.222 17.21-57.619 20.938-69.771 33.834-110.319 66.14-218.831 66.994-225.011l0.693-5.056z", - "M846.122 328.651l-0.021 6.838-1.065 0.014-0.595 188.993-0.577 183.227-14.666 14.929c-16.424 16.719-29.585 23.101-41.488 20.113-12.963-3.254-12.64 1.8-13.722-214.768l-0.998-199.347h-94.316v6.851h-1.086v216.289c0 231.737-0.007 231.599 11.752 254.875 9.366 18.536 23.010 27.559 46.391 30.671h0.002c30.79 4.1 64.001-9.849 94.77-39.809l13.373-13.022v22.445c0 19.396 0.554 22.601 4.070 23.58 5.756 1.605 77.173 1.707 84.89 0.126l6.396-1.314v-6.628l1.086-0.223v-495.098l-94.195 1.258z", - "M606.892 426.33c-8.935-38.341-25.68-64.115-53.233-81.939-43.281-27.999-92.718-30.957-138.586-8.291-33.425 16.515-54.951 43.914-66.071 84.083-1.326 4.786-2.298 8.812-3.033 14.815-2.83 14.184-3.163 35.351-3.889 133.951-1.121 151.928 0.616 170.003 19.643 204.51 18.664 33.848 57.403 58.661 99.572 63.782 12.696 1.54 38.43-0.858 53.23-4.961 33.632-9.326 65.864-35.906 80.118-66.078 6.158-13.033 9.875-22.096 12.115-38.651 4.175-22.617 4.47-59.175 4.47-152.375-0.002-118.875-0.379-131.862-4.337-148.847zM499.34 736.003c-7.907 6.028-21.734 8.649-32.983 6.249-8.656-1.847-20.338-15.419-23.934-27.801-4.479-15.436-4.823-229.985-0.954-272.059 6.379-21.054 24.19-32.050 43.635-26.813 15.157 4.082 22.915 13.575 27.336 33.457 3.282 14.754 3.67 33.129 2.972 141.26-0.46 71.701-0.716 106.742-3.058 125.553-2.382 11.87-6.319 15.047-13.015 20.154z", - "M2300.389 534.137h45.57l-0.726-41.281c-0.705-37.869-1.263-42.2-6.324-52.472-7.982-16.21-19.759-23.401-38.446-23.401-22.448 0-36.678 10.849-43.388 33.141-2.858 9.486-5.863 74.685-3.707 80.308 1.205 3.144 7.724 3.705 47.021 3.705z", - "M1995.795 440.237c-6.077-12.247-17.385-18.278-30.525-17.806-10.221 0.365-21.561 4.677-32.488 13.010l-8.14 6.177v296.598l8.14 6.177c18.429 14.052 38.674 17.031 52.619 7.703 5.519-3.691 9.117-8.779 11.919-16.861 3.647-10.524 3.965-24.003 3.489-148.772-0.495-130.043-0.781-137.702-5.014-146.226z", - "M2560.878 306.633c-9.080-108.842-16.303-144.165-38.751-189.544-29.729-60.101-72.692-91.788-133.876-98.747-47.309-5.379-225.315-12.97-390.044-16.631-285.188-6.338-754.057 5.858-813.939 21.173-27.673 7.077-48.426 19.11-70.022 40.604-37.844 37.662-60.391 91.679-69.452 166.396-20.692 170.606-21.134 376.727-1.188 553.515 8.577 76.041 26.243 125.443 59.41 166.159 20.694 25.406 56.352 46.998 88.26 53.442 22.385 4.523 134.42 10.798 297.605 16.668 24.306 0.874 88.667 2.379 143.030 3.344 113.301 2.012 321.627 0.821 440.719-2.519 80.127-2.249 226.201-8.172 253.5-10.282 7.677-0.593 25.469-1.728 39.537-2.523 47.277-2.67 77.353-12.568 105.596-34.76 36.553-28.718 64.857-81.795 76.815-144.037 11.314-58.894 18.887-163.773 20.422-282.851 1.284-99.491-0.426-153.175-7.621-239.409zM1425.273 267.192l-52.982 0.654-2.326 565.143-45.932 0.581c-35.525 0.488-46.307-0.044-47.167-2.326-0.616-1.626-1.356-129.020-1.672-283.153l-0.581-280.246-103.493-1.307v-88.304l305.829 1.235 1.307 87.069-52.982 0.654zM1750.216 591.117v243.035h-83.725v-25.583c0-19.247-0.735-25.583-2.979-25.583-1.64 0-9.226 6.344-16.861 14.098-16.557 16.817-36.171 30.367-52.91 36.63-34.662 12.968-67.589 5.4-81.618-18.75-12.838-22.11-13.082-27.052-13.082-256.335v-210.547h83.653l0.654 198.265c0.623 194.821 0.714 198.393 5.377 206.333 6.182 10.521 15.608 13.347 30.597 9.231 8.817-2.423 14.836-6.707 29.143-20.931l18.024-17.952v-374.946h83.725v243.035zM2076.757 799.41c-7.372 16.424-23.806 32.509-37.283 36.485-35.167 10.382-63.375 1.923-95.935-28.708-10.103-9.505-19.51-17.224-20.931-17.224-1.712 0-2.616 7.449-2.616 22.094v22.094h-83.725v-655.845h83.725v106.982c0 58.84 0.786 106.982 1.744 106.982s9.789-7.807 19.624-17.298c22.629-21.841 41.548-31.399 65.557-33.213 42.811-3.24 68.327 18.794 80.018 69.117 3.647 15.696 3.998 33.625 3.998 179.078-0.002 177.178-0.021 177.918-14.175 209.457zM2430.99 702.168c-0.744 18.226-2.954 39.137-4.942 46.514-11.642 43.167-42.635 73.731-87.432 86.269-60.315 16.878-126.704-10.777-153.205-63.812-14.875-29.769-15.408-35.706-15.408-181.185 0-118.617 0.419-133.171 4.214-149.354 10.747-45.788 37.392-75.422 82.49-91.865 13.068-4.765 26.708-7.207 40.337-7.486 48.672-0.998 96.984 25.18 117.229 67.808 13.659 28.76 15.35 41.060 16.717 122.099l1.235 72.678-178.497 1.235-0.654 48.84c-0.93 68.901 3.716 90.088 22.313 102.621 15.645 10.54 39.679 9.745 52.765-1.744 12.263-10.768 15.726-22.336 16.933-56.107l1.091-29.653h86.195l-1.381 33.143z" - ], - "width": 2569, - "attrs": [], - "isMulticolor": false, - "tags": [ - "youtube", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 415, - "paths": [ - "M96 0l-96 160v736h256v128h128l128-128h160l288-288v-608h-864zM832 544l-160 160h-160l-128 128v-128h-192v-576h640v416z", - "M608 256h96v256h-96v-256z", - "M416 256h96v256h-96v-256z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "twitch", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 416, - "paths": [ - "M1023.6 274c-4.6 99.6-74.2 236.2-208.8 409.4-139.2 180.8-257 271.4-353.4 271.4-59.6 0-110.2-55-151.4-165.2-27.6-101-55-202-82.6-303-30.6-110.2-63.4-165.2-98.6-165.2-7.6 0-34.4 16.2-80.4 48.2l-48.2-62c50.6-44.4 100.4-88.8 149.4-133.2 67.4-58.2 118-88.8 151.8-92 79.6-7.6 128.8 46.8 147.2 163.4 19.8 125.8 33.6 204 41.4 234.6 23 104.4 48.2 156.6 75.8 156.6 21.4 0 53.6-33.8 96.6-101.6 42.8-67.6 65.8-119.2 69-154.6 6.2-58.4-16.8-87.8-69-87.8-24.6 0-49.8 5.6-75.8 16.8 50.4-164.8 146.4-244.8 288.4-240.2 105 2.8 154.6 71 148.6 204.4z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "vimeo", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 417, - "paths": [ - "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM861.6 340c-3.2 72-53.6 170.6-151 295.8-100.6 130.8-185.8 196.2-255.4 196.2-43.2 0-79.6-39.8-109.4-119.4-20-73-39.8-146-59.8-219-22-79.6-45.8-119.4-71.2-119.4-5.6 0-25 11.6-58 34.8l-34.8-44.8c36.6-32 72.6-64.2 108-96.2 48.8-42 85.2-64.2 109.6-66.4 57.6-5.6 93 33.8 106.4 118 14.4 91 24.4 147.4 30 169.6 16.6 75.4 34.8 113 54.8 113 15.4 0 38.8-24.4 69.8-73.4s47.6-86.2 49.8-111.8c4.4-42.2-12.2-63.4-49.8-63.4-17.8 0-36 4-54.8 12.2 36.4-119 105.8-177 208.4-173.6 76 2.2 111.8 51.4 107.4 147.8z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "vimeo", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 418, - "paths": [ - "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM822.4 768.8l-348.4 114c-79.6 26-87.6 21.8-123.6-89.6l-88-272.6c-21-64.6-85-238.6-95.8-272-20-62-20-65.4 97-103.4 91.6-30 95.4-29 128.6 74.4 26.8 83.2 44 150.4 71.6 235.4l75 232 239.6-78.4c47.2-15.6 63-14.8 76.4 43.4l9.6 44c11.2 51-14.6 64-42 72.8z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "lanyrd", - "brand" - ], - "grid": 16 - }, - { - "id": 419, - "paths": [ - "M0 544c0-123.712 100.288-224 224-224s224 100.288 224 224c0 123.712-100.288 224-224 224s-224-100.288-224-224zM576 544c0-123.712 100.288-224 224-224s224 100.288 224 224c0 123.712-100.288 224-224 224s-224-100.288-224-224z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "flickr", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 420, - "paths": [ - "M800 416c-70.58 0-128 57.42-128 128s57.42 128 128 128c70.58 0 128-57.42 128-128s-57.42-128-128-128zM800 320v0c123.71 0 224 100.288 224 224 0 123.71-100.29 224-224 224s-224-100.29-224-224c0-123.712 100.29-224 224-224zM0 544c0-123.712 100.288-224 224-224s224 100.288 224 224c0 123.712-100.288 224-224 224s-224-100.288-224-224z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "flickr", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 421, - "paths": [ - "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM288 672c-88.4 0-160-71.6-160-160s71.6-160 160-160 160 71.6 160 160-71.6 160-160 160zM736 672c-88.4 0-160-71.6-160-160s71.6-160 160-160c88.4 0 160 71.6 160 160s-71.6 160-160 160z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "flickr", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 422, - "paths": [ - "M512 0c-282.77 0-512 230.796-512 515.5s229.23 515.5 512 515.5 512-230.796 512-515.5-229.23-515.5-512-515.5zM288 672c-88.366 0-160-71.634-160-160s71.634-160 160-160 160 71.634 160 160c0 88.366-71.634 160-160 160zM736 672c-88.368 0-160-71.634-160-160s71.632-160 160-160 160 71.634 160 160c0 88.366-71.632 160-160 160z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "flickr", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 423, - "paths": [ - "M512 1024c-282.4 0-512-229.6-512-512s229.6-512 512-512c282.4 0 512 229.6 512 512s-229.6 512-512 512v0zM943.8 582c-15-4.8-135.4-40.6-272.4-18.6 57.2 157.2 80.4 285.2 85 311.8 98-66.4 168-171.4 187.4-293.2v0zM682.8 915.2c-6.6-38.4-31.8-172-93.2-331.6-1 0.4-2 0.6-2.8 1-246.8 86-335.4 257-343.2 273 74.2 57.8 167.4 92.4 268.4 92.4 60.6 0 118.4-12.4 170.8-34.8v0zM187 805c10-17 130-215.6 355.4-288.6 5.6-1.8 11.4-3.6 17.2-5.2-11-24.8-23-49.8-35.4-74.2-218.2 65.4-430.2 62.6-449.4 62.4-0.2 4.4-0.2 8.8-0.2 13.4 0 112.2 42.6 214.8 112.4 292.2v0zM84 423c19.6 0.2 199.8 1 404.4-53.2-72.4-128.8-150.6-237.2-162.2-253-122.4 57.8-214 170.6-242.2 306.2v0zM409.6 87.4c12 16.2 91.6 124.4 163.2 256 155.6-58.2 221.4-146.8 229.2-158-77.2-68.6-178.8-110.2-290-110.2-35.2 0.2-69.6 4.4-102.4 12.2v0zM850.6 236.2c-9.2 12.4-82.6 106.4-244.2 172.4 10.2 20.8 20 42 29 63.4 3.2 7.6 6.4 15 9.4 22.6 145.6-18.2 290.2 11 304.6 14-1-103.2-38-198-98.8-272.4v0z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "dribbble", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 424, - "paths": [ - "M297 205.2c30.2 0 57.4 2.6 82.2 8 24.8 5.2 45.8 14 63.6 26 17.6 12 31.2 28 41.2 48 9.6 19.8 14.4 44.6 14.4 74 0 31.8-7.2 58.2-21.6 79.4-14.6 21.2-35.8 38.4-64.2 52 38.8 11.2 67.4 30.8 86.6 58.6 19.2 28 28.4 61.6 28.4 101.2 0 32-6.2 59.4-18.4 82.6-12.4 23.4-29.2 42.4-49.8 57-20.8 14.8-44.8 25.6-71.6 32.6-26.6 7-54 10.6-82.4 10.6h-305.4v-630h297zM279 459.6c24.6 0 45-5.8 61-17.6 16-11.6 23.6-30.8 23.6-57.2 0-14.6-2.6-26.8-7.8-36.2-5.4-9.4-12.4-16.8-21.4-22-8.8-5.4-18.8-9-30.6-11-11.4-2.2-23.4-3.2-35.6-3.2h-129.6v147.2h140.4zM286.6 727.8c13.6 0 26.6-1.2 38.8-4 12.4-2.8 23.4-7 32.6-13.4 9.2-6.2 17-14.4 22.6-25.2 5.6-10.6 8.2-24.2 8.2-40.8 0-32.4-9.2-55.6-27.4-69.6-18.2-13.8-42.4-20.6-72.4-20.6h-150.4v173.4h148z", - "M725.2 725.6c18.8 18.4 45.8 27.6 81 27.6 25.2 0 47.2-6.4 65.4-19.2s29.2-26.4 33.4-40.4h110.4c-17.8 55-44.6 94-81.4 117.6-36.2 23.6-80.6 35.6-132 35.6-36 0-68.2-5.8-97.2-17.2-29-11.6-53.2-27.8-73.6-49-19.8-21.2-35.4-46.4-46.4-76-10.8-29.4-16.4-62-16.4-97.2 0-34.2 5.6-66 16.8-95.4 11.4-29.6 27-55 47.8-76.4s45.2-38.4 74-50.8c28.6-12.4 60.2-18.6 95.2-18.6 38.6 0 72.4 7.4 101.4 22.6 28.8 15 52.6 35.2 71.2 60.4s31.8 54.2 40 86.6c8.2 32.4 11 66.2 8.8 101.6h-329.4c0 35.8 12 70 31 88.2zM869 486c-14.8-16.4-40.2-25.4-70.8-25.4-20 0-36.6 3.4-49.8 10.2-13 6.8-23.6 15.2-31.8 25.2-8 10-13.6 20.8-16.8 32.2-3.2 11-5.2 21.2-5.8 30h204c-3-32-14-55.6-29-72.2z", - "M668.4 256h255.4v62.2h-255.4v-62.2z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "behance", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 425, - "paths": [ - "M404.2 448.6c13-9.4 19.2-25 19.2-46.6 0-12-2-21.8-6.2-29.4-4.4-7.6-10-13.6-17.4-17.8-7.2-4.4-15.4-7.4-24.8-9-9.2-1.8-19-2.6-29-2.6h-105.4v119.6h114c20 0.2 36.6-4.6 49.6-14.2z", - "M422 556.6c-14.8-11.2-34.4-16.8-58.8-16.8h-122.6v141h120.2c11.2 0 21.6-1 31.6-3.2s19-5.6 26.6-10.8c7.6-5 13.8-11.8 18.4-20.4s6.8-19.8 6.8-33.2c0-26.4-7.4-45.2-22.2-56.6z", - "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM671.2 269.4h207.4v50.6h-207.4v-50.6zM541.6 686.4c-10 19-23.6 34.4-40.4 46.4-17 12-36.4 20.8-58.2 26.6-21.6 5.8-44 8.6-66.8 8.6h-248.2v-511.8h241.2c24.4 0 46.6 2.2 66.8 6.4 20 4.2 37.2 11.4 51.6 21.2 14.2 9.8 25.4 22.8 33.4 39 7.8 16 11.8 36.2 11.8 60 0 25.8-5.8 47.2-17.6 64.4s-29 31.2-52.2 42.2c31.6 9 54.8 25 70.2 47.6 15.6 22.8 23.2 50.2 23.2 82.2 0.2 26.2-4.8 48.6-14.8 67.2zM959.4 607.2h-267.4c0 29.2 10 57 25.2 72 15.2 14.8 37.2 22.4 65.8 22.4 20.6 0 38.2-5.2 53.2-15.6 14.8-10.4 23.8-21.4 27.2-32.8h89.6c-14.4 44.6-36.2 76.4-66 95.6-29.4 19.2-65.4 28.8-107.2 28.8-29.2 0-55.4-4.8-79-14-23.6-9.4-43.2-22.6-59.8-39.8-16.2-17.2-28.6-37.8-37.6-61.8-8.8-23.8-13.4-50.4-13.4-79 0-27.8 4.6-53.6 13.6-77.6 9.2-24 22-44.8 38.8-62 16.8-17.4 36.8-31.2 60-41.4 23.2-10 48.8-15 77.2-15 31.4 0 58.8 6 82.4 18.4 23.4 12.2 42.6 28.6 57.8 49.2s25.8 44 32.6 70.4c6.6 26 8.8 53.4 7 82.2z", - "M776.6 463.8c-16.2 0-29.8 2.8-40.4 8.4s-19.2 12.4-25.8 20.4c-6.6 8.2-11 16.8-13.6 26.2-2.6 9-4.2 17.2-4.6 24.4h165.6c-2.4-26-11.4-45.2-23.4-58.6-12.4-13.6-32.8-20.8-57.8-20.8z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "behance", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 426, - "paths": [ - "M829 186.2v-186.2h-186.2l-18.6 18.8-88 167.4-27.6 18.6h-313.6v255.6h172.4l15.4 18.6-187.8 358.8v186.2h186.2l18.6-18.8 88-167.4 27.6-18.6h313.6v-255.6h-172.4l-15.4-18.8z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "deviantart", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 427, - "paths": [ - "M253 672.8c0.2 0.6 5.6 15.2 8.6 22.6 16.8 39.8 41 75.8 71.8 106.6s66.6 55 106.6 71.8c41.4 17.4 85.2 26.4 130.4 26.4s89.2-8.8 130.4-26.4c40-16.8 75.8-41 106.6-71.8s55-66.6 71.8-106.6c17.4-41.4 26.4-85.2 26.4-130.4s-8.8-89.2-26.4-130.4c-16.8-40-41-75.8-71.8-106.6s-66.6-55-106.6-71.8c-41.4-17.4-85.2-26.4-130.4-26.4-45.8 0-91.6 9.2-132.2 26.4-32.6 13.8-87.8 49.2-120 82.6l-0.2 0.2v-276h463.4c16.8-0.2 16.8-23.8 16.8-31.4 0-7.8 0-31.2-17-31.4h-501c-13.6 0-22 11.4-22 21.8v388.2c0 12.6 15.6 21.6 30.2 24.6 28.4 6 34.8-3 41.8-12.6l1-1.2c10.6-15.8 43.6-49 44-49.4 51.6-51.6 120.6-80 194.4-80 73.4 0 142.2 28.4 193.8 80 51.8 51.8 80.4 120.4 80.4 193.2 0 73-28.4 141.8-80 193.2-50.8 50.8-122 80-195 80-49.4 0-97.2-13.2-138.2-38.2l0.2-236c0-31.4 13.6-65.8 36.6-91.6 26.2-29.6 62.2-45.8 101.6-45.8 38 0 73.6 14.4 100.2 40.6 26.2 26 40.8 60.8 40.8 97.8 0 78.8-62 140.6-141.2 140.6-15.2 0-43-6.8-44.2-7-16-4.8-22.8 17.4-25 24.8-8.6 28.2 4.4 33.8 7 34.6 25.4 8 42.2 9.4 64.2 9.4 111.8 0 202.8-91 202.8-202.8 0-111-91-201.2-202.6-201.2-54.8 0-106.2 21-144.8 58.8-36.8 36.2-57.8 84.4-57.8 132.4v1.2c-0.2 6-0.2 147.6-0.4 194l-0.2-0.2c-21-23.2-41.8-58.8-55.6-95.2-5.4-14.2-17.6-11.8-34.2-6.6-8 2.2-30 9-25 25.2v0zM491.2 617.4c0 6.8 6.2 12.8 10 16.2l1.2 1.2c6.4 6.2 12.4 9.4 18 9.4 4.6 0 7.4-2.2 8.4-3.2 2.8-2.6 34.4-34.8 37.6-37.8l35.4 35.2c3.2 3.6 6.8 5.6 11 5.6 5.6 0 11.8-3.4 18.2-10 15.2-15.6 7.6-24 4-28l-35.8-35.8 37.4-37.6c8.2-8.8 1-18.2-6.2-25.4-10.4-10.4-20.6-13.2-27-7.2l-37.2 37.2-37.6-37.6c-2-2-4.6-3-7.2-3-5 0-11 3.4-17.6 10-11.6 11.6-14 19.6-8 26l37.6 37.4-37.4 37.4c-3.4 3.2-5 6.6-4.8 10zM573 109.8c-60 0-124 12.2-170.8 32.4-5 2-8 6-8.6 11.6-0.6 5.4 0.8 12.4 4.4 21.6 3 7.4 10.6 27.2 25.6 21.4 48-18.4 101.2-28.4 149.4-28.4 54.8 0 108 10.8 158 31.8 39.8 16.8 77.2 41.2 118 76.4 3 2.6 6.2 3.8 9.4 3.8 8 0 15.6-7.8 22.2-15.2 10.8-12.2 18.4-22.4 7.6-32.6-39-36.8-81.6-64.4-134.4-86.8-57.2-23.8-118.2-36-180.8-36zM896.4 851.2v0c-7.2-7.2-13.4-11.4-18.8-13s-10.4-0.4-14.2 3.4l-3.6 3.6c-37.2 37.2-80.6 66.4-128.8 86.8-50 21.2-103 31.8-157.6 31.8-54.8 0-107.8-10.8-157.6-31.8-48.2-20.4-91.6-49.6-128.8-86.8-38.8-38.8-68-82.2-86.8-128.8-18.4-45.6-24.4-79.8-26.4-91-0.2-1-0.4-1.8-0.4-2.4-2.6-13.2-14.8-14.2-32.2-11.4-7.2 1.2-29.4 4.6-27.4 20.4v0.4c5.8 37 16.2 73.2 30.8 107.6 23.4 55.4 57 105.2 99.8 148s92.6 76.2 148 99.8c57.4 24.2 118.4 36.6 181.2 36.6s123.8-12.4 181.2-36.6c55.4-23.4 105.2-57 148-99.8 0 0 2.4-2.4 3.8-3.8 4.4-5.4 8.6-14.4-10.2-33z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "500px", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 428, - "paths": [ - "M704 288c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96zM958.392 129.608c-87.478-87.476-229.306-87.476-316.786 0-35.578 35.578-56.684 80.146-63.322 126.392v0l-204.694 310.228c-27.506 1.41-54.776 8.416-79.966 21.016l-157.892-123.424c-36.55-28.574-89.342-22.102-117.912 14.448-28.572 36.55-22.102 89.342 14.448 117.912l155.934 121.892c-16.96 66.782 0.672 140.538 52.93 192.794 78.906 78.904 206.832 78.904 285.736 0 48.466-48.466 67.15-115.428 56.076-178.166l249.054-222.986c46.248-6.638 90.816-27.744 126.394-63.322 87.478-87.476 87.478-229.306 0-316.784zM384 902.698c-74.39 0-134.698-60.304-134.698-134.698 0-0.712 0.042-1.414 0.054-2.124l66.912 52.304c15.36 12.006 33.582 17.824 51.674 17.824 24.962 0 49.672-11.080 66.238-32.272 28.572-36.55 22.102-89.342-14.448-117.912l-63.5-49.636c8.962-1.878 18.248-2.88 27.768-2.88 74.392 0 134.698 60.304 134.698 134.698s-60.306 134.696-134.698 134.696zM800 448c-88.366 0-160-71.634-160-160s71.634-160 160-160 160 71.634 160 160-71.634 160-160 160z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "steam", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 429, - "paths": [ - "M303.922 836.010c27.144 0 53.786-13.136 69.972-37.416 25.734-38.602 15.302-90.754-23.298-116.488l-66.074-44.048c11.308-3.080 23.194-4.756 35.478-4.756 74.392 0 134.696 60.304 134.696 134.698s-60.306 134.698-134.698 134.698c-72.404 0-131.444-57.132-134.548-128.774l71.954 47.968c14.322 9.548 30.506 14.118 46.518 14.118zM853.34 0c93.876 0 170.66 76.812 170.66 170.688v682.628c0 93.936-76.784 170.684-170.66 170.684h-682.652c-93.876 0-170.688-76.75-170.688-170.682v-203.028l121.334 80.888c-11.652 63.174 6.938 130.83 55.798 179.69 78.904 78.904 206.83 78.904 285.736 0 48.468-48.466 67.15-115.43 56.076-178.166l249.056-222.988c46.248-6.638 90.816-27.744 126.394-63.322 87.476-87.476 87.476-229.306 0-316.784-87.48-87.478-229.308-87.478-316.786 0-35.578 35.578-56.684 80.146-63.322 126.392v0l-204.694 310.23c-31.848 1.632-63.378 10.764-91.726 27.392l-217.866-145.244v-277.69c0-93.876 76.81-170.688 170.686-170.688h682.654zM896 288c0-88.366-71.634-160-160-160s-160 71.634-160 160 71.634 160 160 160 160-71.634 160-160zM640 288c0-53.020 42.98-96 96-96s96 42.98 96 96-42.98 96-96 96-96-42.98-96-96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "steam", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 430, - "paths": [ - "M736 32l-224 192 288 192 224-192z", - "M512 224l-224-192-288 192 224 192z", - "M800 416l224 192-288 160-224-192z", - "M512 576l-288-160-224 192 288 160z", - "M728.156 845.57l-216.156-185.278-216.158 185.278-135.842-75.468v93.898l352 160 352-160v-93.898z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "dropbox", - "brand" - ], - "grid": 16 - }, - { - "id": 431, - "paths": [ - "M350.868 828.388c-60.274-15.060-93.856-62.97-93.962-134.064-0.032-22.726 1.612-33.62 7.286-48.236 13.908-35.834 50.728-62.872 99.176-72.822 24.11-4.95 31.536-10.266 31.536-22.572 0-3.862 2.872-15.36 6.378-25.552 15.932-46.306 45.43-84.91 76.948-100.702 32.99-16.526 49.642-20.254 89.548-20.040 56.674 0.304 84.952 12.598 124.496 54.128l21.75 22.842 19.484-6.742c94.3-32.636 188.306 22.916 195.888 115.756l2.072 25.398 18.57 6.65c53.032 19.004 77.96 58.904 73.442 117.556-2.958 38.358-20.89 68.98-49.3 84.184l-13.356 7.146-296.822 0.57c-228.094 0.44-300.6-0.368-313.134-3.5v0zM103.218 785.966c-36.176-9.086-74.506-42.854-92.48-81.47-10.196-21.906-10.738-25.128-10.738-63.88 0-36.864 0.87-42.778 8.988-61.080 17.11-38.582 49.894-66.46 91.030-77.408 8.684-2.312 16.842-6 18.128-8.196 1.29-2.198 2.722-14.164 3.182-26.592 2.866-77.196 50.79-145.214 117.708-167.056 36.154-11.8 83.572-12.898 122.896 3.726 12.47 5.274 11.068 6.404 37.438-30.14 15.594-21.612 45.108-44.49 70.9-58.18 27.838-14.776 56.792-21.584 91.412-21.494 96.768 0.252 180.166 64.22 211.004 161.848 9.854 31.192 9.362 39.926-2.26 40.184-5.072 0.112-19.604 3.064-32.292 6.558l-23.072 6.358-21.052-22.25c-59.362-62.734-156.238-76.294-238.592-33.396-32.9 17.138-59.34 41.746-79.31 73.81-14.236 22.858-32.39 65.504-32.39 76.094 0 7.51-5.754 11.264-30.332 19.782-76.094 26.376-120.508 87.282-120.476 165.218 0.010 28.368 6.922 63.074 16.52 82.956 3.618 7.494 5.634 14.622 4.484 15.836-2.946 3.106-97.608 2.060-110.696-1.228v0z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "onedrive", - "brand", - "skydrive" - ], - "grid": 16 - }, - { - "id": 432, - "paths": [ - "M512.008 12.642c-282.738 0-512.008 229.218-512.008 511.998 0 226.214 146.704 418.132 350.136 485.836 25.586 4.738 34.992-11.11 34.992-24.632 0-12.204-0.48-52.542-0.696-95.324-142.448 30.976-172.504-60.41-172.504-60.41-23.282-59.176-56.848-74.916-56.848-74.916-46.452-31.778 3.51-31.124 3.51-31.124 51.4 3.61 78.476 52.766 78.476 52.766 45.672 78.27 119.776 55.64 149.004 42.558 4.588-33.086 17.852-55.68 32.506-68.464-113.73-12.942-233.276-56.85-233.276-253.032 0-55.898 20.004-101.574 52.76-137.428-5.316-12.9-22.854-64.972 4.952-135.5 0 0 43.006-13.752 140.84 52.49 40.836-11.348 84.636-17.036 128.154-17.234 43.502 0.198 87.336 5.886 128.256 17.234 97.734-66.244 140.656-52.49 140.656-52.49 27.872 70.528 10.35 122.6 5.036 135.5 32.82 35.856 52.694 81.532 52.694 137.428 0 196.654-119.778 239.95-233.79 252.624 18.364 15.89 34.724 47.046 34.724 94.812 0 68.508-0.596 123.644-0.596 140.508 0 13.628 9.222 29.594 35.172 24.566 203.322-67.776 349.842-259.626 349.842-485.768 0-282.78-229.234-511.998-511.992-511.998z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "github", - "brand", - "octacat", - "social" - ], - "grid": 16 - }, - { - "id": 433, - "paths": [ - "M0 0v1024h1024v-1024h-1024zM832 832h-128v-512h-192v512h-320v-640h640v640z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "npm", - "brand" - ], - "grid": 16 - }, - { - "id": 434, - "paths": [ - "M512 106.6c-186.8 0-330.8 156.4-412.4 309.6-46 86.2-78.2 180.6-93 277.2-1.6 11-3.2 22-4.4 33.2-0.6 6-1.2 12-1.6 18-0.6 7.6-0.2 10 3.8 16.4 12 19.4 26.2 37.4 42.2 53.6 32.8 33.6 72.6 59.4 114.8 79.4 96.2 45.4 204.8 61.8 310.4 65.4 109 3.6 221-5.4 325.2-39.4 89-29 174.8-79.6 224.2-161.4 5.4-8.8 1.6-21.8 0.6-32-1.2-12.2-2.8-24.2-4.8-36.2-3.6-23.6-8.4-46.8-14.2-70-11.6-47.2-27.4-93.6-46.6-138.2-69.6-161.6-198.4-334-381.6-369.6-20.6-4-41.6-6-62.6-6zM518.4 890.2c-114.2 0-238.6-10.2-341.4-65.2-40-21.4-80.8-52.4-100-95-5.6-12.4-3.6-17.2-1-31.8 1.8-9.4 2.6-18.6 6.8-27.4 5.8-12.2 11.8-24.2 18-36.2 21-40.6 43.6-80.8 69.8-118.6 13-18.6 26.8-37 42.8-53 11.2-11.2 24.8-23.2 40.6-27 48.4-11.6 85.4 44.4 114.8 72.6 14.2 13.6 33.2 29 54.4 26.4 14.6-1.8 27.6-13.2 38-22.6 35.4-31.8 63.8-71.2 93.2-108.2 14.6-18.2 29-36.6 44.8-54 10.6-11.8 22.2-25.2 36.4-32.8 25.4-13.8 57.8 14.6 75.4 29.2 30 25 56.6 54.2 82 83.8 24.2 28.2 47.6 56.8 68.2 87.8 31.8 48 59.4 99.2 84.6 151 5.4 11.2 7.2 18.8 9.2 31.2 1.2 6.8 3.8 14.6 2.8 21.6-1.4 9.8-8.2 20.4-13.2 28.4-12 19-28.2 35.4-46 49.2-74.6 57.8-175.6 77-267.4 85.6-37.6 3.6-75.2 5-112.8 5z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "basecamp", - "brand" - ], - "grid": 16 - }, - { - "id": 435, - "paths": [ - "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM448 768c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-512c0-35.2 28.8-64 64-64h128c35.2 0 64 28.8 64 64v512zM832 576c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-320c0-35.2 28.8-64 64-64h128c35.2 0 64 28.8 64 64v320z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "trello", - "brand" - ], - "grid": 16 - }, - { - "id": 436, - "paths": [ - "M128 511.992c0 148.026 88.322 275.968 216.43 336.578l-183.178-488.784c-21.308 46.508-33.252 97.982-33.252 152.206zM771.228 493.128c0-46.234-17.054-78.236-31.654-103.142-19.458-30.82-37.72-56.894-37.72-87.716 0-34.374 26.766-66.376 64.486-66.376 1.704 0 3.32 0.204 4.976 0.302-68.316-60.97-159.34-98.196-259.308-98.196-134.16 0-252.186 67.046-320.844 168.568 9.010 0.282 17.506 0.454 24.712 0.454 40.154 0 102.34-4.752 102.34-4.752 20.69-1.182 23.132 28.434 2.458 30.822 0 0-20.81 2.368-43.952 3.55l139.834 405.106 84.044-245.456-59.822-159.65c-20.688-1.184-40.278-3.55-40.278-3.55-20.702-1.192-18.272-32.002 2.438-30.822 0 0 63.4 4.752 101.134 4.752 40.146 0 102.35-4.752 102.35-4.752 20.702-1.182 23.14 28.434 2.446 30.822 0 0-20.834 2.372-43.948 3.55l138.78 402.018 38.312-124.632c16.58-51.75 29.216-88.9 29.216-120.9zM518.742 544.704l-115.226 326.058c34.416 9.858 70.794 15.238 108.488 15.238 44.716 0 87.604-7.518 127.518-21.2-1.018-1.602-1.974-3.304-2.75-5.154l-118.030-314.942zM848.962 332.572c1.652 11.91 2.588 24.686 2.588 38.458 0 37.93-7.292 80.596-29.202 133.95l-117.286 330.272c114.162-64.828 190.938-185.288 190.938-323.258 0-65.030-17.060-126.16-47.038-179.422zM512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 960c-247.424 0-448-200.576-448-448s200.576-448 448-448 448 200.576 448 448-200.576 448-448 448z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "wordpress", - "brand", - "social", - "cms" - ], - "grid": 16 - }, - { - "id": 437, - "paths": [ - "M266.004 276.678c32.832-32.844 86.002-32.844 118.804-0.032l7.826 7.868 101.104-101.156-7.874-7.88c-57.624-57.7-138.514-77.878-212.42-60.522-10.594-65.182-67.088-114.924-135.174-114.956-75.65 0-136.954 61.442-136.97 137.158 0 65.336 45.59 120 106.662 133.83-23.138 77.45-4.242 164.834 56.846 225.984l227.826 227.9 100.996-101.214-227.81-227.886c-32.682-32.722-32.742-86.126 0.184-119.094zM1022.712 137.158c0.016-75.762-61.318-137.158-136.984-137.158-69.234 0-126.478 51.444-135.682 118.238-77.074-22.664-163.784-3.496-224.64 57.408l-227.84 227.9 101.102 101.172 227.766-227.856c32.94-32.966 85.988-32.906 118.684-0.184 32.8 32.83 32.8 86.114-0.032 118.956l-7.794 7.836 101.010 101.248 7.858-7.928c60.458-60.566 79.678-146.756 57.612-223.638 67.15-8.834 118.94-66.364 118.94-135.994zM906.266 751.064c18.102-74.458-1.976-156.324-60.108-214.5l-227.49-227.992-101.102 101.122 227.52 228.012c32.94 32.996 32.864 86.096 0.184 118.848-32.802 32.814-86.004 32.814-118.836-0.030l-7.766-7.79-100.994 101.246 7.732 7.728c61.516 61.594 149.618 80.438 227.368 56.488 12.632 62.682 67.934 109.804 134.258 109.804 75.604 0 136.968-61.35 136.968-137.126 0-69.2-51.18-126.456-117.734-135.81zM612.344 528.684l-227.536 227.992c-32.71 32.768-86.034 32.828-118.944-0.124-32.818-32.904-32.832-86.098-0.044-118.97l7.808-7.774-101.086-101.124-7.734 7.712c-58.76 58.802-78.56 141.834-59.45 216.982-60.398 14.26-105.358 68.634-105.358 133.496-0.016 75.746 61.332 137.126 136.982 137.126 65.1-0.032 119.588-45.418 133.54-106.382 74.702 18.552 156.998-1.304 215.344-59.756l227.49-227.96-101.012-101.218z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "joomla", - "brand", - "cms" - ], - "grid": 16 - }, - { - "id": 438, - "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM824.636 589.598c-36.798 142.716-165.358 242.402-312.63 242.402-147.282 0-275.85-99.686-312.654-242.42-6.232-24.158 8.352-48.886 32.512-55.124 3.71-0.958 7.528-1.446 11.338-1.446 20.624 0 38.628 13.972 43.788 33.976 26.512 102.748 119.042 174.51 225.014 174.51 105.978 0 198.502-71.76 225-174.51 5.152-20.006 23.15-33.982 43.766-33.982 3.822 0 7.65 0.49 11.376 1.456 11.692 3.016 21.526 10.418 27.668 20.842 6.142 10.416 7.854 22.596 4.822 34.296z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "ello", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 439, - "paths": [ - "M957.796 384h-57.406c-35.166 0-65.988-29.742-68.39-64v0c0.004-182.668-147.258-320-331.19-320h-167.824c-183.812 0-332.856 148-332.986 330.666v362.798c0 182.654 149.174 330.536 332.984 330.536h358.42c183.948 0 332.596-147.882 332.596-330.536v-234.382c0-36.502-29.44-75.082-66.204-75.082zM320 256h192c35.2 0 64 28.8 64 64s-28.8 64-64 64h-192c-35.2 0-64-28.8-64-64s28.8-64 64-64zM704 768h-384c-35.2 0-64-28.8-64-64s28.8-64 64-64h384c35.2 0 64 28.8 64 64s-28.8 64-64 64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "blogger", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 440, - "paths": [ - "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM896 648c0 137-111.4 248-249.4 248h-268.8c-138 0-249.8-111-249.8-248v-272c0-137 111.8-248 249.8-248h125.8c138 0 248.4 103 248.4 240 1.8 25.6 25 48 51.2 48h43c27.6 0 49.6 29 49.6 56.4v175.6z", - "M704 640c0 35.2-28.8 64-64 64h-256c-35.2 0-64-28.8-64-64v0c0-35.2 28.8-64 64-64h256c35.2 0 64 28.8 64 64v0z", - "M576 384c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v0c0-35.2 28.8-64 64-64h128c35.2 0 64 28.8 64 64v0z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "blogger", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 441, - "paths": [ - "M576.032 448l-0.002 234.184c0 59.418-0.77 93.656 5.53 110.5 6.25 16.754 21.918 34.146 38.99 44.202 22.684 13.588 48.542 20.376 77.708 20.376 51.854 0 82.478-6.848 133.742-40.54v153.944c-43.7 20.552-81.866 32.594-117.324 40.922-35.5 8.242-73.86 12.406-115.064 12.406-46.828 0-74.456-5.886-110.41-17.656-35.958-11.868-66.66-28.806-92.020-50.54-25.45-21.922-43.022-45.208-52.848-69.832-9.826-24.636-14.716-60.414-14.716-107.244v-359.1h-137.426v-145.006c40.208-13.042 85.164-31.788 113.78-56.152 28.754-24.45 51.766-53.706 69.106-87.944 17.392-34.146 29.348-77.712 35.872-130.516h165.084l-0.002 255.996h255.968v192h-255.968z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "tumblr", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 442, - "paths": [ - "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM731.8 824.6c-30.2 14.2-57.6 24.2-82 30-24.4 5.6-51 8.6-79.4 8.6-32.4 0-51.4-4-76.2-12.2s-46-19.8-63.6-34.8c-17.6-15.2-29.6-31.2-36.4-48.2s-10.2-41.6-10.2-74v-247.8h-96v-100c27.8-9 60-22 79.6-38.8 19.8-16.8 35.8-37 47.6-60.6 12-23.6 20.2-53.6 24.8-90h100.4v163.2h163.6v126.2h-163.4v181.2c0 41-0.6 64.6 3.8 76.2s15.2 23.6 27 30.4c15.6 9.4 33.6 14 53.6 14 35.8 0 71.4-11.6 106.8-34.8v111.4z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "tumblr", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 443, - "paths": [ - "M568.2 589v0c112.6-197.6 298.6-520 349.6-589-22.4 15-56.8 22.6-88.4 29.8l-47.8-29.8c-38.4 71.6-180 303-270.2 451.2-91.4-151.4-199.6-326.2-270.2-451.2-56 12-79.2 12.6-135 0v0 0c0 0 0 0 0 0v0c110.8 166.8 288.2 484.6 348.6 589v0l-8.2 435 64.8-29.8v-0.8l64.8 30.6-8-435z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "yahoo", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 444, - "paths": [ - "M513.2 69.6c-181 0-352-23.8-513.2-69.6 0 361.8 0 933.2 0 1024 161.4-45.8 332.4-69.6 513.2-69.6 178.8 0 349.4 23.2 510.8 69.6 0-348.4 0-649.8 0-1024-161.4 46.4-331.8 69.6-510.8 69.6zM796.8 157l-6.2 9.8c-5.8 9.2-11 17-18.2 28-9.6 14.4-27.6 43-49.2 79.8-6 10.2-13.4 22.4-21 35.6-14.6 24.6-31 52.4-44 74.4-5.4 9.4-10.8 19-16.4 28.6-14.4 25-29.2 50.8-43.4 75.6-14.6 25.8-29 51.2-43.4 76.4v25.4c0 35.2 0.8 73.6 2 107.8 0.6 15.6 1.2 43.4 2 72.8 0.8 35 1.6 71.2 2.6 89.6l0.2 5.6v0.6l-6-1.6c-2.4-0.6-4.6-1.2-7-1.8-7.2-1.6-15-2.8-22.6-3.6-4.6-0.4-9.4-0.6-14.2-0.6 0 0 0 0 0 0s0 0 0 0c-4.8 0-9.6 0.2-14.2 0.6-7.6 0.8-15.4 2-22.6 3.6-2.4 0.6-4.8 1.2-7 1.8l-6 1.6v-0.6l0.2-5.6c0.8-18.2 1.8-54.6 2.6-89.6 0.6-29.4 1.4-57.2 2-72.8 1.4-34.4 2-72.6 2-107.8v-25.4c-14.4-25.4-28.8-50.6-43.4-76.4-14.2-25-29-50.6-43.2-75.6-5.6-9.6-11-19.2-16.4-28.6-12.8-22.2-29.4-50-44-74.4-7.8-13-15.2-25.4-21-35.6-21.6-36.8-39.6-65.2-49.2-79.8-7.2-11-12.4-18.8-18.2-28l-6.2-9.8 11.2 3.2c14.2 4 28.8 6 44.4 6s30.6-2 44.6-6l3.4-1 1.8 3c27.6 49.8 101.8 171.8 146.2 244.8 15.2 25.2 27.4 45 33.4 55.2 0 0 0 0 0-0.2 0 0 0 0 0 0.2 6-10 18.2-30 33.4-55.2 44.4-72.8 118.6-194.8 146.2-244.8l1.8-3 3.4 1c14 4 29 6 44.6 6s30.2-2 44.4-6l10.6-3.2z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "yahoo" - ], - "grid": 16 - }, - { - "id": 445, - "paths": [ - "M567.656 736.916c-81.944 38.118-158.158 37.716-209.34 34.020-61.052-4.41-110.158-21.124-131.742-35.732-13.3-9.006-31.384-5.522-40.39 7.782-9.004 13.302-5.52 31.386 7.782 40.39 34.698 23.486 96.068 40.954 160.162 45.58 10.866 0.784 22.798 1.278 35.646 1.278 55.782 0 126.626-5.316 202.42-40.57 14.564-6.778 20.878-24.074 14.104-38.64-6.776-14.566-24.076-20.872-38.642-14.108zM890.948 693.816c2.786-252.688 28.762-730.206-454.97-691.612-477.6 38.442-350.964 542.968-358.082 711.95-6.308 89.386-35.978 198.648-77.896 309.846h129.1c13.266-47.122 23.024-93.72 27.232-138.15 7.782 5.428 16.108 10.674 24.994 15.7 14.458 8.518 26.884 19.844 40.040 31.834 30.744 28.018 65.59 59.774 133.712 63.752 4.572 0.262 9.174 0.394 13.676 0.394 68.896 0 116.014-30.154 153.878-54.382 18.14-11.612 33.818-21.64 48.564-26.452 41.91-13.12 78.532-34.296 105.904-61.252 4.276-4.208 8.242-8.538 11.962-12.948 15.246 55.878 36.118 118.758 59.288 181.504h275.65c-66.174-102.224-134.436-202.374-133.052-330.184zM124.11 556.352c0-0.016 0-0.030-0.002-0.046-4.746-82.462 34.71-151.832 88.126-154.936 53.412-3.106 100.56 61.228 105.304 143.692 0 0.014 0.004 0.030 0.004 0.044 0.256 4.446 0.368 8.846 0.37 13.206-16.924 4.256-32.192 10.436-45.872 17.63-0.052-0.612-0.092-1.216-0.152-1.83 0-0.008 0-0.018 0-0.026-4.57-46.81-29.572-82.16-55.852-78.958-26.28 3.204-43.88 43.75-39.312 90.558 0 0.010 0.004 0.018 0.004 0.026 1.992 20.408 7.868 38.636 16.042 52.444-2.034 1.604-7.784 5.812-14.406 10.656-4.97 3.634-11.020 8.058-18.314 13.43-19.882-26.094-33.506-63.58-35.94-105.89zM665.26 760.178c-1.9 43.586-58.908 84.592-111.582 101.044l-0.296 0.096c-21.9 7.102-41.428 19.6-62.104 32.83-34.732 22.224-70.646 45.208-122.522 45.208-3.404 0-6.894-0.104-10.326-0.296-47.516-2.778-69.742-23.032-97.88-48.676-14.842-13.526-30.19-27.514-49.976-39.124l-0.424-0.244c-42.706-24.104-69.212-54.082-70.908-80.194-0.842-12.98 4.938-24.218 17.182-33.4 26.636-19.972 44.478-33.022 56.284-41.658 13.11-9.588 17.068-12.48 20-15.264 2.096-1.986 4.364-4.188 6.804-6.562 24.446-23.774 65.36-63.562 128.15-63.562 38.404 0 80.898 14.8 126.17 43.902 21.324 13.878 39.882 20.286 63.38 28.4 16.156 5.578 34.468 11.902 58.992 22.404l0.396 0.164c22.88 9.404 49.896 26.564 48.66 54.932zM652.646 657.806c-4.4-2.214-8.974-4.32-13.744-6.286-22.106-9.456-39.832-15.874-54.534-20.998 8.116-15.894 13.16-35.72 13.624-57.242 0-0.010 0-0.022 0-0.030 1.126-52.374-25.288-94.896-58.996-94.976-33.71-0.078-61.95 42.314-63.076 94.686 0 0.010 0 0.018 0 0.028-0.038 1.714-0.042 3.416-0.020 5.11-20.762-9.552-41.18-16.49-61.166-20.76-0.092-1.968-0.204-3.932-0.244-5.92 0-0.016 0-0.036 0-0.050-1.938-95.412 56.602-174.39 130.754-176.402 74.15-2.014 135.828 73.7 137.772 169.11 0 0.018 0 0.038 0 0.052 0.874 43.146-10.66 82.866-30.37 113.678z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "tux", - "brand", - "linux" - ], - "grid": 16 - }, - { - "id": 446, - "paths": [ - "M791.498 544.092c-1.294-129.682 105.758-191.876 110.542-194.966-60.152-88.020-153.85-100.078-187.242-101.472-79.742-8.074-155.596 46.948-196.066 46.948-40.368 0-102.818-45.754-168.952-44.552-86.916 1.292-167.058 50.538-211.812 128.38-90.304 156.698-23.126 388.84 64.89 515.926 43.008 62.204 94.292 132.076 161.626 129.58 64.842-2.588 89.362-41.958 167.756-41.958s100.428 41.958 169.050 40.67c69.774-1.296 113.982-63.398 156.692-125.796 49.39-72.168 69.726-142.038 70.924-145.626-1.548-0.706-136.060-52.236-137.408-207.134zM662.562 163.522c35.738-43.358 59.86-103.512 53.28-163.522-51.478 2.096-113.878 34.29-150.81 77.55-33.142 38.376-62.148 99.626-54.374 158.436 57.466 4.484 116.128-29.204 151.904-72.464z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "apple", - "brand" - ], - "grid": 16 - }, - { - "id": 447, - "paths": [ - "M569.226 778.256c-0.002-0.044-0.002-0.088-0.004-0.132 0.002 0.044 0.002 0.088 0.004 0.132z", - "M570.596 814.538c-0.012-0.234-0.022-0.466-0.032-0.702 0.010 0.234 0.020 0.466 0.032 0.702z", - "M569.814 796.312c-0.006-0.178-0.012-0.356-0.020-0.536 0.010 0.182 0.016 0.358 0.020 0.536z", - "M960 0h-896c-35.2 0-64 28.8-64 64v896c0 35.2 28.8 64 64 64h493.832c0.044 0 0.088 0.006 0.132 0.006 0.042 0 0.084-0.006 0.126-0.006h401.91c35.2 0 64-28.8 64-64v-896c0-35.2-28.8-64-64-64zM192 224c0-17.672 14.328-32 32-32s32 14.328 32 32v64c0 17.672-14.328 32-32 32s-32-14.328-32-32v-64zM960 960h-375.058c-6.7-42.082-10.906-85.476-13.388-127.604 0.006 0.116 0.010 0.228 0.018 0.344-19.696 2.146-39.578 3.26-59.572 3.26-133.65 0-262.382-48.656-362.484-137.006-14.906-13.156-16.326-35.906-3.168-50.812 13.158-14.904 35.906-16.326 50.814-3.168 86.936 76.728 198.748 118.986 314.838 118.986 19.086 0 38.052-1.166 56.816-3.416-2.192-118.194 6.876-211.914 7.026-213.404 0.898-8.996-2.050-17.952-8.118-24.654-6.066-6.702-14.682-10.526-23.724-10.526h-95.174c1.384-34.614 5.082-93.814 14.958-160.188 18.864-126.76 51.994-225.77 96.152-287.812h400.064v896z", - "M800 320c-17.674 0-32-14.328-32-32v-64c0-17.672 14.326-32 32-32s32 14.328 32 32v64c0 17.672-14.326 32-32 32z", - "M540.496 835.232c-3.646 0.192-7.298 0.336-10.956 0.454 3.658-0.116 7.31-0.264 10.956-0.454z", - "M512 836c4.692 0 9.374-0.074 14.050-0.196-4.676 0.122-9.358 0.196-14.050 0.196z", - "M539.074 763.202c0.784-0.044 1.568-0.084 2.352-0.132-0.782 0.048-1.568 0.088-2.352 0.132z", - "M525.084 763.8c1.074-0.030 2.146-0.072 3.218-0.11-1.072 0.038-2.144 0.082-3.218 0.11z", - "M877.65 648.182c-13.156-14.91-35.908-16.322-50.812-3.168-72.642 64.114-162.658 104.136-258.022 115.57 0.43 23.278 1.294 47.496 2.754 72.156 111.954-12.21 217.786-58.614 302.912-133.746 14.908-13.156 16.326-35.906 3.168-50.812z", - "M571.498 832.748c-4.606 0.5-9.222 0.936-13.848 1.322 4.626-0.384 9.244-0.822 13.848-1.322z", - "M555.488 834.242c-3.906 0.312-7.822 0.576-11.742 0.806 3.92-0.226 7.834-0.496 11.742-0.806z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "finder", - "brand", - "mac", - "os" - ], - "grid": 16 - }, - { - "id": 448, - "paths": [ - "M896 384c-35.2 0-64 28.8-64 64v256c0 35.2 28.8 64 64 64s64-28.8 64-64v-256c0-35.2-28.8-64-64-64zM128 384c-35.2 0-64 28.8-64 64v256c0 35.2 28.8 64 64 64s64-28.8 64-64v-256c0-35.2-28.802-64-64-64zM224 736c0 53.020 42.98 96 96 96v0 128c0 35.2 28.8 64 64 64s64-28.8 64-64v-128h128v128c0 35.2 28.8 64 64 64s64-28.8 64-64v-128c53.020 0 96-42.98 96-96v-352h-576v352z", - "M798.216 320.002c-9.716-87.884-59.004-163.792-129.62-209.646l32.024-64.046c7.904-15.806 1.496-35.028-14.31-42.932s-35.030-1.496-42.932 14.312l-32.142 64.286-8.35-3.316c-28.568-9.502-59.122-14.66-90.886-14.66-31.762 0-62.316 5.158-90.888 14.656l-8.348 3.316-32.142-64.282c-7.904-15.808-27.128-22.212-42.932-14.312-15.808 7.904-22.214 27.126-14.312 42.932l32.022 64.046c-70.616 45.852-119.904 121.762-129.622 209.644v32h574.222v-31.998h-1.784zM416 256c-17.674 0-32-14.328-32-32 0-17.648 14.288-31.958 31.93-31.996 0.032 0 0.062 0.002 0.094 0.002 0.018 0 0.036-0.002 0.052-0.002 17.638 0.042 31.924 14.35 31.924 31.996 0 17.672-14.326 32-32 32zM608 256c-17.674 0-32-14.328-32-32 0-17.646 14.286-31.954 31.924-31.996 0.016 0 0.034 0.002 0.050 0.002 0.032 0 0.064-0.002 0.096-0.002 17.64 0.038 31.93 14.348 31.93 31.996 0 17.672-14.326 32-32 32z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "android", - "brand", - "os", - "mobile" - ], - "grid": 16 - }, - { - "id": 449, - "paths": [ - "M412.23 511.914c-47.708-24.518-94.086-36.958-137.88-36.958-5.956 0-11.952 0.18-17.948 0.708-55.88 4.624-106.922 19.368-139.75 30.828-8.708 3.198-17.634 6.576-26.83 10.306l-89.822 311.394c61.702-22.832 116.292-33.938 166.27-33.938 80.846 0 139.528 30.208 187.992 61.304 22.962-77.918 78.044-266.090 94.482-322.324-11.95-7.284-24.076-14.57-36.514-21.32zM528.348 591.070l-90.446 314.148c26.832 15.372 117.098 64.050 186.212 64.050 55.792 0 118.252-14.296 190.834-43.792l86.356-301.976c-58.632 18.922-114.876 28.52-167.464 28.52-95.95 0-163.114-31.098-205.492-60.95zM292.822 368.79c77.118 0.798 134.152 30.208 181.416 60.502l92.752-317.344c-19.546-11.196-70.806-39.094-107.858-48.6-24.386-5.684-50.020-8.616-77.204-8.616-51.796 0.976-108.388 13.946-172.888 39.8l-88.44 310.596c64.808-24.436 120.644-36.34 172.086-36.34 0.046 0.002 0.136 0.002 0.136 0.002zM1024 198.124c-58.814 22.832-116.208 34.466-171.028 34.466-91.686 0-159.292-31.802-203.094-62.366l-91.95 318.236c61.746 39.708 128.29 59.878 198.122 59.878 56.948 0 115.94-13.68 175.462-40.688l-0.182-2.222 3.734-0.886 88.936-306.418z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "windows", - "brand", - "os" - ], - "grid": 16 - }, - { - "id": 450, - "paths": [ - "M0.35 512l-0.35-312.074 384-52.144v364.218zM448 138.482l511.872-74.482v448h-511.872zM959.998 576l-0.126 448-511.872-72.016v-375.984zM384 943.836l-383.688-52.594-0.020-315.242h383.708z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "windows8", - "brand", - "os" - ], - "grid": 16 - }, - { - "id": 451, - "paths": [ - "M891.96 514.204c-18.086 0-35.348 3.52-51.064 9.856-10.506-114.358-110.29-204.060-232-204.060-29.786 0-58.682 5.63-84.318 15.164-9.96 3.702-12.578 7.52-12.578 14.916v402.714c0 7.766 6.24 14.234 14.124 14.996 0.336 0.034 363.536 0.21 365.89 0.21 72.904 0 131.986-56.816 131.986-126.894s-59.134-126.902-132.040-126.902zM400 768h32l16-224.22-16-223.78h-32l-16 223.78zM304 768h-32l-16-162.75 16-157.25h32l16 160zM144 768h32l16-128-16-128h-32l-16 128zM16 704h32l16-64-16-64h-32l-16 64z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "soundcloud", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 452, - "paths": [ - "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM176 704h-32l-16-96 16-96h32l16 96-16 96zM304 704h-32l-16-128 16-128h32l16 128-16 128zM432 704h-32l-16-192 16-192h32l16 192-16 192zM825.2 704c-2 0-301.2-0.2-301.4-0.2-6.4-0.6-11.6-6.2-11.8-12.8v-345.2c0-6.4 2.2-9.6 10.4-12.8 21.2-8.2 45-13 69.6-13 100.2 0 182.4 76.8 191.2 175 13-5.4 27.2-8.4 42-8.4 60 0 108.8 48.8 108.8 108.8s-48.8 108.6-108.8 108.6z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "soundcloud", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 453, - "paths": [ - "M425.6 37.4c-1.6-1-3.4-1.8-5-2.6-1.8 0.4-3.4 0.6-5.2 1l10.2 1.6z", - "M36.8 421c-0.4 1.8-0.6 3.6-0.8 5.2 1 1.6 1.6 3.2 2.6 4.8l-1.8-10z", - "M986.8 602.6c0.4-1.8 0.6-3.6 1-5.4-1-1.6-1.6-3.2-2.6-4.8l1.6 10.2z", - "M592 983c1.6 1 3.4 1.8 5 2.6 1.8-0.4 3.6-0.6 5.4-0.8l-10.4-1.8z", - "M987.8 597.2c-0.4 1.8-0.6 3.6-1 5.4l-1.8-10.4c1 1.8 1.8 3.4 2.8 5 5.2-28.8 8-58.2 8-87.6 0-65.2-12.8-128.6-38-188.2-24.4-57.6-59.2-109.4-103.6-153.8s-96.2-79.2-153.6-103.6c-59.6-25.2-123-38-188.2-38-30.8 0-61.6 2.8-91.6 8.6 0 0-0.2 0-0.2 0 1.6 0.8 3.4 1.6 5 2.6l-10.2-1.6c1.8-0.4 3.4-0.6 5.2-1-41.2-21.8-87.4-33.6-134.2-33.6-76.4 0-148.4 29.8-202.4 83.8s-83.8 126-83.8 202.4c0 48.6 12.6 96.6 36 138.8 0.4-1.8 0.6-3.6 0.8-5.2l1.8 10.2c-1-1.6-1.8-3.2-2.6-4.8-4.8 27.4-7.2 55.4-7.2 83.4 0 65.2 12.8 128.6 38 188.2 24.4 57.6 59.2 109.2 103.6 153.6s96.2 79.2 153.8 103.6c59.6 25.2 123 38 188.2 38 28.4 0 56.8-2.6 84.6-7.6-1.6-1-3.2-1.8-5-2.6l10.4 1.8c-1.8 0.4-3.6 0.6-5.4 0.8 42.8 24.2 91.4 37.2 140.8 37.2 76.4 0 148.4-29.8 202.4-83.8s83.8-126 83.8-202.4c-0.2-48.6-12.8-96.6-36.4-139.2zM514.2 805.8c-171.8 0-248.6-84.4-248.6-147.8 0-32.4 24-55.2 57-55.2 73.6 0 54.4 105.6 191.6 105.6 70.2 0 109-38.2 109-77.2 0-23.4-11.6-49.4-57.8-60.8l-152.8-38.2c-123-30.8-145.4-97.4-145.4-160 0-129.8 122.2-178.6 237-178.6 105.8 0 230.4 58.4 230.4 136.4 0 33.4-29 52.8-62 52.8-62.8 0-51.2-86.8-177.6-86.8-62.8 0-97.4 28.4-97.4 69s49.6 53.6 92.6 63.4l113.2 25.2c123.8 27.6 155.2 100 155.2 168 0 105.4-81 184.2-244.4 184.2z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "skype", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 454, - "paths": [ - "M256 640c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM640 640c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM643.112 776.778c16.482-12.986 40.376-10.154 53.364 6.332s10.152 40.378-6.334 53.366c-45.896 36.158-115.822 59.524-178.142 59.524-62.322 0-132.248-23.366-178.144-59.522-16.486-12.99-19.32-36.882-6.332-53.368 12.99-16.482 36.882-19.318 53.366-6.332 26.422 20.818 78.722 43.222 131.11 43.222s104.688-22.404 131.112-43.222zM1024 512c0-70.692-57.308-128-128-128-48.116 0-89.992 26.57-111.852 65.82-65.792-35.994-145.952-59.246-233.28-64.608l76.382-171.526 146.194 42.2c13.152 37.342 48.718 64.114 90.556 64.114 53.020 0 96-42.98 96-96s-42.98-96-96-96c-36.56 0-68.342 20.442-84.554 50.514l-162.906-47.024c-18.224-5.258-37.538 3.722-45.252 21.052l-103.77 233.026c-85.138 5.996-163.262 29.022-227.636 64.236-21.864-39.25-63.766-65.804-111.882-65.804-70.692 0-128 57.308-128 128 0 52.312 31.402 97.254 76.372 117.102-8.070 24.028-12.372 49.104-12.372 74.898 0 176.73 200.576 320 448 320 247.422 0 448-143.27 448-320 0-25.792-4.3-50.862-12.368-74.886 44.97-19.85 76.368-64.802 76.368-117.114zM864 188c19.882 0 36 16.118 36 36s-16.118 36-36 36-36-16.118-36-36 16.118-36 36-36zM64 512c0-35.29 28.71-64 64-64 25.508 0 47.572 15.004 57.846 36.646-33.448 25.366-61.166 54.626-81.666 86.738-23.524-9.47-40.18-32.512-40.18-59.384zM512 948c-205.45 0-372-109.242-372-244s166.55-244 372-244c205.45 0 372 109.242 372 244s-166.55 244-372 244zM919.82 571.384c-20.5-32.112-48.218-61.372-81.666-86.738 10.276-21.642 32.338-36.646 57.846-36.646 35.29 0 64 28.71 64 64 0 26.872-16.656 49.914-40.18 59.384z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "reddit", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 455, - "paths": [ - "M0 0v1024h1024v-1024h-1024zM544 584v216h-64v-216l-175-328h72.6l134.4 252 134.4-252h72.6l-175 328z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "hackernews", - "brand", - "ycombinator", - "yc", - "social" - ], - "grid": 16 - }, - { - "id": 456, - "paths": [ - "M966.8 233.6c0 3.2-1 6.2-3 9-2 2.6-4.2 4-6.8 4-20 2-36.4 8.4-49 19.2-12.8 10.8-25.8 31.8-39.2 62.4l-206.4 465.4c-1.4 4.4-5.2 6.4-11.4 6.4-4.8 0-8.6-2.2-11.4-6.4l-115.8-242-133.2 242c-2.8 4.4-6.4 6.4-11.4 6.4-6 0-9.8-2.2-11.8-6.4l-202.6-465.2c-12.6-28.8-26-49-40-60.4s-33.6-18.6-58.6-21.2c-2.2 0-4.2-1.2-6-3.4-2-2.2-2.8-4.8-2.8-7.8 0-7.6 2.2-11.4 6.4-11.4 18 0 37 0.8 56.8 2.4 18.4 1.6 35.6 2.4 51.8 2.4 16.4 0 36-0.8 58.4-2.4 23.4-1.6 44.2-2.4 62.4-2.4 4.4 0 6.4 3.8 6.4 11.4s-1.4 11.2-4 11.2c-18 1.4-32.4 6-42.8 13.8s-15.6 18-15.6 30.8c0 6.4 2.2 14.6 6.4 24.2l167.4 378.4 95.2-179.6-88.6-185.8c-16-33.2-29-54.6-39.2-64.2s-25.8-15.4-46.6-17.6c-2 0-3.6-1.2-5.4-3.4s-2.6-4.8-2.6-7.8c0-7.6 1.8-11.4 5.6-11.4 18 0 34.6 0.8 49.8 2.4 14.6 1.6 30 2.4 46.6 2.4 16.2 0 33.2-0.8 51.4-2.4 18.6-1.6 37-2.4 55-2.4 4.4 0 6.4 3.8 6.4 11.4s-1.2 11.2-4 11.2c-36.2 2.4-54.2 12.8-54.2 30.8 0 8 4.2 20.6 12.6 37.6l58.6 119 58.4-108.8c8-15.4 12.2-28.4 12.2-38.8 0-24.8-18-38-54.2-39.6-3.2 0-4.8-3.8-4.8-11.2 0-2.8 0.8-5.2 2.4-7.6s3.2-3.6 4.8-3.6c13 0 28.8 0.8 47.8 2.4 18 1.6 33 2.4 44.6 2.4 8.4 0 20.6-0.8 36.8-2 20.4-1.8 37.6-2.8 51.4-2.8 3.2 0 4.8 3.2 4.8 9.6 0 8.6-3 13-8.8 13-21 2.2-38 8-50.8 17.4s-28.8 30.8-48 64.4l-78.2 143.2 105.2 214.4 155.4-361.4c5.4-13.2 8-25.4 8-36.4 0-26.4-18-40.4-54.2-42.2-3.2 0-4.8-3.8-4.8-11.2 0-7.6 2.4-11.4 7.2-11.4 13.2 0 28.8 0.8 47 2.4 16.8 1.6 30.8 2.4 42 2.4 12 0 25.6-0.8 41.2-2.4 16.2-1.6 30.8-2.4 43.8-2.4 4 0 6 3.2 6 9.6z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "wikipedia", - "brand" - ], - "grid": 16 - }, - { - "id": 457, - "paths": [ - "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM384 832h-128v-448h128v448zM320 320c-35.4 0-64-28.6-64-64s28.6-64 64-64c35.4 0 64 28.6 64 64s-28.6 64-64 64zM832 832h-128v-256c0-35.4-28.6-64-64-64s-64 28.6-64 64v256h-128v-448h128v79.4c26.4-36.2 66.8-79.4 112-79.4 79.6 0 144 71.6 144 160v288z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "linkedin", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 458, - "paths": [ - "M384 384h177.106v90.782h2.532c24.64-44.194 84.958-90.782 174.842-90.782 186.946 0 221.52 116.376 221.52 267.734v308.266h-184.61v-273.278c0-65.184-1.334-149.026-96.028-149.026-96.148 0-110.82 70.986-110.82 144.292v278.012h-184.542v-576z", - "M64 384h192v576h-192v-576z", - "M256 224c0 53.019-42.981 96-96 96s-96-42.981-96-96c0-53.019 42.981-96 96-96s96 42.981 96 96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "linkedin", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 459, - "paths": [ - "M451.6 766.2l-37.6-102c0 0-61 68-152.4 68-81 0-138.4-70.4-138.4-183 0-144.2 72.8-195.8 144.2-195.8 103.2 0 136 66.8 164.2 152.4l37.6 117.2c37.6 113.8 108 205.2 310.8 205.2 145.4 0 244-44.6 244-161.8 0-95-54-144.2-154.8-167.8l-75-16.4c-51.6-11.8-66.8-32.8-66.8-68 0-39.8 31.6-63.4 83.2-63.4 56.4 0 86.8 21.2 91.4 71.6l117.2-14c-9.4-105.6-82.2-149-201.8-149-105.6 0-208.8 39.8-208.8 167.8 0 79.8 38.8 130.2 136 153.6l79.8 18.8c59.8 14 79.8 38.8 79.8 72.8 0 43.4-42.2 61-122 61-118.4 0-167.8-62.2-195.8-147.8l-38.8-117.2c-49-152.6-127.6-208.8-283.6-208.8-172.4 0-264 109-264 294.4 0 178.2 91.4 274.4 255.8 274.4 132.4 0 195.8-62.2 195.8-62.2v0z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "lastfm", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 460, - "paths": [ - "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM746.6 760.8c-177.6 0-239.2-80-272-179.6l-32.8-102.6c-24.6-75-53.4-133.4-143.6-133.4-62.6 0-126.2 45.2-126.2 171.4 0 98.6 50.2 160.2 121.2 160.2 80 0 133.4-59.6 133.4-59.6l32.8 89.2c0 0-55.4 54.4-171.4 54.4-144 0-224-84-224-240 0-162.2 80-257.6 231-257.6 136.6 0 205.2 49.2 248.4 182.6l33.8 102.6c24.6 75 67.8 129.4 171.4 129.4 69.8 0 106.8-15.4 106.8-53.4 0-29.8-17.4-51.4-69.8-63.6l-69.8-16.4c-85.2-20.6-119-64.6-119-134.4 0-111.8 90.4-146.8 182.6-146.8 104.6 0 168.4 38 176.6 130.4l-102.6 12.4c-4.2-44.2-30.8-62.6-80-62.6-45.2 0-72.8 20.6-72.8 55.4 0 30.8 13.4 49.2 58.4 59.6l65.6 14.4c88.2 20.6 135.4 63.6 135.4 146.8 0 102.2-86.2 141.2-213.4 141.2z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "lastfm", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 461, - "paths": [ - "M0 0v1024h1024v-1024h-1024zM512 960v-448h-448v-448h448v448h448v448h-448z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "delicious", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 462, - "paths": [ - "M512 320c-35.2 0-64 28.8-64 64v256c0 105.8-86.2 192-192 192s-192-86.2-192-192v-128h128v128c0 35.2 28.8 64 64 64s64-28.8 64-64v-256c0-105.8 86.2-192 192-192s192 86.2 192 178v62l-82 24-46-24v-62c0-21.2-28.8-50-64-50z", - "M960 640c0 105.8-86.2 192-192 192s-192-86.2-192-206v-124l46 24 82-24v124c0 49.2 28.8 78 64 78s64-28.8 64-64v-128h128v128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "stumbleupon", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 463, - "paths": [ - "M852 0h-680c-94.6 0-172 77.4-172 172v680c0 94.6 77.4 172 172 172h680c94.6 0 172-77.4 172-172v-680c0-94.6-77.4-172-172-172zM512 320c-35.29 0-64 28.71-64 64v256c0 105.872-86.13 192-192 192s-192-86.128-192-192v-128h128v128c0 35.29 28.71 64 64 64s64-28.71 64-64v-256c0-105.87 86.13-192 192-192s192 86.13 192 178v62l-82 24-46-24v-62c0-21.29-28.71-50-64-50zM960 640c0 105.872-86.13 192-192 192s-192-86.128-192-206v-124l46 24 82-24v124c0 49.29 28.71 78 64 78s64-28.71 64-64v-128h128v128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "stumbleupon", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 464, - "paths": [ - "M1024 640v384h-1024v-384h128v256h768v-256zM192 704h640v128h-640zM207.152 565.466l27.698-124.964 624.832 138.496-27.698 124.964zM279.658 308.558l54.092-116.006 580.032 270.464-54.092 116.006zM991.722 361.476l-77.922 101.55-507.746-389.608 56.336-73.418h58.244z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "stackoverflow", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 465, - "paths": [ - "M512 68.4c-245 0-443.6 198.6-443.6 443.6 0 188 117 348.4 282 413-3.8-35-7.4-89 1.6-127.2 8-34.6 52-220.4 52-220.4s-13.2-26.6-13.2-65.8c0-61.6 35.8-107.8 80.2-107.8 37.8 0 56.2 28.4 56.2 62.4 0 38-24.2 95-36.8 147.6-10.6 44.2 22 80.2 65.6 80.2 78.8 0 139.4-83.2 139.4-203.2 0-106.2-76.4-180.4-185.2-180.4-126.2 0-200.2 94.6-200.2 192.6 0 38.2 14.6 79 33 101.2 3.6 4.4 4.2 8.2 3 12.8-3.4 14-10.8 44.2-12.4 50.4-2 8.2-6.4 9.8-14.8 6-55.4-25.8-90-106.8-90-171.8 0-140 101.6-268.4 293-268.4 153.8 0 273.4 109.6 273.4 256.2 0 152.8-96.4 276-230.2 276-45 0-87.2-23.4-101.6-51 0 0-22.2 84.6-27.6 105.4-10 38.6-37 86.8-55.2 116.2 41.6 12.8 85.6 19.8 131.4 19.8 245 0 443.6-198.6 443.6-443.6 0-245.2-198.6-443.8-443.6-443.8z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "pinterest", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 466, - "paths": [ - "M512 0c-282.4 0-512 229.6-512 512s229.6 512 512 512 512-229.6 512-512-229.6-512-512-512zM512 955.6c-45.8 0-89.8-7-131.4-19.8 18-29.4 45.2-77.8 55.2-116.2 5.4-20.8 27.6-105.4 27.6-105.4 14.4 27.6 56.8 51 101.6 51 133.8 0 230.2-123 230.2-276 0-146.6-119.6-256.2-273.4-256.2-191.4 0-293 128.6-293 268.4 0 65 34.6 146 90 171.8 8.4 4 12.8 2.2 14.8-6 1.4-6.2 9-36.2 12.4-50.4 1-4.4 0.6-8.4-3-12.8-18.4-22.2-33-63.2-33-101.2 0-97.8 74-192.6 200.2-192.6 109 0 185.2 74.2 185.2 180.4 0 120-60.6 203.2-139.4 203.2-43.6 0-76.2-36-65.6-80.2 12.6-52.8 36.8-109.6 36.8-147.6 0-34-18.2-62.4-56.2-62.4-44.6 0-80.2 46-80.2 107.8 0 39.2 13.2 65.8 13.2 65.8s-44 185.8-52 220.4c-9 38.4-5.4 92.2-1.6 127.2-165-64.4-282-224.8-282-412.8 0-245 198.6-443.6 443.6-443.6s443.6 198.6 443.6 443.6c0 245-198.6 443.6-443.6 443.6z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "pinterest", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 467, - "paths": [ - "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM312.6 666h-110.6c-6.6 0-11.6-3-14.4-7.6-3-4.8-3-10.8 0-17l117.6-207.6c0.2-0.2 0.2-0.4 0-0.6l-74.8-129.6c-3-6.2-3.6-12.2-0.6-17 2.8-4.6 8.4-7 15.2-7h110.8c17 0 25.4 11 30.8 20.8 0 0 75.6 132 76.2 132.8-4.4 8-119.6 211.4-119.6 211.4-6 10.4-14 21.4-30.6 21.4zM836.4 152.2l-245.2 433.6c-0.2 0.2-0.2 0.6 0 0.8l156.2 285.2c3 6.2 3.2 12.4 0.2 17.2-2.8 4.6-8 7-14.8 7h-110.6c-17 0-25.4-11.2-31-21 0 0-157-288-157.4-288.8 7.8-13.8 246.4-437 246.4-437 6-10.6 13.2-21 29.6-21h112.2c6.6 0 12 2.6 14.8 7 2.8 4.6 2.8 10.8-0.4 17z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "xing", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 468, - "paths": [ - "M155.6 202.2c-8.8 0-16.4 3.2-20.2 9.2-3.8 6.4-3.2 14.4 0.8 22.6l99.8 172.8c0.2 0.4 0.2 0.6 0 0.8l-156.8 277.2c-4 8.2-3.8 16.4 0 22.6 3.8 6 10.4 10 19.2 10h147.6c22 0 32.8-15 40.2-28.6 0 0 153.4-271.4 159.4-282-0.6-1-101.6-177-101.6-177-7.4-13-18.4-27.6-41.2-27.6h-147.2z", - "M776 0c-22 0-31.6 13.8-39.6 28.2 0 0-318.2 564.2-328.6 582.8 0.6 1 209.8 385 209.8 385 7.4 13 18.6 28.2 41.2 28.2h147.6c8.8 0 15.8-3.4 19.6-9.4 4-6.4 3.8-14.6-0.4-22.8l-208-380.6c-0.2-0.4-0.2-0.6 0-1l327-578.2c4-8.2 4.2-16.4 0.4-22.8-3.8-6-10.8-9.4-19.6-9.4h-149.4z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "xing", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 469, - "paths": [ - "M367.562 0c-243.358 0-367.562 140.162-367.562 401.856v0 549.034l238.39-238.628v-278.896c0-108.416 28.73-177.406 125.118-192.894v0c33.672-6.584 103.75-4.278 148.306-4.278v0 165.596c0 1.51 0.208 4.206 0.594 5.586v0c1.87 6.704 7.93 11.616 15.116 11.63v0c4.062 0.008 7.868-2.104 11.79-5.97v0l413.122-412.974-584.874-0.062zM785.61 311.746v278.89c0 108.414-28.736 177.414-125.116 192.894v0c-33.672 6.582-103.756 4.278-148.312 4.278v0-165.594c0-1.5-0.206-4.204-0.594-5.582v0c-1.864-6.712-7.922-11.622-15.112-11.63v0c-4.064-0.008-7.866 2.112-11.79 5.966v0l-413.124 412.966 584.874 0.066c243.354 0 367.564-140.168 367.564-401.852v0-549.028l-238.39 238.626z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "flattr", - "brand", - "donate", - "social" - ], - "grid": 16 - }, - { - "id": 470, - "paths": [ - "M851.564 90.090c-12.060-16.404-31.204-26.090-51.564-26.090h-608c-35.346 0-64 28.654-64 64v768c0 25.884 15.592 49.222 39.508 59.128 7.918 3.28 16.234 4.874 24.478 4.874 16.656 0 33.026-6.504 45.268-18.748l237.256-237.254h165.49c27.992 0 52.736-18.192 61.086-44.91l160-512c6.074-19.432 2.538-40.596-9.522-57zM672.948 320h-224.948c-35.346 0-64 28.654-64 64s28.654 64 64 64h184.948l-40 128h-144.948c-16.974 0-33.252 6.742-45.254 18.746l-146.746 146.744v-549.49h456.948l-40 128z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "foursquare", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 471, - "paths": [ - "M608.876 653.468c-17.282 17.426-2.668 49.128-2.668 49.128l130.090 217.218c0 0 21.36 28.64 39.864 28.64 18.59 0 36.954-15.27 36.954-15.27l102.844-147.008c0 0 10.36-18.546 10.598-34.792 0.372-23.106-34.454-29.434-34.454-29.434l-243.488-78.192c-0.002 0.004-23.858-6.328-39.74 9.71zM596.532 543.984c12.46 21.128 46.828 14.972 46.828 14.972l242.938-71.006c0 0 33.106-13.466 37.832-31.418 4.64-17.954-5.46-39.622-5.46-39.622l-116.098-136.752c0 0-10.062-17.292-30.938-19.032-23.016-1.958-37.18 25.898-37.18 25.898l-137.27 216.010c0 0.004-12.134 21.516-0.652 40.95zM481.754 459.768c28.608-7.044 33.148-48.604 33.148-48.604l-1.944-345.87c0 0-4.314-42.666-23.486-54.232-30.070-18.242-38.982-8.718-47.596-7.444l-201.696 74.944c0 0-19.754 6.536-30.042 23.018-14.69 23.352 14.928 57.544 14.928 57.544l209.644 285.756c0 0 20.69 21.396 47.044 14.888zM431.944 599.738c0.722-26.676-32.030-42.7-32.030-42.7l-216.796-109.524c0 0-32.126-13.246-47.722-4.016-11.95 7.060-22.536 19.84-23.572 31.134l-14.12 173.812c0 0-2.116 30.114 5.69 43.82 11.054 19.442 47.428 5.902 47.428 5.902l253.096-55.942c9.832-6.61 27.074-7.204 28.026-42.486zM494.88 693.542c-21.726-11.156-47.724 11.95-47.724 11.95l-169.468 186.566c0 0-21.144 28.528-15.768 46.050 5.066 16.418 13.454 24.578 25.318 30.328l170.192 53.726c0 0 20.634 4.286 36.258-0.242 22.18-6.43 18.094-41.152 18.094-41.152l3.848-252.602c-0.002 0.002-0.868-24.334-20.75-34.624z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "yelp", - "brand", - "social" - ], - "grid": 16 - }, - { - "id": 472, - "paths": [ - "M930 308.6c-47.8 212.2-195.4 324.2-428 324.2h-77.4l-53.8 341.6h-64.8l-3.4 22c-2.2 14.6 9 27.6 23.6 27.6h165.6c19.6 0 36.2-14.2 39.4-33.6l1.6-8.4 31.2-197.8 2-10.8c3-19.4 19.8-33.6 39.4-33.6h24.6c160.4 0 286-65.2 322.8-253.6 13.8-71.6 8.6-132.4-22.8-177.6z", - "M831 77.2c-47.4-54-133.2-77.2-242.8-77.2h-318.2c-22.4 0-41.6 16.2-45 38.4l-132.6 840.4c-2.6 16.6 10.2 31.6 27 31.6h196.6l49.4-313-1.6 9.8c3.4-22.2 22.4-38.4 44.8-38.4h93.4c183.4 0 327-74.4 369-290 1.2-6.4 2.4-12.6 3.2-18.6 12.4-79.6 0-134-43.2-183z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "paypal", - "brand", - "donate" - ], - "grid": 16 - }, - { - "id": 473, - "paths": [ - "M258.278 446.542l-146.532-253.802c93.818-117.464 238.234-192.74 400.254-192.74 187.432 0 351.31 100.736 440.532 251h-417.77c-7.504-0.65-15.092-1-22.762-1-121.874 0-224.578 83.644-253.722 196.542zM695.306 325h293.46c22.74 57.93 35.234 121.004 35.234 187 0 280.826-226.1 508.804-506.186 511.926l209.394-362.678c29.48-42.378 46.792-93.826 46.792-149.248 0-73.17-30.164-139.42-78.694-187zM326 512c0-102.56 83.44-186 186-186s186 83.44 186 186c0 102.56-83.44 186-186 186s-186-83.44-186-186zM582.182 764.442l-146.578 253.878c-246.532-36.884-435.604-249.516-435.604-506.32 0-91.218 23.884-176.846 65.696-251.024l209.030 362.054c41.868 89.112 132.476 150.97 237.274 150.97 24.3 0 47.836-3.34 70.182-9.558z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "chrome", - "browser", - "internet", - "brand" - ], - "grid": 16 - }, - { - "id": 474, - "paths": [ - "M1022.526 334.14l-11.86 76.080c0 0-16.954-140.856-37.732-193.514-31.846-80.688-46.014-80.040-46.108-79.922 21.33 54.204 17.462 83.324 17.462 83.324s-37.792-102.998-137.712-135.768c-110.686-36.282-170.57-26.364-177.488-24.486-1.050-0.008-2.064-0.010-3.030-0.010 0.818 0.062 1.612 0.146 2.426 0.212-0.034 0.020-0.090 0.042-0.082 0.052 0.45 0.548 122.306 21.302 143.916 50.996 0 0-51.76 0-103.272 14.842-2.328 0.666 189.524 23.964 228.746 215.674 0 0-21.030-43.876-47.040-51.328 17.106 52.036 12.714 150.776-3.576 199.85-2.096 6.312-4.24-27.282-36.328-41.75 10.28 73.646-0.616 190.456-51.708 222.632-3.982 2.504 32.030-115.31 7.242-69.762-142.708 218.802-311.404 100.972-387.248 49.11 38.866 8.462 112.654-1.318 145.314-25.612 0.042-0.030 0.078-0.056 0.118-0.086 35.468-24.252 56.472-41.964 75.334-37.772 18.874 4.214 31.438-14.726 16.78-31.53-14.676-16.838-50.314-39.978-98.524-27.366-34 8.904-76.134 46.522-140.448 8.432-49.364-29.25-54.012-53.546-54.45-70.376 1.218-5.966 2.754-11.536 4.576-16.624 5.682-15.87 22.912-20.658 32.494-24.438 16.256 2.792 30.262 7.862 44.968 15.406 0.19-4.894 0.252-11.39-0.018-18.76 1.41-2.802 0.538-11.252-1.722-21.58-1.302-10.308-3.42-20.974-6.752-30.692 0.012-0.002 0.020-0.010 0.030-0.014 0.056-0.018 0.108-0.040 0.156-0.070 0.078-0.044 0.146-0.112 0.208-0.19 0.012-0.020 0.030-0.034 0.044-0.052 0.082-0.124 0.154-0.272 0.198-0.466 1.020-4.618 12.022-13.524 25.718-23.1 12.272-8.58 26.702-17.696 38.068-24.752 10.060-6.248 17.72-10.882 19.346-12.098 0.618-0.466 1.358-1.012 2.164-1.636 0.15-0.116 0.3-0.232 0.454-0.354 0.094-0.074 0.19-0.148 0.286-0.226 5.41-4.308 13.484-12.448 15.178-29.578 0.004-0.042 0.010-0.080 0.012-0.122 0.050-0.504 0.092-1.014 0.13-1.534 0.028-0.362 0.050-0.726 0.072-1.096 0.014-0.284 0.032-0.566 0.044-0.856 0.030-0.674 0.050-1.364 0.060-2.064 0-0.040 0.002-0.076 0.004-0.116 0.022-1.658-0.006-3.386-0.104-5.202-0.054-1.014-0.126-1.93-0.298-2.762-0.008-0.044-0.018-0.092-0.028-0.136-0.018-0.082-0.036-0.164-0.058-0.244-0.036-0.146-0.076-0.292-0.122-0.43-0.006-0.018-0.010-0.032-0.016-0.046-0.052-0.16-0.112-0.314-0.174-0.464-0.004-0.006-0.004-0.010-0.006-0.016-1.754-4.108-8.32-5.658-35.442-6.118-0.026-0.002-0.050-0.002-0.076-0.002v0c-11.066-0.188-25.538-0.194-44.502-0.118-33.25 0.134-51.628-32.504-57.494-45.132 8.040-44.46 31.276-76.142 69.45-97.626 0.722-0.406 0.58-0.742-0.274-0.978 7.464-4.514-90.246-0.124-135.186 57.036-39.888-9.914-74.654-9.246-104.616-2.214-5.754-0.162-12.924-0.88-21.434-2.652-19.924-18.056-48.448-51.402-49.976-91.208 0 0-0.092 0.072-0.252 0.204-0.020-0.382-0.056-0.76-0.072-1.142 0 0-60.716 46.664-51.628 173.882-0.022 2.036-0.064 3.986-0.12 5.874-16.432 22.288-24.586 41.020-25.192 45.156-14.56 29.644-29.334 74.254-41.356 141.98 0 0 8.408-26.666 25.284-56.866-12.412 38.022-22.164 97.156-16.436 185.856 0 0 1.514-19.666 6.874-47.994 4.186 55.010 22.518 122.924 68.858 202.788 88.948 153.32 225.67 230.74 376.792 242.616 26.836 2.212 54.050 2.264 81.424 0.186 2.516-0.178 5.032-0.364 7.55-0.574 30.964-2.174 62.134-6.852 93.238-14.366 425.172-102.798 378.942-616.198 378.942-616.198z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "firefox", - "browser", - "internet", - "brand" - ], - "grid": 16 - }, - { - "id": 475, - "paths": [ - "M734.202 628.83h236.050c1.82-16.37 2.548-33.098 2.548-50.196 0-80.224-21.534-155.468-59.124-220.266 38.88-103.308 37.492-190.988-14.556-243.39-49.496-49.28-182.29-41.28-332.412 25.198-11.104-0.84-22.318-1.272-33.638-1.272-206.048 0-378.926 141.794-426.708 332.85 64.638-82.754 132.638-142.754 223.478-186.448-8.26 7.74-56.454 55.652-64.56 63.764-239.548 239.478-315.090 552.306-233.806 633.604 61.786 61.774 173.758 51.342 302.376-11.648 59.806 30.458 127.5 47.63 199.218 47.63 193.134 0 356.804-124.316 416.090-297.448h-237.868c-32.734 60.382-96.748 101.48-170.218 101.48-73.468 0-137.484-41.098-170.216-101.48-14.55-27.274-22.914-58.554-22.914-91.656v-0.722h386.26zM348.302 512.804c5.456-97.11 86.2-174.584 184.766-174.584s179.312 77.472 184.766 174.584h-369.532zM896.966 163.808c33.526 33.88 32.688 96.214 4.012 174.022-49.136-74.908-120.518-133.936-204.792-167.64 90.106-38.638 163.406-43.756 200.78-6.382zM93.482 967.256c-42.782-42.796-29.884-132.618 25.23-240.832 34.308 96.27 101.156 177.090 187.336 229.154-95.43 43.318-173.536 50.674-212.566 11.678z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "IE", - "browser", - "internet-explorer", - "brand" - ], - "grid": 16 - }, - { - "id": 476, - "paths": [ - "M15.4 454.6c30-236.8 191.6-451.6 481.2-454.6 174.8 3.4 318.6 82.6 404.2 233.6 43 78.8 56.4 161.6 59.2 253v107.4h-642.6c3 265 390 256 556.6 139.2v215.8c-97.6 58.6-319 111-490.4 43.6-146-54.8-250-207.6-249.4-354.6-4.8-190.6 94.8-316.8 249.4-388.6-32.8 40.6-57.8 85.4-70.8 163h362.8c0 0 21.2-216.8-205.4-216.8-213.6 7.4-367.6 131.6-454.8 259v0z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "edge", - "browser", - "brand" - ], - "grid": 16 - }, - { - "id": 477, - "paths": [ - "M512 0c-282.8 0-512 229.2-512 512s229.2 512 512 512 512-229.2 512-512-229.2-512-512-512zM958.4 472.8l-1-10.6c0.2 3.6 0.6 7 1 10.6zM888.4 268.8l-7.2-10.8c2.4 3.6 4.8 7.2 7.2 10.8zM860.6 230.6l-4.4-5.4c1.6 1.8 3 3.6 4.4 5.4zM798.6 167.6l-5.4-4.4c2 1.6 3.6 3 5.4 4.4zM766 142.8l-10.8-7.2c3.6 2.4 7.2 4.8 10.8 7.2zM561.8 66.8l-10.8-1c3.6 0.2 7.2 0.6 10.8 1zM472.8 65.6l-10.8 1c3.6-0.2 7.2-0.6 10.8-1zM268.8 135.6l-10.8 7.2c3.6-2.4 7.2-4.8 10.8-7.2zM230.6 163.4l-5.2 4.2c1.8-1.4 3.4-2.8 5.2-4.2zM167.6 225.4l-4.4 5.4c1.6-1.8 3-3.6 4.4-5.4zM142.8 258l-7.2 10.8c2.4-3.6 4.8-7.2 7.2-10.8zM66.8 462.2l-1 10.8c0.2-3.6 0.6-7.2 1-10.8zM65.6 551.2l1 10.8c-0.2-3.6-0.6-7.2-1-10.8zM135.6 755l7.2 10.8c-2.4-3.4-4.8-7-7.2-10.8zM144 767.6l79.8-53.4-8.8-13.4-79.8 53.4c-36.2-56.2-60-120.8-68-190.4l47.8-4.8-1.6-16-47.8 4.8c-0.8-9.2-1.2-18.6-1.4-28h96v-16h-96c0.2-9.4 0.6-18.6 1.4-28l47.8 4.6 1.6-16-47.8-4.6c8-69.6 32-134.2 68.2-190.4l79.8 53.4 8.8-13.4-80-53c5.4-7.6 10.8-15.2 16.6-22.4l37 30.4 10.2-12.4-37-30.4c6-7.2 12.4-14 18.8-20.8l67.8 67.8 11.4-11.4-67.8-67.8c6.8-6.4 13.6-12.8 20.6-18.8l30.4 37.2 12.4-10.2-30.4-37c7.4-5.8 14.8-11.4 22.4-16.8l53.4 79.8 13.4-8.8-53.4-79.8c56.2-36.2 120.8-60 190.4-68l4.8 47.8 16-1.6-4.8-47.8c9.2-0.8 18.6-1.2 28-1.4v96h16v-96c9.4 0.2 18.6 0.6 28 1.4l-4.6 47.8 16 1.6 4.6-47.8c69.6 8 134.2 32 190.4 68.2l-53.4 79.8 13.4 8.8 53.4-79.8c7.6 5.4 15.2 10.8 22.4 16.6l-30.4 37 12.4 10.2 30.4-37c7.2 6 14 12.4 20.8 18.8l-25.6 25-350 233.4-233.4 350-25 25c-6.4-6.8-12.8-13.6-18.8-20.6l37-30.4-10.2-12.4-37 30.4c-5.8-7.2-11.2-14.8-16.6-22.4zM167.6 798.6c-1.4-1.8-2.8-3.4-4.2-5.2l4.2 5.2zM225.4 856.4l5.2 4.2c-1.8-1.4-3.4-2.8-5.2-4.2zM258 881l10.8 7.2c-3.6-2.2-7.2-4.6-10.8-7.2zM462.2 957.2l10.8 1c-3.6-0.2-7.2-0.6-10.8-1zM551.2 958.4l10.6-1c-3.6 0.2-7 0.6-10.6 1zM755.2 888.4l10.8-7.2c-3.6 2.4-7.2 4.8-10.8 7.2zM793.4 860.6l5.4-4.4c-1.8 1.6-3.6 3-5.4 4.4zM828.4 829.2l0.8-0.8c-0.2 0.2-0.6 0.6-0.8 0.8zM856.4 798.6l4.4-5.4c-1.6 1.8-3 3.6-4.4 5.4zM863.4 790l-37-30.4-10.2 12.4 37 30.4c-6 7.2-12.4 14-18.8 20.8l-67.8-67.8-11.4 11.4 67.8 67.8c-6.8 6.4-13.6 12.8-20.6 18.8l-30.4-37.2-12.4 10.2 30.4 37c-7.4 5.8-14.8 11.4-22.4 16.8l-53.4-79.8-13.4 8.8 53.4 79.8c-56.2 36.2-120.8 60-190.4 68l-4.8-47.8-16 1.6 4.8 47.8c-9.2 0.8-18.6 1.2-28 1.4v-96h-16v96c-9.4-0.2-18.6-0.6-28-1.4l4.6-47.8-16-1.6-4.6 47.8c-69.6-8-134.2-32-190.4-68.2l53.4-79.8-13.4-8.8-53 79.8c-7.6-5.4-15.2-10.8-22.4-16.6l30.4-37-12.4-10.2-30.4 37c-7.2-6-14-12.4-20.8-18.8l25.2-25 350-233.4 233.4-350 25-25c6.4 6.8 12.8 13.6 18.8 20.6l-37 30.4 10.2 12.4 37-30.4c5.8 7.4 11.4 14.8 16.8 22.4l-79.8 53.4 8.8 13.4 79.8-53.4c36.2 56.2 60 120.8 68 190.4l-47.8 4.8 1.6 16 47.8-4.8c0.8 9.2 1.2 18.6 1.4 28h-96v16h96c-0.2 9.4-0.6 18.6-1.4 28l-47.8-4.6-1.6 16 47.8 4.6c-8 69.6-32 134.2-68.2 190.4l-79.8-53.4-8.8 13.4 79.8 53.4c-5.2 7.2-10.8 14.6-16.6 22zM958.4 551c-0.4 3.6-0.6 7.2-1 10.8l1-10.8zM888.4 755.2c-2.4 3.6-4.8 7.2-7.2 10.8l7.2-10.8z", - "M432.535 71.075l18.73 94.157-15.693 3.122-18.73-94.157 15.693-3.122z", - "M591.656 952.95l-18.73-94.157 15.693-3.122 18.73 94.157-15.693 3.122z", - "M389.628 80.89l13.939 45.931-15.31 4.646-13.939-45.931 15.31-4.646z", - "M634.434 942.887l-13.939-45.931 15.31-4.646 13.939 45.931-15.31 4.646z", - "M348.014 95.099l36.739 88.694-14.782 6.123-36.739-88.694 14.782-6.123z", - "M676.123 928.965l-36.739-88.694 14.782-6.123 36.739 88.694-14.782 6.123z", - "M293.62 120.659l14.11-7.544 22.632 42.331-14.11 7.544-22.632-42.331z", - "M730.101 903.289l-14.11 7.544-22.632-42.331 14.11-7.544 22.632 42.331z", - "M120.601 293.826l42.336 22.622-7.541 14.112-42.336-22.622 7.541-14.112z", - "M903.244 730.195l-42.336-22.622 7.541-14.112 42.336 22.622-7.541 14.112z", - "M183.811 384.623l-88.694-36.739 6.123-14.782 88.694 36.739-6.123 14.782z", - "M840.32 639.301l88.694 36.739-6.123 14.782-88.694-36.739 6.123-14.782z", - "M85.543 374.387l45.936 13.93-4.643 15.312-45.936-13.93 4.643-15.312z", - "M938.308 649.667l-45.936-13.93 4.643-15.312 45.936 13.93-4.643 15.312z", - "M74.069 416.782l94.157 18.73-3.122 15.693-94.157-18.73 3.122-15.693z", - "M949.741 607.243l-94.157-18.73 3.122-15.693 94.157 18.73-3.122 15.693z", - "M70.965 591.548l94.157-18.73 3.122 15.693-94.157 18.73-3.122-15.693z", - "M952.842 432.427l-94.157 18.73-3.122-15.693 94.157-18.73 3.122 15.693z", - "M80.974 634.514l45.931-13.939 4.646 15.31-45.931 13.939-4.646-15.31z", - "M942.969 389.707l-45.931 13.939-4.646-15.31 45.931-13.939 4.646 15.31z", - "M101.142 690.912l-6.123-14.782 88.694-36.739 6.123 14.782-88.694 36.739z", - "M922.794 333.231l6.122 14.782-88.694 36.73-6.122-14.782 88.694-36.73z", - "M120.824 730.267l-7.544-14.11 42.331-22.632 7.544 14.11-42.331 22.632z", - "M903.455 293.785l7.544 14.11-42.331 22.632-7.544-14.11 42.331-22.632z", - "M307.878 910.846l-14.11-7.542 22.627-42.331 14.11 7.542-22.627 42.331z", - "M716.073 113.074l14.112 7.541-22.622 42.336-14.112-7.541 22.622-42.336z", - "M333.267 922.799l36.739-88.694 14.782 6.123-36.739 88.694-14.782-6.123z", - "M690.884 101.11l-36.739 88.694-14.782-6.123 36.739-88.694 14.782 6.123z", - "M389.634 943.028l-15.31-4.645 13.934-45.931 15.31 4.645-13.934 45.931z", - "M634.349 80.882l15.312 4.642-13.925 45.936-15.312-4.642 13.925-45.936z", - "M432.472 952.839l-15.693-3.122 18.73-94.157 15.693 3.122-18.73 94.157z", - "M591.536 70.969l15.693 3.122-18.73 94.157-15.693-3.122 18.73-94.157z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "safari", - "browser", - "internet", - "brand" - ], - "grid": 16 - }, - { - "id": 478, - "paths": [ - "M1024 512v0 0c0 151.6-66 288-170.8 381.6-131.4 64-253.8 19.2-294.2-8.8 129-28.2 226.4-184.2 226.4-372.8s-97.4-344.6-226.4-373c40.6-28 163-72.8 294.2-8.8 104.8 93.8 170.8 230.2 170.8 381.8v0 0z", - "M343.4 223.4c-56.6 66.8-93.2 165.6-95.6 276.6 0 0.2 0 23.8 0 24.2 2.4 110.8 39.2 209.6 95.8 276.4 73.4 95.4 182.6 155.8 304.6 155.8 75 0 145.2-22.8 205.2-62.6-90.8 81-210.4 130.2-341.4 130.2-8.2 0-16.4-0.2-24.4-0.6-271.4-12.8-487.6-236.8-487.6-511.4 0-282.8 229.2-512 512-512 0.6 0 1.2 0 2 0 130.4 0.4 249.2 49.6 339.4 130.4-60-39.8-130.2-62.8-205.2-62.8-122 0-231.2 60.4-304.8 155.8z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "opera", - "browser", - "internet", - "brand" - ], - "grid": 16 - }, - { - "id": 479, - "paths": [ - "M842.012 589.48c-13.648-13.446-43.914-20.566-89.972-21.172-31.178-0.344-68.702 2.402-108.17 7.928-17.674-10.198-35.892-21.294-50.188-34.658-38.462-35.916-70.568-85.772-90.576-140.594 1.304-5.12 2.414-9.62 3.448-14.212 0 0 21.666-123.060 15.932-164.666-0.792-5.706-1.276-7.362-2.808-11.796l-1.882-4.834c-5.894-13.592-17.448-27.994-35.564-27.208l-10.916-0.344c-20.202 0-36.664 10.332-40.986 25.774-13.138 48.434 0.418 120.892 24.98 214.738l-6.288 15.286c-17.588 42.876-39.63 86.060-59.078 124.158l-2.528 4.954c-20.46 40.040-39.026 74.028-55.856 102.822l-17.376 9.188c-1.264 0.668-31.044 16.418-38.028 20.644-59.256 35.38-98.524 75.542-105.038 107.416-2.072 10.17-0.53 23.186 10.014 29.212l16.806 8.458c7.292 3.652 14.978 5.502 22.854 5.502 42.206 0 91.202-52.572 158.698-170.366 77.93-25.37 166.652-46.458 244.412-58.090 59.258 33.368 132.142 56.544 178.142 56.544 8.168 0 15.212-0.78 20.932-2.294 8.822-2.336 16.258-7.368 20.792-14.194 8.926-13.432 10.734-31.932 8.312-50.876-0.72-5.622-5.21-12.574-10.068-17.32zM211.646 814.048c7.698-21.042 38.16-62.644 83.206-99.556 2.832-2.296 9.808-8.832 16.194-14.902-47.104 75.124-78.648 105.066-99.4 114.458zM478.434 199.686c13.566 0 21.284 34.194 21.924 66.254s-6.858 54.56-16.158 71.208c-7.702-24.648-11.426-63.5-11.426-88.904 0 0-0.566-48.558 5.66-48.558v0zM398.852 637.494c9.45-16.916 19.282-34.756 29.33-53.678 24.492-46.316 39.958-82.556 51.478-112.346 22.91 41.684 51.444 77.12 84.984 105.512 4.186 3.542 8.62 7.102 13.276 10.65-68.21 13.496-127.164 29.91-179.068 49.862v0zM828.902 633.652c-4.152 2.598-16.052 4.1-23.708 4.1-24.708 0-55.272-11.294-98.126-29.666 16.468-1.218 31.562-1.838 45.102-1.838 24.782 0 32.12-0.108 56.35 6.072 24.228 6.18 24.538 18.734 20.382 21.332v0z", - "M917.806 229.076c-22.21-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.886 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924v0zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.982 17.78 50.678 41.878 81.374 72.572v0zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.324 32 32 32h224v624z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "file-pdf", - "file", - "file-format" - ], - "grid": 16 - }, - { - "id": 480, - "paths": [ - "M690.22 471.682c-60.668-28.652-137.97-34.42-194.834 6.048 69.14-6.604 144.958 4.838 195.106 57.124 48-55.080 124.116-65.406 192.958-59.732-57.488-38.144-133.22-33.024-193.23-3.44v0zM665.646 605.75c-68.376-1.578-134.434 23.172-191.1 60.104-107.176-45.588-242.736-37.124-334.002 38.982 26.33-0.934 52.006-7.446 78.056-10.792 95.182-9.488 196.588 14.142 268.512 79.824 29.772-43.542 71.644-78.242 119.652-99.922 63.074-30.52 134.16-33.684 202.82-34.52-41.688-28.648-94.614-33.954-143.938-33.676z", - "M917.806 229.076c-22.21-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.886 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924v0zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.982 17.78 50.678 41.878 81.374 72.572v0zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.324 32 32 32h224v624z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "file-openoffice", - "file", - "file-format" - ], - "grid": 16 - }, - { - "id": 481, - "paths": [ - "M639.778 475.892h44.21l-51.012 226.178-66.324-318.010h-106.55l-77.114 318.010-57.816-318.010h-111.394l113.092 511.88h108.838l76.294-302.708 68.256 302.708h100.336l129.628-511.88h-170.446v91.832z", - "M917.806 229.076c-22.21-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.886 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924v0zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.982 17.78 50.678 41.878 81.374 72.572v0zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.324 32 32 32h224v624z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "file-word", - "file", - "file-format", - "word", - "docx" - ], - "grid": 16 - }, - { - "id": 482, - "paths": [ - "M743.028 384h-135.292l-95.732 141.032-95.742-141.032h-135.29l162.162 242.464-182.972 269.536h251.838v-91.576h-50.156l50.156-74.994 111.396 166.57h140.444l-182.976-269.536 162.164-242.464z", - "M917.806 229.076c-22.21-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.886 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924v0zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.982 17.78 50.678 41.878 81.374 72.572v0zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.324 32 32 32h224v624z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "file-excel", - "file", - "file-format", - "xlc" - ], - "grid": 16 - }, - { - "id": 483, - "paths": [ - "M534.626 22.628c-12.444-12.444-37.026-22.628-54.626-22.628h-384c-17.6 0-32 14.4-32 32v960c0 17.6 14.4 32 32 32h768c17.6 0 32-14.4 32-32v-576c0-17.6-10.182-42.182-22.626-54.626l-338.748-338.746zM832 960h-704v-896h351.158c2.916 0.48 8.408 2.754 10.81 4.478l337.556 337.554c1.722 2.402 3.996 7.894 4.476 10.81v543.158zM864 0h-192c-17.6 0-21.818 10.182-9.374 22.626l210.746 210.746c12.446 12.446 22.628 8.228 22.628-9.372v-192c0-17.6-14.4-32-32-32z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "libreoffice", - "file", - "file-format" - ], - "grid": 16 - }, - { - "id": 484, - "paths": [ - "M60.538 0l82.144 921.63 368.756 102.37 369.724-102.524 82.3-921.476h-902.924zM784.63 301.428h-432.54l10.302 115.75h411.968l-31.042 347.010-231.844 64.254-231.572-64.254-15.83-177.512h113.494l8.048 90.232 125.862 33.916 0.278-0.078 125.934-33.992 13.070-146.55h-391.74l-30.494-341.8h566.214l-10.108 113.024z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "html-five", - "w3c" - ], - "grid": 16 - }, - { - "id": 485, - "paths": [ - "M60.538 0l82.144 921.63 368.756 102.37 369.724-102.524 82.3-921.476h-902.924zM810.762 862.824l-297.226 82.376v0.466l-0.776-0.234-0.782 0.234v-0.466l-297.222-82.376-70.242-787.486h736.496l-70.248 787.486zM650.754 530.204l-13.070 146.552-126.21 34.070-125.862-33.916-8.050-90.234h-113.49l15.83 177.512 232.076 64.176 231.342-64.176 31.040-347.012h-411.966l-10.302-115.748h432.534l10.112-113.026h-566.218l30.498 341.802z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "html-five", - "w3c" - ], - "grid": 16 - }, - { - "id": 486, - "paths": [ - "M152.388 48.522l-34.36 171.926h699.748l-21.884 111.054h-700.188l-33.892 171.898h699.684l-39.018 196.064-282.012 93.422-244.4-93.422 16.728-85.042h-171.898l-40.896 206.352 404.226 154.704 466.006-154.704 153.768-772.252z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "css3", - "w3c" - ], - "grid": 16 - }, - { - "id": 487, - "paths": [ - "M1004.692 466.394l-447.096-447.080c-25.738-25.754-67.496-25.754-93.268 0l-103.882 103.876 78.17 78.17c12.532-5.996 26.564-9.36 41.384-9.36 53.020 0 96 42.98 96 96 0 14.82-3.364 28.854-9.362 41.386l127.976 127.974c12.532-5.996 26.566-9.36 41.386-9.36 53.020 0 96 42.98 96 96s-42.98 96-96 96-96-42.98-96-96c0-14.82 3.364-28.854 9.362-41.386l-127.976-127.974c-3.042 1.456-6.176 2.742-9.384 3.876v266.968c37.282 13.182 64 48.718 64 90.516 0 53.020-42.98 96-96 96s-96-42.98-96-96c0-41.796 26.718-77.334 64-90.516v-266.968c-37.282-13.18-64-48.72-64-90.516 0-14.82 3.364-28.852 9.36-41.384l-78.17-78.17-295.892 295.876c-25.75 25.776-25.75 67.534 0 93.288l447.12 447.080c25.738 25.75 67.484 25.75 93.268 0l445.006-445.006c25.758-25.762 25.758-67.54-0.002-93.29z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "git", - "brand" - ], - "grid": 16 - }, - { - "id": 488, - "paths": [ - "M945.75 368.042l-448-298.666c-10.748-7.166-24.752-7.166-35.5 0l-448 298.666c-8.902 5.934-14.25 15.926-14.25 26.624v298.666c0 10.7 5.348 20.692 14.25 26.624l448 298.666c5.374 3.584 11.562 5.376 17.75 5.376s12.376-1.792 17.75-5.376l448-298.666c8.902-5.934 14.25-15.926 14.25-26.624v-298.666c0-10.698-5.348-20.69-14.25-26.624zM480 654.876l-166.312-110.876 166.312-110.874 166.312 110.874-166.312 110.876zM512 377.542v-221.75l358.31 238.876-166.31 110.874-192-128zM448 377.542l-192 128-166.312-110.874 358.312-238.876v221.75zM198.312 544l-134.312 89.542v-179.082l134.312 89.54zM256 582.458l192 128v221.748l-358.312-238.872 166.312-110.876zM512 710.458l192-128 166.312 110.876-358.312 238.874v-221.75zM761.688 544l134.312-89.54v179.084l-134.312-89.544z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "codepen", - "brand" - ], - "grid": 16 - }, - { - "id": 489, - "paths": [ - "M928 416c-28.428 0-53.958 12.366-71.536 32h-189.956l134.318-134.318c26.312 1.456 53.11-7.854 73.21-27.956 37.49-37.49 37.49-98.274 0-135.764s-98.274-37.49-135.766 0c-20.102 20.102-29.41 46.898-27.956 73.21l-134.314 134.318v-189.954c19.634-17.578 32-43.108 32-71.536 0-53.020-42.98-96-96-96s-96 42.98-96 96c0 28.428 12.366 53.958 32 71.536v189.954l-134.318-134.318c1.454-26.312-7.856-53.11-27.958-73.21-37.49-37.49-98.274-37.49-135.764 0-37.49 37.492-37.49 98.274 0 135.764 20.102 20.102 46.898 29.412 73.212 27.956l134.32 134.318h-189.956c-17.578-19.634-43.108-32-71.536-32-53.020 0-96 42.98-96 96s42.98 96 96 96c28.428 0 53.958-12.366 71.536-32h189.956l-134.318 134.318c-26.314-1.456-53.11 7.854-73.212 27.956-37.49 37.492-37.49 98.276 0 135.766 37.492 37.49 98.274 37.49 135.764 0 20.102-20.102 29.412-46.898 27.958-73.21l134.316-134.32v189.956c-19.634 17.576-32 43.108-32 71.536 0 53.020 42.98 96 96 96s96-42.98 96-96c0-28.428-12.366-53.958-32-71.536v-189.956l134.318 134.318c-1.456 26.312 7.854 53.11 27.956 73.21 37.492 37.49 98.276 37.49 135.766 0s37.49-98.274 0-135.766c-20.102-20.102-46.898-29.41-73.21-27.956l-134.32-134.316h189.956c17.576 19.634 43.108 32 71.536 32 53.020 0 96-42.98 96-96s-42.982-96-96.002-96z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "svg" - ], - "grid": 16 - }, - { - "id": 490, - "paths": [ - "M259.544 511.998c0-65.416 53.030-118.446 118.446-118.446s118.446 53.030 118.446 118.446c0 65.416-53.030 118.446-118.446 118.446s-118.446-53.030-118.446-118.446zM512.004 0c-282.774 0-512.004 229.232-512.004 512s229.226 512 512.004 512c282.764 0 511.996-229.23 511.996-512 0-282.768-229.23-512-511.996-512zM379.396 959.282c-153.956-89.574-257.468-256.324-257.468-447.282s103.512-357.708 257.462-447.282c154.010 89.562 257.59 256.288 257.59 447.282 0 190.988-103.58 357.718-257.584 447.282z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "IcoMoon", - "icomoon", - "brand" - ], - "grid": 16 - } - ], - "colorThemes": [], - "colorThemeIdx": 0, - "invisible": true - } - ], - "preferences": { - "showGlyphs": true, - "showQuickUse": true, - "showQuickUse2": true, - "showSVGs": true, - "fontPref": { - "prefix": "h3-", - "metadata": { - "fontFamily": "h3raldicons", - "majorVersion": 1, - "minorVersion": 0, - "fontURL": "https://h3rald.com", - "description": "H3RALD.com Font Bundle" - }, - "metrics": { - "emSize": 1024, - "baseline": 6.25, - "whitespace": 50 - }, - "embed": false, - "includeMetadata": true, - "cssVars": true, - "cssVarsFormat": "less", - "showSelector": true, - "showMetrics": true, - "showMetadata": true, - "showVersion": true, - "selector": "", - "classSelector": ".icon" - }, - "imagePref": { - "prefix": "icon-", - "png": true, - "useClassSelector": true, - "color": 4473924, - "bgColor": 16777215, - "classSelector": ".icon" - }, - "historySize": 100, - "showCodes": true, - "gridSize": 16 - }, - "uid": -1 -}
@@ -1,23 +0,0 @@
-@import "../hastystyles/styles/_normalize.less"; -@import "../hastystyles/styles/_variables.less"; -@import "_definitions.less"; -@import "_calendas-plus.less"; -@import "_inconsolata.less"; -@import "_hastyscribe.less"; -@import "_h3rald.less"; -@import "_bootstrap.less"; -@import "_vendor.less"; -@import "_coderay.less"; -@import "_github.less"; -@import "_elements.less"; -@import "../hastystyles/styles/_fa-variables.less"; -@import "../hastystyles/styles/_fa-icons.less"; -@import "_h3raldicons.less"; -@import "_font-awesome.less"; -@import "../hastystyles/styles/_mixins.less"; -@import "../hastystyles/styles/_elements.less"; -@import "../hastystyles/styles/_links.less"; -@import "../hastystyles/styles/_blocks.less"; -@import "../hastystyles/styles/_badges.less"; -@import "../hastystyles/styles/_headings.less"; -@import "_typography.less";
@@ -1,19 +0,0 @@
------ -permalink: tags -filters_pre: -- erb -title: Tags -type: page ------ -<% - tags = sorted_site_tags -%> -<div class="container article-aggregation"> -<% c = 0 -tags.each do |t| - c = c+1 %> - <%= %{<div class="row">} if c%4 == 1 %> - <div class="col-md-3"><i class="h3-tag"></i> <%= tag_link_with_count(t[0], t[1]) %></div> - <%= "</div>" if c%4 == 0 %> -<% end %></div> -</div>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/ajax/atom -:title: H3RALD - Tag 'ajax' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('ajax'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/ajax/rss -:title: H3RALD - Tag 'ajax' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('ajax'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: ajax -:filters_pre: -- erb -:title: "Tag: ajax" -:feed: /tags/ajax/ -:feed_title: Tag 'ajax' ------ - -<p>3 items are tagged with <em>ajax</em>:</p> -<ul> - <% articles_tagged_with('ajax').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/books/atom -:title: H3RALD - Tag 'books' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('books'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/books/rss -:title: H3RALD - Tag 'books' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('books'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: books -:filters_pre: -- erb -:title: "Tag: books" -:feed: /tags/books/ -:feed_title: Tag 'books' ------ - -<p>10 items are tagged with <em>books</em>:</p> -<ul> - <% articles_tagged_with('books').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/browsers/atom -:title: H3RALD - Tag 'browsers' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('browsers'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/browsers/rss -:title: H3RALD - Tag 'browsers' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('browsers'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: browsers -:filters_pre: -- erb -:title: "Tag: browsers" -:feed: /tags/browsers/ -:feed_title: Tag 'browsers' ------ - -<p>7 items are tagged with <em>browsers</em>:</p> -<ul> - <% articles_tagged_with('browsers').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/cakephp/atom -:title: H3RALD - Tag 'cakephp' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('cakephp'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/cakephp/rss -:title: H3RALD - Tag 'cakephp' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('cakephp'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: cakephp -:filters_pre: -- erb -:title: "Tag: cakephp" -:feed: /tags/cakephp/ -:feed_title: Tag 'cakephp' ------ - -<p>24 items are tagged with <em>cakephp</em>:</p> -<ul> - <% articles_tagged_with('cakephp').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/concatenative/atom -:title: H3RALD - Tag 'concatenative' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('concatenative'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/concatenative/rss -:title: H3RALD - Tag 'concatenative' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('concatenative'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: concatenative -:filters_pre: -- erb -:title: "Tag: concatenative" -:feed: /tags/concatenative/ -:feed_title: Tag 'concatenative' ------ - -<p>2 items are tagged with <em>concatenative</em>:</p> -<ul> - <% articles_tagged_with('concatenative').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/databases/atom -:title: H3RALD - Tag 'databases' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('databases'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/databases/rss -:title: H3RALD - Tag 'databases' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('databases'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: databases -:filters_pre: -- erb -:title: "Tag: databases" -:feed: /tags/databases/ -:feed_title: Tag 'databases' ------ - -<p>6 items are tagged with <em>databases</em>:</p> -<ul> - <% articles_tagged_with('databases').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/firefox/atom -:title: H3RALD - Tag 'firefox' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('firefox'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/firefox/rss -:title: H3RALD - Tag 'firefox' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('firefox'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: firefox -:filters_pre: -- erb -:title: "Tag: firefox" -:feed: /tags/firefox/ -:feed_title: Tag 'firefox' ------ - -<p>6 items are tagged with <em>firefox</em>:</p> -<ul> - <% articles_tagged_with('firefox').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/frameworks/atom -:title: H3RALD - Tag 'frameworks' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('frameworks'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/frameworks/rss -:title: H3RALD - Tag 'frameworks' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('frameworks'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: frameworks -:filters_pre: -- erb -:title: "Tag: frameworks" -:feed: /tags/frameworks/ -:feed_title: Tag 'frameworks' ------ - -<p>7 items are tagged with <em>frameworks</em>:</p> -<ul> - <% articles_tagged_with('frameworks').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/glyph/atom -:title: H3RALD - Tag 'glyph' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('glyph'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/glyph/rss -:title: H3RALD - Tag 'glyph' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('glyph'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: glyph -:filters_pre: -- erb -:title: "Tag: glyph" -:feed: /tags/glyph/ -:feed_title: Tag 'glyph' ------ - -<p>1 item is tagged with <em>glyph</em>:</p> -<ul> - <% articles_tagged_with('glyph').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/google/atom -:title: H3RALD - Tag 'google' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('google'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/google/rss -:title: H3RALD - Tag 'google' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('google'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: google -:filters_pre: -- erb -:title: "Tag: google" -:feed: /tags/google/ -:feed_title: Tag 'google' ------ - -<p>5 items are tagged with <em>google</em>:</p> -<ul> - <% articles_tagged_with('google').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:title: H3RALD - Tag 'hastyscribe' (Atom Feed) -:type: feed -:permalink: tags/hastyscribe/atom ------ -<%= atom_feed(:articles => articles_tagged_with('hastyscribe'))%>
@@ -1,6 +0,0 @@
------ -:title: H3RALD - Tag 'hastyscribe' (RSS Feed) -:type: feed -:permalink: tags/hastyscribe/rss ------ -<%= rss_feed(:articles => articles_tagged_with('hastyscribe'))%>
@@ -1,17 +0,0 @@
------ -:title: 'Tag: hastyscribe' -:type: page -:filters_pre: -- erb -:feed: "/tags/hastyscribe/" -:feed_title: Tag 'hastyscribe' -:permalink: hastyscribe ------ - -<p>1 item is tagged with <em>hastyscribe</em>:</p> -<ul> - <% articles_tagged_with('hastyscribe').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/ie/atom -:title: H3RALD - Tag 'ie' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('ie'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/ie/rss -:title: H3RALD - Tag 'ie' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('ie'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: ie -:filters_pre: -- erb -:title: "Tag: ie" -:feed: /tags/ie/ -:feed_title: Tag 'ie' ------ - -<p>2 items are tagged with <em>ie</em>:</p> -<ul> - <% articles_tagged_with('ie').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/internet/atom -:title: H3RALD - Tag 'internet' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('internet'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/internet/rss -:title: H3RALD - Tag 'internet' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('internet'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: internet -:filters_pre: -- erb -:title: "Tag: internet" -:feed: /tags/internet/ -:feed_title: Tag 'internet' ------ - -<p>13 items are tagged with <em>internet</em>:</p> -<ul> - <% articles_tagged_with('internet').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/italy/atom -:title: H3RALD - Tag 'italy' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('italy'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/italy/rss -:title: H3RALD - Tag 'italy' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('italy'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: italy -:filters_pre: -- erb -:title: "Tag: italy" -:feed: /tags/italy/ -:feed_title: Tag 'italy' ------ - -<p>3 items are tagged with <em>italy</em>:</p> -<ul> - <% articles_tagged_with('italy').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/li3/atom -:title: H3RALD - Tag 'li3' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('li3'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/li3/rss -:title: H3RALD - Tag 'li3' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('li3'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: li3 -:filters_pre: -- erb -:title: "Tag: li3" -:feed: /tags/li3/ -:feed_title: Tag 'li3' ------ - -<p>2 items are tagged with <em>li3</em>:</p> -<ul> - <% articles_tagged_with('li3').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:title: H3RALD - Tag 'litestore' (Atom Feed) -:type: feed -:permalink: tags/litestore/atom ------ -<%= atom_feed(:articles => articles_tagged_with('litestore'))%>
@@ -1,6 +0,0 @@
------ -:title: H3RALD - Tag 'litestore' (RSS Feed) -:type: feed -:permalink: tags/litestore/rss ------ -<%= rss_feed(:articles => articles_tagged_with('litestore'))%>
@@ -1,17 +0,0 @@
------ -:title: 'Tag: litestore' -:type: page -:filters_pre: -- erb -:feed: "/tags/litestore/" -:feed_title: Tag 'litestore' -:permalink: litestore ------ - -<p>1 item is tagged with <em>litestore</em>:</p> -<ul> - <% articles_tagged_with('litestore').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/microsoft/atom -:title: H3RALD - Tag 'microsoft' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('microsoft'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/microsoft/rss -:title: H3RALD - Tag 'microsoft' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('microsoft'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: microsoft -:filters_pre: -- erb -:title: "Tag: microsoft" -:feed: /tags/microsoft/ -:feed_title: Tag 'microsoft' ------ - -<p>2 items are tagged with <em>microsoft</em>:</p> -<ul> - <% articles_tagged_with('microsoft').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/opensource/atom -:title: H3RALD - Tag 'opensource' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('opensource'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/opensource/rss -:title: H3RALD - Tag 'opensource' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('opensource'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: opensource -:filters_pre: -- erb -:title: "Tag: opensource" -:feed: /tags/opensource/ -:feed_title: Tag 'opensource' ------ - -<p>10 items are tagged with <em>opensource</em>:</p> -<ul> - <% articles_tagged_with('opensource').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/opera/atom -:title: H3RALD - Tag 'opera' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('opera'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/opera/rss -:title: H3RALD - Tag 'opera' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('opera'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: opera -:filters_pre: -- erb -:title: "Tag: opera" -:feed: /tags/opera/ -:feed_title: Tag 'opera' ------ - -<p>2 items are tagged with <em>opera</em>:</p> -<ul> - <% articles_tagged_with('opera').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/personal/atom -:title: H3RALD - Tag 'personal' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('personal'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/personal/rss -:title: H3RALD - Tag 'personal' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('personal'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: personal -:filters_pre: -- erb -:title: "Tag: personal" -:feed: /tags/personal/ -:feed_title: Tag 'personal' ------ - -<p>6 items are tagged with <em>personal</em>:</p> -<ul> - <% articles_tagged_with('personal').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/personal_log/atom -:title: H3RALD - Tag 'personal_log' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('personal_log'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/personal_log/rss -:title: H3RALD - Tag 'personal_log' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('personal_log'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: personal_log -:filters_pre: -- erb -:title: "Tag: personal_log" -:feed: /tags/personal_log/ -:feed_title: Tag 'personal_log' ------ - -<p>6 items are tagged with <em>personal_log</em>:</p> -<ul> - <% articles_tagged_with('personal_log').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/php/atom -:title: H3RALD - Tag 'php' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('php'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/php/rss -:title: H3RALD - Tag 'php' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('php'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: php -:filters_pre: -- erb -:title: "Tag: php" -:feed: /tags/php/ -:feed_title: Tag 'php' ------ - -<p>8 items are tagged with <em>php</em>:</p> -<ul> - <% articles_tagged_with('php').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/politics/atom -:title: H3RALD - Tag 'politics' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('politics'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/politics/rss -:title: H3RALD - Tag 'politics' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('politics'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: politics -:filters_pre: -- erb -:title: "Tag: politics" -:feed: /tags/politics/ -:feed_title: Tag 'politics' ------ - -<p>2 items are tagged with <em>politics</em>:</p> -<ul> - <% articles_tagged_with('politics').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/productivity/atom -:title: H3RALD - Tag 'productivity' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('productivity'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/productivity/rss -:title: H3RALD - Tag 'productivity' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('productivity'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: productivity -:filters_pre: -- erb -:title: "Tag: productivity" -:feed: /tags/productivity/ -:feed_title: Tag 'productivity' ------ - -<p>7 items are tagged with <em>productivity</em>:</p> -<ul> - <% articles_tagged_with('productivity').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/programming/atom -:title: H3RALD - Tag 'programming' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('programming'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/programming/rss -:title: H3RALD - Tag 'programming' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('programming'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: programming -:filters_pre: -- erb -:title: "Tag: programming" -:feed: /tags/programming/ -:feed_title: Tag 'programming' ------ - -<p>13 items are tagged with <em>programming</em>:</p> -<ul> - <% articles_tagged_with('programming').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/rails/atom -:title: H3RALD - Tag 'rails' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('rails'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/rails/rss -:title: H3RALD - Tag 'rails' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('rails'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: rails -:filters_pre: -- erb -:title: "Tag: rails" -:feed: /tags/rails/ -:feed_title: Tag 'rails' ------ - -<p>19 items are tagged with <em>rails</em>:</p> -<ul> - <% articles_tagged_with('rails').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/rant/atom -:title: H3RALD - Tag 'rant' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('rant'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/rant/rss -:title: H3RALD - Tag 'rant' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('rant'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: rant -:filters_pre: -- erb -:title: "Tag: rant" -:feed: /tags/rant/ -:feed_title: Tag 'rant' ------ - -<p>5 items are tagged with <em>rant</em>:</p> -<ul> - <% articles_tagged_with('rant').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/rawline/atom -:title: H3RALD - Tag 'rawline' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('rawline'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/rawline/rss -:title: H3RALD - Tag 'rawline' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('rawline'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: rawline -:filters_pre: -- erb -:title: "Tag: rawline" -:feed: /tags/rawline/ -:feed_title: Tag 'rawline' ------ - -<p>5 items are tagged with <em>rawline</em>:</p> -<ul> - <% articles_tagged_with('rawline').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/redbook/atom -:title: H3RALD - Tag 'redbook' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('redbook'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/redbook/rss -:title: H3RALD - Tag 'redbook' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('redbook'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: redbook -:filters_pre: -- erb -:title: "Tag: redbook" -:feed: /tags/redbook/ -:feed_title: Tag 'redbook' ------ - -<p>6 items are tagged with <em>redbook</em>:</p> -<ul> - <% articles_tagged_with('redbook').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/review/atom -:title: H3RALD - Tag 'review' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('review'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/review/rss -:title: H3RALD - Tag 'review' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('review'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: review -:filters_pre: -- erb -:title: "Tag: review" -:feed: /tags/review/ -:feed_title: Tag 'review' ------ - -<p>36 items are tagged with <em>review</em>:</p> -<ul> - <% articles_tagged_with('review').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/ruby/atom -:title: H3RALD - Tag 'ruby' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('ruby'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/ruby-compendium/atom -:title: H3RALD - Tag 'ruby-compendium' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('ruby-compendium'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/ruby-compendium/rss -:title: H3RALD - Tag 'ruby-compendium' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('ruby-compendium'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: ruby-compendium -:filters_pre: -- erb -:title: "Tag: ruby-compendium" -:feed: /tags/ruby-compendium/ -:feed_title: Tag 'ruby-compendium' ------ - -<p>2 items are tagged with <em>ruby-compendium</em>:</p> -<ul> - <% articles_tagged_with('ruby-compendium').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/ruby/rss -:title: H3RALD - Tag 'ruby' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('ruby'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: ruby -:filters_pre: -- erb -:title: "Tag: ruby" -:feed: /tags/ruby/ -:feed_title: Tag 'ruby' ------ - -<p>31 items are tagged with <em>ruby</em>:</p> -<ul> - <% articles_tagged_with('ruby').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/software/atom -:title: H3RALD - Tag 'software' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('software'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/software/rss -:title: H3RALD - Tag 'software' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('software'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: software -:filters_pre: -- erb -:title: "Tag: software" -:feed: /tags/software/ -:feed_title: Tag 'software' ------ - -<p>5 items are tagged with <em>software</em>:</p> -<ul> - <% articles_tagged_with('software').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:title: H3RALD - Tag 'techcomm' (Atom Feed) -:type: feed -:permalink: tags/techcomm/atom ------ -<%= atom_feed(:articles => articles_tagged_with('techcomm'))%>
@@ -1,6 +0,0 @@
------ -:title: H3RALD - Tag 'techcomm' (RSS Feed) -:type: feed -:permalink: tags/techcomm/rss ------ -<%= rss_feed(:articles => articles_tagged_with('techcomm'))%>
@@ -1,17 +0,0 @@
------ -:title: 'Tag: techcomm' -:type: page -:filters_pre: -- erb -:feed: /tags/techcomm/ -:feed_title: Tag 'techcomm' -:permalink: techcomm ------ - -<p>1 item is tagged with <em>techcomm</em>:</p> -<ul> - <% articles_tagged_with('techcomm').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/tools/atom -:title: H3RALD - Tag 'tools' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('tools'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/tools/rss -:title: H3RALD - Tag 'tools' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('tools'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: tools -:filters_pre: -- erb -:title: "Tag: tools" -:feed: /tags/tools/ -:feed_title: Tag 'tools' ------ - -<p>4 items are tagged with <em>tools</em>:</p> -<ul> - <% articles_tagged_with('tools').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/travelling/atom -:title: H3RALD - Tag 'travelling' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('travelling'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/travelling/rss -:title: H3RALD - Tag 'travelling' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('travelling'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: travelling -:filters_pre: -- erb -:title: "Tag: travelling" -:feed: /tags/travelling/ -:feed_title: Tag 'travelling' ------ - -<p>2 items are tagged with <em>travelling</em>:</p> -<ul> - <% articles_tagged_with('travelling').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/tutorial/atom -:title: H3RALD - Tag 'tutorial' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('tutorial'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/tutorial/rss -:title: H3RALD - Tag 'tutorial' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('tutorial'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: tutorial -:filters_pre: -- erb -:title: "Tag: tutorial" -:feed: /tags/tutorial/ -:feed_title: Tag 'tutorial' ------ - -<p>5 items are tagged with <em>tutorial</em>:</p> -<ul> - <% articles_tagged_with('tutorial').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/vim/atom -:title: H3RALD - Tag 'vim' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('vim'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/vim/rss -:title: H3RALD - Tag 'vim' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('vim'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: vim -:filters_pre: -- erb -:title: "Tag: vim" -:feed: /tags/vim/ -:feed_title: Tag 'vim' ------ - -<p>3 items are tagged with <em>vim</em>:</p> -<ul> - <% articles_tagged_with('vim').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/web20/atom -:title: H3RALD - Tag 'web20' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('web20'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/web20/rss -:title: H3RALD - Tag 'web20' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('web20'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: web20 -:filters_pre: -- erb -:title: "Tag: web20" -:feed: /tags/web20/ -:feed_title: Tag 'web20' ------ - -<p>9 items are tagged with <em>web20</em>:</p> -<ul> - <% articles_tagged_with('web20').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/webdevelopment/atom -:title: H3RALD - Tag 'webdevelopment' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('webdevelopment'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/webdevelopment/rss -:title: H3RALD - Tag 'webdevelopment' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('webdevelopment'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: webdevelopment -:filters_pre: -- erb -:title: "Tag: webdevelopment" -:feed: /tags/webdevelopment/ -:feed_title: Tag 'webdevelopment' ------ - -<p>12 items are tagged with <em>webdevelopment</em>:</p> -<ul> - <% articles_tagged_with('webdevelopment').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/website/atom -:title: H3RALD - Tag 'website' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('website'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/website/rss -:title: H3RALD - Tag 'website' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('website'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: website -:filters_pre: -- erb -:title: "Tag: website" -:feed: /tags/website/ -:feed_title: Tag 'website' ------ - -<p>12 items are tagged with <em>website</em>:</p> -<ul> - <% articles_tagged_with('website').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/wedding/atom -:title: H3RALD - Tag 'wedding' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('wedding'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/wedding/rss -:title: H3RALD - Tag 'wedding' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('wedding'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: wedding -:filters_pre: -- erb -:title: "Tag: wedding" -:feed: /tags/wedding/ -:feed_title: Tag 'wedding' ------ - -<p>6 items are tagged with <em>wedding</em>:</p> -<ul> - <% articles_tagged_with('wedding').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/writing/atom -:title: H3RALD - Tag 'writing' (Atom Feed) ------ -<%= atom_feed(:articles => articles_tagged_with('writing'))%>
@@ -1,6 +0,0 @@
------ -:type: feed -:permalink: tags/writing/rss -:title: H3RALD - Tag 'writing' (RSS Feed) ------ -<%= rss_feed(:articles => articles_tagged_with('writing'))%>
@@ -1,17 +0,0 @@
------ -:type: page -:permalink: writing -:filters_pre: -- erb -:title: "Tag: writing" -:feed: /tags/writing/ -:feed_title: Tag 'writing' ------ - -<p>17 items are tagged with <em>writing</em>:</p> -<ul> - <% articles_tagged_with('writing').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> -
@@ -0,0 +1,5 @@
+----- +title: "Forbidden" +content-type: page +----- +<p>There’s obviously nothing to see here. Go <a href="">home</a>!</p>
@@ -0,0 +1,5 @@
+----- +title: "Page Not Found" +content-type: page +----- +<p>The page you’re looking for cannot be found. Try searching the <a href="/archives/">archives</a>, maybe you’ll have better luck!</p>
@@ -0,0 +1,5 @@
+----- +title: "Internal Server Error" +content-type: page +----- +<p>Something went wrong. Try to go back <a href="/">home</a> and if things improve. If not, send a tweet <em>@h3rald</em> and I’ll try to sort it out.</p>
@@ -0,0 +1,18 @@
+----- +title: "About" +content-type: page +----- +<p>H3RALD.com was created in 2004 by Fabio Cevasco, a system architect, technical writer, programmer and IT enthusiast. It features over a hundred <a href="/archives/">articles</a> covering a wide range of topics, from programming to writing, productivity and traveling.</p> +<p>As of version 8, H3RALD.com is a completely static web site, except for a few <span class="caps">AJAX</span> calls. All the files are generated automatically thanks to the <a href="http://nanoc.stoneship.org/">nanoc</a> publishing system, an ingenious creation of <a href="http://www.stoneship.org/">Denis Defreyne</a>. Nanoc can be used to easily create static web sites using Ruby, as explained in <a href="http://www.h3rald.com/articles/take-back-your-site-with-nanoc/">this article</a>.</p> +<p>The following ruby libraries (gems) are used to compile this web site:</p> +<ul> + <li><a href="https://rubygems.org/gems/nanoc">nanoc</a>, to generate the entire web site</li> + <li><a href="https://rubygems.org/gems/extlib">Extlib</a>, in some custom Rake tasks</li> + <li><a href="https://rubygems.org/gems/bb-ruby">BB-Ruby</a>, for BBCode support</li> + <li><a href="https://rubygems.org/gems/builder/">Builder</a>, to create <span class="caps">RSS</span> and <span class="caps">ATOM</span> feeds</li> + <li><a href="https://rubygems.org/gems/less/">Less</a>, for the <span class="caps">SASS</span> filter</li> + <li><a href="https://rubygems.org/gems/therubyracer">The Ruby Racer</a>, to execute Javascript code (needed by Less)</li> + <li><a href="https://rubygems.org/gems/redcloth/">RedCloth</a>, for Textile support</li> + <li><a href="https://rubygems.org/gems/rdiscount">RDiscount</a>, for Markdown support</li> + <li><a href="https://rubygems.org/gems/glyph">Glyph</a>, for Glyph support</li> +</ul>
@@ -0,0 +1,209 @@
+----- +title: "10 programming languages worth checking out" +content-type: article +subtitle: "A quick comparison of 10 non-mainstream programming languages" +popular: true +timestamp: 1229868075 +tags: "programming" +----- +<div class="toast"> + <ul> +<li>This article has been translated into <a href="http://science.webhostinggeeks.com/10-programskih-jezika">Serbo-Croatian</a> by <cite><a href="http://webhostinggeeks.com/">Web Geeks</a></cite></li> +<li>This article has been translated into <a href="https://www.homeyou.com/~edu/10-linguagens-de-programacao">Portuguese</a> by <cite><a href="https://www.homeyou.com/~edu/">Artur Weber</a></cite></li> + </ul> +</div> +<div class="v-spacer"></div> +<p>If you program for fun or profit, chances are that you know C, C++, Java, <span class="caps">PHP</span>, Perl, Python or Ruby. These programming languages are all widely known, and, to a different degree, used in commercial applications. At least some of them can safely be considered <em>mainstream</em>, even if that word has become so overused and misused that has almost lost its original meaning, if it ever had one.</p> +<p>If you are earning your living by coding, it’s often one of these languages that pays the bills. Nevertheless, true hackers frequently meander in other directions, exploring and discovering different paradigms and methodologies, sometimes to the most <a href="http://esolangs.org/wiki/Main_Page">esoteric</a> extremes.</p> +<blockquote> +<p>“The most obvious common ‘personality’ characteristics of hackers are high intelligence, consuming curiosity, and facility with intellectual abstractions. Also, most hackers are ‘neophiles’, stimulated by and appreciative of novelty (especially intellectual novelty). Most are also relatively individualistic and anti-conformist.”</p> +</blockquote> +<p style="padding-left:4em;">– Eric S. Raymond, <cite><a href="http://catb.org/jargon/html/personality.html">The Jargon File</a></cite></p> +<p>Even if you’re particularly devoted to one of the languages mentioned above, it is normal to be curious about what else is out there. As the end of the year approaches, I find myself thinking about learning – or at least become acquainted with – some less known, more experimental, programming languages.<br /> +I was originally planning on learning another programming language as a New Year’s Resolution, which is quite common among programmers. The most difficult task turned out to be <em>choosing</em> a particular language: there are so many out there which makes it very hard to decide.</p> +<p>This article deals with ten possible candidates, and it’s far from being an exhaustive list. The programming languages described henceforth are very different from each other, but they all have one thing in common: they all stimulate my curiosity in their own, very different ways.</p> +<h3 id="haskell">Haskell</h3> +<p>I tried to learn Haskell in the past. Quietly, I started diving into the multitude of articles, tutorials, overviews and even books about this fascinating academic language which claims to achieve functional purity though remaining extremely useful, practical and efficient. Sadly, I’m still not able to fully grasp some of its most crucial concepts, such as <a href="http://en.wikibooks.org/wiki/Programming:Haskell_monads">monads</a>, but this still doesn’t put me off <em>wishing</em> to learn the language.</p> +<p>If you’ve never enountered Haskell before, I find <a href="http://www.willamette.edu/~fruehr/haskell/evolution.html">The Evolution of a Haskell Programmer</a> an amusing and informative read. Although aiming to be humorous in a way, it serves a very important didascalic purpose: it is one of the most complete collections of the different paradigms and programming approaches Haskell allows.</p> +<p>Besides its very elegant, pragmatic and almost-magical syntax, what really intrigues me about this language is what it offers, in terms of features:</p> +<ul> + <li>9 different <a href="http://www.haskell.org/haskellwiki/Implementations">implementations</a> (multiple compilers <em>and</em> interpreters)</li> + <li>Countless <a href="http://haskell.org/ghc/docs/latest/html/libraries/">standard libraries</a> <a href="http://hackage.haskell.org/packages/archive/pkg-list.html">packages</a> which can be used to solve <em>any</em> programming challenge</li> + <li>Abundant <a href="http://www.haskell.org/haskellwiki/Books_and_tutorials">learning material</a></li> + <li><a href="http://www.haskell.org/haskellwiki/Why_Haskell_matters#The_speed_of_Haskell">Speed</a> that rivals C and C++</li> + <li>Very mature cross-platform compatibility</li> +</ul> +<p>The catch? It is likely to be very different from any other language you might have encountered before, and that’s probably the reason why some people find it difficult to learn and master. That being said, if you are looking for a challenging (but very rewarding, I believe) New Year’s Resolution, you should definitely go for this.</p> +<h4>To get you started…</h4> +<ul> + <li><a href="http://www.haskell.org/">Official Haskell Wiki</a></li> + <li><a href="http://en.wikibooks.org/wiki/Haskell">Haskell Wikibook</a></li> + <li><a href="http://book.realworldhaskell.org/read/index.html">Real World Haskell</a></li> + <li><a href="http://cdsmith.wordpress.com/2007/07/29/37-reasons-to-love-haskell-playing-off-the-ruby-article/">37 Reasons to Love Haskell</a></li> + <li><a href="http://antoniocangiano.com/2007/03/13/haskell-eye-for-the-ruby-guy/">Haskell for the Ruby Guy</a></li> + <li><a href="http://www.techworld.com.au/article/261007/-z_programming_languages_haskell">A-Z of Programming Languages: Haskell</a></li> + <li><a href="http://learnyouahaskell.com/">Learn you a Haskell for Great Good!</a></li> + <li><a href="http://cgi.cse.unsw.edu.au/~dons/blog/2008/05/16">Haskell Hacking</a></li> +</ul> +<h3>Erlang</h3> +<p><a href="http://erlang.org/">Erlang</a> is a concurrent programming language originally developed by Ericsson for their real-time applications. It goes without saying that with these premise, Erlang seems the most natural answer to all concurrency problems you may encounter in your life as a programmer.<br /> +Developing with concurrency in mind feels natural and easy in Erlang, and the performance of Erlang-powered systems can be unmatched.</p> +<p>Quite a few interesting applications have been developed in this language, such as:</p> +<ul> + <li><a href="http://couchdb.apache.org/">CouchDB</a>, a popular distributed, document-oriented database</li> + <li><a href="http://yaws.hyber.org/">Yaws</a>, a high-performance web server</li> + <li>even <a href="http://www.facebook.com/note.php?note_id=14218138919&id=9445547199">Facebook Chat</a></li> +</ul> +<p>The price Erlang adepts have to pay, as Damien Katz (CouchDB creator and Erlang enthusiast) <a href="http://damienkatz.net/2008/03/what_sucks_abou.html">points out</a>, is:</p> +<ul> + <li>Awkward syntax, inspired by Prolog</li> + <li>Weird if expressions</li> + <li>Difficult string operations</li> + <li>No classes or namespaces</li> +</ul> +<p>…this list could go on. Damien’s article is an interesting read, enough to put anyone off learning the language if read superficially. On the other hand, it provides an invaluable resource for newcomers who wish to be prepared before taking on the challenge of learning Erlang to build their next scalable, concurrent and industry-proof application.</p> +<h4>To get you started…</h4> +<ul> + <li><a href="http://www.erlang.org/">Official Erlang Web Site</a></li> + <li><a href="http://www.onlamp.com/pub/a/onlamp/2007/09/13/introduction-to-erlang.html">An Introduction to Erlang</a></li> + <li><a href="http://www.defmacro.org/ramblings/concurrency.html">Erlang Style Concurrency</a></li> + <li><a href="http://www.planeterlang.org/">PlanetErlang</a></li> + <li><a href="http://www.erlang-projects.org/">Erlang Projects</a></li> +</ul> +<h3 id="io">Io</h3> +<p><a href="http://iolanguage.com/">Io</a> is a relatively new programming language by Steve Dekorte which recently surfaced from Google’s oblivion (if you tried googling for it a few months ago, you couldn’t event find its home page) thanks to a short vut stimulating <a href="http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html">article</a> by <a href="http://whytheluckystiff.net/">_why</a>. It doesn’t have the best name for a programming language, that’s for sure, but it’s definitely a breath of fresh air in terms of the way it works.</p> +<p>Its unusual, minimalist and yet elegant and powerful syntax reminds of Smalltalk, but the language goes far beyond that. Io is an object-oriented, prototype-based, message-based and fully-reflective programming language. This means that you use messages like in Smalltalk, you create objects like in Javascript and every bit of your code can be inspected and passed around as you see fit.</p> +<p>If you think Ruby allows fancy (and potentially dirty) tricks like metaprogramming and monkey-patching, Io takes this to a whole different level, imposing virtually no limitation to the programmer. What’s truly amazing is that its grammar and syntax are so minimal that you can learn them in literally 10 minutes. After that, you can start experimenting, first with its extremely small core and then with its extension libraries and bindings.</p> +<p>Io has indeed a lot of potential. Granted, it’s still young and under development, but also already quite efficient and suitable for real-world tasks demanding high speed and concurrency. It is implemented in C, but Ola Bini started to design a similar language called <a href="http://kenai.com/projects/ioke/">Ioke</a> for the Java Virtual Machine.</p> +<h4>To get you started…</h4> +<ul> + <li><a href="http://iolanguage.com/">Official Io Web Site</a></li> + <li><a href="http://github.com/stevedekorte/io/tree/master">Io Repository on Github</a></li> + <li><a href="http://tech.groups.yahoo.com/group/iolanguage/">Io user group</a></li> + <li><a href="http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html">Io has a very clean mirror</a></li> + <li><a href="http://iota.flowsnake.org/">Io Notes</a></li> + <li><a href="http://wiki.type-z.org/index.php/Io/IoLanguage">Io Language Notes</a></li> + <li><a href="http://ozone.wordpress.com/2006/03/15/blame-it-on-io/">Blame it on Io! A slow-paced introduction to the Io language</a></li> + <li><a href="http://en.wikibooks.org/wiki/Programming:Io">Io Wikibook</a></li> +</ul> +<h3 id="plt-scheme"><span class="caps">PLT</span> Scheme</h3> +<p>I stumbled upon the <a href="http://plt-scheme.org/"><span class="caps">PLT</span> Scheme web site</a> while browsing for different Lisp flavors about a year ago. At the time, I was determined to learn the rudiments of Lisp and I started reading a few articles and books on this old and yet still popular language.<br /> +Although I was originally put off by certain Common Lisp literature, which dismissed Scheme as an almost-heretic attempt to revitalize an venerable language, I soon found out that Scheme – and <span class="caps">PLT</span> Scheme in particular – is definitely worthy of attention and interest.</p> +<p>Being a technical writer, I immediately became fond of the <a href="http://docs.plt-scheme.org/guide/"><span class="caps">PLT</span> Scheme Guide</a>, one of the clearest and most well-organized examples of documentation available for a programming language I’ve ever come across.<br /> +The manual is exquisitely crafted as a Getting Started Manual and a Reference Book at the same time, though remaining pleasant to read sequentially: a rare trait in technical documentation. Best of all, it’s free: you simply have no real excuse not to read it.</p> +<p>Besides its excellent documentation, <span class="caps">PLT</span> Scheme feels like a fresh and modern implementation of one of the two most important dialects of Lisp. It’s cross-platform, it has an extensive <a href="http://planet.plt-scheme.org/">collection of packages</a> and a very active community behind it. <br /> +After my first attempt to learn Haskell, I felt compelled to try out <span class="caps">PLT</span> Scheme and it immediately felt much easier and more user friendly to learn, partly because of <a href="http://download.plt-scheme.org/drscheme/">DrScheme</a> a dedicated <span class="caps">IDE</span>/learning tool optimized to get you started and feel comfortable with the language.<br /> +Caveats? None, unless you have an adversion for parenthesis, that is.</p> +<h4>To get you started…</h4> +<ul> + <li><a href="http://plt-scheme.org/">Official <span class="caps">PLT</span> Scheme Web Site</a></li> + <li><a href="http://docs.plt-scheme.org/guide/index.html"><span class="caps">PLT</span> Scheme Guide</a></li> + <li><a href="http://planet.plt-scheme.org/">PLaneT</a></li> + <li><a href="http://docs.plt-scheme.org/quick/">Quick: An Introduction to <span class="caps">PLT</span> Scheme with Pictures</a></li> + <li><a href="http://docs.plt-scheme.org/more/">More: Systems Programming with <span class="caps">PLT</span> Scheme</a></li> +</ul> +<h3 id="clojure">Clojure</h3> +<p><a href="http://clojure.org/">Clojure</a> is the most recent and notable attempt to bring Lisp back to life and ready to face the challenges posed to IT systems by the new century: concurrency and scalability. Because it runs on the Java Virtual Machine, you also get Java interoperability for free, in a more Lispy flavour. Although I’m a bit reluctant to deal with anything related to Java nowadays, Clojure’s approach makes it more appealing.</p> +<p>Unlike other Lisps (and Schemes) you may have encountered before, Clojure comes with some interesting additions:</p> +<ul> + <li><a href="http://clojure.org/multimethods">Multimethods</a></li> + <li><a href="http://clojure.org/agents">Agents asynchronous actions</a></li> + <li>Some interestings <a href="http://clojure.org/special_forms">special forms</a></li> + <li>Many pre-built <a href="http://clojure.org/data_structures">data structures</a>, like Vectors, Maps, Sets, Collections, …</li> +</ul> +<p>Despite all this, Rich Hickey became increasingly popular both in the Lisp and Java world for creating such an interesting and well-designed language. Unlike with many new (and old) programming languages, I have yet to find a single blog post or article which is seriously criticizing Clojure in any way.</p> +<h4>To get you started…</h4> +<ul> + <li><a href="http://clojure.org">Official Clojure Web Site</a></li> + <li><a href="http://groups.google.com/group/clojure">Clojure User Group</a></li> + <li><a href="http://www.infoq.com/presentations/hickey-clojure">Clojure presentation on InfoQ</a></li> + <li><a href="http://netzhansa.blogspot.com/2008/10/trying-clojure.html">Trying Clojure</a></li> + <li><a href="http://groups.google.com/group/clojure/msg/f038decc18c7da37">My first look at Clojure</a></li> + <li><a href="http://enclojure.net/Index.html">Enclojure</a></li> +</ul> +<h3 id="squeak">Squeak</h3> +<p><a href="http://www.squeak.org/">Squeak</a> has become one of the most popular Smalltalk implementations available. It has been used in some very interesting projects:</p> +<ul> + <li><a href="http://wiki.laptop.org/go/Smalltalk_Development_on_XO">EToys</a>, a kids-oriented but powerful development environment built in Squeak, was included as part of the educational sofware suite of the <a href="http://www.laptop.org"><span class="caps">OLPC</span></a>.</li> + <li><a href="http://www.seaside.st/">Seaside</a> is a modern and very productive web framework running on Squeak.</li> + <li><a href="http://www.croquetproject.org/index.php/Main_Page">Croquet</a> is a development solution to build complex, multi-user virtual worlds.</li> +</ul> +<p>If you ask <a href="http://www.stonehenge.com/merlyn/">Randal Schwartz</a>, he’ll explain you <a href="http://www.infoq.com/articles/smalltalk-comeback-schwartz">why</a> Squeak and Smalltalk are at least worth a look. Personally, while I’m attracted by Smalltalk’s unique approach to programming and its friendly syntax, I am still a bit overwhelmed by the way it works. <br /> +Squeak, and Smalltalk in general, runs inside (literally) a virtual machine written in Squeak itself. This means that:</p> +<ul> + <li>You write your code inside Squeak</li> + <li>You debug, inspect and interact your code inside squeak</li> + <li>You run your code inside Squeak</li> + <li>You can install Squeak on virtually any platform, including mobile phones, fairly easily</li> +</ul> +<p>Everything lives inside Squeak. It’s very weird to picture this without actually trying it, so I suggest you <a href="http://www.squeak.org/Download/">download it</a> and give it a try: it will definitely be an unusual but intriguing experience.</p> +<p>Smalltalk takes programming to a whole different level, which is simply unimaginable for other languages. In return, it asks you to fully embrace the Smalltalk way of doing things, according to which external text editors, external version control systems and other common tools familiar to traditional programmers simply loose their purpose.</p> +<h4>To get you started…</h4> +<ul> + <li><a href="http://www.squeak.org/">Official Squeak Web Site</a></li> + <li><a href="http://squeakbyexample.org/">Squeak by Example</a></li> + <li><a href="http://www.squeakland.org/">SqueakLand</a></li> + <li><a href="http://www.infoq.com/articles/smalltalk-comeback-schwartz">Ruby’s Roots: Smalltalk Comeback and Randal Schwartz on Smalltalk</a></li> + <li><a href="http://twit.tv/floss29"><span class="caps">FLOSS</span> Weekly 29: Dan Ingalls</a></li> +</ul> +<h3 id="ocaml">OCaml</h3> +<p>Like Smalltalk, <a href="http://caml.inria.fr/">OCaml</a> has been getting more attention recently than in the past. Sure, not everyone is planning to learn is these days, but after reading <a href="http://enfranchisedmind.com/blog/2008/04/14/useful-things-about-static-typing/">this article</a> I admit I was eager to give it a proper try.</p> +<p>Despite being statically typed, OCaml offers some of the features which are common in dynamically typed languages like Ruby, such as duck typing, the possibility of creating Domain-Specific Languages and even extending the language syntax with custom operators and constructs.</p> +<p>Additionally, the <a href="http://batteries.forge.ocamlcore.org/">OCaml Batteries Included</a> project was created as an attempt to bundle a standard set of commonly-used library together with the language core. Even if this project is still in alpha stage, it definitely <a href="http://dutherenverseauborddelatable.wordpress.com/2008/11/07/a-taste-of-ocaml-batteries-included/">looks promising</a>.</p> +<h4>To get you started…</h4> +<ul> + <li><a href="http://caml.inria.fr/">Official Caml Web Site</a></li> + <li><a href="http://www.ocaml-tutorial.org/">Objective Caml Tutorial</a></li> + <li><a href="http://www.csc.villanova.edu/~dmatusze/resources/ocaml/ocaml.html">A Concise Introduction to Objective Caml</a></li> + <li><a href="http://wiki.cocan.org/">The OCaml Alliance Network</a></li> + <li><a href="http://ocamlnews.blogspot.com/">OCaml News</a></li> + <li><a href="http://batteries.forge.ocamlcore.org/">OCaml Batteries Included</a></li> +</ul> +<h3>Factor</h3> +<p><a href="http://factorcode.org/">Factor</a> is to Forth what <a href="http://clojure.org">Clojure</a> is to Common Lisp: a reincarnation of an ancient language in a more modern and practical form. In the specific case, although it borrows from Lisp and Self as well, Factor retains the main characteristics of its ancestor: it’s stack-based, concatenative and has postfix notation.<br /> +While this is enough to put some people off, if you digg deeper you’ll discover that Factor offers all the most important features available in contemporary programming languages: garbage collection, dynamic typing, an object system, … they’re just presented in a very different way:</p> +<blockquote> +<p>“Learning Factor is tough. One reason for this is that Factor is very different from other programming languages. Programmers today are used to imperative programming languages where data is stored and passed around in named variables (or function calls, which name their variables). Factor is the opposite of this. A lot of code tends to be written in a functional style, and even more jarringly, variables are rare, only referenced in a small fraction of words. Nobody intends to change any of this; it’s a feature, not a bug!”</p> +</blockquote> +<p style="padding-left:3em;">– Daniel Ehrenberg, <cite><a href="http://useless-factor.blogspot.com/2008/01/learning-factor.html">Learning Factor</a></cite></p> +<p>Like Haskell, Factor demands a completely different programming approach to what you may be used to, but once you get past that, it can be as useful as any other language, if not more. The <a href="http://docs.factorcode.org/content/article-furnace.html">Furnace</a> web framework, which powers the <a href="http://concatenative.org/">Concatenative</a> wiki, is entirely built in Factor and runs on top of a Factor web server.</p> +<h4>To get you started…</h4> +<ul> + <li><a href="http://factorcode.org/">Official Factor Web Site</a></li> + <li><a href="http://concatenative.org/wiki/view/Factor">Factor on the Concatenative Wiki</a></li> + <li><a href="http://docs.factorcode.org/">Factor Documentation</a></li> + <li><a href="http://learnfactor.org/">Learn Factor</a></li> + <li><a href="http://planet.factorcode.org/">Planet Factor</a></li> +</ul> +<h3 id="lua">Lua</h3> +<p><a href="http://www.lua.org/">Lua</a> (“Moon” in Portuguese), is a lightweight and fast scripting language which can be easily embedded in other systems. Compared to the other languages mentioned in this article, it is definitely the less alien of the lot: if you know a tiny bit of C or Java, you’ll be able to understand (and possibly write) 80% of Lua code without reading a single line of its documentation.</p> +<p>Despite its simplicity, Lua is considered a multi-paradigm language supporting imperative, functional and even object-oriented approaches. More specifically, Lua’s <em>tables</em> provide a simple but powerful way to create arrays, hashes and even classes (or better, prototypes). Simple (and multiple) inheritance is achieved through <em>metatables</em>, which allow calls to undefined functions to be <em>transferred</em> to parent tables.</p> +<p>Lua programs are not interpreted in the traditional way: they are compiled to bytecode and then executed in the Lua Virtual Machine. As a result, Lua code tends to be executed much faster than other interpreted languages, so fast that “as fast as Lua” has become a proverbial expression.<br /> +Lua found its niche in embedded applications and games development, basically everywhere there’s the need to provide a fast scripting language which is also very easy to learn and extend with C or other languages.</p> +<h4>To get you started…</h4> +<ul> + <li><a href="http://www.lua.org/">Official Lua Web Site</a></li> + <li><a href="http://www.lua.org/manual/">Lua Manual</a></li> + <li><a href="http://lua-users.org/">Lua-users</a></li> + <li><a href="http://icculus.org/~theoddone33/lua/">Learning Lua</a></li> + <li><a href="http://lua.gts-stolberg.de/en/index.php?uml=1">Lua for Beginners</a></li> +</ul> +<h3 id="scala">Scala</h3> +<p>You may not be happy to see <a href="http://www.scala-lang.org/">Scala</a> in this list instead of other very valid and equally powerful languages for the Java Virtual Machine such as <a href="http://groovy.codehaus.org/">Groovy</a>. While there was no doubt on whether Clojure should have been included or not, I was a bit hesitant to include Scala. In the end, I chose to do so simply because Scala fits better in this list than other languages: as you should have noticed by now, I am somehow more inclined to learn functional languages as opposed to their object-oriented counterparts.</p> +<p>Scala is both object oriented and functional. It offers the best of both worlds: classes, traits and mixins which may be familiar to <span class="caps">OOP</span> lovers but also anonymous functions, currying and pattern matching which may please Haskell enthusiasts. Additionally, it’s also compatible with Java: so if you use Java for work, trying out Scala for pleasure is definitely the most logical next step, especially if you want to experiment with functional programming in the meantime.</p> +<p>Compared to learning a fully-functional (no pun intended) language like Haskell, Clojure or <span class="caps">PLT</span> Scheme, learning Scala is definitely easier and will feel less alien.</p> +<h4>To get you started…</h4> +<ul> + <li><a href="http://www.scala-lang.org/">Official Scala Web Site</a></li> + <li><a href="http://blogs.zdnet.com/Burnette/?p=690">The Case for Scala</a></li> + <li><a href="http://scala.sygneca.com/">Scala Wiki</a></li> + <li><a href="http://grok-code.com/75/learning-scala-with-project-euler/">Learning Scala with Project Euler</a></li> + <li><a href="http://www.codecommit.com/blog/scala/roundup-scala-for-java-refugees">Roundup: Scala for Java Refugees</a></li> +</ul> +<h3>Epilogue</h3> +<p>There are so many interesting programming language out there that it’s very hard to keep track of all of them. I hope this list can aid you in the right direction, whichever it may be. <br /> +Some people may debate over the very essence of this article: why <em>choosing</em> a programming language? Why spending time and energy in a task which may lead to a lot of confusion in your mind and lead you nowhere? What’s the purpose of learning something which may feel totally alien to you?</p> +<p>A programming language is ultimately just a tool to get your job done. If you have to write an end-user, desktop <span class="caps">GUI</span> application which will always run on Windows and which needs to inteface with Microsoft technologies, you’ll choose C# over Haskell, there’s no doubt about that. Especially if 500 developers in your company already develop in C# and you don’t, as a matter of fact, have a saying on the matter.</p> +<p>But what if you <em>could</em> choose? What if you wanted to develop your own geeky command line application to automate a particular task for yourself, and not because someone else tells you to do so? Would you be willing to experiment with something totally different and potentially difficult just for the sake of learning new things?</p> +<p>If the answer is yes, then you should take a look at this list again. Not now, maybe not this month or this year, but when you feel the time is right, and give one of these languages a shot. It may not end well (so far I attempted to learn Haskell twice, with no luck), but I promise you it will be worthwhile, in the long run. <br /> +If you already mastered some of these languages already, or even all of them, be assured that they’re plenty out there ready to be discovered and open your mind even more. Or, if you prefer, there are a lot of minds out there which may need guidance in learning and discovery. Help them. Write articles, tutorials, books, educate and evangelize: ultimately, that will be your greatest reward.</p>
@@ -0,0 +1,107 @@
+----- +title: "10 Reasons to Learn Ruby" +content-type: article +subtitle: "Ten possible reasons to learn the Ruby Programming Language" +popular: true +timestamp: 1188988800 +tags: "ruby" +----- +<h3>Preamble</h3> +<p>I discovered Ruby fairly recently, through the excellent Ruby on Rails framework<sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup>. Although I don’t consider myself a Ruby expert by any means, I read the PickAxe<sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup>, I’ve coded a few utilities for my personal use in Ruby and I’m currently developing with Rails during my free time.</p> +<p>Ruby is currently my programming language of choice; I started off with Turbo Pascal in high school, discovered C and C++ at university, did my thesis in Java and learned <span class="caps">PHP</span> from scratch because I wanted to learn how to make websites quickly and easily. I guess I feel compelled to code sometimes, more as a form of entertainment than anything else. Rather dissatisfied with what I tried language-wise, I was determined to start learning either Python or Ruby. I chose the latter because I didn’t want incorrect indentation to break my code<sup class="footnote" id="fnr3"><a href="#fn3">3</a></sup>, and here I am, heaping praise upon it.</p> +<p>There are plenty<sup class="footnote" id="fnr4"><a href="#fn4">4</a></sup> of introductions, tutorials, articles and essays of different sorts which aim to guide the novice and advise the guru on how to get the most out of Ruby. This article, however, is not one of them.</p> +<p>It’s more of a modest, humble, and incomplete list of a few reasons which may (or may not) entice you to use Ruby or at least play with it a bit. A word of caution: if you are using another programming language for work or whatever, don’t complain to me if you don’t want to use it anymore – that’s exactly what happened to me, but luckily, it didn’t matter. Ruby is a very beautiful and elegant language, but like all things of this sort, it may well poison your mind and corrupt your soul…</p> +<p>You have been warned.<br /> +h3. Why learn Ruby?</p> +<h4>#1 – You get all the treats without the tricks</h4> +<p>Ruby borrows from all the best programming languages out there, from smalltalk to Java, Perl to Python<sup class="footnote" id="fnr5"><a href="#fn5">5</a></sup>. Basically, here’s the features and functionalities Ruby gives you which you may have seen elsewhere:</p> +<ul> + <li><em>Exceptions:</em> Believe it or not, exceptions are one of the most important things to master when developing any kind of application. PHP4 programmers probably won’t know anything about them and they’ll tell you to just print stuff on the screen or use their “extremely advanced” class for error handling. Please, ignore them. Fortunately for all of us, Ruby comes with try/catch (or better, begin/rescue) blocks and a series of predefined, extensible Exceptions to handle errors properly.</li> + <li><em>Namespaces:</em> Ruby modules make excellent and easy-to-use namespaces, for the joy of Java and C++ enthusiasts.</li> + <li><em>Built-in Regular Expressions:</em> For all the Perl monkeys, you can put something between slashes and it will become a regular expression, ready to be matched with a =~ operator.</li> + <li><em>Overloadable operators:</em> Ruby lets you define operators like +, -, etc., for any of your classes.</li> + <li><em>Packages:</em> Called “gems”, they really are solid and precious indeed…and they work! Packages support dependencies, and they can be either cross-platform or platform-dependent.</li> + <li><em>Interactive Shell:</em> the Interactive Ruby Shell can be used to test Ruby code instantly, similar to the Python console.</li> + <li><em>Unit Testing</em>: The <code>Test::Unit</code> module makes things so easy that you really don’t have any excuse not to test your code.</li> +</ul> +<h4>#2 – You’ll love the little things</h4> +<p>Ruby is elegant. Why’s that? Because it doesn’t focus on making code <em>concise</em> so much as <em>readable and usable</em>. Here are some tips to help you out:</p> +<ul> + <li>You can use both <em>if</em> and <em>unless</em> in condition statements. Of course you can just use <em>if</em> and negate the condition, but <em>unless</em> can be less error-prone at times. Furthermore, you can use both operators as conditional modifiers, after a statement rather than before: <em>order.new unless order.exists</em>.</li> + <li>You can use question marks and exclamation marks at the end of your methods. Although no convention is enforced, ? is added if the method should return true or false, while ! is used to clarify that the method does something forcefully, like destroying a database record, chopping off the last character of a string, etc.</li> + <li>You can use the <em>alias</em> directives to create an alias for a method already defined. In this way you can have an <em>exist</em> and an <em>exists</em> method at no additional cost or repetition.</li> + <li>You can use the <em>attr_reader</em>, <em>attr_writer</em> or <em>attr_accessor</em> directives to automatically generate getter and setter methods for specified class members.</li> + <li>Some naming conventions are enforced for your own sanity: constants, classes and modules are capitalized, methods and members must start with a lowercase letter; global variables are prepended by a $, instance variables by <code>@</code> and class variables by <code>@@</code>; etc.</li> + <li>Parentheses are optional in method calls. You can therefore write <em>File.open(“/home/h3rald/test.txt”)</em> or simply <em>File.open “/home/h3rald/test.txt”</em>, which is particularly handy with methods that don’t take parameters.</li> +</ul> +<h4>#3 – You won’t ever use a semicolon again</h4> +<p>You want to add another instruction? Just go on the next line. Hit <return> and you’re done. In Ruby, like in Python, newlines matter and you don’t have to remember to end your instructions with a semicolon. Unfortunately this means that you won’t be able to write your whole program in a single line of code, like the C++ folks… that’s too bad, isn’t it?</p> +<p><strong><span class="caps">UPDATE</span>:</strong> Indeed you <span class="caps">CAN</span> use semicolons as line delimiters in Ruby as well, the point, however, is that you don’t have to.</p> +<h4>#4 – Everything is an object, as it should be</h4> +<p>When I studied Java they taught me that everything is an object.</p> +<p><em>- “So 14 and 374346.678 are objects then?”</em><br /> +<em>- “No, silly, they are numbers!”</em></p> +<p>In Ruby, numbers, strings, Boolean values <em>et al</em> are objects. Really. This means you’ll write things like:</p> +<div class='ruby'><pre><code>"YOU SHOULDN'T ALWAYS USE CAPITALS".downcase #=> outputs "you shouldn't always use capitals" +-12.abs #=> outputs 12</code></pre></div><p>instead of something like:</p> +<div class='ruby'><pre><code># PHP Code + +strtolower("YOU SHOULDN'T ALWAYS USE CAPITALS"); +abs(-12);</code></pre></div><p>You save time, you save brackets, and it just makes more sense.</p> +<h4>#5 – Everything has a value</h4> +<p>Or “you’ll hardly ever use return to return values”. In a nutshell, all Ruby instructions return a value, even variable assignments, so you don’t really need to use the “return” keyword at the end of a method; the value of the last assignment or <em>any</em> other expression will always be returned.</p> +<h4>#6 – You can alter your environment in any way you like</h4> +<p>The first time I saw this, it really freaked me out. Imagine a typical programming situation: you start using a system class or a class written by someone else and you notice that you’d like to have an additional method. At this point you have a few ways to handle this in ordinary programming languages:<br /> +s</p> +<ul> + <li>You modify the developer’s source code, if you have access to it. This is normally not a good idea, and you shouldn’t do it.</li> + <li>You derive a new class from the original one, and you implement the new method there. This is a good idea, but it could be overkill for just one method, and you may have to update some of your other code accordingly.</li> + <li>You give up, and you just create the method outside the class, somewhere else. This can be done, but it is not very elegant and goes against Object Oriented Programming.</li> +</ul> +<p>In Ruby, you can simply add the method to the original class, without having to hack the original source code, and even for system classes! You want to have a method to automatically convert a measurement from meters to feet? You can simply extend the Numeric class as follows:</p> +<div class='ruby'><pre><code>class Numeric + def feet + self*3.2808399 + end +end</code></pre></div><p>From now on, all your numbers will have a <em>feet</em> method, which can be used just like any other method that was originally defined for the class:</p> +<div class='ruby'><pre><code>5.feet #=> Returns 16.4041995</code></pre></div><p>Basically, Ruby classes are never closed and can be modified at any time from anywhere. Use with care, of course.</p> +<h4>#7 You won’t get unicorns from birds and horses, but you’ll still get donkeys if you want</h4> +<p>I distinctly remember my C++ professor at university using animals to illustrate key object-oriented concepts like classes and inheritance. Weird things came in when she tried to explain multiple inheritance to inherit a class Pegasus from a class Bird and a class Horse. It had methods like “fly” and “neigh”… crazy stuff, anyhow, Ruby does not offer multiple inheritance. <br /> +This seems to be the trend, after all, and of course it’s up to tastes. I don’t quite fancy multiple inheritances, as they may lead to unpredictable things. Nevertheless, it is possible to create “mix-ins” using Ruby modules, so that members and methods defined in a module will be added to a particular class if the module is included in it.</p> +<h4>#8 You don’t really need <span class="caps">XML</span></h4> +<p><span class="caps">XML</span> is a nice, general-purpose markup language which can be processed by every programming language and used everywhere. Unfortunately, it can also be quite verbose to write, very difficult to parse, and let’s be honest, it’s not really readable at first glance in many cases, unlike the following code snippet:</p> +<div class='yaml'><pre><code>regexp: !ruby/regexp /a-zA-Z/ +number: 4.7 +string: a string</code></pre></div><p>This is definitely easier and more readable than <span class="caps">XML</span>, isn’t it? Welcome to <span class="caps">YAML</span>, Ruby’s favorite markup (but not really<sup class="footnote" id="fnr6"><a href="#fn6">6</a></sup>) language, which can be used to represent any Ruby object in a simple, clear and yet complete way. <br /> +Ruby <em>can</em> parse <span class="caps">XML</span>, but YAML’s simplicity convinced a lot of developers to use it as an alternative to <span class="caps">XML</span> for configuration files, for example (Rails does this).<br /> +The code snipped presented before was obtained by executing the following line of Ruby code:</p> +<div class='ruby'><pre><code>{"string" => "a string", "number" => 4.7, "regexp" => /a-zA-Z/}.to_yaml</code></pre></div><p>The <em>to_yaml</em> method is defined for the Object class, which is the father of all of the other classes, and thus it is available in all Ruby objects. This means that you can convert anything into <span class="caps">YAML</span> <em>and</em> re-convert anything back into Ruby objects, with total transparency for the developer. So much for parsing, huh?</p> +<h4>#9 Lambda is much more than a Greek letter</h4> +<p>Ruby borrows some magic from Lisp and Perl with Proc objects and blocks. Procs are _"blocks of code that have been bound to a set of local variables. Once bound, the code may be called in different contexts and still access those variables." _<sup class="footnote" id="fnr7"><a href="#fn7">7</a></sup> Consider the following:</p> +<div class='ruby'><pre><code>def gen_times(factor) + return Proc.new {|n| n*factor } + end + + times3 = gen_times(3) + times5 = gen_times(5) + + times3.call(12) #=> 36 + times5.call(5) #=> 25 + times3.call(times5.call(4)) #=> 60</code></pre></div><p>I could have used the <em>lambda</em> method instead of <em>Proc.new</em> and gotten the same result. This should ring a bell for people who know Perl and Python (or Lisp)<sup class="footnote" id="fnr8"><a href="#fn8">8</a></sup>. You can do the same thing in <span class="caps">PHP</span> as well, but most people don’t really use the function.<sup class="footnote" id="fnr9"><a href="#fn9">9</a></sup></p> +<p>Additionally, Ruby makes extensive use of blocks, sort of “unborn Procs”<sup class="footnote" id="fnr10"><a href="#fn10">10</a></sup>, for example, to iterate the contents of an object and execute some code, like the <em>each</em> method available for the Array class:</p> +<div class='ruby'><pre><code>[1, 2, 4, 6, 8].each {|c| puts c*2} #=> outputs each element multiplied by 2 in a new line.</code></pre></div><p>Should the code in the block exceed one line, you’re advised (but not required) to include the block within <em>do … end</em> instead of using braces. Ruby folks don’t like braces much, really.</p> +<h4>#10 – You can go on Rails</h4> +<p>Last but not least, you can always use Ruby on Rails for developing web applications. Deployment may not be as easy as it is with <span class="caps">PHP</span>, but Rails was built in Ruby because Ruby has features no other language can offer.</p> +<h3>Conclusion</h3> +<p>Time’s up. You’ve probably made up your mind about Ruby already, and you are either playing with it already, or you’re totally ignoring it. However, the next time you’re frustrated because your code looks ugly and you think you could have done the same thing with half the code you got, don’t blame me!</p> +<h3>Notes</h3> +<p class="footnote" id="fn1"><a href="#fnr1"><sup>1</sup></a> <a href="http://www.rubyonrails.org">Ruby on Rails</a>, <span class="caps">MVC</span> Web Development Framework.</p> +<p class="footnote" id="fn2"><a href="#fnr2"><sup>2</sup></a> <a href="http://pragprog.com/book/ruby/programming-ruby/" title="2nd Ed.">Programming Ruby</a>, by Dave Thomas & others, Pragmatic Programmers, 2004</p> +<p class="footnote" id="fn3"><a href="#fnr3"><sup>3</sup></a> Not entirely correct, but sort of. For more information on Python’s indentation rules and myths, read <a href="http://www.secnetix.de/~olli/Python/block_indentation.hawk">Python: Myths about Indentation</a>.</p> +<p class="footnote" id="fn4"><a href="#fnr4"><sup>4</sup></a> For a list of Ruby tutorials, refer to the <a href="http://www.ruby-lang.org/en/documentation/">Documentation</a> section of the Official Ruby Website.</p> +<p class="footnote" id="fn5"><a href="#fnr5"><sup>5</sup></a> For more information on Ruby, and in particular on the similarities and differences with other languages, refer to <a href="http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/">Ruby from Other Languages</a>.</p> +<p class="footnote" id="fn6"><a href="#fnr6"><sup>6</sup></a> <span class="caps">YAML</span> is Not a Markup Language.</p> +<p class="footnote" id="fn7"><a href="#fnr7"><sup>7</sup></a> Definition and example taken from the official Ruby documentation for class <a href="http://www.ruby-doc.org/core/classes/Proc.html">Proc</a>.</p> +<p class="footnote" id="fn8"><a href="#fnr8"><sup>8</sup></a> For some example on lambda functions in Python, see <a href="http://www.secnetix.de/~olli/Python/lambda_functions.hawk">Python: Lambda Functions</a>.</p> +<p class="footnote" id="fn9"><a href="#fnr9"><sup>9</sup></a> For examples of “lambda functions” in <span class="caps">PHP</span> using create_function(), see <a href="http://www.webmasterworld.com/forum88/7414.htm">this</a>.</p> +<p class="footnote" id="fn10"><a href="#fnr10"><sup>10</sup></a> For more detailed information on Ruby’s Procs, blocks etc. refer to <a href="http://eli.thegreenplace.net/2006/04/18/understanding-ruby-blocks-procs-and-methods">Understanding Ruby blocks, Procs and methods</a>.</p>
@@ -0,0 +1,65 @@
+----- +title: "10 reasons why I didn't update my blog" +content-type: article +timestamp: 1213234200 +tags: "internet|rant|personal|writing" +----- +<p><em>“It has been a while since my last post, sorry about that”</em><br /> +I read this sentence (or something along those lines) on many blogs on the Internet, including mine. As a matter of fact, I actually didn’t write a meaningful post on my blog for a long time and no, probably this is not going to change that either.</p> +<p>Yesterday I started thinking <strong>why</strong> this happens, not only to me but to a lot of other non-professional bloggers. A professional blogger &emdash; for what I can tell &emdash; is someone like Michael Arrington or Gina Trapani: someone who has the luck (or course) to be able to just blog for a living.</p> +<p>I don’t blog for a living: my site is self-sustaining via a few very unobtrusive ads, just that. I have a full time job, and I blog in my spare time about my interests, without even trying to make “proper” money from my site. There’s nothing wrong with it: I believe there are some other people in my condition, and that’s quite normal.</p> +<p>That being said, let’s examine the ten most common reasons why I (and you too, maybe) end up not updating my blog, <em>even when I have time to do so</em>.h3. Someone already blogged about it</p> +<p>This is very irritating. I am obsessed with original content. I want to write about something other people <em>never</em> (or hardly ever) wrote about. As a consequence, I often find myself googling the same topic I’m planning my blog post on, and I <em>obviously</em> often get quite a few results, too!</p> +<p>I actually wanted to title this very post “The Blogger’s Block”, but I immediately thought of putting that very title into Google, just to see if someone else already blogged about it. Sure they did! Not original at all, tough luck. <br /> +It also happened a few weeks ago: I wanted to write about the current state of tech news sites and Antonio Cangiano comes up with a similar <a href="http://antoniocangiano.com/2008/05/29/random-thoughts-on-social-sites/">post</a>. Very interesting indeed, but quite annoying as well!</p> +<p>OK scrap that, think about something else…</p> +<p>This can potentially go on for days, and the only solution is of course trying not to worry about it, and just write the damn thing (that’s what I did to write this post).</p> +<h3>I didn’t research enough on the subject</h3> +<p>This happens tipically with reviews, round-ups, etc. Things I actually enjoy writing, but which may be easily subject to (harsh) criticism unless ou do them right. <br /> +I wanted to write a review of the new Treo 750 I bought. I’ve been using for a while, I learnt a few interesting hacks etc. etc. Unfortunately the 3G iPhone came out, so everyone is all hyped up about it. Too bad that I, being Italian and living in Italy, I never actually touched the damn thing!<br /> +What has that got to do with my Treo 750? Well, it would be nice to write a review of a Windows Mobile 6 phone comparing to the upcoming Apple wonder, wouldn’t it?</p> +<p>The solution to this would be trying to limit the scope of your post: screw Apple, let’s just focus on my Treo 750 and on the amazing amount of programming languages I can use on it!</p> +<h3>After researching for X days, I realized it was all a waste of time</h3> +<p>This happens with big articles. I once thought about writing a comprehensive article about all the possible ways to deploy a Ruby on Rails web site. Cool, isn’t it? I started researching about all the most esoteric lightweight web servers, about JRuby, Glassfish, IronRuby, … A lot of things. And new solutions kept coming up, and with them more and more posts, and then even entire books on the subjects.</p> +<p>Very frustrating. I abandoned the whole thing, because there was simply no reason to go on researching: it was all a waste of time.</p> +<p>How to fix this? Again, reduce the scope of your article so that you are able to reduce the time you spend researching about it. Or maybe try to get paid to write it, so that even if there’s plenty of articles about the same subject, at least you have a concrete purpose to write yours.</p> +<p>Erhm, yes, by the way, keep an eye on <a href="http://www.sitepoint.com">SitePoint</a> in the next few days/weeks, OK?</p> +<h3>I only write when I’m inspired, and now I’m not</h3> +<p>Very, very common. I normally think about a very cool article to write in the evening, or early in the morning, or whenever I don’t have access to a computer or the Internet. <br /> +Of course I don’t forget about it, but by the time I have a chance to actually write it, I really don’t fancy doing so. Oh, the irony! <br /> +It happened today, actually, during my lunch break: I was supposed to write this post but I didn’t feel like it. I lost my inspiration and all my artistic verve, so no, it can’t be done. Tough luck, wait until next time.</p> +<p>How did I solve this? Well, I started writing the post in my coffee break: there was no way to finish it in time, of course, but at least I started it.<br /> +I also saved it to my <span class="caps">PDA</span> and continued writing it when I had a chance. Eventually, I managed to finish it during my lunch break, the next day.</p> +<p>Try to write <em>whenever you are inspired</em>. If you are not inspired in your lunch break, do some work in your lunch break and then write when, in an hour or so, probably, you feel like writing again.</p> +<h3>This won’t make Digg’s front page</h3> +<p>Digg, Reddit, DZone, you name it. They are all excellent free tools for promoting your content. Don’t tell me you never wrote a post <em>for the sake of making the front page</em> of one of those sites. I did, I confess.<br /> +I didn’t make Digg’s front page in a while, and I’m probably never going to make it again. The reason? When it comes to promoting the right content in a fair way Digg <strong>sucks</strong>. As a consequence, 80% of the articles which appear on Digg <strong>suck</strong>. I’m sure you’ll be able to forgive my French when I say that <strong>Digg utterly sucks</strong>.</p> +<p>No matter how clever your story may be, unless you’re backed up by a swarm or an active community willing to Digg your story, you simply aren’t going to make it. When is the last time a proper programming article made it to Digg? I don’t remember, probably way before I unsubscribed to the Digg’s Technology feed, about a year or so ago.</p> +<p>Just write for the sake of writing. Don’t even submit your story to Digg (unless you’re writing about the iPhone, of course, then you may have a chance): post it to a less-known site, maybe, or to Reddit, instead. You won’t get as much traffic, granted, but you also won’t get tons of idiots writing pointless crap on your site and you won’t risk a server crash. If it’s destiny, then some good soul will post it to Digg, but nobody will digg it. That’s just life, I’m afraid.</p> +<h3>It has been too long since my last post: the next one will have to make up for it</h3> +<p>This happens when you start feeling guilty because you didn’t post in a long time.</p> +<p><em>“My next post is going to be superb, long, interesting and everyone will start flocking back to my blog!”</em></p> +<p>Wrong. First of all because statistically people just don’t “flock back” because you bestowed them of one interesting post (you have to keep up, too), and second because by doing so your mind will automatically discard all those bits of things you wanted to write about, but you never did because you’re waiting for that special <em>next post</em> which will be <em>so much better</em> and will bring your blob back to <del>spam</del> life.</p> +<p>It happened, it happened… again, all you have to do is just post all the tidbits you need, while you’re preparing your big shot: your blog will remain “fresh” and more people will enjoy your interesting posts, whenever they’ll come.</p> +<h3>Nobody gives a damn, anyway</h3> +<p>I didn’t want to upset my younger audience by using a nasty f-word in the title, but that’s exactly how it feels like it, sometimes.<br /> +I went to Rome last week, did you know? I twittered about it, you <strong>ought</strong> to know! And of course you’ll all be waiting for the usual 10-page-long article on my awesome vacation. Like when I <a href="http://www.h3rald.com/articles/incomplete-guide-to-london">went to London</a>, remember?<br /> +No, sadly not everyone may be interested in this crap. So I probably won’t post about it: who cares? When you start thinking like this, you may stop posting for weeks: not everyone may be interested in everything you post, and I believe that’s normal.<br /> +Especially for a blog like mine, which is deliberately open to all my interests: programming, technology, travelling, etc. That’s why most blogs try to be themed: they write about a particular subject, even a single programming project, and they (try to) do it well. The trade-off is that a themed blog may run out of posts amazingly quickly, if you’re not carefula and if you’re not 100% devoted to your blog’s theme. <br /> +A themed blog will build up a faithful audience, like when I was writing almost exclusively about CakePHP: a lot of <span class="caps">PHP</span> programmers where flocking here daily. Then things <a href="http://www.h3rald.com/blog/42">went wrong</a> and I really couldn’t be bothered to write about the same crap. Which leads us to the next topic…</p> +<h3>If I write about this, a large chunk of my audience is going to be upset</h3> +<p>This applies especially to themed blogs: if you’re a well-known Firefox addict, you can’t suddenly start writing about <a href="http://www.h3rald.com/articles/firefox-lovers-guide-to-opera">Opera</a>, praising its speed and the features it offers out-of-the box!<br /> +If you take a side, you’d better stick to it, if you want your audience to stick to you: the ten people who happen to read this blog are probably quite shocked by the amount of times I “changed side”: from CakePHP and <span class="caps">PHP</span> to Rails and Ruby, from Firefox to Opera (well, wait until my next SitePoint article comes out, at least…). Probably they are not the same people who read this blog a year or so ago.</p> +<p>In the end, it’s entirely up to you: if you are prone to radically change our opinion (and this happen in technology, much more than in politics), which involves changing the whole theme of your blog, maybe you should consider not having a themed blog at all. <br /> +And if you don’t feel 100% sure you want a themed blog, you definitely shouldn’t go for a themed domain name, or you may end up abandoning it afterwards. And when that happens, unless you’re writing damn cool posts like <a href="http://redhanded.hobix.com/">Why</a>, it’s going to hurt your audience. On the other hand, if you’re sure you’ll get ten times more visitors, go for it.<br /> +No, h3rald.com stays… I may end up raving about Safari at some point within the next ten years though, don’t be upset!</p> +<h3>I’m not an expert on the subject, so I shouldn’t blog about it</h3> +<p>This is a common problem I have when I try to write about something I don’t know extensively enough. When I started to learn Ruby, I was eager to start writing about it: it seemed just too cool to be true!<br /> +I thought about writing a longish post on learning Ruby from scratch, but then I realized it wouldn’t have been a great idea: I was just starting to learn a new language, I didn’t know all the nitty-gritty and writing about it to teach others was going to be a bit presumptuous, maybe!<br /> +Instead, I opted for a lighted <a href="http://www.h3rald.com/articles/10-reasons-to-learn-ruby">10 reasons to learn Ruby</a> article, clearly stating in the first paragraph that I was just a noob getting excited about his new toy. It worked, actually: people seemed to enjoy it, and I was partially excused for the few mistakes I made here and there.<br /> +You don’t have to be an expert to blog about something: you just have to be totally honest about what you know, and what you don’t know.</p> +<h3>There are a lot of professional bloggers out there, and I’m not one of them</h3> +<p>Finally, this can be summarized in two words: inferiority complex. “Proper” blogs fire out 10+ posts <em>per day</em>, and I don’t even write ten points in <em>a month</em>! Again, those a professional bloggers: they live for blogging (and make an awful lot of money out of it), and they most likely have someone else blogging for them, too! <br /> +Think of TechCrunch or LifeHacker, for example: they have a small legion of talented writers working for them &emdash; even if Michael Harrington does rant about Twitter about three times a week himself, though.<br /> +At the end of the day, what matters is the <em>quality</em> of your posts. Not the length minf, the Quality. I personally think that non-professionals (I said “non-professionals”, not “amateurs”!) are <em>allowed</em> to write about once a week, if they can provide good content, that is.</p> +<p>But you still do have to write <em>at least</em> once a week (OK, let’s make it ten days), otherwise either you’re justified (you genuinely don’t have time) or you may be a victim of one of these common fears. Watch out, and happy blogging!</p>
@@ -0,0 +1,55 @@
+----- +title: "Italian General Elections - 2006" +content-type: article +timestamp: 1144560780 +tags: "italy|politics" +----- +<p style="float:right;"><img src="http://www.berluscastop.it/v_imag/sodom1.gif" alt="" /></p> +<p>Another five years have passed and here we go again: General Elections time!<br /> +Today and tomorrow Italy <del>must</del> should vote for a new government, and the choice is <em>again</em> between two main contenders to the Prime Minister’s <del>throne</del> chair:</p> +<p>- <a href="http://news.bbc.co.uk/1/hi/world/europe/299254.stm">Romano Prodi</a><br /> +- <a href="http://news.bbc.co.uk/1/hi/world/europe/3034600.stm">Silvio Berlusconi</a></p> +<p>Just today I was reading an interesting article titled <a href="http://service.spiegel.de/cache/international/spiegel/0,1518,409538,00.html"><em>‘The End of Silvio’s Show?’</em></a> in which the author examines the possibility that Berlusconi’s five years of subtle pseudo-dictatorship may end in favour the former president of European Commission Romano Prodi.</p> +<p><em>Who are they?</em></p> +<p><strong>Silvio Berlusconi</strong><br /> +<img src="http://www.consapevolezza.it/notizie/gen-mar-2002/imgs/berlusconi_corna_5.jpg" alt="" /></p> +<p>I can’t imagine someone asking this question, at least I can’t think of anyone who doesn’t know Silvio Berlusconi as the icon of the latest <em>national oddity</em>. <br /> +Forthose who need their memory refreshed, here’s a small collection of links featuring him:</p> +<ul> + <li><a href="http://news.bbc.co.uk/1/hi/world/europe/3034600.stm"><span class="caps">BBC</span> <span class="caps">NEWS</span> Profile</a></li> + <li><a href="http://en.wikipedia.org/wiki/Silvio_Berlusconi">Wikipedia Page</a> about him</li> + <li><a href="http://www.economist.com/displaystory.cfm?story_id=587107">An Italian Story</a> – An article written in 2001 published by the Economist, <em>before</em> he was elected Prime Minister</li> + <li><a href="http://www.economist.com/displaystory.cfm?story_id=593654">Fit to run Italy?</a> – Another article by the Economists explaining why Berlusconi should <em>not</em> lead the Italian Government</li> + <li><a href="http://grabbyeducational.blogspot.com/">Meglio coglioni che mafiosi</a> – Italian blog against Berlusconi (warning: profanity).</li> + <li><a href="http://www.geocities.com/basta2006/">Basta 2006 – Geocities</a> – a comprehensive directory of websites dedicated to Berlusconi, a really good resource.</li> +</ul> +<p>There are millions more. In particular, I’d like to add one more: <a href="http://www.consapevolezza.it/notizie/gen-mar-2002/impero_berlusconi.asp">The Empire of Silvio Berlusconi</a>, which features an image taken from an Italian magazine listing (roughly) everything owned (the image is dated 2002) by our current (for now) Prime Minister, such as:</p> +<ul> + <li>Mediaset Television (100%) – which includes three national channels</li> + <li>Medusa Film (100%) – Movie productions</li> + <li>Milan A.C. (99%) – Football team</li> + <li>Edilnord (63%) – Real Estate</li> + <li>Blockbuster (51%) – Video retal shops</li> + <li>Mondadori Spa (48%) – Biggest Italian editorial company</li> + <li>Mediolanum (35.5%) – Financial sociaty – banks, insurances etc.</li> +</ul> +<p>Nice, isn’t it? Of course he had to give those societies to some trusted administrators before becoming Prime Minister… but let’s not talk about this…</p> +<p><strong>Romano Prodi</strong><br /> +<img src="http://upload.wikimedia.org/wikipedia/en/thumb/0/04/Prodi.jpg/200px-Prodi.jpg" alt="" /></p> +<p>Perhaps not as well known abroad as Silvio, but was recently the President of the European Commission for a while. Here are some (more serious) links about him:</p> +<ul> + <li><a href="http://europa.eu.int/comm/archives/commission_1999_2004/prodi/index_en.htm">European Commission Archives</a></li> + <li><a href="http://www.eitb24.com/portal/eitb24/noticia/en/international-news/centre-left-candidate--profile-of-romano-prodi-?itemId=D23503&cl=%2Feitb24%2Finternacional&idioma=en">eitb24’s profile of Romano Prodi</a></li> + <li><a href="http://www.answers.com/topic/romano-prodi">Answers.com on Romano Prodi</a></li> + <li><a href="http://topics.nytimes.com/top/reference/timestopics/people/p/romano_prodi/index.html?inline=nyt-per">New York Times archives about Romano Prodi</a></li> +</ul> +<p>Known as “The Professor” for his education…</p> +<blockquote> +<p><em>“He graduated in economics at Milan’s Catholic University in 1961 and did postgraduate studies at the London School of Economics. He also spent a year as visiting professor at Harvard in 1974”</em><br /> +<em>(<a href="http://news.bbc.co.uk/1/hi/world/europe/299254.stm">Prodi’s <span class="caps">BBC</span> profile</a>)</em></p> +</blockquote> +<p>…Romano Prodi is the candidate proposed by the current Italian opposition, grouping roughly all the center-left parties. He’s the one who pushed Italy – as President of the European Commission – to accept the Euro as new currency, back in the day, and also the one who was blamed for than after a few months when the <em>Euro effect</em> occurred: prices went higher and didn’t seem to be an <em>exact conversion</em> from Lire to Euro. He was chubby enough (“mortadella” is one of his most recurring nicknames) to be quickly appointed as scapegoat for the unpleasant situation.</p> +<p style="float:left;"><img src="http://www.dsmirandola.it/sg/img/berlusconi_corna.jpg" alt="" /></p> +<p>Besides that, if someone asks me what’s the difference between the two candidates, I’ll answer: one is a politician and devoted all his life to Politics, while the other partly devoted only the last 10-years-or-so to politics because it seemed to be <em>a cool and worthwhile investment</em>…</p> +<p><em><strong>Who am going to vote?</strong></em></p> +<p>Well, one thing is sure: I don’t want Silvio to win again, I don’t want Italy to be publicly ridicolized abroad all the time that muppet opens his mouth or simply does something <em>he</em> thinks is funny…</p>
@@ -0,0 +1,217 @@
+----- +title: "11th of July 2009" +content-type: article +timestamp: 1248605640 +tags: "wedding" +----- +<ul> + <li><a href="#prologue">Prologue</a></li> + <li><a href="#party">The wedding party</a></li> + <li><a href="#stag">The stag night</a></li> + <li><a href="#preparations">The preparations</a></li> + <li><a href="#ceremony">The ceremony</a></li> + <li><a href="#reception">The reception</a></li> + <li><a href="#honeymoon">The honeymoon</a></li> + <li><a href="#photos">Photos</a></li> + <li><a href="#trivia">Trivia</a></li> + <li><a href="#quotes">Famous quotes</a></li> +</ul> +<h3 id="prologue">Prologue</h3> +<p>Roxanne and I arrived in Ireland on the 3rd of July, just over a week before the wedding day. We thought a week would have been more than enough to finish organizing our big day, and we were right: we spent a few days enjoying our holiday with relatives and going around to meet the photographer, the florist and all the others.</p> +<p>Slowly guests started arriving into the country from Italy, England, Romania etc. For some reason, everyone chose a different day to get to Killenaule, so we had people turning up right until the very day before.</p> +<p>In a similar fashion, I was waiting for my waistcoat to arrive until the last minute: it turns out that the guy I bought it from decided to send it through normal post about 10 days before — “They normally arrive in less than two weeks”, he wrote to me in his last email.</p> +<p>I ended up having to drive to Clonmel the afternoon before the wedding with half the wedding party in my car looking for a waistcoat. I eventually managed to rent one (with matching shirt and cravat) for <em>just</em> 40 Euro.</p> +<h3 id="party">The wedding party</h3> +<p>The following table lists all the members of the wedding party, for your own reference.</p> +<table> + <tr> + <th>Name </th> + <th>Role </th> + </tr> + <tr> + <td> Fabio Cevasco </td> + <td> Groom </td> + </tr> + <tr> + <td> Roxanne O’Mahoney </td> + <td> Bride </td> + </tr> + <tr> + <td> Matteo Lagomarsino </td> + <td> Best man </td> + </tr> + <tr> + <td> Simona Angheluta </td> + <td> Maid of Honor </td> + </tr> + <tr> + <td> Roberto Pischedda </td> + <td> Head Usher </td> + </tr> + <tr> + <td> Delia Angheluta </td> + <td> Bridesmaid </td> + </tr> + <tr> + <td> Zacharry O’Mahoney </td> + <td> Usher </td> + </tr> + <tr> + <td> Caspar O’Mahoney </td> + <td> Usher </td> + </tr> +</table> +<h3 id="stag">The stag night</h3> +<p>In Italy, England, US and in many other countries a “stag night” may end up in many different ways: dinner with friends, strip club, wild practical jokes to the groom, and so on. In Ireland, it generally means one thing: <em>drink</em>. It occasionally ends up badly (there are rumors a poor fellow who was thrown out in a river and got married with a broken nose), but generally everything turns out just fine: have a few pints, sing and dance, and have a couple of eggs in the morning. That normally does the trick — if you’re an Irishman.</p> +<p>I was well aware of my in-laws drinking habits, so I decided to take uncle Felix’s offer: “I’ll have a taxi ready for you whenever you want to sneak out of the pub, and make sure you do” — he said.</p> +<p>The evening started with a few pints at Laffansbridge, an old country pub in the middle of nowhere, probably one of the best places for a pint of Guinnes in the whole Tipperary. The little smart guy who runs it has one simple rule: at midnight the light goes off and no more drinks are served, so all 16 of us got into a minibus by then, heading for the next pub.</p> +<p><em>Quinn’s</em> is the family pub, in the sense that it is owned by Felix Quinn Jr, son of Felix Quinn Sr, brother of Anastasia Quinn, mother of James O’Mahoney, father of Roxanne O’Mahoney, my wife (families are still very large and very close, in Ireland). Being the family pub, <em>Quinn’s</em> doesn’t close at midnight; in fact, it often doesn’t close at all for family and friends (i.e. the entire village of Killenaule).<br /> +As soon as we got in, Claire (wife of Felix, son of Felix, etc. etc.) greeted us with a full round of pints, and then another, and yet another…</p> +<p>Around the third round someone asked me if I could sing a song — a request I politely but firmly declined due to my total ignorance in Irish folk songs and my total inability to utter sounds in even the slightest musical way. Luckily, someone else volunteered and sang a beautiful ballad, perfectly in-tune, with no music backing at all: Irish people are amazingly musical when sober, imagine when drunk!</p> +<p>When people started getting into <em>their</em> fourth round (note the pronoun), I decided to try out an old trick to keep myself sober: I drank less than half a pint, and then pretended to drink the rest, leaving always something in my glass. In that way – I thought – I could pretend I didn’t need yet another pint. Unfortunately the pub owner spotted me straight away and said “That pint is stale… here, have another one, on the house!”. At that point I decided it was better for me & the rest of the Italians to quietly sneak out.</p> +<p>I was at home (uncle Martin’s house) and in bed at about 1:30 AM. I almost didn’t sleep at all that night, as expected, so I wasn’t too bothered when the rest of the drinking comrades came back, singing and shouting at 4:30 am. Simona [the Maid of Honor and girlfriend of my brother-in-law Zac], on the other hand, wasn’t too amused when Zac turned up after drinking the (Irish) Nightly Guideline Drink Amount: approx. 10-11 pints of Guinness — those he could count, that is.</p> +<h3 id="preparations">The preparations</h3> +<p>This part of the day is best reported in chronological tabular form:</p> +<table> + <tr> + <th>Time </th> + <th>Event </th> + </tr> + <tr> + <td> 7:35 </td> + <td> The groom <del>wakes up</del> decides to stop pretending to sleep. </td> + </tr> + <tr> + <td> 8:00 </td> + <td> The bridesmaids are up and about, ready to go to the hairdresser </td> + </tr> + <tr> + <td> 9:00 </td> + <td> Uncle Martin and the rest of the gang slowly regain consciousness. The groom spends about half an hour trying to explain uncle Martin that he’s his only hope to collect and bring back the flowers for the church (_"Ahhhh you want <em>me</em> to do it… you could have said so since the beginning!"_). </td> + </tr> + <tr> + <td> 9:45 </td> + <td> The groom takes the bridesmaids into town, to the hairdresser </td> + </tr> + <tr> + <td> 10:00 </td> + <td> The groom attempts to gather his groomsmen for the first time </td> + </tr> + <tr> + <td> 10:15 </td> + <td> The groom starts having a chat with the best man and the head usher. The other ushers are <em>somewhere around</em>. </td> + </tr> + <tr> + <td> 10:30 </td> + <td> The groom realizes that one of the ushers (Zac) has the most terrible hangover on Earth and the other (Caspar) slept solidly from 3 am (while still in the pub) until now </td> + </tr> + <tr> + <td> 11:00 </td> + <td> The groom attempts to gather his groomsmen for the second time, this time telling them it’s time to get ready (he’s not taken seriously) </td> + </tr> + <tr> + <td> 11:30 </td> + <td> The groom attempts to gather his groomsmen for the third and final time, now everyone is starting to try out their suits </td> + </tr> + <tr> + <td> 11:45 </td> + <td> For some weird reason auntie Noelle decides to call the groom and tell him that the florist is not accepting checks, after 5 minuts of absolute panic, she says we’re going to get the flowers anyway and there’s nothing to worry about. </td> + </tr> + <tr> + <td> 12:00 </td> + <td> All groomsman are dressed. It starts raining. </td> + </tr> + <tr> + <td> 12:30 </td> + <td> Zac decides he needs some fresh air and takes a walk outside in his morning suit, regardless of the heavy rain and the groom’s prayers </td> + </tr> + <tr> + <td> 13:10 </td> + <td> The groomsmen go to the church. </td> + </tr> + <tr> + <td> 14:00 </td> + <td> Guests start arriving </td> + </tr> + <tr> + <td> 14:20 </td> + <td> The brides arrives and the ceremony starts. </td> + </tr> +</table> +<h3 id="ceremony">The ceremony</h3> +<p>The wedding ceremony was very suggestive, almost magic. As soon as I looked at Roxanne in her wedding dress all worries faded away, and we both enjoyed the wedding rite. I must say I also don’t remember much of the whole ceremony, but I’m told it’s a common thing to happen.</p> +<p>As the ceremony started, we sat down without looking at the audience, so I didn’t feel paranoid and enjoyed listening to the priest’s speech, the readings and the songs. Canon Liam Ryan embodies the typical Irish priest: about 70-year-old, tall, extremely talkative, cheerful and very charismatic. He shocked us all during the reharsal telling us what we’d have had to do the day after, and it felt like a lot of work. The groomsmen and the bridesmaids were terrified: <em>“So I have to help you sit down, move the chair… like that… then… go back… no, wait, what was that again?”</em>. Matteo and Roberto couldn’t believe the whole choreography involved in the event: it’s nothing like that in Italy, but they were glad they were part of it in the end.</p> +<p>It all happened exactly like Father Ryan predicted, he even guessed almost all the few mistakes we made: “You have to walk slowly in front of the bride” – he said to Delia, the bridesmain – “and if you <em>think</em> you’re going slow while you’re doing it, you’re probably going <em>way too fast</em>”. But nobody noticed, really, and nobody cared: they were all too excited to mind that, and everyone’s eyes were on Roxanne, anyway. She was really, really gorgeous and her dress was fabulous. It felt unreal, at times: we both felt we were in one of those movies…</p> +<p>The most peculiar thing about the whole ceremony was perhaps the different languages involved: English, Italian, Gaelic and Latin. I doubt there was a single person among us who could understand the entirety of the mass, but it was very evocatory. The whole mass was predominantly in English, with the following exceptions:</p> +<ul> + <li>The First Reading was in Latin (my mum read it superbly — she’s a Latin teacher!)</li> + <li>The Second Reading was in Italian</li> + <li><em>Our Father</em> was sung in Gaelic</li> +</ul> +<p>By our own common decision, we didn’t ask for a professional video of the ceremony, only <a href="#photos">photos</a>. Nevertheless, my uncle captured most of the ceremony (and the most embarassing bits of the dancing after the <a href="#reception">reception</a>) using my dad’s video camera.</p> +<h3 id="reception">The reception</h3> +<p>When the ceremony ended it was still raining heavily, so after an endless amount of pictures taken we went straight into our Rolls. Technically, that was not <em>our</em> Rolls of course: we rented it from a local car hirer, and it was worth every penny. A lot of people get married in a VW Beatle or in a Mercedes at most, but Roxanne and I really love old cars, so when we saw <a href="http://www.alleventslimos.com/Wedding/rolls_silver_cloud.html">Ruby</a>, a red 1961 Silver Cloud II, we just had to get it. Champagne and chauffeur included, of course.</p> +<p>The chauffeur was a very jolly and chatty fellow from Waterford, and drove that beauty of a car for a very long time. Unfortunately though his sat nav decided to stop working and he wasn’t really <em>local</em>, so erhm…, well, let’s just say we were really lucky that at least <em>the bride</em>knew her way around. We made it safe and sound to Raheen House in no time: so fast that everyone else arrived about 10-15 minutes afterwards.</p> +<p><a href="http://www.raheenhouse.ie/">Raheen House</a> is a very charming <span class="caps">XIX</span> century Georgian House. One of those places you normally see only in movies: tapestries on the walls, old armchairs, stuffed heads over the doors (an african buffalo, a huge deer, an antelope, and some more)… you get the picture. Unfortunately it can only accomodate 120 people, so it isn’t a very popular location for wedding receptions in Ireland, because the number of people invited at Irish weddings ranges from 150 to 300. We were about 60 in total, nevertheless the dining hall looked quite full and lively, with 7 big tables covering all the room.</p> +<p>As soon as we got there, my best man was informed by the staff that he <em>had to</em> introduce the bride and groom. <em>“What? No, wait! What do I say… how… what? Fabio, come back!”</em> he freaked out, but as soon as I wrote down the two lines he was supposed to say in English everything was OK. Not only did he introduce us properly, he also made a <em>terrific</em> speech: he obviously gave it a lot of thought and it sounded just perfect.</p> +<p>After he spoke, it was my dad’s turn. Now, my dad speaks perfect French but never got a chance to learn and practice English (yet), so not only he had to write down his entire speech, he also had to annotate the pronunciation of <em>every</em> word. He managed fine though. It felt a little bit long, but he said really wonderful and touching words about Roxanne and I, our respective families, and countries. I’ll publish it soon on the Internet, for posterity’s sake.</p> +<p>The last three speeches were Jim’s (the father of the bride), who did great as always, without reading anything, right on the spot. And so did Roxanne and I: we basically just said a few words thanking all the guests for coming, and half of them for helping us with the wedding as well. Every speech (except mine and Roxanne’s) was characterized by subtle and very discreet exhortations to produce progeny (<em>“get on with it!”</em>), but other than that they were fine.</p> +<p>After all the traditional obligations, we finally started our dinner. The food was delicious and extremely tasty: Raheen House is renown for that, as we were told, but we honestly weren’t 100% sure until we started trying it. And there was also <em>plenty</em> of it, so everyone felt really satisfied towards the end of the meal. So satisfied that we decided to postpone the cake till later (see below) and indulge with wine instead.</p> +<p>Wine, right. They were going to charge us 20€ per bottle for some weird Chilean or Australian stuff. Silly and almost offending, especially considering that my family has been producing wine for family and friend’s use for at least three generations! This was my dad’s primary concern until we left for Ireland: “You sort the restaurant out, because I’m going to bring some bottles, no matter what”. He shipped over <em>96</em> special bottles of our 2005, 2006, 2007 and 2008 vintages. Ninety-six. We used about 25 of them for the meal and the rest of the evening, then we gave one to almost every guest, three to the staff of the restaurant, a few more to other hotel and B&B owners, six to each uncle of the bride, etc. etc. None came back to Italy, that’s for sure.</p> +<p>Right after the meal the band came in, and we got ready to dance. Roxanne and I had to start with our First Dance, of course, then everyone else slowly joined in. The group was playing a mixture of traditional Irish music, ballads and rock ‘n’ roll: they were amazing, and especially the Italian’s were really impressed.</p> +<p>Not as impressed as when they noticed uncle Martin dancing. I’ve never seen <em>anyone</em> in my life dancing so vigorously and wildly in my life. He has his own special technique that cannot be described with words. I’ll try to post a video of him soon. He really felt the rythm and never missed a step. Like a whirlwind he dragged everyone in, dancing with him: first his daughters and sons, then his brothers, the he thought he’d take my auntie for a spin, then the bride (well, mostly her dress), then even me! I don’t remember much, I think I was in the air at one point, and then all over the place…</p> +<p>Everyone of course joined in and started drinking and dancing for the whole evening. When the band performed the last two songs, I just remember a <em>huge</em> circle of nearly all the guests holding hands dancing around Roxanne and I, then coming closer, then far, then closer again. It was definitely the wildest night in our whole life.</p> +<h3 id="honeymoon">The honeymoon</h3> +<p>The day after we slowly recovered. We didn’t sleep much, but we managed to get up and have breakfast with some of the guests at the hotel, before they started heading back. Then we decided to go shopping in town: it was basically Roxanne and I, plus her brothers, her parents, and my parents. Not much of a honeymoon, as my mum pointed out, but we didn’t mind.</p> +<p>After spending the following day saying goodbye and thanks to all the relatives, we finally headed to Co. Galway, in Connemara. We booked three nights in the fabulous <a href="http://www.abbeyglen.ie/">Abbeyglen Castle</a>, highly recommended. Our superior room had a fireplace, a four-poster bed and jacuzzi bath: the bare essentials for a honeymoon really. Roxanne and I really enjoyed those three days, finally alone in the most breathtaking and romantic area of Ireland. Three days weren’t enough, really, but we’ll eventually go back there hopefully: maybe Sir Paul Hughes, proprietor of the castle, will still remember <em>“the bride and groom”</em>, as he kept calling us throughout our brief, but very pleasant stay.</p> +<p>Exactly as auntie Noelle said, everything was over in a blink: the ceremony, the reception, the honeymoon… everything went back to normal, eventually. It took a while to get used to our normal life: we had to go on a shopping spree before we went back to work… let’s say the money we got as present from most of the guest was well spent in a 42" <span class="caps">LCD</span> HD TV, surround sound system, etc. etc.</p> +<p>…And we still have our other half of the honeymoon, too! Probably Miami Beach and Bahamas, next November.</p> +<h3 id="photos">Photos</h3> +<p>Our wedding photos were taken by <a href="http://www.patmccoole.ie/">Pat McCoole</a>, who did a truly amazing job portraying the magic of our special day.</p> +<p><embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&hl=en_US&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fh3rald%2Falbumid%2F5359762418204291649%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_US" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></p> +<h3 id="trivia">Trivia</h3> +<ul> + <li>On the wedding day, it rained non-stop from 12 am to 7 pm.</li> + <li>The groom drove for a total of 1758.7 Km in 14 days.</li> + <li>On his stag night, the groom only drank 2.5 pints of Guinness (almost everyone else had 10, on average).</li> + <li>The night before the wedding, the groom slept only from 5:30 to 7:30.</li> + <li>Only the middle tier of the wedding cake was eaten on the wedding day. The top tier was eaten during the following days by relatives and the bottom tier was shipped to Italy, together with the Bride’s dress.</li> + <li>The father of the bride decided to change into more comfortable clothes right after the ceremony. He borrowed a waistoat and a jacket for the speech.</li> + <li>Uncle Martin danced with a lot of people after the meal, including the bride, her father, and the groom.</li> + <li>When he arrived at the church, the groom immediately realized he left the mass booklets and the confetti in the back of his car, at home. They were eventually brought to the church by a cousin of the bride just a few minutes before she arrived.</li> + <li>At the very start of the ceremony, the groom told the priest to tell the best man to get a mass booklet so that he and the bride can follow the mass properly. After 30 seconds of lip-reading and signalling, the best man understood and fetched one of the infamous booklets.</li> + <li>The bride forgot her change of clothes in uncle John’s car, who had to drive in early in the morning or she would have had her breakfast in her wedding dress.</li> +</ul> +<h3 id="quotes">Famous quotes</h3> +<blockquote> +<p>“This journey feels like going to Lourdes: you come back and your life changed forever.”<br /><br /> — The best man, when he arrived in Killenaule.</p> +</blockquote> +<blockquote> +<p>“Is there a garage around?”<br /><br /> — Auntie Isa while waving a car mirror, when she arrived in Killenaule</p> +</blockquote> +<blockquote> +<p>“Do I really have to do a speech? Are you sure?”<br /><br /> — The best man, when he met the groom in Ireland.</p> +</blockquote> +<blockquote> +<p>“My preciousssss!”<br /><br /> — The best man, when he was given the rings in custody.</p> +</blockquote> +<blockquote> +<p>“She’s the most calm and organized bride in history.”<br /><br /> — Auntie Noelle, about the bride on the wedding day.</p> +</blockquote> +<blockquote> +<p>“You could tell he was panicking on the phone”<br /><br /> — Auntie Noelle, about the groom on the wedding day.</p> +</blockquote> +<blockquote> +<p>“Potatoes, potatoes, potatoes…”<br /><br /> — The father of the bride to the groom, during the traditional handshake of the wedding rehearsal.</p> +</blockquote> +<blockquote> +<p>“Potatoes, potatoes, potatoes…”<br /><br /> — The groom to the father of the bride, during the traditional handshake of the wedding ceremony.</p> +</blockquote> +<blockquote> +<p><strong>Best man:</strong> “[…] this is the first time for me to speak in public, in front of an <em>English</em> audience […]”<br /> +<strong>Audience:</strong> “Irish! <span class="caps">IRISH</span>!!!”<br /> +<strong>Best man:</strong> “…oh, right, Irish! Sorry…”<br /></p> +</blockquote> +<blockquote> +<p>“I need another shirt!”<br /><br /> — Uncle Martin, after about 2 hours of continuous dancing with almost all the guests.</p> +</blockquote>
@@ -0,0 +1,34 @@
+----- +title: "Meet some Cake(PHP) bakers!" +content-type: article +timestamp: 1144767780 +tags: "cakephp" +----- +<p>I should write more. I noticed that I since I decided to take a break from <a href="http:www.zzine.org">zZine Magazine</a> I more or less stopped writing – and started <em>baking</em> again with <a href="http://www.cakephp.org/">CakePHP</a>. As a result I finally recoded this website and <em>refreshed</em> a little bit my almost-rusty baking skills.</p> +<p style="float:left;"><img src="http://base--/img/pictures/cakephp.png" alt="" /></p> +<p>Why not taking advantage of this and write more about CakePHP then? After all, my last <a href="http://base--/articles/view/cakephp/">article</a> turned out well enough and some people even bookmarked it online on del.icio.us and ma.gnolia… Now it’s a bit out of date, I must admit: it was based on a pre-beta release of the framework, and we’re (more or less) stable now. <br /> +A lot of things changed in the Bakers Community since then! At the time the <a href="http://wiki.cakephp.org/">wiki</a> barely started and there was no <a href="http://manual.cakephp.org/">manual</a> whatsoever, only my long and perhaps <em>slightly</em> boring article describing Cake’s functionalities. Now there things are much better for newcomers: they have a continuously growing community to rely upon, both on the Google user group and on <span class="caps">IRC</span> (#cakephp on FreeNode counted 63 members today, while back in the day 20 was a big number). There are also a few people who started blogging and starting websites about CakePHP: while I was the first to write an article about Cake I was <em>the last</em> so far to start a blog :/ Oh well, nobody’s perfect!</p> +<p>The first site I came across – although not a blog really – is Graham Bird’s <a href="http://grahambird.co.uk/cake/">Cake for Beginners</a>. When someone asks me some basic questions about CakePHP I send him there because first of all they’ll find a short <span class="caps">FAQ</span> about the framework, i.e. something everybody should know before even start thinking about learning Cake. Similarly, the guy has a <a href="http://grahambird.co.uk/cake/glossary/">Glossary</a> in progress to help those souls who feel lost in Cake’s terminology. If you don’t consider yourself a total beginner anymore, the <a href="http://grahambird.co.uk/cake/tutorials/">Tutorials</a> section can be a very interesting read: I wanted to add some <span class="caps">AJAX</span> bits to my site, but the documentation about this seemed pretty scarce, so I headed to the <a href="http://grahambird.co.uk/cake/tutorials/ajax.php">Ajax Task List</a> tutorial and it really helped.</p> +<p>On the blogs front, on the other hand, <a href="http://cakebaker.42dh.com/">Cake Baker</a> seems to be the most active: I’m starting to check this one often (OK, I’d better subscribe to the <span class="caps">RSS</span> feeds, perhaps) because it seems to be <span class="caps">THE</span> best place to get the latest news about everything concerning CakePHP: The author seems to post quite frequently (there’s always a new post every 1-3 days maximum) includes short code snippets when necessary and report news when there’s anything to report.</p> +<p><a href="http://sentino.wordpress.com/">Sentino</a> is also an interesting place to learn new things about CakePHP: the only problem is that the author seems to post less frequently… the blog seems to have some sort of “milestone” schedule, publishing something when there’s something big enough to justify a post. If you want to subscribe to a less frequent blog with only the essentials about Cake, this is a good choice.</p> +<p><a href="http://rossoft.wordpress.com/">RosSoft</a> unlike the others mentioned up to now has a much more technical approach: no news about Cake or anything, just some <span class="caps">REALLY</span> useful real-world example of Cake helpers, components etc. etc., with <span class="caps">FULL</span> source code to cut and paste. Really handy if you need something specific, truly excellent for beginners to have a look at how Cake classes should be written. <br /> +Among the most interesting fully working snippets:<br /> +<a href="http://rossoft.wordpress.com/2006/03/29/ip-to-country-component-geo-location/">IP-to-country component</a> <br /> +<a href="http://rossoft.wordpress.com/2006/03/27/poor-mans-cron-component/">Poor man’s cron component</a><br /> +<a href="http://rossoft.wordpress.com/2006/03/16/image-auth-component/">Image Auth – <span class="caps">CAPTCHA</span> component</a></p> +<p style="float:right;"><img src="http://xcite-online.de/spliceit/themes/SpliceIt/logo.png" alt="" /></p> +<p><a href="http://www.thinkingphp.org/">ThinkingPHP</a> is another “technical” Cake blog, with interesting code snippets and thoughts about our favourite <span class="caps">PHP</span> framework. For those who don’t know or don’t remember him (yes, like me…), he’s the author of <a href="http://xcite-online.de/spliceit/">SpliceIt!</a>… what?</p> +<blockquote> +<p>SpliceIt!’s mission is to provide a clean and light-weight code base for people who want to create complex webapps faster then ever. The things we want to provide are:<br /> + – User/Right Managment<br /> + – Theming Support<br /> + – i18n<br /> + – Url Aliasing<br /> + – and most notabily: Modularization of often used Code Segments</p> +</blockquote> +<p>i.e. something I should have checked before recoding this website. I’ll definitely keep this in mind for the next release of h3rald.com.</p> +<p style="float:left;"><img src="http://rdos.rd11.com/img/rd11/rdlogo.gif" alt="" /></p> +<p><a href="http://rd11.com/posts">Posts@ rd11</a> a.k.a. gwoo [and seth]‘s blog. Moment of silence. Gwoo is CakePHP’s project manager (respect+) and one of the lead developers of CakePHP and he also actually uses Cake for his website and blog instead of WordPress :)<br /> +What can I write about him. It’s difficult. I’ll avoid all possible pseudo-religious comparisons but when I say that <em>he created CakePHP</em> I think I say it all. The code he used for his blog is part of a collection of open-source, Cake-powered tools all prefixed with rd- or Cake, available on <a href="https://cakeforge.org/projects/rdos">CakeForge</a>. I personally think that looking at his sample applications can be one of the best way to learn how to bake <em>properly</em>, and yes, I <strong>did</strong> check them out before coding this site for the second time. Demos are <a href="http://rdos.rd11.com/">online</a>.</p> +<p>That’s it. These are perhaps the most well-known bakers and/or Cake bloggers on the planet. There are certainly others, maybe even in other languages, but now I’d better stop writing now, because this is a rather long blog post. Sorry. I’m new to blogging and I just can’t help myself: especially with Cake, I need to write lenghty texts!<br /> +More to come…</p>
@@ -0,0 +1,66 @@
+----- +title: "Choosing the right IT job" +content-type: article +timestamp: 1144928828 +tags: "" +----- +<p>The time has come. The times when I used to meander around reading stuff on the Net and writing about whatever I wanted are over. Incidentally, the world may end, <em>your</em> laptop could explode and I could knock at your door in a few minutes asking for money, imagine that!</p> +<p>Nothing of the above, alright, bad joke, but sooner or later the time to <em>start doing something</em> comes, at some point you ought to start making some real money. It’s time to settle down, my fianceé are eager to get our own independence, move to our new house (which we’re still doing up) etc. etc. Fair enough. I spent the last five months wasting my time looking for a job, a <em>proper</em> job having something to do with <acronym title="Information Technology"><span class="caps">IT</span></acronym> and finally something seems to be possible.</p> +<p><em>Either nothing or everything</em> – I may even say that: now I have to face a difficult choice between two job proposals that seem both fairly interesting. <br /> +<em>“Go wherever you can get more bucks, you nutter!”</em> – Well, there’s more to it.<br /> +Let’s examine now the two similar but yet different realities I have to choose from. Maybe you’ll never be in my situation, but I hope this can help at least those who experienced or could experience something similar someday.</p> +<p><em><strong>Working under Uncle Bill’s wing</strong></em><br /> +<img src="http://base--/img/pictures/genova.jpg" alt="" /> Not Microsoft. No, not directly at any rate. I’ve recently been contacted by a well known multi-national company which does almost anything ranging from computers, phones, electrical stuff to huge self-aware robots designed to conquer new worlds… Not quite, but let’s just say that this image contributes to give an idea of a Corporate-type reality.</p> +<p><em>Preliminaries</em><br /> +I happen to be an Italian whose English skills go a bit beyond the <em>“Hello, me Italian and like to do friendship with you”</em>, I applied in the above (un)mentioned company as <em>Software Tester</em> and got contacted twenty days afterwards about a possible position as <em>Technical Writer</em>. It makes perfect sense. Well, at any rate I was pleased and I went to the pre-selection which was something like a pre-<span class="caps">GCSE</span> English test with a bunch of “technical” questions (“What does <span class="caps">HTTP</span> mean?”…).<br /> +Thanks to our Merciful God I passed it (and thus avoided endless teasing by my British fianceé), and they wanted to have a proper interview with me today.<br /> +I went there and came back a few hours ago, and I think it wasn’t too bad, let’s say I may stand good chances but as normally happens in such companies in the end it was just something like <em>Thank you for coming, we’ll call you by the end of April</em>. Although I mentioned that I recently had some other job offer obviously they couldn’t give a damn: as any other big company, they need to interview all the possible candidates to be sure they pick the right one, and that’s fair enough.</p> +<p><em>The job</em><br /> +In the remote eventuality they decide to take me on board, I’d be part of a Documentation Team in charge of writing technical documents, manuals and silly jokes – perhaps – about some semi-classified huge internal semi-intelligent corporate framework. <br /> +Now, although some people may already start to feel bored even at thinking about a job like that, I think this role would fit me perfectly. I love writing. I love researching. I love crating documentations, howtos, reports and any other boring (for other people) stuff! And they want me to write in English, not in Italian, which is – it may sound weird – a true relief for me. <br /> +At the interview I had a chance to talk about my <a href="http://base--/articles/">articles</a> and they seemed interested in this activity of mine… I even mentioned my <a href="http://base--/articles/view/cakephp/">CakePHP article</a> and they say they’re gonna check it out. Oh well, this site’s stats are always one Firefox tab away from my current main browsing tab, so you can bet I’ll be tracking that.</p> +<p><em>The contract and the salary</em><br /> +<em>Classified</em>. They didn’t say anything, as usual, but presumably it should be a permanent (or semi-permanent) contract with all the contributions, health insurance, taxes etc. paid. And free cookies. Yum!<br /> +Salary… well, it shouldn’t be too bad, anyway.</p> +<p><em>PROs</em></p> +<ul> + <li>I’ll be doing something I really enjoy: writing in English</li> + <li>Steady job, steady contract, more security</li> + <li>Corporare Environment</li> + <li>I can show off with my friends who are still studying pointless stuff and tell them I’m working for <company name removed></li> +</ul> +<p><em>CONs</em></p> +<ul> + <li>There’s a risk I’ll lose my individuality</li> + <li>The salary could be lower than expected – at least initially</li> + <li>They’ll get back to me at the end of this month, and I have to give an answer to someone else before that</li> + <li>My friends and fianceé will probably hassle me to give them free goodies they think I’ll get from the company</li> +</ul> +<p><em><strong>Working in a ‘cool place’, and fly high</strong></em> <br /> +<img src="http://base--/img/pictures/lambruschini.jpg" alt="" /> Nope, sorry, the <a href="http://www.cakefoundation.org/">Cake Software Foundation</a> unfortunately is not hiring. The alternative is a small company in my city, Genoa, which recently merged with a slightly bigger company based in Milan, which <em>might</em> merge with a big national company involved in producing some successful (here in Italy and even abroad, a little bit) TV programs. Network involved are Italy’s national channels, good ol’ pal Berlusconi’s channels, Sky Italy and (drums) <span class="caps">MTV</span>.<br /> +Cool, innit? What do they do? Well, interaction between mobile phones and TV through software and networks. Polls, <span class="caps">SMS</span> chat services, <span class="caps">WAP</span> application downloads, “take matey out of Big Brother’s house”, <span class="caps">SMS</span>/<span class="caps">MMS</span> blind dates related to some well known TV programs, tele-voting at Sanremo Festival etc. etc.</p> +<p><em>Preliminaries</em> <br /> +Their first interview was the most unusual I’ve ever had, and I <a href="http://base--/blog/view/9/">already wrote</a> about it: they even asked me to solve a riddle. Then they wanted to meet me again and showed me how they work in two different areas (see next section). They are really chilled out, friendly, they seem alright, even the main boss who deals with the company’s financial side, which is always a plus. <br /> +By the way, they already offered me the job, and I’ll have to give an answer next Tuesday – that’s the bad part.</p> +<p><em>The Job</em><br /> +The Lead Developer of the company apparently seemed satisfied enough with my knowledge and Java skills. A first possibility for mewould be working for them as full-time Java Developer. Coding. Wake up, go to work, Code for eight hours, go home, sleep/other things, wake up, go to work…<br /> +It would be a good experience, and other people would choose this immediately over anything else. Coding what? Parsing algorythms for the <span class="caps">SMS</span> we receive, data manipulation, storage, re-formatting etc. etc.<br /> +The other possibility which they suggested after noticing my ability to write and research would be 2nd Level Help Desk. Get dozens of technical emails every day, file reports, notify developers when something goes wrong, propose solutions, implement solutions, monitor the systems and even execute queries on the production server on the fly, in real time (eeek!). <br /> +This could sound boring/annoying/scary but since I’m a freak I think it’s an interesting prospective. Perhaps not as qualifying as being a Java Developer, perhaps not.</p> +<p><em>The contract and the salary</em><br /> +1200-1250 (or more) €/month, after tax. Which in my country is considered a more-than-reasonable pay, especially for a first job. Differnt form of contract, from consultant-with-<span class="caps">VAT</span> to renewable yearly projects, which is probably what I’d go for. Contributions/taxes paid, kind of, holidays and other vacancies included, kind of.</p> +<p><em>PROs</em></p> +<ul> + <li>Perhaps better salary</li> + <li>I know exactly what they offer, they told me their offer in detail</li> + <li>Chilled out environment</li> + <li>Perhaps I can sneak and read my desperate friends’ <span class="caps">SMS</span> when they try to pull birds</li> +</ul> +<p><em>CONs</em></p> +<ul> + <li>Less steady contract, less security</li> + <li>I’ll hardly ever use my English skills, perhaps</li> + <li>They <span class="caps">NEED</span> a yes or no by next tuesday</li> + <li>My friends will probably hassle me to spy on other people’s <span class="caps">SMS</span> traffic and/or make them win TV contests</li> +</ul> +<p>Here’s where I stand. I can’t complain, alright, but I must choose and act carefully. I’ll sleep on it.</p>
@@ -0,0 +1,13 @@
+----- +title: "Baking a new CakeArticle" +content-type: article +timestamp: 1144938060 +tags: "cakephp|writing" +----- +<p>Too right. Enough being a lazy writer, it’s time to seriously produce something. I could sit here and pretend that long blog posts can make up for the lack of new articles, but I’d like to write something <em>proper</em> and new. Judging by the latest stats people come here hoping to find either a blog <em>entirely</em> devoted to CakePHP or some CakePHP related content. Well, actually they can <a href="http://base--/tags/CakePHP/">find</a> quite a bit, but I’d like to be able to sport more Cake-related articles, bookmarks, and posts. My main problem is that I could add ten bookmarks about Cake right away, but the <em>latest addition</em> showed on the front page would feature only bookmarks, which would be bad (yes, I do worry about silly things). At the moment this blog is the second easiest way to provide fresh content frequently enough to encourage visitors to come back, but articles could be even better.</p> +<p style="float:left;"><img src="http://base--/img/pictures/baking_bear.png" alt="" /></p> +<p>Without further ado, I hereby announce that <em>I am working on some new articles on CakePHP</em>, at least one. I’d like to write something technical about CakePHP’s advanced features, because that’s where the current documentation is lacking, at the moment: associations, caching, some advanced components… they are topics which seem to interest those bakers who already baked their first cake and are now looking for some more icing.</p> +<p>Interested? Good! Sadly, that’s not what I’m going to write now, at least not the first article I’ll be releasing. Please stop calling me names, there’s no need to say that I’m just a lazy coward who doesn’t want to get his hands dirty and write some tough stuff. And stop pulling those sad faces! Think about… new bakers. There are new people learning about Cake and I know there are, I just discovered <a href="http://www.480x.com/2006/04/12/eureka/">one</a> yesterday almost by chance: he seems to be really enthusiastic about Cake, judging by his <a href="http://www.480x.com/2006/04/13/eureka-part-deux/">latest post</a> (OK, nevermind the pic).<br /> +Those people are mostly more-or-less experienced <span class="caps">PHP</span> programmers who want to find an answer to all their development problems and annoyance. Well, my good friends, the answer lies in Cake. Cake can save us all and bestow powerful blessings of Good <span class="caps">PHP</span> Design and Well-structured Programming upon our messy spaghetti code!</p> +<p>I almost considered writing a humorous article about Cake, but luckily I changed my mind. My old <a href="http://base--/articles/view/cakephp/">CakePHP article</a> is already a few months old and was written when Cake was in pre-beta. I feel it’s time for a more up-to-date howto and introduction to our framework, something maybe not as lenghty but easily readable by almost anyone interested in starting to learn about Cake.</p> +<p>Baking lessons. Yes, that’s it. I’m currently writing an article divided in ten lessons which could potentially turn casual cowboy coders into (apprentice) bakers. That could be easy for those already enlightened by <acronym title="Object Oriented Programming"><span class="caps">OOP</span></acronym> and <acronym title="Model-View-Controller"><span class="caps">MVC</span></acronym>, and perhaps more difficult for others: at any rate, I’ll try my best.</p>
@@ -0,0 +1,40 @@
+----- +title: "CakePHP hybrids" +content-type: article +timestamp: 1145001300 +tags: "cakephp|webdevelopment|php" +----- +<p>When I first talked to gwoo, CakePHP’s project manager, I asked him if Cake had any potential <em>limitations</em>. I asked him – I was kidding actually – wether it would be possible to build an application like Gmail using the framework and he – very seriously – simply said <em>“yes, why not?”</em>. <br /> +I repeat myself when I say that CakePHP leaves plenty of freedom to developers within the bounds of its <span class="caps">MVC</span> structure: once you grasp the basic logic behind it, your possibilities are endless. I don’t want to act as a Ruby on Rails fanatic and boast that <em>you can do anything with CakePHP</em> and things like that, but I can certainly say that CakePHP can be <em>extended</em> and <em>integrated</em> with other collections of scripts, frameworks and projects. With limitations, of course: you probably don’t want to force an integration between CakePHP and another <span class="caps">MVC</span>/Event Driven/Whatever framework, simply because it would be rather pointless and potential conflicts may occur.</p> +<p>What I keep finding online is other open source projects adopting CakePHP as <em>backend</em> and <em>structure</em>. I’m sure there are many examples which could be mentioned here, but I chose two in particular: one has been around for a few months and the other is just born.</p> +<p style="float:left;"><img src="http://base--/img/pictures/amfphp.jpg" alt="" /></p> +<p><a href="http://amfphp.org/"><span class="caps">AMFPHP</span></a> is quite an interesting project:</p> +<blockquote> +<p>“[it] is an open-source Flash Remoting gateway. It’s fast, reliable, 100% free and open-source. Flash Remoting is a technology built into the Flash player core that enables sending data between the server and the client seemlessly.”</p> +</blockquote> +<p>In other words, it makes lifes much easier for developers who’d like to integrate their flash animations and script more tightly into their <span class="caps">PHP</span> application. If you are curious to see some results, head off to <span class="caps">AMFPHP</span> <a href="http://amfphp.org/showcase.html">showcase</a>.<br /> +Cool, but what has this project to do with CakePHP? Well, gwoo recently created <a href="http://cakeforge.org/projects/cakeamfphp/">CakeAMFPHP</a>, a CakeForge project which just yesterday reached its <a href="http://rd11.com/posts/view/21">0.4.0 release</a>, and it’s fully compatible with <span class="caps">AMFPHP</span> 1.2.3 and CakePHP 0.10 final.<br /> +Here’s an excerpt taken from CakeAMFPHP <span class="caps">README</span>.txt file:</p> +<blockquote> +<p>“[…] <br /> +1) get CakePHP 0.10 final (http://cakephp.org)<br /> +2) get amfphp 1.2.3 (http://amfphp.org)<br /> +3) get the <span class="caps">UFO</span> js http://www.bobbyvandersluis.com/ufo/<br /> +4) put amfphp into /app/vendors<br /> +5) put cakeamfphp into vendors<br /> +6) put the cake_gateway.php in /app/webroot<br /> +7) put the cakeamfphp.php in /app/views/helpers<br /> +8) put CakeMySqlAdpater.php in /app/vendors/amfphp-core/adapters<br /> +9) Voila: NetServices.setDefaultGatewayUrl( ‘http://localhost/cake_install/cake_gateway.php’);<br /> +Access the service browser through<br /> +http://localhost/cake_install/vendors/cakeamfphp/cakebrowser/”</p> +</blockquote> +<p>The installation doesn’t seem too painful at all. And – guess what – gwoo recently updated a very informative tutorial showing how to create a simple – but still impressive – bullettin board with CakeAMFPHP.</p> +<p><em>“Cool, but I never liked flash, what about <span class="caps">AJAX</span>?”</em></p> +<p style="float:left;"><img src="http://base--/img/pictures/qooxdoo.gif" alt="" /></p> +<p>CakePHP has a nice <span class="caps">AJAX</span> helper to be used in conjunction with <a href="http://prototype.conio.net/">prototype</a>, but there are truly a lot of libraries, mini-frameworks, pre-built applications to create interactive desktop-like user interfaces. Some people may already know <a href="http://qooxdoo.oss.schlund.de/">qooxdoo</a>,</p> +<blockquote> +<p>“[…] an advanced open-source JavaScript-based <span class="caps">GUI</span> toolkit. qooxdoo continues where simple <span class="caps">HTML</span> is not enough. This way qooxdoo can help you implement your <span class="caps">AJAX</span>-enhanced web 2.0 application – easier than ever before.”</p> +</blockquote> +<p>In a recent <a href="http://groups.google.com/group/cake-php/browse_thread/thread/ba219c64cd794764/1d77973293514618?lnk=raot">discussion</a> on CakePHP user group someone suggested the possibility to integrate qooxdoo with CakePHP. Apparently qooxdoo people were <a href="http://www.nabble.com/Re%3A-qooxdoo-PHP-framework-project-p3799302.html">evaluating</a> various <span class="caps">MVC</span> frameworks, and Cake was obviously listed together with two other Rails clones for <span class="caps">PHP</span>. The good news is that <a href="http://cakeforge.org/users/a100rk/">100rk</a> just started a new project called <a href="http://cakeforge.org/projects/cqx"><span class="caps">CQX</span></a>, which – although still in pre-alpha a development demo is already available, and it <em>shows off</em> most of qooxdoo’s features… <a href="http://cqx.100rk.org/trunk/">Take a look</a></p> +<p>Best of luck to 100rk and his brand new project, I really hope to see more of it soon!</p>
@@ -0,0 +1,66 @@
+----- +title: "I18n" +content-type: article +timestamp: 1145106900 +tags: "cakephp|webdevelopment" +----- +<p><em>“CakePHP will officially support Internationalization (i18n) from version 2.0”</em>. That is to say: not right now. That doesn’t mean we have to wait, no chance! I’m Italian and there are plenty of bakers speaking a language other than English who might want to develop a multi-lingual website.</p> +<p>I did, <a href="http://v60.h3rald.com/">once</a>, and the final result wasn’t too bad in the end: every page of the site (except the articles) could be translated into Italian. Before examining my solution (which is far from optimal) I’d like to mention an excellent CakePHP package which allows basic (mostly statuc) i18n.<br /> +It looks like I missed an important baker in my recent <a href="http://base--/blog/view/11">blog post</a>: <a href="http://www.noswad.me.uk/">Andy Dawson</a>, creator – among other things – of the <a href="http://cakeforge.org/snippet/detail.php?type=package&id=2">Locale Package</a>, available at CakeForge. His solution actually came out after H3RALD.com v60 was already developed so I didn’t use it for my own site.<br /> +At a first glance Andy’s solution truly solves basic l18n problems in an elegant way: the most important code snippet is the <a href="http://cakeforge.org/snippet/download.php?type=snippet&id=74">Locale Component</a> which provides the following functionalities:</p> +<ul> + <li>automatic language detection based on browser’s UserAgent string</li> + <li>loading of locale files</li> + <li>setting of customizeable (translated) messages</li> +</ul> +<p>The getString() method provided in the locale component is actually used through the double underscore function, which is already defined (but not yet implemented) in the standard CakePHP file <code>cake/basics.php</code> (yes, this is a small core hack). Andy’s double underscore function can take five parameters:</p> +<pre><code>function __($msgId, $MessageArgs=NULL, $capitalize=1, $punctuate=0,$Code=NULL) +{ + require_once(COMPONENTS.'locale.php'); + $Locale = LocaleComponent::getInstance(); + return $Locale->getString( $msgId, $MessageArgs, $capitalize, $punctuate, $Code ); +}</code></pre> +<p>These parameters are:</p> +<ul> + <li>a “message id” or the message itself</li> + <li>some parameters which can be passed to the message</li> + <li>the message’s capitalization: + <ul> + <li>0 = no change</li> + <li>1 = first letter of first word</li> + <li>2 = fist character of all words</li> + </ul></li> + <li>the message’s punctuation: + <ul> + <li>0 = ""</li> + <li>1 = .</li> + <li>2 = !</li> + <li>3 = ?</li> + </ul></li> + <li>the language code, if you need to override your page’s language</li> +</ul> +<p>This is a convenient method which can be used everywhere, both in your controllers and in your views, to translate simple pre-stored messages. Where are those messages stored? In various locale files which must be placed in <code>app/controllers/components/messages/</code> and look like this:</p> +<pre><code> $messages = Array ( + 'LocaleSetTo'=>"Site locale set to UK English", + 'LocaleChangeTo'=>"Change site locale to UK English", + // Time related messages + 'ago' => "%s ago", + 'ages' => "a long time ago (%s)", +)</code></pre> +<p>The locale package also comes with a <em>Language Controller</em> you can use to handle language changes, and a useful rewrite of the <em>Time Helper_. Andy recently updated his <a href="http://wiki.cakephp.org/tutorials:i18n">i18n tutorial</a> available on CakePHP Wiki, a very interesting read on how to quickly add i18n support to yout first Cake blog (yes, the one described in the <a href="http://wiki.cakephp.org/tutorials:blog_tutorial">Blog Tutorial</a>_-</em>1).</p> +<p>So far so good. The Locale Package provide some basic multi-lingual support in an efficient way, and I’d certainly use it if I decide to (re-)develop a multi-lingual site, but unfortunately this does not fully solve the problem.<br /> +If you want <strong>full</strong> i18n, for sure you’d like to have all the contents of your website translated, which is – normally – dynamic and maybe stored in a database. That was the case of my old website: all the pages are dynamic, not static, so I had to think about something else. <br /> +Since I only had plans to develop a <em>dual</em> language site, I opted for a very lazy (but yet effective) solution: each table – more or less – had “duplicate” fields, something like this:</p> +<ul> + <li>id</li> + <li>title_en</li> + <li>title_it</li> + <li>text_en</li> + <li>text_it</li> + <li>created</li> + <li>modified</li> +</ul> +<p>I basically defined a global $lang variable set to “en” by default and then I accessed the record’s fields (for example in views) like this:</p> +<p><code>echo $data['Project']['text_'.$lang]</code></p> +<p>Ugly, perhaps, but did the job. The good (or bad) thing about this technique was that I could modify the contents of a project, for example, regardless of the current language: in my add/edit view, I chose to generate <em>all</em> the fields of a table and therefore modify all the fields of a project without switching to the other language.</p> +<p>How will Cake support locales? Will we have “localized” database tables (and models?) Only time will tell…</p>
@@ -0,0 +1,19 @@
+----- +title: "Databases supported by CakePHP" +content-type: article +timestamp: 1145251800 +tags: "cakephp|webdevelopment|databases" +----- +<p>One of the most recurring questions on CakePHP User Group is probably <em>“Does Cake support X database?”</em>. Sure, most of us tend to use just MySQL for our websites and applications, but in certain situations some more <em>exotic</em> database support makes the difference. A partial answer to the question above could be <em>“Yes, probably, at least partially”</em>: CakePHP offers support for some database “natively” (i.e. Cake folks made some <em>ad hoc</em> database drivers), others through either <a href="http://adodb.sourceforge.net/">ADOdb</a> or <a href="http://pear.php.net/package/DB"><span class="caps">PEAR</span>::DB</a>.</p> +<p>CakePHP seems to use a <em>multiple level</em> database abstraction: in other words, popular abstraction layers like ADOdb or <span class="caps">PEAR</span>::DB have been wrapped in a “driver” which basically extends the DboSource class (which is the most high level database abstraction). Some people don’t like the idea, because this means that the could be some performance issues, for one, and also that inevitably not <em>all</em> features offered by either ADOdb or <span class="caps">PEAR</span>::DB are used. In my very, very, very modest opinion (I’m not an expert on this matter), this solution focus on achieving good database compatibility leaving the doors open for further tinkering, if needed.</p> +<p style="float:left;"><img src="http://base--/img/pictures/postgres.png" alt="" /></p> +<p>Having said this, yes, the possibilities are good that your favorite database is supported by CakePHP, more or less. Of course, as repeatedly pointed out by some CakePHP core developers, Cake dev team didn’t and is not going to test <em>every</em> database with Cake, using either of the two abstraction layers, but users are more than welcome to do so.</p> +<p>Let’s now have a look at what is <em>known to work</em> with Cake:</p> +<p><strong>MySQL</strong> works fine, and is currently recommended as <em>preferred</em> database solution. What about <strong>MySQLi</strong>? Well, thanks to mappleJoe there’s a (PHP5 only!) <a href="http://cakephp.org/pastes/show/770e73e77e4d7a3d32c2f3de3f175512">driver</a> ready to be used.</p> +*PostgreSQL*’s support is continuously improving. Something may work, something may not: the good news is that the folks who are using it are <a href="http://groups.google.com/group/cake-php/browse_thread/thread/85a29ab6ec6826a0/8eecea26ba53e1fd?q=postgres&rnum=1#8eecea26ba53e1fd">sharing their thoughts</a> with the rest of us. +<p style="float:right;"><img src="http://base--/img/pictures/sqlite.gif" alt="" /></p> +<p><strong>SQLite</strong> is supported natively, or so it seems… what about the newest SQLite3? Yes, probably: there’s a quick <a href="http://www.thompsonlife.net/index.php?section=9">howto</a> on ThompsonLife.net to make it work through the dbo_pear driver.</p> +<p><strong>Access</strong> works through the ADOdb driver, as reported in CakePHP <a href="http://wiki.cakephp.org/docs:databases">wiki</a> (thanks ivanp).</p> +<p><a href="http://www.filemaker.com/">FileMaker</a> is getting there: things aren’t that easy, but bdb is doing <a href="http://groups.google.com/group/cake-php/browse_thread/thread/572d8dd2ba4cbdf7/dca851c795247c0b?q=database&rnum=2#dca851c795247c0b">all his best</a> to make it work, good luck!</p> +<p>Neil Fincham was also trying to develop a custom driver to support <a href="http://www.pervasive.com/">Pervasive</a> through a <a href="http://www.unixodbc.org/">unixODBC</a> driver. Best of luck!</p> +<p>For other databases, check ADOdb’s <a href="http://phplens.com/adodb/supported.databases.html">list of supported databases</a> and use the <code>dbo-adodb</code> driver, or use <span class="caps">PEAR</span>::DB (for fbsql, ibase, informix, msql, mssql, mysql, mysqli, oci8, odbc, pgsql,sqlite and sybase) using the <code>dbo-pear</code> driver.</p>
@@ -0,0 +1,16 @@
+----- +title: "New CakePHP Manual (with associations!)" +content-type: article +timestamp: 1145342820 +tags: "cakephp" +----- +<p>Gustavo Carreno just <a href="http://groups.google.com/group/cake-php/browse_thread/thread/4e13231cc383b9bb/6414184c1058fadb#6414184c1058fadb">announced</a> a new release of the <a href="http://cakeforge.org/frs/?group_id=53&release_id=82">CakePHP Offline Manual</a>. Personally I was extremely happy to download this new release because it finally contains documentation and howtos related to CakePHP’s Model Associations, which is perhaps one of the most used <em>advanced</em> CakePHP features.<br /> +So I’ll have no excuses not to learn how to use them, great…</p> +<p>The manual is available in the following formats:</p> +<ul> + <li>Windows compressed <span class="caps">HTML</span> (.chm)</li> + <li><span class="caps">PDF</span></li> + <li><span class="caps">HTML</span> (multiple pages or single page)</li> +</ul> +<p>Furthermore, the CakePHP <span class="caps">API</span> is also available for download in .chm format, thanks to Mladen Mihajlovic.</p> +<p>Well done guys. Really useful for people like me who are on dialup sometimes :)</p>
@@ -0,0 +1,69 @@
+----- +title: "Textiling" +content-type: article +timestamp: 1145605143 +tags: "" +----- +<p>Once upon a time I used <a href="http://en.wikipedia.org/wiki/BBCode">BBcode</a>. <a href="http://base--/bookmarks/view/cyberarmy">CyberArmy</a> and all its affiliated sites adopted it as <em>de-facto</em> standard for forums and articles, so consequently more or less all my articles are bbcoded. <br /> +I could copy and paste the <em>BBcodeHelper</em> I coded for this site, and it could be quite an interesting read for some people… well, tough luck: today I’d like to talk about <a href="http://base--/bookmarks/view/textile-reference/">Textile</a> instead, which now I consider <em>the answer</em> to all text formatting problems.</p> +<p>If what I wrote up to here doesn’t make sense to you, I’m rambling about the apparent necessity and the undeniable need of web developers, content managers, and writers to use something else other than <span class="caps">HTML</span> for adding style and formatting text. What’s wrong with <span class="caps">HTML</span>? Nothing, it’s just too “tiresome” to use: you have to remember to close all tags, break lines, use the <code><strong></code> tag every time you want <strong>bold text</strong>, etc. etc.<br /> +Some people even freak out when you tell them that they have to use <span class="caps">HTML</span> in their text: “it’s just <em>waaaaaay too difficult</em> to learn and use” …things like that.</p> +<p>Whether you are scared to learn <span class="caps">HTML</span>, you don’t want to, or you know it but you’re too lazy to seriously thinking about manually use a markup language to write your article, I can say that you’ll definitely become addicted to Textile. What? <em>“<acronym title="What You See is What You Get"><span class="caps">WYSIWYG</span></acronym> <span class="caps">HTML</span> editors?”</em> – C’mon, let’s at least <em>try</em> to be serious :)<br /> +Why BBcode doesn’t help enough? Well, simply because I don’t see why <code>[i]this[/i]</code> is easier than <code><i>this</i></code>: unless you have a particular phobia for angular brackets, it seems quite similar to me!</p> +<p>What about <code>_this_</code> instead? You use only two additional characters instead of seven. <span class="caps">SEVEN</span>. If I only want italcized text I honestly can’t imagine myself using more than two extra characters. It’s natural. It’s human.</p> +<p style="float:left;"><img src="http://base--/img/pictures/pear2.gif" alt="" /></p> +Precisely. Textile is a <em>“Humane web text generator™”</em>, it’s simple, elegant and produces standard compliant <span class="caps">XHTML</span> code. <a href="http://www.textism.com/about/">Dean Allen</a> should be worshipped by entire generations of web developers for inventing something so easy to use and so <em>elegant</em> at the same time. Maybe not worshipped, but for sure respected. +<p>I won’t copy and paste the extremely useful <a href="http://cakeforge.org/projects/textilehelper/">TextileHelper</a> for CakePHP either, simply because it’s 4085 lines long and it would be pointless: you can just get it and use it.</p> +<p>I’ll just include some examples of textile formatting…</p> +<table> + <tr> + <td> <strong>Textile Code</strong> </td> + <td> <strong>Result</strong> </td> + </tr> + <tr> + <td> <code>*text*</code> </td> + <td> <strong>bold</strong> text </td> + </tr> + <tr> + <td> <code>_text_</code> </td> + <td> <em>italicized</em> text </td> + </tr> + <tr> + <td> <code>@text@</code> </td> + <td> <code>fixed width</code> text</td> + </tr> + <tr> + <td> <code>"text":url</code> </td> + <td> <a href="http://base--/">linked</a> text </td> + </tr> + <tr> + <td> <code>!path/to/image!</code> </td> + <td> image </td> + </tr> +</table> +<p>These are just some trivial examples. With textile you can also format text blocks, add custom <span class="caps">CSS</span> code and even float images or text! Tables? Sure, how do you think I created the table above?</p> +<pre><code> +| *Textile Code* | *Result* | +| @*text*@ | *bold* text | +| @_text_@ | _italicized_ text | +| <code>@text@<code>| @fixed width@ text| +| @"text":url@ | "linked":http://base--/ text | +| @!path/to/image!@ | image | +</code></pre> +<p>The simplest and most intuitive way possible!</p> +<p>Regardless, Textile is not perfect and may have some quirks, at least the CakePHP helper: the_undefined pointed out in a <a href="http://www.thinkingphp.org/2006/03/22/textile-a-personal-love-of-mine/">blog post</a> that external links are opened in the same window, so he provided a patch to the textile helper to handle this situation.<br /> +I also noticed that sometimes empty <code>style=""</code> and <code>class=""</code> attributed are generated, which don’t do any particular harm, but they are not needed either… so here’s a quick fix to improve your Textile experience in CakePHP: You can use this function ideally in your customized textile helper, <code>$data</code> should be the return value of TextileHelper’s <code>process()</code> method.</p> +<pre><code> +function _fixTextile($data) +{ + $patterns = array( '/http://base--/', + '/style=""/', + '/class=""/', + '/ >/'); + $replaces = array($this->base, + '', + '', + '>'); + return preg_replace($patterns, $replaces, $data); +} +</code></pre>
@@ -0,0 +1,55 @@
+----- +title: "In memory of Vittorio Cevasco (1916-2006)" +content-type: article +timestamp: 1146022560 +tags: "personal" +----- +<p>Yesterday my grandpa passed away, due to an aggravation of his health condition, breathing problems and various other complications. He died in hospital, on Liberation Day, the Italian national holiday celebrating the liberation of our country from the nazi-fascist regime by the Allied troops and partisans on April 25th 1945. He died exactly 61 years after that day.</p> +<p>I’d like to remember my grandpa today, because he most certainly deserves it, as he was a really extraordinary person.</p> +<p><em>“Yes, I’m sure he was, isn’t everybody extraordinary in some way?”</em></p> +<p>Definitely: everybody is special, and people tend to say that especially when someone passes away. In my grandpa’s case, actually I can say that in a slightly more absolute sense: his life was truly uncommon and very active.</p> +<p><strong>A very active life</strong></p> +<p style="float:left;"><img src="http://base--/img/pictures/grandpa.jpg" alt="" /></p> +<p>Vittorio Cevasco, my grandfather, was certainly the most active member of my family. We’re talking about a man who was still able to drive a car up to last September (he was nearly 90 years old), and used to drive 500 Km on the motorway and mountain roads every year to go on vacation: he went to the same place, Mals Vinschgau, near the Italian-Austrian-Swiss border for over fifty years. He never had particular troubles to walk, and just in the past months started using a walking stick… before that he used to walk around the city by himself everyday, in his endless meanderings. He always had something to do: visit friends, go to public offices, go to our house in the countryside – he still used to cultivate the land with potatoes, tomatoes and basil as a hobby until a few months ago – and so on: he was really a busy man.<br /> +I can certainly say that I never though he was really old until after his wife, my grandma, died, about a year ago. Since then he really aged, and quickly, as she probably was one of the main reasons of his existance.</p> +<p>When he was “young” (i.e. less than 80) he used to <em>compete</em> with the lift in his flat running down the stairs. Everyone else was taking the lift, but he always chose to go on foot down the stairs, to keep in exercise. His other exercise was cultivating our land in Sessarego, near Bogliasco (Genoa, Italy), as a hobby more than anything, providing us with fresh <em>biological</em> products like that extraordinary basil essential to make our very tasty local <a href="http://www.pesto.net/eng/index.php">pesto sauce</a>.<br /> +He always tried to convince me to do some work there, and he actually taught me various tips and secrets which will hopefully be useful in near future. Sadly, when he was alive I wasn’t too keen on the idea of cultivating and maintain our land from time to time… but I kind of changed my mind recently, and I know he realized that just a few days before he died.</p> +<p>After <span class="caps">WWII</span> he did various things, he even was erhm… somehow active in <em>certain international import/export activities</em> of watches from Switzerland to Italy – quite a common thing back in the day, especially considering that the border was at just a few hours drive.<br /> +Later on he became an estate agent, working for a local office and then helping out some friends running their activity. In 2001 he hit his own personal record selling a fancy villa worth one billion of the old Italian Lire – which convert to approx. 500,000 Euro, but at the time it was much bigger money than that. With the commission generated by that sale he bought a brand new Ford Fiesta: he was 85 years old.</p> +<p>But no, these are not the most extraordinary episodes of his life of course. He could fly – literally.</p> +<p>He was one of the first man in Italy and the the first in Genoa area to get a flying license, back in 1934. A news which made the local papers at the time, and we still have that article somewhere. He wanted to become a civil pilot, but he never did: the Country needed him to protect our sky, when Italy joined the War in 1941.</p> +<p><strong>The Aviator</strong></p> +<p style="float:left;"><img src="http://base--/img/pictures/sessarego.jpg" alt="" /></p> +<p>My grandpa lived the early years of his youth in the village of Sessarego, where my great-grandfather bought an old house, after taking part in <a href="http://www.italian-american.com/garib-it.htm's">Giuseppe Garibaldi</a> expedition at Marsala (1860) fighting for the Italian independence (he’s listed among <a href="http://www.italian-american.com/garibal.htm">the ones</a> who actually landed there).<br /> +There his parents used to have a few cows and produce milk, and one of his tasks was milking delivery… no scooters or cars, at the time, of course, and certainly not for a teenager like him: he often had to carry the milk barrels up and down the hill <em>on foot</em>, and I’m talking about 1-2 Km with at least 30-40 kilos on your shoulders!</p> +<p>But my grandpa’s plans were much different: he wanted to fly away, and high – literally. You can imagine the face of my grand-grandfather when he expressed his wish to become a pilot! Nobody ever did that, in the area, and becoming a pilot was, at the time, like becoming an astronaut in the seventies.<br /> +The price of the license was really high at the time, 1,200 Lire. That would be like at least 30,000 Euro now, especially considering that his parents weren’t exactly rich. In the very end, my father supported him and provided as much money as he could afford: 1000 Lire.<br /> +But he still needed 200 Lire, so after hassling the flying instructors he signed an agreement stating that if they anticipated him the money he’d have paid them back once he started working: it was clear in fact that he’d have became a military pilot, as the Regime needed people for their brand new aircrafts, and the was felt imminent.<br /> +He paid them back, eventually, after passing both the civil and military tests. He became a sergeant for the <em>Regia Aviazione</em> (Royal Airforce), with a salary of 20 Lire/month, ten of which went to the flying school, for many months, but he was still earning some very decent money.</p> +<p>One of the most peculiar things about my grandpa was his memory: he was always able to tell you the story of his life, all the events, with the same details and <em>all the exact dates</em>, on every occasion. Even when we took him to the hospital, a few weeks ago, when we asked the nurse if he was self-conscious she said: <em>“Yes… well, he was talking a few hours ago, but I don’t know if he was raving or what… he said he was a pilot, and that he used to fly at 350Km/h…”</em></p> +<p style="float:right;"><img src="http://base--/img/pictures/r2002-main.jpg" alt="" /></p> +<p>Damn right. His old <a href="http://www.comandosupremo.com/Re2002.html">Re 2002</a> was able to fly at 350 Km/h if pushed, at a standard altitude of 35,000 m, while carrying a 500Kg bomb. It was <em>his</em> plane, and he never forgot that, even a few days before he passed away. He’d tell you all the stats, the mechanics, the technical details and all the tricks to perform acrobatic maneuvers if you asked him… Not that actually anybody ever did, because <em>every</em> time something reminded him of that, even slightly, he’d start talking about the old days when he was commanding his squad patrolling the Italian borders.</p> +<p>Last year, after my grandma died and he didn’t feel like driving 500Km to go to the mountains (for the first time in his life), I had to drive his <em>Fiesta</em> myself in my first long driving journey. At first I wasn’t too sure I’d have enjoyed the drive, partly because of the long distance and partly because I was going to be alone with my grandpa for about six hours, and I was afraid of not be able to find enough topics of conversation…</p> +<p>That fear went away almost instantly right a few minutes after we started the journey.<br /> +When we got on the motorway, I started complaining that my dad was going slightly over the limit with his brand new Peugeot 307: <em>“Look, he’s already going at 140km/h and we just started the journey!”</em></p> +<p><em>“Centûcäranta chilumetri l’ûa… û më aeruplannu pûeivä fâ ï trexëntusincûanta cûmme ninte!”</em><br /> +[140 kilometers per hour… my plane could easily do 350!]</p> +<p>He normally used to speak in <em>zeneise</em> (“Genovese”), Genoa’s dialect, mixed with some Italian <em>if he really had to</em>. That was it: if you started talking about speed, technology, engines, history or any other topic which was <em>slightly</em> related to his plane, the war, the regime etc. he always started off talking about his past and his plane, ignoring everything else. <br /> +My grandma used to get kinda annoyed about it… on every occasion, if he had a chance, he’d start talking about <em>that particular day in 193x/4x</em> and so on: we all knew that, and actually I enjoyed listening to his stories, mostly because they were genuine and authentic relics of an old and glorious past. I think in his mind he wanted us all to remember him in that way, to always keep in mind that he was a pilot and how he enjoyed it, even when he went in jail for it, even when his plane was taken down…</p> +<p style="float:left;"><img src="http://base--/img/pictures/Re2002.jpg" alt="" /></p> +<p>On that day right after he was assigned to a new base, they asked him to perform some exercises in the air, loops and all sort of acrobatics: <em>“ë sölite cöse che së dûviëiva fä in t’ë l’aviäsiûn”</em> [the usual things you had to do in the airforce].<br /> +He was just starting practicing the Re 2002 at the time, but he quickly found out that it was <em>extremely</em> maneuvrable, at least to the standards of the time: the equivalent of a top range today’s fighter.<br /> +He started off with some usual things, performing various twists in the air, loops, etc. etc. until he had to end his exhibition with a dive from an altitude of 10,000m down at maximum speed to a limit of 1500m… On that particular day a colonel from another base and some other high-ranking officer were down on the ground near the aircraft to enjoy the show, and check that everything was performed correctly. My grandpa was aware of that, so he decided to perform a great show especially for them that day: he went up to 10,000m, and then dove down accelerating, helped by gravity… he went down and down, faster and faster, people down on the ground were staring at him waiting for him to pull up the plane, but nothing, he still went down and down so that quickly the small crowd of captains and colonels got scared and run away in every direction: <em>“He’ll crash, he’ll crash!”</em> <br /> +He did not crash, not that day… he went down up to slightly less than 100m and <em>then</em> pulled up the plane: ar real wonderful <em>extreme</em> performance. Now imagine this beast of a plane coming down at 300Km/h and accelerating, making a terrible noise typical of the engines of the time and then <em>pull up suddenly</em> right above your head: one more second and he wouldn’t have been able to tell that story.<br /> +He was called by the commander of the base who told him: <em>“Cevasco, you’re hell of a skilled pilot, but now I have to put you in jail for a day for not obeying your orders of staying above 1500m”</em> – That, I reckon, was one of the best days of my grandpa’s life.</p> +<p>He was never captured, but his plane was taken down by an English <em>Spitfire</em> in the South of Italy. The war was nearly finished, and there were just those little air fights from time to time. He really risked a lot that day, and managed to attempt an emergency “landing” completely destroying his plane along as part of his jaw, which was alright after a few months. <br /> +Since then he never flew again, and managed to escape to be re-called in duty. But he did like flying back with his memories to those glorious days.</p> +<p>A few years ago my dad showed him Microsoft’s <em>“Flight Simulator 98”</em>, and some other flying games. He was amazed at the graphic, but not so satisfied with the whole <em>simulation</em> thing: not even close to reality, too damn easy.</p> +<p><em>“Cäu më, te vûeive vedde tïe a fä vûlá û më aeruplannu”</em><br /> +[My dear, I’d have liked to see you trying to fly <em>my</em> plane]</p> +<p>…and that was it: the beginning of another journey back in time.</p> +<p>He always had a very practical view of life and especially of technology. He wouldn’t take you seriously and would not be interested in knowing about programming and the Internet, unless it could produce some concrete result:</p> +<p><em>“Ti che ti stûddi da insegnë e che ti stë sempre davanti a-û cumputer, nun te puriësci truvä ûn sistemmä de anä in t’ë a banca e piggië qualche miliûn the Euro?”</em><br /> +[You that you’re studying to become an engineer and that spend so long in front of the computer, couldn’t you find a way to get into a bank and get out some million of Euro?]</p> +<p>He’d have loved me to become a [rich] hacker, probably… But the last time I saw him, last Friday, he seemed happy enough to hear that I was just about to start working.</p> +<p>He realized that I finally found a good job after my studies, and then my dad told him Roxanne and I would have moved to the countryside, in Sessarego… He made a big effort to move the muscles of his mouth in a large smile: he was happy.</p>
@@ -0,0 +1,108 @@
+----- +title: "Birthday present? Web space, please..." +content-type: article +timestamp: 1146142020 +tags: "website|review" +----- +<p>Today is my birthday! <a href="http://base--/blog/view/20/">Not too happy</a>, but still my birthday after all. What presents did I get from my relatives and friends? Well, various things, but I told my parents and uncles I actually needed some web space… <em>“What? Didn’t you have the hosting sorted out?”</em><br /> +Well, I had, up to a few days ago when my friends and hosting provider, DeWayne Lehman, decided to close down his <a href="http://www.block-house.com">company</a>. The reason being, to cut a long story short, that he can’t keep up with competition: he doesn’t have enough customers, and he can’t afford server upgrades, while other companies are literally giving space away.<br /> +That was a pity, not only because Block House used to host various non-profit orgs and initiatives, but also because the guy who run it was an excellent admin, always offering excellent support.</p> +<p>Anyhow, in the end I’ll have to transfer all five of my sites to a new host, so here we go again: <em>what’s the best hosting company?</em><br /> +Obviously it depends a lot on what you’re looking for, and here’s what I need:</p> +<ul> + <li>At least 4GB of space</li> + <li>At least 30GB/month bandwidth</li> + <li><span class="caps">PHP</span> of course, but also other languages like Perl, Python and Ruby (+ Rails support)</li> + <li>MySQL databases… at least 10-20</li> + <li>Be able to host 5-6 sites minimum</li> + <li>Subdomains allowed (10 in total?)</li> + <li><span class="caps">FTP</span> <em>and <span class="caps">SSH</span></em> access</li> + <li>Subversion, if possible</li> +</ul> +<p>All this for less than 10$/month, ideally 5$, on shared hosting. I already made my choice and if you’re reading this post it means everything worked fine, but anyway, let’s have a look at what the market can offer for my needs. I only went for US-based hosts: Italian hosts are terrible and US hosts are normally more reliable and cheaper.</p> +<p style="float:left;"><img src="http://base--/img/pictures/dreamhost.gif" alt="" /></p> +<p>The first hosting company I was tempted by was <a href="http://www.dreamhost.com">DreamHost</a>. They can literally sell you anything but their mother, at stupidly cheap rates for what you get (apparently):</p> +<ul> + <li>20GB of space</li> + <li>1TB (!) bandwidth</li> + <li>PHP4, PHP5 Perl, Python and Ruby + RoR support</li> + <li>Unlimited databases</li> + <li>Unlimited hosted domains</li> + <li>Unlimited hosted subdomains</li> + <li><span class="caps">FTP</span> and <span class="caps">SSH</span> access</li> + <li>Subversion and <span class="caps">CVS</span></li> + <li>…and more</li> +</ul> +<p>For 7.95 if you pay two years in advance. And the first time you can get up to 97$ off by using one of the thousands referrer’s coupons available on the net. OK, where’s the catch? Well, there’s a <a href="http://futurosity.com/231/why-dreamhost-sucks">bad review</a> about them which points out that their reliability is not too great, for example, and that the seem to be rather dodgy in general. “They are overselling, they’ll soon enforce <span class="caps">CPU</span> restrictions” etc. etc. <br /> +<em>…let’s move along</em></p> +<p style="float:right;"><img src="http://base--/img/pictures/rails.gif" alt="" /></p> +<p>I might try out Ruby on Rails someday, so perhaps I thought it would be wise to choose a host supporting it, for a change. The first Rails friendly I thought about was <a href="http://www.railsplayground.org">RailsPlayground</a>, which started off as <span class="caps">FREE</span> Rails host and then ended up offering interesting commercial hosting plans. They are not bad, and I’d have probably gone with them if I had only one site to manage: for 60$ a year you get:</p> +<ul> + <li>3GB of space</li> + <li>30GB bandwidth</li> + <li>PHP4, PHP5 Perl, Python and Ruby + RoR support</li> + <li>Unlimited databases</li> + <li>Unlimited add-on domains</li> + <li>Unlimited hosted subdomains</li> + <li><span class="caps">FTP</span> and <span class="caps">SSH</span> access</li> + <li>Subversion and <span class="caps">CVS</span></li> + <li>…and more</li> +</ul> +<p>Well, the only reason why I didn’t go with them was that I did slightly more space, only that. The plan for 5GB of space costs 11$/month, which was too expensive for my liking.</p> +<p style="float:left;"><img src="http://base--/img/pictures/textdrive.gif" alt="" /></p> +<p>Since we’re talking about Rails, why not <a href="http://www.textdrive.com">Textdrive</a>? Founded by 200 IT professional, hosts high quality sites, it’s the official Rails host… An “elite” solution, here’s what you get:</p> +<ul> + <li>Use Apache and Lighttpd web servers side-by-side</li> + <li>Host PHP4 and PHP5 web pages and applications</li> + <li>Host a weblog using Textpattern, Wordpress, MovableType, Typo, etc</li> + <li>Host Ruby and Ruby on Rails applications (including <span class="caps">FCGI</span> and hundreds of gems)</li> + <li>Host Perl applications (including 100’s of Perl modules)</li> + <li>Host Python applications like Django</li> + <li>Manage your code base with version control (Subversion, <span class="caps">SVK</span>, Darcs, Monotone & Arch)</li> + <li>Share iCal files over WebDAV</li> + <li>Mount a WebDAV drive on your desktop (like iDisk)</li> + <li>Easily create free subdomains with wildcard <span class="caps">DNS</span></li> + <li>Store your Basecamp file uploads over <span class="caps">SFTP</span></li> + <li>Access your account via <span class="caps">SFTP</span> and <span class="caps">SSH</span></li> + <li>Add domains, unlimited <span class="caps">IMAP</span> and <span class="caps">POP</span> mail boxes and mail aliases through a control panel</li> + <li>Check your email through Webmail</li> + <li>Host Mailman mailing lists complete with archives</li> + <li>Use MySQL (default), PostgreSQL, SQLite and Berkeley databases</li> +</ul> +<p>Plans start at 12$/month for 1GB of space and one website… The 3GB one is 40$/month, for 20 sites in total. Too bad it’s too expensive for me as they are truly the top for shared hosting – I think.</p> +<p><a href="http://www.hostgator.com/">Host Gator</a>, which seems to be one of the most frequently recommended at SitePoint.com forums, is not bad either. They have a “hatchling” plan for 3,5GB at 6.95, which wasn’t bad, but it only allows one domain to be hosted. The “Baby” plan allows unlimited domains and is 9.95$/month, which is kinda dear. You get:</p> +<ul> + <li>5GB of space</li> + <li>75GB bandwidth</li> + <li>PHP4, PHP5 Perl and Python</li> + <li>Unlimited databases</li> + <li>Unlimited add-on domains</li> + <li>Unlimited hosted subdomains</li> + <li><span class="caps">FTP</span> access</li> + <li>…and more</li> +</ul> +<p>No <span class="caps">SSH</span>, no <span class="caps">SVN</span> and no Rails: out.</p> +<p><a href="http://www.site5.com/">Site5</a> is also one of SitePoint’s favourite, but still has limitations on the number of sites. I would have got the SuperHosting <span class="caps">XTREME</span>, for 7,77$/month:</p> +<ul> + <li>11GB of space</li> + <li>400GB bandwidth</li> + <li>PHP4, PHP5 Perl, Python, Ruby + RoR support</li> + <li>Unlimited databases</li> + <li>5 domains hosted</li> + <li>Unlimited hosted subdomains</li> + <li><span class="caps">FTP</span> and <span class="caps">SSH</span> access</li> + <li>…and more</li> +</ul> +Not bad, a little bit too much for only 5 sites… I needed 6, too bad :/ +<div style="float:right; padding:3px;"><script src="http://www.bluehost.com/src/js/h3rald/CODE2/488x160/1.jpg"></script> </div> <p>This site is currently hosted on <a href="http://www.bluehost.com">BlueHost</a>, a hosting company established in 1996, which seems to be reliable enough (not many complaints on the net) and seems serious enough. They don’t offer subversion and WebDAV for “security reasons” and in order to get a shell account you have to send them a copy of an ID card. Annoying? Well, perhaps for some: this made me understand that they don’t allow just anybody to get <span class="caps">SSH</span> access unconditionally, and I didn’t mind. I sent them a scansion of my ID card and I got a friendly support email after a few minutes, confirming that it was activated. Here’s what I got:</p> +<ul> + <li>15GB of space</li> + <li>400GB bandwidth</li> + <li>PHP4, PHP5 Perl, Python, Ruby + RoR support</li> + <li>20 MySQL databases + 10 PostgreSQL databases</li> + <li>6 domains hosted in one account (easier for me!)</li> + <li>20 subdomains + 20 parked domains</li> + <li><span class="caps">FTP</span> and <span class="caps">SSH</span> access</li> + <li>…and more</li> +</ul> +<p>For 6,65$/month, 2 years pre-payment. One of the good things is that they are not fussy about giving the money back if you cancel. Anyhow… let’s hope for the best, so far, so good.</p>
@@ -0,0 +1,108 @@
+----- +title: "Ten minutes on Rails (while eating Cake)" +content-type: article +timestamp: 1146317340 +tags: "cakephp|rails|webdevelopment" +----- +<p>Today I decided to do something different, something I’ve been dying to do since before coming across CakePHP: give Rails a <em>proper</em> try. Like many other <span class="caps">PHP</span> developers out there, when <a href="http://www.rubyonrails.org">Ruby on Rails</a> came out I felt damn jealous and terribly tempted to learn Ruby <em>only</em> to start using such an amazing web development framework. At the time I actually even started reading various tutorials about it, and I was literally amazed at how RoR revolutioned the way of developing web applications.</p> +<p style="float:left;"><img src="http://base--/img/pictures/rails.gif" alt="" /></p> +<p>One of the main problems which made me – sadly – abandon Rails was Ruby itself: personally I’ve never seen a programming language with a cleaner and more elegant syntax, but also – at least at the time – there weren’t many hosts supporting it. LuckilyI found CakePHP quickly after that…<br /> +Now however, more and more hosting companies boast full Rails support, and so when recently I <a href="http://base--/blog/view/21/">had to move</a> to a new host, I made sure it was Rails-friendly, <em>just in case I wanted to give Rails another try, someday</em>.<br /> +Oh well, the temptation was so strong that today, only a two days after switching to my new host, I felt I <em>had</em> to try it, I <em>had</em> to taste something different than the usual Cake.</p> +<p>I decided to (re-)read and follow the <a href="http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html">OnLamp tutorial</a> about RoR, step by step, once again. I quickly typed <code>rails cookbook</code> from my shell and voilá, rails silently creates the skeleton of my application:</p> +<p><span class="caps">README</span><br /> +Rakefile<br /> +app/<br /> +components/<br /> +config/<br /> +db/<br /> +doc/<br /> +favicon.ico<br /> +index.html<br /> +lib/<br /> +log/<br /> +public/<br /> +script/<br /> +structure.txt<br /> +test/<br /> +tmp/<br /> +vendor/</p> +<p>That’s familiar: it’s very similar to what CakePHP’s directory structure used to look like. Now Cake <em>evolved</em> and adopted its own schema, which – I must say – seems more functional than RoR’s, at least at a first glance:</p> +<ul> + <li>app/ + <ul> + <li>config/</li> + <li>controllers/</li> + <li>models/</li> + <li>plugins/</li> + <li>tmp/</li> + <li>vendors/</li> + <li>views/</li> + <li>webroot/</li> + </ul></li> + <li>cake/ + <ul> + <li>config/</li> + <li>docs/</li> + <li>libs/</li> + </ul></li> + <li>vendors/</li> +</ul> +<p style="float:right;"><img src="http://base--/img/pictures/cakephp.png" alt="" /></p> +<p>Cake felt the necessity to divide what you can mess with (<code>app/</code>, <code>vendors/</code>) from what you’d better not touch (<code>cake/</code>). Rails just left everything on the same level.</p> +<p>After creating my database and the necessary tables I have to edit <code>config/database.yml</code>, which corresponds to Cake’s <code>app/config/database.php</code>. Then things start to become a bit different from Cake, as Rails offers some very handy built in scripts which can be used to automatically create your application’s files, i.e. executing <code>ruby script/generate controller Recipe</code> creates the controller and other bits:</p> +<pre><code>exists app/controllers/ +exists app/helpers/ +create app/views/recipe +exists test/functional/ +create app/controllers/recipe_controller.rb +create test/functional/recipe_controller_test.rb +create app/helpers/recipe_helper.rb</code></pre> +<p>And so on. Anyhow… I followed the tutorial and yes, it was a nice read. CakePHP borrowed a lot from Rails but not everything. Inevitably Ruby’s syntax is less verbose and looks very very clean:</p> +<p><% highlight :ruby do %><br /> +class RecipeController < ApplicationController<br /> + scaffold :recipe</p> +<p>def list<br /> + @recipes = Recipe.find_all<br /> + end</p> +<p>def edit<br /> + <code>recipe = Recipe.find(</code>params[“id”])<br /> + @categories = Category.find_all<br /> + end<br /> +end<br /> +<% end %></p> +<p>While CakePHP’s, simply because it uses <span class="caps">PHP</span> and not Ruby, looks less pretty:</p> +<p><% highlight :php do %><br /> +class RecipesController extends AppController<br /> +{<br /> + var $scaffold;</p> +<p>function list()<br /> + {<br /> + $this→set(‘recipes’, $this→Recipe→findAll());<br /> + }</p> +<p>function edit($id)<br /> + {<br /> + $this→set(‘recipe’, $this→Recipe→find(“id = $id”));<br /> + $this→set(‘categories’, $this→Category→findAll());<br /> + }</p> +<p>}<br /> +<% end %></p> +<p>CakePHP Development Team did a great job translating some of Rails functionalities into <span class="caps">PHP</span>, and the while CakePHP’s syntax is <strong>much</strong> cleaner if compared to PHP’s standard spaghetti-code approach, Ruby just looks much more clear, sorry. <em>Imagine a world without funny unnecessary brackets, pointless semicolons and where everything just looks better</em>: that’s Ruby.</p> +<p>Sigh. Now I do understand why Rails was built in Ruby and not in <span class="caps">PHP</span>: simply because a PHP’s Rails would have been outscored by its “Ruby port”!</p> +<p>One thing I liked about Rails which has not been ported in Cake (yet) is a somehow smarter way of scaffolding. While the Ruby code above actually works, the CakePHP’s edit method doesn’t, or better, it does but not as expected: when you remove <code>var $scaffold</code> the scaffold is just plain gone, and you have to code everything yourself, while in Ruby you can leave the scaffold and then develop methods one by one, and still be able to use scaffolded methods if you didn’t define the custom ones.</p> +<p>The other thing I noticed about RoR is that it definitely handles errors better! This is probably another language issue. I basically forgot to set a category for the recipes, and when executing my custom list of recipes I got a very, very well structured error page showing something like:</p> +<p><% highlight :ruby do %><br /> +NoMethodError in Recipe#index</p> +<p>Showing app/views/recipe/index.rhtml where line #18 raised:</p> +<p>You have a nil object when you didn’t expect it!<br /> +The error occured while evaluating nil.name</p> +<p>Extracted source (around line #18):</p> +<p>15: <% @recipes.each do |recipe| <span>><br /> +16: <tr><br /> +17: <td><</span>= link_to recipe.title, :action => “show”, :id => recipe.id <span>></td><br /> +18: <td><</span>= recipe.category.name <span>></td><br /> +19: <td><</span>= recipe.date <span>></td><br /> +20: </tr><br /> +21: <</span> end <span>><br /> +<</span> end %></p> +<p>I took a screenshot of the page, because it was too nice: <a href="http://base--/img/pictures/rails_error.jpg">check it out</a>. This error page really tells you what’s wrong, and even prints the lines of code around the error! It also lets the developer check the full backtrace and every sort of information… Can we have this in CakePHP please? I actually started to develop something like this, but seemed quite hard to do in <span class="caps">PHP</span>.</p>
@@ -0,0 +1,67 @@
+----- +title: "A look at Symfony" +content-type: article +timestamp: 1146483766 +tags: "" +----- +<p>CakePHP is <span class="caps">THE</span> perfect <span class="caps">PHP</span> framework, so <em>we</em> don’t need anything else. Oh well, no. I personally love CakePHP, but I do believe other <span class="caps">PHP</span> frameworks can be interesting and maybe even useful, so today I thought I’d have a look at the <a href="http://base--/bookmarks/view/simfony/">Simfony Project</a>. This framework seems to be mentioned here and there on the Net in many different ways, someone said it can do wonders, some said it’s more advanced, others said something like <em>“qcodo sucks.. cake stinks.. symfony rocks!!!!!”</em>, so it <span class="caps">OUGHT</span> TO be pretty cool, definitely.</p> +<p style="float:left;"><img src="http://base--/img/pictures/symfony.gif" alt="" /> <em>Know thy enemy</em> someone said (OK, bad joke), so let’s have a look at this interesting alternative to CakePHP. <em>No dude, not another <span class="caps">MVC</span>-like, pseudo-Rails, <span class="caps">AJAX</span>-worshipping framework!</em> Yes, another one. Actually Symfony is more than that: while people <em>can</em> say CakePHP is similar to RoR for some features and for the strong <span class="caps">MVC</span> architecture, Symfony chose another road. Yes, <span class="caps">MVC</span> is still there, but the first thing I noticed after reading their <a href="http://www.symfony-project.com/tutorial/my_first_project.html">beginners’ tutorial</a> was that one of the things which Symfony seems to use quite regularly (and Cake doesn’t)is code generators. Things like executing <code>symfony propel-build-sql</code> or even <code>symfony propel-generate-crud frontend post Post</code> from command line to generate your code automagically, which CakePHP – except for our little <em>bake</em> script – doesn’t use. <br /> +<em>See? Simfony is <span class="caps">MUCH</span> better and <span class="caps">MUCH</span> more advanced than Cake!</em> No, hang on a minute… I just listed one thing which Symfony has more than Cake, is there any more? Yes, there is, for now: i18n – internationalization. Symfony comes with native multi-lingual support and Cake doesn’t – yet – although there are rumors that i18n for Cake 2.0 is <em>almost done</em>. This is not speculation, re-read the sentence: First off I’m referring to Cake <em>2.0</em> (which means it will take a while) and also I read it in the <a href="https://trac.cakephp.org/wiki/Proposals/2.0ToDoList">Cake 2.0 ToDo List</a>.</p> +<p>One of the most recurring and yet pointless critiques to CakePHP from Symfony enthusiasts is that the sites developed with CakePHP look terrible. I perfectly agree, look at <a href="http://www.h3rald.com/">this</a> and tell me if the developer is not a complete and hopeless idiot when it comes to design and look ‘n’ feel!<br /> +I do agree that some CakePHP sites (mine, mainly) don’t look too good, and probably the Cake Software Foundation should pay me to put it offline. I also agree that the Symfony website looks nice and is more pleasant to the eye than CakePHP’s, but I do hope that the old “design contest” doesn’t get forgotten…</p> +<p style="float:right;"><img src="http://base--/img/pictures/askeet.gif" alt="" /> The Symfony team also did something truly remarkable: a comprehensive tutorial, an advent calendar, some great free source code to download and a fully functional Web 2.0-compliant online application <em>all in one</em>. I’m referring to <a href="http://base--/bookmarks/view/askeet/">Askeet</a>, a Symfony-powered website which has been built from scratch using the framework and its development is well documented in <a href="http://www.symfony-project.com/askeet">twenty-four tutorials</a>. In one move these guys made an interesting website, some useful documentation and self promotion… what can I say: for next Christmas we’d better chain PHPnut, gwoo, nate & the others to their chairs, close them in a small room and force them to code something like that in twenty-four days.<br /> +If I were to mention something which Symfony did well I’d certainly say the <a href="http://www.symfony-project.com/content/documentation.html">documentation</a>. Screencasts, tutorials, advent calendars, a book, a wiki, <span class="caps">API</span> etc. etc. All done, and all good, I must admit that. The good news is that CakePHP is slowly catching up, and now the <a href="http://manual.cakephp.org">manual</a> looks pretty decent.</p> +<p>OK, enough flattering and let’s talk about something I didn’t like about Symfony. I downloaded the thing and it turns out it’s 1.2MB in size, <em>a hell of a framework!</em> After extracting the beast I had a look inside and found three directories: <code>data</code>, <code>lib</code> and <code>bin</code>. Not bad. I opened <code>bin</code> and found the three magic symfony scripts, alright; I opened <code>data</code> and found nine directories, I opened <code>lib</code> (the real deal) and found 25 directories! These guys maybe never heard of something called <em>“an organized directory structure”</em>, or perhaps I’m just too used to Cake’s logic and essentiality.<br /> +Browsing around I found something like 247 .dat files defining country names and currencies in all the languages of the world, script.aculo.us and prototype libraries, javascript calendars and other wonders… Weeeeheee! <br /> +The good thing is that Symfony seems to include pretty much everything you’d ever need, the bad thing is that <em>personally</em> I will never use any of the thirteen Chinese-related .dat files in th i18n directory. This philosophy is exactly the opposite to Cake: at first i got pissed off when I noticed that CakePHP doesn’t include prototype by default, but then I realized that if they started include <em>everything</em> you <em>might</em> need <em>someday</em> we’d end up like… like Symfony, with 1.2MB of stuff 500KB of which – at least – will most likely not be of any use for the average developers.</p> +<p>The other dangerous consequence of including more and more stuff is the so called <em>widget-temptation</em>: If you include script.aculo.us you <span class="caps">MUST</span> show off and offer some weird toy someone <em>may</em> use… well, Symfony seems to go in that direction, and someone compared it to component-driven frameworks like eZ Publish rather than more general-purposes projects. I’m sure the <a href="http://www.symfony-project.com/content/book/page/generator.html">admin generator</a> can be damn handy, but what happens if I’m a terribly annoying guy who’d like to tweak it and change it so that it fits <em>my</em> needs? In Cake… well, there’s nothing “official” included in the core, and when you find a third-party helper or component you feel you can take a look and poke around, extend it, or change it totally. It’s all up to the developers and their needs: personally think that widgets are useful, but some times people like a bit more flexibility.</p> +<p>So the overall impression of Symfony is that – regardless its arguable, self-proclaimed, <em>enterprise-ready</em> status – it is rather complex, with a steep(er) learning scheme which doesn’t justify the extra features.</p> +<p>From the <a href="http://www.symfony-project.com/tutorial/my_first_project.html">My first Symfony project</a> tutorial:</p> +<blockquote> +<p>So, the weblog will handle posts, and you will enable comments on them. Edit the file sf_sandbox/config/schema.xml and paste the following configuration:<br /> +<small><br /> +<pre><code> +<?xml version="1.0" encoding="UTF-8"?> +<database name="propel" defaultIdMethod="native" noxsd="true"> + <table name="weblog_post" phpName="Post"> + <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" /> + <column name="title" type="varchar" size="255" /> + <column name="excerpt" type="longvarchar" /> + <column name="body" type="longvarchar" /> + <column name="created_at" type="timestamp" /></p> +</blockquote> +</table> + +<table name="weblog_comment" phpName="Comment"> +<column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" /> +<column name="post_id" type="integer" required="true" /> +<foreign-key foreignTable="weblog_post"> +<reference local="post_id" foreign="id"/> +</foreign-key> +<column name="author" type="varchar" size="255" /> +<column name="email" type="varchar" size="255" /> +<column name="body" type="longvarchar" /> +<column name="created_at" type="timestamp" /> +</table> +</database> +<p></code></pre><br /> +</small><br /> +This code is longer to read than to explain: It describes two tables Post and Comment.</p> +<p>NO! Sorry, no. This is <span class="caps">NOT</span> simple. It is logic, clear and makes perfect sense, it’s not that I’m retarded and I can’t write or read <span class="caps">XML</span> files, it’s just unnecessary. You create this and then call the slave-script to create the model and the corresponding database table… This is exactly the <em>enterprise</em> way of doing things CakePHP made me forget. <em>Convention over configuration</em>. Not hundreds of configuration files.</p> +<p>But there’s more: you can even configure your views with some simple <code>.yml</code> (!) file:<br /> +<pre><code> +default: + http_metas: + content-type: text/html; charset=utf-8 + metas: + title: The best weblog ever + robots: index, follow + description: symfony project + keywords: symfony, project + language: en +</code></pre></p> +<p>Sure, it’s good. It helps, and it’s certainly useful, but I’d rather code a custom component to do the same thing with a few arrays. Again, this is arguable.<br /> +Validation is done through .yml files, and you can configure your administrator backend through a .yml file too! Cake has .ini-based <span class="caps">ACL</span>, and that’s about it: if I don’t want to use them I don’t use them. <br /> +Clearly you probably don’t have to edit all settings in the configuration files, but I just don’t like the approach, personally.</p> +<p>Oddly enough, Symfony’s slogan seems to be “professional web tools for lazy folks”…</p> +<p>It all depends on what you need. For <em>my</em> needs I chose CakePHP, and <a href="https://trac.cakephp.org/wiki/Cake/About">here’s why</a>.</p>
@@ -0,0 +1,49 @@
+----- +title: "CakePHP 1.0 released" +content-type: article +timestamp: 1146625560 +tags: "cakephp|webdevelopment" +----- +<p>As <a href="http://digg.com/programming/CakePHP_1.0_has_been_released">Digg</a>_ points out, the first <em>stable</em> version of CakePHP was released, yesterday. I should have posted yesterday about it, and no, I didn’t forget: I was just busy downloading the new version, have a look at the new site, talk to people etc.</p> +<p>Anyhow, it’s ready, just baked and smells damn good. Go get it if you didn’t already, it’s available at <a href="http://cakeforge.org/frs/?group_id=23">the usual place</a>, even this time you won’t be disappointed. CakePHP now reached the 1.0 milestone, in a way which reminds me a lot about Mozilla Firefox: a lot of people were already using it <em>before</em> it went stable officially!</p> +<p style="float:left;"><img src="http://base--/img/pictures/CakePHP_1.0.png" alt="" /></p> +<p>The CakePHP Team has been humble enough not to declare their product <em>stable</em> before the time. I personally considered CakePHP stable <em>enough</em> since RC2… and considering that this site and many others have been built on alpha, beta and RC version, I think people can get an idea of Cake’s reliability.<br /> +Nothing (too) new came out the oven this time: CakePHP 1.0 is mainly a bugfix release, with all the features we’ve learnt to love. It’s just <em>better_: a lot of things have been fixed, model associations work better, etc. etc. You can read the <a href="http://cakeforge.org/frs/shownotes.php?group_id=23&release">changelog/announcement</a></em>id=85 or have a look below for a quick summary of the new features and most interesting fixes:</p> +<pre><code> +Revision: [2420] +Added fix for Ticket #320. +Fixed Model::save() so it will only allow a model to save itself. +Fixed Model::save() when saving a HABTM association + +Revision: [2437] +Adding fix for Model::findNeighbours(). +Was returning all associations and fields. Now recursive +is set to 0 and only returns the prev and next keys array + +Revision: [2456] +"Enables use of Controller::$data in addition to Controller::$params['data']" + +Revision: [2490] +Fixing a bug that occurs when connecting to two different +databases on the same server, and enabling cross-database +model associations + +Revision: [2491] +Adding Microsoft SQL Server driver [EXPERIMENTAL] + +Revision: [2577] +Adding $alias property to enable future Oracle support + +Revision: [2625] +Bringing all DB drivers up to date + +Revision: [2653] +Adding check for custom error class in app/. +Added check for AppController::appError(); will be called if this method +is in AppController. +</code></pre> +<p style="float:right;"><img src="http://base--/img/pictures/cakesite.png" alt="" /></p> +<p>If you’re not too excited about this new release, maybe you should have a look at <a href="http://www.cakephp.org">www.cakephp.org</a>. Different? Damn right it is: it looks like someone listened to our prayers for a new website design. The merciful soul is <a href="http://www.nolimit-studio.com/">Armando Sosa</a>, the winner of CakePHP’s design contest. He’s a latin-american web designer who had the <span class="caps">GREAT</span> idea of thinking about an <em>innovative</em> design for the Cake site… Actually my dad didn’t think that way: <em>“That’s not new, that way of advertising was all over the place when I was a kid!”</em> And he’s right, Armando thought that a fifties-like template would have been perfect for Cake. Forget all the smooth, roundy-and-chubby, toons-like “official” Web 2.0 designs (beta), the new Cake site needs to stand out of the crowd…</p> +<p style="float:left;"><img src="http://base--/img/pictures/fonz.jpg" alt="" /></p> +<p><br /><br /> +<em>Heyyy! Well done guys…</em></p>
@@ -0,0 +1,22 @@
+----- +title: "Digg Effect - the day after" +content-type: article +timestamp: 1146794340 +tags: "web20|webdevelopment|internet" +----- +<p>…So it turns out that my <a href="http://www.h3rald.com/articles/view/rails-inspired-php-frameworks/">last article</a> appeared on <a href="http://www.digg.com">Digg</a> homepage. <br /> +This was quite a pleasant surprise: I didn’t expect that an article submitted to <em>my own site</em> could make it that far! I thought you’d need a relatively well-known website, mafia’s support, some divine intervention and a terrific amount of luck, but it seems that sometimes an interesting article about an interesting subject can be enough. I’ll probably write a more detailed report of what happened soon, in another article rather than a blog post, but for now I just wanted to post a short summary here.</p> +<p>Two days ago I decided to write a roundup of the six Rails-inspired <span class="caps">PHP</span> frameworks, CakePHP, Symfony, <span class="caps">PHP</span> on Trax, Code Igniter, Biscuit and Pipeline. The reason for this was that I couldn’t find anything comparing all of them and such comparison could have been useful for some new <em>bakers_. OK, I confess, when I started writing the article I thought I’d submit it to Digg and see what happens: I saw that another <a href="http://www.phpit.net/article/ten-different-php-frameworks/">roundup</a> made it to the first page and people were quoting it everywhere on the net. It’s a nice article, but – in my humble opinion – not too exhaustive. <br /> +Then I read a comment by someone to the <a href="http://digg.com/programming/CakePHP_1.0_has_been_released">digg</a></em> of the latest Cake release stating:</p> +<blockquote> +<p>Yes, they are similar – both were inspired by Rails, but Cake has gone further to differentiate themselves. Here’s a decent (but not great) overview of some frameworks: http://www.phpit.net/article/ten-different-php-frameworks/</p> +</blockquote> +<p>At that point, I thought that another round up, perhaps more Cake-centric, was in order. The other reason was that in one of my recent <a href="http://www.h3rald.com/blog/view/23/">blog posts</a> I tried to compare CakePHP and Symfony, but obviously my emotions got in the way and in the end I noticed I was kinda <em>attacking</em> Symfony. That was a blog post though, and that’s half-allowed, but I felt that I should have written a slightly more objective <em>article</em> mentioning also all the other competitors.</p> +<p>Anyhow, right when I went to submit my article to Digg, it turns out that another guy wrote <a href="http://digg.com/programming/5_Next_Generation_PHP_Frameworks">a similar round up</a>, which made it to Digg’s homepage. That was an annoying cohincidence, but in the end things didn’t go too bad: his roundup was more generic, while mine was more specific and detailed.</p> +<p style="float:left;"><img src="http://base--/img/pictures/dugg_detail.png" alt="" /></p> +<p>After submitting my article the reaction wasn’t instantaneous… 5, 7, 10, 13 diggs in the first two hours. Then shortly I made it to 30 and when the 40th visitor dugg it my article was moved to the first page!<br /> +I immediately noticed it when I refreshed my stats page: a minute before my girlfriend was here telling me “oh look, over 400 visitors… not too bad”. Then I refreshed the page and it said <em>539</em>, I refreshed again and said 600-something… eeep… Digg effect!</p> +<p>A special praise goes to my new hosting company, <a href="http://www.bluehost.com/track/h3rald/CODE5">BlueHost</a>: the server didn’t go down and it managed the extra traffic fine! A good test for CakePHP as well, since I built this site with it.</p> +<p>So here I am… over 5000 visitors read my article, about 600 people dugg it, nearly 40 people commented it on digg.com and 20 directly on my site. And – except for the usual <em>Rails-is-better-than-anything-else</em> comments – they were generally positive. Over 250 people bookmarked on del.icio.us and many blogs mentioned it in many different countries.</p> +<p>Money? Didn’t make much with adsense at all: programmers <em>don’t</em> click on ads!<br /> +Bandwidth? About 1GB was gone in the first five hours, now is obviously slowing down: oh well, I still have another 398GB available till the end of the month :P</p>
@@ -0,0 +1,107 @@
+----- +title: "bake.php - Easy baking for lazy folks" +content-type: article +timestamp: 1146922980 +tags: "cakephp|frameworks" +----- +<p>When I first tried Ruby on Rails I was literally amazed by the <em>generator</em> script. Yes, I was young and inexperienced then (six/seven months ago), but you must admit that getting a controller, a model, all the basic views generated automatically by</p> +<p><code>rails script/generator scaffold Posts</code></p> +<p>is not a bad thing. Especially if the same script allows you to create model, views and controller separately and other things. <a href="http://www.symfony-project.com/">Symfony</a> and <span class="caps">PHP</span> on Trax already tried to port this functionalities, with mixed results. What about Cake? Oh well, yes, we do have something like that… something rather different, but still something: the <code>bake.php</code> script.<br /> +This cute little thing is located in the <code>cake/scripts/</code> folder and can be used – hear, hear – from command line. You can run Ruby and Perl scripts, so yes, you can actually run <span class="caps">PHP</span> from command line, although it’s not its primary purpose.</p> +<p><img src="http://base--/img/pictures/bake.jpg" alt="" /></p> +<p>Cool then, let’s open a *nix shell, Windows command prompt, etc. etc., go into the <code>cake/scripts/</code> folder and run:</p> +<p><code>php bake.php</code></p> +<p>Assuming that the php executable is in your <em><span class="caps">PATH</span></em> environment variable – if not, either you add it or you’ll have to type something like:</p> +<p><code>D:SERVERphpphp.exe bake.php</code></p> +<p>depending on where your php executable is. You’ll be be greeted by a “<span class="caps">CAKEPHP</span> <span class="caps">BAKE</span>” text, and then you’ll be asked a few questions. One thing to realize before proceeding any further: bake.php is <em>not</em> a generator, not in the traditional “Rails” sense, anyway. It’s rather a handy but more verbose dialogue-based configuration script – which will also generate <em>something</em> eventually if you provide all the necessary details.<br /> +A different approach, which may be good or bad according to your taste: personally I think we should also have something faster to use, like a Rails generator, and I opened a <a href="https://trac.cakephp.org/ticket/768">ticket</a> about it, but let’s see what bake.php can do, for now.</p> +<p>The answer is… nearly anything. It annoying enough to please, but if you follow its directions it can do a prettu decent job in the end, it’s far from being sentient, but let’s say it’s smart enough for a script. First of all if you try it out on a fresh Cake install it will notice that you haven’t configured your database yet, so it will ask for a hostname, username, password, database name etc. etc. and generate your <code>app/config/database.php</code> for you, not a bad start.</p> +<p>Once that’s done – and it won’t go on unless you configure a (MySQL only?) database – you can proceed with the rest. You can start creating either a controller, model or view; I tried a <code>Posts</code> controller, for example. The script then asks quite a few questions:</p> +<ul> + <li>The controller’s name</li> + <li>Whether it will use other models besides posts</li> + <li>Whether you want to include any helper</li> + <li>Whether you want to include any component</li> + <li>Whether you want to generate the base <span class="caps">CRUD</span> methods</li> +</ul> +<p>Then finally it generates the damn thing. The result is good enough:</p> +<p><small><br /> +<pre><code> +<?php +class PostsController extends AppController +{ + //var $scaffold; + var $name = 'Posts';</p> +<p>function index()<br /> + {<br /> + $this→set(‘data’, $this→Post→findAll());<br /> + }</p> +<p>function add()<br /> + {<br /> + if(empty($this→params[‘data’]))<br /> + {<br /> + $this→render();<br /> + }<br /> + else<br /> + {<br /> + if($this→Post→save($this→params[‘data’]))<br /> + {<br /> + $this→flash(‘Post saved.’, ‘/posts/index’);<br /> + }<br /> + else<br /> + {<br /> + $this→render();<br /> + }<br /> + }<br /> + }</p> +<p>function edit($id)<br /> + {<br /> + if(empty($this→params[‘data’]))<br /> + {<br /> + $this→set(‘data’, $this→Post→find(‘Post.id = ’ . $id));<br /> + }<br /> + else<br /> + {<br /> + if($this→Post→save($this→params[’data’]))<br /> + {<br /> + $this→flash(‘Post saved.’, ‘/posts/index’);<br /> + }<br /> + else<br /> + {<br /> + $this→set(‘data’, $this→params[‘data’]);<br /> + $this→validateErrors($this→Post);<br /> + $this→render();<br /> + }<br /> + }<br /> + }</p> +<p>function view($id)<br /> + {<br /> + $this→set(‘data’, $this→Post→find(’Post.id = ’ . $id));<br /> + }</p> +<p>function delete($id)<br /> + {<br /> + $this→Post→del($id);<br /> + $this→redirect(‘/posts/index’);<br /> + }</p> +<p>function postList()<br /> + {<br /> + $vars = $this→Post→findAll();<br /> + foreach($vars as $var)<br /> + {<br /> + $list[$var[‘Post’][‘id’]] = $var[‘Post’][‘name’];<br /> + }</p> +<p>return $list;<br /> + }<br /> +}<br /> +?><br /> +</code></pre><br /> +</small></p> +<p>It’s more or less the same with models and views: it will still ask a lot of questions and in the end generate the thing. <br /> +This behaviour is more advanced than a standard generator, you can include helpers and components already, if you want, but do you <em>really</em> want that? For models it even asks if you want to include particular associations and validation rules! Personally, I’d rather a generator script which generates something <em>immediately</em> and accepts maybe some parameters to further customization, like:</p> +<p><code>php bake.php scaffold Posts</code><br /> +<code>php bake.php controller Posts</code><br /> +<code>php bake.php model Posts</code><br /> +<code>php bake.php model Posts</code><br /> +<code>php bake.php controller Posts helper +Html -Time,Javascript</code><br /> +<code>php bake.php model Posts assoc +hasMany comments,tags</code></p> +<p>Bah… just some random thoughts. How about custom-made generators (<a href="http://wiki.rubyonrails.org/rails/pages/AvailableGenerators">Rails-inspired</a>)?</p>
@@ -0,0 +1,49 @@
+----- +title: "rdBaker: Bake your CakePHP application online" +content-type: article +timestamp: 1147081800 +tags: "cakephp" +----- +<p>Right after my <a href="http://base--/blog/view/26">last blog post</a> I decided to log on #cakephp on irc.freenode.org as usual, and gwoo pops in and says “h3raLd, you didn’t review rdBaker yet!”<br /> +That’s right, I didn’t yet, so I may as well do it today.</p> +<p>I remember hearing about rdBaker months ago, waaay before CakePHP 1.0, way before the RCs, I remember someone mentioning it on CakePHP user group in right after the bake.php script was created. <em>“How about having an online baking utility?”</em> – and that’s precisely what rdBaker is, a more <span class="caps">PHP</span>-ish version of bake.php, which runs like any other <span class="caps">PHP</span> scripts: in your browser.</p> +<p>This cute little thing is obviously available for free on <a href="http://cakeforge.org/frs/?group_id=13&release_id=74">CakeForge</a> and is part of <a href="http://www.rd11.com">gwoo</a> ’s <a href="http://cakeforge.org/projects/rdos/">rdOpenSource</a> project which includes various other Cake-powered applications.<br /> +I personally recommend new (and old) bakers to download them and play with them, try to understand how they were coded, because they can really teach you <em>a lot</em> on how to code a CakePHP application or website properly.</p> +<p>So anyway, get your copy of rdBaker, unzip it and have a look at the <code>README.txt</code> file for the installation instructions:</p> +<quote> +<p>1. Place rdBaker in the root along side /cake_install/app.<br /> +2. chmod /cake_install/rdBaker/tmp to 0777<br /> +3. launch http://localhost/cake_install/rdBaker/</p> +</quote> +<p>Not too hard, innit?</p> +<p><img src="http://base--/img/pictures/rdbaker.jpg" alt="" /></p> +<p>Good. So you try accessing something like <code>http://localhost/php/test/cakephp/cake_test/rdBaker/</code> (that’s on my own local <span class="caps">WAMP</span> server) and you’ll get a nice page asking you to “supply your ingredients” via a simple form. <br /> +Unlike its command line cousin, rdBaker doesn’t require you to fill in <em>all</em> the fields, but just the full path to the save directory (which is normally already filled in) and of course the name of the model (Post, User, Comment).<br /> +Then you can select the type of output and choose whether you want to generate an empty controller, a scaffolded one or the <em>full</em> option including all the most common <acronym title="Create, Retrieve, Update, Delete"><span class="caps">CRUD</span></acronym> methods.<br /> +Finally – if you like – you can enter any association or valitation rules for your model, then press the <em>Bake it!</em> button and voilá, in you’ll find three directories (controllers, models and views) in your save directory containing all the <acronym title="Model View Controller"><span class="caps">MVC</span></acronym> entities you need regarding a particular model:</p> +<pre><code> + rdBaker Result Array +( + [0] => notes_controller.php created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpcontrollers + [1] => note.php created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpmodels + [2] => index.thtml created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpviews/notes + [3] => add.thtml created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpviews/notes + [4] => edit.thtml created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpviews/notes + [5] => view.thtml created and written. Look in D:SERVERwwwphptestcakephpcake_testtmpviews/notes +) +</code></pre> +<p>But there’s more! By checking the appropriate checkbox, you can get all the stuff packed in a zip file!</p> +<p>Not bad at all, and fast as well.</p> +<p>Now the bad things…<br /> +The script works fine, but there’s something which could be improved, perhaps:</p> +<ul> + <li>If you choose to put everything in a zip file, the file will be named “baked_by_rdBaker.zip” – not a big deal, but maybe it could be personalized according to the model name entered.</li> + <li>Regardless you want to add validation rules to your model or not, you’ll <em>always</em> find some validation rules for a <em>title</em> and <em>body</em> field. I checked and they are hardcoded in the template file (rdBaker/views/helpers/templates/full/model.txt):<br /> +<pre><code> + var $validate = array( + 'title'=>VALID_NOT_EMPTY, + 'body'=>VALID_NOT_EMPTY); +</code></pre></li> + <li>In the baked index.thtml view, there will always be a column named “Title”. This, again, is hardcoded in the template.</li> +</ul> +<p>Other than these things, everything seems to work fine. A really nice script!</p>
@@ -0,0 +1,11 @@
+----- +title: "Writing more articles..." +content-type: article +timestamp: 1147580760 +tags: "website|writing" +----- +<p>Yes, I know, I’ve been slaking a little bit, and haven’t posted on my blog in a while. Well, I actually <em>didn’t</em> slack at all in these days getting ready to start my job, looking for a damn fitted kitchen for my house and… writing more articles.</p> +<p>Nothing special, and nothing too technical, to be honest, but equally interesting. First of all I updated my <a href="http://base--/articles/view/ie-lovers-guide-to-firefox/">An IE Lover’s Guide to Firefox</a> a little bit and people at SpreadFirefox.com and <a href="http://www.firefoxfacts.com/">FirefoxFacts</a> liked it. Glad to hear that, unfortunately some guy who wrote about <a href="http://mywebpages.comcast.net/SupportCD/FirefoxMyths.html">Firefox Myths</a> wasn’t too impressed, but at any rate he read it anyway.</p> +<p>OK, this wasn’t a new article at all, but <a href="http://base--/articles/view/the-internet-philosopher/">this one</a> is fresh, at least. It’s about a Swedish guy who decided to emigrate to India pursuing an ideal: writing for his own opinions and ideas. And he gets paid for that too! After reading more about him on his <a href="http://base--/bookmarks/view/ropix">website</a> I decided to write something about him. An interesting and rather unusual read. Pity that some sections of his homepage are in Swedish only.</p> +<p>Finally, yesterday I felt inspired and decided to write <a href="http://base--/articles/view/social-bookmarking-services">another roundup</a> featuring ten popular social bookmarking websites. Trying all those services was fun, with a few exceptions of course. The bad news is that there are already various reviews about social bookmarking sites and thus the Digg folk doesn’t seem to be particularly interested in <a href="http://digg.com/software/Ten_popular_social_bookmarking_services_reviewed">reading another one</a>, but hey! After all I can’t expect of getting dugg for every roundup I write, can’t I?</p> +<p>That’s about it. And what about the CakePHP article I promised <a href="http://base--/blog/view/13/">long ago</a> to CakePHP beginners? It’s done, written and ready to be published! Unfortunately the magazine I submitted it to is taking quite a bit to review it and – most important – to tell me whether they’ll publish it or not. Let’s hope for the best.</p>
@@ -0,0 +1,83 @@
+----- +title: "Watch out: CakePHP screencasts" +content-type: article +timestamp: 1148132820 +tags: "cakephp|tutorial" +----- +<p>Tutorials are great, articles are helpful, manuals are essential and the <span class="caps">API</span> is your best friend, but there’s still something missing there… Unfortunately podcasts are not yet available, but the CakePHP team is proud to announce the creation of two <a href="http://cakephp.org/pages/screencasts">screencasts</a> in an effort to help new bakers familiarizing with CakePHP’s concepts. <br /> +This is old news now, the screencasts section came together with the <a href="http://base--/blog/view/24">site overhaul</a> but I only got a chance to take a look at them (one of them only, to be totally honest) recently, and so here’s a spoil… erhm, a <em>detailed</em> description of John Anderson’s screencast about the <a href="http://manual.cakephp.org/chapter/18">Blog Tutorial</a>.</p> +<p style="float:left;"><img src="http://base--/img/pictures/CakePHP_1.0.png" alt="" /></p> +<p>There’s something I’ll never do: a screencast. Recording every mouse movement, every word or piece of code typed in half an hour? No way! And what happens if I mistype something? People will keep pointing out the fact that I was starting to type <code></h2></code> to close a <code></h1></code> tag, or that I waited an eternity like five full seconds before deciding what to do. I guess I’m quite paranoid… John did it, and he did it well. Using just bash, vim and Safari he was able to record an excellent 30-minutes screencast featuring the blog tutorial. <br /> +Before people start complaining that the blog tutorial should be completed in fifteen minutes, keep in mind that John’s screencast is meant to show everything clearly to new users, via a trial and error approach if necessary.</p> +<p>Here’s what happens in the screencast, nothing new if your read the blog tutorial, but still interesting, especially if you’re new to Cake. Unfortunately there’s no audio, but the video talks by itself and John will occasionally write some comments here and there.</p> +<p><em><strong>0:01 – 5:00</strong></em></p> +<ul> + <li><span class="caps">SVN</span> checkout to get the latest CakePHP version</li> + <li>make app/tmp writeable</li> + <li>execute queries (table posts)</li> + <li>insert some test posts</li> + <li>create database config file: modify 3 lines of database.php</li> + <li>CakePHP is now able to connect to database</li> + <li>create app/models/post.php model</li> + <li>create posts_controller.php [John uses Vim as preferred <span class="caps">PHP</span> editor]</li> + <li>try to access /posts/, error: missing method index()</li> + <li>create function index() in postscontroller.php able to fetch posts</li> + <li>refresh, missing index view</li> + <li>create index.thtml displaying the raw posts array</li> +</ul> +<p><em><strong>5:01 – 10:00</strong></em></p> +<ul> + <li>index.thtml: display posts with table and foreach iteration</li> + <li>add hyperlink in index.thtml to view posts</li> + <li>access /posts/view/1 → missing method view()</li> + <li>add view() method in postscontroller.php</li> + <li>create view.thtml to display</li> + <li>Raw view post with pre tags and print_r()</li> +</ul> +<p><em><strong>10:01 – 15:00</strong></em></p> +<ul> + <li>display post properly with <code><p></code> tags</li> + <li>add link in index.thtml to add a post</li> + <li>missing method → add()</li> + <li>add add() in controller</li> + <li>missing view [trial and error, trial and error…]</li> + <li>create add.thtml, using the Html Helper to create input tags easily</li> +</ul> +<p><em><strong>15:01 – 20:00</strong></em></p> +<ul> + <li>add.thtml (continued)</li> + <li>testing add form</li> + <li>view added post</li> + <li>start adding another (for validation purposes) [stop before submitting]</li> + <li>modify post.php model, valid_not_empty for title and body</li> + <li>modify view to trigger validation <code>$html->tagErrorMsg()</code></li> + <li>test: no body, message displayed</li> + <li>test: no title, message displayed</li> + <li>add another post, everything works</li> + <li>[pause: five seconds]</li> + <li>back to the controller, create delete() function</li> +</ul> +<p><em><strong>20:01 – 25:00</strong></em></p> +<ul> + <li>delete function (continued)</li> + <li>add “Actions” table column in index.thtml, with link delete post</li> + <li>delete two posts</li> + <li>take a breath</li> + <li>add link in index.thtml to edit post</li> + <li>refresh page, mouse over edit links…</li> + <li>back to controller, add edit function [we learnt abour CakePHP errors alright]</li> +</ul> +<p><em><strong>25:01 – 27:38</strong></em></p> +<ul> + <li>pause, 5 sec [should I write edit.thtml from scratch]</li> + <li>copy add.thtml as edit.thtml</li> + <li>change just the title and form action</li> + <li>[pause: 3 sec]</li> + <li>test edit link</li> + <li>edit a post</li> + <li>move around, switch views</li> + <li>edit config/routes.php</li> + <li>set default route to posts/index</li> + <li>refresh – all done!</li> +</ul> +<p>That’s it. All in a 40MB .mov file. Download it from <a href="http://www.archive.org/download/CakePHP_BlogTutorialJohn/BlogTutorial.mov">here</a>.</p>
@@ -0,0 +1,24 @@
+----- +title: "Writing Tools" +content-type: article +timestamp: 1148561820 +tags: "writing|tools" +----- +<p>Since in these days (and even more in near future) I’m really writing a lot I thought it would be good to share my thoughts on some writing programs and tools I started using for writing these blog posts, articles, and more.</p> +<p>I’m going to examine a few applications which I find useful for different tasks, since I recently came to the conclusion that I cannot use the same editor for everything I write: some magazines require a .doc document, others want just plain text, my site uses the truly excellent <a href="http://http://www.textism.com/">textile</a> markup, zZine Magazine used BBcode, other site use their own “proprietary” styles and so on. One could just give up and use Notepad – or better, <a href="http://notepad-plus.sourceforge.net/uk/site.htm">Notepad++</a> – for everything, while someone else like me might opt for various applications according to the task.</p> +<p>One of the few essential requirements for a <em>writer</em> is some spell checking functionality. Sad but true, this is enough to leave the most popular multi-purpose programming editor out: programmers don’t need a spell checker, a highlighter for their favourite language is more than enough. <br /> +I will not mention all the applications I tried to find the Perfect Editor, and I’ll just focus on the programs I ended up using in the end. Some may be well known, others may not, anyway, here we go.</p> +<p style="float:left;"><img src="http://base--/img/pictures/wp/bill.jpg" alt="" /></p> +<p><a href="http://www.microsoft.com/office/preview/default.mspx">Word 2007 Beta 2</a> – Yes, I know that OpenOffice is free and OO Writer works great, but perhaps at work you’ll be asked to use MS Word. Some editors may require that as well, and their templates may not be correctly rendered by OpenOffice, so in the end you’ll still have to use Redmond’s most popular Word Processor – <em>if you have it</em>. If you got it with your laptop (I didn’t) or your auntie gave you 300$ to buy it you’re all set, but if you don’t? <br /> +Oh well, yes, OpenOffice is the right choice perhaps, but at least until February 2007 uncle Bill lets you try the bleeding (quite literally) edge of all the commercial word processors: Word 2007 beta 2. You can download the whole Office Suite (and more) for free, <a href="http://www.microsoft.com/office/preview/beta/overview.mspx">run</a>. I did it yesterday and well, it’s nice to try this brand-new piece of eye candy. the interface is completely new, you won’t find the usual drop down menu but with some imagination you’ll manage to save/create/open a new document by clicking on the big roundy Office logo on the top left corner. More user friendly? Perhaps, once you get used to it. It <span class="caps">STILL</span> doesn’t have a tabbed interface, so you <span class="caps">STILL</span> have to clutter your taskbar if you want to keep more than one document open. <br /> +At any rate, it does the job, exactly in the same way as it did in the previous versions. <br /> +I use it if people ask me to, and for writing stuff which doesn’t need to be formatted with a particular markup or style but rather look nice and have pictures embedded.</p> +<p style="float:right;"><img src="http://base--/img/pictures/wp/writely.gif" alt="" /></p> +<p><a href="http://base--/bookmarks/view/writely/">Writely</a> – Now this is much more fun. A <em>online</em>, <span class="caps">AJAX</span>-powered word processor recently acquired by Google. IT’s currently in closed beta, but I was lucky enough to get an account before they closed registrations and I can invite people to use it.<br /> +It’s nice. It’s nice if you have to work with MS Word documents or create <span class="caps">PDF</span> files, and it supports the most essential features offered by desktop word processors, plus some more, really convenient functionalities. <br /> +It can import MS Word documents pretty well and also any kind of text file, so that you can edit it online anytime and anywhere. You can star, tag, archive, edit and delete your documents in a really easy way and – which is one of its killer features – you can grant access to certain documents to collaborators for editing or viewing. Other word processors out there offer similar features, but Writely is by far the nicest to use and perhaps even the more advanced. I recently wrote a couple of articles about CakePHP (coming soon-ish to some online magazines near you) and then gave access to gwoo and PhpNut for editing, so that they could check the code snippets, in particular: it was a success. Magazine editors were happy and impressed as well.<br /> +Another really wonderful feature is <em>version support</em>. I discovered this recently: when you edit a document and save it, Writely automatically creates a new version of it, storing the old ones as well, so that you can even compare them to highlight differences if you wish: a great feature to keep track of the editing process and know exactly who edited which. When I noticed it that was it, Writely has become my online <em>repository</em> for my articles and writings.</p> +<p style="float:left;"><img src="http://base--/img/pictures/wp/cream.png" alt="" /></p> +<p><a href="http://base--/bookmarks/view/cream-editor">Cream</a> – I discovered this a while ago, and it’s perhaps the most multi-purpose editor out there. It’s built on top of Vim (respect+) but it has a friendlier interface by default, and that’s exactly what I’m using right now for typing this post. The reasons are simple: it supports <span class="caps">ANY</span> kind of file format and any character encoding. There’s an highlighter for everything, including BBcode and textile, and of course you can make your own. It also includes spell checking on-the-fly which is missing in many simple editors. <br /> +Whenever I have to write something which requires some particular formatting or markup I use Cream, it does the job pretty well, and whenever I feel brave I can always switch to “expert” view and challenge my vi skills ;)</p> +<p>That’s pretty much what I use for writing articles, posts, and other documents… I tried other alternatives like RoughDraft or similar programs but I’m now really happy with these three applications. Commercial “writer’s programs”? There are some out there, but who wants to spend 40$ or more for something which offer less than MS Word when you can use OpenOffice and Writely for free?</p>
@@ -0,0 +1,104 @@
+----- +title: "Information Mapping" +content-type: article +timestamp: 1149221400 +tags: "productivity|writing" +----- +<p>As I thought, my job also represents a great opportunity to learn new things. I don’t mean only new technical stuff, but also a great deal of tips, best practices and methods to efficiently write documentation material in proper English. Some theory about <a href="http://www.infomap.com/">Information Mapping</a> was by far the most interesting topic I learnt about this week.</p> +<h3>What is Information Mapping?</h3> +<p><strong>Definition<sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup></strong> <br /> +<blockquote>The Information Mapping method is a research-based approach to the analysis, organization, and visual presentation of information.</blockquote></p> +<p><strong>Information Mapping is media independent</strong><br /> +<blockquote>The method is both subject matter and media independent; that is, it can be applied to the subject matter of any industry, and it can be presented on paper, on a computer screen, verbally, or in a multimedia presentation. </blockquote></p> +<p><strong>Key Concepts</strong><br /> +<blockquote>Information Mapping is an integrated set of easy-to-learn principles, techniques, and standards. It enables authors to break complex information into its most basic elements and then present those elements optimally for readers. The result is a set of precisely defined information modules that are consistent from author to author and document to document.</blockquote></p> +<p><strong>Purpose</strong><br /> +<blockquote><br /> +The method helps writers analyze, organize, and present information with clarity focus and impact. Information That Works. The goal of the analysis component is to determine the</p> +<ul> + <li>purpose</li> + <li>audience needs, and</li> + <li>information types.</li> +</ul> +<p>The goal of the organization is to create an overall structure for the information, based on the results of your analysis. Finally, the goal of the presentation component is to format the information to make it clear and accessible to your audience.</p> +</blockquote> +<p class="footnote" id="fn1"><a href="#fnr1"><sup>1</sup></a> Contents were taken from <a href="http://www.infomap.com/index.cfm/TheMethod/">InfoMap.com</a> and were re-formatted and re-organized into an information map.</p> +<h3>Key Concepts</h3> +<p><strong>Introduction</strong><br /> +<blockquote>The Information Mapping method relies on some important principles according to which information should be organized. This method also defines new units of information to replace paragraphs, sections and chapters and tries to divide information into a few main set types, each with its own rules and structures.</blockquote></p> +<p><strong>Principles</strong><br /> +<blockquote></p> +<table> + <tr> + <td> <strong>Name</strong> </td> + <td> <strong>Explanation</strong> </td> + </tr> + <tr> + <td> Chuncking </td> + <td> Writers should group information into small, manageable units. </td> + </tr> + <tr> + <td> Relevance </td> + <td> Writers should make sure that al information in a chunck relates to one main point (function or purpose). </td> + </tr> + <tr> + <td> Labeling </td> + <td> Writers should provide a label for every unit of information. </td> + </tr> + <tr> + <td> Consistency </td> + <td> Writers should use similar labels, word, formats for similar subject matters. </td> + </tr> + <tr> + <td> Integrated Graphics </td> + <td> The use of tables, images, diagrams and lists is encouraged. </td> + </tr> + <tr> + <td> Accessible Detail </td> + <td> Documents should provide sufficient details where necessary, to make the information more accessible for the readers. </td> + </tr> + <tr> + <td> Hierarchy </td> + <td> Small, relevant units of information should be organized into a hierarchy. </td> + </tr> +</table> +</blockquote> +<p><strong>Information Types</strong><br /> +<blockquote></p> +<table> + <tr> + <td> <strong>Name</strong> </td> + <td> <strong>Definition</strong> </td> + </tr> + <tr> + <td> Procedure </td> + <td> Set of steps to obtain a specified outcome </td> + </tr> + <tr> + <td> Process </td> + <td> A series of changes through the time for some purpose </td> + </tr> + <tr> + <td> Structure </td> + <td> Something which can be defined into multiple parts </td> + </tr> + <tr> + <td> Concept </td> + <td> Group of physical objects, conditions, relations, … </td> + </tr> + <tr> + <td> Principle </td> + <td> Statement of what should be done, assumptions </td> + </tr> + <tr> + <td> Fact </td> + <td> Statement presented with no supporting evidence </td> + </tr> + <tr> + <td> Classification </td> + <td> The sorting of a group of specimen into classes </td> + </tr> +</table> +</blockquote> +<p><strong>Conclusion</strong><br /> +<blockquote>Although it may initially seem too schematic, Information Mapping is a valid method to organize and present information to those readers who just need “facts” without any unnecessary distraction. This method it is used with some modifications in many technical manuals and documentation written by many companies.</blockquote></p>
@@ -0,0 +1,64 @@
+----- +title: "Akelos Framework: too good to be true?" +content-type: article +timestamp: 1149931560 +tags: "frameworks|php|webdevelopment|review" +----- +<p>Someone recently added a comment to my article about <a href="http://base--/articles/rails-inspired-php-frameworks/">Rails-inspired <span class="caps">PHP</span> frameworks</a> pointing out that I forgot another Rails-like framework, in my round-up. He obviously posted a link to this rather mysterious Rails port in <span class="caps">PHP</span> and spam or not, I’d like to thank this guy for letting me know of the existance of <a href="http://base--/bookmarks/view/akelos-framework">Akelos</a>, a new <span class="caps">PHP</span> framework which seems simply too good to be true.</p> +<p style="float:left;"><img src="http://base--/img/pictures/frameworks/akelos_framework.png" alt="" /></p> +<p>Let me just spend a few words more before writing more about it though. First off, it’s not available yet. OR at least it doesn’t seem to be: the author is planning to release his work to the Open Source community but… well, he’s a bit concerned about the current “<span class="caps">PHP</span> Framework War”: he wouldn’t like to end up like <a href="http://subway.python-hosting.com/">Subway</a> or just be slagged off by those merciless reviewers who enjoy write round-ups and comparisons about frameworks. <a href="http://www.bermi.org/page/about_me">Bermi Ferrer</a> is “just” a talented <span class="caps">PHP</span> developer who decided to create his own framework and he really enjoyed doing so, nothing more, nothing less.</p> +<p><em>“I considered other <span class="caps">PHP</span> ports of Ruby on Rails, but we could not find all we needed on them. One feature that I needed on the core was internationalization and Unicode support, so I decided to roll my own framework trying to keep most of the original rails interface so most of its documentation could work for it.”</em></p> +<p>Where did I hear that? Nothing new: it’s always the same story of frameworks not being as we want them to be etc., it’s human. And yes, it’s <em><strong>another</strong></em> attempt to port Ruby on Rails to <span class="caps">PHP</span>, and a damn good one — or so it seems.</p> +<p><small>Before proceeding any further, I’d like to write a short warning for a few people who may or may not want to pop in and start commenting about the Rails-is-better-than-any-<span class="caps">PHP</span>-clone issue: <strong>If I see a single comment slagging off this framework (or any other) only because it’s a port of Rails to <span class="caps">PHP</span>, it will be deleted, may it be David Heinemeier Hansson himself</strong>. Stop it, no seriously, I think it will be counter productive for Rails in the end: I really like RoR and I love the way it works, and yes, I think Ruby is definitely the best language to do that sort of things, <span class="caps">EVERYBODY</span> <span class="caps">KNOWS</span> <span class="caps">THAT</span>. Please, please, save us poor <span class="caps">PHP</span> developers the usual preaching.</small></p> +<p style="float:right;"><img src="http://base--/img/pictures/frameworks/bermi_ferrer.png" alt="" /></p> +<p>Right, back to Akelos now. Curious as I am I immediately checked out the official page and all i found was a pretty long list of features which made me dribble, literally… ooops!</p> +<p>Let’s just quote the most juicy ones, shall we?</p> +<p>Active Record [“Model”]</p> +<ul> + <li>Associations</li> + <li>Callbacks</li> + <li><strong>Transactions</strong></li> + <li><strong>Finders</strong> [ <code>$Project->findFirstBy('language AND start_year:greater', 'PHP', '2004');</code> ]</li> + <li>Versioning</li> + <li>…</li> +</ul> +<p>Action Controller [“Controller”]</p> +<ul> + <li>Filters</li> + <li>Pagination</li> + <li>Mime Type</li> + <li>Mime Response</li> + <li><strong>Code Generation</strong></li> + <li>Response handler</li> + <li>…</li> +</ul> +<p>Action View [“View”]</p> +<ul> + <li><strong>Templates (using Sintags)</strong></li> + <li>Web 2.0 javascript using prototype and script.aculo.us</li> + <li>Helpers</li> + <li>Partials</li> + <li><strong>Template Compilers</strong></li> + <li>…</li> +</ul> +<p>And then more Akelos-only goodies:</p> +<ul> + <li><strong>Multilingual Models and Views</strong></li> + <li><strong>Locale alias integrated on <span class="caps">URLS</span> (example.com/spanish will load the es_ES locale)</strong></li> + <li>Database migrations using DB Designer files</li> + <li><strong>Pure <span class="caps">PHP</span> support for Unicode (no extensions required)</strong></li> + <li><strong>Unit Tested source code</strong></li> + <li>Code Generators</li> + <li>Built in <span class="caps">XHTML</span> validator</li> + <li>Automated locale management</li> + <li><strong>Clean separation from <span class="caps">HTML</span> and Javascript using <span class="caps">CSS</span> event selectors.</strong></li> + <li>Ajax file uploads</li> + <li><strong><span class="caps">AFLAX</span> integration</strong></li> + <li>Dojo Rich Text Editor</li> + <li>Format converters</li> + <li>File handling using <span class="caps">SFTP</span> for shared host running Apache as user nobody (as most CPanel server do)</li> + <li><strong>Distributed sessions using databases</strong></li> +</ul> +<p>Impressed? I was, honest. And I’m talking as a CakePHP fanatic here, and I must say that if this framework can really offer all this <em>and</em> — and this is what really matters — is also as simple as Cake to learn and well performing… well, this is definitely going to be quite a promising player in the “<span class="caps">PHP</span> Framework War” (but is not a real war, is it?), although the author is quite worried about that:</p> +<p><em>“I’m also concerned about the <span class="caps">PHP</span> Framework war, I don’t want to play that game. Building this Framework was a great experience, it works great for me and it has helped me to become a better programmer so I don’t want to spend my time discussing about if this is better or not than other solutions. That’s the reason I’ll first look for great developers interested in the Framework to help me releasing it.”</em></p> +<p>Really, this will be an interesting project to check out, once it goes open source, and yes, I really wish Bermi all the best. Good luck, <a href="http://www.bermi.org/projects/akelos_framework">Akelos Framework</a>.</p>
@@ -0,0 +1,20 @@
+----- +title: "ITALIA: CAMPIONE DEL MONDO!" +content-type: article +timestamp: 1152688740 +tags: "italy" +----- +<p><em><strong>Italy has won the World Cup!</strong></em></p> +<p>It doesn’t matter if Zidane first scored on a totally unfair penalty kick at the 7th minute and then, totally out of his mind, headbutted Materazzi… WE <span class="caps">WON</span>, <span class="caps">AND</span> WE <span class="caps">KICKED</span> <span class="caps">THEIR</span> <span class="caps">ASS</span>, end of story :)</p> +<div align="center"> +<p><img src="http://base--/img/italy/worldcup.jpg" alt="" /> </div></p> +<blockquote> +<p style="float:left;"><img src="http://base--/img/italy/grosso.jpg" alt="" /></p> +<p>“Italy beat France 5-3 in a penalty shoot-out to win the World Cup after an absorbing 1-1 draw in Berlin.</p> +<p style="float:right;"><img src="http://base--/img/italy/italy1.jpg" alt="" /></p> +<p>Fabio Grosso scored the winning goal after France’s David Trezeguet missed.</p> +<p>Playing his last game before retiring, Zinedine Zidane’s career ended in disgrace after he was sent off for crazily headbutting Marco Materazzi.</p> +<p>Zidane had put France ahead early on with a coolly-taken chipped penalty, before Materazzi levelled with a header from an Andrea Pirlo corner.<br /> +The result caps an incredible period for Italian football, with the domestic game embroiled in a corruption scandal similar to 1982 when they last won the World Cup. "</p> +</blockquote> +<p><a href="http://news.bbc.co.uk/sport2/hi/football/world_cup_2006/4991652.stm">Read More</a></p>
@@ -0,0 +1,26 @@
+----- +title: "Some updates" +content-type: article +timestamp: 1153789620 +tags: "website|cakephp" +----- +<p>Quite a bit of time passed since the last blog post, and I’m actually sorry about that, but as I thought, I don’t have as much free time as I used to be. Work is work, after all!<br /> +This post will be multipurpose as actually I bluid up a few things to write about in the last few days… erhm, ok, <em>weeks</em>.</p> +<h3>New Website Design</h3> +<p>Something different eh? Yep, definitely! Some time ago I started a small project called <a href="http://base--/projects/view/h3rald-redesign">h3raLd.com Re-design</a> hoping that some <span class="caps">GFX</span> guru could provide a new template for this website, and actually in the end I decided to accept the work of <em><strong>Bartus F. Teipel</strong></em> a Brazilian CakePHP enthusiast.<br /> +Bartus is obviously (<span class="caps">MUCH</span>) more talented than me when it comes to design, and I was amazed at the quality of the template he provided, in a really short time. <br /> +Unfortunately he didn’t yet provide a link to his main website/portfolio, but for now all I can show you is his website for party pics, <a href="http://www.circuscircus.com.br/">CircusCircus</a>.</p> +<p>The new template sports a more contemporary Web2.0-ish look which I like a lot, and Bartus used libraries like <a href="http://prototype.conio.net/">prototype</a>, <a href="http://moofx.mad4milk.net/">moo.fx</a> and <a href="http://www.html.it/articoli/niftycube/index.html">Nifty Corners Cube</a> for the <span class="caps">AJAX</span> effects and functionalities. <br /> +A really outstanding work, thanks Bartus!</p> +<h3>The CakePHP Herald project has been completed</h3> +<p>With my <a href="http://www.h3rald.com/articles/view/cakephp-first-bite/">latest article</a> about CakePHP published on SitePoint, the <a href="http://base--/projects/view/cakephp-herald/">CakePHP Herald</a> project was completed.<br /> +I must say that I really enjoyed writing all those articles about CakePHP, and the only thing I regret is not to have written anything (yet) about some more advanced topic about CakePHP. This was mostly due to – again – lack of time to focus on advanced topic and produce some quality examples.</p> +<p>However, judging by the positive feedback I received about the articles, I am really happy of the final result: even more people discovered the power of CakePHP and became <em>bakers</em>. Happy baking to all of you!</p> +<p><em>So… no more articles about Cake?</em> Maybe not for a while, I think I’ll be rather busy in the following months. Curious? Read on :-)</p> +<h3>My biggest and most important project</h3> +<p>I actually got really pissed off with Larry, Garret & the other Master Bakers because of what they wrote on the <a href="http://cakeforge.org/forum/forum.php?forum_id=244">announcement</a> for the latest CakePHP release:</p> +<blockquote> +<p>“[…]In other news, some new articles were published on Sitepoint <sup class="footnote" id="fnr3"><a href="#fn3">3</a></sup> and in the International <span class="caps">PHP</span> magazine <sup class="footnote" id="fnr4"><a href="#fn4">4</a></sup>. Fabio Cevasco <sup class="footnote" id="fnr5"><a href="#fn5">5</a></sup> is the man behind these articles. Together with Fabio, we will be writing a book that will be published […]”</p> +</blockquote> +<p>After all this time I spent <em>trying desperately not to say a word about it</em> they came out and heralded it out of nowhere. Sigh… they ruined the surprise effect! Oh well, it’s too late now, isn’t it?</p> +<p>So yes, when I say that I’m spending at least 60% of my time (at work and at home) writing I really mean it. The rest? Well, I do have a lovely girlfriend after all!!!</p>
@@ -0,0 +1,84 @@
+----- +title: "Akelos is real, after all..." +content-type: article +timestamp: 1154475180 +tags: "frameworks|php|webdevelopment|review" +----- +<p>Bermi Ferrer kept his promise, and even if a few were skeptic on the <a href="http://base--/blog/view/34/">pre-announced</a> features of his upcoming Akelos framework, last week he sent me a “development preview” and a few days ago he opened the development <span class="caps">SVN</span> repository to the public:</p> +<p><a href="svn://akelos.org/trunk" target="_blank">svn://akelos.org/trunk</a></p> +<p>Go, get it: it’s worthwhile (see below).</p> +<p>“[…] The Akelos Framework is an open-source port of Ruby on Rails to the <span class="caps">PHP</span> programming language.<br /> +The main goal of the Akelos Framework is to help programmers to build multilingual database-backed web applications according to the Model-View-Control pattern. It lets you write less code by favoring conventions over configuration.”</p> +<p>At the Akelos Framework Features page you can find detailed information about what has been already implemented into the framework.</p> +</blockquote> +<p>I think it says it all, well almost. Some people will undoubtedly be disgusted by yet-another-hopeless-Rails-clone: <em>not again!</em> I hear them crying…</p> +<p>Well, yeah, I think this – to be honest – should be the last attempt someone makes to port Rails to <span class="caps">PHP</span> or at least port <em>some features and the overall philosophy</em>, like <a href="http://base--/bookmarks/view/cakephp">CakePHP</a> did: there are honestly too many for one single language. Look at Python, <a href="http://www.djangoproject.com/">Django</a> seems to be the only “Rails-inspired” framework available and everyone is happy with it, while as a general rule <span class="caps">PHP</span> folks are never happy with what they already got.</p> +<p>Bermi is undoubtedly one of them, and that’s the reason he decided to code his very own Rails-inspired framework for <span class="caps">PHP</span>, which is, to date, the most remarkable of the ones I left out (it wasn’t available at the time) in my <a href="http://base--/articles/rails-inspired-php-frameworks/">article</a>.</p> +<h3>Confirmed Features & Contents</h3> +<p>So well, although I didn’t really have a proper chance to play with Akelos I can certainly herald some of its – verified, this time – features.</p> +<p>For one, it’s huge. Take Cake, add <em>every excellent, useful third party library or class you can possibly thing of</em> and you’ll get Akelos. No kidding. The unzipped source of the whole framework is a massive 16MB, 8.5 of which constitute the <code>vendors</code> folder. What’s in it? Well, all this:</p> +<ul> + <li>ADOdb</li> + <li>Domit</li> + <li><span class="caps">FPDF</span></li> + <li>Excel (reader library)</li> + <li>Hyper Estraier full-text search system</li> + <li>Inutio <span class="caps">XML</span>-<span class="caps">RPC</span> Library</li> + <li><em>Many</em> <span class="caps">PEAR</span> packages</li> + <li>PHPCodeAnalyzer</li> + <li>PHPmailer</li> + <li>SimpleTest</li> + <li>A Simple <span class="caps">PHP</span> <span class="caps">YAML</span> Class</li> + <li>Textile</li> +</ul> +<p>Then, similarly, all the state-of-the-art Javascript/<span class="caps">AJAX</span> hyper-hyped libraries are included:</p> +<ul> + <li><span class="caps">AFLAX</span></li> + <li>Behaviour</li> + <li>Builder</li> + <li>various Scriptaculous packages</li> + <li>Prototype</li> + <li>FileUploader (by the author, using prototype)</li> + <li>Window</li> + <li>EventSelectors</li> +</ul> +<p style="float:left;"><img src="http://base--/img/pictures/frameworks/akelos_framework_logo.gif" alt="" /></p> +<p>Good, well, kind of: that’s just what <em>others</em> did, but it’s worth noting that it’s all there and – apparently – integrated with the framework, hopefully not too tightly. But people are fussy, and do not get excited easily anymore, long gone are the early days of Rails, when the whole Internet shake at hearing about <em>code generators</em>… Aye, there are in Akelos as well, of course!</p> +<p>Coming to the more juicy stuff, <em>lo’ and behold, ye contents of /lib folder (with comments):</em></p> +<ul> + <li>AkActionController (controller)</li> + <li>AkActionView (view)</li> + <li>AkActionWebservice (Web services)</li> + <li>AkActiveRecord (model)</li> + <li>AkAdodbCache (content caching)</li> + <li>AkCharset (utf8 support, includes <em>all</em> mappings)</li> + <li>AkConfig (load config settings)</li> + <li>AkConverters (conversions!) + <ul> + <li>DBDesigner > AkelosDatabaseDesign</li> + <li>Excel > Array (bi-dimensional)</li> + <li>Excel > <span class="caps">CSV</span></li> + <li><span class="caps">HTML</span> > <span class="caps">RTF</span></li> + <li><span class="caps">HTML</span> > Text</li> + <li>Word > Unicode</li> + <li><span class="caps">PDF</span> > Text</li> + <li>Xdoc > Text</li> + </ul></li> + <li>AkHeaders (<span class="caps">HTTP</span> headers, redirections)</li> + <li>AkImages (Image operations, resizing)</li> + <li>AkLocalize (Localization, countries and timezones)</li> + <li>AkInflector</li> + <li>AkLogger</li> + <li>AkFtp</li> + <li>AkInstaller</li> + <li>AkRouter</li> + <li>AkZip</li> + <li>…</li> +</ul> +<p>Well, it’s all there, at any rate. The best way to know if it all works, and <em>how</em> it works, is simply to try it out: <a href="http://www.akelos.org/">www.akelos.org</a>.</p> +<h3>Remarks</h3> +<p>As I said earlier, Akelos looks like <em>CakePHP on steroids</em>: agreed, the Cake philosophy of “no we-may-use-it code in the trunk” has been <em>completely</em> (and intentionally) ignored, but this is our chance to peek at what CakePHP could have become if such philosophy didn’t become a lifestyle for the Cake Dev Team. <br /> +Akelos code is Rails-inspired, so yes, it’s <em>very</em> similar to Cake, although with some rough edges and some re-used parts, but it’s the work of <span class="caps">ONE</span> person with no community support (yet), don’t forget. Remarkable.</p> +<p>And he needs co-developers, by the looks of it, so there you are then: there’s <em>your</em> chance!</p> +<p>My personal opinion about it? Well, I think Akelos can learn from CakePHP and vice-versa: a merge? Well, at least it would reduce the number of Rails-inspired framework for <span class="caps">PHP</span> and <em>possibly</em> meet the needs of more people: those who want just the essentials, as a framework, and those who like to be <em>virtually almighty</em> and be able to do anything, <em>if they wanted to</em>.</p> +<p>Two flavours of the same framework? <em>CakePHP</em> and <em>cAkePHP</em> (note the case)? Bah, let’s stop raving now, shall we?</p>
@@ -0,0 +1,22 @@
+----- +title: "Why I like Netvibes" +content-type: article +timestamp: 1158551460 +tags: "web20|ajax|review" +----- +<p>The so-called “<span class="caps">AJAX</span> Start Pages” are not a new concept anymore, and like for almost any other offspring of Web 2.0 there is more than one to chose from. Hence the increasing number of comparative reviews on the Web nowadays (Yes, I’m guilty of that too). I soon learnt that for any “good and useful thing” on the web there are at least <em>n</em> clones: consider for example social bookmarking, community-powered news sites, php frameworks…<br /> +And no, you can’t use the word clone because it has a strong negative connotation nowadays so let’s just say that whenever someone comes up with a new idea, others examine it, process it and in a few weeks (days?) some <em>very, very similar application</em> comes out, and it’s <em>better</em> than the previous one. <br /> +Now, I don’t know exactly whether <a href="http://www.netvibes.com/">NetVibes</a> was one of the first <span class="caps">AJAX</span> Start Pages created or not, but at any rate – in my very, very, very humble opinion, is the most advanced and the most usable of <a href="http://www.techcrunch.com/2005/12/07/ajax-desktops-wont-stop/">the lot</a>, and an essential tool for lazy folks like me who want to keep up-to-date with what’s going on without having to visit dozen of websites everyday.</p> +<p style="float:left;"><img src="http://base--/img/pictures/netvibes.jpg" alt="" /></p> +<p>I can see people jumping up and down shouting “Pageflakes is better”, “Protopage kicks a$$” etc. etc. Well, yes, probably, as you like: different people like different things, and when it comes to <span class="caps">AJAX</span> Start Pages there’s really a lot to choose from: 3spots has an excellent (and complete, I believe) <a href="http://3spots.blogspot.com/2006/03/ajax-or-flash-startpages-or-homepages.html">list</a> of all the start pages currently available on the Net, so yes, you can try them out yourself and make out your mind :)</p> +<p>I made up my mind long ago after experimenting a few of those. Why Netvibes? OK, let’s see:</p> +<ol> + <li><strong>Fast to load</strong>: Netvibes is fast. Relatively fast, of course, for sure is not as fast as a plain, old-style html page, but I think it’s perhaps one of the fastest <span class="caps">AJAX</span> start pages ever created. As they <a href="http://blog.netvibes.com/?2006/08/17/75-the-future-of-netvibes">pointed out</a>, with a 15 million investment performance can only get better…</li> + <li><strong>Tabbed pages</strong>: After tabbed browsing, tabs within a single page seem to gain popularity. Netvibes allows you to create more than one page to prevent cluttering and general chaos: you can create a tab for CakePHP feeds, one for some cute <span class="caps">AJAX</span> widgets you’ll never use, another for al that Web 2.0 rubbish you’ll never read — that’s what I do at least.</li> + <li><strong>Smart Google Module</strong>: Finally Netvibes has a <em>proper</em> Google search module, which enable users to search with Google and view results <em>on Netvibes</em> instead of opening up a browser tab.</li> + <li><strong><span class="caps">RSS</span> done right</strong>: Their <span class="caps">RSS</span> reader is nice: by clicking on a feed title it opens up a <em>virtual window</em> inside the page with the whole story and a menu with links to the other stories included in the feed. This is the most convenient way to read whole articles like TechCrunch’s ones without leaving the page (and without loading the heavy TechCrunch UI).</li> + <li><strong>Public <span class="caps">API</span> for modules</strong>: For those who – unlike me – has some proper free time and would like to develop their own module, the <a href="http://eco.netvibes.com/developers/">Netvibes Mini Module <span class="caps">API</span></a> is public…</li> + <li><strong>Ecosystem</strong> : Netvibes <a href="http://eco.netvibes.com/">Ecosystem</a> includes hundreds of modules and podcasts and thousands of feeds and tabs which can be integrated into any Netvibes page with a single click. Some of my favourites: <a href="http://eco.netvibes.com/modules/3492/xe.com-currency-converter">XE</a> Currency Converter, <a href="http://eco.netvibes.com/modules/3709/quick-translator">Quick Translator</a>, <a href="http://eco.netvibes.com/modules/6776/google-map">Google Map</a> <a href="http://eco.netvibes.com/modules/91/daily-cartoons">Daily Cartoons</a> and <a href="http://eco.netvibes.com/modules/6/bitty-browser">Bitty Browser</a>. <br /> +CakePHP feeds? <a href="http://eco.netvibes.com/?type=all&q=cakephp">Loads</a>!</li> +</ol> +<p>Enough?</p>
@@ -0,0 +1,22 @@
+----- +title: "Introducing: "CakePHP Recipes"" +content-type: article +timestamp: 1162441500 +tags: "cakephp|writing" +----- +<p>Despite all my efforts to keep the whole thing quiet for the time being, a few days ago I entered the words “CakePHP Recipes” in Google and discovered – to my astonishment – that my new book about the CakePHP framework is already for (pre)sale in many popular online bookstores.</p> +<p>Up to now I never made any formal announcement myself (although the Cake Software Foundation already did, months ago), nor gave out any juicy details about it, but maybe now the time has come to post something more about it. Yes, I am indeed writing a book about the CakePHP framework, and yes, you can already buy it but no, you can’t phisically get it simply because it’s still in progress (miracles of the modern publishing industry!).</p> +<p style="float:left;"><img src="http://base--/img/cakephp-recipes/cover.jpg" alt="" /></p> +<p>I’d like to point out that I’m not the <em>only</em> author of the book: all the code examples and snippets included in the book is provided by the Cake Software Foundation staff, in the person of Larry E. Masters and Garrett J. Woodworth mainly, who will also act as technical editors and first reviewers of the book, together with other trusthworthy CakePHP core developers.<br /> +It is our intent to produce an enjoyable and yet very useful book which will hopefully help CakePHP enthusiasts to use the framework in real-world situations: the book will not focus on theory but on practice, by providing a lot of interesting “recipes” on how to implement a particular functionality in a CakePHP web application.</p> +<p>Why should you get it? Here are some reasons:</p> +<ul> + <li>It is a book written <em>by</em> programmers <em>for</em> programmers</li> + <li>All the code included in the book has been created and tested by the creators of the framework</li> + <li>Part of all the revenues generated by the book (including royalties) will go to the Cake Software Foundation, and hopefully contribute to improve our already excellent framework.</li> +</ul> +<p>Very special thanks to <a href="http://www.peachpit.com/">Peachpit Press</a> for giving me and the Cake Software Foundation this chance to</p> +<p>More to come…</p> +<blockquote> +<p><strong><span class="caps">UPDATE</span></strong>: This book <a href="http://www.h3rald.com/blog/42">has been canceled</a> and therefore will <span class="caps">NEVER</span> be available in bookshops or online stores.</p> +</blockquote>
@@ -0,0 +1,8 @@
+----- +title: "Comments temporarily disabled" +content-type: article +timestamp: 1168149180 +tags: "website" +----- +<p>As a few of you might have noticed, I decided to disable comments on all the sections of this site, as a temporary measure against spam.</p> +<p>Hopefully I’ll try implementing something more effective and less drastic soon, but meanwhile this seems the quickest way to get rid of approx 600-800 spam comments per week.</p>
@@ -0,0 +1,13 @@
+----- +title: "Too many cooks spoil the Cake book" +content-type: article +timestamp: 1173231900 +tags: "cakephp|writing" +----- +<p>I am sorry to announce that my upcoming book, CakePHP Recipes, will not be published anymore. As a matter of fact, it wasn’t finished because some of the people involved failed to comply with the terms of their contract in delivering material which was suitable for publication.</p> +<p>To quote an email I received from my publisher a few days ago,</p> +<p><em>“[…] The Cake Software Foundation has informed us they are withdrawing from the CakePHP Recipes project, and returning the advances they’ve received. This means we can no longer count on them for support, nor can we package the book as an official title.</em></p> +<p><em>After careful consideration, we have determined that this renders the book no longer viable for us. So, regrettably we must cancel your contract as well. Please understand that we have no quarrel with your performance; you have been responsive and communicative for the entire time. […]"</em></p> +<p>This is a huge disappointment to me, in particular because I am not responsible for the cancellation. It was going to be my very first book to be published, and due to someone else’s misjudgement and lack of motivation it will never be available to the readers.<br /> +I do not want to put the blame the whole Cake Software Foundation for this: nearly every person involved in the project did his best in reviewing parts of the book or offering me support. Regrettably this wasn’t enough: unfortunately it seems that someone didn’t like the idea of me writing the book and kept doubting not only my coding skills but also my ability as a writer all along.</p> +<p>It is sad to see how certain individuals fail to understand the importance of marketing and public relations not only when working on a team project but also in ordinary life, but it is truly disappointing to see how the thoughts and opinions of a single individual affect the work of a whole team.</p>
@@ -0,0 +1,18 @@
+----- +title: "Time for a diet..." +content-type: article +timestamp: 1173437940 +tags: "cakephp|rant|writing" +----- +<p>My fiancée keeps telling me that too many cakes are not good for me, and I never listen: I always liked cakes! I <strong>did</strong> like the CakePHP™<sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup> framework too, once, and I <strong>did</strong> write <a href="http://www.h3rald.com/projects/view/cakephp-herald">some articles</a> about it in the past, and I believe at least a bunch of Bakers found them useful, especially at the time.<br /> +I do believe the Cake™ Software Foundation<sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup> quite liked having their framework featured on popular websites like php|architect and SitePoint, and I believe that I contributed – to some extent – to make it one of the most popular frameworks available for the <span class="caps">PHP</span> programming language.</p> +<p>Unfortunately though someone decided that two of such articles and my personal website were no longer worth a mention on CakePHP official website frontpage. To me, this makes sense since the two CakePHP-related series which are being published by <span class="caps">IBM</span> are much more up-to-date than my articles, and thus deserve such a mention instead.</p> +<p>Oddly enough, I took a screenshot of the CakePHP website just yesterday <em>“by chance”</em> and my articles were still there:</p> +<p><img src="http://www.h3rald.com/img/pictures/cake-promo/cakephp-08032007.png" alt="" /></p> +<p>…while this morning they weren’t anymore:</p> +<p><img src="http://www.h3rald.com/img/pictures/cake-promo/cakephp-09032007.png" alt="" /></p> +<p>Of course I can’t provide any proof that I took the screenshot yesterday, and of course I don’t have any proof of the fact that someone in <span class="caps">CSF</span> may have thought that due to my recent <a href="http://www.h3rald.com/blog/view/42/">bad behavior</a> my articles didn’t deserve to be publicized anymore. I am confident that the Cake Software Foundation always does its best in keeping its site up-to-date, and I am glad that yesterday’s accident reminded them that there were far better articles which needed to be featured on their site. At least I <em>finally</em> did something good for the community!</p> +<p>Sarcasm apart, I feel I owe an apology for blowing this whole thing out of proportions: I disclosed embarassing details about our past project which – for the sake of the framework – should have never been made public, perhaps.<br /> +I want all of you to know that I still think that CakePHP is the best <span class="caps">PHP</span> framework ever made and I genuinely think that Larry E. Master did outstanding work in all this time, along with the rest of <span class="caps">CSF</span> members and contributors. Best of luck for your future editorial and development projects.</p> +<p>Since now my contributions are no longer “officially recognized”, I think I’d better to move on devoting my attention to something else.</p> +<p class="footnote" id="fn1"><a href="#fnr1"><sup>1</sup></a> “CakePHP” and “Cake” <em>seems</em> to be registered trademarks of the Cake Software Foundation Inc. I’m not sure if I’m allowed to use them in this blog — If anyone has any problem with it, please let me know.</p>
@@ -0,0 +1,9 @@
+----- +title: "New site operative" +content-type: article +timestamp: 1144335420 +tags: "website|webdevelopment|cakephp" +----- +<p>Yes, it works. Perhaps it’s a tiny bit slower than expected but the new h3raLd.com seems to work.<br /> +I’ll probably find some new exciting bugs to fix in the next few hours, as usual – that will be annoying but perfectly normal.</p> +<p><del>The good thing is that the new template seems to load faster, mostly due to the fact that I hardly used images</del> <- [not true, te new site appears to be slower, maybe not due to the images], at any rate, let’s see how it goes. I can imagine I’ll have to implement some sort of caching system for the tagging system in particular, but fortunately <a href="http://www.cakephp.org/">CakePHP</a> apparently comes with a built-in caching mechanism for views, models etc. etc. although the documentation available seems to be <a href="http://groups.google.com/group/cake-php/browse_thread/thread/f0f96751bb61bc7b/bcb43c97e91923c7?q=caching&rnum=1#bcb43c97e91923c7">scarce</a> at the moment, and I’ve been to lazy to investigate any further.</p>
@@ -0,0 +1,15 @@
+----- +title: "Riddle me this... and you'll get the job!" +content-type: article +timestamp: 1144419238 +tags: "" +----- +<p>Today I had my <em>n^th^</em> job interview. Yes, I’m getting used to them by now, and it’s becoming quite entertaining: if they <em>paid</em> me for just take interviews I’d do that for all my life quite happily! <br /> +But since that’s not going to happen I’d better get a move on and find a so called <em>real job</em>. Actually this time it wasn’t the usual complete waste of time and this company <em>nearly</em> made me a proper offer: they’re gonna see me again next week, so let’s hope for the best.</p> +<p>The interview was one of the best ever, no doubts. They were friendly enough, they seemed to like me enough and they were even entertaining enough… one thing which actually <em>never</em> happened to me before: they asked me to solve a sort of pseudo-IQ-test(an annoying semi-pointless riddle, in other words), and here’s a rough translation from Italian, the comments within square brackets are mine:</p> +<blockquote> +<p><em>You’re alone in a pitch black room […nice intro, eh?] and the only thing you have are two fuses of different length and a lighter [thank God for that, now it’s all much better]. You know that both the fuses can burn in exactly one hour each, although there’s no proportional law which bonds the lenght of the fuses to the time necessary to burn them; how can you measure 45 minutes, exactly?</em></p> +</blockquote> +<p>I solved that, eventually, and I got the job! Weheee!</p> +<p>No, more or less, but not quite… I’m gonna see them again, and evaluate their offer along with the other(s).</p> +<p>The solution of the riddle? NO <span class="caps">CHANCE</span>! Go and figure it out, it’s not hard.</p>
@@ -0,0 +1,7 @@
+----- +title: "A look at Drupal" +content-type: article +timestamp: 1137048164 +tags: "php|webdevelopment|review" +----- +<em><strong>Important Notice:</strong> This article is about changes occurring to zZine Magazine's site[1]. At the time of writing, <a href="http://www.zzine.org">www.zzine.org</a> uses the old site, and not the Drupal-based one presented in this article, which is currently under construction[18].</em><br /><br />"Why can't we log who edits the articles?"<br />"Can we send newsletters?"<br />"We should really have a members' area..."<br /><br />zZine.org[1] is a scratch-built site, coded from the ground up to offer zZine journalists, editors and readers all the functionalities and features they wanted. I'm not totally against sites being coded from scratch, but what happens if something needs to be fixed, or new functionalities have to be implemented and you realize that the code cannot be extended or patched easily?<br /><br /><strong>Case Study: zZine Magazine</strong><br /><br />zZine Magazine is an online magazine which publishes not only IT-related and other articles on a weekly basis, but also monthly publications containing CyberArmy[2] digests, special columns, and featured articles. A team of journalists, researchers, editors, publishers and outside contributors has access to the zZine site to write, submit, and edit articles, manage publications and perform various other tasks through a password-protected administration area. This is common to approximately 75% of the websites on the Internet: they have a front-end to present content to the general public and a semi-hidden administration backend which is normally more difficult and tedious to code. That's why someone started developing <em>Content Management Systems</em>[3]: ready-made, fully-featured administrative back-ends for creating and managing almost any kind of website, from blogs to eCommerce portals.<br /><br />Could a CMS be used for zZine Magazine? Probably - zZine doesn't need any innovative or advanced features, just a bunch of commonly-used functionalities like:<br /><ul><br /> <li>Add, delete, edit and publish articles</li><br /> <li>Customizable user permissions, ideally role-based </li>(writer, editor, publisher, etc.)<br /> <li>Creating and managing monthly publications</li><br /> <li>Editor's tests</li><br /> <li>User signups, notifications, etc.</li><br /> <li>RSS feed generation</li><br /> <li>Sending newsletters to subscribers</li><br /> <li>Logging user actions</li><br /></ul><br />Some members of my team raised some concerns regarding the usage of a CMS, which were mostly based on our past experience with just a particular product and not CMSes in general. Everybody agreed that if we were to go back to a CMS, we <em>had</em> to choose the <em>best</em> this time: something flexible, easy to use, fast, search-engine friendly, and extensible. I spent some time researching CMSes, because while I knew that there's no such thing as the best CMS, there was certainly a CMS that was best for our needs.<br /><br /><br /><strong>Making the right choice</strong><br /><br />In the past, I had played around with Xoops[4] when I first thought about creating websites, and I used Mambo[5] for some other sites. I admit that I never actually spent time creating complex Mambo components and modules, but I must say that in the end I felt somehow tied to third-party modules and unable to understand how they really worked: Mambo seemed to give developers too much freedom, and had neither a solid API nor conventions to follow, at least when I used it.<br /><br />So I decided to have a look around again, starting from the two most important sites people should look at when choosing the most suitable CMS for their work. <br />The first site is CMS Matrix[6] which - as the name implies - provides a really handy <em>matrix</em>, or chart, to compare the various features offered by nearly all CMS available, both proprietary and open-source.<br /><br />I remember choosing Mambo last time I used the matrix simply because it appeared to be one of the most feature-rich. This is actually something <em>not</em> to do when choosing a CMS: always concentrate on what your site needs rather than what the CMS is able to offer. Otherwise, you run the risk of having too much to work with.<br /><br />The other important website to visit when choosing a Content Management System is OpenSourceCMS[7], which basically allows you to try a demo of every open source CMS online. This is perhaps more useful, but also much more time-consuming: it's better to narrow down the list of possible CMSes after checking CMS Matrix and then try each one rather than just picking one at random.<br /><br />At this point, an experienced CyberArmy staff member[8] suggested Drupal[9]. I asked her why, and she simply said that it seemed to be the best choice according to zZine's needs, as it basically offered all the features we were looking for, either natively or through modules. She also admitted to be biased, as she's actually <em>part of Drupal's documentation team</em> and involved with Drupal development[10].<br /><br />Before making any kind of commitment, I checked out Drupal's website to see how they organized things, and I was quite impressed. I immediately noticed the Handbooks section[11], which contains all the official Drupal documentation and it seemed pretty much complete. No "under construction", "please write content here" or "we're a new project, help us write the documentation" notes, just a load of good-quality documentation, including a fully documented and <em>stable</em> API![12] <br /><br />This surprised me, because some projects I came across, even really good ones, lacked a proper documentation section. I think this is a common problem with new open source projects, and Drupal for this reason gave me the impression to be quite mature and useable already. After visiting the very clear and organized Downloads Section[13], I downloaded the CMS and a few modules and installed it on my laptop.<br /><br /><br /><strong>Installation</strong><br /><br />Drupal needs three things to run:<br /><ul><br /> <li>A web server - Apache is fine, and ISS is reported to be working</li><br /> <li>PHP - Either version 4 or 5, Drupal started supporting PHP5 since 4.6.0 release</li><br /> <li>A PHP-compatible database - MySQL or PostgreSQL is recommended</li><br /></ul><br />I used a WAMP[14] installation to test Drupal. First of all, I created a MySQL database, granting ALL privileges to the database user accessing the Drupal database. When I uploaded the site to the remote server, later on, I had some problems because the LOCK TABLES privilege wasn't granted by the host. Drupal requires this, so I had to contact my host to solve the problem. I then imported the database scheme located in the <em>database</em> directory under the installation directory and modified the configuration settings (sites/default/settings.php) to allow Drupal to access the database. Installation complete.<br /><br />Drupal was now up and running with the default configuration settings, with a minimum of fuss. For all the details concerning the installation process, consult the exhaustive documentation.[15] I didn't read it when I installed it, but it can really be useful in some situations.<br /><br /> There are actually two non-critical things to consider if you're planning to use Drupal for a medium-sized project: the first involves changing a few settings on php.ini, in particular increasing the amount of memory allocated to PHP from 8MB to 16MB, especially if you're planning to use either a lot of simple modules or a few complex ones, and the second is setting up your crontab to execute <em>http://www.yoursite.com/cron.php</em> every hour or so. This is required by some semi-essential modules like the site-wide search, but a common alternative (if you don't want to setup the <em>cron</em> task manually) is the poorman's <em>cron</em> module[15], which I used myself and found to be workable. <br /><br /><br /><strong>Keeping your site under control</strong><br /><br />Perhaps one of the best things Drupal has to offer is a rock-solid general-purpose administrative backend. The first thing I found in the backend which really impressed me (and that also I never found in another CMS) is the ability to create <em>custom</em> role-based user accounts and access permissions for <em>everything</em>: every module can be configured so that, for example, not all people can see its output and just a few can administer and modify it.<br /><br />For zZine, I created four types of accounts:<br /><ul><br /> [*]<em>Administrator</em> - Able to access everything and change every setting of the site<br /> [*]<em>Publisher</em> - Able to write, edit and publish every kind of content on the site, but not able to administer user accounts, permissions and similar administrator-only tasks.<br /> [*]<em>Editor</em> - Able to write and edit anything on the site, but not to publish it.<br /> [*]<em>Writer</em> - Able to write articles, blogs and similar content, but in some cases not allowed to edit it.<br /></ul><br />These were precisely the account types I was looking for in a CMS. Granted, other products offer them by default, but having pre-defined account types is one thing, and being able to customize them completely is another.<br /><br />User accounts are great, but sometimes it's good to know what the users of your sites are doing as well. On our old site we had user accounts for editors and administrators, and even if only a few people had access we had no way to determine who edited an article or who published something unless that person told us. Drupal comes with a radical solution to this: Almost every action is automatically logged by the <em>watchdog</em> core module. Every website error, every page not found, and every PHP or MySQL error is logged, as well as every content submission or modification. Page accesses, meanwhile, can be logged through the statistics module. <br /><br />Themes & Templates<br /><br />"We shouldn't use a CMS: I don't want zZine to have the overly used *nuke-style look." I've heard this too many times. Sometimes people associate the word "CMS" with "lack of original design", and that's not true by any means, especially for Drupal. Of course, there are plenty of ready made themes[16] which can be freely used or modified for any Drupal-based site. <br /><br />I must confess that when I first saw the themes section I feared that Drupal "themes" used their own template engine, like some CMSes do nowadays, but I was wrong: currently Drupal supports some template engines[17] but also pure PHP-based ones. Theme engines do their job wonderfully and can offer some interesting features, but templates written natively in PHP tend to perform better, simply because there's no extra parsing or additional overhead involved.<br /><br />I decided to have a look at a standard PHP theme. Basically, it's nothing more than a PHP-enriched xHTML file and its corresponding stylesheet. There are a few functions which must be used to perform particular tasks, like showing the main navigation links, but nothing too hard to understand. It's also <em>very</em> customizable. In fact, we're already working on a custom zZine theme, which doesn't seem any harder than coding a standard xHTML template. As design should always be the last thing to worry about, I decided to use a temporary template I created by slightly modifying an existing one.[18]<br /><br /><br /><strong>To switch or not to switch?</strong><br /><br />When creating a new site for an organization which already has one, there's something very important to consider: <em>what happens to the old data</em>?<br />Assuming the old site was dynamic and using a database of some sort, there are three possibilities:<br /><ul><br /> <li>Don't bother doing anything: any data on the old site will not be transferred to the new one.</li><br /> <li>Make the old website available somewhere else as an </li><em>archive</em> of old documents.<br /> <li>Import all the data from the old site to the new one. </li><br /></ul><br />Obviously we went straight for the third one, which is the most difficult to implement, but it was necessary: there were over 1000 articles on the old site-<br /><br />Of course, in reality, I didn't even mention the possibility of using Drupal until I figured out a way to import the old data into the new database structure. Never praise features or convince people to switch unless you're 100% sure you can handle the situation. Luckily for me, it turned out that everything could be imported easily enough.<br /><br />The first difference I found between Drupal and zZine was that we didn't really have proper user accounts. Every article had an author, but it was stored as a field in the article's record, and that was all. Drupal, on the other hand, supports (and perhaps requires) user accounts - everything present on the site must be written or edited by an existing user.<br /><br />The solution I cam eup with was rather drastic: I created about 120 user accounts, retrieving usernames from the articles and inserting them through a custom PHP script into Drupal's user table. Of course, those users never registered on the new site[18], so I didn't personalize the accounts at all: I simply put a notice on the first page asking everyone who contributed to zZine before to contact me in some way to enable their account with a valid email address.<br /><br />After this initial difficulty, importing articles was relatively easy. Pretty much every type of content in Drupal is, in its simplest form, a <em>node</em>. Nodes have a title, which is a teaser generated automatically from the body text, and an author (the node table in the database has more fields, but these are the key ones for us). Essentially, Drupal's two default models for writing <em>stories</em> and <em>pages</em> write data to this table only. The most important thing to understand about Drupal is that almost every module used to create <em>something</em> on the site - an article, a blog entry, even songs - will use the node table, and add everything else on other tables. This makes the whole system much easier to administer: every node can potentially be extended <em>in any way</em> by third party modules! <br /><br />What about categories? Well, Drupal has become famous for its taxonomy module: whereas most CMSes only support, or in fact <em>impose</em>, a one- or two-level hierarchy for categories, Drupal's taxonomy module supports the creation of as many different terms to describe data as you can think of. Each piece of content (categorization can be applied to <em>any</em> node, and since almost everything is a node-) can belong to none or <em>n</em> different categories, which can be nested in a <em>n</em>-level hierarchy. Since the zZine articles were already divided into categories, I imported all of them directly into Drupal. On the old zZine site, every article could have at most one category, which is fine, but it's good to know that we can now configure the system to support a more advanced categorizing system.<br /><br />After importing the articles, the last important thing to transfer to the new site were the zZine Publications. Publications are what we call the article collections that we release as an issue every month. I could have created a new module for this, and it wouldn't have been that hard, but there was already an excellent module for that. This was pure luck, but the <em>epublish</em>[19] module seemed like it was tailored specifically for our needs.<br /><br /><br /><strong>Drupal API and Modules</strong><br /><br />We were lucky enough to be able to use existing modules for the main functionalities of our site, but in some cases you might not be able to find <em>exactly</em> what you're looking for.<br /> <br />In our case, even if we could have used the <em>story</em> module, which is part of the default installation, for zZine articles (stories have a body, a teaser, a title and an author, exactly like our articles) we decided not to. I wanted our editors and writers to know what to use when submitting articles, and the name "stories" sounds a bit too ambiguous for my liking. So, I decided to have a look at the standard story module to see how modules work, and create something similar.<br /><br /><em>Note: I'm curious by nature and I didn't read anything in the Drupal API[12], or about developing custom modules; I looked at the story module without any prior knowledge of Drupal's conventions.</em><br /><br />All I found in the story module was a bunch of functions like:<br /><code><br />/**<br /> * Implementation of hook_node_name().<br /> */<br />function story_node_name($node) {<br /> return t('story');<br />}<br /></code><br /><br /> which seemed to be enough to tell the Drupal core what to do. I was used to Mambo components, where developers have more liberty to do what they want, including outputting HTML code anywhere. Drupal is nothing like that; on the contrary, it has its own structure and coding conventions that developers have to follow when creating custom modules. Even if a simple function like the one above is fully commented, it has to have a standard indentation (two spaces) and an obviously standardized name. I noticed that all the functions similar to this one started with "<em>story_</em>", so I created a new file named <em>zzarticle.module</em>, copied and pasted the story module code into it, and changed every function accordingly, like this:<br /><code><br />/**<br /> * Implementation of hook_node_name().<br /> */<br />function zzarticle_node_name($node) {<br /> return t('zZine Article');<br />} <br /></code><br />Trivial enough, and it worked fine! I put my shamefully copied module in the /modules directory and I was able to create "zZine Articles" (which were nothing but stories with a different name).<br /><br />At this point I decided to have a proper look at the API, and read about hooks:<br /><br /><fieldset><blockquote><em>"Drupal's module system is based on the concept of "hooks". A hook is a PHP function that is named foo_bar(), where "foo" is the name of the module (whose filename is thus foo.module) and "bar" is the name of the hook. Each hook has a defined set of parameters and a specified result type.<br /> To extend Drupal, a module need simply implement a hook. When Drupal wishes to allow intervention from modules, it determines which modules implement a hook and call that hook in all enabled modules that implement it. [-]"</em></blockquote></fieldset><br />A <em>hook</em> was used for the previously mentioned function, and this was diligently commented:<br /><br /><code><br />/**<br /> * Implementation of hook_node_name().<br /> */<br /></code><br /><br />This made me understand how Drupal is actually geared towards developers and at the same time suitable for non-technical users. Wait a minute, what if someone is not familiar with PHP and still needs custom modules and features? Is there any way to extend Drupal without having to physically code new things? Yes, there is, and two modules come to mind:<br /><ul><br /><br /> [*]<em>Webform</em> - allows the creation of any kind of web form. Users can customize field types, values, labels and messages. The module also provides ways to process forms by either saving data to the database or emailing it, which we can use for things like the Editor's Test and surveys.<br /> [*]<em>Flexynode</em> - This module is simple and powerful - it allows users to create their own content types without coding a single line. In my example, I cloned the story module to create the zZine Article content type. This is easy to do, and functional, but what happens if someone wants to include an additional field to the article submission form? I can probably do this using hooks, but if I was lazy I could do the same thing with the <em>flexynode</em> module. I actually used this module for our podcast section[20], and it did an excellent job.<br /></ul><br /><br /><strong>Conclusions</strong><br /><br />For now I must say I'm very happy with what Drupal has to offer, and if there's something we need for the site, we can code it ourselves and then integrate it into Drupal. <br />One of the major strengths of this CMS is definitely its developer-friendliness: while other CMSes mainly focus on users at the price of limiting extensibility and trapping developers into predefined modules, Drupal even encourages developers to integrate their code into the existing structure, opening virtually unlimited possibilities. Granted, it may seem difficult to understand at first, some people I talked to told me that 'Drupal is too complex' or has a rather steep learning curve, but I just think everything becomes clearer after reading parts of the vast documentation section: this is the only price to pay, and believe me, it is definitely worthwhile.<br /><br /> <br /><strong>Notes</strong><br /><small><br />[1] zZine Magazine: <a href="http://www.zzine.org">http://www.zzine.org</a><br />[2] CyberArmy Community: <a href="http://www.cyberarmy.net">http://www.cyberarmy.net</a><br />[3] Content Management System, Wikipedia page: <a href="http://en.wikipedia.org/wiki/Content_management_system">http://en.wikipedia.org/wiki/Content_management_system</a><br />[4] Xoops - Official Page <a href="http://www.xoops.org/">http://www.xoops.org/</a><br />[5] Mambo - Official Page: <a href="http://www.mamboserver.com">http://www.mamboserver.com</a><br />[6]CMS Matrix: <a href="http://cmsmatrix.org/">http://cmsmatrix.org/</a><br />[7] Open Source CMS: <a href="http://opensourcecms.com/">http://opensourcecms.com/</a><br />[8] Snarkles's CyberArmy Profile: <a href="http://www.cyberarmy.net/~snarkles">http://www.cyberarmy.net/~snarkles</a><br />[9] Drupal - Official Page: <a href="http://www.drupal.org">http://www.drupal.org</a><br />[10]Webchick's Drupal Profile: <a href="http://drupal.org/user/24967">http://drupal.org/user/24967</a><br />[11] Drupal - Handbooks: <a href="http://www.drupal.org/handbooks/">http://www.drupal.org/handbooks/</a><br />[12] Drupal API: <a href="http://drupaldocs.org/api/head">http://drupaldocs.org/api/head</a><br />[13] Drupal Downloads: <a href="http://www.drupal.org/project/">http://www.drupal.org/project/</a><br />[14] WAMP Server Package: <a href="http://www.wampserver.com">http://www.wampserver.com</a><br />[15] Drupal - Installing and Upgrading documentation: <a href="http://drupal.org/node/258">http://drupal.org/node/258</a><br />[16] Drupal - Themes: <a href="http://drupal.org/project/Themes">http://drupal.org/project/Themes</a><br />[17] Drupal - Theme Engines: <a href="http://drupal.org/node/509">http://drupal.org/node/509</a><br />[18] zZine Beta site: <a href="http://beta.zzine.org">http://beta.zzine.org</a><br />[19] Drupal - ePublish module: <a href="http://drupal.org/project/epublish">http://drupal.org/project/epublish</a><br />[20] zZine Podcasts: <a href="http://beta.zzine.org/podcasts">http://beta.zzine.org/podcasts</a><br /></small><br />
@@ -0,0 +1,111 @@
+----- +title: "Thoughts about the Italian Academic Education" +content-type: article +timestamp: 1120768200 +tags: "italy|personal|rant" +pdf: true +----- + + <section class="section"> +<p>I found this article today, buried in my mailbox. I wrote it just over five years ago, the evening after failing the last, insignificant exam necessary to get my degree in IT Engineering.</p> +<p>I eventually passed the damn thing, got my B.Sc., and found a great job right afterwards, while all my former fellow students were still studying pointless crap. Maybe some of them are still studying pointless crap right now, and they’re still living with their parents.</p> +<p>I was very lucky. If I didn’t fail that exam perhaps I would have kept studying for my master’s degree for years, and maybe today I wouldn’t even have a job, or be married!</p> +<p>I decided to re-publish this article because it’s part of what I am, and I’m not ashamed of it. I corrected a few of the most obvious spelling and grammar mistakes, but I didn’t edit it or censor it otherwise.</p> +<p>It may be a senseless rant, but my opinion of the Italian Education System is still the same: If I’ll have a child who wants to study anything technical someday, I’ll tell him/her to get the hell out of Italy and go abroad to study in a <em>real</em> university.</p> +<p style="padding-left:15em;"><strong>Fabio Cevasco</strong> — <em>Saturday, July 31st 2010</em></p> +<section class="section"> +<header><h1 id="h_1" class="toc">The Pre-computer Age</h1></header> +<p>Who am I? I’m just an Italian student taking the last exams to obtain my B.Sc. in IT Engineering. Obviously I’m quite interested in Information Technology and everything concerning computers or the Internet, and – believe it or not – this probably came from my parents’ original dislike of computers themselves.</p> +<p>in Italy, unlike in most of the other capitalistic countries of the world, kids tends to listen to their parents until they reach their “full maturity”, i.e. 25 years of age at least (by the way, I’m 22), so, to cut a long story short, I was allowed to have a computer at home when I was 16 years old. I couldn’t believe it when the technician brought it at home: sure I’d seen a computer before in my life, but that was mine, and I could use it to do something amazing, as I dreamt many times.</p> +<p>The point is, from another point of view, that I felt behind already compared to my friends who were already boasting their records at various computer games. Fools.<br /> +On another note, I was a bit different from other Italian kids: I always liked writing and reading in English since I was 6, because I found the language to be quite amazing or even magic for the way it sounded, as I used to say to my friends. Friends – the Italian ones, that is – who never really understood me totally, and in particular my<br /> +passion for the Anglo-Saxon cultures: for them, writing and reading in English were just boring and difficult things you had to do at school, while I enjoyed reading The Tempest by Shakespeare when my English teacher didn’t even teach me the past tense, yet. A fool?</p> +<p>My passion for the English language was soon noticed by my parents, who let me go to England a few times, to college: basically a fashonable way for english schools and travel agencies to rob honest families, promising them that their kids would have learnt a new language enjoying themselves. Result: the kids enjoyed their holiday a lot, but basically always spoke Italian to each other (and even to English people over there) and the families were happy when they came back because after spending so much money they must have learnt something…</p> + +</section> +<section class="section"> +<header><h1 id="h_2" class="toc">Using the Computer and the Internet</h1></header> +<p>Back to that amazing and weird magic box called computer: I immediately enjoyed experimenting new stuff, playing with Windows (for me the word “Linux” at the time would have sounded not too different from some names of medicines my grandparents were taking), and even playing games, why not, but in English of course, because I never<br /> +really liked Italian translations (yes, we even dub video games!).<br /> +I remember my biggest fear was not being able to catch up with my friends who had a computer for years: I was so obsessed with that that I often stayed on the PC more than the 2-3 hours allowed by my parents, when they were away. Some time later, and relatively recently, I discovered that I catched up relatively soon, without even noticing it.</p> +<p>I’ve been allowed to access the Internet when I turned 18, because my parents were scared it could be just another bad thing, and still I found myself behind if compared to my friends, who’ve been surfing the web long before.</p> +<p>Only now I notice that perhaps my parents made me discover new things about PCs which my friends never bother learning, even now that they’re graduating. I remember my mum calling me for a silly pseudo-scientific divulgative program where they were describing this new, totally free operating system different from Windows who was supposed to work much better. “It said the name before… it’s Luxi… lixi… lunis…” – Linux.</p> +<p>When I had access to the Internet my life really changed. I do believe that unlike my friends I used the Internet for its very purpose: sharing knowledge, or, in my case, just learning. I also made a vow to myself: to surf <span class="caps">ONLY</span> (unless I had to) English/International websites; a vow which I’m keeping still nowadays, which seemed utterly illogic<br /> +to my friends and Italians in general.</p> +<p>Immediately a whole new universe opened to my eyes: I quickly learnt how to keep up-to-date on the recent events regarding computers, I learnt some rudiments of Internet and Hacking Culture (thanks <span class="caps">ESR</span> for all your papers) and the Open Source movement, and linux, etc. and I noticed two things:</p> +<ul> + <li>I was definetely catching up with my friends’ “knowledge” in computing</li> + <li>I would have <span class="caps">NEVER</span> ever managed to learn even 1/10 of all you need to know about computers: the same as in life, and I was happy with it.</li> +</ul> + +</section> +<section class="section"> +<header><h1 id="h_3" class="toc">The Pre-academic Period</h1></header> +<p>In the meantime I was studying in a Liceo Scientifico, a kind of scientific high school where basically they make you study all sort of subjects (from geography, to maths to phylosopy, to Latin) mainly focusing – they say – on Science-related disciplines. For those who don’t know, in Italy you don’t get to choose what you want to study: in<br /> +High School and University they let you choose basically a type of school, but subjects and courses cannot be changed, apart from a few exceptions.<br /> +I “chose” a particular type of scientific school (…the exception!) where basically I agreed to study an additional subject – Computer Science – in addition to all the rest, for a total of more than 30 hours per week. I studied a lot then, because my parents taught me that Culture was important, and that “if you’re ignorant you can’t do anything nowadays”. No, my parents weren’t ignorant themselves, my dad is a Mechanical Engineer and my mum a Latin/History/Italian professor …and yes, that helped my forma mentis a lot.</p> +<p>I studied a wide range of subjects, including something totally irrelevant with my favourite ones: English and Computing (note: I say “Computing”, not Maths), and I did quite well in the end, graduating from High School with a mark of 100/100. While I was studying Latin, Phylosophy and alikes I was thinking that at least at University I’d have studied something really more specific.<br /> +Until the end I was undecided on which faculty to choose, whether IT Engineering or Foreign Languages. I was very fond of English and languages in general, but I primarly liked computers, so I thought that if I studied IT Engineering I’d have learnt more about computers and my already half-decent knowledge of the English language would<br /> +have helped me in my studies (“Now they <span class="caps">REQUIRE</span> a good knowledge of English, at university”) and in my future, when I’d have started working. <span class="caps">FOOL</span>.</p> + +</section> +<section class="section"> +<header><h1 id="h_4" class="toc">Alice in Wonderland</h1></header> +<p>That was it, I remember exactly when I went to sign my pre-enrollment papers: IT Engineering. I was so happy to have made it! Now finally I would have studied what I was meant to.</p> +<p>On a side note, I was never too good at Maths, I don’t know why. I just didn’t like it because it felt too theorethical for me, and not as useful as I thought,<br /> +especially for programming. In High School I was taught a bit of the Pascal 3 programming language, and that turned out to be perhaps one of the most useful things I’ve ever studied.</p> +<p>The first disappointment came from the courses that they setup for the first year: two <span class="caps">BIG</span> Maths-oriented exams in particular, and Chemistry(!). What Chemistry has to do with Computer Science remained a mystery to me, people claimed that we might be asked in the future to do some programs to help studying the structure of matter and doing<br /> +chemical analysis… yes, and following the same logic I should have been studying the structure of languages, because AI programs and translators would certainly become key applications in the future.</p> +<p>Oddly enough, they made us just study Chemistry.</p> +<p>“But next year will be better” — I was thinking, after getting fairly poor results in the Maths exams — “next year we’ll study something more exciting”.</p> +<p>Economics.</p> +<p>They made us study Economics because they think that it’s useful to know something about finance and salaries, especially when you start working. That makes sense, to an extent, of course, and it was kind of interesting even. But still I didn’t study anything really useful.</p> +<p>This is a little lie, actually, because we actually had two programming exams (out of 17) in which they taught us a bit of C++, and <span class="caps">THAT</span> was interesting, and I even managed to get 30/30 out of the last one: I liked it.</p> +<p>I actually remember when the teacher came in, and insisted for us to use a unix emulator (Cygwin) to compile our C++ programs: people thought that “emulators” were used for running games released for a gaming console on the PC, and what the hell was unix? It looks like – they said – a bad copy of <span class="caps">DOS</span> with more difficult commands. (No comment)</p> +<p>I lived my years at University (three, counting this one which will be the last one) feeling superior to my friends for knowing more about computers but at the same time inferior to them when it came to exams: I didn’t really like most of the subjects, especially some rather abstract mathematical models which <span class="caps">COULD</span> BE useful, but – let’s<br /> +say it all – most people outside Italy don’t really give a sh…illing about. What’s the point in learning the demonstration of Cauchy theorem? Just use it maybe, and it would have a sense… No, they wanted you to study the demonstration and tell them about it, without missing a passage, which normally – for 2/3 of people at least – meant<br /> +“learn it by heart”.</p> +<p>Also, unlike in other countries, professors are more similar to Gods than clever people, apart from a few exceptions. Every professor decides how the students have to take the exams, some of them opt for having some <em>compitini</em> (little tests) during the semester and then the average mark on all of them (normally two or three) represents the<br /> +exam’s final mark: that’s the best, probably, but it could also mean that people can cheat trying to copy from their collegues, etc.</p> +<p>Normal, get on, it’s Italy!</p> +<p>Some professors might allow you to use the notes you took during classes, but that’s often considered a bad thing because people can potentially copy from one another (“What’s that piece of paper, is it your friend’s?” – “No, it’s part of my notes”), and they often do. On the other hand, if a professor doesn’t allow notes to be used, students<br /> +normally do their best to sneak and use them anyway.</p> +<p>This is Italy, after all, the place where everything can be sorted out if you’re cunning enough.</p> +<p>But why do some people cheat? Oh well, simply because either you devote 3 full years of your life to studying pointless crap and forgetting that you’re wasting the best years of your existence, or you have to do something to pass 10 exams a year. Because we <span class="caps">REALLY</span> do take 10 exams a year.</p> +<p>My girlfriend (who’s English and living in Italy, by the way) told me that her brother wanted to study Computing at University but switched to Politics & Journalism because they wanted him to learn Java on the very first year. I’ve never been taught Java — I had to learn it all by myself for my final thesis (see below) — but instead I learnt a ton of demonstrations of theorems and mathematical models. Great, isn’t it?</p> +<p><em>“But you knew you were going to take those exams, because they are publicly available before enrolling”.</em></p> +<p>That’s true and it makes sense, and I probably should have chosen Computer Science instead of IT Engineering if only it was considered equally important. In Italy if you study Engineering you can (after taking yet another exam) become an Engineer, which — unlike other countries — is not a competent person who knows how to fix stuff and can solve problems. Rather, he’s someone who got an important academic title who is treated like a demi-god because he knows (or should know) what’s a differential system and how can be solved but — sometimes — doesn’t know how to use it.</p> +<p>But he’s an Engineer, and he can find work when others can’t.</p> +<p>To explain this concept to non-Italian, I can summarize all this with the following:</p> +<p>In Italy Academic (Skool) Titles rulez – You ain’t got none? You ain’t nothin’ coz I got one and I own you.</p> +<p>And that’s that. In Italy knowledge is dead. (This is an exaggeration, but please try to get my point).</p> +<p>If you need to be competent in something, when you’re working you’ll have to do a practical course (even paying for it yourself) if some “knowledge” is needed. If there’s no risk that things can blow up, you can remain ignorant.</p> + +</section> +<section class="section"> +<header><h1 id="h_5" class="toc">The Vanishing Cheshire Cat</h1></header> +<p>Up to today I could leave with it, I knew that abroad the situation was hopefully different, but I started to cope with the fact that I would have got my B. Sc. and in addition I knew more stuff than some of the others who got the degree at the same time. A few months ago I had just a few exams left and I started going to the lab for my thesis project, with a friend of mine.</p> +<p>At that point — oddly enough — I was told to develop an application in Java, using some libraries, and actually make something fully functional and (somewhat) useful. I couldn’t believe it! I was happy on one side, and angry on the other, because <span class="caps">NOBODY</span> ever taught us about Java or about creating an useful application.</p> +<p>The Ph.D. Student who was appointed to help us with the project told us: “That’s the way it works, it’s normal that you don’t know Java, but you know a bit of C++, and now it’s time to research”. That was again very shocking: it was the first time that someone ever told me something like this, and in the end we agreed on the project.</p> +<p>Despite the fact we had to implement some new features and test them relatively at the last minute, we succeeded in developing the program. In particular, I actually played an important part being the one who actually researched something on Java already, and knew more about programming.</p> +<p>Oddly enough, my collegue would have graduated with a higher mark than me, even if he originally thought that “<span class="caps">SSH</span>” was nothing but a sound used to shut people up and that <span class="caps">HTML</span> was a proprietary standard introduced by Microsoft having something to do with web pages. If you’re reading all this mate, don’t get angry at me: I have nothing against you, I just hate the System, as usual.</p> +<p>He still probabally thinks that POP3 is something like the name of a band and that a shell can be found only at the sea. Mate, it’s not your fault, don’t blame me if I say this, blame the System!</p> +<p>I mean, I don’t consider myself an expert, but at least I’m better than that. I met students, at uni, who haven’t the faintest idea of what a sever was. And that’s pretty sad, if you ask me.</p> +<p>Let’s now come to the end of this apparently endless flow of thoughts: I still had an exam to pass in order to get the degree. Such exam counts 3/180 of the whole stuff we had to study in these three years (it is literally quantified like this on paper), and it’s about Digital Controls. Cool, you may think, but it actually means <span class="caps">MORE</span> mathematical models to solve complex(?) situations, more theorems and other crap, even if — I admit — I had to take exams worse than this one.</p> +<p>I admit I constantly underestimated the exam and took it various times without passing it: “it’s so small, I’ll have to pass it eventually”.</p> +<p>This was just the way of thinking they made us adopt, nothing more, nothing less.</p> +<p>I was quite busy testing my program and writing the thesis in this period, although we were literally told not to worry too much about it: “just google a bit on the net, copy and paste, and change some words if you feel guilty…”</p> +<p>To the guy who told me to do so: it’s just an example that is bad to read, but it’s true, you can’t deny it. I don’t blame you, because you’ve really taught me a lot about working on “proper” projects (and this is <span class="caps">NOT</span> sarcastic, really), I blame the System.</p> +<p>In the meantime I spent days running around here and there trying to sort out all the bureaucracy necessary to have all the papers ready for my degree, and I also talked to the professor who commissioned the project: he’s by far the most helpful and altruistic professor I’ve ever met, and obviously offered his complete availability for helping<br /> +us for the preparation of the degree.</p> +<p>I just needed to pass my last exam. It was the last one, not as complex as others I took, and this time I studied more than the previous times…</p> +<p>I didn’t pass it.</p> +<p>I don’t blame the professor, because probably he’s the only one who’s normal in the whole lot: he’s like me, I think, because I suspect he’s aware that abroad students don’t cheat and professors are not “flexible” on marks. I got 12/30, and I didn’t pass, that was it, I didn’t know his subject enough and he didn’t feel he had to help me to get the degree at all. And he’s right. I can’t blame him, but I DO blame such a “flexible” system which in the end is totally absurd. I learnt the hard way that I shouldn’t have “trusted” the Italian Way, because it has flaws.</p> +<p>Oddly enough, people who can’t even connect a network cable get their B.Sc., and all I get after spending months learning useful things and developing is just a load of B.S.</p> +<p>I learnt my lesson and I’ll probably re-take the exam, pass it, and maybe get the degree: my collegue and friend just emailed me telling me that I <span class="caps">HAVE</span> to help him doing the missing chapters of the thesis because he can’t write them, he’s not good at writing stuff, and doesn’t know what to write either. He’ll get his B.Sc. on September 23rd, provided that I actually decide to help him.</p> +<p>I hope people who read this can understand my frustration apart from blaming me for being “lazy” when it came to exams and expecting help when technically I didn’t deserve it. I probably won’t win the nobel prize or get rich like those two american students who own the most profitable Internet business ever conceivable. I’m not as special, and I don’t deserve anything special, and I never dreamt about it.</p> +<p>All I dreamt was being able to learn, and do something useful. It looks like it will remain just a dream, here in Italy.</p> + +</section> + +</section>
@@ -0,0 +1,63 @@
+----- +title: "An Interview with the creator of the Akelos Framework" +content-type: article +timestamp: 1184814120 +tags: "php|rails|cakephp|frameworks" +----- +<p>I <a href="http://www.h3rald.com/blog/34">already</a> <a href="http://www.h3rald.com/blog/38">covered</a> the Akelos <span class="caps">PHP</span> framework in the past, but for those who don’t know it, Akelos seems to be one of the few <a href="http://www.h3rald.com/articles/rails-inspired-php-frameworks">Rails-inspired <span class="caps">PHP</span> frameworks</a> still worth mentioning, besides CakePHP and Symphony of course.</p> +<p>I recently has a look at their recently-relaunched <a href="http://www.akelos.org/">community website</a> and I noticed this phrase:</p> +<blockquote> +<p>“Being port of Ruby on Rails to <span class="caps">PHP</span> Akelos is also optimized for programmer happiness and sustainable productivity”</p> +</blockquote> +<p>Bermi Ferrer, Akelos creator, openly admits the framework is a port of Ruby on Rails to <span class="caps">PHP</span>, an attempt to help <em>“Ruby on Rails developers who need to code in <span class="caps">PHP</span>”</em>, among others. Of course Akelos is not Rails, simply because Ruby is (thank God for that!) not <span class="caps">PHP</span>, however I decided to find out more, and I asked Bermi a few questions, which he promptly answered.<h4><em>There are a lot of frameworks for <span class="caps">PHP</span>, perhaps too many: why did you decide to create Akelos rather than using one of the existing ones?</em></h4></p> +<p>I started coding <a href="http://www.akelos.org/">Akelos</a> back in 2004 for our internal developments. At that time I only found very few frameworks out there like <a href="http://www.mojavi.org/">Mojavi</a> and <a href="http://ez.no/">eZ Publish</a>. These frameworks were not my ideal of an <a href="http://en.wikipedia.org/wiki/Agile_software_development">Agile development</a> environment, so I decided to brew my own solution.</p> +<p>After reading <a href="http://www.martinfowler.com/books.html">Patterns of Enterprise Application Architecture</a> it was clear to me the kind of framework I wanted <a href="http://www.akelos.org/">Akelos</a> to become, so I started to implement some of the design patterns from the book into Akelos.</p> +<p>During the summer of 2005 I had a look into other <span class="caps">PHP</span> frameworks like <a href="http://www.cakephp.org/">CakePHP</a>, <a href="http://phpontrax.com/"><span class="caps">PHP</span> on Trax</a>, and <a href="http://www.bennolan.com/biscuit/">Biscuit</a> but none of them was more complete or easier to use than what Akelos was already at that time.</p> +<p>Then I used <a href="http://www.rubyonrails.org/">Rails</a> for one small personal project and immediately found that <a href="http://www.akelos.org/">Akelos</a> interfaces, conventions and philosophy were close to the Rails approach. <a href="http://api.rubyonrails.org/files/vendor/rails/activerecord/README.html">Rails ActiveRecord</a> implementation was impressive, better than mine and much much better than other existing <span class="caps">PHP</span> implementations, so I first ported the ActiveRecord code using <a href="http://adodb.sourceforge.net/"><span class="caps">PHP</span> AdoDB</a> as the database abstraction layer.</p> +<p>After that point, whenever I had a problem to solve while coding my customers applications I turned to Rails and they usually had the most elegant solution available. So I did like the idea of digging into Rails code to learn more Ruby and bringing Rails magic to the <span class="caps">PHP</span> world. It also helped the fact that Rails inline documentation is excellent so it could be easily adapted for Akelos.</p> +<h4><em>What’s new since last time I posted about Akelos?</em></h4> +<p>The biggest change is the direction that the project has taken. Until now we have not dedicated time to promote Akelos, we just used it for our internal projects and we have been adding features as needed without a fixed roadmap or advocacy.</p> +<p>Now this has changed. More and more developers are using Akelos and contributing functionalities they miss from Rails. After some serious contribution proposals and many developers telling us how much they like Akelos, we decided to take the time to build a nice community site which includes <a href="http://forum.akelos.org/">forums</a>, a <a href="http://wiki.akelos.org/">wiki</a>, a new <a href="http://www.akelos.org/docs/tutorials/booklink">tutorial</a> and <a href="http://www.akelos.org/screencasts">a screen-cast</a>.</p> +<p>There are also some improvements like:</p> +<ul> +<li>Sintags, now accepts ruby-like calls to helper methods from the views.</li> +<li>Action Webservice, a component for creating and consuming Web Services easily.</li> +<li>Action Mailer, which allows you to receive and send (directly or in delayed mode) emails from within your application. (this is almost ready to ship)</li> +<li>Acts as tree behavior for Models.</li> +<li>Many performance improvements.</li> +<li>Many small contributions and bug fixes.</li> +<li>Code base reduced from 16MB to 9MB.</li> +</ul> +<h4><em>From the new site, it seems that Akelos is – or aims to be – a port of Rails for <span class="caps">PHP</span>. Is that true? Do you aim to target Rails developers as possible users of the framework in situations in which “they have no choice” but to use <span class="caps">PHP</span> instead of Ruby?</em></h4> +<p>Akelos has ported many Ruby on Rails components keeping their interfaces and functionality whenever it was feasible to port the Ruby code to <span class="caps">PHP</span>. It might be considered a port in the sense of functionality, but there are some Rails strengths that rely on the Ruby language and that are impossible to port to <span class="caps">PHP</span>. However, Ruby developers will find that Akelos is the <span class="caps">PHP</span> framework with is the closest to Rails.</p> +<p>On the other hand, many <span class="caps">PHP</span> developers have moved to Ruby because <span class="caps">PHP</span> lacked a hyper-productive and fun-to-use framework like Rails for building complex applications. That is no longer the case, and those who excel at <span class="caps">PHP</span> can start being productive from day one by using Akelos. In this way, Akelos target users are those who already know <span class="caps">PHP</span> and need to build complex applications that can run on almost any cheap shared hosting using a solid foundation based on good coding practices and widely accepted conventions.</p> +<h4><em>What Rails features are missing in Akelos?</em></h4> +<p>A standalone webserver like WebBrick, <span class="caps">RJS</span>, has and belongs to many through associations, string/number/date extensions and Active Resource.</p> +<p>Ruby-powered features like modules, runtime class overriding and blocks will never be available in Akelos.</p> +<p>Scaffolds in Akelos work by generating code, I found quite useless to enable $scaffold = true; and have magic functionality that you can’t modify, so I decided not to invest my time on that one.</p> +<h4><em>I noticed quite a few generators available for Akelos, do they work as a Rails developer may expect them to work?</em></h4> +<p>The ones that are available do pretty much the same as in RoR.</p> +<h4><em>How does Akelos compare to other similar <span class="caps">PHP</span> frameworks like, say, CakePHP? What features does Akelos offer which Cake doesn’t offer and vice-versa?</em></h4> +<p>I’m not aware of Cake’s functionalities. At the time I started porting Rails my feelings about CakePHP were that they missed the simplicity point in favor of architectural discussions that lead to confusing code, but that was long ago.</p> +<p>Akelos (and Rails) do not implement <span class="caps">ACL</span> like Cake does, as that is a business logic component that varies too much from one case to other, it has no place inside the framework.</p> +<p>Akelos is built with internationalization in its core. You can even internationalize your Models by prefixing the column name with the locale.</p> +<p>I think that Cake only has an act_as_tree behavior on models while Akelos has Tree, Nested Set, and List. Akelos also implements handy features from Rails like <a href="http://en.wikipedia.org/wiki/Optimistic_concurrency_control">optimistic locking</a>, <a href="http://www.martinfowler.com/eaaCatalog/lazyLoad.html">lazy loading</a>, <a href="http://www.martinfowler.com/eaaCatalog/singleTableInheritance.html">table inheritance</a>, counters, automatic transactions, really powerful validations, calculations…, and I think most of these advanced features are still missing on Cake, but maybe I’m wrong.</p> +<h4><em>Did you include unit tests for all the framework classes?</em></h4> +<p>The main components are fully unit tested, and no new code or patch gets into the trunk without unit tests.</p> +<h4><em>Did you or someone do any performance test or benchmarks on Akelos already?</em></h4> +<p>During the last month a lot of code was refactored to improve performance with the help of <a href="http://xdebug.org/">Xdebug</a>, <a href="http://kcachegrind.sourceforge.net/">Kcachegrind</a> and <a href="http://httpd.apache.org/docs/2.0/programs/ab.html">ab</a>. We significantly improved the performance in one of our most complex intranet applications, a <a href="http://www.basecamphq.com/">basecamp</a>-like system.</p> +<p>Akelos also implements caching at many levels, so it’s very easy to increase performance as we did with a new <span class="caps">CMS</span> that can handle +200 requests per second using <a href="http://www.apache.org/">Apache</a> in a cheap shared server environment.</p> +<h4><em>Why should a <span class="caps">PHP</span> developer choose Akelos over another <span class="caps">PHP</span> framework?</em></h4> +<p><a href="http://www.akelos.org/docs/tutorials/booklink#mvc">Akelos <span class="caps">MVC</span> implementation</a> and <a href="http://www.akelos.org/docs/tutorials/booklink#workflow">workflow</a> are really easy to understand.</p> +<p>In Akelos all the methods and interfaces are thoroughly selected, so whenever you need to do something you just need to type what you think. Default options are selected with care so you don’t need to set any configuration unless you want to modify the default behavior.</p> +<p>Coding multilingual applications, building complex relationships within models, distributing databases changes within your development team, building Ajax interfaces, unit testing your code and many other common tasks for <span class="caps">PHP</span> developers are really simple to accomplish when using Akelos.</p> +<p>Akelos is designed to work on PHP4 and PHP5 and it comes with an easy web installer you can adapt for your application. It has functions for working with files and directories in common situations when the web server runs as a different user.</p> +<p>And one of the main reasons for choosing Akelos is that it makes coding fun and lets you focus on solving user problems rather than wasting your time in repetitive technical annoyances. When coding with other developers the <em>convention over configuration philosophy</em> helps everybody to understand exactly how everything works and where to find things.</p> +<h4><em>Is there any website using Akelos already?</em></h4> +<p>The <a href="http://www.thechemicalbrothers.com/">Chemical Brothers</a> new website which has been developed by <a href="http://www.3ev.com/">3rd Eye Vision (3ev)</a> is using Akelos. </p> +<p>The <a href="http://www.akelos.org/">Akelos.org</a> site is running a <span class="caps">CMS</span> named Editam which we will release as Open Source in a near future.</p> +<p>Some small websites like <a href="http://www.fundaciocaixacarlet.com/">Fundacio Caixa Carlet</a> and many intranet/extranet sites that we’ve been coding during the last 2 years.</p> +<h4><em>What are your future plans for Akelos? Anything new on the way?</em></h4> +<p>A new manual, and a better <span class="caps">API</span> interface are the main priorities right now.</p> +<p>Continuing bringing Rails functionality as needed.</p> +<p>Releasing our sister project Editam <span class="caps">CMS</span> which will help developers who need to add functionality on the top of a <span class="caps">CMS</span> using a solid <span class="caps">MVC</span> framework like Akelos.</p>
@@ -0,0 +1,25 @@
+----- +title: "Beware of sudden upgrades!" +content-type: article +timestamp: 1198132860 +tags: "website|rails" +----- +<p>Yesterday I got a rather annoying early Christmas present: when visiting my site, I noticed that the raw source code of my dispatch.fcgi file (yes, I’m on shared hosting with FastCGI, for now) was displayed “as it is” instead of being interpreted.</p> +<p>After the initial moment of anger and stress (I immediately realized it was BlueHost’s fault, not mine), I opened two tickets and went to bed, hoping to see everything solved in the morning.</p> +<p>Unluckily it wasn’t the case, so I posted on BlueHost forum trying to be as polite as possible complaining because the issue wasn’t being dealt with. It turns out that for such issues you’re supposed to use the “Live Chat” feature instead of the tickets, so that’s what I did.</p> +<p>After a quick chat with “Christian”, it turns out that BlueHost decided to perform a server upgrade “silently” upgrading to Apache2, PHP5, MySQL4.1, etc. etc.<br /> +Cool, pity that nobody told me that!</p> +<p>I was expecting some sort of <span class="caps">PHP</span> upgrade (not that I care like that), which was supposed to happen according to the last BlueHost newsletter:</p> +<blockquote> +<p><em>“To alleviate any issues in the future with certain scripts that only run on one<br /> +version of <span class="caps">PHP</span> we have developed the ability to run PHP4 and PHP5 on the same server<br /> +simultaneously. This will be rolled out to all users in the next couple of weeks. Some<br /> +servers already have this ability while most will see it in the next two weeks.”</em></p> +</blockquote> +<p>But… hang on? Does it say anything about migrating to Apache2? I don’t think so! What’s worse, is that quite a few things changed with Apache2, in particular the way FastCGI handlers are declared:</p> +<div class='text'><pre><code># Apache 1.3: +AddHandler fastcgi-script .fcgi + +# Apache 2: +AddHandler fcgid-script .fcgi</code></pre></div><p>See? Different. This is due to the fact that <a href="http://wiki.rubyonrails.org/rails/pages/Debian+mod_fastcgi+Notes"><code>mod_fcgid</code> is used instead of <code>mod_fastcgi</code> on Apache 2</a>.</p> +<p>The fix was easy, of course, and now my site is up and running again (and actually running faster)… but, I wonder, why the hell wasn’t I informed? Is it acceptable? It sounds like I might end up on a <span class="caps">VPS</span> sooner than expected, unless BlueHost doesn’t roll out some new exciting feature soon, as I think it might…</p>
@@ -0,0 +1,10 @@
+----- +title: "Back from holiday" +content-type: article +timestamp: 1188442740 +tags: "personal|website|writing" +----- +<p>I’m back. I was so eager to go on holiday that I didn’t even bother writing a post about it, too bad. I actually when on holiday for a week but I thought I’d take three weeks off from my blog duties in favor of laziness and relax, but unfortunately my laptop decided to go wrong as well, so I didn’t actually manage to relax that much.</p> +<p>Now everything is fine. I still have to send in my laptop for assistance but it’s usable at least, and I finally found the time (and the money) to buy a desktop PC. I always wanted to build my own, actually, but in the end I decided to opt for a pre-made Fujitsu Siemens, mainly for economic reasons and time constraints. I won’t publish the specs, but it’s alright for me and my fiancée.</p> +<p>So what now? Well… the usual: more posts will soon be added to the <a href="/tags/simplyonrails">Simply On Rails</a> series, a Ruby-related article is on the way (it will be edited by the excellent <a href="http://www.cyberarmy.net">CyberArmy</a> Publication Editing Staff this time), I may venture in a site upgrade whenever they decide to release version 4.2 of Typo which is supposed to be imminent and I’ll eventually complete another pet project of mine, but that will take more time…</p> +<p>Stay tuned.</p>
@@ -0,0 +1,7 @@
+----- +title: "Understanding Boolean Search" +content-type: article +timestamp: 1134215836 +tags: "internet|google" +----- +These days, it is necessary to use a search engines to find the information you want. When the World Wide Web was smaller, search engines weren't an essential websurfing tool, but once the Web started growing exponentially, and hosting literally billions of documents and files, even normal searches aren't enough to find important information, especially when it is not readily available. So, I'm going to show you a more powerful way to search.<strong>Learning how to search</strong><br /><br />Imagine yourself in the shoes of someone who has never used the Internet before. That's pretty rare nowadays, but it does happen. Take my dad, for example, who recently asked me something like "Where can I find a map of the Internet?". I explained that there wasn't any such thing because the Web is too dynamic to be mappable, and that's why we use search engines.<br /><br />I introduced him to Google [1], and he has since started to use search engines regularly. He didn't have much luck on his first few tries, but eventually he learned how to search properly.<br /><br />Searching the web is easy (just type in a word and hit enter), but finding stuff can be tricky, especially if you don't know enough about a subject to narrow your search down. Most people (including myself) tend to find what they're looking for only after multiple searches: we start with a general item, check the results, and restrict the next search based on what we learned from the previous one. While this is generally successful, every once in a while you will find yourself oging in circles.<br /><br />Let's look at a sample situation: I want to learn Ruby on Rails [2] and I want a free host to try it out. So, I go on Google and type something like: <br /><br /><em>ruby on rails free hosting</em><br /><br />I immediately find various blog entries referring to a project that aims to offer free hosting to try out the Ruby-based framework "Rails Playground". [3] It seems to be the perfect solution - they offer, completely free, enough space to try out Rails. It's a pity they recently decided to close new account registration, so now the whole thing is useless.<br /><br />Variants of the search query mentioned above bring up stuff related to Rails Playground. The project became so well-known that almost every Rails-related blog mentioned it at some point as the only place offering free hosting supporting Rails. Since it is useless now, is there a way to prevent Google (or other search engines) from displaying Rails Playground related results? Yes!<br /><br />You would need something like this: <br /><br /><em>rails free hosting -playground -railsplayground</em><br /><br />In this new query I excluded the words "playground" and "railsplayground" using a minus sign before them so I would find other results that didn't refer to the project. In the end, I didn't actually find any other free hosting that supported rails, but I did find the following: <br /><br />- a company which offers free rails hosting for testing purposes (until they officially launch their service) <br />- a guy who offered some space on his private server for testing rails (no longer available) <br /><br />Although I didn't find anything equivalent to Rails Playground, I didn't waste time either going in circles or scrolling through tons of pages trying to find something else. Actually, most people know how to exclude (or include) words in Google searches but they rarely do it. Furthermorte, most people don't know that there are many more search functions available on almost all the popular search engines. These functions, like the minus sign, are called Boolean operators.<br /><br /><br /><strong>A few words about Boolean algebra: </strong><br /><br />Boolean searches get their name from George Bool[4], the inventor of Boolean algebra[5], which is a particular algebraic structure involving three fundamental operators: AND, OR and NOT. If you attended any math class or course you should be already familiar with it. If not, here is a short summary of some of the concepts I will discuss in upcoming sections.<br /><br />Using Boolean searches (rather than Boolean algebra), the expressions A, B, C, etc. can be considered words, and "A <Boolean operator B" can be considered search queries.<br /><br />- A AND B: pages must contain both words A and B.<br />- A OR B: pages must contain either the word A or the word B<br />- NOT A: pages must not contain the word A<br /><br />Trivial. Now let's see some more examples:<br /><br />- (A OR B) AND (NOT C): here I used brackets to create nesting, which causes expressions within brackets to be carried out before the rest, so the query means: "search for pages containing either A or B but which do not contain C".<br /><br />- (A OR (C AND D)) AND (NOT (F OR G)): similar but more complex than the previous: "search for pages containing either A or both C and D. Additionally, only F or G can be present, or neither of them".<br /><br />In some applications, like electrical circuits, NOR, NAND and XOR operators are also used to express Not OR, Not AND and eXclusive OR. As for search engines, only some of them support the XOR operator. A XOR B means that pages can contain either A but not B or B but not B.<br /><br /><br /><strong>Boolean search and Google</strong><br /><br />After reading this you might want to try typing Boolean expressions like "(food AND for) AND (cats OR DOGS) AND (NOT birds)" into a search engine, but that won't work. A Boolean expression typed "as is" rarely works on a search engine (it isn't supported because it's considered to be not user friendly enough). Google in particular adopted a more intuitive way[6] of performing Boolean searches. <br /><br />For starters, you almost always perform a Boolean search when searching something on Google simply because they decided (like most major search engines have) to automatically include the AND operator unless OR is specified.<br /><br />Searching the phrase "food for dogs" actually corresponds to "food AND for AND dogs" (using the proper Boolean expression). Presumably, this was done to prevent the search engine from delivering too many (and usually inconsistent) results. The other possibility (the default in MySQL's FULLTEXT boolean search[7]) would be to use the OR operator by default. Thus, searching for "food for dogs" might deliver results about food for cats, other pets, or even food in general. <br /><br />To improve the precision of their searches, Google also implements automatic exclusion for common words (like "for" in the example below). However, on occasion, a common word needs to be included in a search. To be fair,usually you will find what you are looking for, even with common words excluded. Nevertheless, to force Google to include a word, just add a plus symbol before it, like "+for".<br /><br />Similarly, a minus in front of a word (rails free hosting -playground -railsplayground) forces Google to exclude a word from the search query: in other words, the minus sign is Google's version of the Boolean NOT operator.<br />In order to transform the Boolean expression that I used at the start of this chapter - (food AND for) AND (cats OR DOGS) AND (NOT birds) - into a proper query accepted by Google, I have to write: "food for" "cats OR dogs" -birds. The OR operator <em>must</em> be specified, and anything in parentheses roughly corresponds to quotation marks because Google searches for the exact phrase enclosed in the quotation marks (also evaluating an OR operator, if present).<br /><br />The biggest limitation of Google when it comes to Boolean searches is the lack of support for nested expressions. Something like (food AND (NOT for)) AND (cats OR dogs) AND (NOT birds) cannot be translated into something like <em>"food -for" "cats OR dogs" -birds</em> because Google will not evaluate the "-" operator if it is enclosed in quotation marks. Something more complex like:<br /><br /><em>((food AND for) AND (cats OR DOGS) AND (NOT birds)) OR ((stuff AND for) AND (goats OR horses) AND (NOT (cows OR bulls)))</em><br /><br />cannot be translated into a Google-friendly query. Normal people probably won't ever do that complicated a search, but you never know...<br /><br /><br /><strong>All the other search engines, strategies and conclusions</strong><br /><br />There are various articles (see [8][9][10]) about how Boolean search has been implemented in various major search engines and AltaVista[11], AlltheWeb[12] and MSN Search[13] seem to support Boolean search features better than Google. All of them support the standard Boolean operators, as well as the "+" and "-" symbols, but apparently only MSN Search[13] seems to support full Boolean search queries with nesting: I actually managed to execute my previous complex example: <br /><br /><em>((food AND for) AND (cats OR DOGS) AND (NOT birds)) OR ((stuff AND for) AND (goats OR horses) AND (NOT (cows OR bulls)))</em><br /><br />and I got some decent results. The only (understandable) exception is that I had to specify +for to have the word "for" included.<br /><br />Although Boolean search is useful, it is not the only way to get relevant results as quickly as possible. Additional thinking is required to prepare a query properly. In everyday life, you won't really use heavily nested queries, simply because other methods are more effective. If you're interested in learning how to search I'd recommend a very informative article available at Waikato University[14].<br /><br />I found out that a mix between making multiple search attempts and using basic Boolean queries (word exclusion in particular) can deliver pertinent results fairly readily. Suppose you've heard something regarding a person named Halley who contributes to an IT-related community and that someone mentioned the word "kernel" when talking about him, and you remember that it wasn't referring to Linux. You could come up with something like: <br /><br />Halley kernel -Linux<br /><br />Et voila': Halley's CyberArmy Profile[15] appears as the first search result in Google! If you typed just <em>Halley</em> you wouldn't have found the right one right away; you would probably get more information about the Halley's Comet or the astronomer Sir Edmund Halley. If you typed <em>kernel Halley</em> you'd have found something about Kernel Halley on zZine first and then on CyberArmy lower down in the search results.<br /><br />Boolean search can be useful, but it must not be abused. Google's decision to implement only partial Boolean support without standard Boolean operation was probably the best choice to achieve both pertinent results and user-friendliness. <br /><br /><strong>Notes and further resources</strong><br />[1] Google Inc.: <a href="http://www.google.com/">http://www.google.com/</a><br />[2] Ruby on Rails framework: <a href="http://www.rubyonrails.org/">http://www.rubyonrails.org/</a><br />[3] Ruby Playground: <a href="http://www.railsplayground.com/">http://www.railsplayground.com/</a><br />[4] George Bool, Wikipedia Page: <a href="http://en.wikipedia.org/wiki/George_Boole">http://en.wikipedia.org/wiki/George_Boole</a><br />[5] Boolean Algebra, Wikipedia Page: <a href="http://en.wikipedia.org/wiki/Boolean_algebra">http://en.wikipedia.org/wiki/Boolean_algebra</a><br />[6] Google Help on Advanced Search: <a href="http://www.google.com/help/refinesearch.html">http://www.google.com/help/refinesearch.html</a><br />[7] MySQL FULLTEXT boolean search: <a href="http://dev.mysql.com/doc/mysql/en/fulltext-boolean.html">http://dev.mysql.com/doc/mysql/en/fulltext-boolean.html</a><br />[8] Search engines that implement boolean search (outdated): <a href="http://searchenginewatch.com/facts/article.php/2155991">http://searchenginewatch.com/facts/article.php/2155991</a><br />[9] Boolean Searching on the Internet: <a href="http://library.albany.edu/internet/boolean.html">http://library.albany.edu/internet/boolean.html</a><br />[10] How to choose a search engine or directory: <a href="http://library.albany.edu/internet/choose.html#logic">http://library.albany.edu/internet/choose.html#logic</a><br />[11] AltaVista Special Search Terms: <a href="http://www.altavista.com/help/search/syntax">http://www.altavista.com/help/search/syntax</a><br />[12] AlltheWeb Query Language: <a href="http://alltheweb.com/help/faqs/query_language#2">http://alltheweb.com/help/faqs/query_language#2</a><br />[13] MSN Search: <a href="http://search.msn.com/">http://search.msn.com/</a><br />[14] "The Assignment Process: Search Strategies": <a href="http://www.waikato.ac.nz/library/learning/g_strategies.shtml">http://www.waikato.ac.nz/library/learning/g_strategies.shtml</a><br />[15] Halley's CyberArmy Profile: <a href="http://www.cyberarmy.net/~Halley/">http://www.cyberarmy.net/~Halley/</a><br />
@@ -0,0 +1,7 @@
+----- +title: "The CakePHP Framework: Your First Bite" +content-type: article +timestamp: 1152842580 +tags: "cakephp|tutorial|review" +----- +<p>According to a recent study, <span class="caps">PHP</span> is one of the most popular programming languages in the world. In spite of this, <span class="caps">PHP</span> is often criticized for its inconsistent naming conventions, its lack of important features as compared to other languages (like namespaces) and its inherent disorganization. Furthermore, <span class="caps">PHP</span> is very easy to learn, and this has often led to the common misconception that most <span class="caps">PHP</span> developers are inexperienced and that their code is therefore prone to security vulnerabilities and exploits.<a href="http://www.sitepoint.com/article/application-development-cakephp">Read the full article</a> on <a href="http://www.sitepoint.com/">SitePoint.com</a></p>
@@ -0,0 +1,8 @@
+----- +title: "An overview of the CakePHP framework" +content-type: article +timestamp: 1148997020 +tags: "cakephp|review|tutorial" +----- +<p><em>“There are many frameworks available for the <span class="caps">PHP</span> programming language nowadays, and especially a lot of <span class="caps">RAD</span> (Rapid Application Development) frameworks which aim to make web development faster, less tedious and more organized. CakePHP was one of the first frameworks to port the <span class="caps">RAD</span> philosophy – which became so popular after Ruby on Rails – to the <span class="caps">PHP</span> programming language. CakePHP v1.0 is now one of the most popular and intuitive solutions for <span class="caps">PHP</span> programming, let’s discover why…”</em></p> +<p><a href="http://hades.phparch.com/ceres/public/article/index.php/art::cakephp::overview">Read the full article</a> on <a href="http://hades.phparch.com/artemis/main/">php|architect article repository</a></p>
@@ -0,0 +1,7 @@
+----- +title: "CakePHP - A 'tasty' solution for PHP programming" +content-type: article +timestamp: 1134057819 +tags: "cakephp|review|frameworks|webdevelopment" +----- +Web developers can either love or hate PHP, and one of the criticisms of this easy-to-use programming language which is repeated over and over on IRC, forums and blogs is that "PHP is disorganized".<br />Is this really true? If so, is there any possible way to write a PHP application in a logical and clean way? Read on...Every web developer has certainly heard of PHP. Some people like it and consider it a powerful and easy-to-use way to create complex websites or web applications, while others are convinced that it is merely a bad copy of Perl. Opinions are certainly mixed on the matter.<br /><br />One thing to keep in mind when reading criticisms of PHP is its origins, as therein lies the crux of the matter. PHP was created as a form interpreter, initially offering only a <em>very limited</em> range of functionality. Its main purpose was to make life easier for web developers who wanted to do simple tasks, like manipulating form data.<br /><br />People liked the concept - PHP was free and it quickly became popular among developers. More functionality was added and continues to be added with each new release, and PHP is now one of the most popular and powerful programming languages available for web development.It is relatively easy to learn, compared to Perl, ASP, or JSP, and it can be used for almost anything[1].<br /><br />The sheer simplicity of the language was most likely the cause of the enormous amount of exploits discovered through the years which earned PHP the label "<em>too dangerous to use in 'proper' applications</em>". The danger, however, lies not in the language itself, but rather in the <em>way</em> developers make use of the language: PHP's simplicity makes writing bad or exploitable code extremely easy. Furthermore, PHP's ability to be placed within any HTML page with the greatest of ease tempted developers to write ever-increasing amounts of 'spaghetti code', which by its very nature is neither organized nor clean code, and certainly does not help a developer learn how to write organized or clean code.<br /><br />These problems, however, can be solved. There are many ways to go about doing this, but the easiest, most effective way is to create a framework[2]. <br /><br /><br /><strong>Bringing Order to Chaos</strong><br /><br />After learning some PHP myself, I remember noticing that my applications were growing in a disorganized and uncontrollable manner. Things tended to be added at the last minute, and bugs were fixed and patched 'on the fly' wherever they occurred. PHP lacked the structure that is present in most other programming languages. I remember reading the word <em>framework</em> for the first time not too long ago while I was downloading a Windows Update of the .NET framework[3]. That inspired me to start searching the Internet for a 'PHP framework'. That led me to an interesting blog entry[4] where a solution was proposed - a solution to <em>bring order to chaos</em>:<br /><br /><fieldset><blockquote><br />[...] The answer is simple: create our own class library, some kind of framework, the PHP framework. The similar in many ways to that one which is already well known to Java or .NET programmers. We could set the standards, structure and main guidelines. [...]<br /></blockquote></fieldset><br /><br />That blog post made me think about developing my own framework, until I noticed that there were many projects already in progress, and some in fact completed; the end result being a fully functional PHP framework. I read a lot about some of them[5], and abandoned the idea of developing my own, because as a good developer, I believe I should never re-invent the wheel. So I kept looking. I found Pear[6], although that's more a repository of PHP classes with a common standard than a framework, while I was looking for THE solution to developing many types of applications, not merely how to do one thing in particular.<br /><br />I came across a very promising project named Prado[7], which won the latest Zend contest, and was considered the best PHP5 application of the year. It is a masterpiece of coding and PHP5 usage, so I tried to learn it. I even developed a website with it.<br /><br />Prado lets the developer design the application without imposing any ready-made components, but I found its event-driven[8] approach neither easy to learn nor suitable for everyday web applications. I did not like the idea of having to code a reaction to every event (like a click on a button or different phases of page rendering): that is the approach that ASP takes, and at least in that respect, Prado seems to be inspired by the .NET framework. Event-driven programming is suitable for GUI development and desktop-based interfaces, but not for web applications.<br /><br />After trying Prado, I was still unsatisfied, so I once again began my search for a solution to improve my programming. My meanderings took me to Ruby on Rails[9], one of the most recent examples of technology hype on the Net. At the same time,to a certain extent, it is also a successful tool. <br /><br /><br /><strong>The Rails Phenomenon</strong><br /><br /><fieldset><blockquote><br />"Rails is a full-stack, open-source web framework in Ruby for writing real-world applications with joy and less code than most frameworks spend doing XML sit-ups."<br /></blockquote></fieldset><br /><br />That sounded like what I was looking for, and I started reading more about it in the vast and varied help sections[10] available both on and off of the official site. The Rails team did an outstanding job promoting and marketing the framework, and also in providing comprehensive textual documentation (and even video tutorials) to help both beginners as well as experienced programmers get started with it.<br /><br />Briefly, Rails uses Ruby's object oriented programming, in conjunction with the MVC pattern and various automated scripts (generators), to help developers program their applications quickly and in a solid and organized way. However, as that is neither clear nor convincing, let's spend a few moments on the MVC Pattern[11], which will also be useful to understanding the following sections.<br /><br />MVC stands for <strong>M</strong>odel <strong>V</strong>iew <strong>C</strong>ontroller: these three words enclose - and this is just a personal opinion - all the wisdom and philosophy of web development, describing - once again, in my opinion - the three most logical parts a web application <em>should</em> be divided into to achieve code robustness, order and power, all at the same time. Let's look at what each of the component parts mean in detail:<br /><br /><ul><br /><li>Model: The model represents the very essence of the </li><em>information</em> and <em>content</em> of a web application. Imagine this as an object able to gather the information and content of your webpages from a particular resource, such as a database. The model is the only entity able to access resources.<br /><li>View: The view is an attempt to separate the most unstable part of an application: the user front-end. A view is only responsible for presenting the information that the Model gathered. A view does nothing but format the output, and can be compared to a template or report. In all MVC frameworks for web applications, only view files contain </li>(X)HTML code, and mostly only that. They can therefore be changed <em>at any time</em> without having to touch a single line of the business logic of your application.<br /><li>Controller: The controller is the 'brain' of the application. Consider it to be the only part of your program that can 'think' and manage the other parts. Controller files are the only ones able to </li><em>order</em> the Model to gather information and then pass the information obtained to the view for display. <br /></ul> <br /><br />Although the MVC seems to make things more complicated, that is part of the objective. Since one of the advantages (and weaknesses) of PHP was its simplicity, the MVC adds complexity to bring more order and logic to the design process. The three entities are separated for just that reason, and trying to put them together can result in potential disasters, since it causes the whole pattern to fail.<br /><br />Coming back to Rails, I was quite impressed by the features it offered, but there was a small problem: the Ruby programming language itself. I experienced some difficulties in setting up the environment properly, and I also discovered that most standard hosting companies do not offer Ruby hosting plans as standard. Hosting issues aside, I would have had to learn Ruby in order to master Rails, and I really did not have the time for that: I had to develop a website quickly and easily, preferably with languages I already knew.<br /><br />After deciding to abandon Rails (for the moment, anyway), I was amazed by the number of projects in other programming languages that try to emulate the famous Ruby framework, to the point of being considered <em>clones</em> or ports of it to another language. To my knowledge, the <em>Rails disease</em> contaminated the following programming languages:<br /><br /><ul><br /><li>PHP</li>[12]<br /><li>Python</li>[13]<br /><li>Java </li>[14]<br /><li>Perl </li>[15]<br /></ul><br /><br />I said <em>disease</em> because Rails developers think that Ruby on Rails was made in Ruby for a reason, namely that Ruby offered some unique features that were not available in other languages. I will not delve into that topic here; more information is available[16] for those who are interested. However, suffice it to say that there are some Rails ports in PHP that were immediately attacked because of the fact or legend that the creator of Rails originally wanted to develop his framework in PHP and then switched to Ruby. Let's examine one of those PHP frameworks in detail.<br /><br /><br /><strong>CakePHP: Just Another Rails Clone?</strong><br /><br />I chose to learn CakePHP (or "Cake")[17] mainly because it offered more features than the other two PHP alternatives. It also seemed to be a more original and actively developed project. In particular, I'd like to quote one of CakePHP's developers, from when he introduced the framework in a comment to a blog post[16]: <br /><br /><fieldset><blockquote><br />"While it's difficult to copy Rails in PHP, it's quite possible to write an equivalent system. I like the terseness of Ruby code, but I need the structure that Rails provides, how it makes me organize my code into something sustainable. That's why I'm ripping off Rails in Cake."<br /></blockquote></fieldset><br /><br />Cake's developers (bakers?) are developing their own framework which uses many principles of Ruby on Rails, revisited and re-proposed in an extremely flexible and easy to use PHP tool, rather than simply trying to port Rails to PHP. I also liked the fact that they bothered to choose an original name for their project, unlike others: there are too many "<insert language here>-on-Rails" frameworks, and while the whole "Rails" thing is innovative and catchy the first time, it loses its appeal quickly when people use the word everywhere just because it is "fashionable".<br /><br />Quoting from CakePHP's website:<br /><br /><fieldset><blockquote><br />"Cake is a rapid development framework for PHP which uses commonly known design patterns like ActiveRecord, Association Data Mapping, Front Controller and MVC. Our primary goal is to provide a structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss to flexibility." <br /></blockquote></fieldset><br /><br />That sounds like the Holy Grail for PHP developers, and I must admit I'm quite impressed myself after using it on various little projects, but is it really all true? What are Cake's features? Are there any limitations?<br /><br /><br /><strong>The Ingredients</strong><br /><br />So what is Cake? In the previous sections, I introduced some general concepts and ideas common to Ruby on Rails and CakePHP, but nothing in particular was said about the structure of the framework itself. Let's now turn to that and discuss it in some detail, particularly as it pertains to Cake.<br /><br />The first thing to understand about Cake (and Rails as well) is that one of their aims was to avoid editing long and complex configuration files in order to run the environment. The approach in this sense is to use <em>conventions</em> over <em>configuration</em>. This may sound terribly restrictive, but in reality it proved to make things much simpler. After all, I said I wanted to use a framework because I needed a solid structure to base my applications on, not that I needed to be able to create and personalize my own structure and system. Cake uses some simple rules in order to run properly, and the easiest way to explain them is through Cake's directory structure, which represents the skeleton of every CakePHP application.<br /><br />/<br />---app/<br />------config/<br />------controllers/<br />---------components/<br />------models/<br />------plugins/<br />------views/<br />---------elements/<br />---------errors/<br />---------helpers/<br />---------layouts/<br />---------pages/<br />------webroot/<br />---------css/<br />---------files/<br />---------img/<br />---------js/<br />---cake/<br />------config/<br />---------inflections/<br />------docs/<br />------libs/<br />---------controller/<br />---------generator/<br />---------model/<br />---------view/<br />------scripts/<br />---tmp/<br />------cache/<br />------distro/<br />------logs/<br />------tests/<br />---vendors/<br /><br />I expanded only the first three levels of the tree, although there are more levels in the <em>/cake/</em> directory. They won't be considered here simply because the <em>/cake/</em> directory contains CakePHP's internal libraries, which normally will not be modified when developing an application. The <em>/tmp/</em> directory also will not be elaborated upon either, because it is only used to store temporary files. However, the <em>/vendor/</em> directory should contain third party scripts and libraries that you may want to use in your application, but they are not normally integrated with Cake's framework. 95% of your application will reside within the <em>/app/</em> directory, which we therefore need to examine in greater detail.<br /><br /><span style="text-decoration:underline;"><em>/config/</em></span><br />When I said that Cake strives to use conventions over configuration, I really meant it. This directory does not contain thousands of configuration files, only five very small ones. They represent the only items which <em>might</em> need to be configured. <br /><br /><ul><br /><li>acl.ini.php: This file must be edited only if you plan to use Cake's default ACL </li>(access control list) system for your application. It sets permissions for the application, so it should be used to list every group, user, and their respective rights. This can be useful for small sites with a few well known users, but for anything else, you should develop your own ACL or authentication system that relies on a database. <br /><li>core.php: This file can be edited to change some default options, such as the level of the error messages and notices that the application will output. This comes in very handy while developing an application.</li><br /><li>database.php.default: This should be renamed to database.php and edited if you plan to use any databases with Cake. The settings are fairly straightforward, and include the type of database used </li>(mysql, postrgres, sqlite, or any other supported by the AdoDB library[18]), username, password and database name.<br /><li>paths.php: Unless you are very particular, you should leave this file alone. It tells Cake where to look for CSS files, images, controllers, etc. If you are planning to adopt Cake's directory structure - which is the most logical option - you can ignore this.</li><br /><li>routes.php: Following Rails' example, CakePHP features a "routing system" for user-friendly URLs. By default, your URLs will look like this: </li><em>http://sitename/controller-name/action-name/eventual/action/parameters</em>, which is a really nice way to organize a site, but you may want to change something if you have particular requirements. <br /></ul><br /><br /><br /><span style="text-decoration:underline;"><em>Controllers</em></span><br />As mentioned previously, a controller represents the "brain" of the MVC pattern, the part which controls what the other parts are doing. Imagine a controller like a section of your site: its name will be present on the address bar, and each of these sections will have a file named <something>_controller.php, and will also contain a class named SomethingController that extends the AppController class. This class will have some methods that correspond to some standard actions like <em>index</em> (the default action called when you access the <a href="http://sitename/controller/">http://sitename/controller/</a> page) or other user-defined ones like <em>add</em> or <em>list</em> or <em>admin</em>, depending on the application. As a general rule, you want to add any 'business logic' you want to implement in your application in controllers - for example, calculations or a database query that produces a result. <em>Then</em> once all the mess is done, the result (usually an array or a variable) is passed to the view (see <em>views</em> below). <br /> <br />If this is starting to sound too technical for you, I recommend reading a tutorial[19] available on the CakePHP website about creating a simple blog application. The tutorial will explain most of Cake's basics, including how to pass a variable from a Controller to the corresponding view <em>($this-set('variableNameInView', $variable))</em> and other useful things.<br /><br />Recently <em>Components</em> have been added to CakePHP, and quoting from the corresponding wiki page[20]:<br /><fieldset><blockquote><br />"Components are the preferred way to provide additional functionality to your controller. To make a component available you would add var $component = array('myComponent') inside of your controller's definition, add your file to the /app/controllers/components, name your class MyComponent, and create your methods."<br /></blockquote></fieldset><br /><br /><br /><span style="text-decoration:underline;"><em>Models</em></span><br />A model is an object able to access the database. In Cake's terms, that is any class extending the AppModel class. That class is directly under the <em>/cake/</em> directory (along with the previously mentioned AppController class), and can be moved to the <em>/app/</em> directory and modified if you want to add some particular site-wide behavior to it which will be inherited by all models extending it.<br /><br />In even simpler terms, you need to create a Model class for every table you're planning to use in your database. A convention in Cake says that database table names should be plural and that the corresponding model should be singular. If you use a table named 'mice', your model should be named 'mouse': Cake is smart enough to understand irregular plurals through an <em>Inflector</em> class.<br /><br />Creating a model class for basic use is trivial:<br /><br /><br />class Post extends AppModel<br />{<br /> var $name = 'Post';<br />}<br /><br /><br />Then you'll be able to access the model (and therefore the database) from a controller via simple instructions like $this->Post->findAll(). This instruction will query the database and return all records within the Posts table in your database. You can also perform more complex operations, and also specify SQL queries to execute, if you need to, but remeber that models can only be accessed through controllers! If you need some information stored in your database to be displayed on a view, execute the query from the controller and pass it to the view as per the MVC pattern. It can prevent you from cluttering views with business logic and thereby making code updates much harder.<br /><br /><br /><span style="text-decoration:underline;"><em>Views</em></span><br />Views are used to present information gathered with a model and a controller to the public. They are mostly HTML pages with some PHP tags in them, prints of variables and maybe some <em>foreach</em> loops. Nothing more than that should be used in a view!<br /><br />Views must be placed in this directory and obey the following conventions:<br /><br />1. They must be named after a controller's action to allow the controller to refer to a particular view automatically. The same view can be used by multiple controllers, but it must be either set manually or through a layout (see below).<br />2. Views referring to an action of a particular controller must be placed under a subfolder named after the controller.<br />3. All views must have a .thtml extension.<br /><br />Any site-wide view, like the site's template, must be placed under the <em>layouts</em> subfolder. In particular, the default.thtml file in the folder represents the global template for your application: page titles and specific pages (views) will be invoked automatically by using $title_for_layout and $content_for_layout respectively.<br /><br />Similarly to what was said about components, <em>helpers</em> can be used to extend views functionalities[20]:<br /><br /><fieldset><blockquote><br />"Helpers are all about the view. You know about the helpers in Cake, but you need a little bit more. You want to have your own methods to display formatted info. To achieve this, you need to add var $helpers = array('myHelper').<br /><br />Now, throw your myhelper.php file into the /app/views/helpers/, create the class MyHelper, and $myHelper is available in the view." <br /></blockquote></fieldset> <br /><br />Cake comes with some very useful default helpers to create links and HTML tags, import JavaScript, create forms, and use AJAX code easily. Unlike most other frameworks, Cake neither has nor uses a third party template engine (like Smarty[21]) for views, but helpers can be used to achieve similar results more quickly than an engine can.<br /><br /><br /><span style="text-decoration:underline;"><em>Plugins</em></span><br /><br />Plugins are user-developed enhancements for Cake. Unlike the files placed under the <em>vendor</em> directory, a plugin is an application specifically made to be used within the CakePHP environment. At the moment this feature is still under development.<br /><br /><span style="text-decoration:underline;"><em>Webroot</em></span><br /><br />If you read carefully what I wrote above about routes, you might be wondering if <em>every</em> page must have a controller and a view in order to be displayed properly. What about images, JavaScript and CSS files? The answer is this directory: everything you place here will not be seen as part of the MVC-based environment; CSS files can be stored in the <em>/css</em> folder, Javascript under <em>/js</em>, and so on. Additionally, some helpers can provide a easier way to access or display images, scripts, CSS, etc.<br /><br /><br /><span style="text-decoration:underline;"><em>Other Features</em></span><br />Cake offers even more than this; the latest releases have introduced a few more Rails-inspired features:<br /><br /><ul><br /><li>Scaffolding: Do you want to test your application without spending time writing all the CRUD </li>(Create, Read, Update, Delete) code? That's where the concept of scaffolding comes in: by setting a few variables in the right places[22], Cake will generate basic mechanisms to add, edit, list, and delete records in your database, along with all the associated view files. You won't have to code a single form, as everything will be generated automatically by the framework according to SQL field types.<br /><li>Bake: Another Rails-inspired feature revisited in PHP. Rails uses a set of scripts and in particular the </li><em>rake</em> utility to instantaneously create the foundation for a Rails application with scaffolds already in place. CakePHP offers the same functionality through the <em>bake</em> utility, which is currently available as either a batch file or a PHP script.<br /><li>ACL: As previously mentioned, Cake comes with a ready-made Access Control List </li>(ACL) system, which can be extended and used to restrict particular areas of a Cake application to certain users or user groups.<br /><li>Compatibility: CakePHP is fully compatible with both PHP and PHP5.</li><br /></ul><br /><br /><br /><strong>Meet the Bakers</strong><br /><br />After reading all these things about CakePHP and its framework, you may have some questions, or be curious about some aspect of the project. PHPNut and gwoo, two of CakePHP's creators and lead developers, offered to answer some questions exclusively for zZine readers. This interview took place on Oct. 26th, 2005, in #dev-cakephp on irc.freenode.org.<br /><br /><em><span style="text-decoration:underline;">h3rald</span>:</em> Thanks to both of you for allowing me to interview you about your project, CakePHP. Where did the name come from, anyway?<br /><br /><em>PHPnut:</em> The original project was started by Michal Tatarynowicz aka Pies (hence the name), and when I saw his release, last March, I decided to contact him. I told him that the company I own supports projects like Cake, and also that I was in the process of developing something along the same lines. <br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> Is Cake released under the GPL? How many developers are helping out?<br /><br /><em>gwoo:</em> Cake is released under the MIT license, and the development team is composed of me and PHPnut, plus four other contributors. Then there's the Documentation Team, currently 3-5 people. Documentation has to follow the releases, so it usually lags behind a bit: we made so many modifications in the recent release that the Doc Team has a lot to catch up on, but it's getting there.<br /><br /><em>PHPnut:</em> With this release you will see that the docs are going to be much better. The code is very stable now, and hopefully very little changes on that.<br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> Some people, at first glance, may think that Cake is a PHP port of Ruby on Rails. How true is that? What are the differences and similarities between these two frameworks?<br /><br /><em>PHPnut:</em> Cake started as a port, but has evolved into something more: we discussed using the concepts that RoR offered and including them in a framework for users of PHP. I have used PHP for a number of years, and I am comfortable with it; this is where my passion is, and I think people who use Cake have those same passions as we developers do.<br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> I read once that Rails was developed in Ruby because only Ruby can offer certain functionalities and features...<br /><br /><em>gwoo:</em> I would disagree, and I think that is proven in what we have done: sure RoR has a built in server and some other nice things, but PHP is everywhere.<br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> Some developers, especially Perl programmers, tend to consider PHP an "inferior" language sometimes. What do you think of that?<br /><br /><em>PHPnut:</em> My name says what I think about them all.<br /><br /><em>gwoo:</em> PHP is a web programming language; that's what it was designed for, and that's what it does best: It all boils down to what you are comfortable with.<br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> Did you try any other PHP frameworks, MVC-based (Mojavi, for example), or event-driven, like Prado? What do you think about them? In what ways can Cake be better or worse?<br /><br /><em>gwoo:</em> They are all so complex, in my opinion, and I tried nearly all of them. Cake breaks apart the MVC and handle the CRUD in a logical way, and Cake syntax is super easy to learn.<br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> Ruby on Rails has been ported to various languages, including Java and Python. There are three PHP frameworks inspired by the famous Ruby project: Biscuit, PHP on Tracks and CakePHP. What do you think of that? Any chance of a merge? Did you have a look at them?<br /><br /><em>gwoo:</em> You forgot Symfony[27], a PHP5-only port: I tried it but it seems much harder to learn than Cake.<br /><br /><em>PHPnut:</em> I could be wrong, but I think these other projects are behind us in ease of use, in what the framework is capable of doing, and in features, not to mention community support.<br /><br /><em>gwoo:</em> I tried all of the PHP ports of Ruby on Rails and none of them has the features, the community,or a lexicon as good as Cake's.<br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> Why don't you consider CakePHP a port? In what way is it evolving from Rails?<br /><br /><em>PHPnut:</em> Rails and CakePHP share a lot: MVC pattern, Active Record pattern...but we're not strictly following Rails, and we're able to think by ourselves. Recently we changed the directory structure, and in my opinion our is more functional than the Ruby on Rails one.<br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> What can Cake be used for? What kind of projects? Are there any limitations?<br /><br /><em>gwoo:</em> Personally I think that Cake is the most extensible framework out there for PHP: with components, helpers and vendor access you can do anything you want!<br /><br /><em>PHPnut:</em> We are limited only by what a web server (generally Apache, but IIS seems to work as well) and a database can do. We may be limited by PHP itself, but we twist that in our own little sick ways sometimes.<br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> Any thought about AJAX? I saw some nice demos made with Cake. What do you think of this new trend in web development? Some people consider it the future, while others are concerned about compatibility, and still others are relatively indifferent to it. What about you?<br /><br /><em>gwoo:</em> AJAX can be very useful in creating an application, but should not be overused. People have become very comfortable with how the Web works:i f you start doing tons of drag and drop and no refreshes, users will feel lost in how to operate the site.<br /><br /><em><span style="text-decoration:underline;">h3raLd</span>:</em> Thank you very much for your time, both of you. Is there anything you'd like to add to this interview? Something you'd like to say to users interested in trying out Cake?<br /><br /><em>PHPnut:</em> Come and enjoy: we are here to help...<br /><br /><em>gwoo:</em> ...And plan to be here for a very long time!<br /><br /><br /><strong>Let's cook...</strong><br /><br />One of the most positive things about CakePHP is that even though it is a fairly new project (most of the code is 100% useable already,but they still consider the projectto be in the 'alpha' stage), it's maintained by many dedicated developers and PHP enthusiasts. I was amazed to see how the whole documentation evolves and is quite literally updatedon a daily basis. <br />Anybody can contribute to the framework or simply test it and share their experiences.<br /><br /><span style="text-decoration:underline;"><em>CakePHP Wiki</em></span><br /><br />Anybody can register an account for free and contribute tutorials and documentation to the new CakePHP Wiki[23]. This is currently the most up-to-date source for documentation files and tutorials.<br /><br /><span style="text-decoration:underline;"><em>CakePHP User Group</em></span><br /><br />If you need assistance or you want to contact the Cake developers or other Cake users, you can post a message on their Google User Group[24]: people will reply with useful comments, usually on the same day, and the developers <em>do</em> listen to user suggestions.<br /><br /><span style="text-decoration:underline;"><em>CakePHP IRC Channel</em></span><br /><br />If you want to offer (or receive) real-time assistance, feel free to join #cakephp on FreeNode (irc.freenode.org). I went there disguised as a total newbie (it wasn't much of a stretch) and they helped me a lot, explaining basic concepts of the framework and pointing me to the right documentation files.<br /><br /><span style="text-decoration:underline;"><em>CakePHP Development</em></span><br /><br />Experienced PHP developers are more than welcome to contribute to the project. People may be accepted to the core development team if they have sufficient knowledge and spare time, or alternatively,components or code can be submitted through the newly created CakeForge[24]. <br /><br /><br /><strong>...Or Just Eat</strong> <small><em> by Marc Abramowitz</em></small><br /><br />If you don't feel ready to contribute and you'd like to try out the framework first, it can be downloaded directly from the CakePHP site[25] as either a <em>release</em> or a <em>nightly</em> build: the zip file is less than 300KB.<br /><br />I wanted to include a <em>success story</em> written by Marc Abramowitz, an experienced PHP programmer who decided to adopt CakePHP as a framework to use in a production environment: he persuaded his colleagues to use it and they all seem happy with it. He writes:<br /><br /><em>For the past few years, I've done quite a bit of work in PHP, working on production code that runs on a very high traffic web site. PHP has served us well, as it is easy to write and read, quite efficient, and easy to integrate with existing C++ code as the site grew.<br /><br />Lately, there has been a lot of buzz in the web development community about Ruby on Rails. Like many others, I took some interest in Ruby on Rails because I was intrigued by the apparent power and elegance of Ruby and because I wondered if a Model/View/Controller (MVC) framework like Rails would help enforce a more consistent code structure that would make the code easier to understand and maintain. Additionally, I wondered if an MVC framework would enable very rapid prototyping.<br /><br />Some people are very wary of frameworks that impose structure, as they like to have the freedom to do things however they want. However, there is a tradeoff between structure and flexibility. If you're working on a small team or a relatively small project, then you may not find structure to be very helpful; you may even find that it gets in your way. <br /><br />However, as teams and projects get larger, structure becomes more and more valuable, as it enforces consistent patterns of how to do things and rather than being something that limits, it in fact liberates, because it abstracts away the small details and allows us to therefore concentrate on the larger problem. Think of the lines that are painted on our roadways - although they add structure, we don't find them to be limiting. On the contrary, they help us to drive without worrying about crashing into each other at every moment - they free us from being concerned with small details so that we can concentrate on getting where we're going.<br /><br />Rapid prototyping appeals to me, because I find it helps me to better present my ideas for new apps and features. A mockup can only go so far - there is no substitute for a working prototype. When clients get their hands on a functional prototype, they get a better idea of what is possible and it forces them to clarify their requirements for the product. This results in a better dialogue between the developer and the client, which leads to better upfront decisions, more stable requirements, less stress, and a better product.<br /><br />So, Rails appealed to me not only because of the potentially valuable structure that it could add, but also because it could enable rapid prototyping. However, I knew that there was no chance of Rails being used for production code in my organization, because we run some very high traffic web sites that require the utmost in efficiency. We are also by and large a PHP shop.<br /><br />However, when my manager approached me and asked me to develop a database-backed internal tool, I thought of Rails again. I then considered the fact that I would probably someday have to hand this app off to someone else, and that someone would probably know PHP but not Ruby. Heck, even I had several years of experience with PHP (including writing some PHP extensions) but I had only done a little bit of reading about Ruby, and I also had no practical experience with it.<br /><br />Furthermore, with PHP I had access to a large number of PHP extensions that wrapped various internal libraries. So PHP was the natural choice. Ideally, I wanted to use PHP with a Rails-like MVC framework that would facilitate rapid development, and this is what led me to CakePHP.<br /><br />I began by downloading CakePHP 0.9.2 and following the sample tutorial that walks you through creating a simple blog application (note that at the time of this writing, the current version of Cake is now 0.10.0.1076, so some of the details of using Cake have changed). I was pleased to find that the process was quite similar to the process for Rails. One difference that I noted was that Rails tutorials always emphasize using scripts to generate models, controller, and scaffolds, whereas the Cake tutorial walked me through explicitly writing out all the code. I noticed that the Cake download came with a script called "bake" which looked like something that could potentially do some of the code generation, but since it wasn't mentioned in the tutorial, I chose not to use it.<br /><br />The process of creating a first application using the tutorial was quite easy. Here are the steps in brief (consult the tutorial for more details):<br /><br />1. Create the database table. Cake requires tables to have some extra<br />fields:<br /> - id, an auto_increment primary key<br /> - created, a datetime<br /> - updated, a datetime<br />2. Configure Cake to access the database by editing the config/database.php file<br />3. Create a model class which extends AppModel (a Cake provided class)<br />4. Create a controller class which extends AppController (a Cake provided class) and write one or more controller methods<br />5. Create a view which is a PHP file with a .thtml extension and is meant to be mostly HTML with very little embedded PHP - typically just echoing of variables and some simple control structures like <em>foreach</em>.<br />Cake also provides some simple convenience methods that write out certain HTML constructs for you.<br /><br />That's it! That alone is enough to create a basic but functional application. The tutorial goes on to show you how to add additional functionality to the blogging app. After that there's a shorter, more advanced tutorial that shows you how to add a few more things to the blogging app.<br /><br />Once I had gotten comfortable with Cake by following the tutorial, I proceeded to write my own application. Getting started was easy - I followed the same steps as in the tutorial to create my first table, model, controller, and views, then my second table, model, controller, and views. Then my app got a bit more complicated. I needed to have many-to-many relations and more elaborate queries than the default ones that Cake provides. I began to worry that Cake would break down here. I had heard people grumble that MVC frameworks like Rails and Cake were great for little toy apps that only do CRUD (Create, Read, Update, Delete), but that they couldn't handle complex queries using joins and the like. I poked around in the Cake source code and was pleased to find that there were nice lower level methods that allowed me to bypass the Cake defaults and do whatever custom queries I liked. For example, I wrote something like this in one of my models:<br /><br />function index(){<br /> return $this-findBySql(<br /> "SELECT id, title, AVG(rating) avg_rating, MIN(rating) min_rating, MAX(rating) max_rating, COUNT(rating) num_ratings " .<br /> "FROM ideas LEFT JOIN ratings ON ideas.id =<br />ratings.skill_id " .<br /> "GROUP BY id " .<br /> "ORDER BY title");<br /> }<br /><br /><br />So what I have is a model that does <em>not</em> have a one-to-one mapping with a single table. It actually retrieves data from more than one table.<br /><br />Over time, I picked up a few more Cake concepts. For example, at some point we decided that every page of the app would have a similar look and feel with a particular masthead and logo, and all the pages in one section of the site would show tabs for all of the various views with the currently selected tab highlighted. At first, I just used the same code at the top of each of my views to display the masthead, logo, and tabs. This, of course, became a pain when I needed to change the layout, since I needed to make the same change in several different views.<br /><br />Then one day I realized that Cake had a concept of layouts, which are high level templates in <em>app/views/layouts</em> that define the basic structure of pages. The individual views are just content that gets embedded in these high level layout templates. So I took the common masthead and logo, put it in my default layout, and removed it from the individual views. Now when I wanted to change the look of the masthead, I only had to do it in one place. For the tabs, I discovered the concept of elements. I placed the code for my tabs in <em>apps/views/elements/tabs.thtml</em>. Then the tabs could be displayed in any template using:<br /><br /><?php echo $this-renderElement('tabs') ?<br /><br />Rather than stick the above statement in all of the many pages that were supposed to display tabs, I created a new layout in <em>apps/views/layouts/tabbed.thtml</em> (which uses renderElement to render the tabs). Then I used<br /><br />$this-layout = "tabbed"<br /><br />in the controller to tell it to use the tabbed layout rather than the default (non-tabbed) layout.<br /><br />After a couple of days of work on this application, it was time to demo it to the VP, who was very impressed with what I was able to accomplish in such a short period of time. It was brought up that before I took on the project they had asked some other folks how long it would take them to build it in Java and they had said that it would take on the order of months what I had built in a couple of days. Morals of the story:<br /><br />1. Cake is very lightweight and productive<br />2. Cake might be very beneficial to your career<br /><br />Eventually, I was assigned to another project and my manager wanted me to transition my Cake project to another engineer, who was experienced with PHP but not with Cake. I sat down with the new engineer and in about 20 or 30 minutes of explanation and walking him through the code,<br />he felt ready to code. Not only did he feel that he knew enough to start working with the application, I could tell from the smile on his face that he was very impressed by the power and succinctness of Cake, which was the same reaction that I initially had. After a couple of days, I checked back with him and he had made a remarkable amount of progress on the application - there were a ton of new pages and features.<br /><br />So you see, Cake is a very productive environment. For a very small investment in the initial learning curve, you can get a significant increase in productivity.<br /></em><br /><br /><strong>...And the icing?</strong><br /><br />So that's what CakePHP is about. The project may only have just entered alpha stage, but the code is already very stable and useable, as PHPnut, gwoo and Marc said. So what's going to be included in the beta and stable releases? I researched a bit and asked the developers, and here's how Cake will probably evolve in the following months:<br /><br /><ul><br /><li>Cake's built-in </li><strong>data-validation</strong> capabilities will be extended. A validator class - which already exists, by the way - will be extended to include more data types and expressions to be validated before being stored in a database. <br /><li>A new default </li><strong>ACL system</strong> will be included and will support database access and .ini files as well. <br /><li>The </li><strong>AJAX</strong> helper class and AJAX support will be enhanced, featuring unobtrusive JavaScript and ALA behavior[28].<br /><li>Multiple applications with the same core files. In the future developers will be able to create their own Cake application which could be placed in the app/plugins directory and be seamlessly integrated and auto-linked to other Cake applications.</li><br /></ul> <br /><br />After learning all this about Cake and after trying it out myself, I really think that I have found the solution to all of my PHP web development problems. CakePHP can really help PHP developers a lot if properly used and understood. Still not convinced? Just try it out then, will you?[17]<br /><br /><br /><strong>Notes and Related Resources</strong><br /><br />Special thanks to:<br /><br /><ul><br /><li>Larry E. Masters aka PhpNut and Garrett J. Woodworth </li><strong>gwoo</strong> for providing all the answers to my questions and contributing to create such a wonderful tool for the PHP community.<br /><li>Marc Abramowitz for sharing his experiences with the CakePHP framework and providing the content for the '...let's eat' section.</li><br /></ul><br /><br /><small><br />[1] PHP functions reference, <a href="http://www.php.net/manual/en/funcref.php">http://www.php.net/manual/en/funcref.php</a><br />[2] Framework, Wikipedia Page - <a href="http://en.wikipedia.org/wiki/Framework">http://en.wikipedia.org/wiki/Framework</a><br />[3] .NET framework overview - <a href="http://msdn.microsoft.com/netframework/technologyinfo/default.aspx">http://msdn.microsoft.com/netframework/technologyinfo/default.aspx</a><br />[4] "PHP Framework", delorian's blog, PHP Community - <a href="http://www.phpcommunity.org/node/100">http://www.phpcommunity.org/node/100</a><br />[5]Some popular PHP frameworks: Mojavi (<a href="http://www.mojavi.org/">http://www.mojavi.org/</a>), phpMVC (<a href="http://www.phpmvc.net/">http://www.phpmvc.net/</a>), BlueShoes (<a href="http://www.blueshoes.org/">http://www.blueshoes.org/</a>), Seagull (<a href="http://seagull.phpkitchen.com/">http://seagull.phpkitchen.com/</a>).<br />[6] PEAR - <a href="http://pear.php.net/">http://pear.php.net/</a><br />[7] Prado - PHP Rapid Application Development Object-Oriented, <a href="http://www.xisc.com/">http://www.xisc.com/</a><br />[8] Event Driven Programming, Wikipedia Page - <a href="http://en.wikipedia.org/w/index.php?title=Event_driven_programming">http://en.wikipedia.org/w/index.php?title=Event_driven_programming</a><br />[9] Ruby on Rails, Official Page - <a href="http://www.rubyonrails.org/">http://www.rubyonrails.org/</a><br />[10] Ruby on Rails, Doumentation - <a href="http://documentation.rubyonrails.com/">http://documentation.rubyonrails.com/</a><br />[11] Model View Controller, Wikipedia Page - <a href="http://en.wikipedia.org/w/index.php?title=Model-View-Controller">http://en.wikipedia.org/w/index.php?title=Model-View-Controller</a><br />[12] PHP frameworks inspired by Rails: <a href="http://phpontrax.com/">http://phpontrax.com/</a>, <a href="http://flinn.activeintra.net/biscuit/">http://flinn.activeintra.net/biscuit/</a>, <a href="http://www.cakephp.org/">http://www.cakephp.org/</a><br />[13]Python frameworks inspired by Rails: <a href="http://fanery.sourceforge.net/">http://fanery.sourceforge.net/</a>, <a href="http://fanery.sourceforge.net/">http://fanery.sourceforge.net/</a>, <a href="http://subway.python-hosting.com/">http://subway.python-hosting.com/</a><br />[14]Java framework inspired by Rails: <a href="https://trails.dev.java.net/">https://trails.dev.java.net/</a><br />[15]Perl frameworks inspired by Rails:<br /><a href="http://search.cpan.org/dist/Catalyst/lib/Catalyst/Manual/Intro.pod">http://search.cpan.org/dist/Catalyst/lib/Catalyst/Manual/Intro.pod</a>, <a href="http://perlonrails.org/index.php/Main_Page">http://perlonrails.org/index.php/Main_Page</a> <br />[16] "Rails Clones: Blood suckers or useful drones?", RedHanded - <a href="http://redhanded.hobix.com/cult/railsClonesBloodsuckersOrUsefulDrones.html">http://redhanded.hobix.com/cult/railsClonesBloodsuckersOrUsefulDrones.html</a><br />[17] CakePHP - Rails-inpired PHP framework, <a href="http://www.cakephp.org/">http://www.cakephp.org/</a><br />[18] AdoDB, PHP Database Abstraction Layer - <a href="http://adodb.sourceforge.net/">http://adodb.sourceforge.net/</a><br />[19] CakePHP blog tutorial - <a href="http://wiki.cakephp.org/tutorials:blog_tutorial_-_1">http://wiki.cakephp.org/tutorials:blog_tutorial_-_1</a><br />[20] Extending CakePHP - <a href="http://wiki.cakephp.org/tutorials:extending_cake">http://wiki.cakephp.org/tutorials:extending_cake</a><br />[21] Smarty, PHP Template Engine - <a href="http://smarty.php.net/">http://smarty.php.net/</a><br />[22] Scaffolding a Blog, CakePHP Wiki - <a href="http://wiki.cakephp.org/tutorials:scaffolding_a_blog">http://wiki.cakephp.org/tutorials:scaffolding_a_blog</a><br />[23] CakePHP Wiki - <a href="http://wiki.cakephp.org/">http://wiki.cakephp.org/</a><br />[24] CakePHP Google User Group - <a href="http://groups.google.com/group/cake-php">http://groups.google.com/group/cake-php</a><br />[25] CakeForge - <a href="http://cakeforge.org/">http://cakeforge.org/</a><br />[26] CakePHP Downloads Page - <a href="http://cakephp.org/downloads/">http://cakephp.org/downloads/</a><br />[27] Simfony, PHP5 framework - <a href="http://www.symfony-project.com/">http://www.symfony-project.com/</a><br />[28] ALA behavior - <a href="http://bennolan.com/behaviour/">http://bennolan.com/behaviour/</a><br /></small><br />
@@ -0,0 +1,31 @@
+----- +title: "Concatenative 0.2.0 released" +content-type: article +timestamp: 1240126920 +tags: "ruby|concatenative" +----- +<p>Version 0.2.0. of the <a href="/concatenative">Concatenative</a> <span class="caps">DSL</span> has been <a href="http://rubyforge.org/frs/?group_id=8068&release_id=33575">released</a>.</p> +<p>Here are some highlights from the changelog:</p> +<ul> + <li>Implemented new combinators: + <ul> + <li>binrec</li> + <li>split</li> + <li>twodip</li> + <li>threedip</li> + </ul></li> + <li>Performance improvements: + <ul> + <li>Stack is never copied.</li> + <li>No symbol/string conversion when processing words.</li> + </ul></li> + <li>Pseudo-namespace support (e.g. :kernel/:while and :math/:factorial)</li> + <li>~ and <= operators to unquote and define words, respectively.</li> + <li>No more uppercase words!</li> +</ul> +<p>Oddly enough, I realized that it is possible to defined methods named after reserved words like “while” or “if”, so now all the concatenative words (combinators) in <code>kernel.rb</code> are now defined <em>without</em> a leading undersore. Similarly, there’s no real need to use <span class="caps">UPPERCASE</span> symbols, so as a result, method lookup is significantly faster and will use less resources.</p> +<p>Here’s how the lookup works. Say you have the following program:</p> +<div class='ruby'><pre><code>[[1,2,3], [4.5.6], :concat]</code></pre></div><p>If <code>:concat</code> has been defined by the user (<code>:concat <= [...]</code>), that definition will be used, otherwise the <code>Concatenative::Kernel</code> combinator <code>concat</code> will be called. If you want to use the corresponding Ruby method, all you have to do is specifying the arity explicitly using the <code>|</code> operator.</p> +<p>To remove any ambiguity, it is now possible to specify the <em>namespace</em> of a word explicitly, e.g. :kernel/:concat or :ruby/concat. The <code>/</code> operator simply concatenates the two symbols together (<code>:"kernel/concat"</code>) and sets the namespace (<code>:kernel</code>) and name (<code>:concat</code>) of the new symbol. <code>:kernel</code> and <code>:ruby</code> are not meant to be used when defining new words, but you can use anything else you like, for example :math/:factorial or :local/:a, etc.</p> +<p>As I pointed out in the <a href="/articles/concatenative-programming-in-ruby">first article</a> about concatenative, even with the new performance improvement a concatenative program still runs slower than a standard Ruby program, but at least now you won’t run out of stack space (the <em>Ruby</em> stack, in this case) too soon.</p> +<p>If you have any issues to report, feature requests, etc., feel free to use <a href="http://github.com/h3rald/concatenative/issues">GitHub</a> to do so.</p>
@@ -0,0 +1,116 @@
+----- +title: "Concatenative programming in Ruby" +content-type: article +timestamp: 1238221440 +tags: "ruby|concatenative|programming" +----- +<p>A while ago, I sat down examining a few <a href="http://www.h3rald.com/articles/10-programming-languages">alternative programming languages</a> I might decide to learn someday. Each of those languages has its own peculiarities, and I didn’t choose them randomly, I chose them based on their popularity, power, paradigm and how actively they are developed.</p> +<p>I included <a href="http://factorcode.org/">Factor</a> as the only representative for <em>concatenative programming</em>, an interesting way to write programs, but seldom used in “recent” languages (except for Factor and a few others).</p> +<h3>The Joy of concatenative programming</h3> +<p>If you have absolutely no clue on what I’m talking about, you should consider looking at the home page for the <a href="http://www.latrobe.edu.au/philosophy/phimvt/joy.html">Joy Programming Language</a>, or maybe just the <a href="http://www.latrobe.edu.au/philosophy/phimvt/joy/j00ovr.html">overview</a>: it should be enough to tikle your curiosity.</p> +<p>Joy is often considered the <em>canonical</em> concatenative programming language: a basic —but working— implementation of a simple programming language to illustrate the fundamentals of concatenative programming. Joy looks like this:</p> +<p><code>2 3 + dup *</code></p> +<p>This simple programs computes the sum of 2 and 3, pushes it on the stack, duplicates it (using the <code>dup</code> combinator) and then multiplies the two values, obtaining 25 as a result.</p> +<p>Let’s slow down a second. Here’s what happens, exactly:</p> +<table> + <tr> + <th>Element entered </th> + <th>Stack contents</th> + </tr> + <tr> + <td> 2 </td> + <td> <sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup> </td> + </tr> + <tr> + <td> 3 </td> + <td> [2 3] </td> + </tr> + <tr> + <td> + </td> + <td> <sup class="footnote" id="fnr5"><a href="#fn5">5</a></sup> </td> + </tr> + <tr> + <td> dup </td> + <td> [5 5] </td> + </tr> + <tr> + <td> * </td> + <td> <sup class="footnote" id="fnr25"><a href="#fn25">25</a></sup> </td> + </tr> +</table> +<p>Got it? Let’s take it one step further. When you enter <code>dup</code> and then <code>*</code>, you are effectively computing the square of a number, so we can define the function <code>square</code> simply as:</p> +<p><code>square == dup *</code></p> +<p>In Ruby, this would be:</p> +<div class='ruby'><pre><code>def square(x) + x*x +end</code></pre></div><p>What’s unusual here? — Simple, there are no <em>variables</em> involved. Joy doesn’t need any explicit variable or <em>formal parameters</em> of any sort.</p> +<p>There’s more. Take the following code:</p> +<p><code>[1 2 3 4] [dup *] map</code></p> +<p>The <code>map</code> combinator expects a list and a <em>quoted program</em> (the same one used to compute the square) and produces a new list containing the result of that program applied to each element of the original list. Basically the equivalent of:</p> +<div class='ruby'><pre><code>[1,2,3,4].map { |e| e*e }</code></pre></div><p>Do you notice anything different? — Yes, Joy doesn’t need blocks or lambdas either, it uses <em>quoted programs</em> instead, which are nothing but slightly fancier lists (or arrays, as you like).</p> +<p>Let’s recap then, Joy doesn’t need of:</p> +<ul> + <li>lambda functions or blocks (quotation does the trick)</li> + <li>explicit parameters (everything you need is on the stack)</li> + <li>variable assignments (same as above)</li> + <li>explicit recursion (provided you can use combinators like linrec, primrec, binrec, etc.)</li> +</ul> +<p>I would consider this one of the best examples of <em>programming minimalism</em>: an incredibly simple syntax, a very small set of rules, but a good deal of power.</p> +<h3>Ruby objects on the stack</h3> +<p>After reading about Joy, I realized that implementing something similar in Ruby would be an interesting mini-project (let’s say a week of lunch breaks) to understand more about concatenative programming. It would also be pointless, too: a stack-based programming language implemented on top of one of the most high-level programming languages you can find isn’t going to be fast, is it? Nevertheless, it would still be interesting.</p> +<p>Ruby offers everything you need to build a Joy-like <span class="caps">DSL</span>:</p> +<ul> + <li>You can use arrays as …arrays, but also as quoted programs, and to model the stack itself.</li> + <li>You can use integers, strings, etc. as themselves</li> + <li>You can use Symbols as functions (we’ll get to this in a minute)</li> +</ul> +<p>If you think about the following expression in postfix notation:</p> +<p><code>2 2 +</code></p> +<p>We <em>could</em> translate it into infix notation (<code>2 + 2</code>), because Ruby supports it, but it’s not general enough. What you could do is this though:</p> +<div class='ruby'><pre><code>2.send(:+, 2)</code></pre></div><p>Message sending. I can see all the SmallTalk sympathizers drooling already. Well yes, In Ruby, <em>everything</em> is an object, so <em>everything</em> has a receiver and maybe some parameters. In other words, every method call can be reduced to the following syntax:</p> +<div class='ruby'><pre><code>receiver.send(method, *params)</code></pre></div><p>In this way, it is safe to assume that everything has a receiver, which could be understood as a function parameter, and may have 0 or more parameters. Take the following then:</p> +<div class='ruby'><pre><code>[2, 2, :+]</code></pre></div><p>It’s not too different from Joy, and it’s still Ruby code. All you have to do is use something to do the following:</p> +<ul> + <li>Take an array, and examine each item: + <ul> + <li>If it’s an object (non-Symbol), then push it on top of the stack.</li> + <li>If it’s a Symbol, then do something different, i.e.: + <ul> + <li>Find its receiver and its parameters and call a method.</li> + <li>Manipulate something on the stack.</li> + </ul></li> + </ul></li> +</ul> +<p>In this case, we have to find :+’s receiver and its parameter and we’re sorted.</p> +<p>Unfortunately Ruby’s <code>arity</code> method isn’t that reliable. For example: <code>"test".instance_method(:sub).arity</code> returns -1, while it should return “2” to be useful. So we have no choice but find a way to pass the method’s arity explicitly, in some cases.</p> +<p>For example like this:</p> +<div class='ruby'><pre><code>["Ciao, Fabio", /Ciao/, "Hello", :sub|2]</code></pre></div><p>If we define a | operator for the Symbol class, it’s not too bad after all. It’s heavy, but in this way we can use <em>any</em> Ruby method in postfix notation.</p> +<h3>Introducing the Concatenative Ruby <span class="caps">DSL</span></h3> +<p><a href="/concatenative">Concatenative</a> is a simple Ruby <span class="caps">DSL</span> for concatenative programming. You can write concatenative programs inside ordinary Ruby arrays and execute them by calling either <code>Array#execute</code> or <code>Kernel#concatenate</code>, like this:</p> +<div class='ruby'><pre><code>require 'concatenative' + +concatenate( + 10, + [0, :==], + [1, :+], + [:dup, 1, :-], + [:*], + :linrec + )</code></pre></div><p>This simple program calculates the factorial of 10. As you can see, no matter how unusual it may look, it is perfectly valid Ruby code and it is equivalent to the following Joy code:</p> +<p><code> +10 [0 =] [1 +] [dup 1 -] [*] linrec +</code></p> +<p>Granted, Joy looks better, but that’s the tradeoff for not writing a parser for Joy syntax, after all. <br /> +Looking at the code above, there are a few things to keep in mind when programming with Concatenative:</p> +<ul> + <li>You are using Ruby arrays, so you have to use commas, at least</li> + <li>functions, operators and combinators (let’s just call them <em>words</em>) are available as Ruby symbols</li> + <li>The arity of all Ruby infix operators has been already set to “1” by concatenative using the <code>set_arity</code> method (which simply stores the arity of a particular symbol in a constant hash)</li> + <li>You can specify explicit arities using the | operator (<code>:gsub|2</code>, or <code>:join|1</code>)</li> + <li>Unless the arity has been specified, an arity of 0 is assumed.</li> + <li>You can define your own concatenative functions using the <code>Symbol#<=</code> method, which expects a quoted concatenative program.</li> +</ul> +<h3>Performance issues</h3> +<p>In its current form, Concatenative can be very slow, as show the “benchmarks” provided in the /examples folder, especially if you use recursive combinators. This is understandable because everything is implemented in pure Ruby, which is totally unsuitable for low level stuff.</p> +<p>If you are interested, you are more than welcome to submit patches and suggestions to improve Concatenative’s performance, or, if you feel brave enough, you could help me create a C extension instead: things would become much faster then.</p> +<p>At any rate, feel free to play with it. You can get the source from <a href="http://github.com/h3rald/concatenative/tree/master">GitHub</a>, you can get the gem from <a href="http://rubyforge.org/projects/concatenative/">RubyForge</a> and you can submit ticket through <a href="http://github.com/h3rald/concatenative/issues">GitHub</a> as well.</p>
@@ -0,0 +1,107 @@
+----- +title: "Book Review: Design Patterns in Ruby" +content-type: article +timestamp: 1207885260 +tags: "ruby|review|books" +----- +<p>I finally got my hands on a shiny new copy of <em>Design Patterns in Ruby<sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup></em>. The book itself is not brand new and it was already widely praised by many different people online, so I wanted to take a look for myself.</p> +<p>To my surprise, the book is a hardcover edition, which makes it look more professional and more durable than the average programming book<sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup>. It’s also smaller and shorter than the average programming book<sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup> (340 pages), which makes it much easier to carry around and less intimidating to read. It’s also <em>not</em> meant to be a reference book, so it is actually pleasant an easy to read all in one go, as you’ll soon find out.</p> +<p>What is it about? — well, design patters in the Ruby language of course. But it’s not the usual brainwash of programming theory you would expect by a typical book on patters, it has <em>plenty</em> of examples of real code. When I say <em>real code</em> I don’t mean the usual Dog/Cat/Horse/<insert animal here> classes or juke-box simulations which don’t work at all etc. etc., I mean actual snippets from well known Ruby applications, like RubyGems, FXRuby and, of course, Rails.<br /> +OK well, there’s an exception perhaps: Russ <em>did</em> include a few wild life simulations (ponds with frogs and similar), but it’s only for your own good, and for the sake of tradition.</p> +<p>Anyhow, let’s start from the beginning…</p> +<h3>Part I: Patters and Ruby</h3> +<p>The first part of the book serves as a general introduction to the other two parts. If you know the basics of both design patterns and Ruby, you can safely skip this as you won’t find anything of overwhelming interest here.</p> +<p>Personally I really liked <strong>Chapter 1</strong> though, “Building better Programs with Patterns”, in which Russ does a great job in summarizing the original GoF book<sup class="footnote" id="fnr3"><a href="#fn3">3</a></sup> into four points:</p> +<p style="float:right;"><img src="/files/design_patterns_in_ruby.jpg" alt="" /></p> +<ul> + <li><em>Separate our the things that change from those that stay the same.</em></li> + <li><em>Program to an interface, not an implementation.</em></li> + <li><em>Prefer composition over inheritance.</em></li> + <li><em>Delegate, delegate, delegate.</em></li> +</ul> +<p>Also, although it does not come from the Design Patterns book but from building real systems, the author adds the <span class="caps">YAGNI</span> (You Ain’t Gonna Need It) principle<sup class="footnote" id="fnr4"><a href="#fn4">4</a></sup> as a reminder to resist the temptation of implementing things which <em>may</em> be needed <em>later on</em>, even if they are not needed right now.<br /> +The chapter ends with an outline of the patterns which will be presented throughout the book: 14 out of the original 23 patterns by the Gand of Four will be discussed in Part II and 3 bonus “Ruby-only” patterns will be examined in Part <span class="caps">III</span>, as a special treat.</p> +<p><strong>Chapter 2</strong> (<em>Getting started with Ruby</em>) feels perhaps a bit out of place. As others pointed out<sup class="footnote" id="fnr5"><a href="#fn5">5</a></sup>, why does a book on advanced Ruby programming techniques include a 35-page-long introduction on the Ruby language? The answer was given by Russ himself in an interview<sup class="footnote" id="fnr6"><a href="#fn6">6</a></sup>:</p> +<blockquote> +<p>“The reason that I included the introductory chapter about Ruby in there was to make the book accessible to folks with little or no Ruby background.<br /> +Now honestly, I don’t think that you could come to my book with no background in Ruby and walk away from it an expert Ruby programmer — it’s not really that kind of introductory book.<br /> +But I do think that someone with experience in other languages could read my book and come away knowing about Ruby, understanding what all the shouting is about.”</p> +</blockquote> +<p>I admit, I skipped this chapter during my first reading because I was eager to move on to the main part of the book, but I did read it afterwards (I had to write this review after all!). It’s quite a nice introduction aimed at the average .<span class="caps">NET</span>/Java developer: Russ provides a step-by-step presentation of the main features of the language while holding the reader by hand when something weird or scary comes about:</p> +<blockquote> +<p>The slightly strange-looking syntax in this code is actually a tip-off something deep and important: In Ruby, everythng — and I mean <em>everything</em> — is an object.</p> +</blockquote> +<p>Of course Chapter 2 won’t turn you into a Ruby guru, but it definitely fulfills one of the author’s goals: bringing developers of other languages closer to Ruby, and give them a tiny taste of how Ruby can be <em>wickedly powerful</em>.</p> +<h3>Part II: Patterns in Ruby</h3> +<p>Part II constitutes the bulk of the book, describing 14 GoF patterns in 220 pages. The patterns covered are the following:</p> +<ul> + <li>Template Method</li> + <li>Strategy</li> + <li>Observer</li> + <li>Composite</li> + <li>Iterator</li> + <li>Command</li> + <li>Adapter</li> + <li>Proxy</li> + <li>Decorator</li> + <li>Singleton</li> + <li>Factory Method</li> + <li>Abstract Factory Method</li> + <li>Builder</li> + <li>Interpreter</li> +</ul> +<p>Why not covering all 23? Well, because to be honest, they are rarely used in Ruby. Furthermore, in some cases some of the ones examined in the book may feel a bit <em>unnatural</em> to the average Rubyist: how many times did you ever think about using an External Iterator when <code>each</code> is normally available as default internal iterator for any Array-like class?</p> +<p>Each chapter in this part is devoted to a particular pattern and it is organized in more or less the same way, as outlined in the following sections.</p> +<h4>Introduction and Personal Anecdotes</h4> +<p>Most chapters start with a personal anecdote involving the author: it may be a memory related to his first job at the local grocery store (Chapter 8), or about the day he decided to buy his son a bike (Chapter 14):</p> +<blockquote> +<p>“I remember the day we bought my son his first bike.” […] I spent hours trying to pull together a minor junkiard of parts according to instructions that would have baffled the entire National Security Agency. As it turned out, picking the bike was the easy part: putting it together was the real challenge.</p> +</blockquote> +<p>This was used to introduce the Builder pattern, and how to use it to configure objects which include different logical parts.<br /> +Personally I find this technique particularly useful to introduce a particular problem from a different, more mundane prospective instead of starting off with an abstract theorethical description of the pattern itself. <br /> +The anecdote is then followed by the description of the actual programming problem for which the specific pattern will be used.</p> +<h4>Description of the Pattern and Initial Implementation</h4> +<p>An initial implementation of the pattern in Ruby will be provided more or less immediately after the introduction of each chapter, often accompanied by a simple <span class="caps">UML</span> diagram.<br /> +This implementation normally has quite a few conceptual flaws, which are then examined and corrected step-by-step the chapter to obtain a more “Ruby-friendly” solution.</p> +<h4>A More Rubyfied Version of the Pattern</h4> +<p>The final implementation of each pattern is often very different from the initial attempt, and it may contain quite a lot of Ruby-specific code. The author does an excellent job in suggesting pattern implementations which often use blocks, <code>Proc</code> objects or method redefinitions when needed, to make the code more succint and more readable at the same time, as all Ruby code should be.</p> +<p>By doing so, even people who are still learning Ruby will understand how to use some very useful Ruby idioms which can be a bit difficult to grasp otherwise.</p> +<h4>Using and Abusing <Pattern></h4> +<p>Patterns are often overused and misused, and some people normally end up wondering if they should be used at all, after all. This section (present as a matter of fact in <em>every</em> chapter of part II an <span class="caps">III</span>) examines the pitfalls of the pattern and the most common mistakes developer make when applying it.<br /> +It is by far the most useful section of each chapter, and that’s what I’ll be reading and re-reading every time I’m thinking about using a particular pattern in my code. As a matter of fact, these sections make you realize that <em>every</em> pattern has its own inherent flaws and dangers, and that it is far from being a Silver Bullet. Even when you’re <em>supposed</em> to use a pattern to accomplish something, be aware that <em>something nasty</em> can happen unless you’re extra careful: this, perhaps, is the true Golden Rule conveyed throughout the whole book.</p> +<h4><Pattern>s in the Wild</h4> +<p>This is another very interesting section which is included in every chapter of part II and <span class="caps">III</span>. After describing what a pattern does, how it <em>can</em> be used and how it <em>should</em> be used, you’ll finally find some interesting examples taken from real world applications.<br /> +By “real world application” I mean something like ActiveRecord<sup class="footnote" id="fnr7"><a href="#fn7">7</a></sup> (Observer, Command, Adapter, …), DRb<sup class="footnote" id="fnr8"><a href="#fn8">8</a></sup> (Proxy) or FXRuby<sup class="footnote" id="fnr9"><a href="#fn9">9</a></sup> (Composite), for example, i.e. important programs and libraries which are used in production environments.<br /> +Personally, I was really glad to find such examples in this book: it definitely helps you feeling design patterns as something more practical and useful than pure software architecture theories.</p> +<h4>Wrapping it Up</h4> +<p>“Wrapping it Up” is the title of the last section of each chapter of Part II and <span class="caps">III</span>. It’s basically a summary of the whole chapter and thus a useful way to recap the most important concepts. I found this section particularly useful when using the book as a design pattern reference, after reading it for the first time: this section provides a quick and essential overview of each pattern — and the most important DOs and DON’Ts, too.</p> +<h3>Part <span class="caps">III</span>: Patterns for Ruby</h3> +<p>By the time you get to Part <span class="caps">III</span> you’ll definitely feel that Ruby can do <em>more_. Some of the Ruby implementation of certain patterns described in the book make extensive use of blocks and Proc objects, and the @method</em>missing@ method (although potentially dangerous unless extra care is taken) gives us a more immediate way to obtain delegation, for example when creating Proxies. <br /> +Also the fact that objects can be modified at runtime by adding and removing methods “as needed” seems quite an underused feature in traditional patterns, simply because those patterns were first conceived for languages which are very different from Ruby and are perhaps less <em>liberal</em> than Ruby when it comes to dynamic features<sup class="footnote" id="fnr10"><a href="#fn10">10</a></sup>.</p> +<p>These particular Ruby features can be used (and abused, of course) to implement more Ruby-esque patterns, such as the ones included in this part of the book:</p> +<ul> + <li>Internal Domain-Specific Languages</li> + <li>Meta-Programming</li> + <li>Convention Over Configuration</li> +</ul> +<p>These are just examples, of course some may complain because the Active Record or <span class="caps">ORM</span> pattern are missing, but this is understandable as it may be considered too specific compared to the others. <br /> +Each pattern is examined in detail, and I particularly like way the <span class="caps">DSL</span> pattern was described: Chapter 16 explains how to develop a simple but effective Ruby <span class="caps">DSL</span> from scratch for creating file backups. This can be particularly useful for people who never tried creating DSLs before, but also for developers who tried, but want to improve their skills.</p> +<p>Chapter 18 (Convention Over Configuration) is sufficiently clear and detailed, perhaps even too much if you already know how Rails was developed (and all the hype which follwed).</p> +<p>On the other hand, I was a bit disappointed by Chapter 17 (Meta-Programming). Maybe it’s because I built up extremely high expectations about it while reading the rest of the book, but it just felt too short and not detailed enough for my liking. If I had to write such a chapter (which would have been actually very hard), I would have started from an excellent post by Ola Bini<sup class="footnote" id="fnr11"><a href="#fn11">11</a></sup> which introduces <em>eleven</em> meta-programming techniques, and built up content and examples from there. The only reason why — I think — Russ didn’t do it in his book was length/balance constraint: a <em>properly detailed</em> chapter about meta-programming in Ruby could easily take up over forty pages!</p> +<h3>The Verdict</h3> +<p>As I said in the beginning: this is not meant to be a complete, in-depth, reference book on everything you may want to know about design patterns in Ruby. That’s why, as a matter of fact, you can actually read this book all the way through without getting utterly bored. Russ uses an informal, yet appropriate style to turn potentially complex, theorethical computer science principles into easy-to-understand, <em>useful</em> tools which can truly improve the way you code.</p> +<p>The whole book flows very very nicely. I actually recommend reading this book in sequence, without skipping chapters, because each pattern is described in a way that is somehow linked to the following ones, so that you can understand and learn about the pros and cons of each one in a more natural and useful way.</p> +<p>OK, I would have loved to see Part <span class="caps">III</span> as long as Part II, probably, but overall I’m very, very satisfied of what the book taught me. The only problem is that it also made me suddenly realize all the naive design mistakes I’ve been making when coding in Ruby, so I’ll now feel compelled to fix at least some of them…</p> +<p>Definitely a worthwhile read, I just hope to see more books like this, or even a second edition of this one soon!</p> +<h3>Notes</h3> +<p class="footnote" id="fn1"><a href="#fnr1"><sup>1</sup></a> <a href="http://www.informit.com/store/product.aspx?isbn=0321490452">Design Patterns in Ruby</a> by Russ Olsen, Addison Wesley Professional, 2007.</p> +<p class="footnote" id="fn2"><a href="#fnr2"><sup>2</sup></a> Think of <a href="http://www.pragprog.com/titles/ruby">Programming Ruby: The Pragmatic Programmer’s Guide, 2nd Ed.</a> by Dave Thomas with Chad Fowler and Andy Hunt, Pragmatic Programmers, 2004.</p> +<p class="footnote" id="fn3"><a href="#fnr3"><sup>3</sup></a> <a href="http://www.informit.com/store/product.aspx?isbn=0201633612">Design Patterns: Elements of Reusable Object-Oriented Software</a>, by By Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides (a.k.a. the <em>Gang of Four</em>), Addison Wesley Professional, 1994.</p> +<p class="footnote" id="fn4"><a href="#fnr4"><sup>4</sup></a> For more information on the <span class="caps">YAGNI</span> principle, visit <a href="http://www.xprogramming.com/Practices/PracNotNeed.html">You’re <span class="caps">NOT</span> gonna need it</a>, Ronald E Jeffries.</p> +<p class="footnote" id="fn5"><a href="#fnr5"><sup>5</sup></a> See <a href="http://on-ruby.blogspot.com/2007/12/design-patterns-in-ruby-review.html">Design Patterns in Ruby, a review</a>, <em>On Ruby</em>blog.</p> +<p class="footnote" id="fn6"><a href="#fnr6"><sup>6</sup></a> See <a href="http://on-ruby.blogspot.com/2008/01/russ-olsen-interview.html">Russ Olsen Interview</a>, <em>On Ruby</em>blog.</p> +<p class="footnote" id="fn7"><a href="#fnr7"><sup>7</sup></a> <a href="http://ar.rubyonrails.com/">ActiveRecord</a> is an implementation of the Object-Relational Mapping (<span class="caps">ORM</span>) pattern used by the Ruby on Rails framework.</p> +<p class="footnote" id="fn8"><a href="#fnr8"><sup>8</sup></a> Distributed Ruby, see <a href="http://chadfowler.com/ruby/drb.html">Intro to DRb</a> by Chad Fowler.</p> +<p class="footnote" id="fn9"><a href="#fnr9"><sup>9</sup></a> <a href="http://www.fxruby.org/">FXRuby</a>, a graphical toolkit written in Ruby.</p> +<p class="footnote" id="fn10"><a href="#fnr10"><sup>10</sup></a> This can be a good or bad thing depending on the way you look at it, and what you want to use the language for. The fact that Ruby is dynamically typed makes it easier to do things which are totally impossible in C++ or Java, but it also introduces a whole new set of potential dangers.</p> +<p class="footnote" id="fn11"><a href="#fnr11"><sup>11</sup></a> <a href="http://ola-bini.blogspot.com/2006/09/ruby-metaprogramming-techniques.html">Ruby Metaprogramming Techniques</a>, Ola Bini: Programming Language Synchronicity.</p>
@@ -0,0 +1,99 @@
+----- +title: "Book Review: Distributed Programming with Ruby" +content-type: article +subtitle: "Just what you need to get started with the right tools to build large and scalable applications in Ruby" +timestamp: 1277206200 +tags: "review|books|ruby" +pdf: true +----- + + <section class="section"> +<p>Back when I read <em><a href="http://www.pragprog.com/titles/ruby/programming-ruby">Programming Ruby</a></em> for the first time, I distinctly remember a short reference to <a href="http://ruby-doc.org/stdlib/libdoc/drb/rdoc/index.html">dRb</a>, the <strong>D</strong>istributed <strong>R</strong>u<strong>b</strong>y library included in the Standard Library.</p> +<p><em>“Cool!”</em> — I thought</p> +<p>…and that was pretty much it. The documentation for DRb was pretty much nonexistent (at the time), I didn’t need it, so I pretty much forgot about it altogether until this book came out.</p> +<p><em><a href="http://www.informit.com/store/product.aspx?isbn=0321638360">Distributed Programming with Ruby</a></em> fills a very particular niche of the Ruby programming world: <em>distributed</em> programming. Moreover, this book is somehow <em>justified</em> by the scarce documentation on the subject:</p> +<blockquote> +<p>Although these libraries [DRb and rinda] have been included with Ruby for many years now, they have received little or no attention (or documentation). This has led to a lot of <span class="caps">FUD</span> (fear, uncertainty, and doubt) about what these libraries can and cannot do, and when they are appropriate to use (if at all).</p> +</blockquote> +<p style="padding-left:4em;">— Mark Bates, <em><a href="http://www.informit.com/store/product.aspx?isbn=0321638360">Distributed Programming with Ruby</a></em></p> +<p>But there’s more. This book gives the reader a complete overview of what’s out there, in the Ruby world, to support distributed programming. This includes quite a few gems and libraries besides the ones provided in the standard library.</p> +<section class="section"> +<header><h1 id="h_1" class="toc">Overview</h1></header> +<img src="/img/pictures/distributed-programming-with-ruby.jpg" style="float:right;" /> + <p>The book is organized into four parts, each dealing with a particular set of Ruby libraries related to distributed programming.</p> +<p>The author, <a href="http://www.metabates.com/">Mark Bates</a>, does a good job maintaining a sort of continuity in the examples throughout the book: you’ll get accustomed to a <em>Logger</em> class of some kind being punctually re-implemented more or less once per chapter, using a different library.</p> +<p>Additionally, the libraries described in the book are ordered by “reverse preference” in each part of the book, so normally the libraries described later on in a part fix some of the shortcomings of the preceding ones.</p> + + + + <section class="section"> +<header><h1 id="h_2" class="toc">Part I: Standard Library</h1></header> +<p>This part is the most important of all: it gives you the very basics about Distributed Programming and it describes the “building blocks” (<a href="http://ruby-doc.org/stdlib/libdoc/drb/rdoc/index.html">DRb</a> and <a href="http://ruby-doc.org/stdlib/libdoc/rinda/rdoc/index.html">Rinda</a>) used in nearly all the other libraries described in the book. If you want you can skip some chapters in the other parts of the book, but make sure this part is crystal clear in your head before proceeding any further.</p> + +</section> + + <section class="section"> +<header><h1 id="h_3" class="toc">Part II: Third-Party Frameworks and Libraries</h1></header> +<p>If you read part I, you’re probably a bit disappointed by DRb and Rinda and the amount of code you have to write to make simple things work in a distributed environment. The good news is that there are some Ruby gems out there that can make life simpler:</p> +<ul> + <li><a href="http://seattlerb.rubyforge.org/RingyDingy/">RingyDingy</a></li> + <li><a href="http://rufy.com/starfish/doc/">Starfish</a></li> + <li><a href="http://github.com/markbates/distribunaut">Distribunaut</a></li> + <li><a href="http://github.com/mperham/politics">Politics</a></li> +</ul> + +</section> + + <section class="section"> +<header><h1 id="h_4" class="toc">Part III: Distributed Message Queues</h1></header> +<p>In this part, the author introduces more in detail the concept of distribute message queues, and also the technologies and protocols available not only in the Ruby world but elsewhere. It focuses on two libraries:</p> +<ul> + <li><a href="http://rubyforge.org/projects/starling/">Starling</a>, originally used by Twitter.</li> + <li><a href="http://github.com/tmm1/amqp"><span class="caps">AMQP</span></a>, an implementation of the <a href="http://www.amqp.org/"><span class="caps">AMQP</span></a> protocol in Ruby, that can be used in conjunction with <a href="http://www.rabbitmq.com/">RabbitMQ</a>, an Erlang-based messaging system.</li> +</ul> + +</section> + + <section class="section"> +<header><h1 id="h_5" class="toc">Part IV: Distributed Programming with Ruby on Rails</h1></header> +<p>The book ends somewhat abruptly with this last part that deals with distributed programming in the Rails world. It feels a bit like a last-minute addendum that I would have left for an appendix, nevertheless it briefly introduces <a href="http://backgroundrb.rubyforge.org/">BackgrounDRb</a> and <a href="http://github.com/tobi/delayed_job">Delayed Job</a>.</p> + +</section> + +</section> + +<section class="section"> +<header><h1 id="h_6" class="toc">Technical Analysis</h1></header> +<p>Unlike other technical books, this one can (must?) be read sequentially. Generally each chapter focuses on a library, describes how to install it and use it, and highlights its pros and cons. Typically, the “cons” are solved in the following chapter by another library, and so on…</p> +<p>The book is not meant to contain a full technical reference of each library, and it’s quite short (256 pages), so you really get the most out of it if you read it all, from start to finish. I didn’t realize there were so many different libraries in this particular niche of Ruby programming, and Mark does a good job demistifying some of them.</p> +<p>One thing that really struck me out of this book is the focus on gems. We’re not talking about <em>mainstream</em> frameworks like Rails or Merb here, but rather of some rather specialized, smaller libraries that fullfill very specific tasks. Personally, I don’t remember any other Ruby book doing this in the same way, and I was quite happy about it.</p> +<p>On the other hand, gems are a double-edged sword: while some of them are really cool and well-maintained, others may disappear tomorrow with no prior notice. I was actually very surprised to see even some of the <em>quirks</em> of these gems documented in the book:</p> +<p><strong>p91</strong>: <em>“Notice that we added client { } to the bottom of the server file. The reason for this appears to be a bug or flaw in the Starfish architecture.”</em></p> +<p>Really? Hasn’t it be fixed now? Apparently not, that’s the way it works, so no, you can’t blame the author of the book for this.</p> + + <section class="section"> +<header><h1 id="h_7" class="toc">Formatting and Readability</h1></header> +<p>As I pointed out earlier, this book is somehow meant to be read sequentially, and Mark does a good job making sure you don’t get bored. Chapters and sections are quite short and there’s a good text/code ratio: the examples are short and clear, and you don’t have to try them out yourself, because most of the time the author does it for you. It’s not infrequent for the author to tell you to run “wrong” code, but that’s a great way to show you how to do the right thing right afterwards.</p> +<p>Sidebars and boxes are used properly and they do provide actual value-added content: some information on a non-Ruby technology, some tips and tricks on how to run things smoothly, etc. On the other hand, one thing I couldn’t stand were the <em>endnotes</em>. I must say I don’t like endnotes at the best of times, but when they are pointless I just can’t suffer them. Each chapter has its own fair share of endnotes, but unfortunately most of them are just URLs to Wikipedia pages or RubyForce/GitHub projects: I would have preferred the URLs inline with the rest of the text, but that’s just me.</p> + +</section> + <section class="section"> +<header><h1 id="h_8" class="toc">Style and Contents</h1></header> +<p>Mark has a nice, informal writing style. Exactly what you expect from a programming book nowadays, even if sometimes it feels a bit too informal:</p> +<p><strong>p86</strong>: <em>“I think I understand what Eric means by all that. However, that is as deep as the documentation goes on the subject. I have not been able to test what I think he means, so I won’t make any grand promises about what the library can and cannot do in regards to expiring/renewing registrations.”</em></p> +<p>Although this is not something you’d see in a professional book everyday, it definitely helps to connect with the reader: Mark is one of us after all, even if he happens to have created quite a few <a href="http://github.com/markbates">interesting projects</a>, like the Mack framework, the Distribunaut library (which is also mentioned in his book, but in a very impartial way) and Configatron. From his book you understand that he’s neither one of those rockstar developers nor one of those famous authors who just writes books for a living: he’s a competent programmer who knows quite a bit about a particular, but relevant, niche of Ruby programming.</p> + +</section> + +</section> + +<section class="section"> +<header><h1 id="h_9" class="toc">Final Thoughts</h1></header> +<p>This is one of those books I’d like to see a second edition of. Partly because there are some relatively new gems which have been left out (<a href="http://github.com/kwi/BrB">BrB</a>, for example), partly because this is a rather hot topic at the moment, and different solutions are popping out at a rather extreme rate.</p> +<p>The decision to write about mainly about gems was bold but necessary, and I’d really like to see more authors doing that, but with extra care. From reading this book, you understand that there’s no <em>silver bullet</em> when it comes to Distributed Programming, but rather different tools to do different jobs.</p> +<p>The thing I missed the most? A proper conclusion to the book. You’re left with two chapter about Rails-specific libraries which could have easily become appendixes, and nothing else. I would have liked a sort of “summing up” end chapter (re-)highlighting the pros and cons of each library and a sort of feature matrix.</p> +<p>Nevertheless, it was well worth my time and it proved to be a very good resource to get started in writing distributed Ruby programs.</p> + +</section> + +</section>
@@ -0,0 +1,41 @@
+----- +title: "Book Review: Writing Efficient Ruby Code" +content-type: article +timestamp: 1200890820 +tags: "ruby|review|books" +----- +<p style="float:right;"><img src="/files/efficient_ruby_shortcut.jpeg" alt="" /></p> +<p>The second shortcut from Addison-Wesley Professional series I’m going to review is called <a href="http://www.informit.com/store/product.aspx?isbn=0321540034">Writing Efficient Ruby Code</a>. A very promising title, especially considering that this book is only 50 pages long.</p> +<p>As usual, this shortcut can be intended as a sort of programmer-friendly detailed cheatsheet: like the other ones in this series it sports a monitor-friendly landscape layout and does not go to deep into the details unless strictly necessary to understand a particular concept.</p> +<h3>The Author</h3> +<p><a href="http://railsexpress.de/blog/">Dr. Stefan Kaes</a>, the author, contributed a lot to improve Ruby on Rails’ performance by refactoring portions of its core and try to “get maximum speed out of performance-critical sections of code”. This short but interesting shortcut groups together a lot of performance tweaks, tips and tricks but also some “anti-patterns” Kaes was able to identify through his career as programming teacher Ruby software consultant and key Rails contributor.</p> +<h3>The Contents</h3> +<p>Like with the previously-covered <a href="/articles/mongrel-shortcut-review">Mongrel shortcut</a>, <em>Writing Efficient Ruby Code</em> always goes straight to the point when it comes to identify problems. The first one mentioned is of course that the <em>Ruby Interpreter is Slow</em>, most people are aware of that, due to their direct experience or because this argument is normally used by non-Rubyists to argue the language’s usability in commercial projects. What you may not know is why that is so, and that’s where the first part of this book comes into play.</p> +<blockquote> +<p><em>“Ruby is a highly dynamic language: Almost all language entities are first-class citizens in that they can be created, changed, and destroyed at runtime. This comprises classes, modules, methods, constants, and class and instance variables. Only local variables are second-class citizens in Ruby: Whether a name refers to a local variable is determined at parse time.</em></p> +</blockquote> +<p>This makes Ruby extremely flexible, but also more complex. Whever you use a name to refer to an object, Ruby has to search for the object it refers to, and this costs in terms of processing time.</p> +<p>As a matter of fact, one of the most recurring tips in the book to improve code performance is the following:</p> +<p style="text-align:center;"><strong>Method calls are expensive, use variables directly when possible.</strong></p> +<p>Keep this in mind: <code>self.something</code> is <em>not</em> the same as <code>@something</code>. The end result is the same, but the first way costs more in terms of performance because Ruby has to look up the method name.<br /> +Similarly, <strong>local variables <em>should</em> be introduced as a way to “cache” the result of method calls</strong>. Often you may feel “guilty” to introduce a new variable and keep calling the same method over and over: this should definitely be avoided.</p> +<p>Other useful tips include, for example:</p> +<ul> + <li>Use syntax constructs (e.g. assignments) as expressinons. Use evaluation precedences.</li> + <li>Use interpolated strings <code>"... #{string_variable}"</code> (there’s also no performance difference if constant strings are used between <code>"</code> or <code>'</code>)</li> + <li>Use operators which update the data structure without copying it (when possible). Use <code>update</code> or <code>merge</code> to update hashes.</li> + <li>Iterating using <code>for a in A</code> is slightly faster than performing the same iteration using <code>each</code>, (it is the opposite in Ruby 1.9 though)</li> + <li>do not use <code>return</code> unless you have to</li> + <li>test in order of expected case frequency</li> + <li>Use parallel assignment (<code>a, b = 5, 6</code>) where applicable</li> + <li>If a module gets included in only one other class (or module), it’s preferable to open the class instead.</li> +</ul> +<p>I deliberately chose not to elaborate any further on the tips listed above because otherwise I’ll give a big chunk of the contents of the book itself. If you know Ruby enough, you may already know why such reccommendations make sense, but if you don’t, <em>Writing Efficient Ruby Code</em> can be a short but very interesting read.</p> +<h3>The Good</h3> +<p>For each of the 30 “coding patterns” (and consequent anti-patterns) described in the book, the author does a great job explaining the reasons of doing something in a particular way, also through examples and benchmarks, where possible.</p> +<p>Furthermore, this <em>shortcut</em> can really be useful to grasp a few difference between Ruby 1.8.5, 1.8.6 and 1.9 in terms of performance: not all the patters apply to all Ruby implementations, and when that’s the case it is clearly stated.</p> +<h3>The Bad</h3> +<p>My only complaint about the book is probably the lack of details and more “specialized” patterns. Everything (except for a few Rails-specific tips) normally apply to Ruby <em>as a whole</em>, without going deeply to analyze specific libraries or third-party gems. As a result, once you get the general idea, some of the patters may seem pretty obvious or a logic consequence of others.</p> +<p>It is also true that this is meant to be a <em>shortcut</em>, not a comprehensive analysis on code optimization techniques which can be applied to specific cases: something like this would require much more than 50 pages!</p> +<h3>The Bottom Line</h3> +<p>Read it, re-read a few bits of it to make sure you grasp the most important concepts, and keep its table of contents in front of you as a reminder when refactoring your code!</p>
@@ -0,0 +1,198 @@
+----- +title: "A Firefox Lover's Guide to Opera" +content-type: article +subtitle: "An in-depth review of the Opera browser, with the eyes of a Firefox enthusiast" +popular: true +timestamp: 1198847940 +tags: "browsers|review|opera|firefox" +----- +<blockquote> +<p><strong>Note:</strong> This article can be considered a sequel for <a href="http://www.h3rald.com/articles/ie-lovers-guide-to-firefox">An IE Lover’s Guide to Firefox</a>, which described Firefox through the eyes of an Internet Explorer fan. Similarly, this article describes Opera’s features from the point of view of a user – myself – who has been using Firefox for years and is now considering another browser switch.</p> +</blockquote> +<p>I am a Firefox fan. I’ve been using Firefox since it was named “Firebird” and calling it “stable” was a big overstatement. Firefox dragged me out of Internet Explorer, and that was definitely one of its biggest achievements.</p> +<p>Because I’m addicted to trying out new tools, however, I always kept testing new browsers I discovered here and there. K-Meleon, Flock, Sleipnir… When Safari came out for Windows I immediately installed it and used it for about 2 hours, only to realize that it wasn’t – and it still isn’t – usable at all, mainly due to sporadic crashes.</p> +<p style="float:right;"><img src="/files/opera/fast.jpg" alt="" /></p> +<p>Similarly, I’ve been trying out <a href="http://www.opera.com/">Opera</a> periodically, as new releases came out, but again it didn’t seem to work for me. The biggest complaint I had was its inability to render heavily-ajaxified web sites properly. However, now it seems that the Opera Development Team made a big effort to improve the browser, and I was pleased to notice that <a href="http://www.opera.com/products/desktop/next/">Opera 9.5b</a> (“Kestrel”) doesn’t seem to have this sort of problems at all.h3. Planning the Switch</p> +<p>Firefox has extensions. Plenty of them actually. Some are useful, like the newish Del.icio.us one made by Yahoo, and also crappy ones you’ll never use unless you want to have a fancy button on one of your over-cluttered toolbars which enables you to interface more easily with X or Y web services you hardly ever use.</p> +<p>By contrast, Opera never attempted to add full-blown extension support to its venerable and yet very powerful browser. Instead, they kept building more and more features right into its core, being careful not to undermine the browser’s two proverbial qualities: <em>speed</em> and <em>stability</em>. What seemed a doomed philosophy at first turned out to be a good thingin the long run. More and more people are getting more and more worried about Firefox’s memory issues and begin to <em>wander off</em> to explore new things, exactly like I did.</p> +<p>The first step to switch from Firefox to Opera is to reduce the number of Firefox extensions to the bare minimum you need:</p> +<ul> + <li>Colorzilla</li> + <li>Web Developer</li> + <li>MeasureIt</li> + <li>Search Status</li> + <li>Gmail Manager</li> + <li>Secure Login</li> + <li>Del.icio.us</li> +</ul> +How many extensions do you <em>actually</em> use? Here’s a short analysis for the ones above: +<ul> + <li>The first three are related to Web Development only, which means that I don’t need them unless I’m doing some web-development tests during which I’m always going to have more than one browser open anyway. <strong><span class="caps">UPDATE</span>:</strong> there are a few <a href="http://widgets.opera.com/search/?order=name&q=ruler">Ruler</a> widget which can be used instead of MeasureIt <em>(thanks <strong>Ameer</strong>)</em>.</li> + <li>SearchStatus gives me Alexa Rank and Google Pagerank: I think I can survive without those for a while. <strong><span class="caps">UPDATE</span>:</strong> if not, there’s always <a href="http://www.puzzleclub.ru/files/seobar/">SEObar</a> <em>(thanks <strong>Ameer</strong>)</em>.</li> + <li>I use Gmail Manager because my girlfriend uses Gmail on the same computer. I’m switching to Opera and she’ll stick with Firefox, so no problem there…</li> + <li>Secure Login? It’s called <em>Wand</em> and it has been built-in into Opera for the last decade or so.</li> + <li>Del.icio.us – OK, I won’t be able to access my favorite tags as quickly, but <a href="http://erlang.no/2005/10/06/delicious-opera-buttons-2/">someone</a> already came out with a few handy buttons for a better integration with the popular social bookmarking service.</li> +</ul> +<blockquote> +<p><strong><span class="caps">UPDATE</span>:</strong> For a list of the features provided by Firefox extensions which are included in Opera, see Rijk’s <a href="http://files.myopera.com/Rijk/blog/extensions.html">Top 150 Popular Firefox Extensions and Opera</a></p> +</blockquote> +<p style="float:right;"><img src="/files/opera/opera_navigation.png" alt="" /></p> +<p>Because I’m addicted to betas, I immediately downloaded <a href="http://www.opera.com/products/desktop/next/">Opera Kestrel</a>, i.e. Opera 9.50 beta 1. I never actually liked Opera’s default theme, so I started looking around for <strong><a href="http://my.opera.com/community/customize/skins/">new skins</a></strong> (yes, eye-candy matters sometimes) and came across the Ximple series by <a href="http://my.opera.com/community/customize/skins/author/?id=serafins">serafins</a>. In particular, <a href="http://my.opera.com/community/customize/skins/info/?id=3835">2nd thought – Jimple</a> quickly became my favorite.</p> +<h3>Tabs</h3> +<p><em>“Opera is the Web pioneer that delivered tabbed browsing in 2000 […]”</em></p> +<p>Opera tabs <em>feel</em> stable and mature. Why? Probably because tabs are used more consistently to open not only web pages but also:</p> +<ul> + <li>Downloads (“Transfers”)</li> + <li><span class="caps">RSS</span> feeds</li> + <li>Notes</li> + <li>Emails</li> + <li>Bookmarks</li> + <li>Widget Management</li> + <li>Contacts</li> + <li>History</li> + <li>Page Links</li> +</ul> +<p>I think this is a great feature and Firefox should definitely consider it: v3.0 comes with new download and bookmark managers, but they’re still dialogs. Yes, I know, there’s probably some extension which allows you to display them in the sidebar, but that’s not the point: Opera brings more consistency to the overall browsing experience by using tabs wherever they should be used.</p> +<p>Additionally, Opera tabs…</p> +<ul> + <li>Can be rearranged, exactly like Firefox tabs</li> + <li>Can be restored, if closed accidently, by re-opening them from the Trash can</li> + <li>Can be locked, meaning that they can’t be closed accidently</li> + <li>Can be duplicated</li> + <li>Can be saved in groups (sessions) and re-opened later on</li> + <li>Can be restored if Opera crashes</li> +</ul> +<h3>Speed Dial</h3> +<p>When you open Opera for the first time, and <em>whenever you open a new empty tab</em> the Speed Dial is displayed. What I originally thought it was one of the most annoying things introduced by Opera 9 turned out to be actually useful and very addictive.</p> +<p>The idea behind it is simple:</p> +<ul> + <li>Show a default page with 9 slots</li> + <li>Allow users to drag links to those slots</li> + <li>Display preview of each slot (which is cached and can be updated by refreshing the page)</li> + <li>Allow users to quickly access pages saved in the Speed Dial via CTRL+1 .. CTRL+9 or simply by clicking them.</li> +</ul> +<p>Simple and effective. Once you get going with it, you’ll overcome the initial feeling of imposition and you’ll use it more and more: I literally can’t live without it now!</p> +<h3>Right-click goodies</h3> +<p>While I was testing Opera, my girlfriend came along and asked me to look something up on <a href="http://www.imdb.com/"><span class="caps">IMDB</span></a>. I normally had <span class="caps">IMDB</span> as custom search engine in Firefox, but unfortunately Opera didn’t seem to allow users to customize their search engines…</p> +<p>Totally wrong. Not only Opera lets you add any search engine to the search bar, it also does it with style and in the easiest way possible:</p> +<p style="float:right;"><img src="/files/opera/search_engines.png" alt="" /></p> +<ol> + <li>Go to your search engine or any website with a search form</li> + <li>Right click the search field</li> + <li>Click <strong>Create Search…</strong></li> + <li>Specify a name and a keyword for your search engine</li> +</ol> +<p>Done. You’ll now be able to search that particular site directly from the search bar. As you can see, I added Wikipedia, <span class="caps">IMDB</span> and even the <a href="http://www.uesp.net/wiki/Main_Page">Unofficial Elder Scrolls Pages</a> in this way.</p> +<p>Besides creating searches, Opera lets you do a lot by right-clicking anywhere on a page:</p> +<ul> + <li><strong>Block Content</strong>: Right-click an empty area of any webpage and select <strong>Block Content</strong> to select which ads, scripts and images will be blocked from now on.</li> + <li><strong>Validate</strong>: Validate the <span class="caps">HTML</span> source code of the current page.</li> + <li><strong>Translate</strong>: Translate the current page into a foreign language with just two clicks.</li> + <li><strong>Open With</strong>: Open the current page in another browser installed on your system.</li> + <li><strong>Edit Site Preferences…</strong>: Choose to block/allow cookies and popups, identify Opera as another browser, set a different encoding, enable/disable scripts, images, flash, etc. These setting apply to the <em>current web site only</em>.</li> + <li>View source, reload page every X seconds/minutes, send by email, etc.</li> +</ul> +<h3>Widgets</h3> +<p><a href="http://widgets.opera.com/">Opera Widgets</a> must not be considered as Opera’s counterpart to Firefox extensions. Instead, Opera Widgets can be used as <em>poor man’s Vista Gadgets</em> on Windows XP, and they do their job most remarkably.</p> +<p>I’m personally very fond of these ones:</p> +<ul> + <li><a href="http://widgets.opera.com/widget/3683/">The Free Dictionary</a></li> + <li><a href="http://widgets.opera.com/widget/8461/">Wikipedia</a></li> + <li><a href="http://widgets.opera.com/widget/3687/">Calendar</a></li> + <li><a href="http://widgets.opera.com/widget/4513/">Whois Widget</a></li> + <li><a href="http://widgets.opera.com/widget/3689/">Currency Converter</a></li> + <li><a href="http://widgets.opera.com/widget/5118/"><span class="caps">HTML</span> Entities</a></li> + <li><a href="http://widgets.opera.com/widget/7206/">Twitter</a></li> +</ul> +<p>They all have a common trait: they all behave as standalone programs, as they should be. The Wikipedia one, for example, can display Wikipedia entries directly inside the widget, unlike some others which just take you to Wikipedia, which is rather pointless.</p> +<p>Although widgets live within Opera, they can be displayed “always behind”, which means they’ll be glued to your desktop and therefore will be visible whenever Opera and other applications are minimized.</p> +<p>Needless to say that anyone brave enough can make widgets for Opera by following a simple <a href="http://dev.opera.com/articles/view/opera-widgets-specification-1-0/">Widget Specification</a>.</p> +<h3>Everything you can do on the Internet</h3> +<p>The term <em>browser</em> applied to Opera is somehow misleading. Personally I would have called it something like “Internet Suite”, because that would be a better choice due to the features it offers and the things it can do.</p> +<p>Traditionally speaking, a web browser can be used to browse web pages, read feeds (sometimes) and navigate through <span class="caps">FTP</span> directories. Here’s what Opera can handle:</p> +<p style="float:right;"><img src="/files/opera/files.png" alt="" /></p> +<ul> + <li>Web Pages – No need of explanations here.</li> + <li><span class="caps">FTP</span> – <span class="caps">FTP</span> directories are listed very clearly, overriding server’s settings with a more user-friendly layout.</li> + <li>Local Files – This was a surprise for me. Typing <code>file://</code> will automatically load a list of the drives currently available on your machine. Similarly, auto-completion for directory and file names is supported! I almost started using Opera as my everyday’s file manager (almost).</li> + <li>Feeds – An embedded feed reader can be used to subscribe to <span class="caps">RSS</span>/Atom feeds and view them… in a tab, of course.</li> + <li>E-mails – Opera <em>is</em> also a pretty decent email client. As of version 9.5 full <span class="caps">IMAP</span> support has been added, which definitely makes the difference.</li> + <li><span class="caps">IRC</span> – Opera can be used as an client, which works pretty well. Who needs ChatZilla anymore?</li> + <li>News – Opera can be used to signup and retrieve news from newsgroups.</li> + <li>Gopher/<span class="caps">WAIS</span> – Although not used everyday, Opera can handle these old protocols as well.</li> + <li>BitTorrent Files – By default, Opera can act as a BitTorrent client as well, so you can just open .torrent files through the program and then monitor the download progress in the Transfers window, like with any other normal download. While this feature is indeed useful, it is also possible to <a href="http://www.opera.com/support/search/view/840/">disable it</a> and still use your favorite BitTorrent client.</li> +</ul> +<h3>Portability and Synchronization</h3> +<p>Let’s spend some words about <em>portability</em>. Sure, there are two “Portable Opera” apps out there, and they work well enough, but one thing I’d like about a web browser is the ability to synchronize my preferences, customizations, themes, passwords etc. etc. across multiple computers. <br /> +Firefox is <a href="http://labs.mozilla.com/2007/12/introducing-weave/">getting there</a>, although the technology is still at a very early stage.<br /> +Opera is doing something similar through <a href="http://link.opera.com/">Opera Link</a>, which allows you to synchronize automatically your Bookmarks, your Personal Bar and your Speed Dial. All you need is to get a (free) Opera account, login to Opera Link and enable the synchronization feature from the <em>File</em> menu. From now on every time you’ll modify your Speed Dial or Bookmarks, the changes will be sent to your Opera Link page. Similarly, whenever you start using opera somewhere else, if you login to your Opera Account you should be able to synchronize your Bookmarks and Speed Dial.</p> +<p>Here are some thoughts on this type of technology:</p> +<ul> + <li>It’s not totally private yet. While it’s great to be able to sync bookmarks and speed dial, the problems arise when you finish using your friend’s computer for example… what happens to the bookmarks you just sync’ed? The only way to delete them would be to have your friend to log in to his Opera account and re-sync them. Not enough privacy for my liking.</li> + <li>Your passwords, notes, widgets, etc. etc. cannot be synchronized yet, but that will hopefully be possible in near future.</li> + <li>Sync’ing bookmarks is pointless for me. Although Opera still hopes to compete with Del.icio.us & Co., that will be very hard to achieve. I stopped using in-browser bookmarks long ago.</li> + <li>Link seems and interesting feature considering that Opera is available on virtually <em>any operating system</em> and a lot of different devices (mobile phones, Nintendo DS & Wii, …).</li> +</ul> +<p>At any rate, it is still possible to “carry around” your personal opera settings by following the instructions provided on <a href="http://help.opera.com/Windows/9.50/en/backup.html">this page</a> which explains pretty much everything you need to know aboud Opera files and local storage.</p> +<h3>Advanced Features</h3> +<p>Opera looks more “polished up” than Firefox in most cases. The superb usage of tabs for nearly everything is one example, and another one is the possibility to apply skins (themes) on-the-fly, without having to restart the browser. <br /> +Firefox <em>can</em> do this via the <a href="http://labs.mozilla.com/2007/12/personas-for-firefox/">Personas</a> extension, but Opera had this built-in for a long time.</p> +<p>To apply a new skin:</p> +<ol> + <li>Go to the <a href="http://my.opera.com/community/customize/skins/">Skins Directory</a></li> + <li>Download a skin you like</li> + <li>Opera will download and apply the skin immediately, <strong>and it will ask you whether you want to keep it or not</strong>. If you choose not to, it won’t save it in your profile (very useful for quick previews). Neat.</li> +</ol> +<p>Another quality opera always excelled to is accessibility. Besides using the interface in the traditional way, it is also possible to:</p> +<ul> + <li><strong>Use <a href="http://www.opera.com/products/desktop/mouse">mouse gestures</a></strong> – I wasn’t a big fan of this until I bothered reading the excellent documentation Opera provided for them (which is significantly better than <a href="http://www.mousegestures.org/">the Firefox’s equivalent</a>). It can be quite useful at times.</li> + <li><strong>Use <a href="http://www.opera.com/products/desktop/keyboard/">keyboard shortcuts</a></strong> – Believe it or not, you can literally <a href="http://www.opera.com/support/tutorials/nomouse/">use Opera without a mouse</a>.</li> + <li><strong><a href="http://www.opera.com/products/desktop/voice/">Speak</a> to it</strong> – Opera’s voice integration is getting better and better. Not only you can effectively <a href="http://www.opera.com/support/tutorials/voice/">tell your browser what to do</a>, you can also use the built-in text-to-speech function (Windows only) to have it read entire pages for you. It actually works quite well and it can parse punctuation well enough to apply the right intonation. Just for fun, I had it read it an Italian page… and it actually worked as expected: it was like listening to an American reading an Italian text using US pronuntiation!</li> +</ul> +<p>Finally, power users will be delighted of the way opera lets you hack the program settings, as you can:</p> +<ul> + <li>Use <strong>Tools > Quick Preferences</strong> to block/unblock popups, cookies, Java applets, images, etc.</li> + <li>Use <strong>Tools > Advanced</strong> to access detailed information concerning cookies, cache (it lists every image/object cached!), plug-ins, Wand passwords, etc.</li> + <li>Use <strong>Tools > Appearence…</strong> to access and manage appearance-related settings, like skins, toolbars, buttons and panels</li> + <li>Use <strong>Tools > Preferences…</strong> to access general preferences (all the rest)</li> + <li>Type in <strong>opera:config</strong> to view and tweak Opera’s internal settings, somehow like Firefox’s about:config, but much cleaner and easier to use.</li> + <li>Download the <strong><a href="http://dev.opera.com/tools/">Developer Console</a></strong> to have a simpler alternative to Firefox’s Web Developer Toolbar extension, to view <span class="caps">DOM</span> elements, <span class="caps">CSS</span> and Javascript information.</li> +</ul> +<h3>Annoyances</h3> +<p>After using as main browser for a few weeks now, I can say that it’s great but not perfect yet. It’s very advanced, faster and more mature than any other browser, of course,but there are a few things which should be fixed or improved.</p> +<p>In particular:</p> +<ul> + <li><strong>It’s not open source</strong> – This may not matter to someone, but some people consider this an essential requirement for their browser, and that’s why Firefox is their most obvious choice. Although Opera is free, it is proprietary software after all, which means is definitely not as open as you may want it to be. Personally I’m not too bothered, as I’m starting to think that too much openness may lead to too many unuseful and bloated extensions and make the program somehow “unpredictable” and heavy.</li> + <li><del><strong>No address bar search</strong> – Amazingly, only Firefox seems to have this feature built-in. I’m referring to the ability to type whatever in the address bar to be redirected to the site returned by a Google’s <em>I’m feeling lucky</em> search. It is possible to emulate this feature in Opera by creating a custom search for <em>I’m Feeling Lucky</em> and assign it a short keyword like “l”. In this way, for example, typing in <code>l h3rald</code> should lead you to this website. Not quite as immediate as in Firefox though.</del></li> + <li><del><strong>No find as you type</strong> – Another big disappointment for who comes from Firefox or Safari: Opera still uses a dialog box to perform page searches.</del></li> + <li><del><strong>No spell clecking</strong> – Again, both Firefox and Safari now offer text fields spell checking. Opera doesn’t yet.</del></li> + <li><del><strong>No <span class="caps">HTML</span> mail composer</strong> – Opera’s built-in mail client can display <span class="caps">HTML</span> emails but doesn’t yet allow users to create them.</del></li> + <li><del><strong>Auto-start widgets?</strong> – This is a feature enhancement Opera Dev Team should consider: allow users to configure certain widgets to start automatically when Opera starts.</del></li> + <li><del><strong>Google Reader + Flash problems</strong> – Sometimes I experiences some scrolling problems when reading news which contain embedded flash movies on Google Reader.</del></li> + <li><strong>Corporate Sites</strong> – Unfortunately some corporate web site do not support Opera or are not displayed correctly in Opera. Unfortunately there’s nothing much we can do about it but trying to “mask” Opera as another browser (via <strong>right-click > Edit Site Preferences…</strong>)</li> + <li><del><strong>Default Browser Problems</strong> – Setting Opera as default browser on Windows doesn’t seem to set the file icons accordingly (or worse, it resets them to the default file icon).</del></li> +</ul> +<p><strong><span class="caps">ERRATA</span>:</strong></p> +<ul> + <li>It is possible to have Opera to redirect you to the right after typing a few words in thr address bar by setting Google’s “I’m feeling lucky” as default search engine <em>(thanks <strong>EJ902</strong>)</em>.</li> + <li>Spell Checking is <a href="http://www.opera.com/support/tutorials/opera/spellcheck/">supported</a> via <span class="caps">GNU</span> Aspell <em>(thanks <strong>cvm</strong>)</em> or by using <a href="http://opera.gt500.org/ospell/">Ospell</a> for inline spell checking <em>(thanks <strong>Dava</strong>)</em>.</li> + <li>Find as you type can be triggered by pressing <code>.</code> and typing <em>(thanks <strong>cvm</strong>)</em>.</li> + <li>It is possible to auto-start widgets by saving a session with all your widget open and reloading it at every startup [CTRL+F12 > General > Startup > Continue saved sessions] <em>(thanks <strong>Tamil</strong> & <strong>Ameer</strong>)</em>.</li> + <li>As of the <a href="http://my.opera.com/desktopteam/blog/">latest snapshot</a>, setting Opera as default browser and handler for <span class="caps">HTML</span> files doesn’t cause any problems <em>thanks <strong>Ayush</strong>)</em>.</li> +</ul> +<h3>Conclusion</h3> +<p>Despite the few annoyances listed in the previous section, Opera 9.5 beta 1 truly impressed me. I was waiting for Opera to get better before switching and now I’ve not been using Firefox for a few weeks.<br /> +Although Opera offers a lot of features, there’s still room for improvements, especially for what concerns integration with third party services: I would really like to see some sort of integration with del.icio.us, and that could be possible via widgets at least. <br /> +Regarding the new Opera Link feature, it looks very promising and a potential competitor for Mozilla Weave even though it will be used mainly to get more and more users to register to the Opera community (I did, at least), which is indeed very active any way.</p> +<p>To conclude this article, which still barely scratches the surface of this very powerful application, I’d like to praise two more things about Opera:</p> +<p><span style="float:right; margin:3px;"><br /> +<script type="text/javascript"> +digg_url = 'http://digg.com/software/A_Firefox_Lover_s_Guide_to_Opera'; +</script> +<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script><br /> +</span></p> +<ul> + <li>Their website network, and in particular their truly excellent documentation knowledge base, which is very comprehensive of references, tutorials and interesting articles. I am a full time technical writer myself, and I’ve hardly ever come across better documentation.</li> + <li>Their extensive <a href="http://www.opera.com/docs/specs/">support and compliance to web standards</a>, which makes Opera the most advanced browser ever made.</li> +</ul> +<p>If you’ve not tried Opera before, or if you’ve always dismissed it because “X browser is better”, you may want to <a href="http://www.opera.com/products/desktop/">give it another shot</a>: for me it was definitely worthwhile!</p>
@@ -0,0 +1,20 @@
+----- +title: "Firefox 3 Revealed" +content-type: article +timestamp: 1213670760 +tags: "firefox|browsers|writing|review|books" +----- +<p>When the SitePoint staff asked me to write an article summing up all the new features of Firefox 3, I gladly accepted: I wrote about Firefox before, and I thought it was just going to be a 2-3 hours job maximum. <br /> +After diving deeper into Firefox 3 development, reading dozens of different blogs and scouting Mozilla’s web sites, I realized I was wrong: Firefox 3 introduced <em>a lot</em> of new things, and keeping track of all of them, I admit, was quite a hard task.</p> +<p>Nevertheless, I wrote the article and delivered it to SitePoint in time fore the release, but my editor “complained” that 8,300+ words was about 3 times over the minimum requirements for a feature article! <br /> +<em>“I don’t really think that people can read the whole thing online”</em> —, he said, and I somehow agreed.</p> +<p>In the end, they decided to pack my “article” into a 30-pages <span class="caps">PDF</span> eBook which can be downloaded <em>absolutely free of charge</em> from SitePoint web site as well, so here it is:</p> +<p style="float:left;"><img src="/files/ff3-revealed.png" alt="" /></p> +<p><br /><br /> +<span style="font-size: 1.5em;"> <strong><a href="http://firefox.s3.sitepoint.com/ff3-revealed.zip">Firefox 3 Revealed</a></strong> </span></p> +<p>If you prefer though, you can still read the article directly on SitePoint, <a href="http://www.sitepoint.com/article/firefox-3-whats-new-whats-hot">here</a>.</p> +<p>This guide aims to give you a comprehensive overview of virtually <em>all</em> the new features and improvements introduced by Firefox 3.</p> +<p><br /><br /></p> +<p>I would like to thank the whole SitePoint staff for giving me the opportunity to write this eBook, and in particular <strong><a href="http://magain.com/blog/">Matthew Magain</a></strong> for his help and support (and for creating the <span class="caps">PDF</span> on a Sunday evening!).<br /> +Additionally, I would also like to thank the Mozilla Development Team for their awesome job with Firefox 3 and everyone else who made this eBook possible.</p> +<p><strong>Update:</strong> Feel free to <strong><a href="http://digg.com/software/FireFox_3_Revealed_Free_ebook_from_SitePoint">digg</a></strong> this eBook!</p>
@@ -0,0 +1,7 @@
+----- +title: "From Firefox to... Deer Park?" +content-type: article +timestamp: 1132509930 +tags: "firefox|browsers|review" +----- +On May 31st 2005 the Mozilla Foundation silently released the Deer Park browser... no, it's not another name change for Firefox, but the codename they gave to the long-awaited 1.1 release of the free, famous, award-winning browser. Actually what we have for now is just a non-feature complete developer preview release of the new milestone, the first alpha release, in other words. The alpha release nevertheless seems to be fully functional and already useable.ETAs for the actual stable version are not given as usual, but we should expect another alpha candidate soon hopefully (They wrote "June" on the <a href="http://www.mozilla.org/projects/firefox/">roadmap</a>, and we're already in July). Anyhow, this developer-oriented preview release can be <a href="http://www.mozilla.org/projects/firefox/">downloaded</a> and installed on Windows, Linux, and Mac OS X systems plus eventually, <a href="http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/deerpark/alpha1/contrib/">Solaris and others</a>. The decision of using the codename Deer Park instead of naming the release Firefox 1.1 alpha 1 or something of the like was made to avoid the havoc which occurred before the official release of Firefox 1.0 (which was codenamed "Phoenix" by the way,) when some websites offered a late preview release as the actual new version to download.<br />This time when you install and run the program the Firefox name has been substituted with Deer Park Alpha 1, so for example Deer Park is used in the browser's title bar and in the "About Deer Park Alpha 1" menu under "Help". The icon they used for this testing release is not even the usual firefox icon - it represents a plain blueish globe with no fox whatsoever. They have definitely put in effort this time to avoid confusion.<br /><br />Furthermore, when the browser is installed it does not overwrite your existing firefox installation, simply because (on windows) it's installed under a directory named "Deer Park Alpha 1". As a side note, the process is "firefox.exe", so you cannot run Firefox and Deer Park at the same time: you'll just open another window of the browser which is already running. Having said this, let us now examine what is new in this developer's release.<br /><br /><strong>Fixed bugs</strong><br />Like any other Firefox Release, Deer Park comes with several <a href="http://www.squarefree.com/burningedge/releases/1.1a1.html">Bug Fixes</a>. On the official changelog there are many bugs reported to be fixed, sometimes they are hardly noticeable but I experienced some of them when browsing some websites and also when creating applications myself:<br /><br />- <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=103638">103638</a> - Targets with same name in different windows open in wrong window with javascript.<br />- <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=97283">97283</a> - Mouse wheel scrolling does not work for elements such as div using overflow - auto or scroll.<br />- <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=251986">251986</a> - Keyboard scrolling does not work for elements such as div using overflow - auto or scroll.<br />- <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=245829">245829</a> - Download manager progress and title do not update correctly, wrong number of files and percentage after finishing or cancelling a download.<br /><br />These are in my opinion the most notable of the notable bugs which have been fixed in this release. I was particularly relieved when I noticed that all the issues regarding scrolling divs or similar elements had been resolved. Also, it must be noted that Deer Park seems overall slightly faster than Firefox 1.0.4 (Note: I also have a Pentium II, that is why I could notice that probably). The speed increase is most probably caused by the base for Deer Park being the Mozilla 1.8 Beta 2 code, which is almost 1 year newer than what used for Firefox 1.0.<br /><br /><br /><strong>New Features</strong><br />Although announced as a non-feature complete release, it comes with some new and useful features. The new feature list includes nothing too extraordinary for now and they are all somehow minor changes but they really do represent some improvements. Perhaps the two most obvious features introduced with this release are the <em><strong>Sanitize Deer Park</strong></em> and the <em><strong>Report Broken Sites</strong></em> functions. The first one is accessible through the Tools menu and basically allows you to delete the Browsing History, Saved Form Information, Saved Passwords, Download History, Cookies and Cache. Actually you can accomplish the same feat via Options->privacy, but with Sanitize you need just one click. Convenience I suppose?<br /><br />The Report Broken Sites feature is reachable via the Help menu and basically starts a short wizard that you can use when you notice something wrong with a website. You just have to provide the url of the website, the problem you experienced (Browser not supported, cannot login, plugin not installed, other content missing, odd behaviou, odd appearence, etc.) and an optional description and email and then the report will be submitted to the Mozilla Deleopers.<br /><br />Additional features included are also <em>Image thumbnails as Tab icons</em>, used when viewing a single image with firefox, not a shocking feature really but it's just a little (tiny) bit of eyecandy I guess. Furthermore, when you try accessing an FTP server anonymously and that server doesn't allow anonymous access, you are prompted to provide appropriate credentials (before it just didn't let you in)... another little improvement, which probably will not change your life, but it's nice to know that it's there.<br /><br />Another more notable feature only for linux and mac users though allows changes made in the Preferences menu to be applied immediately without restarting your system. Using Windows on the other hand, they improved the option interface with a more extensive use of tabbed interfaces, and also additional options concerning tabbed browsing (BUT in my opinion the <a href="https://addons.mozilla.org/extensions/moreinfo.php?id=158&application=firefox">tabbrowser preferences</a> extension is still necessary to achieve certain behaviours).<br /><br />Regarding something more technical, among the so-called developers features there are various improvements regarding CSS support, in particular CSS2's <a href="http://www.w3.org/TR/CSS21/generate.html#quotes-specify">quotes nesting</a> and even some new CSS3 (!) features, like <a href="http://www.w3.org/TR/css3-multicol/">Multi-column layouts</a> the :only-child selector, overflow-x and overflow-y properties and even various new <a href="http://www.w3.org/TR/css3-ui/#cursor">cursors names</a>.<br />Even more news from Mozilla suggests that Deer Park already supports some functions for resolution-independent scalable vector graphics (SVG 1.1), but it's obviously just experimental, and even scriptable bitmap drawing surface (<a href="http://developer-test.mozilla.org/docs/Drawing_Graphics_with_Canvas">Canvas</a>). Last but not least, even support for <a href="http://www.w3.org/MarkUp/Forms/">Xforms</a> is already possible in Deer Park through a <a href="http://www.mozilla.org/projects/xforms/">related project/extension</a>. <br /><br /><br /><strong>Final Thoughs</strong><br />Again the Mozilla Foundation - with this fully functional but yet incomplete preview release,- seem to be always improving their foundations, and always offering support for new technologies and features before others. This release has certainly seen some great improvements, on the other hand hardly anything changes for website developers with this release. It is without a doube that websites are viewed better with Deer Park than with Firefox 1.0.4 or IE or any other browser for that matter. But it is impossible to even start planning at this stage for the development of a publicly accessible site using for example SVG graphics and Xforms, as visitors using other browsers will not be able to see any "magic" in them, or perhaps even view them at all.<br /><br />It's always the same paradox of web-development: where on one side of the coin there are new and better products are available, a website/online application should be accessible by at least 90-95% of visitors. Unfortunately, for now though 90-95% of all internet users seem to use <em>some other product</em> instead of Firefox or Deer Park... But that's another story!<br />
@@ -0,0 +1,88 @@
+----- +title: "Getting Started with Lithium" +content-type: article +timestamp: 1256654880 +tags: "li3|php|tutorial" +----- +<p>So <a href="http://li3.rad-dev.org/">Lithium</a> is now officially out, and its 0.1 release can be freely <a href="http://rad-dev.org/lithium/versions">downloaded</a> from the official web site or by cloning the Lithium git repository. The good news is that although not many web hosts offer <span class="caps">PHP</span> 5.3, you can try it out youself, locally and with minimum effort.</p> +<h3>Requirements</h3> +<p>According to the <a href="http://rad-dev.org/wiki/guides/setup">Lithium Wiki</a>, to develop applications with Lithium you need:</p> +<ul> + <li>A web server, like Apache or <span class="caps">IIS</span></li> + <li><span class="caps">PHP</span> 5.3.0 or higher</li> + <li>Git (not required, but all example projects are on git repos, so you may as well have it)</li> +</ul> +<p>For this tutorial, more specifically, you need to download (just download, don’t install anything!):</p> +<ul> + <li><a href="http://code.google.com/p/mongoose/">mongoose</a>, a tiny, standalone (as <em>in one single file</em>), cross-platform web server.</li> + <li><a href="http://www.php.net/downloads.php#v5"><span class="caps">PHP</span> 5.3.0</a>, not the installer, the zip package.</li> + <li><a href="http://rad-dev.org/lithium/versions">Lithium</a> (version 0.1, at the time of writing)</li> + <li>The <a href="http://rad-dev.org/li3_docs">li3_docs plugin</a>.</li> +</ul> +<p>To get the li3_docs plugin you need to <a href="http://rad-dev.org/users/add">register</a> on rad-dev.org, and clone the li3_docs git repository. If you don’t have git installed or you don’t want to read <a href="http://spheredev.org/wiki/Git_for_the_lazy">another awesome tutorial</a> to install it and learn how to use it, I’ll save you the hassle and let you download the plugin from <a href="/files/li3_docs.zip">here</a>, for this time ony.</p> +<p><b>Note:</b> This tutorial assumes that you are on Windows. If you are not, some things may be a bit different depending on your platform.</p> +<h3>Setting up the environment</h3> +<p>Choose a directory on your sistem (let’s call it <b>D:\lithium_test</b> from now on). We’ll do everything in here, and you can move it anywhere you like afterwards, even on a <span class="caps">USB</span> stick, without breaking anything.</p> +<ol> + <li>Unzip Lithium in <b>D:\lithium_test</b>, so that it contains the following files and directories: + <ul> + <li>app/</li> + <li>libraries/</li> + <li>.htaccess (it won’t actually be used in this tutorial)</li> + </ul></li> + <li>Unzip <span class="caps">PHP</span> 5.3.0 somewhere and copy the following files to the <b>D:\lithium_test</b> folder: + <ul> + <li>php5.dll</li> + <li>php-cgi.exe</li> + <li>php.ini (just get php.ini-development from the <span class="caps">PHP</span> package and rename it)</li> + </ul></li> + <li>Copy the mongoose-2.8.exe executable in <b>D:\lithium_test</b> and rename it to <b>mongoose.exe</b> for convenience.</li> + <li>Create a <b>mongoose.conf</b> file containing the following lines:</li> +</ol> +<div class='text'><pre><code>cgi_interp php-cgi.exe +cgi_ext php</code></pre></div><p>If you did everything correctly, your <b>D:\lithium_test</b> directory should contain the following:</p> +<ul> + <li>app\</li> + <li>libraries\</li> + <li>.htaccess</li> + <li>mongoose.exe</li> + <li>mongoose.conf</li> + <li>php-cgi.exe</li> + <li>php.ini</li> + <li>php5.dll</li> +</ul> +<h3>Running Lithium</h3> +<p>Double click <b>mongoose.exe</b> and point your browser of choice to <a href="http://localhost:8080/app/webroot/index.php">http://localhost:8080/app/webroot/index.php</a>. You should see the Lithium temporary homepage (yes, I expected something fancier too):</p> +<p><img src="/img/pictures/lithium/temp_homepage.png" alt="" /></p> +<p>Now, let’s see if we can get the li3_docs plugin running as well:</p> +<ol> + <li>Unzip <b>li3_docs.zip</b> and copy the <b>li3_docs</b> folder in <b>D:\lithium_test\app\libraries\plugins</b>.</li> + <li>Open <b>D:\lithium_test\app\config\bootstrap.php</b> and add the line: <code>Libraries::add('plugin', 'li3_docs');</code> at the end. I actually found this commented out already (line 80).</li> +</ol> +<p>Go to <a href="http://localhost:8080/app/webroot/index.php?url=docs">http://localhost:8080/app/webroot/index.php?url=docs</a>, you should see something like this:</p> +<p><img src="/img/pictures/lithium/li3_docs.png" alt="" /></p> +<p>Congratulation, you’re now running your first Lithium application!</p> +<h3>Fixing URLs</h3> +<p>Once the initial excitement wears off you’ll notice that none of the links on the docs page works.</p> +<p>That’s because the mongoose web server does not support <span class="caps">URL</span> rewriting (and Lithium needs it badly right now), so we have to change the way URLs are created. <a href="http://twitter.com/nateabele">@nateabele</a> gave me <a href="http://pastium.org/view/3a966c1446fcbd1d4f5a94d882256987">some tips</a> on how to do this; it’s very simple:</p> +<ol> + <li>Create a directory called <b>action</b> in <b>D:\lithium_test\app\extensions</b>.</li> + <li>Create a file called <b>Request.php</b>, containing the following:</li> +</ol> +<div class='php'><pre><code><?php +namespace app\extensions\action; + +class Request extends \lithium\action\Request { + + protected function _base() { + return '?url='; + } +} +?></code></pre></div><p>We’re basically extending the <code>\lithium\action\Request</code> with a custom class, telling Lithium how to create the base <span class="caps">URL</span>.</p> +<p>After doing so, open <b>D:\lithium_test\app\webroot\index.php</b> and change:</p> +<p><code>echo lithium\action\Dispatcher::run();</code></p> +<p>into:</p> +<code>echo lithium\action\Dispatcher::run(new app\extensions\action\Request());</code> +<p>In this case, we’re instructing the dispatcher to use our custom Request class instead of the default one.</p> +<p>Now everything should work as expected. Reload the docs page (<a href="http://localhost:8080/app/webroot/index.php?url=docs">http://localhost:8080/app/webroot/index.php?url=docs</a>) and verify that the links work by navigating to <code>Lithium</code>, then <code>action</code> and finally <code>Controller</code>.</p> +<p>Now you can use Lithium to display its own <span class="caps">API</span> locally (if things didn’t work out, there’s always <a href="http://li3.rad-dev.org/docs">http://li3.rad-dev.org/docs</a>).</p>
@@ -0,0 +1,51 @@
+----- +title: "Git for the Locals" +content-type: article +timestamp: 1216095480 +tags: "programming" +----- +<p><em>“This is a <strong>local</strong> shop for <strong>local</strong> people, we want no trouble here!”</em></p> +<p>— Edward, <a href="http://en.wikipedia.org/wiki/League_of_gentlemen">The League of Gentlemen</a></p> +<p>I’m normally quite cautious when it comes to IT novelties like new frameworks, new methodologies and similar, especially when it feels like they’re over-hyped. Especially nowadays, it is sometimes very hard to tell whether something new is over-hyped or really a Good Thing™ without spending some time looking into it. And especially nowadays, finding the time to look into something new can be a real challange.</p> +<p>I deliberately didn’t look into Git properly since it went “mainstream” (maybe I shouldn’t use this word), but when <a href="http://www.spheredev.org/wiki/Git_for_the_lazy">this tutorial</a> came out I couldn’t resist. Sure, I knew Git was an amazingly fast distributed version control system, that <a href="http://github.com/">GitHub</a> offered free accounts, that all the cool guys were slowly starting to use it in place of Subversion, etc. etc.</p> +<p>What I didn’t realize though, that the most obvious advantage of this <span class="caps">DVCS</span> was the fact that it was <strong>distributed</strong>, i.e., it <em>didn’t need</em> a centralized server.</p> +<p>Let me repeat this: <strong>Git <em>doesn’t need</em> a centralized server.</strong></p> +<p>Really.h3. …But it’s not user-friendly!</p> +<p>If you’re a Windows user and you used Subversion before, chances are that you got accustomed to <a href="http://tortoisesvn.tigris.org/">TortoiseSVN</a>, too. TortoiseSVN is — in a way — a nice graphical fron-end to <span class="caps">SVN</span> which provides seamless Windows Explorer integration. <br /> +Git doesn’t have anything like that yet. There’s something in the works, sure, but nothing really comparable to TortoiseSVN. Therefore, you are <em>kindly suggested</em> to get on and use the command line for all your git stuff.</p> +<p>Oh well, I personally love using command line interfaces for certain tasks, event if I spend more time on Windows than on any other OS and well, the <span class="caps">DOS</span> prompt is no way near to bash & Co.</p> +<p>For the <del>lazy gits</del> Windows users, <a href="http://code.google.com/p/msysgit/">MSysGit</a> is the answer to all your problems. <em>Officially</em> you have to install Cygwin and all its crap to be able to use Git on Windows. Not that Cygwin is bad, but I personally don’t like the extra layer it creates between you and an OS symulation which is not really what’s on your machine.It would be great if you could get all the Bash goodies natively, without the hassle.</p> +<p>that’s basically what you get for free when you install MSysGit: the best (to date) version of Bash you could possibly dream of for Windows, along with a few handy Gnu tools and of course all git commands.<br /> +In a few click, you’ll be able to use Git (and Bash!) right away: no tricks, no hassle, no kidding.</p> +<p>And stop moaning about the command line not being user friendly. You want a new repository <em>anywhere</em>? Just type in the following:</p> +<div class='text'><pre><code>git init +git add . +git commit</code></pre></div><p>This will create your new repository in the current directory, add all your files and filders recursively, and perform the initial commit. What’s so hard in this? Nothing. And it’s faster than <span class="caps">SVN</span>, for sure.</p> +<h3>Are you local?</h3> +<p>“Being local” has its own advantages: you know where you stand, you know what to expect, you don’t depend on other people. What I didn’t fully realize about Git is that it can be a 100% <em>local</em> repository.</p> +<p>The three Git commands I mentioned earlier can be used to create a repository <em>there</em>, exactly where you are: not on a server far, far away.<br /> +Let’s see what this means:</p> +<ol> + <li>You don’t need an Internet connection anymore to use a <span class="caps">VCS</span></li> + <li>You don’t get a .svn folder in <em>every</em> damn directory of your project, with a load of crappy files in it.</li> + <li>You get only a .git folder <em>at top level</em>, and that’s where your repository actually is. Granted, there are going to be quite a few files in there, but they’re not going to be scattered all over the place</li> + <li>You can physically copy your repository anywhere and still use it</li> + <li>You don’t need to signup to GitHub for an account, if you only want your own <span class="caps">VCS</span></li> +</ol> +<p>OK, this is an extreme scenario, but sometimes you may want your <em>own</em> local repository for your stuff. You may want a place to version your documents, or a place to version your own little pet programming project nobody knows about.<br /> +With Git, you can get all the advantages of a <span class="caps">VCS</span> (and an <em>incredibly fast</em> <span class="caps">VCS</span>) without having to setup any server infrastructure: just install Git on your machine, and you’re done. No server processes, no hassle.</p> +<h3>Don’t connect, synchronize</h3> +<p>All the information your repository needs is stored in that little .git folder, nowhere else. You can copy your files and that folder, and you’ll still get your repository back wherever you are. Maybe you can zip it before copying it, and then unzip it where you need a <span class="caps">VCS</span>, event.</p> +<p>I tried using some synchronization utilities like SyncToy or RoboCopy on Windows to keep my files synchronized on multiple computers: it all started off from the fact that I can’t use <span class="caps">SSH</span> at work, so I wouldn’t be able to push my commits back to a central repository online like GitHub.</p> +<p>So here’s what I did:</p> +<ol> + <li>I setup a local repository for my project on a local folder at work.</li> + <li>I started working on my project, did a few commits.</li> + <li>After performing the last commit for the day (you are encouraged to commit often by Git, really), I synchronized that folder with my <span class="caps">USB</span> key, via SyncToy.</li> + <li>Back at home, I used SyncToy again to synchronize my files (including the repository) between the <span class="caps">USB</span> key and my home computer.</li> + <li>Performing a <code>git status</code> showed that some files have been modified (all of them, actually): that’s because Git detected that they weren’t the same files which were committed, presumably because of different timestamps etc.</li> + <li>All I did was a <code>git reset --hard</code> to get <em>exactly</em> the same files I committed at work, with absolutely no information loss.</li> +</ol> +<p>Isn’t it a bad thing to move your git folder back and forth and let another program to synchronize files within it? Maybe, but it seems to work so far. A safer option, in this case, may be zipping the folder before synchronizing it, just to be sure.</p> +<h3>Conclusion</h3> +<p>Git can do much more than this. Git offers some really interesting branching features, for example, which I didn’t mention in this article, of course, like several dozens of other commands. What I tried to point out was that Git can be used by <em>anyone</em>, as a fast, simple and very effective private <em>local</em> repository. In case you need one, that is (if you are really <em>local</em>).</p>
@@ -0,0 +1,76 @@
+----- +title: "Glyph 0.2.0 Released" +content-type: article +subtitle: "Featuring single-file compilation, programmatic usage and auto-regeneration, and more" +timestamp: 1273417200 +tags: "glyph|ruby|opensource" +----- + + <section class="section"> +<p>I am very pleased to announce the second release of the <a href="/glyph/">Glyph Document Authoring Framework</a>. For those who don’t know, Glyph is a pure-Ruby, extensible solution to author documents like books or articles using a simple, fully-customizable markup language.</p> +<p>Since the <a href="/articles/introducing-glyph/">first release</a>, came out, last month, a lot happened. Plenty of bugs were fixed and new features implemented, as shown by the <a href="http://github.com/h3rald/glyph/blob/master/CHANGELOG.textile">changelog</a>. Here’s a brief rundown of the most notable changes.</p> +<section class="section"> +<header><h1 id="h_1" class="toc">What Glyph code looks like</h1></header> +<p>Earlier this week I <a href="http://blog.h3rald.com/making-a-custom-vim-syntax-file">blogged</a> about my new <a href="http://github.com/h3rald/stash/blob/master/.vim/syntax/glyph.vim">Glyph vim syntax file</a>. I’ve been using it for a while, and all I can say is that it really helps! Here’s what it looks like:</p> +<p><img src="/img/pictures/glyph_syntax.png" /></p> +<p>I’m sorry for the Emacs and TextMate folks, but I only use Vim, so I only made a Vim syntax file. Anyhow, Glyph grammar is very simple, so rolling out your own syntax file for your favorite editor shouldn’t be too hard.</p> +</section> +<section class="section"> +<header><h1 id="h_2" class="toc">Notable features</h1></header> +<section class="section"> +<header><h1 id="h_3" class="toc">Single-file compilation</h1></header> +<p>Perhaps the most life-changing feature in this release is the possibility of compiling a single Glyph source file into an <span class="caps">HTML</span> or <span class="caps">PDF</span> file. This means you no longer need to create a full-blown project for writing a short article: just create a file anywhere and run <code>glyph compile filename.glyph</code>on it!</p> +<p>The good thing is that with this new release you can also define snippets, configuration settings, and even macros right into your Glyph files, so you can do almost anything without having to create a project or fiddle with <span class="caps">YAML</span> files.</p> +</section> +<section class="section"> +<header><h1 id="h_4" class="toc">Programmatic usage</h1></header> +<p>The second most notable feature is the possibility to use Glyph as a Ruby library, i.e. as you’d use a filter like RedCloth or MarkDown. Additionally, it is also possible to compile single files programmatically, so you can, for example, create <span class="caps">PDF</span> files for your articles from the same source file. Don’t believe me? Feel free to click the <em>Download <span class="caps">PDF</span></em> and <em>View Source</em> links on this very page to see for yourself…</p> +<p>For those of you using the awesome <a href="http://nanoc.stoneship.org">nanoc</a> static site generator, here’s a few source files you may want to take a look at:</p> +<ul> + <li><a href="http://github.com/h3rald/h3rald/blob/master/lib/glyph-data.rb">lib/glyph-data.rb</a> — How to update configuration settings.</li> + <li><a href="http://github.com/h3rald/h3rald/blob/master/lib/glyph-filter.rb">lib/glyph-data.rb</a> — a simple Glyph filter.</li> + <li><a href="http://github.com/h3rald/h3rald/blob/master/Rules">Rules</a> — a rule using the <code>Glyph#compile</code> method to generate <span class="caps">PDF</span> files.</li> +</ul> +</section> +<section class="section"> +<header><h1 id="h_5" class="toc">Auto-regeneration</h1></header> +<p>Another very interesting feature is the possibility to auto-regenerate your output files automatically whenever a source file is changed. Just run <code>glyph compile --auto</code> and you’re away. I’d like to thank <a href="http://koraktor.github.com">Sebastian Staudt</a> for proposing, implementing, and testing this feature.</p> +</section> +<section class="section"> +<header><h1 id="h_6" class="toc">Conditional macros</h1></header> +<p>Finally, although it may worry some, I added the possibility to evaluate conditional expressions directly in Glyph. The syntax is a bit verbose due to the extreme simplicity of Glyph parser, but it does the job:</p> +<p><code> +?[and[ + eq[$[document.output]|pdf]| + eq[$[tools.pdf_generator]|prince] + ]| + style[pagination.css]] +</code></p> +<p>The snippet above can be used to include the <code>pagination.css</code> stylesheet only when generating a <span class="caps">PDF</span> file with Prince <span class="caps">XML</span>.</p> +</section> +</section> +<section class="section"> +<header><h1 id="h_7" class="toc">What’s next?</h1></header> +<p>Release 0.3.0 is currently being planned, and so are its <a href="http://github.com/h3rald/glyph/issues">features</a>. For now, I’d like to thank the following individuals for contributing to Glyph:</p> +<ul> + <li><a href="http://www.jabbslad.com">Jamie Atkinson</a> (Jabbslad), for spotting and fixing some bugs and providing feedback.</li> + <li><a href="http://koraktor.github.com">Sebastian Staudt</a> (koraktor), for spotting and fixing some bugs, proposing and implementing new features.</li> +</ul> +<p>In particular, Sebastian is working on <a href="http://wiki.github.com/h3rald/glyph/feature-bibliography-support">bibliogaphy support</a> for Glyph, looking forward to it!</p> +<p>Although still in its infancy, Glyph is becoming more and more usable everyday. If you are interested, you can contribute in many different ways to the project, such as:</p> +<ul> + <li>By participating to discussions on the <a href="http://groups.google.com/group/glyph-framework">user group</a> (it’s a bit quiet of there for now…)</li> + <li>By spreading the word on Twitter, on your blog, or wherever you like.</li> + <li>By installing it, using it, reporting bugs and proposing new features (it’s just a <code>gem install glyph</code> away!).</li> + <li>By actually contributing to its development (it’s <a href="http://wiki.github.com/h3rald/glyph/contribution-guidelines">easy</a>!).</li> +</ul> +<p>Additionally, if you don’t like coding:</p> +<ul> + <li>feedback on the current documentation and on the <a href="http://github.com/h3rald/glyph/raw/master/book/output/pdf/glyph.pdf">Glyph book</a> is appreciated</li> + <li>if you are good with <span class="caps">CSS</span>, I’m looking for some nice new <span class="caps">CSS</span> styles to include in the standard Glyph distribution.</li> + <li>if you’re good with graphics, Glyph needs a good-looking logo…</li> +</ul> +<p>Any form of contribution will be credited in some way, e.g. by links and tweets.</p> +</section> + +</section>
@@ -0,0 +1,84 @@
+----- +title: "Glyph 0.3.0 Released" +content-type: article +subtitle: "The third release of the Glyph Authoring Framework features dramatic speed improvements, and much more" +timestamp: 1276431000 +tags: "glyph|ruby|opensource" +----- + + <section class="section"> +<p>The third release of <a href="/glyph/">Glyph</a> is out!</p> + +<p>For those checking it out for the first time, Glyph is a <em>Rapid Document Authoring Framework</em> focused on extensibility and content reuse. For an example of what Glyph can do, have a look at Glyph's <a href="http://github.com/downloads/h3rald/glyph/glyph.pdf">free PDF book</a>.</p> + +<p>This release brings more stability to Glyph, more speed, and features affecting Glyph's core functionality. As a consequence, some <a href="http://github.com/h3rald/glyph/issues/closed#issue/121">incompatibilities</a> had to be introduced – but after all, better now than later.</p> + +<section class="section"> +<header><h1 id="h_1" class="toc">New parser and performance improvements</h1></header> +<p>This release's big news is the brand new <a href="http://yardoc.org/docs/h3rald-glyph/glyph/parser">Glyph Parser</a>. Until this release, Glyph relied on the awesome <a href="http://treetop.rubyforge.org/">Treetop</a> library for parsing Glyph language. Treetop is great when it comes to creating language parsers effortlessly, but it can add quite a bit of an overhead especially when using <a href="http://groups.google.com/group/treetop-dev/browse_thread/thread/15ff7659b2efbeed">dot star</a> patterns.</p> + + <p>So I ran a few benchmarks and in the end decided to write my very own (first!) parser from scratch using just the <a href="http://ruby-doc.org/core/classes/StringScanner.html">StringScanner</a> class, which is part of Ruby Standard Library. It took me a bit to get used to it, but in the end I managed to create something able to produce an Abstract Syntax Tree exactly the way I wanted.</p> + + <p>After adding the new parser, Glyph became significantly faster. This doesn't mean it's as fast as, say, RedCloth, but I it can be used to process long books in just a few <em>seconds</em> rather than <em>minutes</em>.</p> + +</section> + +<section class="section"> +<header><h1 id="h_2" class="toc">Macro Attributes</h1></header> +<p>Glyph now supports named attributes as well as positional parameters. This is particularly handy when you want to create macros with a lot of optional arguments: in this case, positional parameters are not great. As a result, for example, the <code>section</code> macro now takes an optional <code>title</code> and <code>id</code> attributes, rather than two parameters</p> + + <p>Attributes look like macros, but they all start with a <code>@</code> character. For example, see the the following image, showing this very section:</p> + + <img src="/img/pictures/updated_glyph_syntax.png" /> + +</section> + +<section class="section"> +<header><h1 id="h_3" class="toc">Full XML support</h1></header> +<p>Once macro attributes became available at parser level, having Glyph to produce arbitrary XML code became extremely easy. By default, now if Glyph doesn't find a macro it assumes you're inputting an XML tag of some kind, so you can write:</p> + + <div class="CodeRay"> + <div class="code"><pre><span class="line-numbers"><a href="#n1" name="n1">1</a></span>p[This is a paragraph with some em[emphasized] text.] +<span class="line-numbers"><a href="#n2" name="n2">2</a></span>img[ +<span class="line-numbers"><a href="#n3" name="n3">3</a></span> @alt[Glyph Code] +<span class="line-numbers"><a href="#n4" name="n4">4</a></span> @width[50%] +<span class="line-numbers"><a href="#n5" name="n5">5</a></span> @height[50%] +<span class="line-numbers"><a href="#n6" name="n6">6</a></span> @src[glyph_code.png] +<span class="line-numbers"><a href="#n7" name="n7">7</a></span>]</pre></div> +</div> + + + <p>And get the following HTML code back:</p> + + <div class="CodeRay"> + <div class="code"><pre><span class="line-numbers"><a href="#n1" name="n1">1</a></span><span class="tag"><p></span>This is a paragraph with some <span class="tag"><em></span>emphasized<span class="tag"></em></span> text.<span class="tag"></p></span> +<span class="line-numbers"><a href="#n2" name="n2">2</a></span><span class="tag"><img</span> +<span class="line-numbers"><a href="#n3" name="n3">3</a></span> <span class="attribute-name">alt</span>=<span class="string"><span class="delimiter">"</span><span class="content">Glyph Code</span><span class="delimiter">"</span></span> +<span class="line-numbers"><a href="#n4" name="n4">4</a></span> <span class="attribute-name">width</span>=<span class="string"><span class="delimiter">"</span><span class="content">50%</span><span class="delimiter">"</span></span> +<span class="line-numbers"><a href="#n5" name="n5">5</a></span> <span class="attribute-name">height</span>=<span class="string"><span class="delimiter">"</span><span class="content">60%</span><span class="delimiter">"</span></span> +<span class="line-numbers"><a href="#n6" name="n6">6</a></span> <span class="attribute-name">src</span>=<span class="string"><span class="delimiter">"</span><span class="content">glyph_code.png</span><span class="delimiter">"</span></span> +<span class="line-numbers"><a href="#n7" name="n7">7</a></span><span class="tag">/></span></pre></div> +</div> + + + <p>...and none of the macros used in the previosu Glyph code snippet are actually defined in Glyph. Among other things, this means that <em>you don't have to</em> use Textile or Markup within your Glyph code unless you absolutely need to (e.g. for lists, which would be a bit verbose to create using just Glyph markup).</p> + +</section> + +<section class="section"> +<header><h1 id="h_4" class="toc">Improved <code>include</code> macro and "safe mode"</h1></header> +<p>The <code>include</code> macro now <em>must</em> take an path to a file relative to the <code>text/</code> directory of your project, <em>or</em> it can also be used to include (and <em>evaluate</em>) ruby code within your <code>lib/</code> directory. Moreover, you can now use the <code>include</code> macro even when compiling single Glyph files.</p> + + <p>Now, while evaluating Ruby code in an external file can be quite handy, is also quite insecure. For this reason, it is now possible to use Glyph programmatically in "safe mode", thereby forbidding the usage of certain <em>unsafe</em> macros.</p> + +</section> + +<section class="section"> +<header><h1 id="h_5" class="toc">What's next?</h1></header> +<p>Sooner or later I'll have to implement support for generating multiple files in output. This would make it possible to make the <a href="http://github.com/downloads/h3rald/glyph/glyph.pdf">Glyph book</a> available online as a collection of separate HTML file, for example, or, later on, maybe even compiled into a (ugh!) CHM file.</p> + + <p>Additionally, HTML5 support is also on the horizon: given the current Glyph architecture, it will be relatively easy to have Glyph macros to produce HTML5 code instead of XHTML. LaTeX support, on the other hand, is a completely different game, mainly because I'm not familiar with it, so if anyone feels creative and would like an easier way to produce reusable LaTeX code, <a href="http://github.com/h3rald/glyph/">get forking</a> and contact me!</p> + +</section> + +</section>
@@ -0,0 +1,69 @@
+----- +title: "Glyph 0.4.0 Released" +content-type: article +subtitle: "Featuring web output, HTML5 support, stats, wkhtmltopdf, and much more" +timestamp: 1283535900 +tags: "glyph|ruby|opensource" +----- + + <section class="section"> +<p>This new release of Glyph introduces an unusually large number of features, improvements and bugfixes. Not so much in terms of new macros maybe (no index or bibliography support for now, but it will come, don’t worry!), but rather… pretty much everything else!</p> + +<section class="section"> +<header><h1 id="h_1" class="toc">Web Output</h1></header> +<p>By far the biggest feature of this release is support for multi-file output, i.e. the possibility to transform your book into a web site. You’ve asked for it, I needed it too, and now it’s finally here.</p> +<p>An example? Sure. Take the <a href="http://github.com/downloads/h3rald/glyph/glyph.pdf">Glyph Book</a> (now a 98-page <span class="caps">PDF</span> file) for instance. My only regret was that a long <span class="caps">PDF</span> is quite heavy to digest and peruse, especially if you’re in a hurry. It would be so much nice to have it available online, in chunks of more manageable size.</p> +<p>Well, <a href="/glyph/book/">here it is</a>. That’s the very same document, split in several <span class="caps">HTML</span> files with a custom layout that matches this site’s. The good news is that you can do it too:</p> + +<div class="code"> +<pre> +<code> +section[ + @title[This title is compulsory] + @id[random_section] + @src[topic_file.glyph] +] +</code> +</pre> +</div> + <p>Note the <code>@src</code> attribute? It basically includes the specified topic file. So by creating a <code>document.glyph</code> file like <a href="http://github.com/h3rald/glyph/blob/master/book/document.glyph">this</a>, you can create a tidy table of contents (not a single <code>include</code> macro) <em>and</em> get a website for free. Glyph, as usual, takes care of anything for you, especially links between topics. Just link away like you did so far, nothing changes from previous versions, it will just work as expected (<a href="/glyph/book/compiling/compiling.html#web_output">read more</a>).</p> + +</section> +<section class="section"> +<header><h1 id="h_2" class="toc">HTML5 Output</h1></header> +<p>Compared to Web output, HTML5 support was trivial and only took a few hours to implement and test. You can now produce single-file HTML5-compliant documents (<code>html5</code> output format) or even HTML5-compliant web sites (<code>web5</code> output). Just using <code>section</code> tags instead of <code>div</code> tags made it worth it.</p> +<p>Of course, the default <span class="caps">CSS</span> files have been updated to be compatible with HTML5 output too.</p> + +</section> +<section class="section"> +<header><h1 id="h_3" class="toc">Project Statistics</h1></header> +<p>Anoher big thing was a shiny new command, <code>glyph stats</code>, which brings — guess — stats. No more chasing after bookmark references, just type <code>glyph stats --bookmark=#web_output</code> and you’ll know where the <code>#web_output</code> bookmark was defined <em>and</em> what links to it. Similar stats are available for:</p> +<ul> + <li>macros</li> + <li>links</li> + <li>files</li> + <li>snippets</li> +</ul> +<p><code>glyph stats -m</code> tells me that I used 3236 macro instances throughout the Glyph book. Just so you know.</p> + +</section> +<section class="section"> +<header><h1 id="h_4" class="toc">Custom tasks and commands</h1></header> +<p>“Glyph is extensible”, “Glyph lets you create your own macros”, …great, but kinda limited right? No more. Glyph now lets you create <em>custom Rake tasks</em> and even <em>custom commands</em>.</p> +<p>Have a look at <a href="/glyph/book/extending/commands_tasks.html">this page</a> for more information on what you can do and how. You can now extend Glyph in any way you like (including adding custom output formats) without having to touch its core, just do it <em>within your own project</em>.</p> + +</section> +<section class="section"> +<header><h1 id="h_5" class="toc">wkhtmltopdf</h1></header> +<p>Last but not least, you no longer need Prince <span class="caps">XML</span> to produce <span class="caps">PDF</span> file. Granted, Prince is awesome and the <span class="caps">PDF</span> it produces are very, very nice… but if you want to produce PDFs commercially and want to same some money, you can now use <a href="http://code.google.com/p/wkhtmltopdf/">wkhtmltopdf</a>: it’s <em>free</em> and <em>open source</em>, and it keeps getting better and better.</p> + +</section> +<section class="section"> +<header><h1 id="h_6" class="toc">...and more to come!</h1></header> +<p>After this release I’m going to take a small break from Glyph. Nothing major, I just want to redesign my site (again) and find the time to write a proper Glyph tutorial. This doesn’t mean that development will be halted or anything, just that it will take a few months for Glyph 0.5.0 to come out.</p> +<p>Meanwhile, there may be bugfix releases (depends how many bugs turn up). It would be a good time to come out of the closet and propose/vote on new <a href="http://github.com/h3rald/glyph/issues">features</a>!</p> +<p>Hope you enjoy using Glyph 0.4.0, and if you need anything or feel social, remember that the doors of the <a href="http://groups.google.com/group/glyph-framework">Glyph User Group</a> are always open!</p> + +</section> + +</section>
@@ -0,0 +1,107 @@
+----- +title: "Glyph 0.5.0 Released" +content-type: article +subtitle: "Featuring Calibre integration, macro composition, Turing-completeness, and more" +timestamp: 1314559080 +tags: "glyph|ruby|opensource" +----- + + <section class="section"> +<p>Too much time passed since the last Glyph release. Way too much. Finally I found the time and will to tidy up the last few remaining bugs, update the docs, and release it!</p> +<p>This new release was mainly focused on extending the features of Glyph as a <em>language</em>. Besides a few improvements that make writing Glyph code easier and more readable (e.g. macro composition), Glyph is now Turing-complete. It supports iterations, recursion, variable assignments, basic arithmetics… you can even write a program to compute the factorial of an integer, if you wanted to.</p> +<p>Additionally, it also features enhanced content reuse through fragments and output-independent macros, and a few bugfixes.</p> + +<section class="section"> +<header><h1 id="h_1" class="toc">Calibre Integration</h1></header> +<p><a href="https://github.com/tammycravit">Tammy Cravit</a> proposed (and more or less implemented) an interesting new feature: integrate <a href="http://calibre-ebook.com/">Calibre</a> to generate ebooks in <span class="caps">EPUB</span> and <span class="caps">MOBI</span> format from Glyph’s native standalone <span class="caps">HTML</span> output format.</p> +<p>Although the support is still somewhat rough, you can, as a matter of fact, generate ebooks with Glyph, using Calibre.</p> + +</section> +<section class="section"> +<header><h1 id="h_2" class="toc">Macro Composition</h1></header> +<p>This release features an update at syntax-level: the possibility of “composing” macros, thereby eliminating nesting provided that containers take only one parameter and no attributes. What? This:</p> + <div class="CodeRay"> + <div class="code"><pre><span class="line-numbers"><a href="#n1" name="n1">1</a></span>?[ +<span class="line-numbers"><a href="#n2" name="n2">2</a></span> not[output?[pdf]]| +<span class="line-numbers"><a href="#n3" name="n3">3</a></span> ... +<span class="line-numbers"><a href="#n4" name="n4">4</a></span>]</pre></div> +</div> + + +<p>Can be written like this:</p> + + <div class="CodeRay"> + <div class="code"><pre><span class="line-numbers"><a href="#n1" name="n1">1</a></span>?[ +<span class="line-numbers"><a href="#n2" name="n2">2</a></span> not/output?[pdf]| +<span class="line-numbers"><a href="#n3" name="n3">3</a></span> ... +<span class="line-numbers"><a href="#n4" name="n4">4</a></span>]</pre></div> +</div> + + +<p>In this case, the <code>not</code> macro was composed with the <code>output?</code> macro, thus removing one level of nesting.</p> +<p>Additionally, I used this features to create an <code>xml</code> macro dispatcher that can be used to render raw <span class="caps">XML</span> tags, and an <code>s</code> macro dispatcher that basically is able to call nearly all the instance methods of the Ruby String class. So you can write things like <code>s/sub[This feature makes my life easier|/my/|your]</code> and similar.</p> + +</section> +<section class="section"> +<header><h1 id="h_3" class="toc">Turing-Completeness</h1></header> +<p>As of this version, Glyph can be considered <em>Turing-complete</em>, as it satisfies the following <a href="http://c2.com/cgi/wiki?LanguageRequirementsForTuringCompleteness">requirements for Turing-completeness</a>:</p> +<ul> + <li>A conditional construct, implemented via the <code>condition</code> macro.</li> + <li>Variable assignment, by setting the value of snippets using the <code>snippet:</code> macro and of attributes using the <code>attribute:</code> macro.</li> + <li>(infinite) iteration implemented through the new <code>while</code> macro or recursion, which is possible thanks to the new <code>define:</code> macro.</li> + <li>A memory model which emulates an infinite store: there are no enforced limits on attribute/snippets allocations and number of algorithms or parameters.</li> +</ul> +<p>Plus, Glyph now understand basic integer arithmetic:</p> + <div class="CodeRay"> + <div class="code"><pre><span class="line-numbers"><a href="#n1" name="n1">1</a></span>def:[factorial| +<span class="line-numbers"><a href="#n2" name="n2">2</a></span> ?[ +<span class="line-numbers"><a href="#n3" name="n3">3</a></span> eq[{{0}}|0]|1| +<span class="line-numbers"><a href="#n4" name="n4">4</a></span> multiply[ +<span class="line-numbers"><a href="#n5" name="n5">5</a></span> {{0}} | factorial[subtract[{{0}}|1]] +<span class="line-numbers"><a href="#n6" name="n6">6</a></span> ] +<span class="line-numbers"><a href="#n7" name="n7">7</a></span> ] +<span class="line-numbers"><a href="#n8" name="n8">8</a></span>]</pre></div> +</div> + + <p>Not that you <em>need</em> to be able to calculate factorials in your documents, but know that now you <em>can</em>. An you can also define lexically scoped variables, err… <em>attributes</em>, like this:</p> + <div class="CodeRay"> + <div class="code"><pre><span class="line-numbers"><a href="#n1" name="n1">1</a></span>let[ +<span class="line-numbers"><a href="#n2" name="n2">2</a></span> @:[a|bits] +<span class="line-numbers"><a href="#n3" name="n3">3</a></span> @:[b|bobs] +<span class="line-numbers"><a href="#n4" name="n4">4</a></span> section[ +<span class="line-numbers"><a href="#n5" name="n5">5</a></span> @title[Something more about attributes] +<span class="line-numbers"><a href="#n6" name="n6">6</a></span>Attributes are like lexically scoped variables. You can use them to store @[a] and @[b]. +<span class="line-numbers"><a href="#n7" name="n7">7</a></span> ] +<span class="line-numbers"><a href="#n8" name="n8">8</a></span>]</pre></div> +</div> + + <p>Handy enough.</p> + +</section> +<section class="section"> +<header><h1 id="h_4" class="toc">Embeddable fragments</h1></header> +<p>Too lazy to create snippets? Feel the urge to re-use something you already wrote somewhere? Use a <em>fragment</em> and embed it, as follows:</p> + <div class="CodeRay"> + <div class="code"><pre><span class="line-numbers"><a href="#n1" name="n1">1</a></span>Snippets and fragments ##[good_way|are a good way to reuse] small chunks of content, +<span class="line-numbers"><a href="#n2" name="n2">2</a></span>while the include and load macros <span class="error"><</span>=[good_way] entire files.</pre></div> +</div> + + <p>…And you can also use a new <code>load</code> macro, to embed entire files without performing any evaluation (like <code>include</code> does).</p> + +</section> +<section class="section"> +<header><h1 id="h_5" class="toc">Incompatibilities with previous versions</h1></header> +<p>To sum up:</p> +<ul> + <li><code>snippets.yml</code> is no more, define all your snippets inside your document instead.</li> + <li>New “invisible space separator”: <code>\/</code> instead of <code>\.</code>. Because it’s slightly prettier, nothing else.</li> + <li>The <code>rewrite:</code> macro has been replaced by the <code>define:</code> macro, which also allows recursion, so be careful!</li> + <li>If you want to render raw <span class="caps">XML</span> tags, use <code>xml/tag_name</code> instead of <code>=tag_name</code>.</li> + <li>No more <code>match</code> macro, use <code>s/match</code> instead.</li> +</ul> +<p>For the full list of the issues fixed in this release, see the <a href="http://www.h3rald.com/glyph/book/changelog.html">Changelog</a>.</p> +<p>Hope you’ll enjoy this new release of Glyph. If you want to contribute, go ahead and <a href="https://github.com/h3rald/glyph">fork the repo</a>!</p> + +</section> + +</section>
@@ -0,0 +1,67 @@
+----- +title: "Google Apps for your domain: a shared hosting killer service?" +content-type: article +timestamp: 1156737060 +tags: "google|internet|ajax|web20|review" +----- +<p>A while ago Google started offering services like <a href="http://mail.google.com/mail/">Google Mail</a> (Gmail) and <a href="http://www.google.com/calendar/">Google Calendar</a> to domain owners. Sure everyone likes Gmail, but one of the few bad things about it is that it never feels “unique”: your email address is always gonna be <something><code>gmail.com or <something></code>googlemail.com. Not a big deal? Well, sure, not really, but it really depends on the people using the service and how fussy they are:</p> +<ul> + <li>small/medium business wouldn’t like this: @gmail.com gives farless credibility than @domain.com</li> + <li>When using Gmail with the Send As feature, messages will be sent “on behalf of”, and this can potentially mess things up as some spam filters don’t like it.</li> +</ul> +<p>Now it seems to be <a href="http://seattlepi.nwsource.com/business/1700AP_Google_Business_Applications.html">official</a>: Google is starting to offer customizable services to anyone who wish to sign up for it, not only as a restricted beta service.<br /> +What does this mean? Well, it can be the (free and easy) definitive web solution for small business, kids, grandmas and everyone who wants to establish a presence on the web by paying only the annual domain renewal fees…</p> +<h3>Included applications</h3> +<p>Note the title: <a href="https://www.google.com/a/">Google Apps</a> for your domain, not only Gmail. Here’s what you get:</p> +<ul> + <li><a href="http://mail.google.com/">Gmail</a> – You know what it offers: a state-of-the art <span class="caps">AJAX</span> interface, speed, reliability, very effective spam filter, loads of space, tagging (labels) stars and all the rest.</li> + <li><a href="http://www.google.com/calendar/">Google Calendar</a> – One of the best online calendar available. Features and <span class="caps">AJAX</span> interface, full integration with Gmail, ability to create private and public calendars, reminders,</li> + <li><em>Google Chat</em> – Google’s instant messenger, available through <a href="http://www.google.com/talk/">Google Talk</a> desktop application or online, seamlessly integrated in your Gmail interface.</li> + <li><a href="http://pages.google.com/">Google Web Pages</a> – aka Google’s page creator, easily create webpages using Google’s <span class="caps">WYSIWYG</span> online editor.</li> +</ul> +<p>Now, try imagining these four services combined and (almost) fully customizable… Still no idea? Well, keep reading for a list of all the included features.</p> +<h3>Included Features</h3> +<p>In order to use Google Apps for your domain, you must of course own a domain. The next step involves changing your domain’s MX entry to “<span class="caps">ASPMX</span>.L.<span class="caps">GOOGLE</span>.<span class="caps">COM</span>”, and follow the instructions to create an administration account for your Google applications, and after a while every email sent to your domain’s accounts will be routed to your new Google-powered inbox. Similarly, in order to use Google Page Creator on your domain, you’re required to change the <span class="caps">CNAME</span> record of your <span class="caps">DNS</span> to “ghs.google.com”.</p> +<blockquote> +<p>Note: in order to avoid inconveniences especially if a lot of users use your domain’s email, it is recommended that you pay attention on Google’s instructions on how to set the whole thing up. For further information refer to the official <a href="https://www.google.com/a/FAQ"><span class="caps">FAQ</span></a>. In order to be able to use Google Page Creator on your domain, you must setup an <span class="caps">URL</span> to publish your webpages: of course do <span class="caps">NOT</span> set this to “www.yourdomain.com” or any subdomain currently in use or your visitors will access the pages you created with Google Page Creator.</p> +</blockquote> +<p>Here’s what you get:<br /> +<img src="/img/pictures/gmail-hosted/gmail.png" alt="" /> <br /> +For a bigger image click <a href="/img/pictures/gmail-hosted/gmail_full.png">here</a>. Let’s now have a look at what are the main differences from the standard Gmail.</p> +<p><u><em><strong>Include your own logo</strong></em></u><br /> +<img src="/img/pictures/gmail-hosted/logo.png" alt="" /></p> +<p>Your own logo will be displayed on the upper left corner of every page. And this is truly sweet. All you have to do to change it is uploading a 143×59 <span class="caps">PNG</span> or <span class="caps">GIF</span> image from your domain management panel (see below).</p> +<p><u><em><strong>Use your company name instead of Google’s</strong></em></u><br /> +<img src="/img/pictures/gmail-hosted/links.png" alt="" /></p> +<p>Besides a custom logo, it is possible to set a company name to be used instead of “Google” or “Gmail” in page titles and links. I chose “H3RALD.com Mail” and that’s displayed everywhere, including on the sign-in page.</p> +<p><u><em><strong>Control Panel</strong></em></u><br /> +All the custom settings can easily be managed through an easy-to use control panel:</p> +<p><img src="/img/pictures/gmail-hosted/options_panel.png" alt="" /></p> +<p>It’s really easy to use and has wizards to setup all the included services and options like setting up user accounts, settings etc.</p> +<p><img src="/img/pictures/gmail-hosted/domain.png" alt="" /></p> +<p><u><em><strong>User Accounts</strong></em></u><br /> +Through the control panel you can add new users and modifying existing user accounts to access your services. You can create administrators who are able to access administrative domain-wide settings, and standard users. Every user gets 2048MB of space for their emails, and that’s pretty generous considering that it seems that you’re able to create around 25 user accounts.</p> +<p>Already have a list of users you’re like to import? Just save them in <span class="caps">CSV</span> format and upload them.</p> +<p>Would you like to be able to contact all your users at once, e.g. via a newsletter? Google thought about this as well, and you can create your own personal newsletters which can be sent out automatically to your @yourdomain.com email accounts.</p> +<p><u><em><strong>Internal Messaging System</strong></em></u><br /> +But there’s more. We all know Google Talk: yes it’s nice, but probably <span class="caps">MSN</span> has more features, smileys and all the rest but it still remains a perfectly usable instant manager, which also allows file transfer. Your users can use Google Talk to communicate with each other <em>or</em> simply chat through their webmail interface, More features? Well, for example <a href="https://www.google.com/support/hosted/bin/answer.py?answer=34143">you can setup Google Talk to work on federated networks</a>.</p> +<p><u><em><strong>Appointments/Projects management</strong></em></u><br /> +Google Calendar is an excellent online calendar, and now you can use it within your own domain as well. This means, for example, that it can be used to set your company’s appointments, reminder, project deadlines by creating an unlimited number of custom calendars to share with your collaborators.</p> +<p><u><em><strong>Design your own site</strong></em></u><br /> +I know a lot of restaurants, shops and people who would like to have a small site for their business or activity, but they can’t develop web application themselves. So the most obvious solution is to hire some professional web developer to rip them off… erhm, to create a website for them. Now it is not necessary: by setting the correct <span class="caps">DNS</span> parameters, you can allow users to create their own webpages using a foolproof and advanced web editor powered by Google: <a href="http://pages.google.com/">Google Page Creator</a>. <br /> +I didn’t set it up on my own domain, but a preview of what you can do with Google Page Creator is available <a href="http://h3rald.googlepages.com/home">here</a>.</p> +<h3>Scenario</h3> +<p>After considering all this, I came to the conclusion that what Google did can help a lot of people and at the same time prevent some evil webmaster to charge them hundreds of Euro (they really get away with it!) for basic “websites” with “three or more static pages”.<br /> +All you have to do is buy your own domain, and that can be as cheap as 8$ per year, the rest comes for free, from Google:</p> +<ul> + <li>The best webmail interface you can possibly imagine</li> + <li>Nearly unlimited space for everything</li> + <li>A truly effective spam filter</li> + <li>About 25 fully-featured user account, possibly more if you ask nicely</li> + <li>Your own “corporate instant messenger”</li> + <li>Your own calendar to manage appointments, meetings etc.</li> + <li>An intuitive and advanced web page creator – not like Geocities</li> +</ul> +<p>All this for free. Yes, with ads (I’m not here to discuss <a href="http://www.gmail-is-too-creepy.com/">privacy concerns</a>), but after all they’re not displayed on your main site.</p> +<p><em>What about Server Side technologies for my sites?</em></p> +<p>OK kid, now that would be a little bit too much, even if I can foresee some possible “Google Web Widgets” at some point. “Create your <em>interactive and dinamic</em> website within minutes, no programming knowledge required”… that would be great (for Google) and bad (for freelance web developers). One thing at a time, after all G(od|oogle) has the whole eternity to fulfill his Goals.</p>
@@ -0,0 +1,165 @@
+----- +title: "Chrome: Google did it again!" +content-type: article +timestamp: 1220401860 +tags: "browsers|review|google" +----- +<p style="float:left;"><img src="/files/google-chrome/chrome-logo.jpg" alt="" /></p> +<p>It looks like there’s a <a href="http://www.google.com/chrome">new open source browser</a> in town. As usual, nearly everything about it <a href="http://blogoscoped.com/archive/2008-09-01-n47.html">leaked</a> <a href="http://www.techcrunch.com/2008/09/01/first-public-screen-captures-of-google-chrome/">before</a> its <a href="http://www.google.com/chrome">release</a>. Every blog that matters is talking about it, so if you didn’t hear anything about it, you’d better take a look yourself. Don’t be fooled by the usual <a href="http://www.techcrunch.com/2008/09/01/meet-chrome-googles-windows-killer/">senseless ravings</a> of some weird, overly-hyped blogger though: a <em>browser</em> just came out, nothing more and nothing less. It’s not the end of Windows, it’s not the end of the Internet, it’s not the end of the world as we know it. It’s just a new player in the Browser Wars.</p> +<p>I particularly recommend reading the official <a href="http://books.google.com/books?id=8UsqHohwwVYC&printsec=frontcover#PPP1,M1">Google Comic Book</a> about Chrome, however I included some of the most interesting parts of it in this article. It’s a nice 40-page comic booklet explaining how the browser works in a friendly way… I found it quite amusing and an interesting way to <del>leak</del> distribute info on a new project.</p> +<h3>Getting the damn thing</h3> +<p>You can freely download Google Chromm from <a href="http://www.google.com/chrome">here</a>. You’ll get a tiny 474KB setup file which installs the browser automatically. When I say automatically I mean automatically: you double click it, and it won’t ask <em>anything</em>: it will just install it in Program Files by itself. Idiot proof. Clever. Some people may like it, I damn hated it.</p> +<p>I downloaded it and installed it fine from home, on Vista, and it was blazing fast (on <em>Vista_, imagine!). I tried to do the same thing from work and I couldn’t. The damn installer is supposed to pick up the proxy settings from your default browser, but if the proxy uses authentication (like 99% of corporate proxies) it simply won’t work. As far as I know, there’s <a href="http://groups.google.com/group/google-chrome-help-troubleshooting/browse">no way around this</a></em>thread/thread/4c07ec5124f2eebc.</p> +<p>This is the reason why this article won’t have any chrome screenshots… to protest against Google’s stupid way of doing things “too user-friendly”.</p> +<p><strong>Update 1:</strong> Actually, it is now possible to download the full Chrome setup from <a href="http://cache.pack.google.com/chrome/install/149.27/chrome_installer.exe">here</a> (Thanks <a href="http://www.thecrazyaustralian.com/installing-google-chrome-behind-a-proxy/">Crazy Australian</a>).</p> +<p><strong>Update 2:</strong> After installing Chrome, if your company uses an automatic proxy script you won’t be able to browser web sites using Chrome. If that’s your case, make sure you change IE’s proxy settings by specifying your proxy address and port explicitly.</p> +<h3>How Google “re-invented” the browser</h3> +<p>Why did Google bother? Officially because…</p> +<p><em>“[…] we believe we can add value for users and, at the same time, help drive innovation on the web.”</em><br /> +(from <a href="http://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html">Google Blog</a>)</p> +<p>In practice, a Google-branded browser makes sense especially because of the services offered by the search giant right now: nearly <em>every kind</em> of web application, from mail clients to <span class="caps">RSS</span> readers.</p> +<p>The philosophy of Google Chrome is fairly simple: the Web has changed since the nineties, we now have full-fledged applications instead of crappy hypertexts with animated GIFs, therefore browsers must change, too.</p> +<p>Every major browser has a fairly long development history. Think of Firefox: version 3? Not really: try adding up at least 7 versions of Netscape before that. Internet Explorer <strong>8</strong>, Opera <strong>9.5</strong>, …<br /> +Safari is probably the newest of the lot, but still not quite right.</p> +<p>All major browsers <em>evolved</em> through the years, but they never really changed: so why not to start from scratch?</p> +<p>Starting from scratch has a lot of advantages:</p> +<ul> + <li>You can learn from other people’s mistakes, and try to fix them</li> + <li>You can <em>get things right</em> from the very start</li> + <li>You do not have to worry about breaking compatibility with previous versions</li> + <li>People won’t have extremely high expectations, and they’ll be prepared for a relatively unstable product</li> +</ul> +<p>Obviously building a browser from the ground up is not a weekend project, but things changed since the nineties and starting fresh does not necessarily means re-inventing the wheel!</p> +<h3>An “old” Rendering Engine</h3> +<p>Let’s just say that the main work was already done for Google by the <a href="http://webkit.org">WebKit</a> guys. The rendering engine which now powers Safari, the Nokia Series 60 browser, Gnome’s Epiphany, Adobe <span class="caps">AIR</span> has been picked by the Google guys for Chrome.</p> +<p style="float:right;"><img src="/files/google-chrome/chrome-javascript.gif" alt="" /></p> +<p>This is a fairly obvious choice, if you ask me. Why?</p> +<ul> + <li>Presto (Opera’s engine) is proprietary</li> + <li>Trident (IE’s engine) is proprietary, and it sucks</li> + <li>Gecko (Mozilla’s engine) is open source, but a bit bulky</li> + <li>WebKit is open source, and arguably the fastest rendering engine to date</li> +</ul> +<p>The rendering engine, after all, may be considered one of the most important parts of the browser: it’s responsible of what users see, after all. <br /> +Google made the right choice, in my opinion: WebKit is also the most “embeddable” and lightweight engine available, and it is also used on the Android platform for this very reason.</p> +<h3>A “new” Javascript</h3> +<p>Mozilla has a <a href="http:http://www.mozilla.org/js/spidermonkey/Javascript">fast</a> engine, which will soon become <a href="http://ejohn.org/blog/tracemonkey/">much faster</a>. WebKit has a <a href="http://webkit.org/projects/javascript/">blazing fast</a> Javascript engine too, don’t forget. So why Google didn’t just use that?</p> +<p>…Because they wanted something <em>much</em> faster than that, in their own way (as someone already <a href="http://null-logic.net/blog/2008/09/02/javascript-performance-comparison-with-chrome/">pointed out</a>).</p> +<p>Meet <strong>V8</strong>, Chrome’s very own Javascript Virtual Machine. When reading the Chrome Comic, I was particularly impressed of two improvements introduced by this new javascript VM:</p> +<p style="float:right;"><img src="/files/google-chrome/chrome-javascript-gc.gif" alt="" /></p> +<ul> + <li>It actually compiles Javascript to machine code via a Just-In-Time compiler (<span class="caps">JIT</span>). This means that whenever you refresh a page containing Javascript the browser won’t re-interpret the whole script, but it will simply run the compiled version of it which was generated the first time the page was loaded. New concept? Not really, Mozilla is going <em>exactly</em> in the same direction with their own engine, and <span class="caps">JIT</span> compilation will be added as of Firefox 3.1.</li> + <li>V8’s incremental garbage collection looks like a much better alternative to the current conservative garbage collection methods used for Javascript. Because of V8’s new concept of Hidden Class Transitions, V8 knows <em>exactly</em> when something is no longer needed and thus it is able to garbace-collect it more effectively.</li> +</ul> +<p>While there has been some initial <a href="http://nexus.zteo.com/2008/09/01/google-chrome-an-index-of-what-developers-need-to-know-good-and-bad/">skepticism</a> on this new Javascript implementation, it looks like Google did it right. If you don’t believe it you can <a href="http://code.google.com/apis/v8/intro.html">download</a> V8’s C++ code and try it out yourself.</p> +<h3>One Process per Tab</h3> +<p>Google Chrome is the first multi-process browser. The idea is that <em>each tab</em> (because you can’t do browsers without tabs, these days, right?) has its own phisical process and it is therefore independent from each other.</p> +<p style="float:right;"><img src="/files/google-chrome/chrome-processes.gif" alt="" /></p> +<p>Hang on, isn’t that what IE 5 did? A new instance of the browser for each window? No, not quite: there’s a single instance of the browser and <em>multiple</em> tab instances. Each tab is independent in the sense that it has its own address bar, but it’s just a tab, at the end of the day.</p> +<p>This is what Internet Explorer could have done, <em>before</em> Internet Explorer 7, as an answer to the traditional concept of tabs promoted by Mozilla and Opera.</p> +<p>Actually, it turns out that <a href="http://blogs.msdn.com/ie/archive/2008/03/11/ie8-and-loosely-coupled-ie-lcie.aspx">this is <em>exactly</em> what’s planned for Internet Explorer 8</a>, as <a href="http://www.sriramkrishnan.com/blog/2008/09/thoughts-on-new-browser-wars.html">someone</a> already pointed out!</p> +<p>Additionally, Google thought of building in a mini task manager to let users monitor the <span class="caps">CPU</span> and memory usage of each tab. This is interesting, but it has a few implications discussed later on in this article.</p> +<p>What’s truly remarkable about this is that each tab seems to have an initial overhead of 1-2KB, which of course grows according to the site it loads. You can see all this in the task manager, which also picks up similar stats for any other browser running at the same time on your machine. <br /> +This was another clever move by Google: by looking at their own task manager, and running more than one browser together, you have everything you need to instantly compare browser performance (thus discovering that Chrome does an outstanding job, it seems).</p> +<p>What’s also remarkable about Chrome’s tabs is the way you can interact with them:</p> +<ul> + <li>You can move them around smoohtly, exactly like with Safari</li> + <li>You can detach them by drag and drop</li> + <li>You can re-attach them by drag and drop (which is truly awesome!)</li> +</ul> +<h3><del>AwesomeBar</del> <em>OmniBox</em> and <del>Speed Dial</del> <em>New Tab Page</em></h3> +<p>Did you like Mozilla’s AwesomeBar? Well, I personally did, others didn’t so much. Meet OmniBox™ Google’s very own, semi-sentient address bar which really understands you.</p> +<p>Here’s what you can do with it:</p> +<ul> + <li>Type in URLs and view web sites (it would be damn funny if it couldn’t do that)</li> + <li>Get <del>extra Google crap</del> useful suggestions while typing. This includes, but it is not limited to: + <ul> + <li>Pages you visited</li> + <li>Bookmarks</li> + <li>Popular pages (guess who decides that…)</li> + </ul></li> + <li>Custom searches: search <span class="caps">IMDB</span>, Wikipedia, Amazon and google itself with a few clicks</li> +</ul> +<p><img src="/files/google-chrome/chrome-bar.gif" alt="" /></p> +<p>Unlike Firefox’s AwesomeBar, Google’s OmniBox seems more “evolved”: it doesn’t get too much in your way, it lets you go where you want to go, and it’s smart about searching. Apparently Mozilla is already planning to remove the search bar completely and incorporate it in the AwesomeBar… but Google released it first, sorry guys.</p> +<p>The other handy thing they <del>stole</del> kindly borrowed from Opera is the <em>New Tab Page</em>, basically like Opera’s Speed Dial, but with two interesting things:</p> +<ul> + <li>It displays the nine <em>most visited</em> pages: you don’t have to configure it!</li> + <li>It displays search boxes for the most visited sites where you searched something on.</li> +</ul> +<p>While I really like how this works (it requires no configuration whatsoever), I kinda miss dragging my favorite pages in the New Tab Page. If you come from Opera, you’ll miss this too: the pages I have in my speed dial are <span class="caps">NOT</span> necessarily the pages I visited the most!</p> +<p>I guess I’ll get used to it, though…</p> +<h3>Relax, it’s Google!</h3> +<p>Google is not Evil™. Google is good to everyone, from their own employees to developers and end users: and the funniest part of this whole thing is that everything they make <em>looks</em> good for you. You have absolutely no reason to fear Google.</p> +<p>They did it again: they apparently released a new browser which definitely looks inherently more secure than competitors. <br /> +Here’s why:</p> +<ul> + <li>It has an <em>Incognito</em> mode, which lets you browse everything you want without logging anything anywhere.</li> + <li>It confines popups to the tab they belong, minimized. You can then seletively decide to drag them out and promote them to their own window.</li> + <li>Each tab is sandboxed: i.e., it has no rights to write anything to your PC. Absolutely no chance. When plugins for Java and Flash are used, however, this doesn’t apply.</li> + <li>Chrome continuously downloads lists of malicious sites, so that you’re protected against phishing in real time.</li> +</ul> +<p style="float:left;"><img src="/files/google-chrome/chrome-blame.gif" alt="" /></p> +<p>Now, if everything goes wrong, you know it’s definitely <em>someone else who did it</em>. If you read the comic book between the lines, you’ll notice a not-so-subtle message to the end users:</p> +<ul> + <li>The browser is sandboxed, so if anything goes wrong, blame others (Adobe for Flash, Sun for Java, Microsoft for some other crap)</li> + <li>You can monitor the resource consumption of each tab, <em>ergo</em> what <em>each website</em> uses. This means that if a site is slow is definitely the web developer’s fault.</li> +</ul> +<p>This is basically what <a href="http://ejohn.org/blog/google-chrome-process-manager/">John Resig</a> immediately pointed out when the comic came out.</p> +<h3>How it feels</h3> +<p>Google Chrome is clearly a very nice product to use. It’s as intuitive as IE for the average Windows user, it has the best of Firefox and Opera features and it’s even more sleek than Safari. The UI, in my opinion, is a true masterpiece and feels well though out.</p> +<p>Everything is aimed to be intuitive and does not get in your way: it just works. You want to download a file? You can just do it, without worrying about where to save it: it will appear in a “download bucket” at the bottom of your tabs, and you can just drag and drop what you downloaded anywhere you like, if you need to.<br /> +Why nobody thought of this before?</p> +<p>Even the program settings are simple to understand. The Options dialog is divided in “Basics”, “Minor Tweaks” and “Under the Hood”. The idea is that anyone can understand the Basics, some people may tweak a bit more, and only geeks may want to go beyond that. This is particularly evident in the Italian translation (it comes bundled with 40 localizations, by the way), where they translated “Under the Hood” with “Roba da smanettoni” which means something like “Stuff for people who fiddle with PCs”. I personally found this translation a bit irritating, but anyway…</p> +<h3>Media Coverage and Target Audience</h3> +<p>The overall impression is that Google wanted to target end users with this browser, but also appeal geeks, too. This makes sense from a marketing point of view. While 90% of geeks switched from IE to another browser, ordinary people are still stuck with IE. Why? Because alternative browsers have gained a reputation of being geek-friendly (which, by popular belief, does not mean user-friendly).</p> +<p>Google’s marketing strategy is quite clear, and it doesn’t seem to be failing on any point:</p> +<ul> + <li>They targeted Windows first, because that’s what the bulk of IE aficionados uses.</li> + <li>They did their best to make it as user-friendly as possible: the sleek <span class="caps">GUI</span>, the comic book, etc.</li> + <li>They spread the world like crazy: every blog is talking about it, but also major news sites like <span class="caps">BBC</span> and <span class="caps">CNN</span>. When I got to work, a collegue of mine asked me if I tried the new Google browser and if I read the comic. She heard it at the radio. Here <em>in Italy</em>!</li> + <li>At the same time, they made the whole thing open source, released APIs and emphasized this, so that “computer fiddlers” couldn’t resist.</li> +</ul> +<p>To me, it looks like Google Chrome stands a good chance to succeed where others have failed: drive most of the Internet population away from Internet Explorer.</p> +<h3>Open Source, testing and quality</h3> +<p>Google is well known for its massive infrastructure. Moreover, Google is the only “entity” (let’s call it that way, shall we) who <em>knows</em> and <em>visited</em> almost every web page on the Internet. If something is not “on Google”, it may well not exist at all: this is not strictly true, but it’s the user perspective and ad the end of the day that’s all that matters.<br /> +Google, as a consequence, has virtually unlimited resources (compared to any other possible competitor) and virtually unlimited knowledge of the Internet, which makes automated testing no more than a joke.</p> +<p>From the Google Chrome Comic:</p> +<p><em>“Within 20-30 minutres of each new browser build, we can teswt it on tens of thousands of different web pages”</em></p> +<p>…and that’s certainly not an understatemend: you can believe that.</p> +<p><img src="/files/google-chrome/chrome-tests.gif" alt="" /></p> +<p>Google seems very concerned of building a “rock-solid” browser rather than being the coolest guy in town, and that’s a good sign. Google is <em>smart</em>, remember?</p> +<p>As if it weren’t enough, the entire thing (the rendering engine, the javascript implementation and the whole code of the broswer) is 100% open source which means, in a nutshell:</p> +<ul> + <li>Free testers</li> + <li>Free developers</li> + <li>Good publicity</li> +</ul> +<p><img src="/files/google-chrome/chrome-os.gif" alt="" /></p> +<p>If things go as planned, Chrome may become the most widely tested piece of software in the world. Let’s just see how the community takes this.</p> +<h3>Why it matters</h3> +<p>Everyone seems to have gone crazy about Chrome, even long before it was made available. Why does it matter, anyway? Isn’t it just a browser, at the end of the day? Well, yes, but:</p> +<ul> + <li>It’s 100% open source. If you like something of it, you can get it, modify it, bundle it in another project and redistribute it. Give it a few weeks and extensions which use some of Google’s new <span class="caps">API</span> will flock to the ’fox like crazy.</li> + <li>It’s small, fast and very promising. Sure, it’s not perfect, but <span class="caps">YOU</span> can help improving it. Get it?</li> + <li>It’s on Windows, so it will reach the majority of Internet users… in theory.</li> +</ul> +<p>Last but not least, it comes bundled with <a href="http://gears.google.com/">Gears</a>, i.e. what Google would like you to use for RIAs. That’s perhaps the only “subliminal” message they are trying to send to their users (for now, at least).<br /> +As a matter of fact, nothing prevents them from using Chrome as a way to promote their technology and products. But at the same time nothing prevents a random developer to just fork the project and distribute a <em>neutral</em> and unbranded version of Chrome.</p> +<p>See? Google is not evil at all, it’s just smarter than others.</p> +<h3>The Bottom Line</h3> +<p>Google showed us once more that their “innovation” can be summarized with the following:</p> +<p><em><strong>“Do not invent new things, just make them better”</strong></em></p> +<p>They didn’t invent Internet search: they just made it better and smarted. The same philosophy applies to Chrome, too. Some examples? Sure:</p> +<ul> + <li>They didn’t create a new rendering engine, they used an existing one</li> + <li>They analyzed Safari’s neat <span class="caps">GUI</span> tricks and implemented something even better.</li> + <li>They added an IE8-like domain highlight in the <span class="caps">URL</span>.</li> + <li>They got the Firefox’s AwesomeBar and improved it.</li> + <li>They got Opera’s Speed Dial and improved it.</li> + <li>They got IE8’s one-process-per-tab architecture and improved it.</li> + <li>They didn’t think of a Javascript <span class="caps">JIT</span> first, they just made it widely-available first.</li> + <li>They didn’t think about merging the address bar with the search bar, Mozilla announced it first, but Google released it before they did.</li> + <li>Safari 4 allows users to create shortcuts for their favorite web apps, but unfortunately it’s only out for developers…</li> +</ul> +<p>Google did it, again. Exactly as planned.</p>
@@ -0,0 +1,7 @@
+----- +title: "Software Review: Google Earth" +content-type: article +timestamp: 1134215339 +tags: "review|google" +----- +Almost every person on Earth has seen an image taken from a satellite at least once in his or her life: now imagine putting all those images together to make a sort of "patchwork world"...this is unfortunately not as simple as gluing atlas maps together, because height, resolution and orientation must be considered. However, "A computer could do all that"...and so it happened!<strong>In the beginning...</strong><br /><br /><br /><a href="http://www.nasa.gov/home/index.html?skipIntro=1">Nasa.gov</a> has always been one of the most famous and most visited websites in history, and among the resources you can find there, besides the pictures of space-related objects and phenomena that everyone flocks to, are satellite pictures of Earth. <br />Perhaps one of the most wonderful things NASA did software-wise was the realization of an open source software called <a href="http://worldwind.arc.nasa.gov/index.html">WorldWind</a>: <em>"World Wind lets you zoom from satellite altitude into any place on Earth. Leveraging Landsat satellite imagery and Shuttle Radar Topography Mission data, World Wind lets you experience Earth terrain in visually rich 3D, just as if you were really there."</em><br />A really cool thing indeed, if you ask me. So cool that people from all over the world started downloading and using it, causing problems on NASA's server for the project, which was extremely busy or even unreachable. The download is now mirrored on Sourceforge, download.com, and Wayne State University, but the server problem has to do with getting to the server to access the images. So why bother downloading if you know it doesn't actually work, regardless of the reason?<br /><br />The alternative, until a year or so ago, was a product created by "Keyhole Corp." - I won't bother posting a link to the site, you'll read why below. Guys from Keyhole basically created a similar program that was much faster, with no server timeouts and better image resolution. Of course, they thought they could charge for it, and I believe that back in the day some people actually paid $70 for what was seen afterwards as a piece of software with a great potential that was never tapped.<br /><br /><br /><strong>Google enters the scene</strong><br /><br />"Hey, look! It works! Now let's get it and do it better!" - This is, in a nutshell, Google's policy in the last 2 years or so: they find relatively small(er) companies that produced something with potential, buy it, and they either improve and resell the product, or give it away for free, getting income from advertising. It happened before, with Picasa and Blogger, for example, and now, with Keyhole as well (for a pretty complete list of Google's acquisitions and possible future targets, have a look <a href="http://www.kuro5hin.org/story/2005/6/12/143721/743">here</a>).<br />This is not a bad thing for the end user, because often new Google-branded products are free or discounted, and Google is happy because it can still make a huge profit from it: if you ask me, that's a much better policy than Microsoft's ("Create something which doesn't work, try to patch it eventually, force people to use it"), at least from a certain point of view.<br /><br />Anyhow, Google <a href="http://www.google.com/press/pressrel/keyhole.html">purchased</a> Keyhole Corp. on October 27th, 2004. The next day, Google said "let's drop Keyhole's price to 30 bucks" - And Google saw that it was good.<br /><br />Then everything went (almost) silent, until June 18th, 2005, seven months and one day since the acquisition of Keyhole, Google officially <a href="http://slashdot.org/article.pl?sid=05/06/28/1733229&from=rss">released</a> a new product, called <a href="http://earth.google.com/">Google Earth</a>. <em>"Thus the heavens and the earth were finished, and all the host of them" [Gen. 2:1]</em><br /><br /><br /><strong>Welcome to a brand new world</strong><br />Pseudo-biblical jokes apart, Google's new Earth can be downloaded and installed FOR FREE! Go and <a href="http://desktop.google.com/download/earth/index.html">get it</a> because it's interesting, but please don't click on the link I provided before because you'll find out that Google won't let you download it, because they got too many requests, so... <br />So that's why, also thanks to Google, I found some <a href="http://www.majorgeeks.com/download4659.html">Major Geeks</a> mirrors and got it from there. The file is 10 MB, so if you have 56K dial-up don't bother, because it needs at least a 128Kbps connection to run correctly. Below are the minimal system requirements, the recommended ones, and what my PC has. As you can see, processor speed actually doesn't matter if you have a good video card and a good Internet connection.<br /><br /><em>Minimal Configuration</em><br /> * Operating system: Windows 2000, Windows XP<br /> * CPU speed: Intel? Pentium? PIII 500 MHz<br /> * System memory (RAM): 128MB<br /> * 200MB hard-disk space<br /> * 3D graphics card: 3D-capable video card with 16MB VRAM<br /> * 1024x768, 32-bit true color screen<br /> * Network speed: 128 kbps ("Broadband/Cable Internet")<br /> <br /><em>Recommended Configuration</em> <br /> * Operating system: Windows XP<br /> * CPU speed: Intel? Pentium? P4 2.4GHz+ or AMD 2400xp+<br /> * System memory (RAM): 512MB<br /> * 2GB hard-disk space<br /> * 3D graphics card: 3D-capable video card with 32MB VRAM or greater<br /> * 1280x1024, 32-bit true color screen<br /> * Network speed: 128 kbps ("Broadband/Cable Internet")<br /><br /><em>h3raLd's crappy PC's Configuration</em> <br /> * Operating system: Windows XP<br /> * CPU speed: Intel? Pentium? PII 350 MHz<br /> * System memory (RAM): 256MB<br /> * 30 GB hard-disk space<br /> * 3D graphics card: nVidia GeForce II MX 32MB VRAM<br /> * 1024x768, 32-bit true color screen<br /> * Network speed: 1240 kbps<br /> <br />I downloaded it, installed it, and it worked fine on my PC. Please note that Google has been pretty specific regarding the compatible OSes, basically only Windows 2000/XP are supported: very old systems (Windows 95/98/Me and alike) and very new systems (Windows Server 2003, X-x64) are not meant to be able to run it. Mac users shouldn't bother trying, while Linux users will be glad to read that it's supposed to work under <a href="http://appdb.winehq.org/appview.php?versionId=3254">wine</a> (rated "bronze").<br /><br />Let's suppose you installed the program and you're running it. If you don't want to try it because you are still unsure if it's worth or not, you can have a look at this <a href="http://newrecruit.org/archives/2005/may/googlekeyhole">article</a>, and in particular at the screenshots. <br />I found it quite easy to use, as are nearly all Google applications; the interface is quite pretty and does the job. You'll immediately notice the main panel where the world and images will be shown, then there's a bottom panel mainly used for navigation, while on the right the three main functions of the program are clearly presented in 3 tabs ("Fly to", "Local Search" and "Directions"), together with two other tabs below for adding/removing details from the map and managing your saved places and results.<br /><br />As it's a Google product, one of the most handy features is the search engine. You can put in a city, town, even street or building, restaurant, or place of interest, and the program should be smart enough to find it and take you there. With the "Fly Now" feature it's possible to just center the view on one place, for example. The resulting map will be at a certain height, depending on what term you searched for. You can now zoom in or out with your mouse wheel or with the buttons provided in the navigation panel, and you'll see the map updating. This is a gradual process and depends mainly on your connection speed, but also the available RAM, the video card, and the processor speed. <br /><br />As it's still a relatively new product, don't expect to find everything... or better, you can find (nearly) everything, but it might not be at the highest resolution, for example, and thus appear blurred on zoom. Currently the USA, the UK, and Western Europe are the places with the most details. In particular, in the major cities of the US you can also see a 3-D re-creation of the buildings which, even though in plain gray, actually reproduce the real shape of the element. <br />Furthermore, in the navigation panel you can also tilt up and tilt down the view! So the end result is a map which is half real and half virtual.<br />If you search for another place, you will not be taken there instantaneously, but instead Google Earth zooms out appropriately and moves around the globe to where the new place is and zooms in appropriately: a really nice effect.<br /><br />Also keep in mind that you can add or highlight details on the map, like grids, roads, names, places to see, restaurants, stadiums, railroads, boundaries and borders, different types of schools, earthquake areas, and - even if the satellite maps used can be up to three years old - statistical data about Cloud Coverage and a lot of other things.<br /><br />The other two functions, "Local Search" and "Directions" allow you, respectively, to perform a search restricted to the area (i.e. Trafalgar Square - London, UK) and get directions between two places, highlighting the suggested path. Also, all places you see can be saved, marked, and printed: wonderful.<br /><br /><br /><strong>Limitations and Opinions</strong><br /><br />As a Beta, Google Earth does come with limitations: as I wrote earlier, only USA, UK, and Western Europe are (almost) fully supported, but you can already get some pretty decent pictures from 200 miles up anywhere in the world. Another limitation is that since the images often come from different satellites, "patches" can be seen sometimes, where part of a picture of an area is darker or lighter than another.<br /> <br />However, you can't really complain about this software, because it's free and obviously Google's server seems to be always available, unlike NASA's. f you want more, Google Earth is available as a Plus edition (20$) and Pro edition (400$), with more <a href="http://earth.google.com/product_comparison.html">features</a> and support. <br />What of Microsoft? Well, Microsoft is said to be planning to "strike back" during this summer, with <a href="http://www.google.com/url?sa=U&start=1&q=http%3A//blog.searchenginewatch.com/blog/050523-125208&ei=hy3EQpqoGcmciALB8vinCw&sig2=ZNIj3_KWXuDMr4_2WmrCNA">MS Virtual Earth</a>, let's just wait and see...<br />
@@ -0,0 +1,18 @@
+----- +title: "Introducing H3RALD.com v7.1" +content-type: article +timestamp: 1225081740 +tags: "website|rails" +----- +<p>I finally decided to redesign my web site. About 2 years passed since last time and I think this was long overdue: a lot of people liked the black <em>Nitefall</em> theme, but a lot of people found a bit too dark for their liking.</p> +<p>I decided to go for something more <del>boring</del> traditional this time: white background and only black header and footer. I think the new design improves the overall readability of the site, also because this time I kept thing simple:</p> +<ul> + <li>No more sidebars – Who needs them anyway? Who wants to see my <a href="http://www.delicious.com/h3rald">delicious bookmarks</a> on <em>every single page</em>? Who wants to see that annoying Web 2.0-ish tag cloud listing all the tags I’ve ever used from 2006 onwards? I suddently realized that the right column was nothing more than wasted space, so I removed it altogether.</li> + <li>No more differentiation between <em>articles</em> and <em>blog posts</em> – As a matter of fact, I’m not posting little pointless tidbits everyday, it’s more likely just once a week or even once a month. When I post though, I tend to make it worthwhile both for me and the readers by writing about something which may interest people, for a change. In short: this may not be a “traditional blog” anymore, just a publishing platform for my articles.</li> + <li>No more “previews” – From now on, only the title of each articles is displayed in the home page, in the archives and even when searching. If you want to read an article, all you have to do is click on its title. No more “Read More” links.</li> + <li>Just three main pages: <a href="">Home</a>, <a href="/archives">Archives</a>, and <a href="/about">About</a>. Although there may be some more for special projects, at some point.</li> + <li>Use the <a href="/archives">Archives</a> to find my articles. There you’ll find a list of the 20 most used tags, a search form, and a timeline listing <em>all</em> my articles from 2006 onwards.</li> + <li>Use the tiny palette on the left side of each page to perform common actions like bookmarking, scroll up and down, etc. You can read more about it on the <a href="/about">About</a> page.</li> +</ul> +<p>I hope you like the new design, or at least I hope it makes my articles more readable. However, I’m open to suggestions, as usual.</p> +<p>P.S.: I dropped with Internet Explorer 6 compatibility According to my stats, less than 5% of my visitors use it, so it’s not worth the extra hassle.</p>
@@ -0,0 +1,51 @@
+----- +title: "H3RALD.com v8.1 Released" +content-type: article +subtitle: "Featuring a a brand new newspaper-like design, powered by HTML5 and CSS3" +timestamp: 1285243465 +tags: "website|webdevelopment" +----- + + <section class="section"> +<p>Just <a href="/articles/take-back-your-site-with-nanoc">over a year ago</a> I released the 8th version of this web site. The biggest change then was abandoning the Rails-powered <a href="http://wiki.github.com/fdv/typo/">Typo</a> blogging platform in favor of <a href="http://nanoc.stoneship.org/">nanoc</a>, arguably the most versatile static site generator out there.</p> +<p>A year later, I am still very happy with nanoc, hence there’s no need for another major release. Nonetheless, I decided to improve the site’s overall design and image, making it (hopefully) easier to use and more pleasant to the eye.</p> +<p>I always had a problem finding the right theme for my web site. I always wanted to find something related to the word <em>herald</em>, so in the last release I went for a herandry-oriented theme. For this release, I decided to go for a newspaper-style layout: after all, the word <em>herald</em> is often used in newspaper titles, and I picked the name “h3rald” after the <a href="http://global.nytimes.com/?iht">International Herald Tribune</a>.</p> +<p>Also, I was desperate to try out the new features offered by HTML5 and CSS3, and a newspaper layout seemed a good excuse to use columns.</p> +<section class="section"> +<header><h1 id="h_1" class="toc">Browser Compatibility</h1></header> +<p>Although I shouldn’t really say this, the site is meant to be viewed with a WebKit-based browser, really. It works in other (modern) browsers (read: no IE6), and it degrades more or less gracefully if a particular feature is not supported.</p> +<p>That being said:</p> +<ul> + <li>IE7 and IE8 just barely render it (Javascript is used to “patch” the <span class="caps">DOM</span> with the new HTML5 elements)</li> + <li>Firefox 3+ renders pretty much everything right.</li> + <li>Safari and Chrome render the site as it is actually meant to be rendered</li> +</ul> +<p>Nobody ever died from not being able to see CSS3 rounded corners anyhow. The most important thing about this site is its content, and I made sure that whatever browser you’re using you can still read it.</p> + +</section> +<section class="section"> +<header><h1 id="h_2" class="toc">Columns and hyphenation</h1></header> +<p>As I previously stated, I couldn’t wait to try out CSS3 columns so I kinda went crazy on the home page, but just there. Some may argue that they are not suitable for web use of course, but I think they contribute to give the site layout a unique feeling.</p> +<p>The problem with having columns is of course text alignment: justified text looks good, but unless you hyphenate text properly it shows a lot of blank space. Luckily, I discovered <a href="http://code.google.com/p/hyphenator/">hyphenator.js</a>, which solved the problem nicely.</p> + +</section> +<section class="section"> +<header><h1 id="h_3" class="toc">CSS and layout improvements</h1></header> +<p>I made a point out of improving the old stylesheet to make the site easier to read and generally prettier. Beauty is in the eye of the beholder, but still, I think the new stylesheet brings some improvements, especially concerning text (the <a href="http://scripts.sil.org/gentium">Gentium</a> font is used throughout the site) and syntax highlighting.</p> +<p>Moreover, I worked on streamlining navigations across different sections of the site, in particular on article pages:</p> +<p><img src="/img/pictures/h3rald_81_article.png" /></p> + +</section> +<section class="section"> +<header><h1 id="h_4" class="toc">Under the hood</h1></header> +<p>Besides appearence, the new site also features some improvements in its underlying business logic. In particular:</p> +<ul> + <li>Better nanoc <a href="http://github.com/h3rald/h3rald/blob/master/Rules">Rules</a></li> + <li>Improved <a href="/glyph/">Glyph</a> integration, by extending nanoc <a href="http://github.com/h3rald/h3rald/blob/master/lib/glyph_context.rb">RuleContext</a></li> + <li>Minor updates to the custom <a href="http://github.com/h3rald/h3rald/blob/master/tasks/site.rake">Rake tasks</a></li> + <li><a href="http://disqus.com/overview/">Disqus</a> comments</li> +</ul> + +</section> + +</section>
@@ -0,0 +1,139 @@
+----- +title: "H3RALD.com v8.3 Released" +content-type: article +subtitle: "A new minimalist design, powered by Twitter Bootstrap" +timestamp: 1356648094 +tags: "website|webdevelopment" +----- + + <section class="section"> +<p>One of the many things that really bothered me about my web site was the fact that it didn’t look good on my iPhone, or any small screen for that matter.</p> +<p>Years ago I <a href="http://www.alistapart.com/articles/responsive-web-design/">read about</a> responsive web design, media queries, etc., but I never had the will or the time to dive into the subject. Then <a href="http://twitter.github.com/bootstrap/">Twitter Bootstrap</a> came out, and it changed <em>everything</em>.</p> +<p>Not only Bootstrap provides a very solid <span class="caps">HTML</span> boilerplate and grid system, it also comes with some very nice and complete styles for every <span class="caps">HTML</span> element, a few Javascript-enhanced UI components, and best of all it is fully responsive.</p> + +<section class="section"> +<header><h1 id="h_1" class="toc">Getting to know Bootstrap & its CSS wizardry</h1></header> +<p>Redesigning H3RALD.com using Twitter Bootstrap turned out to be fairly easy. I headed up to the <a href="http://twitter.github.com/bootstrap/customize.html">Customize and Download</a> page and set a few variables like the font to use (the beautiful <a href="http://aldusleaf.org/crimson.php">Crimson text</a>), the link color and so on, and downloaded the lot.</p> +<p>I more or less completely forgot about my old <span class="caps">CSS</span> stylesheets and went with Bootstrap all the way. I was happy with a lot of the defaults, but I had to add a few rules and overrides for:</p> +<ul> + <li>headings</li> + <li>line heights</li> + <li>A few custom classes I use extensively, like add a <code>text-align: justify;</code> for the <code>hyphenate</code> class.</li> +</ul> +<p>Now, one of the cool things of Bootstrap is that it comes with smart defaults, and that it lets you add specific features to elements simply by adding a <span class="caps">CSS</span> class to them. Take a look at how <a href="http://twitter.github.com/bootstrap/base-css.html#buttons">buttons</a> are constructed, for instance. Normal button? Sure:</p> +<table> +<tr> +<td> +<div class="code"> +<pre> +<code> +<button class="btn">Click Me!</button> +</code> +</pre> +</div> +<p></td><td><button class="btn">Click Me!</button></td></p> +</tr> +</table> +<p>That’s grey with black text. Boring. Want it red? Sure, add the <code>.btn-danger</code> class:</p> +<table> +<tr> +<td> +<div class="code"> +<pre> +<code> +<button class="btn btn-danger">Click Me!</button> +</code> +</pre> +</div> +<p></td><td><button class="btn btn-danger">Click Me!</button></td></p> +</tr> +</table> +<p>Too big? No problem, make it smaller with <code>.btn-sm</code>, so we have:</p> +<table> +<tr> +<td> +<div class="code"> +<pre> +<code> +<button class="btn btn-danger btn-small">Click Me!</button> +</code> +</pre> +</div> +<p></td><td><button class="btn btn-danger btn-small">Click Me!</button></td></p> +</tr> +</table> +<p>Wouldn’t it be nice to have a nice icon in it? Add an empty <code><i></code> element with a suitable class and there you have a nice <a href="http://twitter.github.com/bootstrap/base-css.html#icons">Glyphicon</a> before the button text (or you can use other icon fonts, like <a href="http://fontawesome.io/">FontAwesome</a>).</p> +<table> +<tr> +<td> +<div class="code"> +<pre> +<code> +<button class="btn btn-danger btn-sm"><i class="fa fa-check"></i> Click Me!</button> +</code> +</pre> +</div> +<p></td><td><button class="btn btn-danger btn-sm"><i class="fa fa-check"></i> Click Me!</button></td></p> +</tr> +</table> +<p>…You get the picture. And it works surprisingly well — if you embrace its philosophy, that is. Just like Rails & Co.: an <em>opinionated</em> framework.</p> +<p>The only thing that bugged me about all this was that by adding smart <span class="caps">CSS</span> classes to elements you’re actually specifying how something looks like by polluting <span class="caps">HTML</span> code. Granted, if your stylesheet doesn’t include a <code>.btn-inverse</code> your buttons won’t automagically become black, but you know what I mean. Although in a very nice way, by following Bootstrap’s way of doing things you are no longer separating content from presentation. And in the next six months, when I’ll ditch Bootstrap for something better, all the previews of the code snippets above won’t work unless I keep using the Bootstrap stylesheet or at least some of its button classes.</p> +<p>The real problems arise for the stylesheets provided for general elements. By default, Bootstrap styles tables with no borders or colors. What if I wanted just ordinary tables to be striped and bordered? Sure, I can add the <code>.table-striped</code> and <code>.table-bordered</code> classes to all tables, and that’s it. In <span class="caps">EVERY</span> table. Or of course undo bootstrap’s magic by overriding the <span class="caps">CSS</span> rules for ordinary tables, to include the rules specified for <code>.table-striped</code> and <code>.table-bordered</code>. Copy & paste someone else’s code? Not nice.</p> +<p>Luckily, using <a href="http://sass-lang.com/"><span class="caps">SASS</span></a> finally paid off, and here’s how to do it in a nice and tidy way:</p> + +<div class="code"> +<pre> +<code> +@import "_bootstrap.scss"; +/* The bootstrap stylesheet - just changed its extension and prepended an underscore, nothing more */ + +table { + @extend .table; + @extend .table-striped; + @extend .table-bordered; +} +</code> +</pre> +</div> +<p>There you go. All tables (ordinary <code><table></code> elements with no silly classes attached) are now bordered and striped.</p> + +</section> + + +<section class="section"> +<header><h1 id="h_2" class="toc">Header & navigation bar</h1></header> +<p>As far as the main site header goes, I decided to use the same one for all pages, containing:</p> +<ul> + <li>The site logo</li> + <li>The search input box (powered by <a href="http://www.google.com/cse/">Google Custom Search Engine</a></li> + <li>A <em>responsive</em> navigation bar with links to all the main sections of the site</li> +</ul> +<p>As far as the navigation bar goes, that’s pure Bootstrap goodness, nothing new there (except the serif font), <a href="http://twitter.github.com/bootstrap/components.html#navbar">look it up</a>.</p> +<p>For the logo… Well, I had this nice plan of using just plain <span class="caps">CSS</span> and web fonts to make it (hell, it’s basically the word “H3RALD”, with the 3 slightly bigger and moved a bit). It worked mostly fine (in webkit browser and in Opera), but Firefox didn’t like it much, and IE… well, some old versions of IE don’t play nice with web fonts, so I decided to make a nice <span class="caps">PNG</span> image and stick it there instead. Less hassle, it works everywhere, job done.</p> +<p>The search input box was a bit more of a challenge. I read up on the new <a href="https://developers.google.com/custom-search/docs/element">Custom Search Element Control <span class="caps">API</span></a>, discovered that Google decided that web designers don’t know Javascript or <span class="caps">CSS</span> nowadays and proposed a new <span class="caps">API</span> that has numerous advantages like:</p> +<blockquote> +<ul> + <li>Easy to use syntax—no JavaScript knowledge required.</li> + <li>Custom Search elements (search boxes and results pages) are rendered based on settings stored on the <span class="caps">CSE</span> servers (along with any client-side customization). Server-side changes don’t require you to copy and paste any new code into your site<br /> +</blockquote></li> +</ul> +<p>Thanks Google. Now every time I change my stylesheet I have to remember to go back to your page and change the link colors etc. And if I decide to hide the page <span class="caps">URL</span> underneath the link in the results? I can’t. And that’s why I decided to reverse engineer their <span class="caps">CSS</span> and provide my overrides. Nasty, but at least I have some control! They’re all <a href="https://github.com/h3rald/h3rald/blob/master/content/styles/_vendor.scss">here</a>, if you are curious.</p> + +</section> + +<section class="section"> +<header><h1 id="h_3" class="toc">Other minor changes & tweaks</h1></header> +<p>Other changes from the previous design were relatively minimal:</p> +<ul> + <li>No more newspaper-style home page with five columns, two will suffice.</li> + <li>A brand new <a href="/tags/">Tags</a> page, listing… well, all the site tags that were previously in the <a href="/archives/">Archives</a> pages (now only listing articles by month of publication)</li> + <li>No more Links page. No need for it.</li> + <li>A new, minimalist <a href="/contact/">Contact</a> page, featuring some of the nice <a href="http://zocial.smcllns.com/">Zocial</a> font icons.</li> + <li>No more social buttons on pages. If you use social networks like Twitter, Facebook or Google+ you already know how to share items using bookmarklets or browser extensions. No need to plague my web site with their nasty buttons, badges, ribbons & alike.</li> + <li>No ads! I have a full-time job, my site uses free and open source technologies, and I write because I like to do so, not to make money. And I can afford the few bucks necessary to pay the hosting provider. That’s why there are NO <span class="caps">ADS</span> on H3RALD.com anymore <sup>(*)</sup>.</li> +</ul> +<p><sup>(*)</sup>: For now, that is. Then I’ll probably change my mind, but until then enjoy the true no-ads experience!</p> + +</section> + +</section>
@@ -0,0 +1,29 @@
+----- +title: "Back on Track..." +content-type: article +timestamp: 1182515880 +tags: "website|rails" +----- +<p>…or better, on <a href="http://www.rubyonrails.org">Rails</a>_. <br /> +Yep, this 7th (!) version of the H3RALD website is powered by the overly-popular Ruby web framework <em>and</em> by the <a href="http://www.typosphere.org">Typo</a> blogging platform.</p> +<p>Nope, I decided not to re-develop my website entirely from scratch this time, although I was tempted to, for three simple reasons:</p> +<ol> + <li>My “coding time” is close to non-existent nowadays, and even with a framework like Rails re-developing a site from scratch would have taken at least <em>some</em> time, which at the moment I don’t have.</li> + <li>Typo is a fairly robust and feature-rich blogging platform, and after learning a little bit of Rails I could customize it to my needs straight away. URLs didn’t break thanks to Rails’ routing system, migration was easy enough, and developing the missing bits (like a rudimentary BBCode parser and a TextLinkAds sidebar) wasn’t hard at all.</li> + <li>I wanted to take a break from my site, not code it again.<br /> +<em>Fair enough, but why the new site anyway?</em></li> +</ol> +<p>Again, there’s more than one answer:</p> +<ul> + <li>Lately I didn’t feel comfortable sporting a Cake-powered website \- that makes sense, to an extent, right? Good.</li> + <li>I got fed up with spam. I wanted to re-open comments but I didn’t want to implement spam protection for the old site.</li> + <li>To be totally honest, I got fed up with <span class="caps">PHP</span> itself as well, after trying out Ruby for a few days and ordering and reading the 2nd edition of the <a href="http://www.pragmaticprogrammer.com/titles/ruby/">PickAxe</a>, which I <em>highly</em> recommend.</li> +</ul> +<p>…But let’s say something about what’s new in this new release, shall we?</p> +<ul> + <li>A new, black (and red) theme. Something completely different. Probably not that good, but quite useful: Every day I check my site from my laptop at work, and if it looks like a big black blob I know that I have to regulate my monitor. I showed it to my parents on their old monitor, and they realized that perhaps it’s time to buy an <span class="caps">LCD</span> one…</li> + <li>Comments, trackbacks, desktop client support, theme support, a cool admin area and everything else Typo offers.</li> + <li>Full <span class="caps">RSS</span> feeds. With no ads. So you don’t need to see this black blob anymore, if you really don’t like it.</li> + <li>No projects or bookmarks, just my blog and my articles. Let’s keep it simple.</li> +</ul> +<p>More to come…</p>
@@ -0,0 +1,15 @@
+----- +title: "herald.vim 0.2.1 released" +content-type: article +timestamp: 1258029269 +tags: "programming|vim" +----- +<p style="float:right;"><img src="/images/herald.vim/0.2.1_release.png" alt="" /></p> +<p><span class="dropcap">I</span> just updated the <a href="/herald-vim-color-scheme/">Herald Vim color scheme</a> to improve the readability of delimiters and search results.</p> +<p>Delimiters are now red (the same color as operators) instead of yellow, so that you can tell the start and end of a string or regular expression more easily. Additionally, search results are no longer highlighted with black text on an orange background for two reasons:</p> +<ul> + <li>the orange background is a bit too strong</li> + <li>the black foreground causes letters to become <em>completely hidden</em> by the <em>cursorline</em> and <em>cursorcolumn</em></li> +</ul> +<p>Search results now have a gray background and a yellow background, as shown in the screenshot on the right.</p> +<p>If you have any constructive suggestion on how to improve this color scheme, don’t hesitate to add a comment to this post!</p>
@@ -0,0 +1,31 @@
+----- +title: "Herald (Vim Color Scheme)" +content-type: article +subtitle: "My very own VIM color scheme. Featuring 256, 16 and 8 color support, high readability and... pretty colors!" +popular: true +timestamp: 1245211860 +tags: "programming|vim" +----- +<p>I use <a href="http://www.vim.org">Vim</a> a lot. It’s my editor of choice when I code (mainly in Ruby), and also when I write my blog post and articles (mainly in Textile).</p> +<p>One thing I always liked about Vim was it powerful syntax highlighting: there’s probably a syntax highlighting file for every programming language ever created, even the new ones (<a href="http://force7.de/nimrod/index.html">Nimrod</a>? Sure, <a href="http://www.vim.org/scripts/script.php?script_id=2632">here</a>!).</p> +<p>Furthermore, Vim allows you to create color schemes, and that’s surprisingly easy to do. Everything you need to do is in the <a href="http://vimdoc.sourceforge.net/htmldoc/syntax.html">docs</a>, but that may put you off, so you can just start by editing an existing one — that’s what I did.h3. InfiniteRed Black</p> +<p>I’ve been using the <a href="http://blog.infinitered.com/entries/show/8">ir_black</a> color scheme for near enough a year. It’s an excellent color scheme, recommended especially for writing Ruby code:</p> +<p><img src="/images/herald.vim/ir_black_vim_example.png" alt="" /></p> +<p>I honestly thought this was the best Vim color scheme until I discovered Moria…</p> +<h3>Moria</h3> +<p>Recently I switched to <a href="http://www.vim.org/scripts/script.php?script_id=1464">moria</a>, mainly because I find it easier on the eyes. It’s a matter of taste, of course:</p> +<p><img src="/images/herald.vim/moria_vim_example.png" alt="" /></p> +<p>The trick is in the background: it’s not completely black. Still, I didn’t quite like the colors, so I decided to write my own…</p> +<h3>Herald</h3> +<p>Meet <strong> <a href="/files/herald.vim">herald.vim</a> </strong> (this is a direct link to the raw file, but you may also want to check my <a href="http://github.com/h3rald/stash/tree/master">stash</a> on GitHub or the <a href="http://www.vim.org/scripts/script.php?script_id=2684">script page</a> on Vim.org):</p> +<p><img src="/images/herald.vim/herald_vim_example.png" alt="" /></p> +<p>To sum up, here’s the <em>features</em> offered by this new color scheme:</p> +<ul> + <li>It’s easier to differentiate syntax elements; in particular reserved words like <code>if</code> or <code>end</code>, constants (symbols) and identifiers (instance variables).</li> + <li>Operators are highlighted and easier to notice.</li> + <li>Dark gray background and black column/row selectors.</li> + <li>Added highlight for titles (useful for Textile)</li> + <li>Comments do not stand out, unlike in most color schemes</li> + <li>Support for 256 color terminal (special thanks to <a href="http://www.frexx.de/xterm-256-notes/">Wolfgang Frisch</a> for providing all the info and tools required)</li> +</ul> +<p>So what do you think? Is it tool colorful perhaps? How would <strong>you</strong> improve it?</p>
@@ -0,0 +1,67 @@
+----- +title: "Book Review: Humble Little Ruby Book" +content-type: article +timestamp: 1191383580 +tags: "ruby|review|books" +----- +<p>After reading the very first paragraph of Mr. Neighborly’s <a href="http://www.humblelittlerubybook.com/">Humble Little Ruby Book</a> (<span class="caps">HLRB</span> for short, from now on) it was very clear to me that it was going to be quite an unconventional read:</p> +<blockquote> +<p>“Yes, there is a Chapter 0. There is a little bit of introductory stuff we need to talk about before <br /> +we set you loose on Ruby. You wouldn’t want to get psyched about a new gadget, get it home, <br /> +and then figure out you need batteries, a grapefruit, and the ability to speak three languages to <br /> +even open the box would you?”</p> +</blockquote> +<p>That reminded me immediately of <a href="http://poignantguide.net/ruby/">Why’s Poignant Guide to Ruby</a>. without a doubt. I don’t know how it is possible that two witty, crazy, and very inventive guys grew fond of the same programming language. Anyhow, to reassure a few of you, you won’t find any foxes or chunky bacon cartoons in <span class="caps">HLRB</span>, just some very well made (although still pretty unconventional) diagrams like this one:</p> +<p><img src="/files/hlrb_diagram.png" alt="" /></p> +<p>Got the picture? Good. Let’s move on…h3. Chapter 0: What’chu talkin’ ’bout, mister?</p> +<p>Chapter 0 is like an introduction to the book <em>and</em> a place to put all the boring stuff you have to talk about in a book about a programming language:</p> +<ul> + <li>What is Ruby?</li> + <li>Installation procedure (on Windows, Mac OS X and Linux)</li> + <li>Hello, World!</li> +</ul> +<p>Yes, you can skip this one safely without losing too much, unless of course you still need to install Ruby on your machine.</p> +<h3>Chapter 1: Welcome to Ruby.</h3> +<blockquote> +<p>“This section aims to introduce the syntactic sugar and linguistic misfortunes of Ruby in the <br /> +quickest manner that will still allow for a full education on the subject.”</p> +</blockquote> +<p>As the first two lines of this chapter say, it’s time to learn the basics of Ruby. You’ll be quickly guided through strings, numbers, collections and variables. Every section with tons of code examples for your to play with. You won’t find a full list of all the 876 methods of the String class, but you’ll certainly learn the 10 most common ones at least (numbers are random, so no, don’t count them). <br /> +Sure, yes, right, whatever… <em>if you really want</em> you can skip this chapter too, but if you are already a Ruby Guru there’s probably no need for you to read books about Ruby, right? Beginners need to read this chapter. It’s compulsory, really, and pretty enjoyable, too.</p> +<h3>Chapter 2: Break it down now!</h3> +<p>Or “learn how to segment your code” using methods, and… blocks & <code>Proc</code> objects! Gosh. Our poor newbies will probably have a heart attack if they never heard about blocks and closures before. I almost got scared myself, because this is normally regarded as a pretty tough topic. Despite, at page 25 of the book you’ll have to face your fears and dive into it. You’ll survive, anyway.</p> +<p><strong>Purist Warning:</strong> Please be aware that sometimes the author may decide to use certain terms and construct which may not sound 100% right to your ears. Just move on, beginners will understand more things like <em>“Think of Proc objects as blocks that are pushed into variables.”</em> than anything else, guaranteed.</p> +<p>After this section you’ll finally be introduced to Ruby classes. Now, this can piss someone off, no doubt. Ruby is a <em>fully OO language</em>, so people <em>must</em> learn about classes before anything else. I must admit I was a bit confused by the ordering of the topics at first, but if someone comes from a non-OO background he’ll probably find this particular order more suitable. <br /> +This section will cover class and object basics in Ruby like defining classes, instantiating objects, access control, methods, attributes, scope, duck typing. Finally, you’ll briefly look into modules as well.</p> +<h3>Chapter 3: Hustle and flow (control)</h3> +<p>Finally, the author will deal with flow control. So things like <code>if</code>, <code>case</code>, conditional operators, loops and statement modifiers. In my opinion this section is truly excellent: it introduces all the control structures in a very simple and crystal clear way, often using flowcharts. A great chance even for absolute beginners to understand these basic but powerful concepts.<br /> +Towards the end of the chapter, you’ll also learn how exceptions work: a clever way to tell people “you have to learn how to use exceptions from the very beginning”. Really nicely done.</p> +<h3>Chapter 4: The system beneath…</h3> +<p>Here comes the juicy stuff. Up to now you learnt the usual boring things you need to know when learning a new programming language, now finally you learn how to do <em>real things</em>. The chapter is full of complete and meaningful code snippets which will answer nearly all the questions you may have (at this time):</p> +<ul> + <li>How do I read and write to a file?</li> + <li>How do I handle threads and processes?</li> + <li>How do command-line parameters and environment variables work?</li> + <li>How can I perform specific Windows-only operations, like reading and writing to the Registry? What about <span class="caps">OLE</span> automation?</li> +</ul> +<p>Some of the big books out there will not spend too much time talking about Windows-only libraries, but I found <span class="caps">HLRB</span> gives quite a comprehensive introduction about them.</p> +<h3>Chapter 5: Looking beyond home</h3> +<p>More juicy stuff. If you are looking for a tutorial to learn the basics about networking, from from sockets to <span class="caps">FTP</span> to <span class="caps">POP</span> and web services, look no further: this chapter does a very remarkable job introducing various network-related libraries, with the usual well written code examples.<br /> +If that’s still not enough, you’ll also have a chance to explore the wonderful world of distributed Ruby and of databases. Granted, this chapter won’t tell you about the 1567 methods available in ActiveRecord (buy a copy of <a href="http://www.pragmaticprogrammer.com/title/rails/">Agile Web Development with Rails</a> for this), but will tell you enough to get started.</p> +<h3>Chapter 6: It’s a Library!</h3> +<p>The final chapter will go more in depth on some more advanced topics, like:</p> +<ul> + <li>Strings</li> + <li>Regexp</li> + <li>Date & Time</li> + <li>Hashing and Cryptography</li> + <li>Unit Testing</li> +</ul> +<p>Everything with more and more useful code snippets.</p> +<h3>The Appendices</h3> +<p>Last but not least, a <span class="caps">HUGE</span> collection of links and resources to learn more about Ruby, and a quick digression on C/C++ extensions… not much, but enough to wet your appetite.</p> +<h3>The bottom line</h3> +<p><span class="caps">HLRB</span> is not <em>the only</em> book you need to read about Ruby. It’s better to make this clear otherwise I’ll be hunted forever by Dave Thomas, Chad Fowler, <span class="caps">DHH</span> and all the other excellent Ruby hackers who also wrote very successful books (which I bought as well). <span class="caps">HLRB</span> is <span class="caps">LITTLE</span> and <span class="caps">HUMBLE</span>, after all: it doesn’t aim at becoming the official Ruby Bible anytime soon (although a bird told me it may get updated <em>someday</em> and include more stuff), but it is still a worthwhile reading.</p> +<p>And of course I came to the very end of this review without mentioning the most important thing: this little wonder is free. All you need is to register to InfoQ (for free) and grab your <a href="http://www.infoq.com/minibooks/ruby/">free copy</a>. If you want you can buy a printed copy for just $9.95, if you feel in a good mood (please do).</p> +<p>The most obvious strengths of this book are the abundance of code examples and very useful working snippets, and the unconventional style which makes it very readable and not boring at all. If I were to name some of its weaknesses (but only if you force me to), I’d say some parts should be expanded and more info on other libraries should be provided… but you never know what the future will bring us!</p> +<p>Well done, <a href="http://www.jeremymcanally.com/">Mr. Neighborly</a>!</p>
@@ -0,0 +1,12 @@
+----- +title: "Holiday house for rent" +content-type: article +timestamp: 1240530840 +tags: "personal" +----- +<p><img src="/images/sessarego/outside.jpg" style="float:left; border: 1px solid #B80000; margin-right: 10px;" /></p> +<p>Part of my family house in the countryside is now available for rent! It’s located in the small village of <a href="http://italia.indettaglio.it/eng/liguria/genova_bogliasco_sessarego.html">Sessarego</a>, a few minutes away from the coast, on the Italian Riviera.<br /> +We’ve been living there recently for 6 months when I started working and then moved to the city in order to be nearer to my workplace, but we still go there on holidays or on the odd week end, sometimes.</p> +<p>The house is fully furnished, it has been recently renovated, and offers all major comforts and services (utilities, TV, internet, phone, etc.). It can be ideal as a holiday house for writers, programmers, or anyone who would like to take a break from the chaotic city life without giving up all the commodities of modern life, such as the Internet.</p> +<div style="padding: 30px"></div> +<p><strong>For more information, see <a href="/holidays">this page</a> and feel free to <a href="/about">contact me</a> if you want to book your stay or you needmore details!</strong></p>
@@ -0,0 +1,7 @@
+----- +title: "An IE Lover's Guide to Firefox" +content-type: article +timestamp: 1132940820 +tags: "ie|firefox|microsoft|firefox|browsers" +----- +This is an attempt to explain to Internet Explorer users what Mozilla Firefox is, what its features are and how it can be enhanced or customized. Although this article is written primarily for IE users, it will make interesting reading for any Firefox user who wants to try to convince even the most hopeless IE fan to adopt Firefox for everyday use. <br /><strong><span style="text-decoration:underline;">My Point of View</span></strong><br />After using Mozilla Firefox for at least 2 years, I must admit two things: I'm biased towards Firefox, and I just about forgot what IE is like. When you ask someone who's been using Firefox for a while why he likes it, he would probably say something like, "because Firefox is much better than IE." Then he would start boasting about Firefox's features, like tabbed browsing, security improvements, popup blocking, extensions and so on, without thinking that maybe an accustomed IE user would be overwhelmed by all these new things, and in the end, might become even more obstinate in using IE. <br /><br />From here on, I'll play the part - for teaching purposes only, of course - of an Internet Explorer lover: IE is the only browser I've ever tried, and it is the only thing you need to surf the Net. I also talked with some IE users I know and I actually opened the browser myself (once again, for teaching purposes), and visited some sites. <br /><br />Why not have a real IE Lover write this article? Well, I thought about it, actually, and the only answer I could come up with was: there's no such thing as an 'IE lover', only a lot of people who are too used to IE to want to switch to Firefox. So, I'd better write this all myself; after all, a long time ago, I was just like those people.<br /><br /><br /><strong>IE: I've used it for years and it does the job</strong><br /><br />When I bought my computer from my favourite retailer, I immediately asked him: "Can I go on the Internet with it? Do I need to buy any particular program to visit websites?" and I was told that I didn't need anything at all, because it was all included in <em>Windows XP</em>. I just had to click on the start button and choose "Internet" from the pop-up menu. "Straightforward," I thought. "Anybody can do that!"<br />I soon noticed that to browse the Internet, Windows used a program called Internet Explorer 6, which was actually part of the whole Windows infrastructure, somehow: it's the same thing, more or less, that I use to view directories on my hard drive, just online. This is the way it should be - so tightly integrated with the operating system that you hardly notice its presence!<br /><br />After a while, I learned some more about Internet Explorer, and I noticed that a lot of other applications could be integrated into it, like download managers and <a href="http://www.adobe.com/products/acrobat/readstep2.html">PDF viewers</a>. I also discovered that I could even <a href="http://www.microsoft.com/windows/windowsmedia/mp10/default.aspx">listen to music and watch videos</a> through my browser, directly from webpages.<br /><br />Then I discovered toolbars - and I wasn't entirely happy about them. I installed <a href="http://toolbar.google.com/index_2">Google Toolbar</a>, and I really enjoyed its features, but I noticed that some other toolbars seemed to be installed, even if I didn't want to: I think some other program asked me to install them or something; I don't really know. All I do now is just set Internet Explorer not to display them, and change my starting page back to what I want, because sometimes, for some reason, IE starts with a different page than what I want.<br /><br />All that aside, what I really like about IE is that I can use it for anything and everything, even updating Windows! Microsoft has another cool technology called ActiveX which allows me to download and install Windows security patches and upgrades automatically!<br /><br />I really don't understand how people can run an operating system other than Windows: the Web was <strong>made</strong> for Internet Explorer! It's even <a href="http://www.microsoft.com/mac/products/internetexplorer/internetexplorer.aspx?pid=internetexplorer">available for Macintosh</a>. <br /><br />A friend of mine told me he started using another browser called "Firefox" or "Firebird" or something, and he really likes it! He said it can be used on Windows, Macintosh, Linux, Solaris, and Unix, but when I asked him why it was so good, he told me, "Because it's better, and IE sucks." <br /><br />I don't understand how he can say that, especially because everyone I know uses Internet Explorer, Bill Gates made loads of money out of it, so it can't be that bad! Anyhow, I decided to give this Fire-thingie a shot.<br /><br /><br /><strong><span style="text-decoration:underline;">Face to Face with a Fox</span></strong><br />My friend told me to download this thing from a <a href="http://www.mozilla.org/products/firefox/">website</a>, because it's free. So what? IE is free, too, because it came with my PC. Anyhow, I figured I'd just go and download it so he'd leave me alone about it. I read that Firefox - that's its name - is a free browser developed by the <a href="http://www.mozilla.org">Mozilla Foundation</a> which has received a lot of <a href="http://www.mozilla.org/press/awards.html">awards</a> from various well-known computer-related websites and institutions. It also seem to have a promotional <a href="http://www.spreadfirefox.com/">website</a> that says it has been downloaded nearly seventy million times! All the geeks seem to use it, and they love it. Maybe it's really good, or maybe they just don't like Microsoft. <br /><br />When I ran Firefox for the first time, Internet Explorer warned me that it couldn't verify the authenticity of the download, or something like that, but it says that all the time when I download stuff.<br />The first thing that happened was that I was prompted to import my favourites from Internet Explorer. Great! I didn't want to lose all the sites I have had bookmarked for years. So far, so good.<br /> <br />There were no XP-related icons at all, just some weird ones I didn't like, especially the "Home Page" icon. It sucks compared to the one in IE. It doesn't integrate with Windows; it's just another application for browsing websites, like that <a href="http://www.netscape.com">Netscape</a> thing my friend made me try a few years ago. That at least had an email client and other things included with it. <br /><br />Firefox isn't worth the hassle: my favourite websites look "broken" and the thing is continuously complaining about plugins to view some pages. Some websites even tell me off now because I'm not using IE, in particular Microsoft, which doesn't let me update <a href="http://v4.windowsupdate.microsoft.com/en/thanks.asp?">anymore</a>. I switched back to IE after a few minutes of pointless struggle. <br /><br /><br /><strong>Here's What You Get</strong><br />Firefox and IE are two very different things, and I didn't like that, but I admit I had some prejudices, maybe because of the fact that my friend told me to download something and said it was better, and it really wasn't. So I decided to give both him and Firefox a second chance, and I asked him to explain to me why Firefox is better than Internet Explorer. <br />The first thing he mentioned was the different terminology used by the two browsers, which can be summarized as follows:<br /><code><br />| Internet Explorer | Firefox |<br />| Internet Options | Options |<br />| Temporary Internet Files | Cache |<br />| Favorites | Bookmarks |<br />| Address Bar | Location Bar |<br />| Refresh | Reload |<br />| Links Bar | Bookmarks Toolbar |<br />| Explorer Bar | Sidebar |<br />| Copy Shortcut | Copy Link Location |<br />| Save Target As | Save Link As |<br /></code><br />and that once you get used to the new terms, finding what you're looking for is easier than in Internet Explorer. <br /><br />My friend also said a new feature implemented by Firefox is <em>popup blocking</em>. So I told him that as of Service Pack 2, even Internet Explorer blocks popups (and before that, so did my Google Toolbar) but apparently Firefox had this feature long before Microsoft did. Good to know, but not really impressive.<br />What was more interesting was that Firefox lets you type in whatever you want in the Location bar, even if it's not a Web address, and you will still get the most relevant page available: for example, typing "firefox" takes me to <a href="http://www.mozilla.org/products/firefox/">http://www.mozilla.org/products/firefox/</a>. This is accomplished through Google's "<a href="http://www.google.com/help/features.html#lucky">I'm Feeling Lucky</a>" feature. IE doesn't do this: it gives me a search page for what I typed, or it tries to 'guess' the domain by adding a .com or .net after the word.<br /><br />Firefox still didn't really impress me: some nice tricks, but nothing that would make me want to switch. What started to make the difference was the <strong><em>Tabbed Browsing</em></strong> feature: I knew about it already, because IE started implementing that through the <a href="http://toolbar.msn.com/">MSN toolbar</a>, but it's a bit<a href="http://weblogs.mozillazine.org/asa/archives/008312.html">buggy</a>, so I didn't even try it. Firefox has had this feature since its very first <a href="http://www.mozilla.org/products/firefox/releases/0.1.html">release</a>, so I guess it they represents a fully-functional, stable, and key feature of the browser. Tabbed browsing introduces a new <em>philosophy</em> for browsing the web: there is only one browser window, but it can have multiple <em>tabs</em>, each displaying a different page. You can switch from one tab to another by clicking on the title (tab titles appear horizontally under the location bar), "Open Link in New Tab" by right-clicking on a link, and open empty tabs with either CTRL+T or from the <em>File</em> menu. It takes a while to get used to it, but after a while I couldn't really live without it!<br /><br />I then asked my friend why Firefox doesn't allow me to play music or videos or read pdf files, etc., and he said that I needed to install all the necessary <a href="https://pfs.mozilla.org/plugins/">plugins</a>. This is the most annoying thing about Firefox: you have to "feed" it and "teach" it things - a lot like a baby, really. If the analogy is truly valid, in the end it should be worth it, and I have the feeling that my Firefox will grow up well, if I'm careful.<br /><br />After learning about plugins, and teaching my little Firefox what to do with movies, songs and other types of files, I learnt that it had another really smart feature: outstanding, built-in <em>search capabilities</em>.<br />I had already noticed the small search bar on the top right, next to the location bar: it's basically a shortcut to Google Search. Cool, but I already had this in IE. One thing I didn't like about IE though, was that if I wanted to use a different search engine, like Yahoo or MSN, I had to install <em>another toolbar</em>, and I ended up with something like three different toolbars under the address bar, so I could hardly see the webpages I was browsing!<br /><br />Firefox apparently knows that people might need to use more than one search engine, so you can select other search engines by clicking on the little icon on the left of the aforementioned search bar. Yahoo, MSN, Wikipedia, and others are available, and <a href="http://mycroft.mozdev.org/download.html">others</a> can be installed easily. If you need a plugin for a search engine, and it doesn't exist yet, you can even make it yourself quite <a href="http://mycroft.mozdev.org/generator/">easily</a>.<br /><br />But let's come back a bit to when I ran Firefox for the first time: where did my IE Favourites go? Under the <em>Bookmarks</em> menu, obviously, and they even kept their folder structure. They can be organized through the <em>Manage Bookmarks</em> option, and indeed Firefox's <em>Bookmarks Manager</em>'s interface looks much cleaner and is easier to use than IE's. However, since all the imported bookmarks get dumped in a subfolder, it takes a little time to get them all up to the top level.<br /> <br />Firefox also implements <em>Live Bookmarks</em>: some sites, especially news-related ones like <a href="http://news.yahoo.com/">Yahoo News</a> and <a href="http://news.bbc.co.uk/">BBC News</a>, and <a href="http://slashdot.org/">Slashdot</a> offer <a href="http://en.wikipedia.org/wiki/RSS_%28file_format%29">RSS</a> feeds which are updated several times a day. With Firefox, you can <em>subscribe</em> to a particular site's RSS by clicking on the little square orange icon which appears on the status bar, and a <em>Live Bookmark</em> will be saved. They appear under the <em>Bookmarks</em> menu, in a specific folder, and also on your <em>Bookmarks Toolbar</em> which is under the location bar: clicking on one of them will show the corresponding site's current headlines. You can click on any of the headlines to read the full story/article.<br /><br />Even if my friend realised he just created another Firefox fan, he insisted on telling me a few words about Downloads and Options. Regarding Downloads, there's not much to say: Firefox incorporates a <em>Download Manager</em> that saves all files downloaded from the Net in a specific (selectable) folder, and keeps a history of all downloads. The download manager is opened automatically whenever a file is downloaded, and it also can be opened manually by selecting <em>Tools-Downloads</em>. The really handy part is that you can easily open a downloaded file or the folder it's in, or clear your download history all in one place. The drawback is that it stays open until you close it, and you have to click a button to clear the already downloaded files from the queue.<br /><br /><em>Options</em> is more complex to deal with, as Firefox does not rely on Windows' <em>Internet Options</em>. Firefox's Options (under the <em>Tools</em> menu) are more complete and better organized, as they are clearly divided into 5 main categories:<br /><br /><em>General</em><br />In this panel you can set up your starting page, fonts, colors, language, character encodings, whether or not Firefox is the default browser, and your connection settings.<br /><br /><em>Privacy</em><br />Here - and this is really much better than in IE, I must admit - you can clear and manage history items, saved form information, saved passwords, download manager history, cookies and the browser cache. You can clear everything with a single click, but you'll lose all your saved passwords and your history lists.<br /><br /><em>Web Features</em><br />This panel is for setting your preferences regarding popup blocking, software installation, images, Java and JavaScript.<br /><br /><em>Downloads</em><br />Here you can choose your download destinatination folder as well as set other download-related preferences, like setting particular file types to save to a particular folder.<br /><br /><em>Advanced</em><br />This panel is for - as the name implies - advanced preferences regarding accessibility, browsing, security, validation and certificates. You don't need to change anything here unless you've been told to or you know what you're doing.<br /><br /><em>Is That All?</em><br />That's what I thought, and although I was really impressed with Firefox, I was still missing some features that IE had, such as third party toolbars. My friend was about to go, but he quickly opened a pre-defined firefox bookmark: <a href="https://addons.mozilla.org/">Mozilla Update</a>. "Now you know how Firefox works: I'm sure you can work this out by yourself," he said, and left me with a door to another vast world to explore. The journey was far from over.<br /><br /><br /><strong>Extensions and Themes</strong><br />One aspect of Firefox that was a bit discouraging was the fact that once you install the browser you need to install this, download that, and configure the other thing. For any IE user (like me), this is a major hassle: before, I just wanted to browse the Net, and I didn't care what I was using or how I was using it. Now, I have to be aware of certain things, and more or less <strong>create</strong> the browser I need! On the other hand, this is sort of exciting, in the sense that unlike IE, Firefox can became whatever you want it to be.<br /><br />Even after using Firefox for a while, and even after my friend had explained all its nice features, I still felt that it was somehow incomplete. Luckily, Firefox has <em>extensions</em> and <em>themes</em>. The numerous <a href="https://addons.mozilla.org/extensions/?application=firefox">Extensions</a> enhance Firefox by adding new features which - honestly - I never thought were even conceivable to be included in a browser. Furthermore, Firefox also has <a href="https://addons.mozilla.org/themes/?application=firefox">Themes</a>, so you can change the browser into something completely different, with different icons, shapes and colors!<br /><br />It's worth it to mention some <em><strong>Extensions</strong></em> which really impressed me by the functionality or behaviours they added to Firefox:<br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=10&application=firefox">Adblock</a><br />This extension blocks ads - if you don't want to see a banner on a certain site anymore, just right-click on it, select AdBlock, and it's gone! It also remembers your preferences for every URL or site. It's easily customizeable and useful.<br /> <br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=158&application=firefox">Tabbrowser Preferences</a><br />This adds a new category in your Options called Tabbed Browsing, where you can customize particular behaviours concerning tabs, like opening all addresses typed in the location bar in a new tab (focused or unfocused), forcing links to open in new tabs instead of new windows, and so on. <br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=220&application=firefox">FlashGot</a><br />I complained before that my download manager wasn't integrated with Firefox: this extension does that, and supports nearly every possible download manager and accelerators. It also has a built-in gallery to quickly see what file types you are downloading.<br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=743&application=firefox">CustomizeGoogle</a><br />This personalises Google-related sites and services, such as using <a href="http://www.google.com/webhp?complete=1&hl=en">Google Suggest</a> in every search, filtering content and ads, anonymizing data transmitted to Google, and much more.<br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=398&application=firefox">ForeCastFox</a><br />Get weather forecasts from all over the world displayed directly on your status bar or anywhere you want.<br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?application=firefox&category=Developer%20Tools&numpg=10&id=60">Developer Tools</a><br />This is THE ultimate solution if you are a web developer or interested in knowing more about webpages. With this extension you can:<br />- Disable <strong>anything</strong> with a single click (images, JavaScript, cookies, colors, animations, etc.)<br />- Get CSS information or modify a page's CSS<br />- Have fun with Forms (convert POSTs to GETs, show hidden fields, and so on)<br />- Perform image-related operations: show paths, attributes, outline particular images, etc.<br />- Get infos about various elements on a page<br />- Clear history, cookies, open java console, view document's source<br />- Outline particular elements (images, tables, etc.)<br />- Resize your browser to a custom or predefined resolution<br />- Validate a page (HTML, CSS, WAI accessibility, speed reports)<br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=33">Googlebar</a><br />Clone of the IE Google Toolbar.<br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=270">Yahoo Companion</a><br />Clone of the IE Yahoo toolbar.<br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=219">FoxyTunes</a><br />Control your favourite media player (several programs supported) directly from Firefox!<br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=16">ChatZilla</a><br />A complete, fully functional, easy-to-use IRC client which runs from Firefox.<br /><br /><a href="https://addons.mozilla.org/extensions/moreinfo.php?id=684">FireFTP</a><br />Fully integrated FTP client.<br /><br />There are actually many more extensions available from either the Firefox website or other <a href="http://www.extensionsmirror.nl/">portals</a> which can be very useful, depending on your needs, but there are also <strong>Themes</strong> which can change Firefox's look and feel completely, such as:<br /><br /><a href="https://addons.mozilla.org/themes/moreinfo.php?id=7&application=firefox">Qute</a><br />This theme inspired Firefox default theme: "Icons designed to be modern, dynamic and fresh, with attention paid to usability and comfort over extended use".<br /><br /><a href="https://addons.mozilla.org/themes/moreinfo.php?id=101&application=firefox">Silverskin</a> <br />"Your favourite browser with a silver skin (With the Qute icons by Arvid Axelsson)"<br /><br /><a href="https://addons.mozilla.org/themes/moreinfo.php?application=firefox&category=Popular&numpg=10&id=414">Saferfox Xpanded</a> <br />"A full skin theme with a modern aqua design"<br /><br /><a href="https://addons.mozilla.org/themes/moreinfo.php?application=firefox&category=Popular&numpg=10&id=213">Plastikfox Crystal SVG</a><br />"Plastik style from KDE with Crystal SVG icons" <br /><br /><a href="https://addons.mozilla.org/themes/moreinfo.php?application=firefox&category=Popular&numpg=10&id=72">Noia (eXtreme)</a><br />"This theme is based on the Noia2.0 icon set by Carlitus."<br /><br /><a href="https://addons.mozilla.org/themes/moreinfo.php?application=firefox&category=Popular&numpg=10&id=548">Brushed</a><br />"A Brushed and Polished Browser Interface."<br /><br />Again, many more themes are available. There's something for everyone, really!<br /><br /><br /><strong>To switch or not to switch?</strong><br /><br />Yes, OK, it's not one of those questions which will keep you up at night, but for sure it can be a quandary. Personally, I decided to switch to Firefox gradually, while still viewing some sites in IE, because I think this can be a good compromise. The biggest problem is that even if Firefox supports Web standards (my friend said IE doesn't) some sites do not. Especially before Firefox, web developers apparently had to create their sites to be viewed correctly with Microsoft's browser. That's why some sites still have things like "This site is best viewed in Internet Explorer 6", or even, in some cases, they'll suggest you download the latest IE version, because <em>your browser is incompatible</em> when actually it's <em>the site</em> which is not compatible with <a href="http://www.w3c.org/">Web Standards</a>.<br />Furthermore, <a href="http://www.microsoft.com/com/default.mspx">ActiveX</a> is a non-standardized proprietary technology which Microsoft uses to make software components communicate and also provide complex functionalities necessary for things like Windows Update. Firefox doesn't support ActiveX, which has been exploited many times in the past (and still now): tough luck. Nowadays, Microsoft wants you to have Automatic Updates turned on, so you don't need to visit the Windows Update site anymore. As far as I'm concerned, I'm not too bothered by that, but if someday I need ActiveX technology, there's already a <a href="http://www.google.com/url?sa=U&start=1&q=http%3A//www.iol.ie/%7Elocka/mozilla/mozilla.htm&ei=cwnIQu_tBYqgiAKd9bGrCw&sig2=afi7r8Pa_YLozVo0JbGp9w">Mozilla Project</a> on it. Final note: If you need to switch back to IE for some reason, the <a href="https://addons.mozilla.org/extensions/moreinfo.php?id=35">IE View</a> extension can quickly give you the opportunity to do so, opening IE to view the page you're visiting.<br /><br />It looks like the Browser Wars have started again, and as a matter of fact, Firefox is becoming known for its features, innovations and <a href="http://www.mozillazine.org/">community support</a>. Switching can be scary, and people can try forcing you to do it, but you shouldn't listen to them: don't start using Firefox just because "it's cool" or "everybody uses it"; try it first, understand how it works, and spend time learning it, because it just might be worth it. <br /><br />One thing is certain: The existence of IE lovers is debatable, but there are over <a href="http://www.spreadfirefox.com">170 million</a> Firefox lovers. Go <a href="http://www.mozilla.org/products/firefox/">get it</a>! <br />
@@ -0,0 +1,15 @@
+----- +title: "I'm on Twitter, anyway..." +content-type: article +timestamp: 1211101440 +tags: "personal|review|programming" +----- +<p>I’ve been neglecting my blog, I know. The truth is that I’m quite busy in this period: I have more responsibilities in my daily full-time jobs, my lunch breaks are getting shorter and I don’t have much free time. At any rate, here’s what’s going on:</p> +<ul> + <li>I’m writing a new article for an online magazine (assuming I’m gonna finish it)</li> + <li>I signed up for a freelance technical reviewing job, for a new Ruby book which will come out soon-ish</li> + <li>I’m getting ready to finally visit Rome (again), this time with my fiancée, for our fifth anniversary.</li> + <li>I’m slowly preparing a version 1.0 of <a href="http://code.google.com/p/redbook/">RedBook</a>, which involves quite a lot of refactoring (and hopefully better documentation and tests).</li> + <li>I’m trying to learn a little bit of Haskell: it seems to be one of the few non .<span class="caps">NET</span> languages able to produce standalone .exe files, nowadays…</li> +</ul> +<p>Last but not least, I now decided to use <a href="http://twitter.com">Twitter</a> regularly, so you can follow me <a href="http://twitter.com/h3rald/">there</a>, if you wish!</p>
@@ -0,0 +1,165 @@
+----- +title: "Fabio's (In)complete Guide to London" +content-type: article +subtitle: "Some (non-)essential tips on getting around, eating, and enjouing yourself" +popular: true +timestamp: 1156307004 +tags: "travelling" +----- +<p>This summer I finally had a chance to spend <em>a whole week</em> in London. The city itself was not new to me, since I visited it 6 times before this one, but this summer was different, in a word: Roxy (my fiancee)’s brother Caspar was happy to host us at his place, for free.<a name="top"></a></p> +<h3>Table of Contents</h3> +<ul> + <li><a href="#pre">Preamble</a></li> + <li><a href="#trans">Transportation</a> + <ul> + <li><a href="#planes">Planes</a></li> + <li><a href="#trains">Trains, coaches and cabs</a></li> + <li><a href="#tube">The tube and buses</a></li> + </ul></li> + <li><a href="#food">Food</a> + <ul> + <li><a href="#rubbish">Rubbish Food</a></li> + <li><a href="#healthy">Healthy Food</a></li> + <li><a href="#brick">Brick Lane</a></li> + </ul></li> + <li><a href="#enter">Entertainment</a> + <ul> + <li><a href="#club">Clubbing</a></li> + <li><a href="#museums">Museums</a></li> + <li><a href="#theatres">Theatres</a></li> + <li><a href="#shop">Shopping</a></li> + </ul></li> +</ul> +<p><a name="pre"></a> <a href="#top">[Back to Top]</a></p> +<h3>Preamble</h3> +<p>This summer I finally had a chance to spend <em>a whole week</em> in London. The city itself was not new to me, since I visited it 6 times before this one, but this summer was different, in a word: Roxy (my fiancee)’s brother Caspar was happy to host us at his place, for free.</p> +<p>Although we obviously had to pay for our flight, transport, food, etc. etc., we didn’t have to pay for accommodation, which was indeed quite an achievement, considering the prices of hotels and flats in London. The bad news is that this Guide, although already lacking a lot of information (try describing everything you can do in London in a single, not-too-boring article), will not contain any particular hints and tips on how to find accommodation in one of the most interesting cities in Europe – unless of course you get to stay at Caspar’s place.</p> +<p><a name="trans"></a> <a href="#top">[Back to Top]</a></p> +<h3>Transportation</h3> +<p>Getting there is relatively easy and if you come from Europe there’s a quick answer to the universal traveller’s question:</p> +<p><em>“Is there any cheap, reliable and on-time airline?”</em></p> +<p><a name="planes"></a> <a href="#top">[Back to Top]</a></p> +<h4>Planes</h4> +<p>Yes, there is. Apparently some Irish man thought he could make millions by buying loads of Boeing 737-800 and selling cheap flight tickets to everyone going to or from London, and he actually did. <a href="http://www.ryanair.com">RyanAir</a> is the answer: a cheap-but-reliable airline which will make you arrive even early than you expected by paying tickets as low as 1p (plus 20-30 Euro airport taxes). Unfortunately they don’t provide full meals aboard, they don’t have any cutlery on board for you to steal, unlike <a href="http://www.britishairways.com/travel/globalgateway.jsp/global/public/en">BA</a><em>, and flight attendants are not hot either, unlike <a href="http://www.britishairways.com/travel/globalgateway.jsp/global/public/en">BA</a></em>, but since I’m happily engaged and Roxanne doesn’t fancy me stealing BA cutlery it’s better this way indeed. <br /> +Unfortunately we booked only a month before and thus the flight for both of us (return) was about 80 Euro in the end, but still not bad.</p> +<p>Luggage check? Not bad, unless you plan to arrive or depart right after an unfoiled bomb plot like I did: I had to take off my shoes, got checked everywhere, they emptied out my hand luggage, turned on and off my laptop and confiscated my gel-ink pen. Way to go!</p> +<p><a name="trains"></a> <a href="#top">[Back to Top]</a></p> +<h4>Trains, coaches and cabs</h4> +<p style="float:left;"><img src="/img/pictures/london/cab.jpg" alt="" /></p> +<p>The next question of the London newbie arriving in Stansted airport is:</p> +<p><em>“Cool, now I’m in the middle of nowhere in England, where’s London then?”</em></p> +<p>Nice innit? They sell you a cheap flight and then it seems you still have a 45-minutes journey to get to the actual city, and this is possible – apparently – only through the Stansted Express, the <em>fastest</em> way to get to London from Stansted. Dear as hell (about 25 <span class="caps">ENGLISH</span> <span class="caps">POUNDS</span> return, per head!). <br /> +Luckily there’s an alternative in the form of an endless amount coaches going from Stansted to London and vice-versa every now and then. I went with <a href="http://www.terravision.it/">Terravision</a> but there are many others. Significantly cheaper (34 Euro for two people return!).<br /> +The Stansted Express is the first example of how trains in the UK can be a lot dearer than you expect, especially if you come from Italy where you can go from Genoa to the Cinque Terre for as low as five Euro (for 100Km that is). Considering that Roxy and I spent about two pounds for about 15 Km to get from Victoria Station to Bromley South one way, well, yes, it is more expensive!</p> +<p>Once we got to Liverpool Street Station from Stansted with a load of (empty) suitcases, a weird pakistani guy in a a black leather jacket turns up out of nowhere and heads towards us. Damn airport regulations: unfortunately my almighty Victorinox pocket knife was in my suitcase. Luckily the guy approaches and simply asks:</p> +<p>Him: “Hey mate, need a taxi? …A taxi mate? A taxi?”<br /> +Me: “How much”<br /> +Him: “Where to?”<br /> +Me: “[Somewhere in Hackney]”<br /> +Him: “20 pounds”<br /> +Me: “Bye”</p> +<p>Just an unregistered cab driver. There are apparently millions around and they can spot a foreigner (especially Italians, it seems) from miles. Be prepared, and be aware that a cab from Liverpool Street for a 5-minutes drive in the night should not cost more than 6 pounds…</p> +<p><a name="tube"></a> <a href="#top">[Back to Top]</a></p> +<h4>The tube and buses</h4> +<p>Here are some tips for smooth travalling via the underground or buses:<br /> +1. Do not use a bus unless you can’t use the Tube for some particular reason (e.g. you need to go to Zone 3 or 4 and your Oyster card can be used only in zone 1 and 2)<br /> +2. Do not catch the Circle Line, always try a combination of two or more (e.g. District and Central) instead, because delays are frequent<br /> +3. Get down at Leicester Square if you’re going to Covent Garden: it’s just 300 metres away and Covent Garden station is small and packed<br /> +4. Always check whether the line you’re catching is marked with “Good Service”, try another route if there delays are expected<br /> +5. Keep right on escalators – there’s always some lunatic running up/down on the left side, from time to time, and trust me, he <span class="caps">WILL</span> mind being stopped for no valid reason<br /> +6. Mind the gap! (Especially at Bank station)<br /> +7. Mind the sweaty guys wearing suite and holding a briefcase, at peek hours, they can be deadly especially on escalators (See 5.).</p> +<p><a name="food"></a> “> Back to Top <”:#top</p> +<h3>Food</h3> +<p>I already noticed this during the previous visits: in London you can eat everywhere. Quite literally, both in the city centre and surrounding areas. If you can – and also if you feel brave enough to try at random – the areas surrounding the city centre are probably cheaper than the 4-million different food chains providing any kind of meal near Oxford Street & Co. and possibly – arguably – more tasty.</p> +<p>If you dare to venture in the land of the Turkish/Bangladesh/Indian food shops you’re more than welcome to do so, but be prepared to a potentially long trial-and-error process: in the end you’ll eventually find the right one. Caspar recommended a particular one, and the <a href="http://www.astray.com/recipes/?show=Humus%20sandwich%20spread">humus sandwitch</a> was really great. Doner Kebab? Roxy insisted with the rumors they use roadkill for those (she’s vegetarian anyway) so she didn’t let me have one, aww.</p> +<p><a name="rubbish"></a> <a href="#top">[Back to Top]</a></p> +<h4>Rubbish Food</h4> +<p>I recently came across an interesting <a href="http://www.princeton.edu/%7Eina/infographics/starbucks.html">image</a> which gave me a better picture of how horrendously sick the world has become when it comes to rubbish food. <br /> +Yes, <a href="http://www.mcdonalds.com/">McDonald’s</a>, <a href="http://www.starbucks.com/">Starbucks</a> & their nasty friends (<a href="http://www.pizzahut.com/">Pizza Hut</a>, <a href="http://www.kfc.com/"><span class="caps">KFC</span></a>, <a href="http://www.bk.com/">Burger King</a>…) are still there making millions at every corner, in London as well. Well, not quite: I noticed they were less last time, and apart from a few kids fretting for their <em>Happy Meal</em>, they weren’t so packed. I was pleased to notice that a load of new-ish healthier alternative are now available (see next section).</p> +<p><a name="healthy"></a> <a href="#top">[Back to Top]</a></p> +<h4>Healthy Food</h4> +<p style="float:right;"><img src="/img/pictures/london/pret.png" alt="" /></p> +<p>This was the relatively new surprise. Relatively new because I already noticed some of them last year, but this time I had a chance to try them all: they <em>healthy food gang</em>! This is the <span class="caps">REAL</span> food trend for London, it seems, and I was very glad about it.<br /> +The first one seems to have been <a href="http://www.pret.com/">Pret a Manger</a> a London-established company which is now spreading – apparently – in the US as well. They <a href="http://www.pret.com/about/">preach and believe</a> in the importance of healthy food and fight a silent – but effective – quest against aforementioned Rubbish Food Giants.</p> +<p>bq.<br /> +“Pret operates a bit like a restaurant. Every Pret has its own kitchen (except for one or two of the tiny ones). You won’t find ‘sell by’ dates on our fresh sandwiches and salads. We don’t sell ‘factory’ stuff. We offer our food to charity at the end of each day rather than keep it over.”</p> +<p>Sounds like a good plan. The food is indeed very nice and tasty and they even <em>apologize</em> for charging <span class="caps">VAT</span> when eating in. A carefully-thought marketing campaign or the just plain simple truth (Wot!)? Only time will tell, let’s hope for the best.<br /> +Another example of healthy food around London? Well, real, tasty <a href="http://www.westcornwallpasty.co.uk/flash.html">Cornish pasties</a> can be bought for a few quid around in the biggest stations and streets, for example. Freshly baked in Cornwall, and brought all over England the same day – or so they make out.</p> +<p><em>“Hey, what the hell is a pasty man?”</em><br /> +“Go back where you belong, you <a href="http://www.urbandictionary.com/define.php?term=emmet">emmit</a>!”</p> +<p>Roxanne and Caspar both lived in (West!) Cornwall for years, and they really appreciated their fellow pirates trying to take over the world.</p> +<p><a name="brick"></a> <a href="#top">[Back to Top]</a></p> +<h4>Brick Lane</h4> +<p><em>“Come in my restaurant… good food, cheap…”</em><br /> +“No.”<br /> +<em>“C’mon, I make a discount for you”</em><br /> +“How much?”<br /> +<em>“15% off”</em><br /> +“No way mate, last time it was 25% with a free round of drinks!”<br /> +<em>“You came here before? Impossible, we don’t do 25% off, we do 20% off maximum”</em><br /> +“No, 25% off, it was 25% off, but doesn’t matter, I’ll go somewhere else…”<br /> +<em>“No wait, 20% off and free drinks, ok?”</em><br /> +“25%”<br /> +<em>“OK, 25% and free drinks, but you come in OK? Good food!”</em></p> +<p>This is just an example of conversation between a guy working for a restaurant in <a href="http://www.visitbricklane.com/">Brick Lane</a> and a “potential customer”. Brick Lane (aka Banglatown) is a street in London which became popular for the moltitude of Indian/Bangladesh restaurants. There are literally dozens of them, and this fierce competition causes the owner to repeteadly offer “deals” to potential customers: getting 25% off the bill is not unusual, and sometimes if you can argue it well you can even get free drinks. Caspar took us to a really good place he went before, and the curry and rice and other typical dishes were absolutely fabulous. Price? 11 pounds per head for a filling (and spicy!) dinner.</p> +<p><a name="enter"></a> <a href="#top">[Back to Top]</a></p> +<h3>Entertainment</h3> +<p>So what can you do in London, other than meandering with the underground to get the most out of your Oyster card and eat out every day? Well, you can have fun of course! There’s loads to do for every taste. This is an <em>incomplete</em> guide, so I’ll just mention a few possibilities, but be aware that there’s much, much more than this.</p> +<p><a name="club"></a> <a href="#top">[Back to Top]</a></p> +<h4>Clubbing</h4> +<p>Each weekend, the following equation holds, for the average Londoner aged 20-30 at least:</p> +<p><code>100 pounds + Club + Friends = Loads of booze + Fun + Terrible hangover and amnesia the day after</code></p> +<p>That’s basically what the traditional Londoners (or maybe we shall generalise to all of England…) do every saturday night: they get trashed. Why? It’s not clever, it’s not good… but it’s bloody good fun!<br /> +Clubs, pubs and bars are the best place for this kind of activity: they are comfortable, there’s normally cool music on, air conditioning, totally hyper staff, and a huge bouncer too! <br /> +We went to <a href="http://www.ditchbar.com/">The Ditch</a>, a recently renovated place in Shoreditch (obviously). I must say I really liked the environment more than any club in Italy:</p> +<ul> + <li>Good music and deejay</li> + <li>Enough people inside, but not too crowded</li> + <li>Good drinks</li> + <li>Small & comfy <span class="caps">VIP</span> room, obviously for us (no kidding)</li> + <li>A competent bouncer who kindly reminded us to “watch over” one of our friends, after she suddenly ordered four Vodka-RedBull at once…</li> +</ul> +<p>No wonders why Caspar & his friends carefully picked this place as their ideal candidate for their own upcoming DJ mini-event in November: it’s an ideal place to spend your night.</p> +<p>Pity that English blokes (and birds too!) get way too trashed in the end: I reckon if you could place a single half-sober, decent-looking Italian guy in a club like that, he’d have pulled almost all the (decent-looking) girls available by the end of the night. I’ll definetely recommend some of my <em>free</em> (not as in software) friends to go over to London next summer.</p> +<p><a name="museums"></a> <a href="#top">[Back to Top]</a></p> +<h4>Museums</h4> +<p>Enough clubbing and equally shallow activities, let’s focus on culture, at once!<br /> +London is the best city in Europe (OK, <em>followed</em> by Paris) for museums, and the best thing is that they are (nearly) all free. This time we didn’t go to the <a href="http://www.thebritishmuseum.ac.uk/">National Gallery</a>, which hosts one of the most outstanding painting galleries in all over the world, because we already visited it too many times, so we went straight for the <a href="http://www.thebritishmuseum.ac.uk/">British Museum</a>. I originally went there a few years ago, and I forgot what was in it, exactly, and yes, I was amazed and perplexed at the same time:</p> +<p style="float:left;"><img src="/img/pictures/london/rosetta.jpg" alt="" /></p> +<p>I was amazed at the amount of stuff those British folks <em>nicked</em> from all over the world: I’m not talking about a few mummies from Egypt like we did in for our mini Egyptian museum in Turin, but rather stuff like the original sarcophagus of Cleopatra (& others), the Rosetta Stone, the Ur Standard, whole monuments from Greece, gargantuan gateways from some Assirian city, and <em><span class="caps">ALL</span> <span class="caps">THE</span> <span class="caps">SCULPTURE</span> <span class="caps">DECORATIONS</span> OF ATHEN’S <span class="caps">PARTHENON</span>!</em> That was shocking really, but after all it was Napoleon who stole the Monna Lisa from us. Damn the French. (No discrimination intended, please mind the sarcasm)</p> +<p>The <a href="http://www.tate.org.uk/modern/">Tate Modern</a> was impressive as well for a few Dali’s and Kandinski’s paintings etc. etc., but I don’t think it can ever be as breath-taking as the other ones. I certainly don’t understand certain kinds of modern art, but I can’t understand how a random guy could get loads of money and ovation for the critics for putting a few basket-balls in a glass box. Clever.</p> +<p style="float:right;"><img src="/img/pictures/london/nh.jpg" alt="" /></p> +<p>To conclude this brief and silly overview of London’s most remarkable museums, let’s say something about the <a href="http://www.nhm.ac.uk/">National History Museum</a>. <br /> +First of all it must be noted that we have a decent equivalent in Genoa, so Roxy and I visited it not long prior to our departure for England. She liked it, and was impressed by the amount of stuffed animals on display, but she told me that the National History Museum in London was supposed to be <em>way better</em>.<br /> +We both expected, especially judging from outside this enourmous building which was built for the purpose, big halls full of taxidermist’s masterpieces, but alas, nothing like this at all. Yes, sure, there were a few stuffed animals here and there, and the minerals section was truly outstanding for completeness. The rest – in my very, very humble opinion – was a real insult to Science and to the dignity of the visitors over five years old.<br /> +They insisted in “renovating” the interior of a marvellous building, making almost every room pitch black only to allow a kid in a million to press a button to highlight a five-lines explanation for a absolutely pointless diagram. Well done. That was a real achievement, wasn’t it? I really don’t understand who could ever conceive such an abomination: a formerly very respected museum turned into a poorly-designed theme park.<br /> +OK, they probably wanted to involve younger generations into scientifical subjects through “interactivity”, and that’s understandable – in theory. In practice though, there are a few elements which weren’t obviously considered when developing such a subtly cunning marketing strategy:</p> +<ul> + <li>The average kid up to 5 years old enjoys pushing buttons, listening to sounds and looking at easy-to-understand (but <span class="caps">ARE</span> <span class="caps">THEY</span>?) pictures, but alas, can’t really bother to read, right?</li> + <li>The average kid over 5 years old would probably like reading some explanation about some weird phenomena, but alas, he really can’t be bothered to push button, move levers, etc. etc. only to highlight some text. Wake up dude, we never heard of Computer Graphics? Animation? even Educational Software, maybe with things like touchscreens etc. These kids are from the <span class="caps">XXI</span> century, not from the seventies ffs! Grow up (the museum’s managers, not the kids of course)!</li> + <li>Instead of ruining an historical building, they could have devoted just a few rooms to kids, investing in something slightly more amazing than out-of-fashin “interactive” toys.</li> +</ul> +<p><em>“Yes, but hey, we still have a huge queue of kids & families at the entrance!”</em></p> +<p>And you know why? You know what are all these people queueing for? For a damn cheesy T-rex <a href="http://science.howstuffworks.com/animatronic.htm">animatronic</a>! Yes, really! And no, not the one from Jurassic Park, but only its rather shitty English-made cousin. <br /> +The funniest thing of the whole visit? They tell you to donate “at least” three quid for their wonders, same as for the British Museum and the National Gallery. You know what? I’d rather give <em>thirty</em> quid to a random kid if he promise not to visit such “museum”…</p> +<p><a name="theatres"></a> <a href="#top">[Back to Top]</a></p> +<h4>Theatres</h4> +<p>Luckily London theatres are still great. Unfortunately I didn’t have a chance to go to a musical this time, but I’ll definitely try to make it for one during my next visit. Adverts for the shows are all over the place, from streets to underground stations, and there are truly a lot of places where it is possible to buy tickets at discounted price while apparently buying full price tickets doesn’t seem to be possible…<br /> +Anyhow, not only we didn’t manage to go to a musical, but we also missed another theatrical performance by <a href="http://www.imdb.com/name/nm0001772/">Patrick Stewart</a>, who, for those who don’t know, happens to be one of the best Shakespearean actors alive… when he doesn’t <a href="http://en.wikipedia.org/wiki/Star_Trek:_First_Contact">fight against the Borg</a> or <a href="http://en.wikipedia.org/wiki/X-Men_(film)">plays funny tricks on a wheelchair</a>, of course (cheesy, cheesy joke).</p> +<p>Nevertheless we <em>did</em> manage to go and see a play, namely Shakespeare’s Antony and Cleopatra at the <a href="http://www.shakespeares-globe.org/navigation/framesetNS.htm">Globe</a>. The Globe Theatre is an almost-perfect reconstruction of the famous London Theatre where Shakespeare’s plays used to be acted. Like in the <span class="caps">XVII</span> century, you have two choices:</p> +<p>a. Book your seat (26 pounds)<br /> +b. Stand up on the ground, near the stage (5 pounds)</p> +<p style="float:left;"><img src="/img/pictures/london/globe.jpg" alt="" /></p> +<p>We obviously went for option b, of course, since we didn’t fancy the idea of paying that much – although it can be worthwhile. Only one thing to keep in mind: <em>always check the duration of the play you’re going to see beforehand</em> – if you don’t like standing up for a long time, you have to go for option a. <br /> +We obviously <em>didn’t</em> check how long the play was going to be – although we could have imagined it – so we ended up standing up for approx three hours (with a 15 minutes break). And you <em>have</em> to stand up, you can’t sit on the stairs and neither on the floor, and the staff is ready to enforce this rule at all costs: a 70-year-old lady brought a folded chair and decided to sit on it, only to be <em>kindly reminded</em> by the staff that it wasn’t allowed to do so. Go figure. <br /> +Anyhow, after all I must say it was the cheapest and the very best Shakespeare play I’ve ever been to so far, although I must also say that most of the ones I’ve been to before were acted in (yikes!) Italian (yes, we do dub theatrical works, <em>as well</em>). A really, really good idea for students and half-broke youth who shouldn’t be denied of the pleasure of watching Shakespeare’s masterpieces at the theatre. Please, keep it up.</p> +<p><a name="shop"></a> <a href="#top">[Back to Top]</a></p> +<h4>Shopping</h4> +<p>Last but not least, I felt compelled to include a short section about <em>shopping</em> in London. The universal answer to the question “Where can I find [insert random item here]” is normally <a href="http://www.oxfordstreet.co.uk/">Oxford Street</a>. When I visited it for the first time (I was about 14 years old, I believe) it all seemed huge… those never-ending malls et al, but now it just seems “normal”. Probably because now going to malls and megastores is just the plain normality, while in the nineties (in Italy) it was rather unusual. <br /> +Oxford Street has them all: computer shops, endless fashion shops, gargantuan bookshops etc. etc. <br /> +Biggest and most expensive shop in Oxford Street? Probably <a href="http://www.selfridges.com/">Selfridges</a> <br /> +Biggest bookshop? Definitely <a href="http://www.amazon.co.uk/exec/obidos/tg/stores/static/-/waterstones/waterstones-info/202-4070483-1661418">Waterstone</a> although the biggest bookshop in London (and in Europe) is the Waterstone one in Piccadilly, just round the corner.<br /> +<a href="http://www.harrods.com/Cultures/en-GB/homepageindex.htm">Harrods</a>? – it’s not far from there.</p> +<p>What if you like more traditional and less glamorous shopping? <a href="http://www.coventgardenlife.com/">Covent Garden</a> and its whereabouts is probably the best choice, also for souvenirs.</p> +<p>Had enough yet? Well, yes, let’s call it a day for this article, but be aware that there’s much, <span class="caps">MUCH</span> more to see and do in London than you can ever imagine. Unless you’re from the US, of course.</p>
@@ -0,0 +1,173 @@
+----- +title: "RawLine - a 100% Ruby solution for console inline editing" +content-type: article +timestamp: 1205128740 +tags: "ruby|programming|opensource|rawline" +----- +<p>One of the many things I like about Ruby is its cross-platform nature: as a general rule, Ruby code runs on everything which supports Ruby, regardless of its architecture and platform (yes, there are quite a few exceptions, but let’s accept this generalization for now).</p> +<p>More specifically, I liked the fact that I could use the <a href="http://tiswww.case.edu/php/chet/readline/rltop.html"><span class="caps">GNU</span> Readline library</a> with Ruby seamlessly on both Windows and Linux.<br /> +Readline offers quite a lot of features which are useful for those people like me who enjoy creating command-line scripts, in a nutshell, it provides:</p> +<ul> + <li>File/Word completion</li> + <li>History support</li> + <li>Custom key bindings which can be modified via .inputrc</li> + <li>Emacs and Vi edit modes</li> +</ul> +<p>Basically it makes your command-line interface fast and powerful, and that’s not an overstatement. Ruby’s own <span class="caps">IRB</span> can be enhanced by enabling readline and completion, and it works great — at least on *nix systems.</p> +<p>For some weird reason, some people had problems with Readline on Windows: in particular, things get nasty when you start editing long lines. Text gets garbled, the cursor goes up one or two lines and doesn’t come back, and other similar leprechaun’s tricks, which are not that funny after a while.</p> +<p>Apparently there’s no alternative to Readline in the Ruby world. If you wan’t tab completion that’s it, you’re stuck. Would it be difficult to implement <em>some</em> of Readline functionality natively in Ruby? Maybe, but the problem is that for some reason the Ruby Standard Library doesn’t have low level methods to operate on keystrokes…</p> +<p>…but luckily, the <a href="http://highline.rubyforge.org/">HighLine</a> gem does! James Edward Gray II keeps pointing out here and here that HighLine’s own <code>get_character</code> method does just that: it returns the corresponding character code(s) right when a key is pressed, unlike <code>IO#gets()</code> which waits for the user to press <span class="caps">ENTER</span>.</p> +<p>Believe it or not, that tiny method can do wonders…h2. Reverse-engineering escape codes</p> +<p>So here’s a little script which uses <code>get_character()</code> in an endless loop, diligently printing the character codes corresponding to a keystroke:</p> +<div class='ruby'><pre><code>#!/usr/local/bin/ruby -w + +require 'rubygems' +require 'highline/system_extensions' + +include HighLine::SystemExtensions + +puts "Press a key to view the corresponding ASCII code(s) (or CTRL-X to exit)." + +loop do + + print "=> " + char = get_character + case char + when ?\C-x: print "Exiting..."; exit; + else puts "#{char.chr} [#{char}] (hex: #{char.to_s(16)})"; + end + +end</code></pre></div><p>A pretty harmless little thing. Try to run it and press some keys, and see what you get:</p> +<div style="font-family: Monospace"> +<p>Press a key to view the corresponding <span class="caps">ASCII</span> code(s) (or <span class="caps">CTRL</span>-X to exit).</p> +<p>=> a <sup class="footnote" id="fnr96"><a href="#fn96">96</a></sup> (hex: 61)</p> +<p>=> 1 <sup class="footnote" id="fnr49"><a href="#fn49">49</a></sup> (hex: 31)</p> +<p>=> Q <sup class="footnote" id="fnr81"><a href="#fn81">81</a></sup> (hex: 51)</p> +<p>=> α <sup class="footnote" id="fnr224"><a href="#fn224">224</a></sup> (hex: e0)</p> +<p>=> K <sup class="footnote" id="fnr75"><a href="#fn75">75</a></sup> (hex: 4b)</p> +</div> +<p>Hang on, what are the last two codes? <em>A left arrow key on Windows</em>, apparently.</p> +<p><strong>Welcome to the wonderful world of input escape sequences!</strong></p> +<p>To cut a long story short, both Windows and *nix system “terminals” translate special keystrokes into sequences of two or more codes. This applies to things like <span class="caps">DEL</span>, <span class="caps">INSERT</span>, arrows, etc. etc.<br /> +For some ideas, check out:</p> +<ul> + <li><a href="http://www.microsoft.com/whdc/device/input/Scancode.mspx">Windows Scancodes</a> (Thanks <a href="http://64.223.189.234/node/92">Huff</a>)</li> + <li><a href="http://www.connectrf.com/Documents/vt220.html">VT220 Terminal Input Sequences</a> (Thanks <a href="http://www.grayproductions.net/">James</a>)</li> +</ul> +<p>Let’s now assume that we’re smart and we can write a program which can parse keystroke properly, including handling different input escape sequences according to the OS, what can it be used for?<br /> +Well:</p> +<ul> + <li>For normal characters, just print them back to the screen (<code>get_character</code> doesn’t print anything, it “steals” the keystroke)</li> + <li>For special characters, do something nice!</li> +</ul> +<p>We could setup <span class="caps">TAB</span> to auto-complete the current word according to an array of matches, or bind the up arrow to load the last line typed in by the user, for example, that’s basically something Readline does, right?</p> +<h2>RawLine: how it works and what it does</h2> +<p>I created a small project on RubyForge called <a href="http://rubyforge.org/projects/rawline/">RawLine</a> (not to be confused with RubyInline, a completely different thing altogether, sorry about that) to play around with the possibilities offered by the <code>get_character</code> method. The library is just a preview of things which can be done, but it’s already usable, provided that you’re brave enough to try it out, that is.</p> +<p>The basic idea behind RawLine is to be able to parse keystrokes properly on different platforms and re-bind them to a set of predefined, cross-platform actions or a user-defined code block.</p> +<h3>Basic line-editing operations</h3> +<p>The first challenge was to re-invent the wheel, i.e. re-bind keystrokes to their typical actions: a left arrow moves the cursor left, a backspace deletes the character at the left of the cursor and so on. Yes, because <code>get_characters</code> gives you the right character codes at the price of <em>cancelling their normal effects</em>, which is a great thing, as you’ll soon find out.</p> +<p>Printing a character on the screen was one of the easiest tasks (at first). <code>IO#putc</code> does the job pretty well: it prints a character out.<br /> +What about moving left? Easy: print a non-descructive backspace (\b) and hope it is really not destructive. I did some tests and it seems to do as it’s told and move the cursor back by one position.</p> +<p>Moving right was a little trickier: the easiest thing I found was to re-print the character under the cursor, which will then move the cursor forward (as naive as it may seem, it does the job!). If there’s nothing under the cursor, then we must be at the end of the line and it shouldn’t move anywhere, so there we go.</p> +<p>What if I move left a bit and then start typing normal characters? Well, everything is rewritten of course: this will be our “character replace mode”. Unfortunately users don’t like this behavior that much, so what I did was this:</p> +<ol> + <li>Copy all characters from the one at the left of the cursor till the end of the line</li> + <li>Print the character to be inserted</li> + <li>Re-print the previously-copied characters</li> + <li>Move the cursor back at the right place</li> +</ol> +<p>Again, a primitive solution which works seamlessly on all platforms, and yes, it’s fast enough that you don’t notice the difference.</p> +<p>As you may have guessed, this of course means that I always had to keep track of:</p> +<ul> + <li>The cursor position within the line</li> + <li>The text currently printed to the screen</li> +</ul> +<p>Backspace and delete were implemented in a similar way, you can figure it out yourself or look at the source code: I won’t bore you any further!</p> +<h3>History management</h3> +<p>The next step was to implement a history for both the characters inputted by the user (to allow undoing and redoing operations) and for the whole lines. This was just an ordinary programming exercise: a simple buffer with some extra controls here and there, nothing too scary.</p> +<p>So every “modification” to the current line being typed is saved in a line history buffer and all the lines entered are saved in another history buffer. All is left is to allow users to navigate through these buffers back and forth. <br /> +Nothing impossible: all I had to do was keeping track of the current element of the history being retrieved and then overwrite the current line with a new line stored in the buffer? How’s this line overwriting done? Same old:</p> +<ol> + <li>Move the cursor to the beginnig of the line</li> + <li>Print X spaces, where X is the line length, so that the characters are no longer displayed in the console</li> + <li>Move the cursor back to the beginning of the line</li> + <li>Print the new line.</li> +</ol> +<p>Easy and naive, as usual. But again, it works well enough.</p> +<h3>Word completion</h3> +<p>The other challange was word completion. The current implementation can be summarized as follows:</p> +<ul> + <li>If <span class="caps">TAB</span> (or another character, if you wish) is pressed, call a user-defined <code>completion_proc</code> method which returns an array and show the first element of the array (in this case I actually used a cyclic RawLine::HistoryBuffer, not an array)</li> + <li>If the user presses <span class="caps">TAB</span> again, show another match, and so <em>ad infinitum</em> if the user keeps pressing <span class="caps">TAB</span>.</li> + <li>If the user presses another key, accept the default completion and move on.</li> +</ul> +<p>Obviously this means that:</p> +<ul> + <li>RawLine has to keep track of the current “word”. A word is everything separated by a user defined <code>word_separator</code>, which can obviously modified at runtime, with care.</li> + <li>Regarding the <code>completion_proc</code>, typically you may want to return only the elements matching the word which is currently being written, so that’s given as default parameter for your proc. Exactly like with ReadLine, the only difference is that you can access other things like <em>the whole line</em> and <em>the whole history</em> in real time, which can be really handy at times!</li> +</ul> +<p>Here’s a simple example:</p> +<div class='ruby'><pre><code>editor.completion_proc = lambda do |word| + if word + ['select', 'update', 'delete', 'debug', 'destroy'].find_all { |e| e.match(/^#{Regexp.escape(word)}/) } + end +end</code></pre></div><h3>Custom key bindings</h3> +<p>All these pretty things are obviously bound to some keystrokes. If the key corresponds to only one code, everything is fine, but because special keys typically aren’t so it was necessary to implement a mechanism to track an escape key (e.g. 0xE0 and 0 on Windows and \e on Linux) and listen to further characters, in case a known sequence is found. Anyhow, the final result of the method used for character binding is the following:</p> +<p><code>bind(key, &block)</code></p> +<p>Where key can be:</p> +<ul> + <li>A <code>Fixnum</code> corresponding to a single character code</li> + <li>An <code>Array</code> of one or more character codes</li> + <li>A <code>String</code> corresponding to an escape sequence</li> + <li>A <code>Symbol</code> corresponding to a known escape sequence or key</li> + <li>A <code>Hash</code> to define a new key or escape sequences</li> +</ul> +<p>So, in the end you can do things like this:</p> +<div class='ruby'><pre><code>editor.bind(:left_arrow) { editor.move_left } +editor.bind("\etest") { editor.overwrite_line("Test!!") } +editor.bind(?\C-z) { editor.undo } +editor.bind([24]) { exit }</code></pre></div><p>Which, for Rubyists, it’s far sexier and more flexible than editing an .inputrc file.</p> +<h3>How do I use it, anyway?</h3> +<p>A code example is better than a thousand words, right? So here you are:</p> +<div class='ruby'><pre><code>#!/usr/local/bin/ruby -w + +require 'rubygems' +require 'rawline' + +puts "*** Inline Editor Test Shell ***" +puts " * Press CTRL+X to exit" +puts " * Press CTRL+C to clear command history" +puts " * Press CTRL+D for line-related information" +puts " * Press CTRL+E to view command history" + +editor = RawLine::Editor.new + +editor.bind(:ctrl_c) { editor.clear_history } +editor.bind(:ctrl_d) { editor.debug_line } +editor.bind(:ctrl_e) { editor.show_history } +editor.bind(:ctrl_x) { puts; puts "Exiting..."; exit } + +editor.completion_proc = lambda do |word| + if word + ['select', 'update', 'delete', 'debug', 'destroy'].find_all { |e| e.match(/^#{Regexp.escape(word)}/) } + end +end + +loop do + puts "You typed: [#{editor.read("=> ").chomp!}]" +end</code></pre></div><p>This example can be found in examples/rawline_shell.rb within the RawLine source code or gem package.</p> +<h2>Current status and availability</h2> +<p>I currently <a href="http://rubyforge.org/forum/forum.php?forum_id=22543">released</a> RawLine 0.1.0 on <a href="http://rubyforge.org/projects/rawline">SourceForge</a>, and it can be installed via:</p> +<p><code>gem install -r rawline</code></p> +<p>The RDoc documentation is available <a href="http://rawline.rubyforge.org/">here</a>.</p> +<p>Feel free to try it out. First of all try the <code>rawline_shell.rb</code> example, and see if it works on your machine. If it doesn’t than maybe you try re-binding some keys (use <code>key_tester.rb</code> to “reverse-engineer” your terminal’s input escape sequences), and let me know!</p> +<p>Status information and limitations:</p> +<ul> + <li>It has been tested on Windows (XP, using the usual command prompt) and on Linux (ZenWalk, using <span class="caps">XFCE</span> Terminal).</li> + <li>It can handle lines no longer than the maximum terminal width – 2. This is to ensure that the cursor never “falls down” to the next line.</li> + <li>On Windows, the cursor doesn’t blink immedialy when moving left, but it moves, don’t worry.</li> + <li>On Linux, you should really consider installing the <a href="http://raa.ruby-lang.org/project/ruby-termios/">Termios</a> library for a faster experience (otherwise <code>get_character</code> won’t parse characters correctly if you press and hold a key, and that, trust me, is a real mess!).</li> + <li>RawLine is very far from being a complete replacement for the ReadLine library, and it is currently in alpha stage.</li> + <li>Release 0.1.0 has been created after 2 weeks of sporadic coding during lunch breaks and week-ends.</li> +</ul> +<p>For any ideas on where to go from here, comments and feedback, just reply below or send an email to my usual email address.</p>
@@ -0,0 +1,18 @@
+----- +title: "InLine name change: what's your opinion?" +content-type: article +timestamp: 1206595800 +tags: "ruby|programming|opensource|rawline" +----- +<p>I’ve been kindly asked by the lead developer of <a href="http://www.zenspider.com/ZSS/Products/RubyInline/">RubyInLine</a> to change the name of my <a href="http://rubyforge.org/projects/inline/">InLine</a> project, due to potential confusion and conflicts.</p> +<p>This makes sense, and I’m ready to change the name of my project, although I’m not that good at choosing original and <em>smart</em> names, so well, any suggestion is more than welcome!</p> +<p>I was thinking of something like:</p> +<ul> + <li>RawLine</li> + <li>EditLine</li> + <li>RawInput</li> + <li>RubyInput</li> + <li>RubyLine</li> +</ul> +<p>I personally think that <strong>RawLine</strong> is probably the best option, but please, if have any better idea just speak up!</p> +<p>P.S.: “RedLine” is taken, unfortunately, otherwise it would have been my first choice since the beginning.</p>
@@ -0,0 +1,79 @@
+----- +title: "Introducing Glyph" +content-type: article +timestamp: 1270834239 +tags: "glyph|ruby|frameworks|writing" +----- +<p>I’ve been writing technical documents for a living for the past four years, and I can tell you: there is no easy way to go about it.</p> +<p>For example, you can use:</p> +<ul> + <li><strong>a Word Processor</strong> like MS Word, for example — anyone can do that, right? Sure, but no, thanks: I strongly believe that Word Processors should not be used for writing technical documents as I firmly don’t believe GUIs are suitable for doing this at a professional level.</li> + <li><strong>a Document Authoring Software</strong> like Adobe Framemaker, Robohelp, etc. Still GUIs, only more complicated to use.</li> + <li><strong><span class="caps">XML</span>, like <span class="caps">DITA</span> or DocBook, or other markups</strong>, like ReStructuredText. Better, but still not easily extensible and flexible enough.</li> + <li><strong>your company’s tools</strong>, if you have them. That’s great if they are usable enough and the result makes your boss happy.</li> + <li><strong>LaTeX</strong>, and that’s probably your best option, if you know what you’re doing.</li> + <li><strong><span class="caps">XHTML</span> and CSS3</strong>, in conjunction with a <span class="caps">PDF</span> renderer like <a href="http://www.princexml.com/">Prince <span class="caps">XML</span></a> — that’s great if you know <span class="caps">HTML</span> and <span class="caps">CSS</span>, and you don’t mind hand-crafting the structure of the document.</li> +</ul> +<h3>Lightweight markups</h3> +<p>I love Textile and Markdown. When people aren’t looking, I even use them at work to generate <span class="caps">HTML</span> code, because it’s just so much faster. Textile in particular can be used as a drop-in replacement for <span class="caps">HTML</span> (and a bit of LaTeX, too), as it can produce most inline <span class="caps">HTML</span> tags effortlessly and some block-level tags, too.</p> +<p>For things like <code><div></code> tags and <code><tables></code> though, Textile is not the best thing in the world, so you normally end up falling back to <span class="caps">HTML</span>.</p> +<p>Another “problem” is that <strong>Textile</strong> or other similar lightweight markups cannot be extended easily, simply because they were not meant to be extended in the first place.</p> +<p>Moreover, if you are producing a book, Textile can’t help you if you want to generate things like a Table of Contents automatically or validate links: those things are simply not part of Textile’s job.</p> +<h3>How Glyph can help</h3> +<p style="float:right;"><img src="/img/pictures/glyph.png" alt="" /></p> +<p>There are a few projects on the Internet that tackle structured document generation. One of them is <a href="http://github.com/fnando/kitabu">Kitabu</a>, which looks promising and is able to produce pretty documents using Textile and Prince for <span class="caps">PDF</span> rendering… but again, it’s not extensible because it relies too much on Textile and Markdown.</p> +<p><a href="/glyph/">Glyph</a> is different. For one, it is much younger than any other, therefore it is most likely full of bugs.</p> +<p>Jokes aside, Glyph follows a much more radical approach, which consists in using a <em>macro language</em> on top of Textile or Markdown. The good thing about it is that this macro language is very simple to learn and — most importantly — very easy to extend.</p> +<p>Here’s an example:</p> +<div class='text'><pre><code>section[header[Something about Glyph] +You can use Glyph macros in conjunction + with _Textile_ or _Markdown_ to +produce HTML files effortlessly. + section[header[What about PDFs?|pdf] +Once you have a single, well-formatted HTML +file, converting it to PDF is +extremely easy with a 3rd-party +renderer like =>[http://www.princexml.com|Prince]. + ] +]</code></pre></div><p>Which translates to:</p> +<div class='html'><pre><code><div class="section"> + <h2 id="h_1">Something about Glyph</h2> + <p>You can use Glyph macros in conjunction with + <em>Textile</em> or <em>Markdown</em> to + produce HTML files effortlessly.</p> + <div class="section"> + <h3 id="pdf">What about PDFs?</h3> + <p>Once you have a single, well-formatted HTML + file, converting it to PDF is + extremely easy with a 3rd-party renderer + like <a href="http://www.princexml.com">Prince</a>.</p> + </div> +</div></code></pre></div><p>Glyph macros can be used to:</p> +<ul> + <li>Generate block-level <span class="caps">HTML</span> tags not commonly managed by lightweight markups, like <code>head</code>, <code>body</code>, <code>div</code> and <code>table</code>.</li> + <li>Create and validate internal and external links.</li> + <li>Include and validate images and figures.</li> + <li>Automatically determine header levels based on the document structure.</li> + <li>Automatically generate a Table of Contents based on the document structure.</li> + <li>Store common snippets of text in a single <span class="caps">YAML</span> file and use them anywhere in your document, as many times as you need.</li> + <li>Store configuration settings in a <span class="caps">YAML</span> file and use them anywhere in your document, as many times as you need.</li> + <li>Evaluate Ruby code within your document.</li> + <li>Call macros from other macros (including snippets), carefully avoiding mutual calls.</li> + <li>Include text files in other text files.</li> + <li>Include the contents of configuration settings (author, title) in the document.</li> + <li>Filter input explicitly or implicitly, based on file extensions when including files.</li> + <li>Manage comments and todo items.</li> +</ul> +<p>An example Glyph project? Sure, Glyph’s own guide (<a href="https://github.com/h3rald/glyph/tree/master/book/">source</a> — <a href="http://cloud.github.com/downloads/h3rald/glyph/glyph.pdf"><span class="caps">PDF</span> output</a>).</p> +<h3>Technical Details</h3> +<p>Glyph is built on top of the following Ruby Gems:</p> +<ul> + <li><a href="http://github.com/davetron5000/gli">gli</a> — For the high-level command line interface.</li> + <li><a href="http://rake.rubyforge.org/">rake</a> — For the mid-level interdependent task layer.</li> + <li><a href="http://treetop.rubyforge.org/">treetop</a> — For parsing Glyph Language, whose grammar is <a href="http://github.com/h3rald/glyph/blob/master/lib/glyph/glyph_language.treetop">ridiculously simple</a>, but it seems to work so far.</li> + <li><a href="http://rubyforge.org/projects/extlib/">extlib</a> — Because I can’t leave without it.</li> +</ul> +<h3>Disclaimer</h3> +<p>Glyph is <strong>alpha software</strong> (hence the 0.1.0 version number) — handle with care and be aware that <em>everything</em> could change tomorrow. If you want to keep up-to-date and/or provide feedback, feel free to join <a href="http://groups.google.com/group/glyph-framework">Glyph’s User Group</a>.</p> +<h3>For more information…</h3> +<p>…head over to <a href="/glyph/">Glyph’s homepage</a>.</p>
@@ -0,0 +1,24 @@
+----- +title: "Introducing RedBook (and the new Code section)" +content-type: article +timestamp: 1191024720 +tags: "ruby|productivity|software|tools|redbook" +----- +<p>I’m somehow pleased to announce the opening of a new section on this site. Nothing too big actually, it’s just a <a href="/code/">page</a> with a few (one for now) brief descriptions of open source programs and scripts I made and I’d like to share with my readers.</p> +<p>Don’t expect fancy stuff: (luckily) I don’t code for a living, I code for pleasure and I code small things. Lately I’ve been trying to write a small Ruby program able to log my daily activities and also display them in a pleasant enough way, so I started using my lunch breaks at work more constructively and I came up with <a href="/code/">RedBook</a> an interactive command-line program written in Ruby.</p> +<p>Main features:</p> +<ul> + <li>Log timestamped and <em>tagged</em> messages to a single <span class="caps">YAML</span> file</li> + <li>Load and display messages containing a certain string, or certain tags or within a time frame.</li> + <li>Calculate the time elapsed between two or more tasks.</li> + <li>Export loaded messages to <span class="caps">YAML</span>, <span class="caps">TXT</span> or <span class="caps">CSV</span> format.</li> +</ul> +<p>All done via command line via simple commands:</p> +<p><strong>:log</strong> This is a test message <strong>:tags</strong> test</p> +<p><strong>:load</strong> <strong>:last</strong> 30 <strong>:from</strong> last week</p> +<p><strong>:timecalc</strong> 2 5</p> +<p><strong>:save</strong> test.txt</p> +<p>Thanks to the wonderful <a href="http://chronic.rubyforge.org/">Chronic</a> library, you can specify your time frames using natural language expressions like “8 in the morning”, “this tuesday”, “last month” and so on…</p> +<p>Here’s a screenshot showing RedBook in action:</p> +<p><img src="/files/redbook.png" alt="" /></p> +<p>RedBook is of course free, open source software licensed under the terms of the <span class="caps">BSD</span> license. It can be installed on any machine able to run Ruby and there’s also an <span class="caps">EXE</span> version for the lazy windows folks who don’t want to install Ruby, packed with <a href="http://www.erikveenstra.nl/rubyscript2exe/index.html">RubyScript2Exe</a>. A more in-depth article explaining how RedBook works <del>will hopefully be completed soon</del> is available <a href="http://www.h3rald.com/articles/redbook">:here</a></p>
@@ -0,0 +1,16 @@
+----- +title: "Introducing the Ruby Compendium" +content-type: article +subtitle: "An Essential Guide to the Ruby Ecosystem" +timestamp: 1295802135 +tags: "ruby-compendium|books|ruby" +----- + + <section class="section"> +<p>Learning a programming language can be hard and time consuming. You normally have to go through a bunch of tutorials, ask questions, read books… Ruby is no exception: there are plenty of resources out there about it, but it is often hard to find what you’re looking for. So, as a weekend project, I decided to create a <em>Ruby Compendium</em>, a short book about the Ruby Ecosystem.</p> +<p>I guarantee that you <em>will not</em> be able to code in Ruby after reading this book. Yes, you read it right, this book is not about coding, it’s about learning what’s out there for you that can help you to learn how to program in Ruby. Information on Ruby implementations, versions, web sites, books, podcasts, a handful of Ruby gems to solve common problems… it’s all in there.</p> + +<p>The <em>Ruby Compendium</em> is available free of charge, under the terms of the <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0 Unported License</a>, and you can help improving it! It was written using my very own <a href="http://www.h3rald.com/glyph">Glyph Framework</a>, and the entire source code is available on <a href="https://github.com/h3rald/ruby-compendium">GitHub</a>, for anyone to fork.</p> +<div style="text-align:center;margin:20px; auto;font-size: 18px; font-weight:bold;"><a href="https://github.com/downloads/h3rald/ruby-compendium/ruby-compendium.pdf">Download (<span class="caps">PDF</span>)</a></div> + +</section>
@@ -0,0 +1,145 @@
+----- +title: "JournoTwit - The best way to organize your tweets" +content-type: article +timestamp: 1257434357 +tags: "review|web20|internet|software" +----- +<p>Since I started using <a href="http://www.twitter.com">Twitter</a> on a regular basis, I felt overwhelmed by the endless stream of data generated by the people I was following.</p> +<p>The official Twitter page quickly became inadequate to manage my tweets, so I began to search for an alternative through the myriad of Twitter clients available out there, both web and desktop based. After trying out a few desktop clients, I decided to restrict the search to web clients only: between work and home, I may use up to 4 different computers and 3 different operating system, and I really didn’t fancy the idea of keeping the <em>same</em> client up-to-date everywhere — even if such client existed.</p> +<p>Over the past months I tried dozens of different web-based Twitter clients, and narrowed the list of <em>must-have</em> features to the following:</p> +<ul> + <li>The interface should be simple to use and not too cluttered.</li> + <li>I should be able to categorize tweets in columns (à la TweetDeck).</li> + <li>I should be able to know, when visiting the site, how many <em>new</em> tweets I have to go through.</li> + <li>I should be able to mark tweets as read.</li> + <li>It should display media files (at least pictures) inline with the tweets.</li> + <li>The interface should provide all the most common twitter actions like reply, retweet, follow/unfollow, shorten url, upload pictures etc. etc.</li> +</ul> +<p>The good news is that I found at least <em>one</em> web-based client able to do all this: <a href="http://www.journotwit.com">JournoTwit</a>.</p> +<h3>Introducing JournoTwit</h3> +<p>JournoTwit was born – as many software projects – to scratch an itch:</p> +<blockquote> +<p>Probably the last thing anyone was expecting me to do — even myself, was to create my own twitter client. However, I’ve been a little fed up with not having the features I wanted and running 5 or 6 accounts, I was getting annoyed at using several different applications just to have them logged in concurrently. […] In under 24 hours I put together a twitter client that functioned enough for me to call it my one and only. A few more days and I added in enough features that I felt it was good enough for public consumption. It is however, not perfect and I have plenty of improvements on my to do list for it.</p> +</blockquote> +<p style="padding-left:3em;"><cite><a href="http://www.spodesabode.com/discussion/280/journotwit-the-twitter-client-thats-not-just-for-journalists/">JournoTwit’s introductory post</a></cite> by Andrew Spode Miller (<a href="http://twitter.com/spode">@spode</a>)</p> +<p>After months of <em>public consumption</em>, JournoTwit became a feature-packed Twitter client able to compete with a lot of mainstream alternatives – albeit remaining always relatively unknown to the masses. You can call it a <em>niche</em> Twitter client, able to satisfy a few basic needs:</p> +<ul> + <li>The ability to manage multiple Twitter accounts at once.</li> + <li>The ability to categorize all incoming tweets automatically, according to the type of information within them.</li> + <li>The ability to keep track of unread tweets.</li> +</ul> +<p>These three features alone were enough to make JournoTwit my one and only Twitter client. And no, it’s not only for journalists and writers.</p> +<h3>Interface overview</h3> +<p>After logging in, JournoTwit looks like this:</p> +<p><img src="/img/pictures/journotwit/interface.png" alt="" /></p> +<p><b>Note:</b> I am using the <em> <a href="http://www.journotwit.com/edge/">edge</a> </em> version of JournoTwit, a sort of development snapshot with the latest features.</p> +<p>At the top, some more-or-less intuitive icons allow you to perform all the most common <em>global</em> actions:</p> +<ul> + <li>Tweet</li> + <li>Manual refresh</li> + <li>Mark all columns as read</li> + <li>Add new columns</li> + <li>Quick search</li> + <li>Edit settings</li> + <li>Logout</li> +</ul> +<p>Next to this global toolbar, there’s a list of links, each corresponding to a column. Clicking a link toggles the visibility of the corresponding column.</p> +<p>In each column, tweets are displayed in different column according to their state:</p> +<ul> + <li>Read</li> + <li>Unread</li> + <li>Selected</li> +</ul> +<p>You can select one tweet at a time by clicking the <strong>+</strong> icon. This toggles the tweet-specific actions:</p> +<ul> + <li>Reply</li> + <li>Send a direct message</li> + <li>Save as favorite</li> + <li>Retweet</li> + <li>Translate</li> +</ul> +<p>Pretty intuitive and easy to use, so far.</p> +<h3>Default columns</h3> +<p>When you login, you’ll notice that all your tweets are <em>not</em> presented in the traditional, disorganized single-column stream layout. Instead, they are <em>sorted automatically</em> into different columns, according to their type:</p> +<dl> + <dt>My Feed</dt> + <dd>All the tweets <em>you</em> sent. By default, this column is minimized.</dd> + <dt>No-Mention</dt> + <dd>All tweets containing your username without the “@”, i.e. every time someone mentions you sneakily, without sending you a reply.</dd> + <dt>Messages</dt> + <dd>All the direct messages you sent and received.</dd> + <dt>Mentions</dt> + <dd>All the tweets containing your twitter username (with “@”), such as replies to your tweets.</dd> + <dt>Statuses</dt> + <dd>All the tweets posted by people you follow that do not contain any link or cannot be categorized through other columns.</dd> + <dt>News</dt> + <dd>All the tweets posted by people you follow containing links to articles or non-multimedia web pages.</dd> + <dt>Retweets</dt> + <dd>All the retweets posted by people you follow.</dd> + <dt>Visual</dt> + <dd>All the tweets posted by people you follow containing links to pictures or videos. Where possible, media is displayed inside the tweet.</dd> + <dt>Audio</dt> + <dd>Same as above, but for audio items.</dd> + <dt>Chatter</dt> + <dd>Attempts to collect all conversations involving you or people you follow.</dd> +</dl> +<p>Surprisingly, these default columns are enough to make your Twitter experience easier and more manageable, without configure a single setting. They’re obviously not perfect: some images are not resolved automatically, for example, but it works well otherwise.</p> +<p>Still this may not be enough for your needs or maybe simply not the right thing. No problem: JournoTwit is extremely flexible when it comes to organizing and sorting out your tweets.</p> +<h3>Adding new columns</h3> +<p>All columns except for <em>Mentions</em> and <em>Messages</em> can be modified as you see fit. These two columns cannot be modified simply because there’s nothing you <em>need</em> to modify it, if you think about it. But they can be deleted, of course (and re-created in a blink, if you delete them by mistake).</p> +<p>Let’s go through the slightly geeky process of creating a column.</p> +<p>When you click the <b>Add New Columns</b> icon on the top-left corner you’ll be prompted to further clarify whether you want to add a…</p> +<ul> + <li>Set of Columns: i.e. the default columns provided by journotwit <em>or</em> a single column containing all the tweets. Useful if you mess things up and you want to start over again.</li> + <li>Preset Column: choose from many different columns according to your needs, from different tweet types to memes (#followfriday, #musicmonday, etc.).</li> + <li>Custom Column: create your own personal column, according to your specific needs.</li> +</ul> +<p>Because the overwhelming majority of my readers is composed by geeks, I’ll just describe how to create a custom column, so that you can fully understand the power of this tool, in the right hands.</p> +<h3>Adding a custom column</h3> +<p style="float:right;"><img src="/img/pictures/journotwit/custom_column.png" alt="" /></p> +<p>The creation of a custom column doesn’t take long, but there are quite a few things you can configure. First off, you have to specify whether you want the column to collect <em>local</em> or <em>global</em> tweets: local means the people you follow, while global means everyone on the planet. Simple enough.</p> +<p>Then comes the juicy geeky part: search terms and tags. Simply type a valid <a href="http://search.twitter.com/operators">Twitter Search query</a> in the textbox, so something like this:</p> +<p><code>from:jonobacon OR #ubuntu -jaunty</code></p> +<p>…will hopefully fetch all tweets posted by <a href="http://www.twitter.com/jonobacon">@jonobacon</a> or tweets about Ubuntu, but not related to the Jaunty Jackalope release. You can also add more text box and thus perform more search queries within the same column.</p> +<p>Then you can filter by tweet type, enabling or disabling Statuses, Visual, Links, Audio, ReTweets and Chatter. Useful to remove the noise (if you follow <a href="http://www.twitter.com/brentspiner">@brentspiner</a>, make sure you disable <em>ReTweets</em>…).</p> +<p>Finally, you only have to configure a few more settings:</p> +<ul> + <li>Whether you want to be alerted with a <em>beep</em> when there are new tweets in this column.</li> + <li>Whether you want the column to display tweets, a tag cloud or even an image slideshow.</li> + <li>The name of the column.</li> +</ul> +<p>That’s all. Simple enough. As a side note, the “No-Mention” column is nothing but a custom column in disguise: if you try to edit it, you’ll see it’s nothing but a search for “<em>username</em> -<em>@username</em> -from:<em>username</em>”.</p> +<h3>Other features and advanced settings</h3> +<p>For the tweakers, JournoTwit also exposes the a set of global settings you can modify to enhance your experience or disable annoying behaviors (depends how you look at it):</p> +<h4>Behavior</h4> +<ul> + <li>Unhide column when new tweets arrive? (default: yes)</li> + <li>Hide columns on Mark as Read? (default: yes)</li> + <li>Play alert sounds? (default: yes)</li> + <li>Animate when new items arrive? (default: yes)</li> + <li>Default #hashtags and search bar to a local search? (default: no)</li> + <li>Ignore Tag Coulds when marking all as read? (default: yes)</li> + <li>Ignore Slide Shows when marking all as read? (default: yes)</li> + <li>Warn when deleting columns? (default: yes)</li> + <li>Automatically translate tweets using Google Translate? (default: no)</li> + <li>Show “Did You Know?” messages on refresh? (default: yes)</li> + <li>Slide show transition time(s) (default: 5)</li> +</ul> +<h4>Display Adjustment</h4> +<p>If you are unsatisfied by JournoTwit’s default look and feel, you can change the fond size, the color theme (there are 18 possible choices) and even match the color of the icons with the current theme.</p> +<h4>Black Listing</h4> +<p>Straight from the contextual help:</p> +<blockquote> +<p>“Here you globally black list a #hashtag, such as #microsoft, or a search phrase such as “Windows 7”. Remember to separate them with a space and that you can block on a per column basis too."</p> +</blockquote> +<p>This is just what you need when you want to filter out pointless tweets. Use with care though!</p> +<h3>Conclusion</h3> +<p>Maybe it’s just me being a geek, but I think JournoTwit nailed it when it comes to making Twitter more productive: everything <em>just works, and fast</em>, unlike some of its more feature-boasting competitors. I have been using it on a daily basis for weeks, and I’ve never missed a single tweet since (unless <em>I explicitly wanted to do so</em>).</p> +<p>That being said, there are a few small features I’d like to see:</p> +<ul> + <li>I’d like to be able to mark <em>single tweets</em>, not entire columns, as read. In this way, when I go on vacation and come back, I can catch up with unread tweets more gradually, like I do with Google Reader.</li> + <li>I’d like to use shortcut keys to navigate the interface, like with Google Reader.</li> + <li>I’d like to configure tweets so that they only show up in one column, not in more than one (for example in Chatter, My Feed, and Mentions at the same time).</li> + <li>Support for Twitter Lists…</li> +</ul> +<p>I already told <a href="http://twitter.com/spode">@spode</a> about some of these, and he said he’ll look into it, we’ll see what happens. Anyhow, just <a href="http://www.journotwit.com">give it a try</a>, and see if you like it!</p>
@@ -0,0 +1,118 @@
+----- +title: "A closer look at Komodo Edit" +content-type: article +subtitle: "A comprehensive review of the free editor from ActiveState" +timestamp: 1195971780 +tags: "review|programming|software" +----- +<p><a href="http://digg.com/programming/A_closer_look_at_Komodo_Edit"><br /> +<img src="http://digg.com/img/badges/180x35-digg-button.png" width="180" height="35" alt="Digg!" /><br /> +</a></p> +<p><em>What’s your favorite code editor?</em></p> +<p>This is a common question which still keeps popping up on community boards, mailing lists, comments, etc. Every programmer who writes code in some programming language normally has an editor of choice. Being realistic, most of the times it’s not only one program but several, depending on the language and on the features needed at the time.<br /> +Yes, great, but how do you choose your favorite editor?<br /> +By trying a lot of them of course: that’s what I’ve been doing since I started programming. Lately I’ve become fond of <a href="http://www.vim.org">Vim</a> (or better, gVim), although I have a few other editors I may recommend, e.g.:</p> +<ul> + <li><a href="http://notepad-plus.sourceforge.net/uk/site.htm">Notepad++</a></li> + <li><a href="http://intype.info/home/index.php">Intype</a></li> + <li><a href="http://scintilla.sourceforge.net/SciTE.html">SciTE</a></li> +</ul> +<p>Recently, however, I came across my <em>n^th^</em> “what’s your favorite editor” thread and someone mentioned <a href="http://www.activestate.com/Products/komodo_edit/">Komodo Edit</a>. I knew of it already, actually, but I never had a chance to give it a <em>proper</em> try. <br /> +ActiveState is well known mainly for two things:</p> +<ul> + <li>Their effort in offering a lot of commercial, windows-based Perl libraries</li> + <li>Their commercial <span class="caps">IDE</span>, Komodo <span class="caps">IDE</span>, which I personally tried quite a long time ago</li> +</ul> +<p>The problems of Komodo <span class="caps">IDE</span> are foundamentally two:</p> +<ul> + <li>It costs money – this is not great in a world where Eclipse and Netbeans are free</li> + <li>It is an <span class="caps">IDE</span> – which normally means <em>‘heavy as hell’</em>.</li> +</ul> +<p>It’s a matter of taste and needs: some people feel more confortable with using an editor for certain tasks, while sometimes an <span class="caps">IDE</span> may be the best solution, despite its potential slowness and bulk.</p> +<p>Komodo Edit solves the above-mentioned problems because:</p> +<ul> + <li>It’s free</li> + <li>It’s an editor</li> +</ul> +<p>Actually I wouldn’t call it an editor, because it offers quite a lot of features which are normally absent in editors — it’s something in-between, which definitely deserves a try.</p> +<h2>User interface</h2> +<p>Komodo Edit’s interface is one of the most clear I’ve ever come across. It is organized in four main areas plus the top menu and toolbar (which only has the buttons you <span class="caps">REALLY</span> need, unlike Notepad++’s 31-button-bar).</p> +<p><img src="/files/komodo_main.png" alt="" /></p> +<p>The central area is for editing, the left pane is for the Project browser, the right one is for the Toolbox and the bottom pane is for command output. Luckily enough, a set of handy little buttons is provided in the toolbar to show and hide each pane. I normally only use the Project Browser and the main editing area, leaving the Toolbox and Command Output panes hidden, but that’s up to you really.</p> +<p style="float:left;"><img src="/files/komodo_show-hide_pane.png" alt="" /></p> +<p>Komodo Edit allows symultaneous editing of multiple documents, which means that it has tabs like most of the best editors out there. Furthermore, it is possible to have Komodo re-open the files edited in the last editing session, saving you a lot of time. Granted, a lot of <span class="caps">IDE</span> do, but this is <strong><span class="caps">NOT</span></strong> an <span class="caps">IDE</span>, remember? It’s an <em>editor</em>, or at least it is advertised as such.</p> +<p>In reality it has <em>most</em> of the power of a full-blown <span class="caps">IDE</span> though normally remaining under the 60K memory usage (out of 2GB of total <span class="caps">RAM</span>) — which is not that bad, considering what Eclipse and NetBeans need.<br /> +Out of all the <a href="http://www.activestate.com/Products/komodo_edit/edit_vs_ide.plex">extra features</a> offered by Komodo <span class="caps">IDE</span>, the only one I truly miss is the Code Browser. Other than that, it quickly became my editor/<span class="caps">IDE</span> of choice (when gVim isn’t looking, of course…)</p> +<p>Lets find out why…</p> +<h2>Editing features</h2> +<p>Komodo Edit comes with all the editing features of ever average editor, so <em>“[…] Code commenting, auto-indent and outdent, block selection, incremental search, reflow paragraph, join lines, enter next character as raw literal, repeat next keystroke and clean line endings on “save”."</em>, it uses Scintilla as main editing component, which makes it a close relative of Notepad++, Notepad2 and of course SciTE when it comes to understanding languages and syntax highlighting.</p> +<p>This is good, of course, as Scintilla is an excellent editing component, but – I have to say this – not as good as Vim when it comes to syntax highlighting (nothing is as good as Vim though, so I can’t really complain!).<br /> +As you can see from the screenshot I included earlier on, it is possible to change the default black-on-white color scheme to something more stimulating and energy-saving. This doesn’t mean I have to manually re-set the color of each element, it actually comes with a black-background scheme, which is handy.</p> +<h3>Supported Languages & Syntax Highlighting</h3> +<p>Komodo Edit supports quite a few programming languages, which means it can recognize the most common ones (C, C++, Java, <span class="caps">PHP</span>, Python, Ruby, Perl) but it also smart enough to notice framework-specific syntaxes like Smarty, Django or <span class="caps">RHTML</span>.<br /> +Like every scintilla-based editors, it sports a nice <span class="caps">HTML</span> multi-highlighter which allows you to keep putting all the Javascript, <span class="caps">CSS</span> and server-side scripting into the same file, <span class="caps">GREAT</span>! No, you probably wouldn’t want to do that, but it’s a good thing to have.</p> +<h3>Auto-completion</h3> +<p>What makes this editor a really handy tool is its auto-completion capabilities. Why? well, because it supports:</p> +<ul> + <li>Ruby: require, class modules (on . and ::), class variables and methods, method calltips.</li> + <li>Python</li> + <li>Perl</li> + <li><span class="caps">PHP</span></li> + <li><span class="caps">XSLT</span></li> + <li><span class="caps">XML</span></li> + <li>Tcl</li> +</ul> +<p>Why is this so special? Well, because if you want this you normally need an <span class="caps">IDE</span>, and if you want it for Ruby <span class="caps">AND</span> Python <span class="caps">AND</span> Perl your choices are very limited. <br /> +I played with the Ruby auto-completion features quite a bit, and I’m actually really impressed.</p> +<p style="float:right;"><img src="/files/komodo_auto-completion.png" alt="" /></p> +<p>It can suggest what to write through calltips after a <code>require</code> directive, after a . and a ::, and hitting CTRL+SPACE (or just tab if you configure the right option) will auto-complete what you’re writing, be it a language keyword, a variable of any kind or a method. Additionally, it comes with “soft characters support”, which means it will try to match ( [ { when possible, allowing you to <em>write over</em> the completed character if you want to.</p> +<h3>Syntax Checking, Vi/Emacs key bindings and code folding</h3> +<p>The heading is almost self-explanatory here: Komodo Edit supports code folding (you can even chose the folding chracters!) for all its supported languages, syntax checking (it can detect and display errors before running the script, very useful in Ruby, and hard to find in other editors) and Vi/Emacs key bindings. <br /> +It also offers “vi emulation”, which is constantly improving through every release – so you won’t forget Vim’s keys when I don’t use it: very nice, and again, hard to find in other editors, nevermind IDEs!</p> +<h2>Projects and Tools</h2> +<p style="float:right;"><img src="/files/komodo_toolbox.png" alt="" /></p> +<p>The Project Browser and Toolbox are two features which are normally presents in IDEs and which are normally not found in editors. Granted, some editors like <a href="http://www.pspad.com/en/">PSPad</a> do indeed have “projects”, but most of the others don’t. A <em>project</em> in Komodo Edit is normally composed by:</p> +<ul> + <li>Some <em>Live Folders</em> including all the source files of the application you’re developing</li> + <li>An optional set of tools, commands, snippets and other goodies which may help you coding that particular application.</li> +</ul> +<p>It is possible to create these tools by clicking the <strong>Add Item to current project</strong> button in the Projects toolbar or by clicking the <strong>Add Item to Toolbox</strong> button just over the toolbox. <br /> +Either way, you can choose among the following:</p> +<h4>File/Remote File</h4> +<p>Add a file on your local machine or a remote file hosted on a server you configured via <strong>Edit > Preferences > Servers</strong>. Supported protocols are: <span class="caps">FTP</span>,<span class="caps">FTPS</span>, <span class="caps">SFTP</span>, <span class="caps">SCP</span>.</p> +<h4>Folder</h4> +<p>This will <em>not</em> link to a folder and import local files in Komodo, instead, it will create a container for other tools, not for local files.</p> +<h4>Live Folder</h4> +<p>On the contrary, a live folder links to an actual folder on your machines, and all files and directories inside it are automatically imported. Note that it is possible to choose to include or exclude certain files or directories from being imported by right-clicking the folder and editing its properties.</p> +<h4>Command</h4> +<p>This will create a shortcut to a command to execute. It is possible to specify its parameters, the directory where it will be run, whether its output will be displayed in the Command Output or in a newly-spawned console window, etc. etc.</p> +<h4>Snippet</h4> +<p>TextMate fans will love this. Komodo will let you create a code snippet for later use. Furthermore, it is possible to specify “tabstops” to automatically select certain words when tab is pressed (so you can effectively fill in only particular fields of the snippet).</p> +<h4>Template</h4> +<p>A simple but effective way to create code templates.</p> +<h4>Url</h4> +<p>A link which will open a given url.</p> +<h4>Open… Shortcut</h4> +<p>This will popup an <strong>Open File</strong> dialog in a direcxtory of your choice.</p> +<h4>Macro</h4> +<p>For those who require even more customization, it is also possible to record or code macros in Python or javascript, and then configure their key bindings and triggers.</p> +<h4>Custom Menu/Custom toolbar</h4> +<p>This was really impressive. Sure you can group all your tools in folders in your current project or you can create them in the toolbox to make them available all the time, but it would be cool if <em>the editor itself</em> could make those tools available by default in a toolbar or a menu. Well, that’s possible: all you need to do is create a new custom menu or toolbar and populate it with your tools by drag and drop. Very, very nice!</p> +<p>This mini-framework to create custom tools can be used to create project templates in a blink. To show this concept, Komodo Edit comes with a Rails template with almost all the tools you need when coding a Ruby on Rails application:</p> +<ul> + <li>Create/delete database</li> + <li>Generators</li> + <li>Migrations</li> + <li>Run server</li> + <li>Example view snippets</li> +</ul> +<h2>Conclusion</h2> +<p>Komodo Edit is an interesting editor which offers a lot of features which are normally only available in IDEs at a smaller memory footprint. Granted, when I want to jot something down I still prefer to fire up gVim, but for a serious coding session, Komodo is the right choice.<br /> +Its close attention to details and its ease of use make developing an even more pleasant experience, although perhaps there’s still room for improvement, if you’re really fussy.</p> +<p>Sometimes when you start getting used of its advanced features, the lack of a code browser seems a real shame, but after all, ActiveState must sell their <span class="caps">IDE</span> to someone at some point!</p> +<p>Another thing which I would have liked is the ability to create new syntax highlighting schemes, which Notepad++ and <span class="caps">VIM</span> both offer. Whydoes it bothers me so much? Well, because I’d like a <a href="http://textism.com/tools/textile/">Textile</a> syntax highlighting scheme for writing blogs and articles. <span class="caps">VIM</span> and Intype seem to be the only ones which offer it out-of-the-box, but there’s no trace of it in Komodo Edit.</p> +<p>Actually it is possible to create new syntax highlighting schemes and extend Komodo Edit via <a href="http://community.activestate.com/addons"><span class="caps">XUL</span> extensions</a>, exactly like Firefox. After a closer look, the Django syntax was added in this way.</p> +<p>Unfortunately there aren’t that many extensions available for Komodo Edit, yet, but the <a href="http://community.activestate.com/">Activestate Community</a> seems very active, so you never know. Additionally, the recently-started <a href="http://www.openkomodo.com/">OpenKomodo</a> is a new project created by ActiveState to “[…] create an open source platform for building developer environments. ActiveState has open-sourced elements of Komodo Edit, a free multi-language editor for dynamic languages based on Komodo <span class="caps">IDE</span>, to create the Open Komodo code base”. A new competitor for Eclipse and Netbeans will be available soon?</p> +<p><a href="http://digg.com/programming/A_closer_look_at_Komodo_Edit"><br /> +<img src="http://digg.com/img/badges/180x35-digg-button.png" width="180" height="35" alt="Digg!" /><br /> +</a></p>
@@ -0,0 +1,94 @@
+----- +title: "Book Review: Leading Lean Software Development" +content-type: article +subtitle: "A lean leadership framework" +timestamp: 1293455745 +tags: "review|books|software" +pdf: true +----- + + <section class="section"> +<p>If you already heard the names Mary and Tom Poppendieck, chances are that you already know what <em>Lean Software Development</em> is. If you don’t, start from <a href="http://en.wikipedia.org/wiki/Lean_software_development">this Wikipedia page</a>. Mary and Tom coined this term with their first book on the subject <a href="http://www.amazon.com/exec/obidos/ASIN/0321150783/poppendieckco-20">Lean Software Development: An Agile Toolkit</a>, that was followed three years later by <a href="http://www.informit.com/store/product.aspx?isbn=0321437381">Implementing Lean Software Development: From Concept to Cash</a>, and finally by this book: <a href="http://www.informit.com/store/product.aspx?isbn=0321620704">Leading Lean Software Development: Results Are not the Point</a>.</p> +<p>Unlike the two other books, this one is focused about making lean software practices succeed. In some way, it can be compared to <a href="http://www.h3rald.com/articles/succeeding-with-agile-review/">Succeeding with Agile</a>, but while Mike Cohn’s book focuses entirely on Scrum, this book has a much broader scope. Moreover, the book contains a lot of digressions and stories —even not directly related to software development— aimed at understanding particular aspects of Lean Software Development and the Lean movement in general.</p> +<p>The focus is, as the title suggests, on leadership: how can you be a good leader in these difficult, ever-changing times? How can you be agile without loosing your team? How can you improve the existing processes so that they can help you achieve your goals? If you ever asked yourself these questions, this is the right book for you…</p> + +<section class="section"> +<header><h1 id="h_1" class="toc">Structure and Organization</h1></header> +<p>This book is extremely well-structured. Its Table of Contents follows some very rigid rules which make this book one of the most organized texts I’ve ever come across. It is divided into six chapters, each organized as follows:</p> +<ul> + <li>A <em>snapshot</em> or an introductory story for the chapter’s main topic</li> + <li>Four <em>frames</em>, each describing a lean practice or personal quality</li> + <li>A <em>portrait</em> of a leader</li> + <li><em>Your Shot</em>, i.e. some questions and exercises for the readers</li> +</ul> +<p><img src="/img/pictures/books/leadingleanswdev.jpg" style="float:right" /></p> +<p>In total, the book contains 24 frames constituting the “Big Picture”, which is actually a very powerful framework for lean software leadership. You can read the book’s <span class="caps">TOC</span> <a href="http://www.poppendieck.com/llsd.htm">online</a> on the Poppendieck website and read the book’s Introduction (<a href="http://www.poppendieck.com/pdfs/LLSD_intro.pdf"><span class="caps">PDF</span> link</a>) on the whole concept of <em>framing</em> (yes, both the authors do love photography!).</p> +<p>When I started my career as a technical writer I used to love carefully-structured, simmetrical manuals. After a while, however, I understood that such rigorous structuring can even be dangerous if it becomes an obsession: you end up adding extra “padding writing” to make sections roughly match in length, or you start cutting down some other parts, for the same reason. Writing well-balanced books is hard, but I must say that the authors do a very good job with this book: it flows very naturally while keeping to its rigorous structure.</p> + +</section> +<section class="section"> +<header><h1 id="h_2" class="toc">Chapter 1: Systems Thinking</h1></header> +<p>The first chapter is about customers, what they want and the goals of your system. It describes some interesting high level concepts like <em>failure demand</em> and <em>policy-driven waste</em>, and how to spot opportunities to improve the process.</p> +<p>What I found particularly interesting was the usage of <a href="http://www.cps.gov.uk/publications/finance/process_mapping.html">process maps</a> to analyze an existing process and find bottlenecks or leaks (in terms of time). I was instantly sold on this practice after reading the success story of how a company manage to reduce the overall time to process and solve customer issues simply by connecting customers directly to developers instead of tech support engineers. This is something you can’t apply everywhere, but after creating a process map for that specific case, the solution was evident.</p> +<p>More generally speaking, this chapter provides a recipe/checklist outlining the sequence of the phases of process improvement and problem solving:</p> +<ol> + <li><em>Understand</em></li> + <li><em>Observe</em></li> + <li><em>Visualize</em></li> + <li><em>Evaluate</em></li> + <li><em>Implement</em></li> +</ol> + +</section> +<section class="section"> +<header><h1 id="h_3" class="toc">Chapter 2: Technical Excellence</h1></header> +<p>This is the only chapter focusing primarily on technical topics and knowledge. It starts with a very lengthy digression on the history of programming methodologies, aimed at understanding <em>what works and what doesn’t</em>. Some examples of IT stuff that worked include the Internet, PCs and …Open Source Software.</p> +<p>This chapter provides a general overview on Software Development as a whole. It contains some interesting information on software complexity and dealing with architectural dependencies, comprehensive sections on testing and continuous integration, and just a half page on refactoring (understandable, seeing that there are already plenty of excellent books on the subject).</p> + +</section> +<section class="section"> +<header><h1 id="h_4" class="toc">Chapter 3: Reliable Delivery</h1></header> +<p>The <em>Race to the Sky</em> section at the beginning of Chapter 3 is by far the most fascinating of the non-IT stories included in this book. It describes the construction of the Empire State Building in 1930, how it was planned out, what strategies were followed, and why it succeeded (why <em>the construction</em> succeeded: the building itself remained totally unprofitable for quite some time).</p> +<p>There are <a href="http://en.wikipedia.org/wiki/Empire_State_Building#Further_reading">plenty</a> of books on the subject, but Tom and Mary Poppendieck well summarize the key points of this modern-day epic achievement: how to build the tallest skyscraper in the world in a single year. This story teaches us how to work under very tight deadlines, by designing a system to fit constraints, rather than estimating up-front.</p> +<p>This story was perfect to introduce, in the same chapter, concepts like <a href="http://en.wikipedia.org/wiki/Kanban">Kanban</a>, <em>pull scheduling</em> and <em>adaptive control</em>, which only recently have been seriously considered in the world of Software Development but they are becoming more and more relevant.</p> + +</section> +<section class="section"> +<header><h1 id="h_5" class="toc">Chapter 4: Relentless Improvement</h1></header> +<p>Chapter 4 starts with a brief history of the checklist, which was invented in 1935, to be used by airplane pilots. It then moves on to its usage in hospitals, describing how checklists helped dropping infections caused by inserting central venous catheters incorrectly. Why all this? To focus on the concept of <em>process standards</em>, or better, how <em>we</em> can improve processes to accomplish our goals.</p> +<p>Basically, this us what Toyota does: regulations should not be written on stone, but they should reviewed and updated frequently for continuous improvement or <a href="http://en.wikipedia.org/wiki/Kaizen">Kaizen</a>.</p> +<p>Finally, this chapter also briefly introduces a few different ways to perform root-cause analysis, such as using <a href="http://en.wikipedia.org/wiki/Ishikawa_diagram">fishbone diagrams</a>.</p> + +</section> +<section class="section"> +<header><h1 id="h_6" class="toc">Chapter 5: Great People</h1></header> +<p>This chapter and the last one are actually focused on people and management. In this chapter, an unusual (for this kind of books, that is) but intriguing analysis on different countries using the following dimensions:</p> +<ul> + <li>power distance</li> + <li>individualism</li> + <li>masculinity</li> + <li>uncertainty avoidance</li> + <li>long-term orientation</li> +</ul> +<p>Turns out that individualism is abundant in the Western world but not so much in the Far East (who would have thought!), but the opposite applies to power distance. A bit stereotypical, if I may, but not too much: the results are not surprising, especially when it comes to considering different cultures as a whole. Once more, the focus is again on Toyota’s Kaizen and their culture of <em>respect for the people</em>.</p> +<p>On page 198, the meaning of the subtitle of the book (Results Are not the Point) is revealed: <q>developing the people and the system so that together they are capable to achieve successful results is the point</q>. Agile is precisely about this: focusing on the people.</p> +<p>But what about leaders? This is an aspect of the whole Agile philosophy that I keep stumbling upon: if you want <em>The Team</em> to be in charge, what happens to leadership? As I found out myself working in and with Agile Teams, often there’s a serious lack of strong leaders. <q>Leadership needs to be gently refactored into Agile</q>, that’s what Mary and Tom recommend. How? It depends on each specific case, but it must always be done <em>gently</em>.</p> + +</section> +<section class="section"> +<header><h1 id="h_7" class="toc">Chapter 6: Aligned Leaders</h1></header> +<p>The final chapter begins with the history of <em>Agile@IBM</em>, or how to turn the biggest software company in the world into a massive agile machine. It wasn’t a top-down decision, the <span class="caps">CEO</span> didn’t just wake up one morning and decided that everyone should go Agile. Quite the opposite: it was something that was <em>pulled</em> by developers rather than <em>pushed</em> at them.</p> +<p>In cases like this, companies should be focusing on developing people, including good leaders, instead of particular initiatives and processes. Leaders in turn should shift their focus from details to more high-level decisions. When it comes to facing changes, leaders should look at the <a href="http://www.bbrt.org/beyond-budgeting/bbprinc.html">12 principles</a> of the <a href="http://www.bbrt.org/"><span class="caps">BBRT</span></a> leadership model.</p> +<p>The final portrait, <em>Leaders at all Levels</em>, well summarizes the key to successful leadership: <q>leadership is about example, coaching and helping others to achieve their goals</q>.</p> + +</section> +<section class="section"> +<header><h1 id="h_8" class="toc">Final Thoughts</h1></header> +<p>If you’re looking for a manual on implementing Lean Software Development in detail, this is probably not the best book on the subject. If you’re a developer at the start of your career, with no management responsibilities, you’d want more technical juice, so probably you should read the other two books by the Poppendiecks on the subject first.</p> +<p>On the other hand, if you have been working in IT for a few years, and maybe you already started to climb up the corporate ladder, reading this book could make the difference between being successful leader or not. This book does not go very in-depth with any particular methodology or process, but it does provide an excellent overview of a lot of them.</p> +<p>To get the best out of <em>Leading Lean Software Development</em>, you should read it a least once sequentially, skipping the parts that are not relevant to you (right now), taking notes on the more interesting frames, and then go back over them to digest them properly. Do <em>not</em> skip the introduction of each chapter though, for one because they are always pleasant to read between frames, and also because they do teach some very important values or strategies that you <em>must</em> assimilate.</p> +<p>The general message that stands out when reading this book is <em>focus on people</em>. Customers, of course, but also employees: every single successful company mentioned in this book, from Toyota to Southwest Airlines, became successful because they always focused on developing people <em>first</em>, and <em>then</em> products.</p> + +</section> + +</section>
@@ -0,0 +1,35 @@
+----- +title: "Personal Log - April 2009" +content-type: article +timestamp: 1240891860 +tags: "personal_log|ruby|books|wedding" +----- +<p>April is tratidionally a rather busy month: Easter, public holidays, and — always — some deadline to meet at work. Moreover, my birthday is also in April which makes it even more busy! Let’s see what happened this year…h3. Using Ruby in a corporate environment</p> +<p>I’ve been using Ruby at work for a while now. I started off writing some automation script for my own needs, then someone noticed it and asked me if by chance I could develop some scripts for them, for automating part of their own job, and so on. My boss ultimately noticed it, and she liked the idea of me investing a small portion of my time to make other people save huge amount of <em>their</em> time, so now I am <em>officially</em> in charge of workflow improvements and automation (it’s even in my job description!).</p> +<p>This month a colleague of mine and I had to figure out a way to write some documents <strong>once</strong> in <span class="caps">XML</span> format and then produce different kind of outputs (other <span class="caps">XML</span> files, PDFs, etc.) using the <a href="http://dita-ot.sourceforge.net/"><span class="caps">DITA</span> Open Toolkit</a>. Originally we thought the toolkit would do most of the job, but we soon realized we needed to tweak and change a lot more than what we usually expected.</p> +<p>We ended up hacking together a <em>system</em> using:</p> +<ul> + <li><a href="http://office.microsoft.com/en-us/infopath/default.aspx">Microsoft Infopath</a> as <span class="caps">XML</span> editor for the end users (the company buys it by default, so no worries there)</li> + <li>A Ruby program to parse and manipulate the original <span class="caps">XML</span> and produce <span class="caps">DITA</span>-compatible <span class="caps">XML</span> files.</li> + <li>Some <a href="http://ant.apache.org/">Apache Ant</a> tasks available in the open toolkit to produce an <span class="caps">XSL</span>-FO file</li> + <li><a href="http://xmlgraphics.apache.org/fop/">Apache <span class="caps">FOP</span></a> to produce the <span class="caps">PDF</span> from the <span class="caps">XSL</span>-FO file…</li> +</ul> +<p>The thing seems to work fine (after a lot of tweaking), and I really enjoyed creating the Ruby program to <em>glue</em> everything together. I even got a chance to introduce my colleagues to the wonderful world of <a href="http://hobix.com/textile/">Textile</a> (they are so happy that they don’t want to use <span class="caps">WYSIWYG</span> editors anymore!).</p> +<h3>Easter in London</h3> +<p>As usual, Roxanne and I spent our Easter holidays in London, at her brother’s place. This year we actually had 9 days to go around <del>squandering money</del> spending <em>wisely</em> in food, books, clothes and entertainment.</p> +<p>Most notably, I managed to drag Roxanne to <a href="http://www.foyles.co.uk/">Foyles</a> and I got myself a copy of <a href="http://www.pragprog.com/the-pragmatic-programmer">The Pragmatic Programmer</a>, which I’m reading avidly. If it was up to me I was going to buy half of the computing section, but Roxanne <em>kindly pointed out</em> that I could get all of them from Amazon for half the price. <br /> +And she was right: for my birthday I preordered a copy of <a href="http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144">Programming Language Pragmatics, 3rd Ed.</a>, which should be shipped soon.</p> +<h3>Wedding planning</h3> +<p>My spreadsheets for the wedding guests, wedding expenses (!) and …suit sizes are getting bigger and bigger. We managed to book a lot of flights to Ireland to my parents, us, relatives etc., but there are still quite a few things to do for the wedding. The most urgent thing to do right now is sending the invites: we had them printed with the words <em><span class="caps">RSVP</span> within May</em> on them, so they <em>have</em> to be out in one or two weeks at most.</p> +<p>The other thing which must be sorted soon are the suits. According to English (and Irish) tradition, the groom, the bestman, the father of the groom, the father of the bride and the ushers have to wear the same type of suit, with minor differences (the color of the waistcoats?). In my case, this means getting 7 (<span class="caps">SEVEN</span>) <em>morning suits</em> off eBay, in the right sizes! Hopefully I’ll be able to get them by the end of next week (if my bestman manages to let me know his sizes).</p> +<h3>XBox 360 Gaming</h3> +<p>Now that our new XBox 360 finally came through, Roxanne and I have a lot of hours of hard core week end gaming ahead of us! This, added to the physiological increase of stress due to the wedding, may result in a temporary slowdown of my coding and writing activities.<br /> +Right now we’re playing <a href="http://xbox360.ign.com/objects/949/949455.html">Mirror’s Edge</a>, <a href="http://xbox360.ign.com/objects/718/718963.html">Mass Effect</a>, and <a href="http://xbox360.ign.com/objects/746/746631.html">Unreal Tournment <span class="caps">III</span></a>. The last one was a special surprise present from Roxanne (<em>“…so we can kill each other!”</em> — she’s really lovely at times!).</p> +<h3>Other tech-related tidbits</h3> +<ul> + <li>I can’t wait to go to the cinema to watch <a href="http://www.imdb.com/title/tt0796366/">Star Trek XI</a></li> + <li>I started using <a href="http://www.shelfari.com/">Shelfari</a></li> + <li>I started using <a href="http://start.io">Star.io</a> as my personal, bare-bones start page.</li> + <li>I recently <a href="http://www.h3rald.com/articles/concatenative-020">released Concatenative 0.2.0</a>.</li> + <li>I’m currently evaluating the possibility to create a Ruby-based <em>Document Authoring Framework</em>. Stay tuned.</li> +</ul>
@@ -0,0 +1,89 @@
+----- +title: "Personal Log - February 2009" +content-type: article +timestamp: 1235736540 +tags: "personal_log|ruby" +----- +<p>This has been a rather busy month, hence the lack of general Internet activity. I really wanted to post some more articles to my site, but for one reason or another I had to procrastinate more and more, and here we are at the end of the month again.</p> +<h3>Recession time!</h3> +<p>I’ve always considered the current economic downturn as something happening <em>somewhere else</em>: <span class="caps">USA</span>, England, Ireland… but not in Italy, really: our country never boomed, we don’t go mental with loans and mortgages (or at least we didn’t use to), so there’s no real reason for a full-on recession period.</p> +<p>It turns out I was wrong. Other than the fact that our industries are more or less non-existant or already in debt, I didn’t consider that:</p> +<ul> + <li>Italians tend to panic a lot.</li> + <li>We have an awful lot of foreign business going on, a lot of multi-national companies opened up through the years lured by cheap workers and acceptable craftmanship.</li> + <li>Our government already <del>wastes</del> invests a lot of money regularly, every year, to fuel a colossal, <a href="http://dictionary.reference.com/browse/nepotistic">nepotistic</a>, pointless bureaucratic machine they insist on calling “State”.</li> +</ul> +<p>Result: the recession is starting to hit properly over here too. People are saving money, they don’t go out buying pointless crap, they are scared to ask for a raise at work… the usual. I work for a foreign company which has been, as were most, forced to save some money to compensate some not-so-good First Quarter’s revenues. This means less unnecessary expenses, less training, less travelling and less outsourcing, which didn’t help improving the daily work experiece. Personally, I’m not that affected by all this, nevertheless it made me bless the day my fiancée persuaded me to stop uni after my Bachelor’s Degree to get a very rewarding, not-so-stressful job.</p> +<h3>No ’Net @ Home</h3> +<p>The most annoying thing of the month was (and still is) the lack of Internet access at our house. Let’s do a quick recap:</p> +<ol> + <li>After spending one year with Telecom Italia, Roxanne and I decided to change provider to save a bit of money and get more speed.</li> + <li>On <em>December 24th</em> we requested a contract with <a href="http://www.wind.it">Wind</a>, after they assured that we’d have the Internet back on in <em>just a few days, tops</em>.</li> + <li>On <em>January 5th</em> Telecom disconnected us.</li> + <li>On <em>January 12th</em> Wind sent me a mail telling me that there was going to be a <em>15-day delay</em> in the activation — well, at least they told us so! We waited.</li> + <li>On <em>February 2nd</em> I call Wind Customer Care hassling them to get a move on — just some minor delays, <em>it will only take a few days, tops</em>. We waited.</li> +</ol> +<p>Our new Internet line has been <em>in the process of being activated</em> ever since January 5th. Why? Because being a customer sucks, in Italy, and you can’t do much about it.<br /> +Let me quote one of the 13 phone calls I made:</p> +<ul> + <li>… 5 minutes on hold, stupid music in the background …</li> + <li>[Operator]: Good Evening Sir, I’m <random name>, how can I help you?</li> + <li>[Me]: Hello, I’m enquiring about the status of my Internet connection: I’ve been disconnected since the 5th of January…</li> + <li>[Operator]: Phone Number please?</li> + <li>[Me]: *** ******</li> + <li>… 2 minutes on old …</li> + <li>[Operator]: Name plase?</li> + <li>[Me]: Fabio Cevasco</li> + <li>[Operator]: Let me check…</li> + <li>… 6 minutes on hold, stupid music in the background …</li> + <li>[Me]: Any luck?</li> + <li>[Operator]: One moment please…</li> + <li>… 2 minutes on hold, stupid music in the background …</li> + <li>[Operator]: Sir, it says here that you are <em>in the process of being activated</em></li> + <li>[Me]: (you stupid idiot, I can check that on the Net in less than a minute) Yes, I know what, but why, exactly? It has been over a month…</li> + <li>[Operator]: Let me check…</li> + <li>… 3 minutes on hold, stupid music in the background …</li> + <li>[Operator]: There are some technical difficulties.</li> + <li>[Me]: What kind of technical difficulties?</li> + <li>[Operator]: I… I don’t think you can understand Sir, it’s technical…</li> + <li>[Me]: (!!!) I have a degree in IT Engineering, so yes, I think I can understand enough.</li> + <li>[Operator]: …well, there’s nothing I can do… it says we’re in the process of connecting you, it should be just…</li> + <li>[Me]: …a matter of a couple of days, yes, I know: it has been over a month though!</li> + <li>[Operator]: Sir, really, I can’t really do much about it, you’ll just have to wait</li> + <li>[Me]: Can you let me speak with the Technical Department?</li> + <li>[Operator]: No, sir, I can’t: you see, your <span class="caps">ADSL</span> line is not yet activated, they can’t do anything about it.</li> + <li>[Me]: Excuse me, but I’d like to know what the problem is, and how long it will take to activate the line.</li> + <li>[Operator]: Sorry sir, we don’t have this information, and we can’t commit to a specific date.</li> + <li>[Me]: (!!!) May I speak to someone who knows this? May I speak to your superior?</li> + <li>[Operator] No, you can’t speak to my superior. You’ll just have to wait, I’m sorry.</li> + <li>[Me]: Well, it has been over a month, and I don’t know if you realize that you were supposed to connect me in just a few days and…</li> + <li>[Operator]: Thank you for calling sir, have a good day.</li> +</ul> +<p>That barely conveys the frustration I felt and I’m still feeling now. I can’t even sue them: I could get 100 Euro at most after spending at least a couple of thousands in lawyer. So much for the land of sunshine huh?</p> +<h3>Programming in Ruby, again</h3> +<p>Some of you may be pleased to know I’m back coding in Ruby after slacking for months. It’s just the time of the year, I guess. <br /> +I’m also evangelizing the language quite a bit at work: after I wrote a few scripts on demand, I slowly lured one of my colleagues to Vim, the Texile markup and then finally the Ruby language. He’s going through the <a href="http://www.h3rald.com/articles/hlrb-review">Humble Little Ruby Book</a> and he’s loving it, so far. He’ll hopefully be fully assimilated in a few weeks at most, and after that there will be no going back!</p> +<p>This inspired me to start a full rewrite of <a href="http://www.h3rald.com/tags/redbook/">RedBook</a>, my little Ruby daily logger. It will feature a SQLite backend and Merb’s Datamapper to take care of the dirty work.<br /> +Unfortunately, even if the new sources are already available on <a href="http://github.com/h3rald/redbook/tree/master">GitHub</a>, it will take me approximately a few more weeks to complete all the plugins and more to finish the RDoc documentation and — hopefully — a fully-fledged user manual. It’s <strong>the</strong> pet project, after all…</p> +<p>On the other hand, it will take me considerably less time (a few days?) to release the next version of my <a href="http://www.h3rald.com/tags/rawline">RawLine</a> library, featuring:</p> +<ul> + <li>Ruby 1.9 support</li> + <li>A handy little function for filename completion</li> + <li>Readline emulation, i.e. just <code>include Rawline</code> and use it as if it was <span class="caps">GNU</span> Readline</li> +</ul> +<p>Of course this doesn’t mean RawLine is a complete, 100% Ruby port of the <span class="caps">GNU</span> Readline library, but it is definitely more Ruby-ish, more cross platform (try using Readline with Ruby on Windows…), and usable enough for most of the normal things, like:</p> +<ul> + <li>tab completion</li> + <li>line editing (but no vi or emacs mode yet, sorry)</li> + <li>history</li> + <li>quick and easy key bindings</li> +</ul> +<p>Once this comes out, I’ll be implementing features on-demand, as <span class="caps">GNU</span> Readline is huge and offers way too many things anyone would ever need. Patches and contributions are of course more than welcome, though.</p> +<p>For all my open source Ruby projects, after <a href="http://www.h3rald.com/articles/where-does-your-ruby-code-live">pondering the alternatives</a>, I decided to go with the following setup:</p> +<ul> + <li>My own site for the home pages of the projects</li> + <li>RubyForge for gem support and for RDoc documentation</li> + <li>GitHub as source code repository</li> + <li>LightHouse for issue tracking</li> +</ul> +<p>I hope it works out…</p>
@@ -0,0 +1,51 @@
+----- +title: "Personal Log - June 2009" +content-type: article +timestamp: 1246235040 +tags: "personal_log|vim|ruby|wedding" +----- +<p>Welcome to yet another of my extremely boring, excessively fragmented <a href="/tags/personal_log">personal log</a> posts. I’m seriously thinking of dropping the whole series in favor of more frequent (and shorter) blog posts, starting from next year. This means you’ll probably have to read <em>another six</em> of these priceless gems, until december 2009.<br /> +As usual, feel free to skim through as each of the following <em>sections</em> is almost completely unrelated to the others.</p> +<h3>H3RALD Web Site v8.0</h3> +<p>It’s the time of the year, again. It doesn’t happen <em>every</em> year but it’s definitely a trend (hence the high version number): I’m going to redesign & redevelop my web site.</p> +<p>This time is not the usual “Let’s pick another language and another framework and start from scratch”, but a rather more radical shift, and yet at the same time less painful. The idea is to transform H3RALD.com into a 100% static web site, without losing anything in functionality (gaining, if anything!).</p> +<p><a href="/http://tom.preston-werner.com/">Tom Preston-Werner</a> is definitely <em>not</em> the first person to <a href="http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html">blog like a hacker</a>, and his very own <a href="http://www.jekyllrb.com/">Jekyll</a> is definitely not the first static web site generator our there, nevertheless, he inspired me to embrace what seems to be one of the latest trend in developer’s blogs.</p> +<p>The idea is simple: turn all the blog posts and pages into static content, and rely on third party web services for things like comments, search etc. For a rather extreme by very interesting example, see <a href="http://tagaholic.me/">Tagaholic</a>.</p> +<p>The advantages of this approach are many:</p> +<ul> + <li>Free yourself from a database.</li> + <li>Free yourself from a resource-hungry, server-side app (<a href="http://wiki.github.com/fdv/typo/">Typo</a>, in this case).</li> + <li>Increase speed and reliability, without using caching or similar artifacts.</li> + <li>Keep everything under version control.</li> + <li>Don’t worry about breaking things when upgrading (even if the static content generator changes, it shouldn’t really break things).</li> + <li>Unleash the power of client-side scripting (namely, JQuery).</li> +</ul> +<p>For now, I’m just brainstorming a little bit on <a href="http://github.com/h3rald/h3rald-website/issues">GitHub</a>, feel free to participate. The first step is obviously choosing a static content generator, and atm Jekyll seems to be slightly ahead of Webby. Opinions?</p> +<h3>Glyph</h3> +<p>Did you ever want to write a short manual or a book, or even a long article? If so, chances are you gave LaTeX a shot and either fully embraced its philosophy or totally refused it. Sadly, I belong to the second category: I believe sequential documents like manuals or books should be easier to create simply by using <span class="caps">HTML</span>.</p> +<p>Whever I have a chance to actually start working on it, Glyph will become a <em>document authoring framework</em>, i.e. a way to create visually appealing documents in a simple way. All the ingredients are there, it’s only necessary to glue them together in a pretty form:</p> +<ul> + <li>Textile (and <a href="http://redcloth.org/">RedCloth</a>) to produce clean <span class="caps">HTML</span> code from a human-readable markup</li> + <li>CSS3 to specify page rules</li> + <li>A few rake scripts to produce a standalone <span class="caps">HTML</span> file, <span class="caps">TOC</span>, Index etc.</li> + <li>An internal <span class="caps">DSL</span> for the document structure and metadata</li> + <li><a href="http://www.liquidmarkup.org/">Liquid</a> for control flow, snippets and filters</li> + <li><a href="http://www.princexml.com/">PrinceXML</a> to generate a <span class="caps">PDF</span> from <span class="caps">HTML</span></li> +</ul> +<p>This project is still in planning stage, feel free to have a look at the <a href="http://github.com/h3rald/glyph/issues">issues/features page</a> on GitHub. Feedback is appreciated, as usual.</p> +<h3>Vim files & <em>the Stash</em></h3> +<p>If you read the previous two sections of this post, you may have noticed that I’m growing more and more fond of git (and GitHub). Besides the repositories I already mentioned earlier on, I also created a personal <a href="http://github.com/h3rald/stash">stash</a>, which I’m using mainly to store some of my Linux dotfiles, article drafts and …Vim customizations.</p> +<p>If you’re looking for a color scheme for Vim, check out my very own <a href="/herald-vim-color-scheme">herald.vim</a>, and tell me what you think.</p> +<h3>Getting ready for the Big Step</h3> +<p>This will probably be my last post as a free man, as I’m getting married (civilly) on July 2nd and (religiously) on July 11th. <br /> +Luckily the photographer agreed to give us a CD with all the pictures taken on the big day, with no copyright restrictions attached to it (believe it or not, some photographers don’t allow you to republish <em>your own</em> photos unless you ask them first), so I’ll probably write a long post with pictures when we come back from our (half) honeymoon.</p> +<p>Everything is pretty much organized. We had troubles with the waistcoats we got from eBay: they were cut almost randomly to <em>resamble</em> waistcoats, but they weren’t so we had to re-order another lot of 7 sets (waistcoat, cravat <em>and</em> shirt this time) from another seller, this time UK-based. I seriously hope to get them in time.</p> +<p>On the 24th we’re having a party at our house. If you were invited, feel free to drop by, otherwise be prepared to be thrown out of the window (4th floor) by one of our ushers (Roxanne’s <em>big</em> brother). It’s probalby going to be about 30-40 people in the end, mainly because most of my office can’t come due to holidays they booked in advance.</p> +<p>What’s left to do now? Well:</p> +<ul> + <li>Send the bomboniere over to Ireland</li> + <li>Make sure my dad actually ships the 96 specially-bottled bottles of our own wine to uncle John, in Ireland.</li> + <li>Make sure uncle John doesn’t drink all the 96 bottles of wine before the wedding reception.</li> + <li>Make sure my best man understood that the speech he has do make <em>must</em> be in English, at least 3 minutes long and not too offensive to the groom.</li> + <li>Pay a huge, colossal heap of money for the whole thing. It’s going to cost us (and my dad) quite a bit, in the end. But it’s a once-in-a-lifetime experience, after all (getting totally trashed in a fancy hotel with all your family, including 2nd and 3rd grade cousins).</li> +</ul>
@@ -0,0 +1,28 @@
+----- +title: "Personal Log - March 2009" +content-type: article +timestamp: 1238385840 +tags: "personal_log|wedding|ruby" +----- +<p>Another month <em>without</em> the Internet at home. This is getting really annoying, and I decided to change provider, <strong>again</strong>, hoping that I’ll eventually get my broadband back, someday. Luckily I can still go online at work, but of course it’s not the same thing: my time on Twitter and Facebook is now basically limited to weekends only, when Roxanne and I go down to Tuscany to stay with her parents.</p> +<h3>Concatenative programming</h3> +<p>For some weird reason I became fond of the <a href="http://en.wikipedia.org/wiki/Concatenative_programming_language">Concatenative programming paradigm</a>. I started reading about <a href="http://www.latrobe.edu.au/philosophy/phimvt/joy/j00rat.html">Joy</a> and then started to work on a Ruby <span class="caps">DSL</span> able to do the similar things: <a href="/concatenative/">Concatenative</a>. Another pet project — as if I didn’t have enough things to do already!</p> +<p>Some people seemed pleased about it, especially on <a href="http://www.reddit.com/r/ruby/comments/887kn/concatenative_programming_in_ruby">Reddit</a> and <a href="http://dzone.com/links/concatenative_programming_in_ruby.html">dzone</a>. The downside of it is that it’s still fairly slow if compared to Ruby code (which is not exactly fast, either!), so if I had some spare time I should really try to implement it as a C extension, maybe.</p> +<h3>Learning new programming languages?</h3> +<p>Incidentally, I’m still fighting with myself on whether to learn another programming language or not. At this point, learning <a href="http://www.factorcode.org">Factor</a> could turn out to be more natural than months ago. However, I would only learn new programming languages as a hobby, as I don’t need to do so for profit: luckily I’m still a happy technical writer and I enjoy my job.</p> +<p>I admit, I’m still looking for <em>the</em> perfect programming language which is fun to learn (not easy: fun), elegant, minimalist, fast, general purpose and cross platform (meaning Linux, Windows, and Windows Mobile as well). Of course there is no such thing out there and there will never be, so I’m still evaluating the current alternatives. Possible candidates are Haskell, Factor, some dialect of Lisp or C. <br /> +Why C? Well, because I didn’t do much with it since my first year at uni, and it could still be useful to write Ruby extensions or implement something at a lower level. After so much time getting spoiled by high level languages, I kinda miss the low level stuff. Ahhh where are all the pointers gone?!</p> +<p>On the other hand, I’m getting married soon, and I should use these months to help my wife-to-be a bit more with wedding planning (see next section). After all, I can always learn a new programming language <em>after</em> getting married, right? …<em>right?!</em></p> +<h3>Wedding planning</h3> +<p>Roxanne and I are slowly getting more and more things done for the wedding. Every attempt I made to introduce her to <a href="http://en.wikipedia.org/wiki/Getting_things_done"><span class="caps">GTD</span></a> failed miserably so far, or better, it worked too well: she is now getting used to make lists and deciding on our <em>next actions</em> for the weekend. <br /> +This weekend we booked our flights to Ireland, looked at cottages and hotels for the three days after the wedding (not the honeymoon yet, we’ll have a late honeymoon in autumn), chose the waistcoats for me, my bestman and the ushers, and …booked the wedding car!<br /> +Now, this turned out to be good fun! Take a look at <a href="http://www.alleventslimos.com/Wedding/rolls_silver_cloud.html">Ruby</a> (yes, yes, I know… ), a Silver Cloud II 1961 Rolls Royce which will be ours for (less than) one day!</p> +<h3>Other tech-related tidbits</h3> +<ul> + <li>I successfully migrated to Ubuntu 9.0.4 Jaunty. Everything works, except the flash plugin for Firefox.</li> + <li>I’m now using TweetDeck as my main Twitter client on both Windows and Linux.</li> + <li>I’m thinking of buying (after the wedding) an Eee PC (no Macs: Ubuntu is sleek and powerful enough &emdash;and free, too).</li> + <li>We finally got an XBox 360 from eBay, this time it came through the post.</li> + <li>Roxanne is thinking of buying a big <span class="caps">LCD</span> TV to go with it &emdash; I’m politely (and sadly) postponing till after the wedding.</li> + <li>After listening a <span class="caps">FLOSS</span> Weekly episode featuring it, I think I’ll get myself an <a href="http://arduino.cc/">Arduino Board</a> for my birthday.</li> +</ul>
@@ -0,0 +1,73 @@
+----- +title: "Personal Log - May 2009" +content-type: article +timestamp: 1243744500 +tags: "personal_log|programming|wedding" +----- +<p>Yet another extremely busy month, as you can see from the total absence of blog posts and lack of tweets even. Things are getting pretty hectic at work now I guess: less people, more work, more responsibility, same money. They call it <cite>contingency</cite>; it’s the latest trend in the Western World, didn’t you know? I’m really not impressed. I can’t complain though I guess: I still enjoy my job very much and I know it could be much worse, so it’s just a matter of enduring until autumn — or so they say.</p> +<h3>Star Trek Premiere</h3> +<p>The month started with an event I’d been looking for for months: the <em>premiere</em> of Star Trek XI, aka “Star Trek”. It’s not that J.J. Abrahms couldn’t come up with a more original name (<em>Star Trek: Academy</em> used to be the working title, at one point), he simply wanted to tell the world that this movie was a new beginning, an elaborate way to start from scratch, to reboot what was more than once dubbed <em>a dying franchise</em>.</p> +<p>The movie was enjoyable – daring and a bit flamboyant – but still enjoyable nonetheless. I consider myself a Star Trek fan, and although it was <em>not</em> the usual Star Trek movie, I somehow liked Abrahms’ bold revisitation of Roddenberry’s universe. Take a bunch of unknowns (Chris Pine) or semi-unknowns (Zachary Quinto), then add some spicy British humor (Simon Pegg) and some old friend (Leonard Nimoy) and throw in an awful lot of <span class="caps">XXI</span> century special effects: what you get is not the usual, let’s-all-rock-because-we’re-hit traditional Star Trek, of course, it’s an <em>alternate</em> version of it.</p> +<p>That’s precisely what the movie is meant to be: what Star Trek would have look like if it had been created in the <span class="caps">XXI</span> century. The timeline feels disrupted since the very first minute (nevermind the end!), with a Jim Kirk stealing his stepfather’s car. Chris Pine is an <a href="http://memory-alpha.org/en/wiki/James_T._Kirk_(alternate_reality)">alternate</a> Kirk, quite different from the original one, but not that bad. Zachary Quinto, on the other hand, is a true revelation: he definitely is the new Spock, and he couldn’t have been cast better. So is Simon Pegg as Scotty, but unfortunately he’s not involved enough.</p> +<p>The baddies were a bit of a letdown. Nero is a bit too flat, and his ship is way too fancy, no matter where it comes from. Clearly some Hollywood junkie wanted a big, invulnerable dark ship to bring havoc in the galaxy, but that is <span class="caps">NOT</span> a Romulan ship, period.</p> +<p>At any rate, I enjoyed the movie and I’m looking forward to the second one, which I hope it will be followed by many others.</p> +<p>Unfortunately in Italy Star Trek is not worshiped in Italy as in it is the US, which is very unfortunate… Roxanne and I decided to play along and go to the cinema half-dressed-up, but our friends Elora and Michelle came with a full-blown Uhura uniform! The whole cinema kept staring at us. It was a bit freaky, but fun (check out the pics on Facebook — if you can, that is, I won’t post them here!).</p> +<h3>Wedding Planning</h3> +<p>Just over a month to my wedding. Scared? You bet. Stressed out? Indeed. Roxanne and I managed to get most of the things organized in the end, luckily. In particular, this month:</p> +<ul> + <li>We went to the British Consulate in Milan, and applied to get Roxanne’s legal documents.</li> + <li>I bought and had the 7 vest sets delivered to Roxanne’s brother’s (Caspar) place, in London.</li> + <li>I ended up buying 8 (buy three, get one free) morning suits from <a href="http://www.marksandspencer.com/gp/product/B000N65ELG?extid=pg_msf&247SEM">Marks and Spencer</a>, and had them delivered to Caspar’s place. He’ll be sending all the stuff over soon, hopefully.</li> + <li>Roxanne got the dresses for the maids of honor, and apparently we have to collect them on monday.</li> + <li>We sent all the invites we needed to send, but we’re still waiting for confirmations. It looks like it won’t be a big wedding, probably around to 60-70 people mark.</li> + <li>We ordered the <a href="http://weddings.about.com/cs/glossary/g/Bomboniere.htm">bomboniere</a>, they should come through soon.</li> + <li>Uncle John told us he had the music for the church and the reception sorted out.</li> + <li>We got the rings!</li> +</ul> +<p>We <em>still</em> have to organize a few things, namely:</p> +<ul> + <li>Write and print the prayer books</li> + <li>Book the flight for one of my ushers</li> + <li>Get some fancy gifts for the bestman and the rest of the people involved in the ceremony</li> + <li>Get married civilly here in Genoa</li> + <li>Organize a party at our place for the people who can’t come to the wedding</li> + <li>Do something else I can’t remember right now</li> +</ul> +<p>Yes, we are still busy as hell. I’m looking forward to it all, but I’ll definitely be much more relaxed when it’s all over!</p> +<h3>Home Internet: Epilogue?</h3> +<p>I got broadband at home, finally, after five months. Let’s do a quick recap:</p> +<ol> + <li>Last December I signed up to Libero Infostrada, and told them I wanted to disconnect from Telecom</li> + <li>In January I actually got disconnected from Telecom, got a new phone line contract, but the Internet was never activated.</li> + <li>I kept calling clueless operators on both ends pointlessly for 2-3 months.</li> + <li>I got pissed off with Libero, so in April I signed up to Tele2, telling them to disconnect me from Libero. They told me it would take at least 4 weeks.</li> + <li>Meanwhile, I signed up to 3g, and got an Internet <span class="caps">USB</span> key. At least I can go online, even if with a crappy <span class="caps">UMTS</span> connection.</li> + <li>After a month, Telecom rings me asking if I want to come back to them, promising I’ll have the Internet back on <em>soon enough</em>. Out of desperation, I accept and tell them to disconnect me from Tele2.</li> +</ol> +<p>Just when I was about to write a long post cursing Telecom and their perverted schemes to force their customers to stay with them, I receive a call from Libero and they tell me that the Internet is now activated! Unbelievable. Now all I have to do is send letters to all the other ISPs (they don’t do these things on the phone — clueless operators, remember?) telling them I don’t want anything to do with them anymore.</p> +<p>This is how broadband Internet works in Italy. Jealous?</p> +<h3>Nimrod</h3> +<p>Last month I decided I would stop programming until after the wedding and so I did (at least at home). Nevertheless, I still keep strive to keep up-to-date with everything concerning technology and in particular programming.</p> +<p>Out of all the tech news I came across throughout this month, the <a href="http://force7.de/nimrod/">Nimrod</a> programming language definitely struck me the most. A German guy came up with a new language — that’s not a big news, new programming languages are born every week, if not every day.</p> +<p>I believe Nimrod is different though. Basically, here’s why:</p> +<ul> + <li>It’s a mixture of Lisp, Python and C. It looks a bit like Python and it behaves like it (indentation matters), it allows the creation of macros, like in Lisp, and – this is what <em>really</em> matters to me – it compiles to plain C (which can then be compiled using <span class="caps">GCC</span> or whatever).</li> + <li>It is open source and can be used to produce commercially distributed executables.</li> + <li>The <a href="http://force7.de/nimrod/manual.html">manual</a> is simple to read (but with a few rough edges), and the language looks simple to learn.</li> + <li>The language is not yet complete, but it’s getting close to a 1.0 release. It works as advertised, nonetheless.</li> + <li>It offers a comprehensive standard library, and a <em>huge</em> amount of libraries and wrappers from everything from Windows <span class="caps">API</span> to <span class="caps">GTK</span> and Cairo.</li> + <li>It is cross platform, the Windows version even comes with a one-click installer.</li> + <li>It has garbage collection <em>and</em> it supports manual memory management, if you need it.</li> + <li>It’s statically typed, with type inference</li> + <li>It can generate standalone executables, with very little overhead (90KB for an hello world program).</li> +</ul> +<p>A language like this has been my secret dream for a long time. I thought no one would ever come up like this. I am really looking forward to give it a proper try someday. What’s wrong with it? For now, a few bits are missing (like native serialization), other than that someone pointed out the weird, rather extreme case insensitiveness of the language. Basically, case <em>and underscores</em> are ignored to <cite>allow programmers to use their own programming conventions</cite>. <br /> +Personally I don’t think this is that bad. After all, if you name your variables “a_thing” and “aThing” and you want them to mean different things, that’s bad programming style anyway. Nevertheless, as far as I know it’s the only language I know which offers such an extreme degree of flexibility in this sense.</p> +<h3>Learning new things</h3> +<p>This month I also found myself to be extremely eager to learn about new things. I’m still faithful to Ruby and all that, but I’m opening up to new possibility, for different things:</p> +<ul> + <li>I decided to start listening to slightly more technical podcasts, which are _not_related to tech news. In this way, I don’t have the pressure of having to listen to them on a regular basis. Other than <a href="http://twit.tv/FLOSS"><span class="caps">FLOSS</span> Weekly</a>, which is probably the best show about Open Source Software out there, I’m going to try out <a href="http://www.se-radio.net/">Software Engineering Radio</a> and <a href="http://thecommandline.net/">The Command Line</a>, both slightly more technical.</li> + <li>Because I decided to put my personal programming projects on hold, I’m having all sort of new ideas about even <em>more</em> projects I could start as soon as I can. No anticipations until after my wedding, of course.</li> + <li>I’m using Vim all the time now, both at work and at home. I feel confident with it, but I feel I still have a lot to learn, especially when it comes to marks, registers, etc. And I’m not yet ready to write an article about it — not the kind of article I’d like to write, anyway.</li> + <li>I’d like to learn more about Javascript and JQuery. I played around with it and <em>loved it</em>, but I really never used it for anything serious yet. This, however, may change in the future.</li> +</ul>
@@ -0,0 +1,7 @@
+----- +title: "Ma.gnolia - Social bookmarking made (extremely) easy" +content-type: article +timestamp: 1141476813 +tags: "internet|review|web20" +----- +Social Bookmarking[1] is not something <em>new</em> anymore; in fact, some people say they've seen too much of it already (imagine that!). One of the worst things - or best, depending on your point of view - of the whole Web 2.0[2] hype is that everything evolves at least ten times faster than it did in good ol' Web 1.0 (if you let me use the term): there are <em>many, many more</em> web pages created everyday by literally <em>anyone</em>, from web developers to total newcomers to the Web, to amateurs who just want to share their content because it's 'cool'.<br />However, this is not a rant. Web 2.0 is inevitably going to become more and more user friendly, and you can't do anything about it. Why? Because it pays. Who's most likely to click on the flashy banner on page X featuring product Y not knowing that by doing so company Z will get a penny: your grandmother who is just now learning how to use the Internet or your brother who's majoring in computer science?<br />However, this is not necessarily a bad thing. I strongly believe that the Internet becomes a much more user-friendly place everyday, and, to put it bluntly, the web developers and companies who understand this will become popular and make money.<br /><br />I remember when I first read about social bookmarking: people were screaming here and there that you <em>had to</em> share your bookmarks on the Net, and this 'delicious'[3] thing was getting more and more popular. Then it became 'delirious'[4], and it was <em>better</em>, because it also meant <em>free</em>...then the shadows[5] came...<br />I was never a big fan of the whole concept, I admit, but an old friend of mine from a community[6] turned up and asked me to try a new website he coded in <em>Rails</em>[7]: a new social bookmarking service, simple to use and free: ma.gnolia[8].<br />I immediately felt the impulse to reply (as this happened on IRC[9])<em>"i.dont.give.a.sh.**"</em>. I really didn't want to try <em>yet another</em> social bookmarking thing, as I had had enough of it even before I started to grasp the whole concept properly. Hoever, since the guy is a friend of mine whom I respect a lot, especially for his skills and knowledge, I decided to give ma.gnolia a try, and here's what happened.<br /><br /><strong>A website which <em>smells good</em></strong><br />One of the things any Web 2.0 business cannot afford to overlook is the design and user interface of their product. It <em>does</em> matter! If you want to please your customers, make something that looks good. This is not a new idea at all[10], and it has been shown to work in many situations.<br />The first impression I had about the ma.gnolia website was similar to the one I had when visiting CSSZenGarden[11] for the first time: <em>code is poetry</em>. I particularly like the latest trend in web design, which preaches simplicity, functionality, clean-looking pages, xHMTL+CSS instead of other assorted bloat, pastel colors, rounded corners, and so on, and there are no rounded corners in ma.gnolia.<br />The ma.gnolia website succeeds in making the visitor feel comfortable: it doesn't clutter the page with pointless images or weird widgets, but limits itself to only the essential items needed for usability - logo, banner, essential navigation (bookmarks, tags, people, groups, messages, profile, support and tools), content, a few well placed and unobtrusive images and icons, and a footer with the same usual boring-but-necessary links (copyright, about, terms of service, privacy policy, contact us), nothing more. What else do you need?<br />People might disagree, of course, and it's certainly not the answer for all tastes: there are some people who really can't stand 'plain' websites, and they think that the whole philosophy is pointless: <em>De gustibus non est disputandum</em> (There is no accounting for taste). We had the same concerns two thousand years ago and the Romans got it right. Even the Romans would have agreed that ma.gnolia is easy to use, too plain or not.<br /><br /><strong>Quick features overview</strong> <br />The obvious first step before starting to use ma.gnolia is signing up for a (free) account. Right? Wrong. For non-committers, or casual, let's-try-it-and-see-what-happens users there's a (free) trial account. You can start using fully functional ma.gnolia right away, but unless you register, nothing you do will be permanent. This seems to be a new Web 2.0 trend as well; before, you needed to make everything free to get people's attention, now it must be free <em>and</em> not require registration. Makes perfect sense.<br /><br /><em><span style="text-decoration:underline;">Adding bookmarks</span></em><br />Trial or not, you can start adding bookmarks right away through the form on the front page, which is simple enough. As long as you didn't discover bookmarks (or <em>favorites</em> for the browser-impaired) the day before yesterday, you probably already have your little collection of bookmarks meticulously catalogued in many different folders. Well, you can import them into ma.gnolia in a few very easy steps, and that, believe me, will save time. Some people may think I'm wasting my time stating the obvious here, but when I tried del.icio.us the import feature wasn't available, and this was enough to make me walk away.<br /> <br />'Casual user', 'non-web-savvy', 'non-geeks': ma.gnolia obviously targets these types of people. Everything on the site is well-documented and easy to use. Ma.gnolia's project manager said in a recent interview[13]:<br /><br /><fieldset><blockquote><br /><em>[...] The rest of us muddle along for about 30 seconds, and if we still don't get it and aren't enjoying the experience, we leave, never to return. To avoid that fate -- to make the complex simple -- our lead IA Tanya Rabourn put in the hours and the iterations needed to make Ma.gnolia comprehensible to the non- expert. </em><br /></blockquote></fieldset><br /><br />This makes sense to me: Web 2.0 seems to be more user friendly, simply because a lot of non-geeks are browsing the web everyday and clicking on adverts.<br /><br />Once you import all your bookmarks, you'll have an almost exact copy of your bookmarks collection, now available online! If you don't want to share them, because you believe in anti-social bookmarking or you just want to have a backup, you can import all your bookmarks as "private", and you can toggle the status by clicking <img src="http://ma.gnolia.com/images/icons/privacy-on.gif" alt="" /> or <img src="http://ma.gnolia.com/images/icons/privacy-off.gif" alt="" />, whenever you like: the magic of Ajax[14] will do the rest. <br />You can also rate your bookmarks from one to five stars, but <em>only</em> yours: ma.gnolia is not a pointless competition to be the one who links the most and best websites.<br /><br /><em>What if I want to delete a bookmark?</em> Quick hint: <img src="http://ma.gnolia.com/images/icons/delete.gif" alt="" /><br /><br /><em><span style="text-decoration:underline;">Yes, you can tag as much as you like</span></em><br />No, there are no folders. Forget it. For me it started with Gmail[15] and it was shocking enough: there are no folders, but you can tag your messages. This can be disorienting for some, but once you have overcome the initial trauma, you will realize that tags can be better than folders in some cases. At any rate, Web 2.0 uses tags everywhere, so you'd better get used to it. A tag is basically a virtual label you can put on something - here, a bookmark - to make it belong to a defined group. Tags normally don't have a hierarchy like folders, and each item can have more than one tag. Simple. <br /><br />Unfortunately, you can't directly tag (or rate) bookmarks that you add from the main page, but since you'll normally be using some sort of <em>bookmarklet</em> for Ma.gnolia, it doesn't really matter. Also, at the moment, once you create a tag you can't rename it, but this feature will be added soon.<br /><br /><br /><em><span style="text-decoration:underline;">Connecting people</span></em><br />If you tried some other social bookmarking services before and you really enjoy the philosophy behind it, you'll be pleased to know that Ma.gnolia is even more social than others. When you register an account you can optionally disclose your real name, age, and gender, add an avatar, a webpage and so on, and you can create your own profile, just like anywhere else on the Internet.<br />Furthermore, Ma.gnolia allows <em>groups</em>: you can create, join, and leave a group of bookmarkers who share the same interests as you. Why would you want to do this? The answer to that question is simple and self-evident: because what is enjoyed by one person will likely be enjoyed by other people who share the same interests. Once you are part of a group you can send a bookmark to that particular group (<img src="http://ma.gnolia.com/images/icons/send-to-group.gif" alt="" />), or at least that's that ideal; if you just want to send a particular address to only one person you can do so (<img src="http://ma.gnolia.com/images/icons/send-to-contact.gif" alt="" />), provided that that person is already in your contact list, and to do so there's a specific button (not icon this time) in everyone's profile. <br />You'll notice a <em>Messages</em> link in the main navigation panel, and that's exactly where the bookmark (and only the bookmark) will go once you send it to your friend. At the moment you <em>cannot</em> send a traditional message to someone, unless you send it along with a bookmark. This might change in the future, depending on user feedback, as well as the addition of some place to actually have some sort of discussion and comments - or so I've been told.<br />I'd be happy to see more community-specific functionalities being implemented, but there are some inevitable risks if Ma.gnolia decides to take this road. I'll let them decide, but for now, Ma.gnolia is more social than other services, but less social than, say, a discussion board.<br /><br /><em><span style="text-decoration:underline;">Pages, stats and search</span></em><br />Perhaps one of the coolest features Ma.gnolia offers is the possibility of saving pages online. When you bookmark a web page, Ma.gnolia attempts to save an exact copy of that page on its server, so that you can access that resource even if it is deleted at the source, like an improved personal version of the WayBack Machine!<br />Two things need to be said - and yes, they might be obvious for some people:<br />1) Pages which require some sort of authentication cannot be saved; and<br />2) Saved copies cannot be viewed by people other than yourself.<br /><br />Another feature is the ability to access basic statistics regarding bookmarks and people: most viewed or most recent bookmarks, hot groups, hot tags, as well as featured linkers, i.e., people who Ma.gnolia chooses to be displayed in some pages. They are generally well-known members or institutions that use the service.<br />However, the search function disappointed me a little bit. There is a very entertaining story on their About page[17] on how Social Bookmarking is supposed to help people to find things on the Web, and the last part in particular is pretty informative:<br /><fieldset><blockquote>[...]In Ma.gnolia, people can save website addresses (or the 'url') and "tag" them with that words they think people need to find them in a search. That way, when somebody else searches a term, the websites that show up are only the ones that are good enough for real people to want to find them.<br />With Ma.gnolia, that's really all the work you have to do. Organizing is a thing of the past, since tags do the organizing for you. Magnolia will even suggest when to give certain tags to bookmarks based on how you tag other bookmarks, to keep things consistent and up to date. And since it's a website, your Ma.gnolia bookmark collection can be reached by you and your friends from anywhere, any time.<br />If searching was the first day of the web, finding what you want must be the second. Ready to discover how Found is the New Search? Give Ma.gnolia a try, and see what we mean.</blockquote></fieldset><br /><br />It seemed logical, so I tried it myself. I searched for "ajax framework", and nine of the ten results on the first page led to this document:<br /><br />ASP.NET AJAX framework comparison [18]<br /><br />This is undoubtedly an interesting document, but not what I was looking for, and I certainly didn't expect almost the entire first page to consist of the same document. I asked for an explanation of this apparently odd behaviour, and it appears that the developer is aware of this, and explained me why this <em>must</em> happen: if someone saved <a href="http://www.zzine.org">www.zzine.org</a> as "zZine Magazine" and another person saved it as "Microsoft", someone searching for Microsoft - provided that we don't show duplicate links anymore, will find a link to zZine Magazine as one of the first results, and it would not be relevant. This is due to the fact that the system searches tags, titles, and descriptions even if the URL is the same, or known. Still, I'd try to limit the number of identical results, at least by grouping together entries which have the same URL and title, or something along these lines.<br /><br /><br /><em><span style="text-decoration:underline;">Tools to play with</span></em><br />There's a whole section of the site devoted to <em>Support and Tools</em>, to make the whole thing even more user friendly. Regarding the support part, even the greenest of visitors to a social bookmarking site will have no problems, as everything is explained in very simple terms, and full of examples and tutorials. This can be an annoying read if you already know how social bookmarking works and if you're used to similar services, so my advice is: <em>geeks stay out of this section</em> - it will save pointless rants.<br />The upside of this is that if I send someone who has <em>never</em> used something like this before, he'll like it and definitely start using it; if you try this with del.icio.us, you'll have one less non-geek friend.<br /><br />Regarding the tools subsection, I already mentioned the excellent bookmark importer (which worked perfectly, but should probably warn in case a page cannot be imported due to a 404 error). Ma.gnolia also offers:<br /><br />- a del.icio.us importer<br />- del.icio.us to ma.gnolia GreaseMonkey script - to keep your del.icio.us and ma.gnolia synchronized<br />- a link roll generator, to share your bookmarks on your blog or page<br />- a universal bookmark exporter<br /><br />Additionally, and most importantly, various bookmarklets[19] which allow you to instantly add a bookmark to your ma.gnolia collection with a single click, just like adding an ordinary bookmark. Not new, but useful and essential.<br /><br /><br /><strong>Conclusions</strong><br />Ma.gnolia is definitely the best social bookmarking solution currently available for non-web savvy users. If you don't like having to spend more than five minutes figuring out how social bookmarking works, Ma.gnolia will become your new home, and you'll get addicted to it. I don't consider myself a total geek, and I honestly started using Ma.gnolia because it's simple and does the job...<br /><br />...or perhaps the website is just so easy to use and nice to navigate that makes it harder to browse away!<br /><br /><br /><strong>Notes</strong> <br />[1]Social Bookmarking, Wkipedia: <a href="http://en.wikipedia.org/wiki/Social_bookmarking">http://en.wikipedia.org/wiki/Social_bookmarking</a><br />[2]Web 2.0, Wikipedia: <a href="http://en.wikipedia.org/wiki/Web_2.0">http://en.wikipedia.org/wiki/Web_2.0</a><br />[3]del.icio.us Social bookmarking: <a href="http://del.icio.us">http://del.icio.us</a><br />[4]de.lirio.us Social bookmarking: <a href="http://de.lirio.us">http://de.lirio.us</a><br />[5]Shadows Social Bookmarking: <a href="http://www.shadows.com">http://www.shadows.com</a><br />[6]CyberArmy Community: <a href="http://www.cyberarmy.net">http://www.cyberarmy.net</a><br />[7]Ruby on Rails framework: <a href="http://www.rubyonrails.org">http://www.rubyonrails.org</a><br />[8]Ma.gnolia Social Bookmarking: <a href="http://ma.gnolia.com">http://ma.gnolia.com</a><br />[9]Internet Relay Chat, wikipedia: <a href="http://en.wikipedia.org/wiki/Internet_Relay_Chat">http://en.wikipedia.org/wiki/Internet_Relay_Chat</a><br />[11]Windows XP Official Page: <a href="http://www.microsoft.com/windowsxp/default.mspx">http://www.microsoft.com/windowsxp/default.mspx</a><br />[12]CSSZenGarden: <a href="http://www.csszengarden.com/">http://www.csszengarden.com/</a><br />[13]Darren Barefoot's Blog, Sugar Ma.gnolia, Blossoms Blooming:<br /> <a href="http://www.darrenbarefoot.com/archives/2006/02/sugar-magnolia-blossoms-blooming.html">http://www.darrenbarefoot.com/archives/2006/02/sugar-magnolia-blossoms-blooming.html</a><br />[14]Ajax, Wikipedia: <a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29">http://en.wikipedia.org/wiki/Ajax_%28programming%29</a><br />[15]Google Mail: <a href="http://mail.google.com/">http://mail.google.com/</a><br />[16]Archive.org: <a href="http://www.archive.org/">http://www.archive.org/</a><br />[17]Ma.gnolia - About: <a href="http://ma.gnolia.com/about">http://ma.gnolia.com/about</a><br />[18] Daniel Zeiss, "ASP.NET AJAX framework comparison": <br />http://www.daniel-zeiss.de/AJAXComparison/Results.htm<br />[19]Ma.gnolia - Bookmarkles directory: <a href="http://ma.gnolia.com/support/bookmarklets">http://ma.gnolia.com/support/bookmarklets</a><br />
@@ -0,0 +1,107 @@
+----- +title: "Book Review: Making it Big in Software" +content-type: article +subtitle: "A handbook for (almost) guaranteed success in IT" +timestamp: 1285406501 +tags: "review|books|software" +pdf: true +----- + + <section class="section"> +<p>When this book came out, it was immediately followed by a lot of buzz. Positive reviews started popping up almost instantly, a lot of people blogged about it, it was surrended by a lot of… what’s that word again? Oh yes, <em>hype</em>. The title pissed me off really: who on Earth wants to title his book <a href="http://bit.ly/b08auR">Making it Big in Software</a>? Steve Jobs? Bill Gates?</p> +<p>No, just a guy named <a href="http://lightstone.x10hosting.com/">Sam Lightstone</a>. When I was offered a review copy, I was a bit reluctant to even bother: I thought it was one of those overly-hyped titles that claim to make you famous and successful, but all they do stating the obvious: work hard, be innovative, use your money wisely, etc. Well, this book is not one of them.</p> +<p>When I got my copy, I immediately read the author’s bio on the second-last page of the book: Sam Lightstone runs a site called <a href="http://makingitbigcareers.com/">Making it Big Careers</a> (again, I got instantly worried by this), <em>but</em> also happens to be one of the brightest minds in <span class="caps">IBM</span>, a <a href="http://en.wikipedia.org/wiki/IBM_Master_Inventor"><span class="caps">IBM</span> Master Inventor</a>, author and co-author of 30+ patents.</p> + +<p><img src="/img/pictures/books/making-it-big.jpg" class="right" /><br /> +The 17 exclusive interviews with software gurus, visionaries, minor and major deities of the IT world are definitely worth the 24.99$ this book costs <em>on their own</em>. This was one of the major selling points of the book itself (as the merry-looking pictures of Marissa Mayer, James Gosling, Steve Wozniak and John Schwarz on the cover suggest), but far from being the only one. The interviews are strategically placed throughout the book, as supporting material for the author’s advice: if you don’t believe him, you will believe those who <em>made it</em>. Anyhow, let’s say something about the book itself, shall we?</p> +<p><em>Making it Big with Software</em> is divided into three parts:</p> +<ul> + <li><strong>Part I: Fundamentals</strong> — all you need to know to get hired. Finish school, learn new things, and get a job in the Software industry.</li> + <li><strong>Part II: Leadership</strong> — tips on what to do to start climbing the corporate ladder, from junior to senior manager.</li> + <li><strong>Part <span class="caps">III</span>: Greatness</strong> — go beyond a successful career and become a luminary in IT, an example for future generations (and earn the big bucks).</li> +</ul> + + <section class="section"> +<header><h1 id="h_1" class="toc">Part I: Fundamentals</h1></header> +<p>After two introductory chapters, aimed at answering questions like “Why bother?” or “What do big shots in software do?”, the book starts analyzing what graduates get when they get out of school. I was really taken by the following paragraph, outlining the main difference between school and work:</p> +<blockquote> +<p>[…] although schools encourage students to do their own work, on penalty of expulsion or severe reprimand, professional work is saturated with the ubiquitous mantra of “teamwork.” In school, your success depends on individual effort, whereas professional life depends frequently on your ability to work in teams.</p> +</blockquote> +<p>So true. I never thought about it until I read it in this book. And this is a common causes of failure in the workplace: not being able to work in a team. It’s understandable: after years of striving to be the best, to do things for yourself, you’re suddenly asked to work for and with others.</p> +<p>The author gives junior graduates some useful tips to get a job in software development (or the software industry in general), with some useful tips on how to create a proper résumé, how to survive interviews, the usual. Hell I wish I had this book when I started!</p> +<p>Readers like me who already have a job should not dismiss this part. Maybe skim through the first few chapters, but towards the end there are some useful suggestions on how to build essential interpersonal skills and a nicely-written chapter about <em>career killers</em>.</p> + +</section> + + <section class="section"> +<header><h1 id="h_2" class="toc">Part II: Leadership</h1></header> +<p>The second part of the book opens with <strong>Chapter 9</strong>, Working the Org, which I found most amusing for the funny, but insightful, <em>Negotiating 101</em> section. Again, particular emphasis is put on non-technical skills, which are however essential for success. I particularly enjoyed reading this part of the book, because I could relate to it, being a Technical Leader myself.</p> +<p><strong>Chapter 12</strong> is a must-read, as the author himself says:</p> +<blockquote> +<p>If you read only one chapter in this book, this should probably be the one.</p> +</blockquote> +<p>If you never read anything about time management, you rhave to read this, as it helps you realize how much time you waste, why, and what you can do to improve the situation. I attended a course on the subject at work, a while ago, and I was shocked to read most of the stuff I learned at that course so tidily organized in no-nonsense prose in this chapter. Granted, it doesn’t substitute a time management course or practical experience with managing your priorities, but it is a good starting point.</p> +<p><strong>Chapter 14</strong> deals with <em>Zen and the critical art of balance [between work and personal life]</em>. The diagram on page 249 scared the hell out of me. Here it is, transposed in tabular form:</p> +<table> +<tr> + <th>Desired State</th> + <th>Current State</th> +</tr> +<tr> + <td>Work: 9 hours</td> + <td>Work: 13 hours</td> +</tr> +<tr> + <td>Sleep: 8 hours</td> + <td>Sleep: 6 hours</td> +</tr> +<tr> + <td>Travel: 1 hour</td> + <td>Travel: 2 hours</td> +</tr> +<tr> + <td>Family & Leisure: 4 hours</td> + <td>Family & Leisure: 1 hours</td> +</tr> +<tr> + <td>Chores & Hygiene: 2 hours</td> + <td>Chores & Hygiene: 2 hours</td> +</tr> +</table> +<p><em>Thirtheen hours</em>? Really? If <em>you</em> work 13-hour days then you have to read this chapter <em>and put it into practice</em> instantly or you’ll regret it. Luckily <em>I</em> manage to work most of the time for 8 hours a day (as everyone should, by law).</p> +<p>Another chapter I particularly enjoyed (and will re-read periodically) is <strong>Chapter16</strong>, which contains the best definition of leadership I ever came across:</p> +<blockquote> +<p>“Leadership is communicating to people their worth and potential so clearly that they come to see it in themselves.”</p> +</blockquote> + <p style="margin-left: 4em">– Stephen Covey</p> +<p>Again, this chapter teaches you the basics on leadership and management. If you didn’t take a course on the subject yet, it’s definitely worth a read.</p> + +</section> + + <section class="section"> +<header><h1 id="h_3" class="toc">Part III: Greatness</h1></header> +<p>I particularly enjoyed the first two chapters of this last part: <strong>Chapter 17</strong> and <strong>Chapter 18</strong> are about <em>innovation</em>, which I found to be the fastest and best way to get noticed in a company.</p> +<p>These two chapters won’t teach you to become a genius or an inventor, but they do provide help on the subject: why innovating is important, how to innovate and what to do once your idea gets a shape. The <em>Patenting</em>, <em>Publishing</em> and <em>Public Speaking</em> sections in chapter 8 are useful and practical, and deserve a good read. Again, the book does not go too in-depth, but the author provides just enough information to make you aware of the main issues.</p> +<p>The final chapters of the book felt a bit distant from my current work reality. Business talk, stock options, startups, acquisitions… They may interest some readers with an enterpreneurial mindset, but not me, at least not now. Nonetheless, business and politics pay a very important role in any IT job, so it’s wise to be aware of them.</p> + +</section> +<section class="section"> +<header><h1 id="h_4" class="toc">The Interviews</h1></header> +<p>The 17 interviews with software gurus, miracle workers and other extremely successful chaps make up for about the 20% of the book. They are carefully placed by the author in specific places of the book where they make the most sense (well, most of the time). Every person had to answer a similar set of questions, like “How did you get started in software”, “How do you stay on top of technology trends and innovation?” or “Technical leaders and executives are famous for being time-strapped. What strategies do you use to stay sane and use your time effectively?”.</p> +<p>Every interviews has at least one personal anecdotes. Some feel almost legendary, like the following:</p> +<blockquote> +<p>In 1967, at the age of 12, I dreamed of making a difference in the field of computer science. I went off to the local <span class="caps">IBM</span> office, literally knocked on their door, and said, “I will do anything for the summer-empty trash cans, you name it.” They said, “Go away kid.” But there was a sales guy who took pity upon me and threw me a nice Fortran IV [<span class="caps">IBM</span> Mathematical Formula Translating System] manual, with the expectation that I’d probably read it and get bored and never come back. But much to his surprise, I came back the following Monday and said, “Hey, this is cool! I just wrote a program and I want to run it.” The sales guy was so impressed that he found me an open computer to work on where I could teach myself how to keypunch, program, and debug for what I still recall as a delightful summer.</p> +</blockquote> + <p style="margin-left: 4em">– Grady Booch, <span class="caps">IBM</span> Fellow and Chief Scientist for Software Engineering, <span class="caps">IBM</span> Research</p> +<p>Every interview provides at least a good piece of advice for newcomers to the field. The last chapter of the book summarizes the interviews attempting to draw the profile of the successful IT professional: some founded their own companies, other climbed up the corporate ladder, a few contributed with key inventions (email, the Internet, …) that changed society as we know it. Different levels of greatness, and different ways to reach it: this is what this book is really about.</p> + +</section> +<section class="section"> +<header><h1 id="h_5" class="toc">Final Thoughts</h1></header> +<p><em>Making it Big in Software</em> is very well organized, in its three main parts. Unless you’re already the <span class="caps">CEO</span> of a multi-million-dollar company, you can learn something from this book, and even if you are, learning how other people <em>made it</em> is always beneficial.</p> +<p>It is not a specialized book, and as such it does not go in depth on anything specific. This is a good thing though, because after you read some of the chapters you feel motivated to learn more about this or that particular topic, skill or problem. In a way, it can be a good surrogate for more specialized books about résumé creation, job interviews, time management, leadership etc.</p> +<p>Overall, I recommend this book to everyone who wants to become successful in the software industry. Success can come to different degrees of course (or not come at all), but if you’re motivated enough and interested in your work, it is definitely within your grasp. <em>Be goal oriented</em>. It’s not enough, but it’s a good start.</p> + +</section> + +</section>
@@ -0,0 +1,104 @@
+----- +title: "Book Review: Mongrel Digital Shortcut" +content-type: article +timestamp: 1197686520 +tags: "review|books|rails|ruby" +----- +<p>If you ever considered about developing an deploying a Rails application in the last year or so, you must have heard of <a href="http://mongrel.rubyforge.org/index.html">Mongrel</a> before. If you didn’t, I’d recommend you learn more about it because up to now it proved to be one of the few essential ingredients for deploying <em>scalable</em> Rails applications.</p> +<p>Mongrel is a creation of <a href="http://www.zedshaw.com/">Zed Shaw</a> who started writing a replacement for FastCGI to use with Rails, and ended up creating a brand new, <span class="caps">HTTP</span> web server who turned out to be one of the best things the Rails community ever saw happening.</p> +<p>It was created to be simple to use and configure, nevertheless it <em>does</em> require some skill to set it up and tune it. Documentation is there, along with plenty of blog posts, but there’s also an interesting <a href="http://www.informit.com/store/product.aspx?isbn=0321483502&rl=1">book</a> from <a href="http://www.awprofessional.com/">Addison Wesley Professional</a> which is definetely worth a read.</p> +<p style="float:right;"><img src="/files/mongrel_shortcut.jpeg" alt="" /></p> +<p>“Mongrel: Serving, Deploying, and Extending Your Ruby Applications” – that’s the title of the book. A <em>Digital Shortcut</em>, 100-odd pages long, in <em>landscape</em> format to make it easier to read on a computer, straight to the point with no added sugar for just 15$ (<span class="caps">PDF</span> only). I must say Addison Wesley got it right: the book’s format is, as a matter of fact, <em>optimized for web developers</em>, especially those who can’t afford to read a 500-pages book covering everything about a subject just to find that one thing they don’t know about.<br /> +This <em>shortcut</em> can be seen, essentially, as an expanded cheatsheet which will teach you the basics about Mongrel and also give you plenty of advice on how to learn more about it.</p> +<p>Let’s have a closer look at it.</p> +<h3>Overview, Introduction & Getting Started</h3> +<p>The first three <del>chapters</del> sections (there are no chapters, just <em>sections</em>) of the book are meant to be a gentle introduction to Mongrel and its world. The main author is <a href="http://www.informit.com/authors/bio.aspx?a=0260912e-6ed8-4ed1-882a-c357e644feec">Matt Pelletier</a>, but Zed Show’s contributions are definitely one of the book’s best selling points. <br /> +Zed’s thoughts are scattered here and there in many <em>sidebars</em> throughout the book (there’s at least one in each section): you’ll see an odd-looking face (Zed’s self-caricature) with some text next to it; when you read it, you’ll notice that they are <em>actually</em> Zed’s own thoughts, straight from his mind, with no editorial filter whatsoever in-between. <br /> +Be warned: the text included within the <strong>Zed Sez</strong> sidebars is highly opinionated, that’s precisely what Zed <em>feels</em> to say about something, and he’ll just say it: just the plain, simple thoughts of an experienced programmer. As the author explains in <strong>Section 1</strong>: <em>“[…] You may not agree with everything he says, but you probably should.”</em></p> +<p><strong>Section 2</strong> is a general introduction about Mongrel. It explains <em>what</em> it is, <em>when</em> and <em>why</em> it was made, and <em>how</em> it works. There’s nothing new to learn if you already used Mongrel before, probably, but it’s definitely the first thing to show to someone who’s new to Mongrel and its world, and possibly a bit skeptical about it. <br /> +The last subsection <em>“What can Mongrel do for me”</em> is an attempt to <del>brainwash</del> persuade you to fully embrace Mongrel and its philosophy, whether you are a developer, a sysadmin or even a manager: assertions like <em>“Mongrel is pretty damned secure.”</em> and <em>“Mongrel’s license is capitalist-friendly.”</em> will definitaly make some of you (managers) happy.</p> +<p><strong>Section 3</strong> is slightly more juicy than the previous one, as it explains how to install and use Mongrel. Basically that’s what everyone who ever used it already knows, but it’s still necessary for the book’s consistency, after all. After reading this section, you’ll probably have your first Mongrel up and running and serving your little Rails application’s pages, and you’ll begin to wonder why the hell you need to keep reading this book now that everything seems to work already…</p> +<h3>Section 4: Configurations</h3> +<p>…aka “a truly useful Mongrel cheatsheet”. This section dives deep(er) into Mongrel’s configuration by explaining what each start parameter does in detail. The parameters are presented in tabular form in a very well-organized way. As you would expect from an high-quality cheatsheet.</p> +<p>Then the author will explore a few commonly used deployment scenarios, in particular:</p> +<ul> + <li><strong>Standalone</strong> – The simplest configuration possible, with just one Mongrel instance serving both static and dynamic pages.</li> + <li><strong>mongrel_cluster</strong> – How to use <em>“a pack of mongrels”</em> together to handle more traffic.</li> + <li><strong>Behind a static web server</strong> – The most common (and most scalable) option, used to serve static content faster using a front-end server and use Mongrel only to handle Ruby pages.</li> +</ul> +<p>Towards the end of the section, for the developer’s delight, the author will discuss two common, useful scenarios where Mongrel can be used:</p> +<ul> + <li><strong>Apache 2 + mod_proxy_balancer + mongrel_cluster</strong></li> + <li><strong>Nginx + mongrel_cluster</strong></li> +</ul> +<p>The difference here is that detailed instructions are provided on how to setup and configure each server, including example file sources. This can be particularly useful for the Nginx example, as most of the documentation for this fantastic, lightweight Mongrel fron-end is scattered around the web (or written in Russian in a <a href="http://sysoev.ru/nginx/">well known place</a>).</p> +<h3>Section 5: Production Deployment</h3> +<p>This section introduces one of the most important part of the life cycle of a Rails application: the deployment on a production server. The author is pretty honest about the whole subject:</p> +<blockquote> +<p><em>“You will not do this in a day. If you are expecting to code until 1 minute before your deadline and then simply point and click and have an instant server then you need to take some kind of<br /> +medication because you are violently hallucinating. You will need at least a week of 8 hours days to make sure your first deployment works and to have the time to do it right.”</em></p> +</blockquote> +<p>Sounds terribly true. Especially for larger projects demanding good performance under heavy traffic. Scared? Probably, if you never deployed a Rails application “properly” before, but at least the book comes to the rescue by providing an overview of what you need to perform a deployment and why it is such a complex and delicate process.</p> +<p>Not only this, but also a “Best Practices Rubric” is also provided for the developer’s own private enjoyement. It’s written as a list of questions like:</p> +<p><em>11. Do you have a shared location where you can document the deployment, such as a Wiki or <span class="caps">CMS</span>?</em><br /> +<em>12. Do you know how to use httperf or ab and know what the statistics mean?</em></p> +<p>After these 13 questions, the author provides the key to give a meaning to your answers:</p> +<blockquote> +<p><em>"For each question you answer with “NO”, add 10 hours to your time estimate for completion. This may seem unrealistic, since saying “NO” to everything means it’ll take 190 hours (about one<br /> +month), but this estimate is actually low according to most first deployment experiences."</em></p> +</blockquote> +<p>If you answered “NO” too many times to these questions, you may want to read on through the next subsection which states 17 “worst practices”: an invaluable read for beginners!</p> +<p>But after all this section is not only about stating the obvious (…right?): a full example scenario is describedand examined throughly to give you an idea of how a deployment <em>should</em> be made, using three different machines:</p> +<ul> + <li>One for Apache (as a front-end to Mongrel)</li> + <li>One for the Mongrel cluster and the Rails application</li> + <li>One for the database</li> +</ul> +<p>Maybe something you’ll never do if you just want to run your grandma’s site on Rails, but certainly something you may want to start looking at if your grandma becomes really popular and your small server gets grounded by several thousands of visitors per day.</p> +<p>The last part of the section will give you a brief introduction on monitoring your applications and on which tools you should be using, although it does not discuss the subject in detail at all, it’s just meant to point you to the right direction.</p> +<h3>Section 6: Extending Mongrel</h3> +<p>This section digs deeper into the software code internals and describes <em>how to teach new tricks to your Mongrel</em>, i.e. how to extend its functionality.</p> +<p>Before you begin, though, don’t forget what Zed himself has to say about Mongrel’s simplicity:</p> +<blockquote> +<p><em>“I’ve always had a different aesthetic sense when I write my software. I value simplicity and directness and try to write software that follows this approach. I jokingly call it the Shibumi School of Software Structure. All I do is apply this rule: When given two possible designs with equal end results, pick the simpler one. I then ruthlessly strip the solution down to its finest elements, but no more.”</em></p> +</blockquote> +<p>Mongrel’s architecture is not that complex, and this section is sufficient to get you started by providing an overview of the main classes involved (HttpServer, HttpRequest, HttpResponse, HttpHandler, URIClassifier), and how they work together.<br /> +Note that the book won’t describe anything about the APIs of these classes. but after all, the project’s <a href="http://mongrel.rubyforge.org/rdoc/files/README.html">RDoc documentation</a> should cover all the details you need.</p> +<p>The rest of the section focuses on how to extend Mongrel, by:</p> +<ul> + <li>Writing custom handlers in Ruby</li> + <li>Creating custom filters to perform security checks, clean up requests and preliminary file processing</li> + <li>Creating plugins and distributing them as rubygems</li> +</ul> +<p>Two working examples are also provided:</p> +<ul> + <li>An example handler to deflate content (if the browser supports deflate)</li> + <li>An example “duck” plugin, to make Mongrel quack like a duck when it’s started (not the most useful thing in the world, but serves the purpose)</li> +</ul> +<h3>Debugging, Performance & Security</h3> +<p>The last three sections deals with other important aspects concerning the deployment of your application, how to debug, how to improve performance and how to secure your application.</p> +<p><strong>Section 7</strong> introduces two debugging modes:</p> +<ul> + <li>Dash-Bee logging (-B)</li> + <li>USR1 logging (lighter)</li> +</ul> +<p>And also gives you an idea on what to look for when debugging an application. Nothing too detailed, granted, but enough to make sure you are pointed in the right direction.</p> +<p>Again, Zed’s wisdom and wit are remarkable:</p> +<blockquote> +<p><em>“These people’s problem is they suffer from Potpourri Turd Syndrome—a belief that their you-know-what don’t stink and smells like fine dew on freshly cut grass. Whenever there’s a bug, they go<br /> +running like kids in a candy store to other people’s code trying to find fault and just assume that it’s nothing they wrote.<br /> +[…]<br /> +When you run into a problem with your application, always assume it’s your fault first. Mongrel’s not perfect, but its code is minuscule compared to the size of Rails and most likely even your own appli-cation code. Mongrel also powers many large and medium deployments without any problems. If there’s an error, the evidence already says it’s in your code, so bite the bullet and start investigating it as if it’s your problem.”</em></p> +</blockquote> +<p>Similarly, <strong>Section 8</strong> is a short but useful overview on performance tips and tricks and deployment tuning. The most useful thing is probably the checklist of the “tuning process”, which illustrates the simple steps to take to tune your application.</p> +<p>Finally, <strong>Section 9</strong> addresses some common security concerns and clarifies how Mongrel deals with them. The answer is normally “Mongrel strictly does this” or “Mongrel doesn’t support this feature”. After all, you should have understood by now that Mongrel is an example of simplicity and that it deliberately does not aim to offer all the feature you’d expect by a server like Apache:</p> +<blockquote> +<p><em>"As you probably see, Mongrel say, “No” in many places where most Web servers say, “Yes, OK.” Sometimes this is because no one using Mongrel has needed it yet, sometimes it’s because there’s a<br /> +better, simpler way to accomplish the same goal. Mongrel is a different kind of Web server, and frequently you can solve your problem with a different solution."</em></p> +</blockquote> +<h3>Conclusion</h3> +<p>If Mongrel is opinionated software, this is definitely an opinionated book which fully embraces the project’s philosopy of simplicity above everything else. It’s an interesting read and it won’t bore you to death by deliberately skipping long and potentially tedious subjects and adding interesting insights instead (like the Zed Sez sidebars). Perhaps it is a bit too direct towards certain people, who may get even get offended (as planned) by some of the author’s assertions.</p> +<p>Despite being a 100-pages book, this <em>shortcut</em> covers pretty much everything you need to know <strong>about Mongrel</strong>. It will <em>not</em> teach you everything about deployment, security, performance tweaks and debugging though: as the authors often state throughout the book, a lot of (big) books are available on those subject, and it wouldn’t make sense to even attempt to discuss them in this shortcut.</p> +<p>Similarly, you won’t find complex examples either, but that’s acceptable because simple examples are often the only thing you need to grasp the basics of a concept or feature, and then use them as a “scaffold” for your own code.</p> +<p>Globally, the book is well balanced and <em>optimized</em> for its size: lightweight introductory sections at first, then the “real juice” in the middle, and a few overview sections on advanced topics towards the end. You can read it easily in a few hours, perhaps less, and whenever you need to look something up in a hurry it will be fairly easy to locate.</p> +<p>A good read, and a <em>must</em> for everyone who wants to learn more about Mongrel or Rails deployment.</p>
@@ -0,0 +1,7 @@
+----- +title: "Next generation DVDs" +content-type: article +timestamp: 1134215626 +tags: "review" +----- +Get a full comparative and analytical view of the HD-DVD and Blu-Ray disc formats. Why do we need them? Are they the perfect answer? Which one of them (if any...) will eventually take the throne? The answers to all these questions (and more) are inside! <br /><strong>The endless quest for space</strong><br />I remember when I showed a 3.5" floppy disk to my dad and he said, "That's so small, and it can store 1.44MB of information! That's over a million bytes!" He was used to working with big tapes of data that probably held much less, so I guess a floppy disk a big shock for him, at the time. <br /><br />When I got my first computer, it had a CD-ROM drive, and the CDs were supposed to hold 500MB of data. They eventually started supporting more, and got up to 900 in the end. Finally, we got DVDs, which are able to store up to 4.7GB of data, and once people noticed they could write another layer of data, the capacity doubled. <br /><br />Over the years, storage devices have evolve, and it seems now more than ever that mankind is on an endless "quest for space" - not with NASA (which nowadays is being much more careful before sending out a shuttle), trying to go where no one has gone before, but with a bunch of leading OEM companies, IT industries and Hollywood studios trying to write unbelievable amounts of information on a 12cm disk made out of plastic and other lesser known materials. <br /><br />Furthermore, despite me persuading my family to buy a "new" DVD player, the industry now claims that this relatively new commercial technology is going to be dead: apparently we'll soon have disks capable of holding 15-25 GB of data <em>per layer</em>, which will come to the aid of High Definition TeleVision (<a href="http://en.wikipedia.org/wiki/HDTV">HDTV</a>) which will deliver images at 1920x1080 pixels (versus 640x480 pixels on a normal DVD). This means that you'll be able to see - with your brand new HDTV-capable home theater - the imperfections of Jessica Alba's skin when she's dancing in <em><a href="http://www.imdb.com/title/tt0401792/">Sin City</a></em> if you look close enough, which brings up another question: "who wants this kind of technology?" - if nothing else, you'll have to pay a lot for it!<br /><br />As I previously stated, the evolution in storage media is unstoppable and yet necessary at the same time: having more storage space available proved to be a key factor for computer development.<br /><br /><br /><strong>A New War has Begun</strong><br />As the history of the computer industry has shown us, when the possibility of innovation arises, there's never just one group who tries it out. In the past, this led to the determination of two or more <em>de facto</em> standards by competitors promoting similar solutions. Perhaps the most familiar cases in the recent past were the introduction of the VHS and DVD formats. The first standard - for VHS - was adopted after a "war" against Sony's Betamax format - which was supposedly technologically superior - and the determining factor (or one of the main ones, anyway) was that Sony, "jealous" of its proprietary format, didn't want to license support for it to all the Original Equipment Manufactors (OEMs), while JVC and Matsushita [Panasonic]'s VHS licenses were basically given to anyone who even remotely suggested adopting the format. <br /><br />Sony was involved in another "war", for the successor of the CD format: they pushed for their Multimedia CD (MMCD), while Toshiba had their Super Density CD (SD). Perhaps because Sony was wary of another defeat, history didn't repeat itself this time, and the two manufacturers agreed to develop a hybrid format which is now widely known as the Digital Versatile (previously "Video") Disk, or more commonly, the DVD.<br /><br />However, once again, Sony is proposing its own format for next generation DVDs, called <a href="http://en.wikipedia.org/wiki/Blu-ray_Disc">Blu-Ray Disc</a> (BD) and once again, it's opposed by Toshiba (and others) with the High Density Digital Versatile Disk (HD-DVD). Both formats aim to increase space by using a blue laser for writing instead of the traditional red one used for DVDs. Other than that, the two formats are (for now) quite incompatible with each other as they use two different approaches to this same technology. Most of the following technical information is taken from an <a href="http://www.cdfreaks.com/article/186/">article</a> that appeared on CDfreaks.com.<br /><br /><br /><strong>The Contenders: HD-DVD</strong><br />Let's now examine the first of the two contenders to the "throne": High Density Digital Versatile Disk (<a href="http://www.hddvd.org/hddvd/">HD-DVD</a>). This format was the one that appeared first and is mainly promoted by Toshiba, along with NEC and Sanyo. The capacity is around 15GB per layer and it could be defined - for its structure mainly - as an application of newer laser technology to the older DVD format. <br /><br /><em><span style="text-decoration:underline;">Disk structure</span></em><br />As the diameter of the disk is the same and the information is coded roughly in the same way, the areas of improvement obviously reside in optimizing the physical space of the disk to hold more information. As with CDs and DVDs, data on a disk is written in tracks following a spiral path, from the center to the border of the support: in a CD, the gap between the two rows of the track (the <em>Track Pitch</em>) was 780nm; then it was reduced for DVDs (650nm), and again for HD-DVDs (400nm), so that we can store more information in the same space (because there are more rows). In order to achieve this, the laser must be more sensitive to be able to detect tracks correctly (that's why the laser is now blue; blue has a smaller wavelength), and the lens that gathers and concentrates the light needs to be changed. The measure that defines the shape (convexity) of the lens is called <em>Numerical Amplitude</em>: for CDs, it is 0.45, 0.6 for DVDs and 0.65 for HD-DVDs. These "tweaks" made more space available on the disk, and HD-DVDs, as previously stated, can store up to 15GB single layer and 30GB in double layer.<br /><br />Another characteristic that makes HD-DVDs similar to DVDs is the amount of the disk which is used for actual data storage and the amount which is used as "protective coating": HD-DVDs are 1.2mm thick, with 0.6mm used to store information and 0.6mm for protection.<br /><br /><br /><em><span style="text-decoration:underline;">Information processing and error correction</span></em><br />Data sent through a channel is subjected to "noise" of various kinds, and a similar phenomena occurs when writing information on a support, so various ways of preserving the data and correcting possible errors were developed. HD-DVD, in particular, uses a particular type of modulation called ETM (Eight to Twelve Modulation), which is once again similar to the technique used in CDs and DVDs: each byte of data is converted into twelve bits, and all bits set to 1 must satisfy an RLL(1,10) code (all '1' bits must be separated by at least 1 and at most 10 zeros).<br />Furthermore, disks must be able to bear scratches and other damage which could potentially corrupt bytes. Personally, I found that CDs are much more scratch-proof than DVDs, partly due to the fact that when you scratch a DVD (don't do it, just trust me!) more bytes get corrupted because of a higher data concentration: imagine what will happen now with 3-5x more data in the same space!<br />HD-DVD has the same correction techniques and data containers as the DVD format, the only exception being that the <a href="http://en.wikipedia.org/wiki/Error-correcting_code">ECC</a> blocks on HD-DVDs are twice as large, resulting in a longer correctable burst error length (7.1mm, where DVD is about 6mm).<br /><br /><br /><em><span style="text-decoration:underline;">Writing formats and copy protection</span></em><br />Even though HD-DVD has so far been quite similar to DVD (except for the obvious differences in laser, lens, and track pitch caused by the technology), there's an exception concerning the Rewritable format: it can hold more data than the ROM format (20GB instead of 15). This has been achieved by employing some technologies used in DVD-RAM. Despite the improvement, it might represent a problem for OEMs, because it makes HD-DVD RW handling totally different from the read-only format.<br /><br />For protection against piracy and illegal copying in general, HD-DVD format abandons the Content Scrambling System (CSS) used in DVDs (which has been shown to be unsuccessful) in favour of AACS (Advanced Access Content System), which uses a completely different key scheme.<br /> <br />AACS has been introduced for both HD-DVD and Blu Ray formats, and it involves the so-called "device keys": a unique key is assigned to each player's model, and before playing a protected disk, the player will have to retrieve its key (encoded in a three-way tree on the disk). Obviously, if a particular key is cracked, the manufacturers will be informed and will update the key in newer disks (which won't play in the cracked player at all). The technology is quite controversial at the moment, because "protection" is achieved at a high price: if someone cracks the key of your player, it simply won't play newer HD-DVDs, even if you weren't actually involved in any illegal activity. Solutions are currently being debated.<br /><br /><br /><br /><strong>The Contenders: Blu-Ray Disks</strong> <br /><br />Where Toshiba's HD-DVD adopted a somewhat conservative strategy, basing itself more or less on the DVD standard, Sony decided to use a much more experimental approach for its <a href="http://www.bluraydisc.com/">Blu-Ray</a> (BD) format, which appears to be more technologically advanced and offer even more space. <br />Blu-Ray disks can hold up to 25GB of data per layer, and this represents a great leap over HD-DVD's 15GB, but this has been achieved at the price of compatibility. <br /><br /><br /><em><span style="text-decoration:underline;">Disk structure</span></em><br />In order to reach the capacity it does BD uses the same type of blue/violet laser of HD-DVD but - as a necessity - the <em>Numeric Amplitude</em> of the lens has been increased to 0.85 (vs. 0.65 on HD-DVD), and the <em>Track Pitch</em> has been decreased to 320nm, so the additional space is explained by noting that the distance between the spiral rows is even smaller!<br /><br />Furthermore, BD can vary the length of the "pits" where data is written; by reducing it, more space on the disk can be obtained. Currently BD has 3 sub-formats, corresponding to 3 different capacities (23.3, 25 and 27GB), and associated to three different pit lengths (160, 149, and 138nm respectively) while HD-DVD has a fixed pit length of 204nm.<br /><br />Another innovation was introduced regarding the amount of disk used for data and for protection: disks are still 1.2mm thick, but 1.1mm are used for data storage and only 0.1mm for the protective coating!<br /><br />This was necessary in order to achieve the improved values for NA and Track Pitch, because the laser goes through only 0.1mm of protection before reading the data, meaning it can be more sensitive, but this also means that BDs are MUCH more vulnerable to scratches than HD-DVDs. Luckily, TDK immediately announced a new hyper-resistant protective coating which can offer improved protection from scratches and still be 0.1mm thick. <br /><br /><br /><em><span style="text-decoration:underline;">Information processing and error correction</span></em><br />BD decided to adopt its own modulation system (instead of using ETM like HD-DVD), called "17PP". The acronym basically means that each "1" must be separated by 1-7 "0" bits [RLL(1,7)] and also that the modulated sequence must have the same parity as the original data plus additional rules.<br />Error correction is then achieved using two codes similar to the <a href="http://en.wikipedia.org/wiki/Reed-Solomon_code">Reed-Solomon</a> code: LDC (Long Distance Code) and BIS (Burst Indication Subcode). Without going into too much detail, these two proprietary techniques can achieve almost the same result as HD-DVD's ECC, being able to correct corrupted data up to more than 7mm, which is quite remarkable considering the particularly delicate disk structure.<br /><br /><br />Blu-Ray also introduces two new modulation methods: the first one is called ?MSK-cos? (Minimum Shift Keying ? cosine variant), which is a special frequency modulation, and the second one is called ?HMW? (Harmonic Modulated Wave), which consists of replacing parts of the sine wave with sawtooths.<br /><br /><em><span style="text-decoration:underline;">Copy protection</span></em><br /><br />BD originally proposed its own control system, BD-CPS, for copy protection, but recently seems to have opted for AACS. This means that the same situation arises for both formats: they are both planning on implementing an advanced exchange key-based system to fight piracy.<br /><br />As another anti-piracy method, both formats also introduce a sort of "signature" called a <em>Volume Identifier</em> which will be very difficult to duplicate on a cloned disk.<br /><br /><br /><strong>The World Takes Sides</strong><br /><br />After discussing the two formats sufficiently in depth, it's now possible to itemize the pros and cons of each format:<br /><br /><em><span style="text-decoration:underline;">HD-DVD</span></em><br />Pros:<br /><ul><br /><li>Backward compatibility with CD/DVD will be available soon</li><br /><li>Reduced production costs, both for disks and players - cheaper to buy</li><br /><li>Improved durability</li><br /><li>Available relatively soon on the market</li><br /></ul><br />Cons:<br /><ul><br /><li>Incompatible with the competitor's format</li><br /><li>Less space than competitor's format</li><br /></ul><br /><br /><em><span style="text-decoration:underline;">Blu-Ray</span></em><br />Pros:<br /><ul><br /><li>Backward compatibility with CD/DVD will be available soon</li><br /><li>More space than competitor's format</li><br /><li>Technologically more advanced, longer life-span</li><br /><li>Higher recording speed</li><br /></ul><br />Cons:<br /><ul><br /><li>Incompatible with the competitor's format</li><br /><li>More expensive to produce and to buy</li><br /><li>More vulnerable to scratches </li>(the TDK solution notwithstanding)<br /><li>Still relatively experimental</li><br /></ul><br /><br />At this point, HD-DVD seems to be the "natural" successor to the DVD format: it inherits already-tested technologies and offers acceptable improvements regarding capacity. On the other hand, Blu-Ray is an innovative alternative, which, while more technologically advanced, needs to be tested more fully and is more expensive because of its innovation. Manufacturers will have to have separate machinery to produce Blu-Ray disks, while it appears that only some tweaks in existing structures will be necessary to support HD-DVD production on a mass scale at contained prices.<br /><br />Obviously, all the industries with interests in these new magnetic supports took sides with one or the other format:<br /><br /><em>HD-DVD:</em>Toshiba, Sanyo, NEC, Paramount Pictures, Universal Pictures, New Line Cinema, Warner Bros Studios, Time Warner, and, apparently, <em><strong>Microsoft</strong></em>.<br /><br /><em>Blu-Ray:</em> DELL, HP, Hitachi, LG-Electronics, Mitsubishi Electric, Panasonic, Pioneer, Philips, Samsung, Sharp, Sony, TDK, Thomson, 20th Century Fox, Walt Disney, Texas Instruments, Sun Microsystems, Electronic Arts, and Vivendi Universal Games.<br /><br />HD-DVD is supported mainly by film studios (Paramount and Universal) and multimedia companies (Time Warner). This is expected, since these industries advocate a product which is cheap, tested, and reliable. On the other hand, Blu-Ray is supported by IT industries that see a new technology for improved capacity and high recording speed. However, Walt Disney and 20th Century Fox seem to support this format, and they represent a sizable share of the family entertainment movie business.<br /><br />Microsoft recently seemed to <a href="http://news.softpedia.com/news/Microsoft-Sides-With-Toshiba-Against-Sony-s-Blu-ray-3798.shtml">support HD-DVD</a> technology. This was predictable, at least to a certain extent: Microsoft and Toshiba have always had a strong and productive working relationship, and Microsoft is probably trying to oppose Sony, who will probably use Blu-Ray for its upcoming PlayStation 3. Microsoft will probably opt for HD-DVD for the XBox, but it's too soon to say, especially since the big names of video games (like EA) seem to support Blu-Ray.<br /><br /><br /><br /><strong>The End of the War</strong><br />So a new <em>Standards War</em> has begun, and it's still too soon to know how it will end. Recently, the possibility of a hybrid standard has seemed more plausible, even if Toshiba's format arrives on the market much sooner than Blu-Ray. Toshiba itself advocates a <a href="http://www.pcpro.co.uk/news/73241/hddvd-bluray-marriage-back-on.html">single standard</a>, but seems also keen on <em>seeing how it goes</em> first, when both the two products are on the market. <br /><br />Actually there's <a href="http://news.softpedia.com/news/The-chronicles-of-a-futile-battle-Blu-Ray-vs-HD-DVD-631.shtml">someone</a> who predicts a different ending for this war: no one format will win, especially if the "conflict" lasts for too long. There's a chance that <a href="http://www.techtree.com/techtree/jsp/article.jsp?article_id=57500">Holographic Versatile Disks</a> (HVD) will eventually destroy both contenders by offering, on the same disk, 1TB of space at 1Gbps transfer speed! <br />As a matter of fact, Japan's <a href="http://www.optware.co.jp/english/what_040823.htm">Optware Corp.</a> might be the revelation that <em>saves the world</em>... <br />
@@ -0,0 +1,21 @@
+----- +title: "Barack Obama may visit Genoa (Italy) on October 12th" +content-type: article +timestamp: 1218420540 +tags: "politics" +----- +<p>Barack Obama may visit Columbus’ birthplace on October 12th 2008, and take part in the city’s celebration of the discovery of America, which is held in the city every year. As reported by <strong>Il Secolo <span class="caps">XIX</span></strong>, Genova’s local newspaper.</p> +<p>Although the invitation has not been officially accepted by the American Presidential Candidate, Genoa’s mayor <strong>Marta Vincenzi</strong> is working very hard to make it happen.</p> +<p><strong>Kerry Kennedy</strong> (Bob Kennedy’s daughter), is said to be in charge of liaising with Obama on the US side.</p> +<blockquote> +<p>“[…] Kerry Kennedy and her family – among the first and most unexpected of Obama’s supporters in his challange against Hillary Clinton – are said to be organising his visit to Genoa. It all started when Kerry came to the city at the beginning of July, for the Week of Human Rights initiative promoted by the city’s council. Kerry was introduced to Nando Dalla Chiesa’s ‘Columbus Day’ program plan by Vincenzi .<br /> +<br /><br /> +The proposal of inviting Obama to Christopher Columbus’ birthplace was immediate, and a significant move. <br /> +That could have important consequences, because Genoa has been involved in battles for civil rights in the last few months while also trying to restore its relationship with the United States, which have often been identified as a symbol of evil globalization since the G8 summit [held in the city in 2001].”<br /> +<br /><br /> +After Bush – the “king” president among the other 8 powers protected by the Red Zone [the restricted area of the city where the G8 summit was held] – a black presidential candidate who speaks of dialog and integration to the people of Genova (and obviously also tens of thousands of Italians), from De Ferrari Square [the city’s main square]. […]"</p> +</blockquote> +<p><em>– Translated from <a href="http://ilsecoloxix.ilsole24ore.com/genova/2008/08/11/1101689125257-indovina-chi-viene-genova.shtm">Indovina chi viene a Genova</a>, Giovanna Mari, August 11th 2008.</em></p> +<p>This could be a truly important occasion for Genova (and Italy) to re-establish dialog with the United States after the G8 summit (which cost the city a death and millions of Euro of damage caused by vandalism).<br /> +However, there is still no official confirmation that the event will take place at all, especially due to the upcoming Presidential Elections in the same period.</p> +<p>If he comes, I’ll definitely be there!</p>
@@ -0,0 +1,7 @@
+----- +title: "The Green Bar" +content-type: article +timestamp: 1134133434 +tags: "google|internet" +----- +Since 1998 SEO experts, webmasters, and even casual users spent ages trying to figure out the magic within that small green bar... but what's really behind Google's most famous invention?If you never experienced the sensation of looking at such a <em>green bar</em> before, then maybe you don't know what I'm referring to; I suggest downloading and installing the Google Toolbar[1]. This IE add-on (now available for the Firefox browser) was developed by Google years ago and still remains the most common way to view a website's <strong>PageRank</strong> through a simple bar with a variable length, according to a 10 point scale.<br /><br />I quietly mentioned the infamous word <em>PageRank</em> earlier, but what is it?<br />Some people think the idea of the word might come from a pun involving one of Google's co-founders (Larry <em>Page</em>), while others simply think it was the most obvious choice for a system which was supposed to <em>rank</em> pages according to importance and popularity. Anyhow, the only certain thing is that two (insert appropriate adjective here) students of Stanford University wrote a paper, in 1998, called "The Anatomy of a Large-Scale Hypertextual Web Search Engine"[3], in which, they discussed some interesting ideas for developing a large scale search engine using a particular algorithm they invented, which was supposed to help delivering the most relevant results for any search query provided by a user of the service.<br /><br />It is also certain that these two guys, Larry Page and Sergey Brin, eventually made an awful lot of money in the following years, developing and expanding an initially simple-looking website/web application with a funny name[4] and turning it into one of the biggest and most profitable businesses in the history of Computer Science. But let's now examine how PageRank works. <br /><br /><br /><strong>Deus ex machina</strong><br /> Google's co-founders kindly provided a short text summing up their innovative (and perhaps secret) technology[5]. In particular, one paragraph seems to offer a brief and simple explanation of how PageRank works:<br /><fieldset><blockquote><br /><em>PageRank relies on the uniquely democratic nature of the web by using its vast link structure as an indicator of an individual page's value. In essence, Google interprets a link from page A to page B as a vote, by page A, for page B. But, Google looks at more than the sheer volume of votes, or links a page receives; it also analyzes the page that casts the vote. Votes cast by pages that are themselves "important", weigh more heavily and help to make other pages "important."<br /></em></blockquote></fieldset><br /><br /> The first time I read this paragraph, I really experienced a feeling of admiration and ecstasy for these two enlightened minds who decided to bestow their priceless gift on the World Wide Web: a system which gives every page the due importance through a democratic system. Isn't it wonderful?<br /><br /> Of course there's (much) more to it than a short paragraph, and obviously this <em>explanation</em> wasn?t enough for those people (webmasters, SEO experts, kids creating their online family albums, etc.), who gradually became more and more interested in knowing further details about the system, hoping that it would have improved their placement in Google's search results. <br /><br /> Indeed, PageRank contributed to label some sites as <em>important</em> and gradually the number of ?PageRank 10? websites[6] began to rise, but generally remaining a prerogative of important names of the IT industry (Microsoft, Apple and obviously Google itself, for example). But how did such sites achieve that? How did the green toolbar grow so much for them and not as much for your grandma's personal webpage?<br /><br /> Soon enough, theories and speculations produced an approximation of the algorithm[7], which is generally thought to be an acceptable model to understand how the system works.<br /><br />Take the following equation:<br /><br /><em>PR(A) = (1-d) + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn))</em><br /><br />Where:<br /><br /><em>PR(A)</em> - The PageRank value of a certain page<br /><em>PR(Tn)</em> - The PageRank value of all pages linking to A<br /><em>C(Tn)</em> - The number of links present on page Tn<br /><em>d</em>(... - "damp factor", thought to be 0.85 <br /><br /> It now appears clear that the PageRank of page A depends on the number of pages linking to it. Furthermore, important factors taken into consideration are the <em>quality</em> of such pages (i.e. whether they have a high PageRank themselves or not) and the number of links present on each page, which causes the vote to be <em>divided</em> equally among them. <br /><br /> This is, in a nutshell, how PageRank is supposed to work. This is obviously a simple model, and there's actually a more mathematical/probabilistic approach[8] which goes beyond the scope of this article and requires some notions of probability theory.<br /><br /><br /><strong>Considerations and opinions</strong><br />With this model in mind, it's now possible to understand how (in a very simplified way) Google works: each month Google spiders search the web, and follow links from a page to another, keeping track of the "votes". PageRank is then calculated for every page and updated. This process normally takes a lot of time and, as a matter of fact, PageRank seems to be updated only every 4 months nowadays: these trimester updates normally causes a page to increase its rank by one (or more if you're lucky) level on the bar, or in some cases, lower it in the same way.<br /><br /> By taking a closer look at the formula proposed above, you'll notice that the maximum value of PR(A) is by no means equal to 10, as it depends on how many pages link to A and how many outbound links there are on such pages. As a matter of fact, people started speculating on the nature of the scale used for PageRank: on the toolbar it ranges from 0 to 10, while in reality a PageRank 10 (take Microsoft.com for example) should correspond to <em>some millions</em> in practice. <br /><br /> The most accredited theory is that the PageRank displayed on the green bar is the result of a sort of correspondence between real values and such 0 to 10 scale. Also, people suggested that such scale is in fact a base 5 (or 6) logarithmic scale. This would explain for example why it takes much longer to acquire PageRank 7 from PageRank 6 than acquiring PageRank 3 from PageRank 2.<br />For the non-mathematical minds, a <em>logarithmic scale</em> is a succession of numbers NOT incremented by "1" or a fixed quantity, but by an always-growing exponential factor: taking a base-10 logarithmic scale, values of 1,2,3 would correspond respectively to 10^1, 10^2 and 10^3 (10, 100, 1000).<br /><br /> For a long time Google seemed to use PageRank as an important factor for getting first places in search results, and it's still partly true: if you search for the keyword "Italy" you're likely to find some high PR sites as first results.<br /><br /> This resulted in all the possible forms of speculations: webmasters started asking money for publishing links on high PR pages, and similarly SEO experts started adopting various infamous tactics to obtain a high PageRank for their customers: this includes, for example, <em>link farms</em>[9].<br /><br />It's now clear that what is was believed to be a solution relying on the <em>uniquely democratic nature of the web</em> turned out to be a complete failure in that sense, because the very basis of the concept is wrong. Sad, but true, the WWW is by no means democratic at all. <br /><br /> Another complaint against PageRank was that new sites took ages to acquire <em>respectable</em> PageRank and therefore appear on the top of search results, no matter how wonderfully they were written. This is still partly true, as anyone can notice by searching Google, but the algorithm itself is continuously being tweaked both for stopping spammers and link farms, and also to favour those sites which provide relevant and appropriate content and are not up to some dodgy trick; I must admit that the situation is gradually getting better.<br /><br /><br /><strong>Case Study: ItalySimply.com and h3raLd.com</strong><br />I'm now going to discuss my own personal experience with PageRank applied to my two websites, ItalySimply[10] and h3raLd Labs[11]. While the second one is not currently advertised or promoted, because at the moment I don't have enough time for other web developing projects, with the first one I tried to follow a <em>SEO Strategy</em> trying to acquire PageRank and good placement in search engines.<br />You can see the result yourself: ItalySimply acquired PageRank 5 and h3raLd PageRank 4: not bad at all considering they are both two relatively new websites, ItalySimply being officially born in August 2004 and h3raLd Labs actually had some serious content from April 2005 on. <br /><br /> For ItalySimply, I even experienced a period of <em>PageRank 0</em> which lasted about 2 months: although according to Google all websites should have at least PR1, PR0 is used to penalize some <em>unusual</em> behaviour which in my case was a <em>302 - Temporarily Moved</em> redirect which was necessary to redirect users to a subfolder of the server. Later on I learned how this can be interpreted as a dodgy redirection by search engines[12], and why I was penalized by Google for this with a PR0. After noticing the mistakes, I immediately started a strategic link campaign; obtaining links from some good sites (also with high PR) related to mine, and PageRank for ItalySimply began to grow, from 0 to 3, then 4, and just recently 5.<br /><br /> At the same time, I re-designed h3raLd.com and noticed that it acquired PR1, because it was already listed in Google and didn't get any <em>vote</em> from other sites. I then decided to put a link to h3raLd Labs on <em>every</em> page of ItalySimply, which are now ranging from PR5 to PR2. <br /><br /> The result was an immediate growth of h3raLd.com in terms of PR, which reached an acceptable 4 without <em>any</em> link swapped, banner displayed on behalf of other sites, or anything as such. <br /><br /> The difference between the two sites though is much bigger than 1 point on PR, in terms of placement in search results: ItalySimply has some relatively interesting content and various pages, and it ranks good enough on MSN and Yahoo, and even Google, to an extent; h3raLd.com has just 4 pages and doesn't seem to appear at all in search engines, unless you search for something like "h3raLd". Again, this is a proof that nowadays PR doesn't mean immediate placement on the top of search results.<br /><br /><br /><strong>Final Considerations</strong><br /> Although PR is by no means the unique factor to determine search engine placements, it's still certainly important as a <em>co-factor</em>. As I said, it's still extremely difficult for a new page with low PageRank to place before a high-ranked one. Surely, if I decided to put something more interesting on h3raLd.com I would get better results than buying a new domain and creating a new site: old sites with high PR are still <em>naturally</em> inclined to rank better than new ones. Got that? Now, all you need to do is buy a really stupid domain name and create some pages for it, then think about it like a bottle of whisky; let it age for a while making it get some respectable rank: when you have a clever idea you'll have your ready-made place to promote it!<br /><br /><em>In Google we trust!</em><br /><br /><br /><br /><strong>Sources and related links:</strong><br /><br />[1] Google Toolbar, <a href="http://toolbar.google.com/">http://toolbar.google.com/</a><br />[2] Stanford University, <a href="http://www.stanford.edu/">http://www.stanford.edu/</a><br />[3] Lawrence Page and Sergey Brin, "The Anatomy of a Large-Scale Hypertextual Web Search Engine", Computer Science Department, Stanford University, <a href="http://www-db.stanford.edu/~backrub/google.html">http://www-db.stanford.edu/~backrub/google.html</a><br />[4] Google, <a href="http://www.google.com/">http://www.google.com/</a><br />[5] Google Technology, <a href="http://www.google.com/technology/">http://www.google.com/technology/</a><br />[6] List of PageRank 10 sites, <a href="http://www.searchenginegenie.com/pagerank-10-sites.htm">http://www.searchenginegenie.com/pagerank-10-sites.htm</a><br />[7] Ian Rogers, "The Google Pagerank Algorithm and How It Works", IPR Computing Ltd. <a href="http://www.iprcom.com/papers/pagerank/index.html">http://www.iprcom.com/papers/pagerank/index.html</a><br />[8] Pagerank, Wikipedia page, <a href="http://en.wikipedia.org/wiki/Pagerank">http://en.wikipedia.org/wiki/Pagerank</a> <br />[9] Link Farm, Wikipedia Page, <a href="http://en.wikipedia.org/wiki/Link_farm">http://en.wikipedia.org/wiki/Link_farm</a><br />[10] ItalySimply - Italy Real Estate Services and Relocation Help, <a href="http://www.italysimply.com/">http://www.italysimply.com/</a><br />[11] h3raLd Labs - Freelance Web Development, <a href="http://www.h3rald.com/">http://www.h3rald.com/</a><br />[12] "The Rundown on 301 and 302 redirects", September 10th, 2004, <br /><a href="http://www.rankforsales.com/seo-articles/301-and-302-domain-name-redirects.html">http://www.rankforsales.com/seo-articles/301-and-302-domain-name-redirects.html</a><br />
@@ -0,0 +1,7 @@
+----- +title: "The Perfect Browser" +content-type: article +timestamp: 1134135061 +tags: "" +----- +So you finally decided to say goodbye to Internet Explorer, but now you feel lost in a multitude of browsers that all claim to be faster, more customizable, safer, or simply better than IE. Are they telling the truth? If so, which one is the perfect browser?<strong>Point of view, clarifications and scope of this article</strong><br /><br />So you're reading this article hoping to find out which is the <em>best</em> browser ever made? Well, you're wasting your time. There's no such thing as <em>The Perfect Browser</em>, despite the various attempts made by Mozilla Foundation, Opera, Microsoft and others. After trying out nearly all of the major browsers currently available, I came to this conclusion: the perfect browser is a relative term, dependent on the particular person you ask, if it exists at all. Contrary to popular belief, I myself am not a 100% Firefox freak, and I do not consider myself biased to the point of going around shouting that Firefox is the <em>"best browser ever made."</em> Granted, I do do that sometimes, but let's put my personal bias into some sort of perspective:<br /><br />Mozilla Firefox represents the most remarkable effort to create a <em>perfect browser</em>, but in some cases, and for some particular tasks, it may not be considered optimal by <em>some people</em>.<br /><br />Having said this, I hope I can convince you that I'm not <em>that</em> biased toward Mozilla's leading product, even if, as a matter of fact, nearly all the programs mentioned in this article are based on the Mozilla ('Gecko'? No, not quite... [1]) engine or a derivative. <br /><br />Originally, I was going to write a comparative review of Opera and Firefox, but in the end, I chose to broaden the scope a bit to include other products as well. There are already many articles and blog posts which have compared the two, either favoring Opera [2] or Firefox [3]. I also decided not to review browsers for platforms other than Windows, so there won't be any mention of Konqueror, Galeon, Safari, Camino, etc., which, although they are all interesting alternatives, go beyond the purpose of this article, which is to offer <em>Windows users</em> a small selection of alternative browsers.<br /><br /><br /><strong>Alternative Browsers</strong><br /><br />There are literally dozens of <em>alternative</em> browsers around. There are lists available online, and perhaps the most famous one is on Evolt.org [4], which can be considered comprehensive and accurate. Various statistics are available for objective comparisons of all the major browsers, for regarding for example speed [5] and overall performance and functionality [6], but even if such analyses are accurate, they are often not enough to fully evaluate a browser.<br /><br />In the following sections, we'll examine the following four free browsers, which are considered to be the most obvious alternatives to Internet Explorer. <br /><br />- Firefox<br />- Opera <br />- K-meleon<br />- Netscape<br /><br />I deliberately chose not to spend time on Slim Browser [7], Maxthon [8] (previously known as MyIE), or AvantBrowser [9], which are basically extensions built on top of Internet Explorer to add functionality to it. I also left out Mozilla's SeaMonkey [10], partly because of its alpha status, and partly because it is being marketed as an Internet Suite rather than just a web browser.<br /><br /><br /><strong>Why IE is 'bad'</strong><br /><br />'IE is crap', 'you MUST NOT use Internet Explorer', 'Internet Explorer is for n00bs'... how many times have you heard or read this? Some people tend to degrade Internet Explorer all the time, and the funny thing is, if one were to ask 'Why so?', approximately 40% would be unable to give a reply any more concrete than 'because Firefox is simply better' or 'because Opera owns!' or '[insert browser name here] simply can't be compared to IE!'.<br /><br />Now, all this may be true to a certain extent, but it certainly will not convince a person to switch browsers, and may even have the opposite effect: people will keep using IE no matter what! This is bad for the alternative browser market in general. It still looks like IE is used by 90% of people on the Internet and this will not change simply by telling all those people that they are "dumb" for using IE. There are sites whose only purpose is to make people abandon IE [11], but they discuss objective fact instead of opinionated propaganda. <br /><br />Personally, I decided not to use IE anymore because:<br /><br />- It's slow on my computer (which is old, as some of you may know)<br />- It's less secure than other browsers, and more vulnerable to malicious software and attacks, simply because it's used by the most people - that makes the BEST option for those who actually enjoy exploiting vulnerabilities, because it's not frequently patched [12].<br />- It's not very customizable<br />- It doesn't have (or support) additional features<br />- It deliberately breaks web standards or creates its own, which makes things difficult for web developers<br />- It's normally behind the supported technologies<br />- I hate the idea of using a proprietary browser imposed by Microsoft<br /><br />I could discuss each one of these reasons in more detail, but that would be an article in and of itself.<br /><br /><br /><strong>Firefox</strong><br /><br />The famous and multi-awarded Firefox [13] browser is now approaching the 1.5 release, and it's constantly improving both in security and features. Firefox quickly became Mozilla's leading product, ahead of the Mozilla Suite (which includes a browser, HTML editor, email client and address book), which is now being rebranded as <em>SeaMonkey</em> [10].<br /><br />On the other hand, Firefox is simply a web browser, and doesn't offer an email client or html editor anymore, which was obviously a choice made to improve the performance of the application and engine, which was normally quite bulky, especially on old hardware. This was a wise decision, and Mozilla/Netscape enthusiasts quite liked the idea of having a lightweight browser rather than a slow-performing suite of applications. However, someone who uses both Firefox and ThunderBird (Mozilla's standalone email client) will end up using nearly twice the amount of memory used by SeaMonkey alone: this is because you now have two separate applications, so you have to load the rendering engine <em>twice</em>.<br /><br />With Firefox, the Mozilla Foundation aimed to create a browser which would satisfy web developers by supporting the latest web standards and technologies, while at the same time offering new and interesting functionalities to end users.<br /><br />The Fox is not ideal for all types of users, but a constantly growing community of enthusiasts [14] is trying literally every way possible to promote it by targeting virtually all kind of audiences. <br /><br />In addition, its design makes it mostly secure; even if a few bugs slip by, they are not design flaws, merely implementation issues. When a bug is found, the Firefox development community works quickly to fix it, and usually has an excellent track record regarding that. However, the most important aspect of Firefox's security (on Windows, that is), is that it is not integrated into the system like IE is. Remote attacks on a Windows PC are mostly executed through IE, and the insecure design causes it to have unfixed critical bugs after five years of non-development, because Microsoft tends to shove bugs under the carpet whenever possible; half year, one year or even older unfixed bugs are not unheard of.<br /><br />To make it more readily apparent, statistics [12] [15] say that the maximum time IE is <em>not</em> in danger from to an unpatched vulnerability is 7 days, while for Firefox, it is well over 200.<br /><br />Another of Firefox's strong points is the ability to add various <em>extensions</em> and <em>themes</em> for all kind of necessities: improving web searches, getting localized weather forecasts, playing music, blocking adverts, tweaking webpages, composing webpages, etc.<br />Firefox is <em>extremely</em> customizable, and extensions don't affect the overall browser performance, as the actual overhead is minimal - this has been tested on a Pentium 2, so you can believe me.<br /><br />This is all very well and good, but the ability to customize a browser is not considered a good thing by all. This is because it tends to become a necessity - if Firefox didn't have extensions, it would still be better than IE for security and some features, but not amazingly so. Opera users found that Firefox without extensions could not match up to the features in Opera.<br /><br />After asking some IE users, it seems that Firefox can appear too <em>geeky</em> for the average user who only wants to surf the Net and doesn't really care about web standards and browser customization. After all, a lot of people may decide that they don't want to spend their time tweaking and personalizing a program to make it fit their needs, as they find it annoying.<br /><br />Finally, a slightly unpleasant thing about extensions is that almost every time a major update to the browser comes out, some of the installed extensions become unusable until their developers update them. In order to solve this problem, Mozilla Development Team is releasing public alphas and betas of every major milestone, to allow third party extension developers update their extensions in time for the stable release. As a consequence, to avoid trouble with extensions, I suggest non-developers stick with the stable releases and avoid updating to alpha or beta versions.<br /><br />Anyhow, all those people who don't like having to play around with extensions should just use Opera.<br /><br /><br /><strong>Opera</strong><br /><br />A few years ago I came across Opera's site [16], and I downloaded their <em>free</em> browser to try it out. At the time, Firefox wasn't a big thing, and the Mozilla/Netscape suites were too bulky for my liking, so I was looking for something lightweight and fast. That's the reason why the Opera team has always used the slogan <em>'the fastest browser on Earth'</em> to describe their product, and they seem to be right[5]. <br /><br />I actually didn't like it at first, because - at the time - it didn't offer anything better than IE <em>and</em> the company was more or less silently asking people to <em>pay</em> them to get rid of the annoying ads the browser displayed on the interface. Browsers are nothing but software, however, and I think the reason why they are (nearly) all free is because IE comes free with every Windows installation. <br /><br />Finally, Opera agreed with that same philosophy: while celebrating their 10 years of existence, Opera Software ASA decided initially to give away license codes to get rid of the ads, and then to finally stop annoying their users with ad banners and cut their licensing fee altogether [17]. Obviously, at that point, I was really tempted to give Opera another chance.<br /><br />I was impressed, indeed. Opera is actually a nice piece of software. It's really fast in rendering pages, it displays them correctly, respects web standards (they improved this quite a bit over the years), and it's fast even when pressing the Back and Forward buttons. Its interface is probably the best and cleanest ever made; it's easy to use even for novices even if some things (like keyboard shortcuts) are different.<br /><br />Speaking of features, it offers: <br /><br />- Tabbed browsing and integrated search like Firefox (and IE7)<br />- A truly remarkable technology able to make <em>any webpage</em> fit a window by zooming images in and out automatically<br />- A complete and fully working mail client<br />- An address book<br />- The ability to save browsing sessions<br />- Easily re-open closed tabs<br />- Skins<br />- A <em>magic wand</em> to fill in forms and logins automatically<br />- A built-in scratchpad/notepad<br />- Voice integration (yes, you can even speak to your browser now, imagine that!)<br />- SVG support - not that it really matters for now, but it's a cool thing to say nowadays<br /><br />All of this is included in an application which is - to my eyes - more lightweight than Firefox. But it's not perfect yet. Why? The reason is simple. It allows a certain degree of customization, but doesn't have 'extensions'. One thing is true though, as someone pointed out [18]: in most cases, for 'average use', Opera doesn't need extensions, because it already offers quite a lot of functionality that doesn't need to be extended. <br /><br />It also happens that the features listed above are the most commonly requested by the majority of users, and that was, in my opinion, a clever marketing move. <br /><br />There are still two things about Opera that put me off from using it, however. One is the lack of a built in <em>"I'm feeling lucky"</em> feature in the taskbar - even though there is a workaround [19]. The other is more serious, and it concerns compatibility. Even though the people at Opera Software are struggling more than ever to make it compatible with every site and technology - full Gmail support has recently been added - Opera cannot render some sites correctly. The most blatant example is Writely.com [20], which is a site offering a free ajax-based online word processor. It seems that Opera doesn't like Ajax too much for now.<br /><br /><br /><strong>K-meleon</strong><br /><br />Now let's talk about a piece of software which appears to have been forgotten by the majority of people in the world: K-meleon [21], a Windows-only, Mozilla-based browser. It is a prime example of how good software can be ignored by the masses, for three main reasons:<br /><br />- It wasn't conceived with the <em>average user</em> in mind<br />- There's another browser using the same technology which is considered to be better<br />- It apparently doesn't offer anything new or stimulating<br /><br />I would define it as a browser for true geeks. To unlock its secrets you need to play around with configuration files, hundreds of hidden settings, macros, and menus. However, it can be very gratifying for people who enjoy this sort of thing. There's just one little problem with it: people who enjoy tweaking an application as much as K-meleon needs to be tweaked normally prefer a more customizable operating system altogether, but the browser is strictly <em>Windows only</em>.<br /><br />I like it even if I don't have the time to play around with it as much as I would like to, and I think it is useful for some specific tasks. In particular, I found myself using it to upload pictures when updating one of my sites, and similarly repetitive jobs where all you need is a browser able to render a page quickly without using too much memory or CPU cycles. <br />K-meleon is built for Windows, and is therefore optimized for it, perhaps even more so than Firefox, and it's arguably nearly as fast as Opera. As far as I'm concerned, it's more lightweight than Opera and this makes it ideal as a <em>secondary browser</em> to run together with Firefox or Opera. Why would you want to do that? Well, suppose you have to check two different GMail accounts and reply to emails here and there: using a secondary browser to keep you logged in to another Google account is better than having to login and logout repeatedly.<br /><br />Something amusing (or maybe not) about K-meleon: it seems to have no security advisories [22] on Secunia as only one was submitted and quickly patched in 2004, and that was all. The impression is that the browser is just not very popular.<br /><br /><br /><strong>Netscape</strong><br /><br />Netscape [23] is perhaps one of the oldest browsers that is still alive. It used to be a full-on web suite (basically a rebrand of the Mozilla Suite), and thus featured a web browser (Netscape Navigator), a WYSIWYG HTML editor, a mail client, and an address book. It was never lightweight (due to all the applications bundled together), but it was a true all-in-one Internet suite, at the time.<br /><br />Nowadays people prefer having a separate email client or check their email online. They rarely need an address book, since email addresses and contact details are normally stored automatically by the mail client/web application. The average user probably won't use the HTML editor, and the web developer will choose a more professional/optimal solution than Netscape/Mozilla Composer.<br /><br />Furthermore, Mozilla <em>suddenly</em> started changing its roadmap, heavily marketing a standalone browser rather than an application suite, so people at Netscape thought it was the right time to do the same. Netscape now offers only a browser. It is based on Firefox, but has a lot of additional features. <br /><br />When the Netscape browser was launched in May 2005, it was supposed to represent a <em>new standard</em> for online security, but various vulnerabilities[24] were found just after release, which caused it to gain the totally opposite reputation. Everything was fixed quickly enough, but people weren't impressed by that (myself included). Furthermore, another incident occurred a few days later. Microsoft advised its customers to uninstall Netscape 8 from their system [25], because after installing it on Windows, Internet Explorer inexplicably became unable to render XML pages, displaying a blank page instead!<br /><br />Apart from these odd events - which indeed half ruined Netscape's reputation - the application itself isn't that bad; it's based on Firefox, after all.<br /><br />Differences from Mozilla's browser are obvious immediately after installation: Netscape opted for a sort of online install, in the sense that the installer, which is downloadable from the official site, starts the download of the actual components and then installs them. In the meantime, slides specially tailored for end users appear on the screen, introducing the main browser features. These slides provide entertaining and informative viewing for the user. <br /><br />The browser is shipped with two default themes, and the interface itself is rearranged: search bar on the left, four weird buttons on the right, and a magic <em>multibar</em> underneath. The multibar addresses a common issue with Firefox and IE - if you keep installing extensions and toolbars, the window used to display the page eventually becomes smaller. This new feature allows users to choose up to 10 different bars which can be selected in rotation with a single click.<br /><br />The real innovation, however, is the Security Center. It seems that these two magic words are now heavily used everywhere, as if they have some mystical power to reassure users and make them feel protected. In reality, the security center only tells you whether or not you can trust a site, based on Netscape's list of trusted sites or your preferences, and it automatically adjusts the browser security settings accordingly.<br /><br /><em>But isn't Netscape a Firefox based browser?</em><br /><br />Yes and no. Netscape can render using either Mozilla's engine or Internet Explorer's! Good or bad? Well, probably good in some cases, but rather annoying sometimes as it's <em>too smart</em>: I tried visiting Microsoft.com and without doing anything the rendering engine switched to IE automatically! It basically tries to guess which browser is better to render certain pages, and this can be problematic, especially if it renders as IE any page which uses ActiveX technology. This short term gain - <em>total</em> compatibility - is achieved by surrendering to IE flaws and maybe even giving no incentive for developers to abandon an IE-oriented web development: <em>'If Netscape can use an IE engine, why should I code using web standards?'</em> <br /><br />Fortunately, despite the effort made by the developers and marketing experts at Netscape Corp., the new browser is not convincing enough. It is also clearly heavier on resources than Firefox; while I was just surfing it started claiming more than 70MB of RAM, while Firefox normally uses half the amount. Personally, I think it's an interesting attempt to create a <em>perfect</em> browser, and it enriches Firefox with some new features which either are normally not available or require extensions, but it's not for me.<br /><br /><br /><strong>Summing up</strong><br /><br />As I said at the beginning (ruining all the suspense), there's no perfect browser; there's nothing universally accepted by everyone because everyone does different things. Personally, I'd advise using Firefox for general use, because it offers excellent compatibility, security and features. <br /><br />On the other hand, if you don't like extensions and you just need something to browse the Internet quickly, without the hassle of having to download additional components, go for Opera, although there are still some compatibility issues with it that need to be fixed. <br /><br />For Windows-based geeks, I'd recommend K-meleon: it's fast, simple, effective, and gives you plenty of things to play with to tweak almost every part of the browser. The project is not dead; a community of people are using it and providing patches, even if the leading developer is not able to do so.<br /><br />Netscape still needs some work, but it could be useful for quickly viewing a site on Firefox and IE, for example. It's also a little more user-friendly than Firefox. Those who are already accustomed to Firefox, however, are more likely to stick with it.<br /><br />Again, depending on what you do, what your needs are, and even your mood, one browser can be better than others. Personally, I use a variety of browsers: Firefox mostly, but K-meleon and Opera as well, and I like this combination as my <em>perfect browser</em>. What about you? <br /><br /><br /><strong>Credits</strong><br />Thanks to comet for providing appropriate thoughts and opinions regarding the browsers' security. <br /><br /><strong>Notes and Resources</strong><br /><small><br />[1] Clarification about the 'Gecko' engine: <a href="http://www.mozilla.org/newlayout/gecko.html">http://www.mozilla.org/newlayout/gecko.html</a><br />[2] 'One Week with Firefox, its Extensions and Opera', OsNews.com, by Mart'n Marconcini <a href="http://www.osnews.com/story.php?news_id=7562">http://www.osnews.com/story.php?news_id=7562</a><br />[3] 'Firefox 1.5 vs Opera 8.5', SonSpring Journal, 09/22/2005 - <a href="http://sonspring.com/journal/firefox-15-vs-opera-85">http://sonspring.com/journal/firefox-15-vs-opera-85</a><br />[4] Evolt.com, Browser list - <a href="http://browsers.evolt.org/">http://browsers.evolt.org/</a><br />[5] HowToCreate.com - Browser Speed Analysis -<a href="http://www.howtocreate.co.uk/browserSpeed.html#winspeed">http://www.howtocreate.co.uk/browserSpeed.html#winspeed</a><br />[6] 'Comparison of web browsers', Wikipedia page - <a href="http://en.wikipedia.org/wiki/Comparison_of_web_browsers">http://en.wikipedia.org/wiki/Comparison_of_web_browsers</a><br />[7] Slim Browser, Home Page - <a href="http://www.flashpeak.com/sbrowser/">http://www.flashpeak.com/sbrowser/</a><br />[8] Maxthon, Home Page - <a href="http://www.maxthon.com/">http://www.maxthon.com/</a><br />[9] AvantBrowser, Home Page - <a href="http://www.avantbrowser.com/">http://www.avantbrowser.com/</a><br />[10] SeaMonkey Project, Hope Page - <a href="http://www.mozilla.org/projects/seamonkey/">http://www.mozilla.org/projects/seamonkey/</a><br />[11] StopIE.com - <a href="http://www.stopie.com/">http://www.stopie.com/</a>, BrowseHappy.com - <a href="http://browsehappy.com/">http://browsehappy.com/</a><br />[12] Secunia vulnerabilities, Internet Explorer - <a href="http://secunia.com/product/11/">http://secunia.com/product/11/</a><br />[13] Firefox Home Page - <a href="http://www.mozilla.org/products/firefox/">http://www.mozilla.org/products/firefox/</a><br />[14] Spread Firefox website - <a href="http://www.spreadfirefox.com/">http://www.spreadfirefox.com/</a><br />[15] Secunia vulnerabilities, Mozilla Firefox - <a href="http://secunia.com/product/4227/">http://secunia.com/product/4227/</a><br />[16] Opera Browser, Official Website - <a href="http://www.opera.com/">http://www.opera.com/</a><br />[17] Opera becomes free, webpage - <a href="http://www.opera.com/free">http://www.opera.com/free</a><br />[18] Opera and Firefox extensions - <a href="http://virtuelvis.com/archives/2005/01/opera-and-firefox-extensions">http://virtuelvis.com/archives/2005/01/opera-and-firefox-extensions</a><br />[19] How to add 'I'm feeling lucky' to Opera - <a href="http://my.opera.com/community/forums/topic.dml?id=63620">http://my.opera.com/community/forums/topic.dml?id=63620</a><br />[20] Writely.com, free online word processor - <a href="http://www.writely.com/">http://www.writely.com/</a><br />[21] K-meleon Project, Sourceforge - <a href="http://kmeleon.sourceforge.net/">http://kmeleon.sourceforge.net/</a><br />[22] Secunia vulnerabilities, K-meleon - <a href="http://secunia.com/product/3684/">http://secunia.com/product/3684/</a><br />[23] Netscape Browser, Home Page - <a href="http://browser.netscape.com/ns8/">http://browser.netscape.com/ns8/</a><br />[24] 'Netscape fixes holes in 'security' browser', Zdnet - <a href="http://www.zdnet.com.au/news/security/0,2000061744,39192767,00.htm">http://www.zdnet.com.au/news/security/0,2000061744,39192767,00.htm</a><br />[25] Netscape 8 'breaks' IE, Zdnet - <a href="http://news.zdnet.co.uk/software/applications/0,39020384,39200178,00.htm">http://news.zdnet.co.uk/software/applications/0,39020384,39200178,00.htm</a><br /></small><br />
@@ -0,0 +1,7 @@
+----- +title: "Pre-review of Internet Explorer 7" +content-type: article +timestamp: 1132939006 +tags: "browsers|microsoft|ie" +----- +Internet Explorer 6.0 was officially released on August 27th 2001, and it still runs on millions of computers across the world: it's probably the browser release which has lasted the longest in the entire history of the Internet! While I'm not sure if this is an "achievement" so much as it is an "imposition", Uncle Bill admitted that his latest baby, Internet Explorer 7, is due soon...<strong>In the Beginning</strong><br />Recently (5 months ago, that is) the aforementioned <em>"Microsoft Chairman and Chief Software Architect Bill Gates announced Internet Explorer 7.0, designed to add new levels of security to Windows XP Service Pack 2"</em>. This happened at the RSA Conference in San Francisco, and although I wasn't there, I can imagine that amongst the oohs and ahhs of the crowd, someone must have whispered "It's about time". <br /><br />Firefox, on the other hand, keeps its fans alive with pseudo-releases every so often, 1.0.4, 1.0.5 and so forth, which at least makes you <em>feel</em> like some progress is going on, be it a security fix or a new feature. Firefox will hopefully release version 1.1 <em>at any time</em> now, with various new <a href="http://www.zzine.org/read.php?op=view&item=1321">features</a> that Microsoft can only dream about. I think that when Bill created Internet Explorer 6, he probably commanded that it should be called "version 6.0" for ever and ever: fixes, service packs, and new features (popup blocking, etc.) have been added, but after 4 years I'm <em>still</em> running "Internet Explorer version 6.0".<br /><br />Version 7.0 is supposedly due soon, and - guess what - not only for Longhorn users (but where's Longhorn anyway?), but also for Windows XP SP2 users, there's great news: beta testing! If you run Windows 2000 it looks like you'll have to keep using IE6 until you get a "more advanced" version of your OS, but<a href="http://www.microsoft.com/windows/IE/ie7/default.mspx">Internet Explorer 7</a> is supposed to be "<em>freely downloadable, as always</em>" this summer. <br /><br />So what's new in IE7?<br /><br /><br /><strong>Discovering (and guessing) further details</strong><br />Although nothing was supposed to be known until the first beta release, according to what seems to be Microsoft's official procedure in these cases, after Bill's announcement, speculations on IE7's new features and improvements (and quirks?) began to spread across the Internet in various forms. <a href="http://blogs.msdn.com/ie/default.aspx">IEBlog</a> seems to be the most authoritative (and biased?) source to get information, simply because the folks there are those who ( supposedly) are planning and developing IE7. <br /><br />When the announcement was made, those guys wrote something like:<br /><fieldset><blockquote><br /><em><br />First, some basics: we?re committing to deliver a new version of Internet Explorer for Windows XP customers. Betas of IE7 will be available this summer. This new release will build on the work we did in Windows XP SP2 and (among other things) go further to defend users from phishing as well as deceptive or malicious software.<br /><br />Why? Because we listened to customers, analysts, and business partners. We heard a clear message: ?Yes, XP SP2 makes the situation better. We want more, sooner. We want security on top of the compatibility and extensibility IE gives us, and we want it on XP. Microsoft, show us your commitment.?<br /></em><br /></blockquote></fieldset><br /><br />That's so sweet! They are doing this for us, and they are listening to us...<br /> <br />Sarcasm aside, it was clear from the beginning that Microsoft wanted to focus more on security: maybe because of the stereotype of IE which has emerged through the years (IE = An easy way for bad people to do bad things to you), maybe because it was time to do it, or maybe because they got bored. The most likely reason, though, is commercial: Firefox's popularity has surged recently, and Microsoft felt an urge to open (Fire)fox-hunting season as soon as possible.<br /><br />Back in March, more details about this new amazing product began to <a href="http://www.microsoft-watch.com/article2/0,1995,1776290,00.asp">leak</a>, inevitably, and here are the new features that IE7 is supposed to have:<br /><ul><br /><li>Tabs</li><br /><li>International domain name </li>(IDN) support<br /><li>Transparent Portable Network Graphics </li>(PNG) support (finally!)<br /><li>Simplified printing from inside IE 7.0</li><br /><li>A built-in news aggregator. </li><br /><li>Somewhat extended support to CSS2 </li>(but not the whole standard)<br /></ul> <br /><br />Wonderful and incredible at the same time: is IE7 trying to emulate Firefox?<br /><br /><em>So, what will this wonder look like?</em> - Someone might wonder... And here are some leaked <a href="http://neowin.net/comments.php?id=29131&category=main">screenshots</a> that could be real enough. Impressive.<br /><br /><br /><strong>New support for old stuff</strong><br />Any Firefox user reading the features list above probably wasn't terribly impressed: everything mentioned there has been supported in Firefox for ages, but personally, I'm truly pleased to see that Microsoft finally decided to try to catch up with more advanced browsers (not just Firefox, but Opera as well) and web developers can relax a bit (maybe).<br /><br />There's a nice post on IEBlog regarding <a href="http://blogs.msdn.com/ie/archive/2005/04/26/412263.aspx">PNG Support</a>, where the guy who made the thing possible, Sam Fortiner, explains what he had to do and why.<br />It's widely known that PNG images currently aren't handled correctly in Internet Explorer: if they are transparent, in particular, they will show a grey-ish background instead of being transparent. I guess that's not a good thing to see, after trying to overlay PNG images, for example. As a result, web developers currently don't use the PNG format, nor its transparency support. With IE7's transparent PNG support, sites which seemed to only display properly in Firefox will appear equally beautiful in the new Internet Explorer. <br /><br />Tony Schreiner, on the same blog, provides a detailed explanation on his work concerning <a href="http://blogs.msdn.com/ie/archive/2005/05/26/422103.aspx">Tab Support</a>: tabs are a new thing for Microsoft, and for long it was feared that they could cause "confusion" among end users accustomed to the tabless policy of IE6 and of the whole Windows interface. Regarding this, I think that people at Redmond should thank firefox a million times for "pioneering" into the unexplored land of Tabbed Browsing: firefox has been using tabs since the very first release, and it was highly acclaimed for this. Eventually then, Microsoft folks released that people are not as stupid as they hoped they'd be, and <em>aren't</em> confused by tabs at all, so they decided to implement them in IE7.<br /><br />Tony gives away some technical details regarding IE7's implementation of tabs, which essentially consists of <em>"pushing a large part of what you see in IE6 into a tab"</em>, and let's hope it works. IE was born and evolved as a single-window browser, so this addition represents quite a challenge to Microsoft's way of thinking about User Interfaces... what's next then? Maybe Tabs in Windows Explorer as well? Maybe...<br /><br />Little is known about the other "new features", apart from CSS2 support, which will be described in the next paragraph. A built-in RSS aggregator? It's now acknowledged that Longhorn will have an extensive <a href="http://msdn.microsoft.com/longhorn/understanding/rss/default.aspx?pull=/library/en-us/dnlong/html/rsssupportinlonghorn.asp">RSS support</a> itself, so this seemed a logical addition to IE7.<br /><br /> <br /><br /><strong>The fear of uncertainty</strong><br />IE support for web standards, in particular CSS, has always been a hot topic for developers. <br /><br /><fieldset><blockquote><em>When we shipped IE 6.0, we finally fully supported CSS 1, and had some pieces of CSS2 implemented as well.</em></blockquote></fieldset><br /><br />That's honest, at least. Microsoft - so far - does not support CSS2, but at least offers full CSS1 support. As a personal note, I'd reword the previous as <em>"Microsoft does not want to fully support web standards because 90% of Internet users use IE, hence, they can make the laws"</em>. Cruel, but basically true: Microsoft does not care about web standards, and IE's lack of support can be used as a way to force developers to create websites which are IE-compatible rather than standards compatible. There's more information <a href="http://www.alttags.org/archives/2004/04/29/33/">here</a>.<br /><br />Words in an official <a href="http://blogs.msdn.com/ie/archive/2005/03/09/391362.aspx">post</a> don't bode well for the future either:<br /><fieldset><blockquote><em><br />Given the strong usage of IE in the corporate space as well as embedded in applications, we have a strong requirement for backwards compatibility with our previous behavior, compliant or not; that requirement does not mean ?don?t touch anything?, it is just a recognition that keeping our engine in sync across strict and quirks modes is challenging when quirks mode has to work nearly exactly the same as it always has. We will continue to improve our compliance under strict mode even when it breaks compatibility, and under quirks mode when it?s not damaging to our backwards compatibility.<br /></em></blockquote></fieldset><br /><br />Basically, this provides an excuse to not fully adopt web standards, which can be seen as legitimate or not, according to your browser preferences, so I'm not going to comment on that...<br /><br />In another article, <a href="http://www.microsoft-watch.com/article2/0,2180,1776935,00.asp">MicrosoftWatch</a>, reports that <em>"One partner said that Microsoft considers CSS2 to be a "flawed" standard and that the company is waiting for a later point release, such as CSS2.1 or CSS3, before throwing its complete support behind it".</em><br />Although this cannot be regarded as a 100% authoritative source, people started <a href="http://dean.edwards.name/weblog/2005/03/the-reason/">speculating</a> that IE7 could potentially become a dictator for other browsers (like its predecessor), because so many people still use the MS browser. It could help Microsoft, as it did in the past, so why shouldn't Bill take advantage of it?<br />
@@ -0,0 +1,7 @@
+----- +title: "Project Gutenberg: The What, When and Why" +content-type: article +timestamp: 1134215728 +tags: "writing|internet" +----- +I always liked reading Shakespeare, and I always wanted to have a copy of every one of his plays, tragedies and sonnets on my bookshelf ready for consultation, but such things always seemed unrealistic because I had neither the space for them nor the time to find them all nor the money to spend on them when I did find them. <br />Now I can store the complete works of William Shakespeare directly on my mobile phone, and they take up as little as 1.4 MB compressed...<br /><strong>Origins</strong><br /><br />Even if you never heard the word ?e-book?[1] before, you can probably guess its meaning: <em>electronic book</em>, or a book in digital format. What you probably don't knoe is that people started copying books into digital format nearly as soon as computers were available to the public, and maybe even before: the first <em>e-book</em> was created in 1971.<br /><br />That year, a student at the University of Illinois named Michael Hart was given the equivalent of $100,000,000 (or $100,000, or $1,000,000 - there is no official estimation) in <em>computer time</em>. Basically, since he was friends with some of the operators at the Materials Research Lab, he was given an operator account on the Xerox Sigma V mainframe, which later became one of the 15 nodes that developed into the global network that eventually became the Internet. At that time, having that much computer time at your disposal was indeed a great privilege, and Hart felt that he had to use that time for something useful that could in theory generate a profit - not an easy task when you consider that only a limited amount of people in the world had access to a computer, and that those computers weren?t even connected together. <br /><br />Foreseeing an era where computers where interconnected and regular people had access to them, Michael Hart thought that virtually all texts and books could be made available in digital format, for free, to anyone who wanted to read them. Certainly, such a <em>project</em> seemed quite unrealistic and excessively time consuming at the time; nevertheless, he decided to start copying the first book himself, the Declaration of Independence of the United States, which he was carrying in his backpack.<br /><br />Project Gutenberg[2] was born with that one single text, and it has grown through the years. Today, there are more than 16,000 e-books available to download and read.<br /><br /><br /><strong>What is Project Gutenberg?</strong><br /><br />By that name, Michael Hart probably wanted to define the project?s scope and vision: an idea as revolutionary for the diffusion of literature as the invention of moveable type printing[3] in the 1450s. <br /><br />The mission of the project can be summarized as follows[4]:<br /><br /><div style="text-align: center;"><em> "To encourage the creation and distribution of eBooks."<br /> </em></div><br /><br />In order to achieve this, Project Gutenberg is set up such that <em>anyone</em> can contribute to it, in many different ways. It is run completely by volunteers, hundreds of people around the world who share the same ideals and believe that literature should be freely available to everyone at virtually no cost. <br /><br />The Internet serves this purpose magnificently: it is possible to download all of the over 16,000 free e-books from the Project Gutenberg website[5] in different formats and many different languages[6]!<br /><br />However, having such a large amount of books available within a few clicks can make people forget about how time consuming the process of making one single e-book is: originally, after acquiring a paper copy of the book, Gutenberg?s volunteers had to transcribe it themselves, typing every word from the beginning to the end. Then the book had to be checked for mistakes before it was accepted into the Project. <br /><br />Producing a single e-book can therefore take many people and many hours from beginning to end, and presumably this was one of the reasons why Project Gutenberg was criticized for being more of an utopian ideal than a tangible reality: every year since its creation people have doubted the project, accusing Hart of pursuing an impossible dream, and prophesying that fewer and fewer people would join the team and that there was no future for Project Gutenberg.<br /><br />Oddly enough, they were all wrong: not only is the Project still active today, but the number of books released every year has grown consistently over time, from a few dozen in the early days to thousands per year now.<br /><br /> More and more people became involved, partially because they share the same ideals and partially because it has always been easy to get involved[7]: Project Gutenberg strives to remove all the institutional barriers which could potentially interfere with members? motivation; they try not to impose any restrictions, and they don't support perfectionism. It is believed[8] that there shouldn?t be any <em>proper</em> or <em>standard</em> way to release e-books, but instead many different ways, to appeal to many tastes: the Project doesn?t support any particular standard for releasing ebooks, although it normally takes the simplest path. Therefore, the majority of the books are available in <em>Plain Vanilla ASCII</em>, i.e., texts are written using only ASCII characters, and bold, italicized or underlined words are capitalized instead. While this format has the most limitations, it is also the most portable.<br /><br />At this point, you might wonder why they don't just scan the original books, and make them available as image files or PDF files. While it would be much faster, it also has disadvantages, such as large file size and an inability to be displayed at particular resolutions; a scanned book probably wouldn't be readable on a PDA, mobile phone, or other equally small device. <br /><br />Nonetheless, scanners do play an important part nowadays in the process of making an e-book: texts are no longer copied manually if a printed edition already exists. Instead, they are scanned with OCR[9] and then proofread twice before being accepted. The (un)official procedure recommends scanning at least one page a day, having it proofread once by someone in charge of doing so (a ?junior? proofread), and then again by a more experienced member. This has undoubtedly sped up the process.<br /><br /><br /><strong>Not All Books Are Equal (for now)</strong><br /><br />By looking at some of the titles available on Project Gutenberg, you?ll notice that most of them are <em>classics</em> or relatively old works: for example, you won?t find the latest <em>Harry Potter</em>[10] available for download.<br /><br />Since <em>all</em> of the books at Project Gutenberg are free to download (more details of the license will be given later on), and therefore not subject to fees or copyrights, only books in the public domain[11] can generally be included in the Project.<br /><br />Public domain includes all those works of art whose intellectual property cannot be legally claimed or exploited by any person, institution or legal entity, and therefore belong to all mankind. In the case of books, copyright can expire <em>only if</em> some particular conditions subsist:<br /><br /><ul><br /><li>The work was created and first published before January 1, 1923, or at least 95 years before January 1 of the current year, whichever is later.</li><br /><li>The last surviving author died at least 70 years before January 1 of the current year.</li><br /><li>Neither a </li><em>perpetual copyright</em> is granted by the Berne Convention nor has a particular government (US or EU) passed a copyright term extension.<br /></ul><br /><br />Now we can see why there are not very many <em>new</em> publications available in the project, and that?s really frustrating for Michael Hart and other volunteers:<br /><br /><em> "In the USA, no copyrights will expire from now to 2019!!! It is even much worse in many other countries, where they actually removed 20 years from the public domain. Books that had been legal to publish all of a sudden were not. Friends told me that in Italy, for example, all the great Italian operas that had entered the public domain are no longer there... Same goes for the United Kingdom. Germany increased their copyright term to more than 70 years back in the 1960's. It is a domino effect. Australia is the only country I know of that has officially stated they will not extend the copyright term by 20 years to more than 70."</em>[12]<br /><br />After all these considerations, we can take a closer look at Gutenberg?s license[13] which comes in two different versions: <em>informative</em> and normative (?legalese?, as they call it), the latter of which is the real document. Luckily, the non-legalese version is simple and complete enough: basically PG releases books which are either in the public domain or ? if copyrighted ? the author gave express permission to re-distribute them. The difference lies in the fact that if you remove PG?s trademark and license from a book which is in the public domain, you can re-distribute it freely on your own, but if the book is copyrighted and permission to distribute was given <em>only</em> to PG, you?ll have to contact the author to obtain permission.<br /><br />Furthermore, anybody can use the PG trademark when distributing <em>verbatim</em> copies of a book, with no changes (re-formatting is allowed); if you want to charge money for the copies you distribute, you have to pay royalties to PG.<br /><br /><br /><strong>Satellite Sites and Similar Projects</strong><br /><br />Michael Hart was ? and still is ? an authentic pioneer in his field: he had the idea to create the largest free library on the Internet to <em>?Break Down the Bars of Ignorance and Illiteracy?</em>. A lot of people thought he wouldn?t achieve anything, but his dedication and perseverance were simply so exemplary that more and more people got involved, a few satellite sites were created and similar projects were started in all over the world sharing the same goals.<br /> <br />Hart is obviously aware of the fact that there are also some sites <em>selling</em> e-books, but he explains that neither those sites nor any other free online library should be considered a competitor to Project Gutenberg: they all contribute to the diffusion of e-books. <br /><br />One of the most important <em>satellite site</em> of PG is ?Distributed Proofreading?[14] which is now considered the main source of PG books: every month more than 100 books are proofread by hundreds of volunteers who can register on the site for free and then get added to the project. The key concept of this parallel organization is that a single book can be proofread by more than one person at the same time, and thereby speeding up a project which would be otherwise very difficult to coordinate.<br /><br />Another site which helps the main project is HWG, the HTML Writers Guild[15]. It aims to convert PG?s plain text ebooks into more feature-rich HTML documents: by using a mark-up language it is possible to add footnotes and it can be analyzed easily by automatic tools.<br /><br />Although Project Gutenberg releases well-known books in many languages, a few sites officially affiliated with the project were created to focus particularly on their regional literature and works. That?s the case for both Australia[16] and Germany[17], for example; they both focus on their own national heritage. Regarding the latter, they recently claimed their own copyright for their e-books, and thus a new foundation is in the process of being created: Project Gutenberg Europe[18] which aims, among other things, to address the myriad copyright issues and laws of the EU.<br /><br />Last but not least, there?s an interesting discussion[19] about similarities and differences between Project Gutenberg and Wikisource[20] a Wikipedia[21]?s sister project aiming to create a free repository of texts which are either in the public domain or licensed under the GFDL[22]. <br /><br />Wikisource people obviously noticed that their project was quite similar to PG, but with an important difference: their texts were formatted and freely editable by any user who was able to spot a mistake or inaccuracy; PG doesn?t offer this. In this context, Project Gutenberg was sometimes blamed for allowing inaccurate material to be included in the project: this was due to the fact that even if PG uses Distributed Proofreading website to proofread e-books, this is often not comparable to a wiki system. However, in PG's defense, wiki articles, being much more open, are subject to much more vandalism, and therefore must be more closely watched. One can imagine a high school student changing <em>Hamlet</em> to read "To be or not to be, who gives a crap." <br /><br />However, the members of Project Gutenberg have proposed a sort of mutual cooperation between PG and wikisource: wikisource should maintain a broader scope, focusing not only on literary works but also on quotations and other kind of texts, and at the same time provide some revised edition of some book to Project Gutenberg.<br /><br /><br /><strong>The Future of Project Gutenberg</strong><br /><br />Project Gutenberg demonstrated the ability to grow considerably during its over 30-year existence. During that same time, copyright laws were extended, and some new technologies tried to <em>intimidate</em> the Project, which seems to remain relatively unchanged. However, last year a long-awaited DVD containing all the Project's e-books was released, showing the world that PG can keep up with the progress of technology to a certain extent.<br /> <br />One aspect that makes PG a successful project even today is its ability to adapt: CD-ROMs and a DVD were released, OCR was almost immediately taken into consideration, and since last year, all e-books have been released in both plain text and HTML format: there are still no fixed standards or rigid guidelines, but common sense seems to prevail over chaos, and for now, the system works. <br /><br />So far, Michael Hart showed the entire world that a single person can do <em>a lot</em> when pursuing a noble goal. Call him an idealist, call him a dreamer, but he surely created something able to gratify and motivate him and his fellow volunteers forever:<br /><br /><em>?I can't think of anything more rewarding to do as a career than Project Gutenberg. It is something that will reach more people than any other project in all of history. It is as powerful as The Bomb, but everyone can benefit from it.?</em>[12]<br /><br /><br /><br /><br /><strong>Notes & Further Readings</strong><br /><br />[1] Ebook, Wikipedia page ? <a href="http://en.wikipedia.org/wiki/Ebook">http://en.wikipedia.org/wiki/Ebook</a><br />[2] Project Gutenberg, Wikipedia page - <a href="http://en.wikipedia.org/wiki/Project_Gutenberg">http://en.wikipedia.org/wiki/Project_Gutenberg</a><br />[3] Movable type, Wikipedia page - <a href="http://en.wikipedia.org/wiki/Printing_press">http://en.wikipedia.org/wiki/Printing_press</a><br />[4] Project Gutenberg FAQ0 - <a href="http://www.gutenberg.org/about/faq0">http://www.gutenberg.org/about/faq0</a><br />[5] Project Gutenberg Official Website - <a href="http://www.gutenberg.org">http://www.gutenberg.org</a><br />[6] Project Gutenberg?s catalog - <a href="http://www.gutenberg.org/catalog/">http://www.gutenberg.org/catalog/</a><br />[7] Project Gutenberg?s volunteering page - <a href="http://www.gutenberg.org/info/volunteer">http://www.gutenberg.org/info/volunteer</a><br />[8] Project Gutenberg FAQ3 ? <a href="http://www.gutenberg.org/about/faq3">http://www.gutenberg.org/about/faq3</a><br />[9] Optical Character Recognition, Wikipedia Page ? <a href="http://en.wikipedia.org/wiki/Optical_character_recognition">http://en.wikipedia.org/wiki/Optical_character_recognition</a><br />[10] ?Harry Potter and the half-blood prince?, Scholastic Inc. website - <a href="http://www.scholastic.com/harrypotter/books/prince/index.htm">http://www.scholastic.com/harrypotter/books/prince/index.htm</a><br />[11] Public Domain, Wikipedia Page - <a href="http://en.wikipedia.org/wiki/Public_domain">http://en.wikipedia.org/wiki/Public_domain</a><br />[12] ?The Second Gutenberg Interview with Michael Hart?, Sam Vaknin, Ph.D. - <a href="http://samvak.tripod.com/busiweb29.html">http://samvak.tripod.com/busiweb29.html</a><br />[13] Gutenberg Project license ? <a href="http://www.gutenberg.org/license">http://www.gutenberg.org/license</a><br />[14] Project Gutenberg?s Distributed Proofreading - <a href="http://www.pgdp.net/c/default.php ">http://www.pgdp.net/c/default.php </a><br />[15] HTML Writers Guild Project Gutenberg ? <a href="http://gutenberg.hwg.org/">http://gutenberg.hwg.org/</a> <br />[16] Project Gutenberg Australia ? <a href="http://gutenberg.net.au/">http://gutenberg.net.au/</a><br />[17] Project Gutenberg Germany ? <a href="http://gutenberg.spiegel.de/">http://gutenberg.spiegel.de/</a><br />[18] Project Gutenberg Europe ? <a href="http://gutenberg.nl/">http://gutenberg.nl/</a><br />[19] Wikisource and Project Gutenberg, Wikisource page ? <a href="http://wikisource.org/wiki/Wikisource:Wikisource_and_Project_Gutenberg">http://wikisource.org/wiki/Wikisource:Wikisource_and_Project_Gutenberg</a><br />[20] Wikisource main page ? <a href="http://wikisource.org/wiki/Main_Page">http://wikisource.org/wiki/Main_Page</a><br />[21] Wikipedia main page ? <a href="http://www.wikipedia.org/">http://www.wikipedia.org/</a><br />[22] GNU Free Documentation License ? <a href="http://en.wikipedia.org/wiki/Wikipedia:Text_of_the_GNU_Free_Documentation_License ">http://en.wikipedia.org/wiki/Wikipedia:Text_of_the_GNU_Free_Documentation_License </a><br />
@@ -0,0 +1,7 @@
+----- +title: "CyberArmy Presents: Project WindStone" +content-type: article +timestamp: 1134215963 +tags: "internet|opensource" +----- +I think most of the people who currently use the Internet have tried Microsoft Hotmail[1] at least once. Many of you probably don't use it anymore because you found something better, but the point is that Hotmail has been around for a long time, and so has its authentication method, MSN Passport, which is a universal login system used not only for Hotmail but also for many other non-Microsoft websites and services.<br />If you don't like the idea of using Microsoft-owned technology as an authentication system, we have an alternative for you... <strong>Show me your Passport</strong><br /><fieldset><blockquote>"Create your sign-in credentials (e-mail and password) once, then use them everywhere on the Microsoft Passport Network. You can even set the site to remember your credentials for you!"</blockquote></fieldset><br /><br />This is what the MSN Passport does, in a nutshell: it provides a <em>universal</em> login system so that members only need to remember their email address and one password in order to be authenticated on every site that uses the Passport technology. It has been adopted quite happily by some websites and portals[3], and particularly by merchant sites, who liked the idea of making life easier for their users. So far, so good.<br /><br />Like nearly every Microsoft technology seems to at one point or another, the MSN Passport became an object of criticism and concern, as shown in a 2002 MIT document[4]. The main problem is this: among the data collected by Microsoft upon a user's registration is a significant amount of personal information (such as age, date of birth, and addresses) which is stored on the Microsoft servers. What if someone gains access to that information? Who guarantees that that information will not be used by third parties? <br /><br />Aside from the privacy issues, some people are concerned about the system's internal security and by the fact that the system is entirely dependent on Microsoft servers to work:<br /><br /><fieldset><blockquote>"As more services and components depend on remote servers, functionality can grind to a halt if there is a failure on the centralized Passport system."[5]</blockquote></fieldset><br /><br />People have concerns, but what has been done? Are there any alternatives? Well, yes and no. Apparently the <em>Liberty Alliance Project</em>[6] was created to offer a valid and perhaps more democratic alternative to the Microsoft Passport:<br /><br /><fieldset><blockquote>"The Liberty Alliance Project was formed in September 2001 to serve as the premier open standards organization for federated identity and identity-based services. The Alliance is delivering specifications and guidelines to enable a complete network identity infrastructure that will resolve many of the technology and business issues hindering the deployment of identity-based Web services."[7]</blockquote></fieldset><br /><br />The project's founders (160 IT organizations, including Sun Microsystems and VeriSign) aim to create a <em>distributed</em> authentication system, as opposed to the <em>centralized</em> MSN Passport. This will undoubtedly solve some of the problems, but the system is still under development.<br /><br /><strong>Introducing Project Windstone</strong><br />CyberArmy[8] is obviously like neither Microsoft or Sun Microsystems; it's a community of volunteers whose aim is sharing their knowledge and making the Internet a better place. Volunteers don't get paid, but sometimes something gets done, and some projects are released to the general public. Among these is a system for (if you haven't guessed already)a system for universal user authentication, called Project Windstone[9].<br /><br />Project Windstone was developed by SoundWave on behalf of Special Operations and Security[10] to provide a universal authentication system that is easy to use and deploy on websites and in applications. Furthermore, the Windstone protocol is language-independent and functions via HTTP POST transactions between clients and the Windstone server, so virtually any website coded in any language or any application able to communicate with a web server can implement it.<br /><br />It seems great so far, but what can Windstone be used for? As previously said, it is a system to allow users to authenticate themselves with the same credentials on many different websites and share profiles and information between those websites at the same time. Furthermore, users can send each other private messages that can be retrieved on any website that implements Windstone, with the added benefit of all transactions taking place in a secure and private environment.<br /><br />On second thought, Windstone features seem to lead to some perplexity, especially among users who are particularly concerned about their own privacy: apparently a single centralized server is involved, and users can share their profile and send messages with each other, so what warranties does Windstone offers as far as privacy/security goes? Here's something which should reassure most of us:<br /><br /><ul><br /><li>The information provided by users in their public profiles is entirely up to their discretion: in other words, it's up to the user if they want to list their credit card numbers on their profile or talk about their cat, as the Windstone server itself does not require any specific personal information in order to create a profile.</li><br /><li>The username can be any valid email address submitted by the user.</li><br /><li>User profiles are available only after authentication with the Windstone server, and only if the person requesting the profile already knows the email address used by another user for Windstone services. Currently, Windstone does not implement any form of listing of existing users among the standard commands.</li><br /><li>The password chosen for user authentication is NEVER saved in any form; not within the client applications, not on the central server, and not in cookies. </li><br /><li> Data sent from client to server and vice-versa is encrypted.</li><br /></ul><br /><br /><strong>Some more technical details</strong><br />I am actually planning to implement the system on one of my sites, so I started reading the short but straightforward documentation[11] available on the Windstone site to learn more about how the system works, and it seems quite simple and able to do what it does in a logical way; the Windstone "standard" contains a bunch of commands[12] which are used by the clients (agents) and the server to request information exchange such as requests for initialization, possible server replies, and so on. Commands and data are sent using the following format (excerpt from the official documentation):<br /><br /><em><br />The format of this command string is as follows:<br /><br />AAAA.*BBBBBBBBBB.*CCCC::DDDDDDDDDDDDDDDDDDDD::EEEE::FFFFFFFFFF<br /><br />A. This is the command. Commands tell us what kind of request or response is being made with the command string. It also lets us know how many elements of data to expect (see F).<br /><br />B. This is the agent system identifier. Each website or IEP receives a unique alphanumeric ten (10) character identifier upon registration, which is used to identify this system within the network.<br /><br />C. This is the protocol version number. Generally, the version number will not change much, if at all, but it must be present. The protocol version goes with all command strings to let other systems and the Windstone server know what version of the protocol you are using. If certain versions are incompatible with each other, or if there is an upgrade or change to the protocol you are using, the version number will be used to determine that.<br /><br />D. This is the transaction identifier. Usually, this is not used, so the default information that should go here is six zeros ("000000"). The transaction identifier helps to link command strings into groups for processing and is most often used during the user login process.<br /><br />E. This is the sequence number. The sequence number, in conjunction with the transaction identifier, is used to put grouped command strings into their logical order. The sequence numbers have no specified numbering sequence, default start value, or length limit: the only requirement is that a sequence number must be in order from lowest to highest. When not using a transaction identifier or sequence number, the default information that should go here is a simple "X" (note that when "X" is being used in a command string by itself, it should always be capitalized).<br /><br />F. This is the data section. The data section is the heart of the command string. It is important to note that, at the minimum, all data sections need to be base-64 encoded prior to transmission - at no time should there be information in plain text format in the data section.<br /></em> <br /><br />Obviously, command strings can be manipulated to access each section separately and the manipulation can be done with virtually any programming language used on the client side. <br /><br />Normally, the client will send a command to the Windstone server to start the authentication process and then retrieve some information; the server will reply accordingly to the client's command strings with its own responses wrapped in command strings. Let's suppose a Windstone Agent is being used to perform the following actions:<br /><br />- Initialize the system<br />- perform a login<br />- retrieve user profile from the Windstone server <br /><br />In this simulation I will not use the actual command strings but just the codes for the various commands.<br /><br /><em><span style="text-decoration:underline;">Agent</span>: 0000 :: SETUP_INITIALIZE</em> - The Windstone agent sends a request to the server to initialize the authentication process, supplying the software identifier, the software type ("PC-Based" or "Web-Based"), the command landing URL and the URL to redirect logins to.<br /><br /><em><span style="text-decoration:underline;">Server</span>: 0002 :: SETUP_COMPLETE </em>- Everything looks good to the server, which replies with the following information: Unique agent identifier, primary authentication token, secondary authentication token, activation key, security code, shared encryption key (255 random characters, non-binary), registration completion date and time (epoch). These parameters will be used by the agent afterwards and are necessary to identify the agent on the Windstone server.<br /><br /><em><span style="text-decoration:underline;">Agent</span>: 1102 :: USER_LOGIN_REDIRECT</em> - The agent requests to start the authentication process and sends the email address of the user to the server along with the URL where the user's password will be entered.<br /><br /><br /><em><span style="text-decoration:underline;">Server</span>: 1105 :: USER_AUTH_SAVE</em> - User credentials are checked by the Windstone server. Everything is fine, so the server sends this response to the agent. The response contains the authentication token which will be used to authenticate the user during the session, as well as the user's display name.<br /><br /><em><span style="text-decoration:underline;">Agent</span>: 1107 :: USER_INFO</em> - The agent can now request the user's profile from the Windstone Server.<br /><br /><em><span style="text-decoration:underline;">Server</span>: 1108 :: USER_PROFILE</em> - After checking the user's authentication token, the server can now send the following information to the agent: Email address, display name, user "About Me" text, last login date and time, account created date and time, online status.<br /><br />This is just a simple example of how the Windstone protocol can be used; as mentioned earlier, there are various other commands[12] which can be used to perform various actions. <br /><br /><strong>Development and deployment</strong><br />The Windstone protocol is fully operational and can be implemented on any website or application able to communicate with a web server. The developer made a very basic PHP-based example of an Agent system available online[13]; it may not be a masterpiece of PHP coding (as the developer himself pointed out), but it can be useful in understanding how to develop a Windstone Agent System.<br /><br />If you'd like to start developing your own Agent System or you just want to create a Windstone account, it can be done on the Windstone registration page[14]: you'll be asked to provide an email address, a display name and a profile (the last two can be modified afterwards). Then the system will prompt you for a password, and an email will be sent to the address you provided to confirm and activate your account. Once you have an account, you can login to any website or application implementing the Windstone protocol, such as the Windstone website itself[15].<br /><br />Windstone is certainly not yet comparable to the MSN Passport technology - it's not used by a lot of important sites, and it's much simpler and offers fewer services, but it's undoubtedly an interesting approach to a free to use, secure and private system of universal user authentication.<br />Check it out![9] <br /><br /><strong>Notes and Resources</strong><br />[1] Microsoft Hotmail Service, <a href="http://www.hotmail.com">http://www.hotmail.com</a><br />[2] MSN Passport Network: <a href="https://accountservices.passport.net/ppnetworkhome.srf?vv=320&lc=1033">https://accountservices.passport.net/ppnetworkhome.srf?vv=320&lc=1033</a><br />[3] List of sites using MSN Passport, Passport@everything2: <a href="http://www.everything2.com/index.pl?node=passport">http://www.everything2.com/index.pl?node=passport</a><br />[4] "Microsoft .NET Passport and Wallet: Approach with Caution!", <a href="http://web.mit.edu/ist/isnews/v17/n04/170408.html">http://web.mit.edu/ist/isnews/v17/n04/170408.html</a><br />[5] "Microsoft Hailstorm and Passport", go-mono.com, <a href="http://www.go-mono.com/passport.html">http://www.go-mono.com/passport.html</a><br />[6] Liberty Alliance Project, Official Page, <a href="http://www.projectliberty.org/index.php">http://www.projectliberty.org/index.php</a><br />[7] Liberty Alliance Project, FAQs, <a href="http://www.projectliberty.org/about/faq.php">http://www.projectliberty.org/about/faq.php</a><br />[8] CyberArmy, Official Page, <a href="http://www.cyberarmy.net/">http://www.cyberarmy.net/</a><br />[9] Project Windstone, Official Page, <a href="http://windstone.x-mirror.com/v2/">http://windstone.x-mirror.com/v2/</a><br />[10] Special Operations and Security, official website, <a href="http://sos.x-mirror.com/">http://sos.x-mirror.com/</a><br />[11] Windstone Communications Protocol, Development Whitepaper, <a href="http://windstone.x-mirror.com/v2/development.php">http://windstone.x-mirror.com/v2/development.php</a><br />[12] Windstone Protocol Commands, <a href="http://windstone.x-mirror.com/v2/commands.php">http://windstone.x-mirror.com/v2/commands.php</a><br />[13] Example of PHP Agent System (ZIP file), <a href="http://windstone.x-mirror.com/v2/ws-testbed.zip">http://windstone.x-mirror.com/v2/ws-testbed.zip</a><br />[14] Windstone Registration, <a href="http://windstone.x-mirror.com/v2/register.php">http://windstone.x-mirror.com/v2/register.php</a><br />[15] Windstone Login Page, <a href="http://windstone.x-mirror.com/v2/login.php">http://windstone.x-mirror.com/v2/login.php</a><br />
@@ -0,0 +1,7 @@
+----- +title: "A Quick Overview of SQLite" +content-type: article +timestamp: 1132937558 +tags: "review|databases" +----- +A few months ago, my old hosting company started having problems with their servers. The servers would go down unexpectedly for 5-10 minutes on a relatively frequent basis, but for some weird reason... the MySQL databases were unusable for a couple of hours afterwards every time. "We had problems with MySQL, BUT the server was up, so we're still within the 99% uptime guarantee"... At the time I was thinking: "If only MySQL databases behaved like plain files..." <br /><br /><strong>What is SQLite?</strong><br /><br />When PHP5 was first released, I discovered SQLite: <em>"...a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine"</em> (as quoted from the <a href="http://www.sqlite.org">official site</a>). PHP5 offers native support to this little wonder, whose development actually started long before PHP5 was released, and can be used with many, many other programming languages.<br /> <br />SQLite organizes each database in a .db file, and implements most of the SQL 92 standards, to access the databases with no need of a server process running at the same time. Access is accomplished through standard reading/writing file operations.<br /><br />Let's examine the pros and cons of using SQLite in your web applications.<br /><br /><strong>Features</strong><br /><br />- SQLite is FREE "for any purpose", <a href="http://www.sqlite.org/copyright.html">they say</a>.<br />- It doesn't rely on a server process to run<br />- You don't need to spend time configuring your installation, because there's nothing to configure!<br />- As there's no client-server negotiation, accesses to the database are much faster (2-3 times faster than a MySQL database)<br /><br />As a consequence of all this, there's actually no concept of "users" allowed to access the database; as I said, the actual data of each database is stored into a single file, and as such, it has permissions which regulate access. If a script has read or write access to the file, a read/write sql instruction can be executed on the database. You can therefore simply protect your databases as you would protect any other file on your server.<br /><br />- SQLite is small: the library is just 250KB, and takes care of everything, you don't need any other library or program to use it.<br />- SQLite can handle files up to 2 terabytes in size.<br />- SQLite implements most of the SQL 92 standard. This means you can usually use standard and well known queries to access it (with some exceptions, discussed in the next section).<br />- SQLite does not enforce datatype constraints. Is this a feature or a bug? Well, they call it a feature, but others may not agree. As a matter of fact, you can put a string into a field marked "integer" and vice versa, and furthermore, the string can be as big as you like! There's one exception to this rule, though. Columns marked as PRIMARY KEY must be of integer type. <br /><br /><br /><strong>Limitations</strong><br />Now that you have read all of the preceding material, and know that PHP5 supports SQLite natively, you might be thinking about putting MySQL in the bin and using SQLite for everything instead: it's smaller, faster, portable, simpler, and headache-free... it's love at first sight. Right?<br /><br />Well, the developers themselves decided to devote <a href="http://www.sqlite.org/whentouse.html">a page</a> to discuss when you should use SQLite and where you'd be better off sticking with your "old" database engine. Furthermore, being such a small and powerful piece of code, SQLite comes with some limitations which should be considered before starting to use it in a project:<br /><br />- Not all SQL queries and syntax are supported. For a full list, have a look <a href="http://www.sqlite.org/omitted.html">here</a>. The most notable things you'll miss in SQLite are: the inability (for now) to "ALTER TABLE" (you do this, they say, by creating a new modified table and deleting the old one), no VIEW, and no CHECK or FOREIGN KEY constraints (they are "parsed but not enforced").<br /><br />- Syntax can be different sometimes. I noticed that, for example, in a JOIN between two or more tables, when accessing columns you ALWAYS have to specify <table>.<column>, whereas MySQL doesn't complain if there's ambiguity.<br /><br />- SQLite is not suitable for projects which requires a lot of semi-simultaneous writing operations. SQLite uses reader/writer locks: if there's someone reading from the database, writing to it is not allowed. This basically mean that multiple simultaneous read operations (SELECT x FROM ...) have higher priority than write operations (INSERT, UPDATE, ...), which are therefore delayed. <br /><br />- Do not use SQLite for big databases. Even though I said that (theoretically) databases up to 2 terabytes are supported, when your database is more than 1 GB, SQLite requires too much memory to run (256 bytes of RAM for each MB of database space, they say).<br /><br />- Generally, if your website gets lots of traffic, SQLite shouldn't be your primary database engine, for the issues mentioned above. php.net uses SQLite for its site, but only on certain parts of it. If you get fewer than 100,000 hits/day, SQLite should work fine - they say. So basically I can use for any site I make...<br /><br /><br /><strong>Conclusions</strong><br />Considering all features and limitations, SQLite is an excellent solution for small or medium websites, embedded applications, programs which only need a small database to function and shouldn't be bound to a server, temporary databases, testing, and the like. Always keep in mind that you're working with files, so keep them protected wherever you put them in your server (a connection is established simply by specifying the path to the file).<br /><br />Last but not least, if you're used to phpMyAdmin for administering your MySQL databases, there are similar tools for SQLite, such as <a href="http://www.sqlitemanager.org">sqlitemanager</a>.<br />
@@ -0,0 +1,82 @@
+----- +title: "Rails-Doc.org - A First Look" +content-type: article +timestamp: 1213853400 +tags: "rails|ruby|writing|review" +----- +<p>When you decided to learn Ruby on Rails (if you did, that is), chances are that you bought a book. I did, too, actually: there are a lot of very interesting and fairly comprehensive books out there after all.</p> +<p>I actually never bought a book to learn <span class="caps">PHP</span>, in the past though. Why’s that? Well, for two simple reasons:</p> +<ul> + <li>The <a href="http://www.php.net/manual/en/"><span class="caps">PHP</span> manual</a> can easily be searched and provides enough documentation, in most cases.</li> + <li>When the documentation is not enough, there’s always plenty of comments by experienced developers to save your day.</li> +</ul> +<p>That being said, <span class="caps">PHP</span> is still an awfully disorganized language, but believe it or not, coming from <span class="caps">PHP</span> I didn’t find <a href="http://api.rubyonrails.org/">Rails documentation</a> useful enough simply because it didn’t have these two simple but very powerful features.</p> +<p>Sure, there’s the <a href="http://www.railsdocumentation.org/">Rails Documentation Project</a> which provides more organized docs, and <a href="http://www.noobkit.com/">Noobkit</a> does a nice job with its search-as-you-type feature… but still is not quite enough: you’d expect something much better than that for something like Rails!h3. Introducing Rails-Doc.org</p> +<p style="float:right;"><img src="/files/railsdoc_logo_sm.png" alt="" /></p> +<p><a href="http://www.rails-doc.org">Rails-Doc.org</a> focuses on providing a better interface to Rails documentation by offering two key features:</p> +<ul> + <li>A powerful, fast and useful document search</li> + <li>The possibility to add notes to Rails documentation</li> +</ul> +<p>When the app went live, I immediately registered (it’s free of course) and started playing with it…</p> +<h4>Search as you type…</h4> +<p>The first thing I did was trying the search features, of course. I started typing “rout” for Routing, and I was immediately shown a list of matches:</p> +<p><img src="/files/rails-doc_search.gif" alt="" /></p> +<p>It took a small fraction of a second to load the matches, which makes me think that definitely they have all the names indexed somewhere. Nevertheless, it was a pleasant surprise: normally, these search-as-you-type utilities are not that refined!</p> +<p>All you need to do is start typing at least three letters, and you get results, if any. <br /> +if you press <span class="caps">ENTER</span>, you get automatically redirected to the first result. This can be good, but maybe it would have been nicer to load a “traditional” list of results, but it depends on your taste, really.</p> +<h4>…or browse through the namespaces</h4> +<p>Alternatively, it is possible to browse the docs in the more traditional way, i.e. according to their class or module: the <strong>Browse</strong> page does just that: it lists <em>all</em> Rails classes and modules, regardless of the nesting. But there’s more: a little roundy icon precedes each class name, to indicate whether the documentation is present, and to what degree:</p> +<p><img src="/files/rails-doc_icons.gif" alt="" /></p> +<p>This is an interesting concept: in this way, in theory, people should contribute to the documentation where it’s more needed.</p> +<p>Each reference page is very neatly re-formatted: you can hardly imagine it’s actually the same content included in Rails’ RDoc pages!</p> +<p><img src="/files/rails-doc_document.gif" alt="" /></p> +<p>Finally, another nice addition is the <strong>Related</strong> column, which lists links to other items which are related to the current topic:</p> +<p><img src="/files/rails-doc-related.gif" alt="" /></p> +<h3>Contribute, contribute, contribute!</h3> +<p>You have to register for something, don’t you? Yes. If you register, you can post notes to any document. Simple enough, all you have to do is to click the <strong>Add Note</strong> button and a form will slide down for you to fill in:</p> +<p><img src="/files/rails-doc_note1.gif" alt="" /></p> +<p>As you start typing, you’ll notice that a preview of the note is displayed instantly: as you can use SimpleMarkup to write notes, exactly like in RDoc, this feature can be very handy:</p> +<p><img src="/files/rails-doc_note2.gif" alt="" /></p> +<p>What if there’s no documentation for a particular class or method? You’ll get a warning like this one:</p> +<p><img src="/files/rails-doc_nodoc.gif" alt="" /></p> +<p>The idea behind this is that, if you provide some useful insights, they’ll eventually end up in Rails core documentation.</p> +<h3>An Short Interview with Mikael Roos, from Nodeta</h3> +<p>Before the application went live, I was lucky enough to get Mikael Roos to answer to some of my questions. Here’s the full interview…</p> +<h4>What are you actually trying to do on Rails-Doc.org?</h4> +<p>The initial goal of the project is to provide the existing documentation in a more accessible way, most importantly to provide a lightning fast search feature that gives weighted results based on the<br /> +quality and amount of documentation. This we have already accomplished, and all remaining issues are related to browser compatibility. Another initial goal is to present a smooth interface for creating inline notes to<br /> +the documentation so that Rails developers can post notes about certain methods etc. for themselves and others to draw knowledge from.</p> +<p>Our longer-term goal (N.B. we are an agile project, so long-term means, say, three months) is to provide a way for the active members of the Rails community to improve the existing documentation based on the posted notes<br /> +to create an extended documentation that could optimally even be made in to a patch and would find its way back into the actual Rails source.</p> +<p>Another clear and obvious goal is to keep improving the service steadily as we progress toward the goals that I mentioned above.</p> +<h4>Could you spend a few words on the “development process” followed by your company to develop this app? Did I read the word “Scrum” somewhere? Am I correct?</h4> +<p>Yes, our development process of choice is Scrum. The core team is only three members, one backend developer, one backed/frontend develope and one frontend developer/UI specialist. I feel the team is optimal in many ways.<br /> +The team also has a few more experienced developers who are primarily active in other projects to ask questions from, one of whom is also the acting product owner on the Rails-doc project (that’s me!).</p> +<h4>Did you develop it in three months, or…?</h4> +<p>The first release was developed in three <span class="caps">SPRINTS</span>, not months – so what I’m saying is the first release was developed in five weeks (first sprint was mostly introductory and lasted a week, the next two sprints, first<br /> +development and then stabilization, were two weeks each). However, it is a <span class="caps">FIRST</span> <span class="caps">RELEASE</span>, which means the app is by all means not complete, but since we make software in a very agile way, it’a all about “Ship, ship, ship!”.</p> +<h4>What is <a href="http://www.nodeta.fi">Nodeta</a>, exactly? My Finnish is a bit rusty nowadays…</h4> +<p>Nodeta is a software development company that focuses on web software. We employ a highly agile and effective process. We have worked both on light independent projects and in the environment of large global enterprises.<br /> +There are currently 10 Nodetans.</p> +<p>Rails-Doc.org is a pilot project for your new shiny app, ApiDock. Is it an open source app?</p> +<p>Unfortunately, I cannot go into details about APIdoc yet. What I can tell is that it is developed with Rails and that it won’t be open source, but rather it would optimally be offered as a service, which after all is what<br /> +the word “app” on the web means these days. Open source projects could however use it for free, sort of in the spirit of GitHub.</p> +<p>It will also most likely be separately targeted to larger companies.</p> +<h4>Can you give me more technical details about the way keyword search is performed? Are you indexing/tagging documentation beforehand?</h4> +<p>There will probably be a blog post on the <a href="http://blog.nodeta.fi">Nodeta blog</a> about the search and how it works after the first release comes out.</p> +<h4>What about the social side of it: you’re hoping people will contribute with notes, which will then be collected and integrated in the documentation correct? Do you have any moderation or anti-spam precaution?</h4> +<p>The quality of notes is judged in a social way. Notes can be thanked by other users and notes that get many thanks are showed in a more prominent way. Registration will be required in order to post notes and the registration will feature a captcha.</p> +<h4>Will contributors be credited somehow? Who can contribute and at what level?</h4> +<p>Anybody can post notes and good notes get thanks and thus so do their posters. Users that get lots of thanks will be later asked to become core users that can alter the extended documentation (not in the first<br /> +release.)</p> +<h4>You want to blow out competition and that you don’t want to fail: sounds a good plan! How is Rails-Docs different from other similar apps?</h4> +<p>We think that our app is the first that is serious about making things happen. We think about users first and above all at this stage our search feature is frankly unparallelled.</p> +<h4>Do you have DHH’s seal of approval? Will you? Is there any copyright issue with your domain name?</h4> +<p>Time will tell what <span class="caps">DHH</span> thinks. We did contact him just a few days ago to ask what his thoughts about all this are and are waiting for his comments. I doubt there is any wrinkles with copyright as Rails-doc itself is a completely non-profit project.</p> +<h4>What about doing something similar for the whole Ruby language? Ruby docs may also be easier, in a way…</h4> +<p>It is possible that we might do just that but right now it’s all about Rails.</p> +<h3>The Bottom Line</h3> +<p>Rails-Doc.org is definitely an interesting project, which has all the potential to become a powerful, Rails-powered service. Sure, it’s not open source and this can be a bit of a letdown for some: but after all people flocked to GitHub when it opened, didn’t they?</p> +<p>The search capabilities of Rails-Doc.org are definitely a very important step forward in making Rails documentation more accessible and easier to use, but the killer feature is definitely the possibility to add notes, if used wisely.</p> +<p>I’ll be watching this project closely and I’ll pay particular attention on what happens to the community’s contributions: will it really be useful? Will it really help creating documentation patches to Rails core? Only time will tell, of course.</p>
@@ -0,0 +1,212 @@
+----- +title: "Rails-inspired PHP frameworks" +content-type: article +subtitle: "A roundup of six different PHP frameworks inspired by Ruby on Rails" +popular: true +timestamp: 1146661020 +tags: "frameworks|review|cakephp|rails" +----- +<p>There are various articles online examining many <span class="caps">PHP</span> frameworks, providing short reviews or comparative charts, but I could not find yet an article examining the so called <em>“Rails-inspired frameworks”</em> anywhere on the web, so I decided to write my own…</p> +<blockquote> +<p><strong><span class="caps">IMPORTANT</span> <span class="caps">UPDATE</span>:</strong> I do no longer recommend the CakePHP framework anymore due to the <a href="http://www.h3rald.com/blog/42">unprofessionalism of some member of its development team</a>. My site is now powered by Ruby on Rails and I totally lost interest in <span class="caps">PHP</span> and any <span class="caps">PHP</span> framework. If you are looking for a decent web framework, try <a href="http://www.rubyonrails.org">Ruby on Rails</a> (for Ruby), <a href="http://www.djangoproject.com/">Django</a> (for Python) or <a href="http://catalyst.perl.org/">Catalyst</a> (for Perl).<br /> +I’m talking about those <span class="caps">PHP</span> frameworks who give at least part of their success to Ruby on Rails<sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup>, but don’t call them <em>clones</em> or <em>ports</em> as some of their creators may get offended.</p> +</blockquote> +<p style="float:left;"><img src="/img/pictures/rails.gif" alt="" /></p> +<p>Since Rails shocked the world with an easy-to-use, powerful and semi-sentient web development framework, web development is not the same anymore: everything must be done efficiently, quickly and you <em>have</em> to produce a Web 2.0 compliant public beta after X days/weeks/months or your work is simply not useful to anybody. Try doing that with the traditional <span class="caps">PHP</span> spaghetti code: you can’t, it’s too much, it will be too tangled up and in the end you’ll lose your mind trying to find that <em>small insignificant bug</em> which makes your web application completely useless.</p> +<p>Yes, you could use Rails, but maybe you don’t know or don’t want to learn Ruby, your host doesn’t support it, your boss loves <span class="caps">PHP</span> etc. etc. If you’re in this situation or you simply would like to know what’s going on at the <span class="caps">PHP</span> front of the Rails Clone War, you should keep reading this article.</p> +<p>I’d like to introduce – briefly – six Rails-inspired <span class="caps">PHP</span> frameworks and compare them with each other, to point out their features, their pros and cons.</p> +<blockquote> +<p><em><strong>Disclaimer:</strong> I’m a CakePHP<sup class="footnote" id="fnr3"><a href="#fn3">3</a></sup> fan, this site has been built with CakePHP and I even wrote something<sup class="footnote" id="fnr4"><a href="#fn4">4</a></sup> about it in the past. This makes me inevitably partial and more familiar with this particular framework, but I’ll try my very best to provide a relatively objective analysis. Obviously frameworks which are not based on the <span class="caps">MVC</span> architechture and that weren’t inspired by Ruby on Rails have not been included, so forget things like <span class="caps">PRADO</span>, Qcodo, eZComponents, or even Mojavi: it’s not that they are “bad”, they’ve just been left out because they are not pertinent to this article</em></p> +</blockquote> +<h3>CakePHP</h3> +<p style="float:right;"><img src="/img/pictures/CakePHP_1.0.png" alt="" /></p> +<p><strong>Website:</strong> <a href="http://www.cakephp.org/">www.cakephp.org</a><br /> +<strong><span class="caps">PHP</span> version:</strong> PHP4 and PHP5<br /> +<strong>License:</strong> <span class="caps">MIT</span><sup class="footnote" id="fnr5"><a href="#fn5">5</a></sup><br /> +<strong>Download size (.tar.gz):</strong> 184KB<br /> +<strong>Supported Databases:</strong> MySQL, PostgreSQL, SQlite, MS <span class="caps">SQL</span> + any other supported by ADOdb or <span class="caps">PEAR</span>::DB database abstraction layers<br /> +<strong>Beginner’s Tutorial</strong>: <a href="http://wiki.cakephp.org/tutorials:blog_tutorial_-_1">Blog Tutorial</a></p> +<p><strong>Official Description:</strong><br /> +<em>“Cake is a rapid development framework for <span class="caps">PHP</span> which uses commonly known design patterns like ActiveRecord, Association Data Mapping, Front Controller and <span class="caps">MVC</span>. Our primary goal is to provide a structured framework that enables <span class="caps">PHP</span> users at all levels to rapidly develop robust web applications, without any loss to flexibility.”</em></p> +<p><strong>PROs:</strong></p> +<ul> + <li>Lightweight, not bloated, containing only essential code</li> + <li>Runs both on PHP4 and PHP5</li> + <li>No configuration needed – except for a stupidly short database configuration file and a few constants which <em>can</em> be modified. You can literally start baking in less than five minutes</li> + <li>Extended table association support, allowing the creation of complex database architechtures</li> + <li>Extremely logical and functional directory structure: better than Rails, if you ask me.</li> + <li>Enhanced <span class="caps">AJAX</span> support through the <span class="caps">AJAX</span> and Javascript view helpers</li> + <li>useful “bake” command line script to generate parts of the code automatically</li> + <li>Very active community and plenty of <em>satellite sites</em></li> + <li>Suitable for every kind of website, from the small personal site to the advanced e-business application.</li> +</ul> +<p><strong>CONs:</strong></p> +<ul> + <li>No “official” internationalization support for now, but it will be included in the next milestone.</li> + <li>It does not take fully advantage of PHP5 features</li> + <li>Official documentation still needs some some improvement, although now it seems pretty complete and exhaustive.</li> +</ul> +<p><strong>Comments:</strong><br /> +CakePHP is my personal favorite: easy to learn, easy to use,multi-purpose and not bloated. Cake’s philosophy is not to include unnecessary code in the framework unless it’s absolutely necessary for the framework itself, as a result, 3rd-party libraries are not included in the official releases, but may be seamlessly integrated with the framework <em>if developers need them</em>. <br /> +Cake’s success is partly determined – at least initially – by the fact that it can run fine with no limitations on PHP4, while other similar frameworks don’t. Although this may still be one of its most obvious strengths, it must be said that Cake seems to go in the right direction, taking only the best from Rails, without forcing developers into complex and pointless adaptations, and evolving into a great framework created <em>in <span class="caps">PHP</span>, for <span class="caps">PHP</span></em>.</p> +<h3>Symfony</h3> +<p style="float:right;"><img src="/img/pictures/symfony.gif" alt="" /></p> +<p><strong>Website:</strong> <a href="http://www.symfony-project.com/">www.synfony.project.com</a><br /> +<strong><span class="caps">PHP</span> version:</strong> PHP5<br /> +<strong>License:</strong> Symfony<sup class="footnote" id="fnr6"><a href="#fn6">6</a></sup><br /> +<strong>Download size (.tgz):</strong> 1255KB<br /> +<strong>Supported Databases:</strong> MySQL, PostgreSQL, SQLite, Oracle, MS <span class="caps">SQL</span> + any other supported by Creole database abstraction layer<br /> +<strong>Beginner’s Tutorial</strong>: <a href="http://www.symfony-project.com/tutorial/my_first_project.html">My first project</a></p> +<p><strong>Official Description:</strong><br /> +<em>“Based on the best practices of web development, thoroughly tried on several active websites, symfony aims to speed up the creation and maintenance of web applications, and to replace the repetitive coding tasks by power, control and pleasure. […]</em><br /> +<em>Symfony is an object-oriented PHP5 framework based on the <span class="caps">MVC</span> model. Symfony allows for the separation of business rules, server logic and presentation views of a web application. It also contains numerous tools and classes aimed at shortening the development time of a complex web application."</em></p> +<p><strong>PROs:</strong></p> +<ul> + <li>Fully featured framework, includes everything you might ever need (see CONs, below)</li> + <li>Full native internationalization support</li> + <li>Truly excellent documentation, tutorials, wiki, book, screencasts, <span class="caps">API</span>, real-world examples, etc. etc.</li> + <li>Code generators</li> + <li>Various “pre-built” modules/libraries for the most common tasks</li> + <li>It was not inspired only by Rails, but borrows concepts and practices from various other frameworks</li> + <li>Good community support</li> +</ul> +<p><strong>CONs:</strong></p> +<ul> + <li>Seems too big compared to the others, too many “extras” which may not be useful to <em>all</em> developers</li> + <li>PHP5 only</li> + <li>Confusing and disorganized directory structure</li> + <li>Uses too many configuration files, not suitable for <em>simple</em> projects</li> + <li>Steep learning curve</li> +</ul> +<p><strong>Comments:</strong><br /> +Symfony is really an interesting framework: it’s perhaps the most <em>complete</em> in terms for features and documentation. The only problem I have with it is that it just seems too complex and rather difficult to learn if compared to the others, which can do <em>almost</em> the same things (or will soon be able to) in a <em><span class="caps">MUCH</span></em> simpler way. A nice blend of <span class="caps">MVC</span>, pre-built components, command line generators and <span class="caps">YAML</span>/Propel configuration files, but perhaps a bit <em>disorganized</em> in its internal structure, unlike its wonderful documentation and support section.</p> +<h3><span class="caps">PHP</span> on Trax</h3> +<p style="float:right;"><img src="/img/pictures/phpontrax.jpg" alt="" /></p> +<p><strong>Website:</strong> <a href="http://www.phpontrax.com/">www.phpontrax.com</a><br /> +<strong><span class="caps">PHP</span> version:</strong> PHP5<br /> +<strong>License:</strong> <span class="caps">MIT</span><br /> +<strong>Download size (.tgz):</strong> 843KB<br /> +<strong>Supported Databases:</strong> Any database supported by <span class="caps">PEAR</span>::DB<br /> +<strong>Beginner’s Tutorial</strong>: <a href="http://svn.phpontrax.com/wiki/HowToCreateATraxApplication">How to create a Trax application</a></p> +<p><strong>Official Description:</strong><br /> +<em>“Php On Trax (formerly Php On Rails) is a web-application and persistance framework that is based on Ruby on Rails and includes everything needed to create database-backed web-applications according to the Model-View-Control pattern of separation.”</em></p> +<p><strong>PROs:</strong></p> +<ul> + <li>Simple, logical, essential: a true RoR port to PHP5</li> + <li>Code generators, like Rails</li> + <li>Zero configuration (like Rails and Cake</li> + <li>Easy and logical directory structure (the same as Rails)</li> + <li>Supports table associations, but more in a way which is more similar to Ruby on Rails than Cake.</li> +</ul> +<p><strong>CONs:</strong></p> +<ul> + <li>Lack of documentation compared to the others</li> + <li>Trying to port Ruby on Rails to <span class="caps">PHP</span>, ignoring why RoR was not built in <span class="caps">PHP</span> in the first place<sup class="footnote" id="fnr7"><a href="#fn7">7</a></sup></li> + <li>No internationalization or other advanced functionalities</li> + <li>PHP5 only</li> + <li>Small community</li> + <li><span class="caps">DBO</span> class based only on <span class="caps">PEAR</span>::DB</li> +</ul> +<p><strong>Comments:</strong><br /> +In my opinion this project aims too much to be a Rails-clone to acquire a proper consensus. Trying to port something to another language is not good, especially in the case of Rails and Ruby. This framework looks somehow like an old version of CakePHP, which evolved slightly but always remained anchored to its beliefs of building a Rails port for <span class="caps">PHP</span> (even in the name!). Some may say that this is a lost battle since the beginning – or better, since before it started – but others found that <span class="caps">PHP</span> on Trax can be the easiest way to switch from Ruby on Rails to a <span class="caps">PHP</span> equivalent. Who is going to do that? Well, Ruby programmers <em>forced</em> to develop in <span class="caps">PHP</span>, maybe. Not too good, but not too bad either.</p> +<h3>Code Igniter</h3> +<p style="float:right;"><img src="/img/pictures/codeigniter.jpg" alt="" /></p> +<p><strong>Website:</strong> <a href="http://www.codeigniter.com/">www.codeigniter.org</a><br /> +<strong><span class="caps">PHP</span> version:</strong> PHP4 and PHP5<br /> +<strong>License:</strong> CodeIgniter<sup class="footnote" id="fnr8"><a href="#fn8">8</a></sup><br /> +<strong>Download size (.zip):</strong> 609KB<br /> +<strong>Supported Databases:</strong> MySQL, PostgreSQL, SQLite, MySQLi, MS <span class="caps">SQL</span> + <span class="caps">ODBC</span><br /> +<strong>Beginner’s Tutorial</strong>: <a href="http://www.codeigniter.com/videos/ci_intro.mov">Hello World! Introduction to Code Igniter</a> [video]</p> +<p><strong>Official Description:</strong><br /> +<em>“Code Igniter is an Open Source Web Application Framework that makes writing kick-ass <span class="caps">PHP</span> programs simple as apple pie. […] Designed to enable, not overwhelm, Code Igniter is a powerful <span class="caps">PHP</span> framework with a very small footprint, built for <span class="caps">PHP</span> coders who need a simple and elegant toolkit to create full-featured web applications.</em><br /> +<em>If you’re a developer who lives in the real world of shared hosting accounts and clients with deadlines, and if you’re tired of ponderously large and thoroughly undocumented frameworks that require rocket science to understand, Code Igniter might just be the right tool for you."</em></p> +<p><strong>PROs:</strong></p> +<ul> + <li>Good and organized documentation</li> + <li>Zero configuration (like Rails and Cake)</li> + <li>Includes various classes and libraries for common tasks</li> + <li>Compatible with PHP4 and PHP5</li> + <li>Medium-sized community</li> + <li>Intuitive directory structure</li> + <li>Ships with the full user guide included in separate <span class="caps">HTML</span> files</li> +</ul> +<p><strong>CONs:</strong></p> +<ul> + <li>No full (“written”) tutorials except the videos!</li> + <li>Relatively new to the scene, but growing</li> + <li>Does not seem to support table associations.</li> +</ul> +<p><strong>Comments:</strong><br /> +People on the Net seem to be rather enthusiastic about this framework: where there’s a thread about the <em>big ones</em> (Cake and Symfony), there’s always, someone who pops in suggesting to try out Code Igniter. I personally think this can be a true bless for small/medium sized projects, however, I’d opt for CakePHP or Symfony for a large scale application: something is missing, e.g., most notably, table associations.</p> +<h3>Biscuit</h3> +<p style="float:right;"><img src="/img/pictures/biscuit.gif" alt="" /></p> +<p><strong>Website:</strong> <a href="http://biscuitproject.tigris.org/">biscuitproject.tigris.org</a><br /> +<strong><span class="caps">PHP</span> version:</strong> PHP4 and PHP5<br /> +<strong>License:</strong> <span class="caps">MIT</span><sup class="footnote" id="fnr5"><a href="#fn5">5</a></sup> <br /> +<strong>Download size (.zip):</strong> 240KB<br /> +<strong>Supported Databases:</strong> Any database supported by <span class="caps">PEAR</span>::DB<br /> +<strong>Beginner’s Tutorial</strong>: <a href="http://bennolan.com/biscuit/tutorial.html">Creating a simple application using the Biscuit <span class="caps">MVC</span> framework</a></p> +<p><strong>Official Description:</strong><br /> +<em>“The mission of this project is to port Ruby on Rails to PHP5 (minus the Ruby part ;-)”</em></p> +<p><strong>PROs:</strong></p> +<ul> + <li>Zero configuration, easy to deploy</li> + <li>Runs both on PHP4 and PHP5</li> + <li>Simple to learn</li> +</ul> +<p><strong>CONs:</strong></p> +<ul> + <li>Still under development and incomplete</li> + <li>Offers a limited subset of the features and functionalities offered by competitors: no internationalization, no table associations, no scaffolding…</li> + <li><em>“Documentation coming soon”</em></li> + <li>Almost non-existent community</li> +</ul> +<p><strong>Comments:</strong><br /> +This project started as an attempt to create something simpler than CakePHP and more similar to Rails. I’m not sure whether the project is still active or not, since the last “release” on the former’s developer site is dated August 2005. Still in early stage – or dead.</p> +<h3>Pipeline</h3> +<p style="float:right;"><img src="/img/pictures/livepipe.jpg" alt="" /></p> +<p><strong>Website:</strong> <a href="http://livepipe.net/pipeline/">livepipe.net/pipeline/</a><br /> +<strong><span class="caps">PHP</span> version:</strong> PHP5<br /> +<strong>License:</strong> Pipeline<sup class="footnote" id="fnr9"><a href="#fn9">9</a></sup><br /> +<strong>Download size (.zip):</strong> 288KB<br /> +<strong>Supported Databases:</strong> SQLite<br /> +<strong>Beginner’s Tutorial</strong>: none</p> +<p><strong>PROs:</strong></p> +<ul> + <li>Simple directory structure</li> + <li>Suitable for small projects</li> + <li>Comes with various ready-made components</li> + <li>Supports table relationships</li> +</ul> +<p><strong>CONs:</strong></p> +<ul> + <li>PHP5-only</li> + <li>Too restrictive: only SQLite supported, <em>kindly suggests</em> developers to use its built-in features only</li> + <li>No documentation or tutorials, just the <span class="caps">API</span></li> + <li>Not suitable for large projects</li> + <li>Almost non-existent community</li> +</ul> +<p><strong>Comments:</strong><br /> +This project mainly borrowed the <span class="caps">MVC</span> architecture and some basic concepts from Rails, creating a simple PHP5 framework with personal/small websites in mind: it offers various built-in components which can be handy to most of us, supports <em>only</em> SQLite, and basically tells developers what to do. In my opinion it’s not flexible enough to be compared to the others, and it’s simply not suitable for anything other than small websites.</p> +<h3>Conclusions</h3> +<p>My favorite framework still remains CakePHP, it’s simple and yet powerful, easy to learn and use, mature, well supported and continuously improving. Symfony – at the moment – seems to be the one with most features and the best documentation, and it is an excellent and well supported project. The only problem I have with it is the scary amount of configuration files necessary to create an application: CakePHP doesn’t need any and can be used for (almost?) equally complex projects.<br /> +Although I didn’t have a chance to try them out, <span class="caps">PHP</span> on Trax is certainly the most faithful port of Ruby on Rails to <span class="caps">PHP</span>, but it lacks some of the features CakePHP and Symfony offer. Code Igniter may not be as advanced as the others, but its community seems to grow and its simplicity may appeal more users in the future…</p> +<p>At any rate, developers should <em>always</em> choose the best framework for their needs: I tried to write a quick comparative analysis of these six Rails’ “<span class="caps">PHP</span> children”, now it’s <em>your</em> turn, try out some of them, if you choose wisely you won’t be disappointed.</p> +<h3>Notes</h3> +<p class="footnote" id="fn1"><a href="#fnr1"><sup>1</sup></a> They are all distributed according to various Open Source licenses.</p> +<p class="footnote" id="fn2"><a href="#fnr2"><sup>2</sup></a> <a href="http://www.rubyonrails.org">Ruby on Rails</a> – Ruby framework for web development</p> +<p class="footnote" id="fn3"><a href="#fnr3"><sup>3</sup></a> <a href="http://www.cakephp.org">CakePHP</a> – Rapid [<span class="caps">PHP</span>] Development Framework</p> +<p class="footnote" id="fn4"><a href="#fnr4"><sup>4</sup></a> <a href="/articles/view/cakephp">CakePHP – A ‘tasty’ solution for <span class="caps">PHP</span> programming</a>, originally published on <a href="http://www.zzine.org/articles/cakephp">zZine Magazine</a></p> +<p class="footnote" id="fn5"><a href="#fnr5"><sup>5</sup></a> Open Source <a href="http://www.opensource.org/licenses/mit-license.php"><span class="caps">MIT</span> License</a>.</p> +<p class="footnote" id="fn6"><a href="#fnr6"><sup>6</sup></a> Symfony License:<br /> +<small><br /> +<blockquote><br /> +Copyright © 2004-2006 Fabien Potencier<br /> +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:</p> +<p>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</p> +<p><span class="caps">THE</span> <span class="caps">SOFTWARE</span> IS <span class="caps">PROVIDED</span> “AS IS”, <span class="caps">WITHOUT</span> <span class="caps">WARRANTY</span> OF <span class="caps">ANY</span> <span class="caps">KIND</span>, <span class="caps">EXPRESS</span> OR <span class="caps">IMPLIED</span>, <span class="caps">INCLUDING</span> <span class="caps">BUT</span> <span class="caps">NOT</span> <span class="caps">LIMITED</span> TO <span class="caps">THE</span> <span class="caps">WARRANTIES</span> OF <span class="caps">MERCHANTABILITY</span>, <span class="caps">FITNESS</span> <span class="caps">FOR</span> A <span class="caps">PARTICULAR</span> <span class="caps">PURPOSE</span> <span class="caps">AND</span> <span class="caps">NONINFRINGEMENT</span>. IN NO <span class="caps">EVENT</span> <span class="caps">SHALL</span> <span class="caps">THE</span> <span class="caps">AUTHORS</span> OR <span class="caps">COPYRIGHT</span> <span class="caps">HOLDERS</span> BE <span class="caps">LIABLE</span> <span class="caps">FOR</span> <span class="caps">ANY</span> <span class="caps">CLAIM</span>, <span class="caps">DAMAGES</span> OR <span class="caps">OTHER</span> <span class="caps">LIABILITY</span>, <span class="caps">WHETHER</span> IN AN <span class="caps">ACTION</span> OF <span class="caps">CONTRACT</span>, <span class="caps">TORT</span> OR <span class="caps">OTHERWISE</span>, <span class="caps">ARISING</span> <span class="caps">FROM</span>, <span class="caps">OUT</span> OF OR IN <span class="caps">CONNECTION</span> <span class="caps">WITH</span> <span class="caps">THE</span> <span class="caps">SOFTWARE</span> OR <span class="caps">THE</span> <span class="caps">USE</span> OR <span class="caps">OTHER</span> <span class="caps">DEALINGS</span> IN <span class="caps">THE</span> <span class="caps">SOFTWARE</span>.</p> +</blockquote> +<p></small></p> +<p class="footnote" id="fn7"><a href="#fnr7"><sup>7</sup></a> Read the comments by David Heinemeier Hansson on <a href="http://www.37signals.com/svn/archives/000606.php">Ruby on Rails to Basecamp</a></p> +<p class="footnote" id="fn8"><a href="#fnr8"><sup>8</sup></a> CodeIgniter <a href="http://www.codeigniter.com/user_guide/license.html">License Agreement</a></p> +<p class="footnote" id="fn9"><a href="#fnr9"><sup>9</sup></a> Pipeline is licensed under the same terms as the Symfony framework [Copyright © 2006 Picora Pipeworks <span class="caps">LLC</span>].</p>
@@ -0,0 +1,97 @@
+----- +title: "Rails-powered Open Source Killer Apps, Anyone?" +content-type: article +timestamp: 1225618860 +tags: "rails|ruby|writing|rant" +----- +<p>Lately I’ve been meandering around the web to find a good <span class="caps">CMS</span> for a family site I’d like to set up. <br /> +Why a <span class="caps">CMS</span>? Well, for a few simple reasons:</p> +<ol> + <li>I don’t have enough free time to fiddle with Rails and make my own (I’m an <em>Hobbyist Programmer™</em>: I code for fun and enlightment, not for money)</li> + <li>Even if I had the time, I’m <em>sure</em> there are plenty of CMSes out there which suits my needs.</li> +</ol> +<p>It turns out that reason #2 is not really applicable in this case, especially if we restrict the field to Ruby + Rails/Merb/<insert cool <span class="caps">DRY</span> framework here>.h3. Rails-powered CMSes</p> +<p><em>Name a Rails-powered <span class="caps">CMS</span>, quick!</em></p> +<p>Easy: <a href="http://radiantcms.org/">Radiant</a>.</p> +<p>Hmm, no. As much as I do like Radiant, it really cannot be considered a general-purpose <span class="caps">CMS</span>, can it? When it comes to build nearly-static sites in a clean and neat way I’d pick it any day, but it lacks quite a lot of community features like comments, ability to create forums, etc. etc. It does, however, support multilingual content in a rudimentary, yet effective way: create each translated page manually and use consistent <span class="caps">URL</span> conventions (/en/about, /it/about, etc.).</p> +<p>I’m not saying that there aren’t enough CMSes built on Rails, just that there’s no “killer app” in the pack. A “killer” <span class="caps">CMS</span> would be something as powerful as Drupal, but easier to use and more modular.</p> +<p>Here’s an incomplete list of the Rails CMSes I’m currently aware of:</p> +<table> + <tr> + <th>Name </th> + <th>First Impressions/Comments </th> + </tr> + <tr> + <td> <a href="http://radiantcms.org/">Radiant</a> </td> + <td> Mature, suitable for administering static sites </td> + </tr> + <tr> + <td> <a href="http://www.typosphere.org/">Typo</a> </td> + <td> Mature, one of the best blogging engines out there (my opinion is slightly biased though) </td> + </tr> + <tr> + <td> <a href="http://mephistoblog.com/">Mephisto</a> </td> + <td> Mature, blogging engine </td> + </tr> + <tr> + <td> <a href="http://rubricks.org/index_en.html">Rubricks</a> </td> + <td> Under development, basic features if compared to other non-Rails solutions </td> + </tr> + <tr> + <td> <a href="http://slateinfo.blogs.wvu.edu/">Slate</a> </td> + <td> Missing a lot of features if compared to competitors </td> + </tr> + <tr> + <td> <a href="http://beast.caboo.se">Beast</a> </td> + <td> Forum engine, extremely ligtweight </td> + </tr> + <tr> + <td> <a href="http://www.railfrog.com/">RailFrog</a> </td> + <td> Not sure if it’s still being updated, not so many features </td> + </tr> + <tr> + <td> <a href="http://zenadmin.org/en">Zena</a> </td> + <td> Alpha, looks promising although it doesn’t offer many features </td> + </tr> + <tr> + <td> <a href="http://simplelog.net/">simplelog</a> </td> + <td> Yet another blogging engine. Simple and easy to use </td> + </tr> + <tr> + <td> <a href="http://rcms.oopen.de/">oooopen rcms</a> </td> + <td> Early development stage (dead?), minimal feature set </td> + </tr> + <tr> + <td> <a href="http://www.geegocms.com/">Geego</a> </td> + <td> Multilingual, not so many out-of-the-box features </td> +</table> +<p><em>[Psst, if you know any other Rails <span class="caps">CMS</span> I missed out, mention it in a comment and I’ll update this table!]</em></p> +<h3>Developing Proprietary Web Applications with Rails</h3> +<p>What’s wrong with all of these? Normally one of three things: either they are mature, production-ready but focused on only one particular function (blog, forum, etc.), or they are still too new to be used seriously or they are slowly heading towards oblivion.</p> +<p>What’s going on here? Rails is a damn fine framework which offers all the modularity and power you need to build sites! Why isn’t there a fully fledged <span class="caps">CMS</span> to rival Drupal? <br /> +I think that part of the problem is that Rails is <em>too</em> good. <strong>Why build a <span class="caps">CMS</span> from scratch when you can develop a web site from scratch much more easily, tailored to your customer?</strong></p> +<p>Rails has been used to build a few “mainstream” sites like Twitter (no bashing please!), Basecamp, GitHub and many more. What do these sites have in common? <em>They are not open source</em>. You cannot deploy your own Twitter on your server (You can with <a href="http://laconi.ca/trac/">Laconica</a>, though), you cannot deploy your own Basecamp to your server (you can with <a href="http://www.projectpier.org/">ProjectPier</a>, an open source fork of <a href="http://www.activecollab.com/">ActiveCollab</a>).</p> +<p>It feels like that even though Rails itself is open source, <strong>there aren’t that many open source Rails-powered projects after all</strong>. Maybe there are, but they do not really compare with similar alternatives offered in other languages. This is the reason why, despite its utter ugliness, <span class="caps">PHP</span> is still the <em>Open Source King of the Web</em>, and that’s very, very sad in my opinion.</p> +<h3>Dreams on Rails</h3> +<p>The annoying thing is that Rails <em>is suitable</em> to build CMSes, and good ones, too! Take Radiant and Typo, for example: they both excel in their own ways, <em>in their own worlds</em>.<br /> +Theorethically speaking, <strong>there’s no reason why someone couldn’t develop a modular system to glue different components together</strong>: you’d need common user administration and common workflow, a few hooks, and a solid set of conventions on how to build third-party components.<br /> +Hell guys, the folks at Drupal developed a huge (and successful) product with a million different ways to extend it <em>in <span class="caps">PHP</span></em>. Even without using <span class="caps">OOP</span>! Every damn hook in the core is a <em>function</em>.</p> +<p>What does it take to do something like this using Rails, o Merb, or whatever else you like? You already have a very solid and consistent framework to build on (Rails), a way to automate tasks (Rake) and a language which lets you do everything you want, in a very elegant and organized way.</p> +<p><strong>Rails lacks successful open source projects, in particular CMSes</strong>. I wish someone could fix this: not by coding the <em>n^th^</em> <span class="caps">CMS</span> with the only two or three features you need, but by developing an <em>high level application framework</em> to build complex, dynamic and interactive web sites. Don’t even develop the whole damn thing: just come up with a set of conventions on how to extend a very basic core, and tell people how they can contribute, or even integrate existing applications into it.</p> +<p>The community will do the rest, hopefully… Or maybe are you too busy trying to roll out your newest, closed source startup?</p> +<p><strong>If someone decides to develop such a powerful, high-level framework and is determined to keep it user-friendly and open source, I hereby promise to write the documentation for it</strong>, articles, and books. And I’m not kidding.</p> +<h3>[<span class="caps">UPDATED</span>] A Glimpse of Hope</h3> +<p>A few of the commenters of this article brought up a few interesting points and actually gave me a little bit of hope. <a href="http://salesforceonrails.com/">Luigi Montanez</a> pointed out that Rails was built to help developers build web sites. For now, Rails deployment isn’t as seamless as end users would like it, so there’s no point creating a killer app for such users if they can’t even get it to run on their $2/month shared hosting environment.<br /> +Nevertheless, there seems to be at least <em>three</em> different open source “social network engines” powered by Rails:</p> +<ul> + <li><a href="http://portal.insoshi.com/">Insoshi</a></li> + <li><a href="http://www.communityengine.org/">Community Engine</a></li> + <li><a href="http://lovdbyless.com/">Lovd By Less</a></li> +</ul> +<p>These are not CMSes <em>in the early 2000’s sense</em>, obviously, but they do provide the basis to effectively build a late Web 2.0-ish community web site. Each one of these project seems stable and mature enough to be used in production, but surely not as well-known as many other <span class="caps">PHP</span>-based solutions.</p> +<p>On the other hand, <a href="http://priit.mx.ee/">Priit Tamboom</a> mentioned <a href="http://adva-cms.org/">adva cms</a>, a project still in alpha stage which aims to be more traditional and site-agnostic:</p> +<blockquote> +<p>“[…] Different from other Rails applications the all-engines approach of adva cms allows you to build your own applications on top of it. It also makes it very flexible and extensible: our plan is to make it possible to only pick those engines/features that you really need for your application and omit the rest. As they are still all designed to work together seemlessly and reuse each others functionality the whole plattform feels much more consistent to a collection of similar but separate Rails applications. […]”</p> +</blockquote> +<p>This sounds <em>exactly</em> like what I was hoping would come out from the Rails community: something in between a web development framework and an high-level <span class="caps">CMS</span>. <br /> +I’m definitely going to try it out (it’s an ideal weekend project) and I’ll report back once I know more about it.</p>
@@ -0,0 +1,11 @@
+----- +title: "Rails to Italy 2007" +content-type: article +timestamp: 1183806900 +tags: "rails|italy" +----- +<p>So it looks like there will be a “Rails conference in Italy”, after all. In Pisa as well, and that’s maybe even less than 2 hours drive from where I live (Genoa)!</p> +<p><em>Sounds cool!</em></p> +<p>Well, the entrance fee put me off a bit, I daresay (€89 if you book before August 1st, more otherwise), but it would be great to go there.<br /> +They are actually looking for speakers too, pity that at the moment I don’t have anything prepared, but who knows… There’s free entrance (and beer) for speakers, apparently, which it wouldn’t be bad, but unfortunately my girlfriend would have to pay though, of course.</p> +<p>We’ll see what happens, for now I’m just going to promote the thing on my site (see the banner on the side).</p>
@@ -0,0 +1,101 @@
+----- +title: "A pizza with Randal Schwartz" +content-type: article +subtitle: "Talking about open source, programming, emacs and technical writing" +popular: true +timestamp: 1289738129 +tags: "opensource|programming|italy" +pdf: true +----- + + <section class="section"> +<p>I am an avid <a href="http://twit.tv/FLOSS"><span class="caps">FLOSS</span> Weekly</a> listener. Sometimes I may fall behind by a few episodes, but I normally manage to catch up: Randal Schwartz’ show is by far my favorite podcast.</p> +<p>You can imagine my reaction when I discovered that Randal was in Genoa, my city, ready to leave for yet another <a href="http://www.insightcruises.com/">InsightCruise</a>: I had to meet the guy, at all costs!</p> +<p>It turned out to be easier than I thought: I simply <a href="http://twitter.com/#!/h3rald/status/28962418438">asked him</a> if he fancied a pizza out on the way back from his cruise, and he said yes.</p> +<p>I also decided to invite <a href="http://www.agilesensei.com/">Claudio Perrone</a> as well, seeing that he’s back in Genoa on one of his Agile/Lean gigs. He said he didn’t know much about Perl, but he’d have liked to come as well. So there I was lining up a dinner out with two IT gurus at the same time.</p> +<p>Randal was staying at the <a href="http://www.hotelbristolpalace.it/">Bristol Palace Hotel</a>, and we met him at the lobby bar. In the end I persuaded my wife to come along as well, although she doesn’t know much about Perl either.<br /> +We shook hands with Capt. Neil [Bauman, of InsightCruises.com] and a few others of the cruise gang, then we were off to the restaurant.</p> +<p>It only took five minutes to realize that Randal was exactly like he sounds on his show: cheerful and chatty, eager to talk about technology and science. When you meet famous people face-to-face, there’s always a chance that they are not nice at all, but luckily this wasn’t the case: within minutes Randal was telling us all about <a href="http://news.motionx.com/category/motionx-gps/">MotionX-<span class="caps">GPS</span></a> (a very neat iPhone app that I highly recommend) like we had been buddies for ages.</p> + +After a rather bumpy bus ride (Italian evening drivers are well known for this), we got to <a href="http://www.ristorantepiedigrotta.it">Piedigrotta</a>, ordered some pizzas, and started talking. Little did we know that Randal loves talking and sharing stories about almost anything: we were chatting non stop for hours, and after dinner my wife and I invited everyone up to our place, to continue talking happily in front of a glass of our wine and... freshly-microwaved popcorn. + +Here's what we talked about, organized by topic for your convenience. I didn't record the conversation even if it would have made a hell of a show, but I'll do my best to quote him as faithfully as I can remember or paraphrase him without changing the meaning of his words. + +<aside class="important"> +<span class="note-title">Important</span>Randal, if you're reading this and you come across any misquotation, please let me know so I can amend them! + +</aside> + + +<section class="section"> +<header><h1 id="h_1" class="toc">Something more about Randal</h1></header> +<p><a href="http://www.stonehenge.com/merlyn/">Randal Schwartz</a> is a world-famous Perl guru, author of the <a href="http://www.oreillynet.com/pub/au/335">best Perl programming</a> on the market, and a very prolific <a href="http://www.stonehenge.com/merlyn/columns.html">column writer</a>.</p> +<p>Randal is not a full-time writer though (<q>“writing books doesn’t pay”</q>). His day job consists in being a “guru on-demand”: you can hire him to fix your code, refractor complex enterprise applications, or simply provide useful advice to IT managers. <br /> +Being the host of <span class="caps">FLOSS</span> Weekly is not a job, and Randal doesn’t do it for the money of course, but for passion: <q>“I’m trying my best to do one show per week, even when I am away”</q>, he said, and he does go off traveling around the world a lot!</p> +<p><q>“Once I was at home for 8 weeks and it felt really strange. I kept thinking I had to pack to go somewhere else”</q>. He’s been on nearly every Geek/Insight Cruises (51, if I remember correctly) and his <a href="http://www.stonehenge.com/merlyn/dot-plan.txt">travel plan</a> is always very busy.</p> +<p>I was extremely lucky to catch him on the way back from one of the few cruises in the Mediterranean! It must be a sign of some sort.</p> + +</section> + +<section class="section"> +<header><h1 id="h_2" class="toc">Open Source</h1></header> +<p>I have always tried to raise awareness about Open Source and Free Software among my friends, co-workers, and even managers. Sometimes it’s easy to make people realize that Free, Libre, Open Source Software matters, other times is much harder.</p> +<p>When Randal got half way through his pizza, I asked him if he had any tips on open source advocacy and on overcoming corporate resistance. I explained that the main concerns I get when I talk about open source in an enterprise environment are:</p> +<ul> + <li>the cost or support/training</li> + <li>the immaturity of the product and fear of it being abandoned at some point</li> + <li>overall, a high Total Cost of Ownership</li> +</ul> +<p>Randal was almost laughing at one point: <q>“why are people concerned about paying for support for open source software? Don’t they pay it already for proprietary applications?”</q>, also <q>“the chances for open source software being discontinued are the same, if not lower, than proprietary software. Plus, proprietary software often forces compulsory upgrades, and similar things that can eventually damage your business”</q>. Additionally, if I may add, in the unfortunate case that an open source project is abandoned or turns nasty, it is often forked, so at worst you always have the source code anyway.</p> +<p>Randal also pointed out that what really matters about an open source project is the community built around it. He mentioned that the <a href="http://www.mongodb.org/">MongoDb</a> guys that came on <a href="http://twit.tv/floss105"><span class="caps">FLOSS</span> Weekly #105</a> were really enthusiastic of having embraced open source. Unfortunately, some projects just don’t seem to get the whole idea behind open source at all: <em>community</em> vs. <em>enterprise</em> editions always makes me suspicious, and Randal agreed to an extent.</p> +<p><strong>In a nutshell, Open Source is not about the company or the license, it’s about the people and the community behind a project.</strong></p> +<p><q>“You should [re-]listen to one of my very first podcasts, the one with ”http://www.webmink.net/“>Simon Phipps</a>, the former Chief Open Source Officer at Sun”</q>, Randal told me in the end, and he’s right: <a href="http://twit.tv/floss39"><span class="caps">FLOSS</span> #39</a> is a must for anyone truly interested in the subject.</p> +<p>Seeing that Randal seemed to be perfectly happy to play with his iPhone, I went for the obvious question and asked him what he thought about Apple, and at the same time Claudio asked him what was his operating system of choice.</p> +<p><q>“OS X”</q>, admitted Randal, <q>“I use what gets the job done”</q>. In all things, there’s no point in being an extremist for the sake of argument, and being an open source advocate does not mean that you have to condemn every piece of proprietary software (at this point, Richard Stallman would have thrown up his pizza, had he been there —but he wasn’t).</p> +<p><q>“From a <span class="caps">GUI</span> point of view, Apple is still ahead of the competition: if others want to win, they have to come up with something better, and different. […]Ubuntu is getting there, but not quite yet.”</q></p> +<p>Randal also pointed out the importance of contributing to open source projects: <q>“you don’t have to code, you can just provide feedback, submit bug reports, write documentation, or test… I am the one who checks if git builds on a Mac, for example”</q>.</p> + +</section> + +<section class="section"> +<header><h1 id="h_3" class="toc">Programming</h1></header> +<p>Programming was another major topic of our discussion. Randal, after all, is a living Perl legend having written 6 Perl books and over 250 magazine columns. Unfortunately I don’t know much about Perl, and neither does Claudio. I am quite open-minded about languages—although I am slightly favorable towards Ruby—so I enjoyed every little bit of the discussion anyway.</p> +<p>Most of the discussion was about Perl 6, which was recently featured on <a href="http://twit.tv/floss140"><span class="caps">FLOSS</span> Weekly #140</a>. After listening to what Randal had to say about it, I am definitely going to try it out at some point (hopefully skipping Perl 5 altogether). <br /> +<q>“We [Perl programmers] say that Ruby is an alpha version of Perl 6”</q> said Randal, joking about the similarities between the two languages and the amount of time it took to come up with a working Perl 6 (which to date is still unfinished). He reckons Perl 6 will be used in production for small and medium projects within a few months, and he’s going to write a book about it.</p> +<p>He then briefly described what makes Perl 6 so special. The top feature we were talking about was grammars: the language offers the possibility to create grammars to parse other languages and even Perl 6 itself. Moreover, the Rakudo implementation running on the Parrot VM aims to implement the full Perl 6 specification in Perl 6 itself <q>“[…] therefore, at run time, a program is able to access the its syntax tree itself…”</q>, he said, while playing with an imaginary Perl 6 parse tree in the air.</p> +<p>We then moved on to Smalltalk, and both Claudio and I asked him a few questions about it, in particular about the whole concept of <em>image</em>, particularly in reference to the Squeak implementation. We observed how many programmers of other languages (Ruby included) end up going back to the origins (Smalltalk) and how Smalltalk is far from dead. <q>“It’s only a matter of getting used to it”</q>, said Randal when I asked him how to work with a Smalltalk image and how to distribute it, <q>“you program as you would in any other language, you can communicate with the rest of the world just fine. What you get in Smalltalk that you don’t get in most other languages, is the ability to inspect and work with the underlying source code of the objects at run time, thanks to the amazing reflection features the language offers”</q>.</p> +<p>At one point I had to asked Randal what he though about Haskell, having tried to learn it three times without succeeding: <q>“I have tried <em>ten</em> times to learn it myself, with no luck”</q>, he said. At least I’m not alone!</p> +<p>The discussion then shifted towards tools, and then of course text editors. I just had to remind him that I am a Vim guy. Randal looked at me smiling, and said: <q>“That’s fine. You <span class="caps">WILL</span> join us. Sooner or later you will join us… join us…”</q>.</p> +<p>Randal’s involvement in Emacs dates way back to the end of the 80s, and he has been using it ever since. He even contributed to it, back then, by writing pp.el, the pretty printer module.<br /> +<q>“I posted my code to the emacs mailing list, and Richard Stallman himself replied asking if he could include my code in Emacs. If you read Emacs acknowledgements, I’m there as well”</q>, said Randal, proudly.</p> +<p>I confess I almost felt the urge to give Emacs another try. I often get hyped up about things like this. If I had received such a reply from Richard Stallman, I would have probably sworn not to touch the Editor of the Beast ever again.</p> +<p><q>“Just try out Org mode. I didn’t know it very well myself until I had a show about it, but now realize why people should always load up an Emacs instance just to run Org mode.”</q>, said Randal again, talking about yet another <a href="http://twit.tv/floss136">recent show</a>.</p> + +</section> + +<section class="section"> +<header><h1 id="h_4" class="toc">Technical Writing</h1></header> +<p>After our pizza, we all went back to my place, which is literally around the corner for the restaurant. It was only when we were happily starting the second glass of my family’s very own home-made wine that Randal looks at me and says: <q>“You know that I started off as a Technical Writer myself, don’t you?”</q></p> +<p>I was baffled. I did brush up on Randal’s life on his web site, Wikipedia and similar, like any good fan meeting his hero, but I never came across this tiny detail. This triggered yet another round of questions on my part, as I have been working full time as a technical writer for years now. Randal shared a couple of anecdotes about his early technical writing career.</p> +<p><q>“When I joined, I had a boss called Lyle. He used to say that the manual itself is <em>the</em> product. If it’s not in the manual, it simply doesn’t exist for the customer.”</q> A statement that can come handy as as a reminder for Product Managers, Project Leaders and similar when they try to belittle documentation, and for writers themselves, when they feel that they can be sloppy because no one cares.</p> +<p>I really enjoyed when Randal told us about his first encounter with his editor, Jack:</p> +<blockquote>“He was a big guy. 6 ft tall, with huge hands. He used to hold his pencil like this… [shows a fist grabbing a pencil] …he starts reading my first draft and crosses a word, then a paragraph, and another, and so on. Then he looks at me and says: ‘OK, what did you <em>really</em> want to say here?’<br /> +<br /> +I said ‘Well, that you set option -s to enable <span class="caps">XYZ</span>’, and he starts writing down on my document ‘Set option -s to enable <span class="caps">XYZ</span>…’, and so on."</blockquote> +<p>When you start as a Technical Writer, you often end up writing a lot trying to be thorough, making even really simple things complicated. Jack reminded me of a great editor that was hired at my company for a summer, and revolutionized the whole department by applying some principles and vocabulary of <a href="http://en.wikipedia.org/wiki/Simplified_English">Simplified English</a>. As it turns out, instructions written in a plain and simple language are far easier to understand than anything else.</p> + +</section> + +<section class="section"> +<header><h1 id="h_5" class="toc">Wrapping it up</h1></header> +<p>We spent the whole evening talking non-stop. We met at his hotel at 7:30 PM and I drove him back around 11 PM. The guy does talk a lot. Luckily, I got a chance to take a couple of pictures and get a funny autographed note, as long as I promised not to use it for cheques, that reads: “To Fabio, without whom this note will make no sense”.</p> +<p><img src="/img/pictures/rls/rls1_small.png" style="float:right;" /></p> +<p>There’s obviously a lot of stuff we talked about that I didn’t write about, mainly because I was trying to keep this article focused on IT-related topics. Before his cruise, Randal visited the <span class="caps">CERN</span> in Geneva, so for a good half hour we talked about the <span class="caps">LHC</span>, experiments, neutrinos being shot from Geneva and collected in Rome, things like that.</p> +<p>We also talked a lot about Randal’s day job, then about his company <a href="http://www.stonehenge.com">Stonehenge.com</a>, then his trip to England (and to the real Stonehenge); and we talked about Italy, both about good things (food?) and bad things (bureaucracy, backwards mentality mainly in relation to IT, lack of English speakers, etc.).</p> +<p>The evening couldn’t have gone better. Especially considering Randal and I don’t agree on some <span class="caps">EXTREMELY</span> important matters (programming languages and text editors). It was a great chance to learn from each other. I doubt he will be ditching Perl in favor of Ruby, but at least I hope to have made it very clear to him that Ruby is much more than Rails, at least for some of us.</p> +<p><code>sudo apt-get install emacs</code></p> +<p>Damn! Wrong terminal. Sorry about that…</p> + +</section> + +</section>
@@ -0,0 +1,27 @@
+----- +title: "New Release: RawLine 0.2.0" +content-type: article +timestamp: 1207107180 +tags: "ruby|programming|opensource|rawline" +----- +<p><del>InLine</del> RawLine 0.2.0 is out!</p> +<p>*Raw*Line is the new name for InLine, in case you didn’t guess. The name was changed to avoid name collision problems with the RubyInline project.</p> +<p>Here’s what’s new:</p> +<ul> + <li>Added /examples and /test directory to gem.</li> + <li>Escape codes can now be used in prompt.</li> + <li>It is now possible to use bind(key, &block) with a String as key, even if the corresponding escape sequence is not defined.</li> + <li>Added Editor#write_line(string) to print a any string (and “hit return”).</li> + <li>Library name changed to “RawLine” to avoid name collision issues (Bug <a href="http://rubyforge.org/tracker/?func=detail&aid=18879&group_id=5622&atid=21788">18879</a>).</li> + <li>Provided alternative implementation for left and right arrows if terminal<br /> +supports escape sequences (on Windows, it requires the Win32Console gem).</li> +</ul> +<p>In particular, I decided to provide an “optimized implementation” for the left and right arrows using escape sequences rather than shameful hacks. This is now possible because the Win32Console gem now enables <span class="caps">ANSI</span> escape sequences on Windows as well (weehee!).</p> +<p>So:</p> +<ul> + <li>If you’re on *nix all good, your terminal is smart and can understand escape sequences => the new implementation will be used.</li> + <li>If you’re on Windows and you installed Win32Console, your termnal is smart and can understand escape sequences => the new implementation will be used.</li> + <li>If you’re on Windows and you didn’t install Win32Console, then your terminal is stupid and it doesn’t understand escape sequences, so the old implementation will be used.</li> +</ul> +<p>The new implementation is significantly faster than the old one, on Windows at least, and the cursor now blinks properly when left or right arrows are pressed.</p> +<p>I re-emplemented only cursor movement because I’m still having some problems in getting the delete/insert escapes to work properly (or better: how I want them to work!).</p>
@@ -0,0 +1,64 @@
+----- +title: "RawLine 0.3.0 released â now with Readline emulation" +content-type: article +timestamp: 1235890020 +tags: "ruby|opensource|rawline" +----- +<p><a href="/rawline">RawLine</a> 0.3.0 has been <a href="http://rubyforge.org/projects/rawline">released</a>. This new milestones fixes some minor bugs and adds some new functionalities, must notably:</p> +<ul> + <li>Ruby 1.9 support</li> + <li>A filename completion function</li> + <li>A new <span class="caps">API</span> very similar to the one exposed by the Ruby wrapper for <span class="caps">GNU</span> Readline</li> +</ul> +<p>Some of you asked for Readline compatibility/emulation and that was actually not too difficult to implement: all the bricks were already there, I just had to put them together in the right place.</p> +<p>The <code>RawLine</code> module (you can spell it “Rawline” as well, if you wish) now behaves like <code>Readline</code>. This means that you can now use RawLine like this (taken from examples/readline_emulation.rb):</p> +<div class='ruby'><pre><code>include Rawline + +puts "*** Readline Emulation Test Shell ***" +puts " * Press CTRL+X to exit" +puts " * Press <TAB> for file completion" + +Rawline.editor.bind(:ctrl_x) { puts; puts "Exiting..."; exit } + +Dir.chdir '..' + +loop do + puts "You typed: [#{readline("=> ", true).chomp!}]" +end</code></pre></div><p>Basically you get a <code>readline</code> method, a <code>HISTORY</code> constant like the one exposed by Readline (Rawline’s is a RawLine::HistoryBuffer object though — much more manageable), and a <code>FILENAME_COMPLETION_PROC</code> constant, which provides basic filename completion. Here it is:</p> +<div class='ruby'><pre><code>def filename_completion_proc + lambda do |word| + dirs = @line.text.split('/') + path = @line.text.match(/^\/|[a-zA-Z]:\//) ? "/" : Dir.pwd+"/" + if dirs.length == 0 then # starting directory + dir = path + else + dirs.delete(dirs.last) unless File.directory?(path+dirs.join('/')) + dir = path+dirs.join('/') + end + Dir.entries(dir).select { |e| (e =~ /^\./ && @match_hidden_files && word == '') || (e =~ /^#{word}/ && e !~ /^\./) } + end + end</code></pre></div><p>You can find this function as part of the <code>RawLine::Editor</code> class. The result is not exactly the same Readline, because completion matches are not displayed underneath the line but inline and can be cycled through — which is one of Readline’s completion modes anyway.</p> +<p>A few methods of the <code>RawLine::Editor</code> class can now be accessed directly from the <code>RawLine</code> module, like with Readline:</p> +<ul> + <li><code>Rawline.completion_proc</code> — the Proc object used for <span class="caps">TAB</span> completion (defaults to FILENAME_COMPLETION_PROC).</li> + <li><code>Rawline.completion_matches</code> — an array of completion matches.</li> + <li><code>Rawline.completion_append_char</code> — a character to append after a successful completion.</li> + <li><code>Rawline.basic_word_break_characters</code> — a String listing all the characters used as word separators.</li> + <li><code>Rawline.completer_word_break_characters</code> — same as above.</li> + <li><code>Rawline.library_version</code> — the current version of the Rawline library.</li> + <li><code>Rawline.clear_history</code> — to clear the current history.</li> + <li><code>Rawline.match_hidden_files</code> — whether FILENAME_COMPLETION_PROC matches hidden files and folders or not.</li> +</ul> +<p>I bet you didn’t know these methods were even in the Readline wrapper, did you? Probably because of lack of documentation.<br /> +Anyhow, another very important difference beween Rawline and Readline is <code>Rawline.editor</code>, i.e. the default instance of RawLine::Editor used by the Rawline module itself.</p> +<p>This makes things easier if you want more control over the line which is being edited and the previously-edited lines. Sure, <code>Readline#completion_proc</code> exposes the current <em>word</em> being typed before hitting tab, and so does <code>Rawline#completion_proc</code> the difference is that if you access <code>Rawline.editor.line</code> you get a <code>RawLine::Line</code> object with all the information you could possibly need about the current line: the position of the cursor, the text, the order the characters were entered, etc. etc. <br /> +Now you can imagine why it took me a few minutes to write the <code>filename_completion_proc</code> method (and why it will take you even less time to write your own similar method if you wanna do something different): you can access not only the last word being typed but also the current <em>and previous</em> lines (through <code>Rawline.editor.history</code> or just <code>Rawline::HISTORY</code>)!</p> +<p>It must be said, as usual, that Rawline is <em>not</em> a complete replacement for the Readline library yet (and it will probably never be, as Readline is huge!), but it’s a good cross-platform, more Ruby-esque alternative to what’s currently available by the Readline wrapper for Ruby.</p> +<p>It’s not as fast, of course, especially when completing long words, but it’s quite usable. The following libraries are not required but recommended:</p> +<ul> + <li><code>win32console</code> (on Windows)</li> + <li><code>termios</code> (on *nix)</li> +</ul> +<p>They basically make Rawline faster. If you don’t use them, Rawline will fall back on its pure-Ruby implementation to move left and right (i.e. printing backspaces and spaces character codes instead of <span class="caps">ASCII</span> escape codes).</p> +<p>Unfortunately, there’s no <code>vi_editing_mode</code> or <code>emacs_editing_mode</code> yet (for time constraints: they <em>can</em> be implemented!) but patches are very welcome. Also, if you need more features, all you have to do is ask :-)</p> +<p>P.S.: Check out the new <a href="/rawline">Project Page</a> and especially its Resources section!</p>
@@ -0,0 +1,81 @@
+----- +title: "Real-world Rawline usage" +content-type: article +timestamp: 1236398040 +tags: "ruby|rawline" +----- +<p>So I finally decided to update <a href="/rawline">RawLine</a> last week, and I added a more Readline-like <span class="caps">API</span>. When I first started the project, I was determined <em>not</em> to do that, because the current Readline wrapper shipped with Ruby is not very Ruby-ish: it’s a wrapper, after all!</p> +<p>The good thing of having a new <span class="caps">API</span> compatible with Readline is that now people can use RawLine in their Readline-powered scripts, with very minor modifications.</p> +<p>Let’s have a look at some examples (they are also shipped with <a href="http://rubyforge.org/projects/rawline">Rawline v0.3.1</a>):<br /> +h3. Rush</p> +<p><a href="http://rush.heroku.com">Rush</a> is an excellent gem which provides a cross-platform shell environment, entirely written in Ruby.<br /> +Being a shell, it obviously uses Readline for tab completion, and that does the job on Linux. On Windows though, things aren’t that easy:</p> +<ul> + <li>text gets garbled if you write long lines</li> + <li>you can’t type certain characters if they use some key modifiers like <RIGHT-ALT>, etc.</li> +</ul> +<p>RawLine doesn’t have these problems (that’s the very reason why I created it), so here’s a simple script which launches a Rawline-enabled Rush shell:</p> +<div class='ruby'><pre><code>require 'rubygems' +require 'rush' +require 'rawline' + +class RawlineRush < Rush::Shell + + def initialize + Rawline.basic_word_break_characters = "" + Rawline.completion_proc = completion_proc + super + end + + def run + loop do + cmd = Rawline.readline('rawline_rush> ') + finish if cmd.nil? or cmd == 'exit' + next if cmd == "" + Rawline::HISTORY.push(cmd) + execute(cmd) + end + end +end + +shell = RawlineRush.new.run</code></pre></div><p>What happens here? Nothing much really, all I had to do was:</p> +<ol> + <li>Derive a new class from Rush::Shell</li> + <li>Set <code>Rawline.basic_word_break_characters</code> to the same value used in the original Rush code</li> + <li>Set <code>Rawline.completion_proc</code> to <em>the same</em> completion Proc used in the original Rush code</li> + <li>Rewrite the original <code>run</code> replacing <code>Readline</code> with <code>Rawline</code></li> +</ol> +<p>And it works as it was intended to, i.e. typing <code>root['b<TAB></code> will expand to <code>root['bin/</code>, etc.<br /> +Note that I didn’t write the completion Proc from scratch: it was already there.</p> +<h3><span class="caps">IRB</span></h3> +<p>After trying out Rush, the next logical step was trying <span class="caps">IRB</span> itself: I could never use it properly on Windows, and that was really frustrating.<br /> +After a few minutes trying to figure out how to start <span class="caps">IRB</span> programmatically, I quickly came up with a similar example:</p> +<div class='ruby'><pre><code>require 'irb' +require 'irb/completion' +require 'rubygems' +require 'rawline' + +Rawline.basic_word_break_characters= " \t\n\"\\'`><;|&{(" +Rawline.completion_append_character = nil +Rawline.completion_proc = IRB::InputCompletor::CompletionProc + +class RawlineInputMethod < IRB::ReadlineInputMethod + include Rawline + def gets + if l = readline(@prompt, false) + HISTORY.push(l) if !l.empty? + @line[@line_no += 1] = l + "\n" + else + @eof = true + l + end + end +end + +module IRB + @CONF[:SCRIPT] = RawlineInputMethod.new +end +IRB.start</code></pre></div><p>In this case, Rawline is included in the <code>RawlineInputMethod</code> class, derived from the original <code>ReadlineInputMethod</code> class, i.e. the class <span class="caps">IRB</span> uses to define (guess…) how to input characters.<br /> +Again, all I had to do was set a few Rawline variables to match the ones used in Readline, and then redefine the function used to get characters. All done.</p> +<p>It works as expected (only with inline completion, of course): typing <code>"test".ma<TAB></code> will give you <code>"test".map</code>, <code>"test".match</code>, etc.</p> +<p>You also get all Rawline key mappings for free (<span class="caps">CTRL</span>-K to clear the line, <span class="caps">CTRL</span>-U and <span class="caps">CTRL</span>-R to undo and redo, etc.), and you can define your own.</p>
@@ -0,0 +1,50 @@
+----- +title: "Announcement: RedBook v0.2.0 released" +content-type: article +timestamp: 1191812700 +tags: "redbook|ruby|productivity|opensource" +----- +<blockquote> +<p><em>“Release Early, Release Often”</em></p> +<p>— Eric S. Raymond, <a href="http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html">The Cathedral and the Bazaar</a></p> +</blockquote> +<p>In other words, time for another (early) release of <a href="http://www.assembla.com/space/redbook">RedBook</a>. There are quite a few new features which are worth examining, in particular:</p> +<h3>Regexp search for messages</h3> +<p>This was actually already available before, just if you inputted a search string which was not a regexp, you’d get an unhandled exception (more or less). This exception is now handled propertly so you get a pretty message instead, if an error occurs when parsing the search string.</p> +<h3>Log Backup</h3> +<p>A new <strong>:backup</strong> keyword is available to quickly backup your log file. Here’s what it does:</p> +<ul> + <li>Loads all messages silently</li> + <li>Writes them to a file in the same directory as the original log file named <log-alias>.bkp.yml.</li> +</ul> +<p>Handy, especially if there was a similar keyword to restore the last backup, which is planned for <a href="http://www.assembla.com/spaces/milestones/index/bWE7NkzCqr3k25abIlDkbG?spaces_tool_id=ceS8UazCqr3k25abIlDkbG">later on</a>.</p> +<h3>Support for multiple log files</h3> +<p>This is perhaps the most important feature introduced by this release. It is now possible to configure more than one log file by adding any number of <strong>:data_<alias>:</strong> settings inside your config.yml file, where alias is the name of your log file. So, for example, if your config.yml file contains the following:</p> +<p><strong>:data_test: “testlog.yml”</strong></p> +<p>You can load the “test” log by typing</p> +<p><strong>:use test</strong></p> +<p>(:use is a shorthand for :load_log). Similarly, another new keyword <strong>:dest</strong> has been introduced to be able to log a message to a different log file without loading it into memory, like this:</p> +<p><strong>:log This message will be saved to testlog.yml :dest test</strong></p> +<p>Finally, a <strong>:refresh</strong> keyword has been introduced as an alias to reloading the current log.</p> +<h3>(Almost) automatic log of completed activities</h3> +<p>Right when I was coding the <strong>:timecalc</strong> operation, I thought it would be nice to be able to log the start and end of a task without having to type it twice. Now this is possible using the <strong>:complete</strong> keyword:</p> +<p>:log Testing feature X in product Y</p> +<p>:complete</p> +<p><strong>:complete</strong> will re-log the last message prepended with [<span class="caps">COMPLETED</span>]:</p> +4 Mon Oct 08 2007 – 10:47:45 AM Testing feature X in product Y +5 Mon Oct 08 2007 – 10:54:31 AM [<span class="caps">COMPLETED</span>] Testing feature X in product Y +<p>What if I start another task before completing the first one? No problem, it is sufficient to load the last activities using a <strong>:load</strong> command and then issuing <strong>:complete <number></strong> where <number> is the index of the loaded activity. <br /> +This nifty little feature will become more and more important when (starting from release 0.4) I’ll implement more time tracking functions, and it will be possible to track completed tasks in a specific timeframe and/or marked with a specific tag.</p> +<h3>Easy integration with launchers like Launchy and QuickSilver</h3> +<p>To conclude, as someone pointed out that it would be cool to use RedBook from launchers like Launchy or Quicksilver, I made another standalone script (redbooklet.rb or redbooklet.exe) which is just able to parse a log command and write a message to the specified log file.<br /> +To use it with Launchy, for example, all you have to do is the following:</p> +<ol> + <li>Create a shortcut to redbooklet.exe (or to a way to execute the corresponding ruby script) named “log”.</li> + <li>Copy the “log” shortcut anywhere in your start menu</li> + <li>Bring up launchy (ALT+SPACE) and type in “log”</li> + <li>Hit tab</li> + <li>Type in your log message, optionally with the any :tags or :dest keywords.</li> + <li>The message will be logged to your default log file or to the log you specified using the :dest keyword. If an error occurs, it will appear in a command line window for 15 seconds before the program is closed.</li> +</ol> +<p>That’s all folks! As usual, if you have any comment or suggestion feel free to reply to this post or email me. For a list of the planned features and releases, check out the <a href="http://www.assembla.com/spaces/milestones/index/bWE7NkzCqr3k25abIlDkbG?spaces_tool_id=ceS8UazCqr3k25abIlDkbG">Milestones</a> page.</p> +<p style="text-align:center;"><strong><a href="http://www.assembla.com/spaces/files/bWE7NkzCqr3k25abIlDkbG"><span class="caps">DOWNLOAD</span> <span class="caps">HERE</span></a></strong></p>
@@ -0,0 +1,66 @@
+----- +title: "Announcement: RedBook v0.3.0 released" +content-type: article +timestamp: 1193289480 +tags: "redbook|ruby|productivity|opensource" +----- +<p>It’s time for a new beta release of RedBook. This was actually going to be a fairly modest release in terms of features, but I actually ended up implementing a lot more than expected, even things which were planned for the first production release 1.0. So, let’s see what’s new</p> +<h3>New operation names <em>(which break compatibility with previous versions)</em></h3> +<p>I had a look at the names I choose for the operations and I noticed that they were either not intuitive enough or too verbose. So I decided to change a fair few of them (thus breaking compatibility with previous versions, but after all that’s what beta releases are for, right?):</p> +<table> + <tr> + <th><span class="caps">OLD</span> </th> + <th><span class="caps">NEW</span> </th> + </tr> + <tr> + <td> :complete </td> + <td> :finish </td> + </tr> + <tr> + <td> :load </td> + <td> :select </td> + </tr> + <tr> + <td> :load_config </td> + <td> :config </td> + </tr> + <tr> + <td> :load_log </td> + <td> :refresh </td> + </tr> + <tr> + <td> :timecalc </td> + <td> :calc </td> + </tr> + <tr> + <td> :stop </td> + <td> :quit </td> + </tr> +</table> +<h3>New Manual/Home Page</h3> +<p>A while ago I discovered <a href="http://www.tiddlywiki.com/">TiddlyWiki</a>, but as a matter of fact I never used it for anything practical. From last week though, I started using it a work for taking notes and create short memos, and then I thought of using it to replace RedBook’s standard <span class="caps">README</span> file (which was made in a hurry and was kinda cryptical). Now a brand new “manual.html” ships with RedBook — 308 KB (30 of actual docs and 278 of Javascript/<span class="caps">HTML</span>/<span class="caps">CSS</span> magic) with everything you need to know about it. Additionally, an online version is available at the following address:</p> +<p style="text-align:center;"><strong><a href="http://redbook.h3rald.com">redbook.h3rald.com</a></strong></p> +<h3>Removed Win32::Console Library</h3> +<p>OK this is not good news for people (like me) who use RedBook on Windows, but I promise you’ll forgive me when you read about the other new features below. I discovered by chance that the Win32::Console library (which was used to get colors working on Windows) seems not to handle international characters properly and also seems to be conflicting in some way with the Readline library I decided to include (see below). I don’t know whether this is a problem of the actual library or just of the gem used to pack it.</p> +<h3>rbconfig.yml</h3> +<p>The <code>config.yml</code> file has been renamed to <code>rbconfig.yml</code>. Additionally, if you place a file with this name in your $<span class="caps">HOME</span> directory it will override the one in your RedBook folder (This was done in preparation for the RedBook RubyGem).</p> +<h3>New operations</h3> +<p>The following new operations are available:</p> +<ul> + <li><a href="http://redbook.h3rald.com/#%3Arelog">:relog</a> — Re-logs a previously-logged message (keeping the same tags and updating the timestamp)</li> + <li><a href="http://redbook.h3rald.com/#%3Aclear">:clear</a> — Clears the screen.</li> + <li><a href="http://redbook.h3rald.com/#%3Aruby">:ruby</a> — Evaluates arbitrary Ruby code outputting the result (use with care…)</li> +</ul> +<h3>Auto-completion</h3> +<p>Some Mac users originally complained that the backspace key wasn’t working in RedBook (and it didn’t in Linux either). Fortunately the solution to this was easy enough: include the <span class="caps">GNU</span> <a href="http://tiswww.case.edu/php/chet/readline/rltop.html">Readline</a> library. <br /> +Readline is now being used in RedBook to:</p> +<ul> + <li>Provide basic (Emacs-style) bindings</li> + <li><strong>Auto-completion</strong> for keywords <em>and tags</em></li> + <li>Allow the user to automatically customize key bindings via an <a href="http://redbook.h3rald.com/#.inputrc">.inputrc</a> file placed in their $<span class="caps">HOME</span> directory (on Windows you’ll have to define a <span><span class="caps">HOME</span></span> environment variable pointing to a directory of your choice). An example .inputrc file is distributed with RedBook with some specific key bindings.</li> +</ul> +<h3>Support for international characters</h3> +<p>Finally, I decided to implement another feature which was originally planned for the 1.0 release: international characters support. This is possible using the Iconv Ruby extension (requires <a href="http://www.gnu.org/software/libiconv/"><span class="caps">GNU</span> libiconv</a>) which can convert strings between different character sets. The character sets needs to be configured via the <a href="http://redbook.h3rald.com/#rbconfig.yml">rbconfig.yml</a> file.</p> +<p>For more information, check out the <a href="http://redbook.h3rald.com/#ChangeLog">ChangeLog</a></p> +<p style="text-align:center;"><strong><a href="http://www.assembla.com/spaces/files/bWE7NkzCqr3k25abIlDkbG">Download RedBook</a></strong></p> +
@@ -0,0 +1,76 @@
+----- +title: "Announcement: RedBook v0.4.0 released" +content-type: article +timestamp: 1196235240 +tags: "opensource|productivity|redbook|ruby" +----- +<p>I’m pleased to announce a new release of the RedBook daily logging and time tracking script. This release introduces two new operations, four stats-related directives and a brand new Windows Installer able to setup RedBook in a blink, with (almost) no configuration at all.</p> +<p>Let’s have a closer look…h2. New Operations</p> +<p>Suppose that you just logged a message and you noticed one of these two things happened:</p> +<ul> + <li>You didn’t really wanted to log it</li> + <li>You made a silly typo in the message or in the tags</li> +</ul> +<p>What can you do about it? Up to RedBook 0.3, the only solution was to open the <span class="caps">YAML</span> file and correct the mistake manually. From now on there’s also another simpler way to operate in such situations: using the :update and :delete operations!</p> +<h3>:update</h3> +<p>This operation can be used to update the message and or the tags of a previously-logged activity. The usage is simple: load a dataset first, and then execute an <code>:update</code> command like:</p> +<p><code>:update 4 :message My updated message :with new_tag1 new_tag2</code></p> +<p>This will update the 4th message of the dataset modifying its message and tags. Of course you can update either of the two things or both; the timestamp of the activity will not be changed.</p> +<h3>:delete</h3> +<p>The delete operation can be used to completely delete a message from the log. Just load a dataset using a <code>:select</code> operation and then execute a <code>:delete</code> command, e.g.:</p> +<ul> + <li><code>:delete 1</code> <em>(will delete the first activity)</em></li> + <li><code>:delete 4 2 7 9</code> <em>(will delete activity #2, #4, #7 and #9)</em></li> + <li><code>:delete</code> <em>(will delete the entire dataset)</em></li> +</ul> +<p>A confirmation message will appear before deleting the message(s).</p> +<p><strong><span class="caps">IMPORTANT</span></strong><br /> +<em>Due to the architecture of the application, whenever an <code>:update</code> or <code>:delete</code> occurs the log file will be reloaded in memory and completely overwritten. This doesn’t cause problems, although for big log files (10,000+ activities) this may take a few seconds.</em></p> +<h2>Statistics</h2> +<p>Another important new feature introduced by this release is <em>time tracking</em>. It was actually already there, kind of: the <code>:calc</code> operation was already able to calculate the time elapsed between two activities… however, this is not really practical.</p> +<p>Since last release, it is possible to log the completion of an activity using the <code>:finish</code> command. This will basically re-log the same activity prepending <em>[<span class="caps">COMPLETED</span>]</em> to its message.<br /> +If you started using the <code>:finish</code> command to complete your activities, RedBook can now calculate the following stats for you:</p> +<ul> + <li>Count the number of messages in a dataset</li> + <li>Calculate the average time spent for the completed activities in a dataset</li> + <li>Calculate the total time spent for the completed activities in a dataset</li> + <li>Calculate the duration of each completed activity in a dataset</li> +</ul> +<p>Each of these calculations is performed by adding special directive to a <code>:select</code> command, as explained in the following sections.</p> +<h3>:count</h3> +<p>This directive can be added to a <code>:select</code> command to return just the number of message of the loaded dataset. <br /> +In other words, executing the following:</p> +<p><code>:select :count :with mail !work</code></p> +<p>…will return the number of activities tagged with <em>mail</em> but not with <em>personal</em>, without listing all the activities.</p> +<h3>:avg</h3> +<p>The <code>:avg</code> directive can be used to calculate the average time spent on activities matching certain criteria, for example:</p> +<p><code>:select Status Meeting :avg :with meeting</code></p> +<p>…will return the average time spent on activities whose messages matches <em>/Status Meeting/</em> and are tagged with <em>meeting</em>.</p> +<h3>:total</h3> +<p>Similarly, <code>:total</code> can be used to return the total time spent on activities matching certain criteria, e.g.:</p> +<p><code>:select :total :with mail work</code></p> +<p>…will return the total time spent on activities tagged with <em>mail</em> and <em>work</em>.</p> +<h3>:duration</h3> +<p>Lastly, <code>:duration</code> will print each completed task along with its duration. The syntax is similar to the others:</p> +<p><code>:select :duration :with break</code></p> +<p>This will print each completed activity tagged with <em>break</em> along with its duration.</p> +<h3>:nodiff and _concurrent</h3> +<p>The logic behind the above-mentioned directives may seem trivial to implement, but it is not. The fun part was telling RedBook to subtract the duration of each sub-activity contained in another activity… a feature I considered necessary for time tracking purpose. However, if you start your work day with a <em>Working Day</em> activity and you complete that activity using the <code>:finish</code> command, when calculating the duration of the working day RedBook will subtract the duration of <em>all the completed sub-activities</em> from the duration of <em>Working Day</em>. This is not OK, so I added the directive <code>:nodiff</code> which can be used to prevent RedBook from calculating the difference between the parent activity’s duration and the duration of each of its child activity.</p> +<p>What if you’re doing two things at once? use the special <code>_concurrent</code> tag, and that activity will be considered symultaneous to its parent activity for time tracking purposes.</p> +<h2>Activity Status Filters</h2> +<p>RedBook is now fully aware of the “status” of each activity, so it is possible to display only activities in a certain status using the following directives:</p> +<h3>:plain</h3> +<p>Executing <code>:select :plain :from today</code> will return all the activities logged today, omitting their completions (if any), i.e. any activity beginning with <em>[<span class="caps">COMPLETED</span>]</em>.</p> +<h3>:pending</h3> +<p>Executing <code>:select :pending :from today</code> will return all the activities logged today which have not been completed yet. Again, this was not too trivial to implement, but it seems to work (it also smart enough to detect if the same activity has been relogged etc. etc.).</p> +<p><strong><span class="caps">WARNING</span>:</strong> <br /> +<em>Using this directive with a large dataset may cause RedBook to take some time before delivering the result, due to the amount of iterations to perform. Use with care.</em></p> +<h3>:completed</h3> +<p>Executing <code>:select :completed :from today</code> will return all the activities logged today which have been completed.</p> +<h2>Windows Installer</h2> +<p>I decided to spend some time (half an hour) and create a proper setup file for Windows using InnoSetup. The setup will take care of almost everything for you, so you have no excuse not to try RedBook because it’s not user-friendly to install!</p> +<p>Check out the <a href="http://redbook.h3rald.com">manual</a> for more details.</p> +<h2>RubyForge Project</h2> +<p>Finally, I registered a new <a href="http://rubyforge.org/projects/redbook/">RubyForge Project</a> for RedBook, which include a public <span class="caps">SVN</span> repository updated every week (Assembla doesn’t allow anonymous checkouts, unfortunately).<br /> +This project will also host the official RedBook Gem, scheduled for the 1.0 release.</p> +<p style="text-align:center;"><strong><a href="http://www.assembla.com/spaces/files/redbook"><span class="caps">DOWNLOAD</span></a> | <a href="http://redbook.h3rald.com/"><span class="caps">MANUAL</span></a></strong></p>
@@ -0,0 +1,46 @@
+----- +title: "Announcement: RedBook v0.5.0 released" +content-type: article +timestamp: 1197788820 +tags: "opensource|productivity|redbook|ruby" +----- +<p>This new beta release of RedBook introduces quite a few changes when it comes to configuration and setup. Here’s some highlights…h3. Regexp changes</p> +<p>It is now necessary to enter “proper” regular expressions for <code>:select</code>. Proper means between slashes, like the following:</p> +<ul> + <li>/Work Day/</li> + <li>/mail/i</li> +</ul> +<p>I changed this in order to support case-insensitive searches using the <code>i</code> switch. This makes queries much more powerful.</p> +<h3>Variables</h3> +<p>A new, interesting feature I decided to introduce in this release is <em>variables</em>. For now you define them inside your rbconfig.yml file, like this:</p> +<div class='text'><pre><code>:var_monday_morning: "monday at 8 am" + +:var_friday_evening: "friday at 8 pm" + +:var_week_report: ":select :duration :from :%monday_morning :to :%friday_evening"</code></pre></div><p>In this way, every time you type in :%week_report in RedBook, it will expand to: <code>:select :duration :from monday at 8 am :to friday at 8 pm</code>. By the way, completion is supported, so you’ll only have to type in something like <code>:%we</code> and hit <tab>.</p> +<p>It is possible to define variables as <code>:var_<something></code> in the rbconfig.yml file and then used them inside RedBook as <code>:%<something></code>.</p> +<h3>New Operations</h3> +<p>Five new operations have been added:</p> +<h4>:blank</h4> +<p>This will blank your current log after asking you if you really want to do so.</p> +<h4>:restore</h4> +<p>This operation will overwrite your current log with the last saved backup. Like with the <code>:blank</code> operation, you’re asked if you really want to proceed or not.</p> +<h4>:archive</h4> +<p>By typing <code>:archive</code>, the current log file will be archived to your <code>:archives_folder:</code> directory specified in the rbconfig.yml file (similarly, it is now possible to specify a :backups_folder: for your logs’ backup files).</p> +<h4>:dataset</h4> +<p>A simple operation to display the messages inthe current dataset.</p> +<h4>:dump</h4> +<p>This operation will dump the output of the last <code>:select</code> operation to a text file. Useful for saving the average, total time and duration of a set of activities.</p> +<h3>Portable edition</h3> +<p>Some Windows users will definitely love this. I finally found an easy way to run RedBook confined within the current directory, by using a simple <code>start.bat</code> batch file to set the <span><span class="caps">INPUTRC</span></span> and <span><span class="caps">HOME</span></span> variables temporarily to the path to the .inputrc file and the directory of RedBook executable. This makes RedBook 100% portable and suitable to be used on <span class="caps">USB</span> sticks &similar.</p> +<p style="text-align:center;"><strong><a href="http://redbook.googlecode.com/files/RedBook-0.5_Win32-portable.zip">Get RedBook Portable</a></strong></p> +<h3>New Development Page</h3> +<p>I decided to move the primary RedBook repository from <a href="http://www.assembla.org">Assembla</a> to Google Code. Why? Well, nothing wrong with Assembla per se, I still think it’s an excellent free service to host your public <em>and private</em> projects, but Google Code is faster and offers only the features I need:</p> +<ul> + <li>Public <span class="caps">SVN</span> repository access</li> + <li>Simple-to-use issue tracker</li> + <li>Very nicely developed downloads section, with download counts, and “normal” filenames.</li> +</ul> +<p>So here’s the new RedBook Development Home:</p> +<p style="text-align:center;"><strong><a href="http://code.google.com/p/redbook/">http://code.google.com/p/redbook/</a></strong></p> +<p>Additionally I also setup a <a href="http://groups.google.com/group/redbook-support/">RedBook Support Google Group</a>, so if you have any question concerning the program, you know where to go!</p>
@@ -0,0 +1,118 @@
+----- +title: "RedBook - A simple Ruby program for your daily logging needs" +content-type: article +timestamp: 1191067500 +tags: "ruby|productivity|software|tools|redbook" +----- +<p>Logging your daily activities is important. If you don’t believe me you’d better check at least these three posts on LifeHacker, which feature different scripts and applications:</p> +<ul> + <li><a href="http://lifehacker.com/software/top/geek-to-live--quick+log-your-work-day-189772.php">QuickLogger</a></li> + <li><a href="http://lifehacker.com/software/windows/log-your-workday-from-the-system-tray-with-life-logger-285602.php">Life Logger</a></li> + <li><a href="http://lifehacker.com/software/featured-windows-download/log-your-workday-with-quicklogger-2-302932.php">QuickLogger 2</a></li> +</ul> +<p>I had a look at each one of them, and I believe they are quite useful, although I didn’t really find what I was looking for. Why? Well, for example:</p> +<ul> + <li>I don’t believe a <span class="caps">GUI</span> is necessary — you’d better off with just a shortcut key or command to run from Launchy or QuickSilver, that’s much faster.</li> + <li>They just log timestamped messages on a file, there’s no real way to search through them and display them except by using a test editor</li> + <li>They are Windows only — not that it matters for me, but others may not be happy about it.</li> +</ul> +<p>That’s why I thought I’d roll out my own: meet <a href="http://www.assembla.com/space/redbook">RedBook</a>.<br /> +Let me say it’s nothing fancy: I’m not a full-time programmer but I do like playing with Ruby during my lunch breaks at work, so that’s why RedBook is just a humble, tiny Ruby script. This automatically makes it cross-platform: you can install Ruby very easily on Linux & alikes, Mac OS X and Windows. Furthermore, if you are on Windows and for some weird reason you don’t want to install Ruby, you can just try out the packed <span class="caps">EXE</span> file (made with RubyScript2Exe) — it’s about 2MB, but you won’t need anything else.</p> +<h3>How It Works</h3> +<p>The program uses two <span class="caps">YAML</span> files, one for configuration, which must reside in the same directory as redbook.rb (or redboo.exe) and one for the log itself, which you can place anywhere, provided that you edit the configuration file accordingly. For information on how to install RedBook and how to configure it, you can check the manual.html (powered by <a href="http://www.tiddlywiki.com">TiddlyWiki</a>) file provided with the program or <a href="http://redbook.h3rald.com">browse it online</a>.</p> +<p>When started, RedBook will load both the configuration file (config.yml) and <em>the whole log file</em> into memory — it’s not a big deal, considering that they are only text files after all. I did a test with a log of quite a few MBs, and it was fine.</p> +<p>You can then start input commands right away, following a few sample rules. RedBook has a (very) rudimentary parser which is able to detect keywords, i.e. alphabetic strings prepended with a colon. RedBook commands look like this:</p> +<ul> + <li><strong>:log</strong> This message will be logger <strong>:tags</strong> tag1 tag2</li> + <li><strong>:select</strong> <strong>:last</strong> 15 <strong>:since</strong> January</li> + <li><strong>:save</strong> /home/h3rald/backup.yml</li> +</ul> +<p>If everything goes OK, RedBook will reply with some sort of response, an acknowledgement, a list of messages, etc.</p> +<p>Simple.</p> +<p>Here’s basically what the program can do:</p> +<ul> + <li>Log any message to the main log file. Messages can be tagged with one or more tags and will be automatically timestamped.</li> + <li>Load/display a list of logged messages on the screen. It is possible to filter messages by specifying a time span, a string to search in the message text, or a list of tags.</li> + <li>Dump loaded messages to a <span class="caps">TXT</span>, <span class="caps">CSV</span> or <span class="caps">YAML</span> file (you can even backup your log saving it to another <span class="caps">YAML</span> file in this way).</li> + <li>Calculate the time elapsed between two or more tasks. Time will be displayed in years, months, weeks, days, hours, minutes and/or seconds as necessary.</li> +</ul> +<p>How? Here’s a short tutorial…</p> +<h3>A Quick RedBook Tutorial</h3> +<p>Let’s assume you are able to run RedBook on your system by now (if you can’t find some of the gems which are required for it, you can download them packed in a <span class="caps">ZIP</span> file from <a href="http://www.assembla.com/spaces/files/redbook">here</a>).</p> +<p>Here’s what happens when you start the program:</p> +<p><span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"><br /> +<del>-</del><br /> +RedBook v0.1 – Copyright © 2007, Fabio Cevasco<br /> +<del>-</del><br /> + <span style="color:blue">>></span> Loading config file…<br /> + <span style="color:green">>></span> Config file loaded.<br /> + <span style="color:blue">>></span> Loading log file…<br /> + <span style="color:green">>></span> Log file loaded.<br /> + <span style="color:blue">>></span> Ready.<br /> +<span style="color:red">Red</span>Book >><br /> +</code><br /> +</span></p> +<p>Good. Let’s start logging something then. Just use the <strong>:log</strong> keyword, followed by a message, and then you can also add the <strong>:tags</strong> keyword followed by space-separated tags, like this:</p> +<p><span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"><br /> +<span style="color:red">Red</span>Book >> :log My first message :tags test<br /> + <span style="color:green">>></span> Logged.<br /> +<span style="color:red">Red</span>Book >> :log This is another message<br /> + <span style="color:green">>></span> Logged.<br /> +<span style="color:red">Red</span>Book >> :log This is another message :tags test another_test<br /> + <span style="color:green">>></span> Logged.<br /> +</span></p> +<p>Try waiting a few seconds between each message. These three messages will be appended to the log file. You could open it in an editor, but it’s normally easier to display them directly inside RedBook, like this:</p> +<p><span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"><br /> +<span style="color:red">Red</span>Book >> :select<br /> + <span style="color:yellow">1</span> <span style="color:blue">Sat Sep 29 2007 – 09:09:32 PM</span> My first message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><br /> + <span style="color:yellow">2</span> <span style="color:blue">Sat Sep 29 2007 – 09:10:51 PM</span> This is another message<br /> + <span style="color:yellow">3</span> <span style="color:blue">Sat Sep 29 2007 – 09:11:45 PM</span> This is another message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><span style="color:cyan">[</span><span style="color:yellow">another_test</span><span style="color:cyan">]</span><br /> + <span style="color:green">>></span> 3 messages loaded.<br /> +</span></p> +<p>Easy. What if you have hundreds of messages? Well, the :select operation can take an optional search string, or you can tell RedBook to load only those messages tagged with one or more specific tags, like this:</p> +<p><span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"><br /> +<span style="color:red">Red</span>Book >> :select :tags test<br /> + <span style="color:yellow">1</span> <span style="color:blue">Sat Sep 29 2007 – 09:09:32 PM</span> My first message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><br /> + <span style="color:yellow">3</span> <span style="color:blue">Sat Sep 29 2007 – 09:11:45 PM</span> This is another message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><span style="color:cyan">[</span><span style="color:yellow">another_test</span><span style="color:cyan">]</span><br /> + <span style="color:green">>></span> 2 messages loaded.<br /> +</span></p> +<p>Or you can use the :from and/or :to keywords to specify a certain time frame, like this:</p> +<p>:select :tags test <strong>:from ten minutes ago</strong></p> +<p>:select <strong>:from last week :to 2 days ago</strong></p> +<p>RedBook includes a very nice “natural language date/time parser”, <a href="http://chronic.rubyforge.org/">Chronic</a> which is able to convert sentences like the following into Ruby Time objects:</p> +<ul> + <li>6 in the morning</li> + <li>friday 1pm</li> + <li>sat 7 in the evening</li> + <li>today</li> + <li>yesterday at 4:00</li> +</ul> +<p>It’s not perfect (and it’s in pre-alpha as well), but it does the job, for what I can see, and it makes it very easy and fast to specify timeframes.</p> +<p>After executing a :select command, two other operations can be performed on the loaded messages: <strong>:calc</strong> and <strong>:save</strong>.</p> +<p>:calc calculates the exact amount of time elapsed between two or more tasks. Do you remember the numbers on the far left of each message? Think them as temporary IDs for the actual messages, and you can use them to select specific tasks when executing the :calc operation:</p> +<p><span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"><br /> +<span style="color:red">Red</span>Book >> :calc 1 3<br /> + <span style="color:yellow">1</span> <span style="color:blue">Sat Sep 29 2007 – 09:09:32 PM</span> My first message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><br /> + <del>-</del> 2 minutes and 13 seconds.<br /> + <span style="color:yellow">3</span> <span style="color:blue">Sat Sep 29 2007 – 09:11:45 PM</span> This is another message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><span style="color:cyan">[</span><span style="color:yellow">another_test</span><span style="color:cyan">]</span><br /> +</span></p> +<p>Similarly, if no IDs are specified, :calc calculates the time difference between each message and the previous:</p> +<p><span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"><br /> +<span style="color:red">Red</span>Book >> :calc<br /> + <span style="color:yellow">1</span> <span style="color:blue">Sat Sep 29 2007 – 09:09:32 PM</span> My first message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><br /> <br /> + <del>-</del> 1 minute and 19 seconds.<br /> <br /> + <span style="color:yellow">2</span> <span style="color:blue">Sat Sep 29 2007 – 09:10:51 PM</span> This is another message<br /> <br /> + <del>-</del> 54 seconds.<br /> <br /> + <span style="color:yellow">3</span> <span style="color:blue">Sat Sep 29 2007 – 09:11:45 PM</span> This is another message <span style="color:cyan">[</span><span style="color:yellow">test</span><span style="color:cyan">]</span><span style="color:cyan">[</span><span style="color:yellow">another_test</span><span style="color:cyan">]</span><br /> + </span></p> +<p>Finally, you can save loaded messages to a <span class="caps">TXT</span>, <span class="caps">YAML</span> or <span class="caps">CSV</span> file, as follows:</p> +<p><span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"><br /> +<span style="color:red">Red</span>Book >> :save log.txt<br /> + <span style="color:blue">>></span> Saving…<br /> + <span style="color:green">>></span> Saved dataset to “log.txt”<br /> +</span><br /> +h<br /> +If you want to backup your log, you can load all messages and then save them to a <span class="caps">YAML</span> file. Maybe in this case you want to append the <strong>:silent</strong> keyword to the :select command, so that messages won’t be displayed on the screen.</p> +<h3>Conclusion</h3> +<p>RedBook is just a simple program: it suits my needs for now, but of course there’s roo for improvement. If you have some useful suggestions, or you want to contribute in some way, feel free to contact me!</p> +<p style="text-align:center;"><a href="http://redbook.h3rald.com">Home Page</a> | <a href="http://code.google.com/p/redbook/">Development</a> | <a href="http://code.google.com/p/redbook/downloads/list">Download</a></p>
@@ -0,0 +1,51 @@
+----- +title: "Book Review: Refactoring - Ruby Edition" +content-type: article +timestamp: 1264171236 +tags: "ruby|books|review" +----- +<p>Refactoring, like testing, is an activity that should be very familiar to all programmers, especially Rubyists. Actually, programs written in Ruby don’t need as many refactorings as, say, Java programs. However Rubyists are traditionally more <span class="caps">TDD</span> oriented and they like writing clear and elegant code.</p> +<p><a href="http://www.informit.com/store/product.aspx?isbn=0321603508">Refactoring: Ruby Edition</a> is actually a rewrite of the more revolutionary — at the time — <a href="http://www.informit.com/store/product.aspx?isbn=0201485672">Refactoring: Improving the Design of Existing Code</a>, written by Martin Fowler & others to teach Java programmers about refactoring. Jay Fields and others decided to <em>port</em> this historical title to Ruby to fill a gap: there was no authoritative book about refactoring for this language, so what’s better than translating the Bible on the subject?</p> +<p>If you already own the Java book you shouldn’t buy this one. This is not my personal opinion (I never read the original), it’s actually written in the Preface of the book itself. I really like honest authors, and luckily this seems to have become a trend, lately: programmers don’t like reading bullshit after all. By the authors’ own admission, this book contains roughly the same material and the same examples of the original Java book, plus some slightly more Ruby-specific content.</p> +<h3>Getting started</h3> +<p style="float:right;"><img src="/img/pictures/refactoring-ruby-ed.jpg" alt="" /></p> +<p>The first chapter, <em>Refactoring, a first example</em>, is not a first chapter. Well, it is in a literal sense, but it doesn’t look like one: no theory, no padding, you’re immediately thrown in the middle of the battle, dealing with a small program in desperate need of refactoring. It literally contains quite a lot of code: the same program is rewritten over and over with changes in bold to teach you what refactoring means. The most intimidating thing is reading names of refactoring techniques capitalized and used in a natural way, like if the reader was supposed to know them already. In all fairness though, they are self-explanatory most of the time, e.g. <em>Replace Array with Object</em>.</p> +<p>What makes this chapter even more unusual is the clever usage of white space: <em>before</em> and <em>after</em> code snippets are shown on separate page, which makes it much more immediate to see the changes in code (but it won’t work very well if you bought the ebook instead of the hardback).</p> +<p>By contrast, the second chapter <em>Principles in Refactoring</em> is all about theory: it should have been the first chapter, but it’s better this way. Here you’ll learn the basics: a bit of history, when to refactor and when not to, and so on. I bet it was taken almost verbatim from the Java book; see for example: <em>“[…] If your building APIs for outsid consumption, as <strong>Sun</strong> does […]”</em>.</p> +<p>Chapter 3, <em>Bad Smells in Code</em>, is probably the most important and useful chapter in the entire book. It’s somethig you should read over and over until you can spot a code smell right after coding.</p> +<blockquote> +<p>“You should use this chapter and the table on the inside back cover as a way to give you inspiration whn you’re not sure what refactorings to do.”</p> +</blockquote> +<p>Precisely what you have to do. Except that there is no table on the inside back cover, so I guess <a href="http://docs.google.com/viewer?url=http://www.industriallogic.com/papers/smellstorefactorings.pdf">this one</a> will have to do. Pity.</p> +<p>Chapter 4, <em>Building Tests</em>, is the usual, compulsory chapter about unit testing, i.e. the usual intro to Test::Unit. As I said, it’s essential for the book to make sense, but you can safely skip it if you know how to test already.</p> +<p>Finally, chapter 5 (<em>Toward a Catalog of Refactoring</em>) is a 2.5 page intro to the bulk of the book, nothing more than glue to ease the transition. I would have removed it completely, but that’s because I’m a merciless technical writer I guess.</p> +<h3>Diving in</h3> +<p>From chapter 6 onwards, specific refactoring techniques are described. Each chapter starts with a brief overview of the following sections (which should have been a list, but I’m just being pedantic now), so you know what to expect.</p> +<p>Each technique described has a very meaningful and immediate name that reflects its purpose, like Extract Method or Split Temporary Variable. A code example introduces the code smell and the proposed refactoring, followed by a <em>Mechanics</em> section with a list of actions to perform and an explanatory <em>Motivation</em> section.</p> +<p>Tipically, each refactoring has its own, self-contained code snippets. Depending on the complexity of the refactoring technique examined, the authors may spend half to five or six pages just to show all code iterations to get to the result. When things get too complicated, <span class="caps">UML</span> diagrams are used to make the technique easier to understand, but only when it’s strictly necessary.</p> +<p>Even if the original techniques were though for Java, the authors (in particlar Jay Fields, I guess) do a great job making sure that the Ruby code doensn’t look like Java code in disguise: the result of the refactoring always follows Ruby’s philosophy and idioms. I particularly liked the following:</p> +<ul> + <li>Replace Dynamic Receptor with Dynamic Method Definition (Chapter 6), a nice example of metaprogramming.</li> + <li>Decompose Conditional/Recompose Conditional (Chapter 9), very useful and very common</li> + <li>Replace Nested Conditional with Guard Clause (Chapter 9), another way to deal with a very common problem with conditionals</li> + <li>Extract Module (Chapter 11), very Rubyesque way to tidy up busy classes</li> +</ul> +<p>This doesn’t mean that <em>every</em> refactoring described in the book is a programmer’s epiphany, some of the techniques are indeed pretty obvious and some portion of code in need of refactoring indeed smell very, very bad! E.g.:</p> +<ul> + <li>Inline Class (Chapter 7): Who on Earth would ever create a class containing a single method returning a telephone number?</li> + <li>Replace Magic Number with Symbolic Constant (Chapter 8): Why would you use integers for constants? Didn’t Matz give us Symbols to avoid just that?</li> +</ul> +<h3>The big picture</h3> +<p>By the end of chapter 11 you should be familiar with nearly all the best possible way to get rid of code smells. That’s all good, but what happens if <em>the entire program</em> stinks? Chapter 12 (<em>Big Refactorings</em>) claims to have some answers to some common pitfalls. The techniques defined in this chapter are by no means sufficient to solve all problems caused by bad design, but they can help especially to rewrite legacy code, or programs developed by Ruby newbies:</p> +<ul> + <li>Tease Apart Inheritance</li> + <li>Convert procedural design to objects</li> + <li>Separate domain from presentation</li> + <li>Extract hierarchy</li> +</ul> +<p>They are basically all about reducing bloat and unnecessary complexity, and — to me, that is — they all sounded pretty obvious. <em>Of course</em> I’m going to separate domain from presentation! Didn’t Rails teach us anything at all? I must say I was somehow disappointed by this chapter. I was going to bet there was something slightly more advanced, maybe something about replacing traditional object instantiation with an internal <span class="caps">DSL</span>? Nope, sorry.</p> +<p>Chapter 13, on the other hand, is an excellent conclusion to the book: it really helps the reader to understand when to refactor and how to do so, depending on the situation.</p> +<h3>Conclusion</h3> +<p>This and <a href="http://www.h3rald.com/articles/design-patterns-in-ruby-review/">Design Patterns in Ruby</a> are now my favorite Ruby books. I believe they complete each other: Russ Olsen’s book is more about designing your programs properly from the start, while <em>Refactoring: Ruby Edition</em> can help to make things better at a lower level. <br /> +Ruby developers don’t need to refactor as much as Java developers, mainly because of Ruby itself, nevertheless, this is an excellent read for anyone who wants to get serious about programming in Ruby, and is determined to do so by following the Ruby Way.</p> +<p>I’ll definitely keep this book near me when I’m coding: I do believe it is much more helpful when you start using it as a reference, when you already read about all the refactoring techniques and want to put them in practice. Also, I’ll probably re-read chapter 3 on a regular basis, to get accustomed to recognize code smells, and deal with them accordingly.</p>
@@ -0,0 +1,115 @@
+----- +title: "Book Review: Reflections on Management" +content-type: article +subtitle: "The key to becoming a true leader" +timestamp: 1296942685 +tags: "review|books|software" +pdf: true +----- + + <section class="section"> +<p>When I was offered to review this book, I was a bit skeptical: a book on <em>management</em>? I normally read and review books on programming and software development methodologies. However, I work as a Documentation Technical Leader, and while I don’t technically <em>manage</em> a whole team yet (damn economic crisis!), someday I may end up doing just that, so I gave <a href="http://www.informit.com/store/product.aspx?isbn=032171153X">Reflections on Management</a> a try.</p> +<p><em>It’s short, after all, I’ll probably read it in a couple of weeks and move on</em> — I thought. Well, beware of short books: I thought exactly the same thing when I picked up <a href="http://en.wikipedia.org/wiki/The_Elements_of_Style">The Elements of Style</a>, and it still follows me around everywhere, so that I can re-read bits of it whenever I need to.</p> +<p>This short but dense masterpiece by Watts S. Humphrey and William R. Thomas is one those books you always end up carrying around in your pocket (or stored in your favorite ebook reader). It’s a short but very dense collection of tips and tricks to succeed as a leader and a manager — of <em>anything</em>: <q>Your Software Projects, Your Teams, Your Boss, and Yourself</q>, as the book subtitle says. It doesn’t “just” help forging great managers and leaders, it also explains, with practical examples and no-nonsense explanations, how to deal with those annoying people in suits who constantly keep asking you for impossible things…</p> + + + +<section class="section"> +<header><h1 id="h_1" class="toc">About Watts S. Humphrey</h1></header> +<p>Generally, I don’t bother writing anything about the authors in my reviews: you can easily find this kind of information online if you want to. I’ll make an exception in this case, you’ll understand why as you read along.</p> +<p><a href="http://www.sei.cmu.edu/watts/index.cfm?WT.ac=watts">Watts S. Humphrey</a> was a true legend in Software Engineering, he’s often referred to as <em>The Father of Software Quality</em>. He worked at <span class="caps">IBM</span> for 27 years and eventually became Vice President of Technical Development. In the 80s, he arrived at the <a href="http://www.sei.cmu.edu/">Software Engineering Institute (<span class="caps">SEI</span>)</a> where he developed some key development processes of our time: the Software Capability Maturity Model (<span class="caps">CMM</span>), the Personal Software Process (<span class="caps">PSP</span>), and the Team Software Process (<span class="caps">TSP</span>). He received many awards, culminating with the <em>National Medal of Technology</em> in 2005.</p> +<p>He wrote several books focusing mainly on software development and managing software projects through his <span class="caps">PSP</span> and <span class="caps">TSP</span> methodologies. <em>Reflections on Management — How to Manage Your Software Projects, Your Teams, Your Boss, and Yourself</em> was the last book published while he was alive. <a href="http://www.informit.com/title/0321624505">Leadership, Teamwork, and Trust: Building a Competitive Software Capability</a>, co-authored with James W. Over, was published posthumously.</p> +<p>Watts S. Humphrey <a href="http://www.sei.cmu.edu/newsitems/Humphrey_obituary.cfm">died</a> on October 28, 2010.</p> + +</section> +<section class="section"> +<header><h1 id="h_2" class="toc">Structure and Organization</h1></header> +<p>In many ways, <em>Reflections on Management</em> can be seen as the <em>summa</em> of Humphrey’s work on <span class="caps">PSP</span>, <span class="caps">TSP</span> and management of software projects, condensed in a very readable 288-page-book, co-written with <a href="http://www.sei.cmu.edu/about/people/wrt.cfm">William R. Thomas</a>, Senior Technical Writer and manager of SEI’s Technical Publications Team.</p> +<p><img src="/img/pictures/books/reflmgmt.jpg" style="float:right" /></p> +<p>I noticed the tech writer’s touch simply by flicking through the pages of the book when I first got it: its structure is impeccable.</p> +<p>Organized into four parts, totalling 8 chapters, an Epilogue and an Appendix, this book is a prime example of order and readability: pick any section title (just the title) of any section in any chapter, and you get a clear idea of their content and purpose, and a key principle of management. Examples? Sure:</p> +<ul> + <li>Chapter 8: Learning to Lead + <ul> + <li>8.1 How You Behave Affects Your Team</li> + <li>8.2 Leaders Set an Example for Their Teams</li> + <li>8.3 Learn to Avoid the Symptoms of Poor Leadership</li> + <li>[…]</li> + </ul></li> +</ul> +<p>If you print the Table of Contents alone you get a priceless cheat sheet on management and leadership. If you want slightly more detail, each chapter contains a summary table of all its sections, with a two-line summary of its contents. There are no subsections, only first-level sections, which make the book much easier to understand and “digest”.</p> +<p>You can read it all at once, then you should keep it readily available for consultation. It will take you only a few seconds to look through the contents and pick the most relevant section in a time of need.</p> + +</section> +<section class="section"> +<header><h1 id="h_3" class="toc">Writing Style</h1></header> +<p>The book is very clear and simple to read, always. Each section is self-contained, and always aims to make a point, usually expressed right in its title. If I were to find a common pattern in most of the chapters of this book, it would be the following:</p> +<ol> + <li>Identification of the problem – a particular situation or aspect is described in a way that problems are self-esplanatory.</li> + <li>Labeling and classification – the situation is analized and often a set of causes are presented to the reader, often labeled or classified.</li> + <li>List of possible solutions – a list possible solutions is presented to the reader, often as a definition list.</li> + <li>Solution details – more details are provided to prove the effectiveness of the solution, often including personal anecdotes.</li> +</ol> +<p>By doing so, the author makes sure that everything he writes about can be easily understood and accepted, because proven by personal experience.</p> + +</section> +<section class="section"> +<header><h1 id="h_4" class="toc">Contents</h1></header> +<section class="section"> +<header><h1 id="h_5" class="toc">Part I: Managing Your Projects</h1></header> +<p>The book starts with a general introduction on Software Quality. If you are new to the subject (and you <em>shouldn’t</em> be), this is probably one of the best and to-the-point overviews you’ll ever find, written by the man who almost came up with the concept.</p> +<p>The second chapter is about planning. Actually, the whole book is about planning at different levels, so no, you should not dismiss this part. <em>Good</em> plans are important, and they are your best weapon against management, if you excuse the expression.</p> +<p>Someone may object that if you’re working in an <em>agile</em> team, you shouldn’t spend a lot of energy in long-term planning, but rather focus on dealing with frequent requirement changes and deliver often and regularly. While this can be true, planning is still important: you won’t produce any rigorous schedule or design documents, but you still have to be able to provide accurate estimates and very often!</p> + +</section> + + <section class="section"> +<header><h1 id="h_6" class="toc">Part II: Managing Your Teams</h1></header> +<p>The second part of the book focuses the <em>Team</em>, the people in it, their roles, their responsability and its leadership. Chapter 3 introduces Tom DeMarco’s concept of <em>Jelled Team</em>, i.e. a team that is more than the sum of its parts, and is characterized by cohesion, challenging goals, frequent feedback, a common working framework and good communication.</p> +<p>The Holy Grail. The dream of every team leader and its members. The good news is, it can be done. Any team can jell, and teams <em>like to jell</em> furthermore, if the proper conditions exist, and the three chapter in this third part will teach you everything from being a good team member to becoming a great team leader.</p> +<p>In many ways, this was my favorite part of the book. It’s amazing how a lifetime of experience is distilled in just a few pages. Chapter 5 (Leading and Coaching your Teams) is very, very inspiring and very helpful in understanding how to become a good team leader, how to motivate and involve people, and how to manage them rationally.</p> +<p>The story of Humphrey’s high school wrestling coach Umbach is a classic example of a truly dedicated, inspiring, and successful leader:</p> + <blockquote>“The workouts were so tough that the matches seemed easy. By the end of the year, several of us were undefeated, the team took the 13-state championship, and we were campus heroes. All of this from a ragtag bunch of inexperienced recruits. It was Coach Umbach who made the team.<br /> +<br /> +Our coach’s dedication, commitment and energy were amazing, but what I found most inspiring was that he really cared about how each of us did. I have always remembered how he made a small band of raw recruits into a championship team and how he fostered the kind of cohesive team spirit that made losing simply unthinkable."</blockquote> + +</section> + + <section class="section"> +<header><h1 id="h_7" class="toc">Part III: Managing Your Boss</h1></header> +<p>The third part consists of a single chapter: <em>Negotiation your projects and defending your plans</em>. It doesn’t matter if you want to pretend otherwise: as soon as you become a team leader and you have to deal with management, you’ll have to deal with complex internal politics.</p> +<p>This chapter is about learing to be pragmatically diplomatic and deal with management. It’s about creating good plans that can survive confrontation with your managers, no matter what their demands are.</p> +<p>There’s no silver bullet: I appreciated the honesty of the author when providing solutions. Section 6.6 (What to do when a project is doomed) is an example of this:</p> +<blockquote> +<p>You’re on a project and it’s headeing south. While everubody is trying their hardest, and you’re doing your level best to help, you can feel it in your bones: the project is doomed to fail. What can you do? You have three choices.</p> +<ol> + <li>Keep plugging away and hope things will improve.</li> + <li>Look for another job.</li> + <li>Try to fix the problems.</li> +</ol> +</blockquote> +<p>That’s right. Look for another job. That almost made me laugh, but it made me understand that in some extreme situation that may just be the best solution.</p> + +</section> + + <section class="section"> +<header><h1 id="h_8" class="toc">Part IV: Managing Yourself</h1></header> +<p>The last part of the book is about you. I would probably have moved it earlier on in the book, maybe right after the first part, but it serves as a good ending for the book. Chapter 7 (Taking Control of Your Work) is a must-read for anyone. It teaches you how to manage your working life, from time management (The 18 Hour Work Week) to psychological aspects (What Do You Want From Life?).</p> +<p>Chapter 8 (Learning to Lead), is a nice writeup on the essence of Leadership, and what it measn to be a good leader rather than a manager. A great read.</p> + +</section> + +</section> +<section class="section"> +<header><h1 id="h_9" class="toc">Final Thoughts</h1></header> +<p>Reading certain sections of this book felt a little bit weird at first. <span class="caps">TSP</span>, <span class="caps">PSP</span>, heavy planning and documents… are they still relevant in a “real world” now dominated by <em>agile</em> practices, Scrum, Kanban and similar? Do you really have to provide detailed plans and documentation to convince management?</p> +<ul> + <li>You may not have detailed design documents, but you still have user stories.</li> + <li>You may not be required to plan ahead of 6 months, but you still have to plan frequently and provide accurate estimates.</li> + <li>You may not be required to trace and track everything you do, but at the very least you have to monitor your <em>velocity</em> and produce <em>burndown charts</em>.</li> +</ul> +<p>Yes, you read “<span class="caps">PSP</span>” and “<span class="caps">TSP</span>” everywhere in the book, but they are just labels. The methodologies and processes may change, but <em>the principles</em> will always remain true. This book is about understanding the very essence of management and leadership, and it will remain an invaluable resource for anyone who wants to build a career in the Software Industry.</p> + +</section> + +</section>
@@ -0,0 +1,14 @@
+----- +title: "Review Services" +content-type: article +timestamp: 1197631440 +tags: "review|website|personal|tools|books" +----- +<p>When it comes to software, I definitely like to try out new things. My collegues takes the piss out of me because every <del>week</del> day I come up with “some new tool they <em>have</em> to start using” and so on.<br /> +As a matter of fact, I like reviewing software as well. I enjoy writing and analyzing new things, evaluating all the new possibilities they may offer, and I also tend to have a rather critical eye for what doesn’t <em>feel</em> right. I’ll use a tool for months but still try out new ones which claim to do the same thing — but better — as they come out.<br /> +Unfortunately — or fortunately, depends how you look at it — when it comes to software, there are very few <em>silver bullets</em>, and things keep changing: that’s the way it is and the way it will be.</p> +<p>I must try to write up a page (and ideally update it regularly, that’s the hard part) listing all the tools I use, at some point… but at any rate, if you coded some new app you think kicks ass or you found a hidden jewel in the labyrinth of freeware, just let me know: I’ll definitely try it out, and if it’s worth a post I’ll blog about it.</p> +<p><strong>The same applies to books</strong>, actually, as I like reading, especially those which are related to Ruby or programming, nowadays.</p> +<p>The cost of such reviews and articles? Depends! Certainly I wouldn’t mind donations or some compensation of some form, especially from publishers or software companies. It may be money, books, software or even nothing: it really depends on what I have to review.<br /> +Please be aware that I am <strong>not</strong> doing this full time, and I already have a job and a fiancée to look after, but I’ll do my best to publish as much as I can on my site or even elsewhere elsewhere [Note: on e-zines, magazines & similar, not on your brother’s friend’s mother-in-law’s crappy blog!].</p> +<p>For any inquiries, contact me (<strong>h3rald [—at—] h3rald.com</strong>).</p>
@@ -0,0 +1,9 @@
+----- +title: "Ruby on Rails & CakePHP" +content-type: article +timestamp: 1152258748 +tags: "cakephp|rails|tutorial" +----- +<p>This article is an attempt to port a famous Ruby on Rails tutorial to <span class="caps">PHP</span> using an emerging <span class="caps">PHP</span> <span class="caps">MVC</span> framework, CakePHP. CakePHP was inspired by Rails’ philosophy of Rapid Application Development. It implements a lot of the features and concepts that made Ruby on Rails popular in a very short time. Although Ruby’s syntax and way of doing things is known to be much more elegant than other programming languages, there is yet hope for <span class="caps">PHP</span> to get more organized and effi cient. This tutorial will follow its Rails counterpart step-by-step, covering the essential steps to create a simple, yet fully functional, web application.<br /> +Register on the <a href="http://www.php-mag.net/magphpde/psecom,id,20,archive,2,noeid,20,.html">International <span class="caps">PHP</span> Magazine</a> to read the full article.<br /> +<img src="/img/thumbs/phpmag0706.gif" alt="" /></p>
@@ -0,0 +1,16 @@
+----- +title: "Ruby Compendium v0.2.0 released" +content-type: article +subtitle: "With up-to-date Ruby implementations, more resources, and online version" +timestamp: 1312732912 +tags: "ruby-compendium|books|ruby" +----- + + <section class="section"> +<p>The Ruby Compendium has been updated, and it now lists the most up-to-date versions of various Ruby implementatios, even more web sites, books, podcasts, and Rubyists. In addition to the <span class="caps">PDF</span> version, the book can now be read online <a href="/ruby-compendium/book/">here on H3RALD.com</a>.</p> +<p>Overall, this is a relatively minor update; however, I felt it was a good time to release it to keep the book up-to-date.</p> + +<p>The <em>Ruby Compendium</em> is available free of charge, under the terms of the <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0 Unported License</a>, and you can help improving it! It was written using my very own <a href="http://www.h3rald.com/glyph">Glyph Framework</a>, and the entire source code is available on <a href="https://github.com/h3rald/ruby-compendium">GitHub</a>, for anyone to fork.</p> +<div style="text-align:center;margin:20px; auto;font-size: 18px; font-weight:bold;"><a href="https://github.com/downloads/h3rald/ruby-compendium/ruby-compendium.pdf">Download <span class="caps">PDF</span></a> | <a href="http://www.h3rald.com/ruby-compendium/book">Read Online</a></div> + +</section>
@@ -0,0 +1,66 @@
+----- +title: "Italian translation of Ruby-Lang.org finally available!" +content-type: article +timestamp: 1226756880 +tags: "ruby" +----- +<p><a href="#italian-version">[Vai alla versione italiana]</a></p> +<p>I am very pleased to announce that the official site of the Ruby programming language is now available in Italian:</p> +<p><strong><a href="www.ruby-lang.org/it/">www.ruby-lang.org/it/</a></strong></p> +<h3>In the beginning…</h3> +<p>It all started in July 2007, when after a closer look at the site I discovered that apparently it was not available in Italian! How could it be? There were a lot of translations available, such as French, Spanish, Japanese, Korean… but no Italian. <br /> +I immediately emailed the webmaster and within a few hours <a href="http://curthibbs.wordpress.com/">Curt Hibbs</a> (hell yes, <a href="http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html">that</a> Curt Hibbs!) mailed me the instructions to get me started:</p> +<blockquote> +<p>“[…] Providing a translation of the Ruby web site would have two parts: 1) the initial translation of the current content, and 2) the ongoing maintenance of the Italian version as new content and news items are added.</p> +<p>This effort will be much more sustainable over the long term if you put together a team of at least three people who would commit to translating and maintaining the site. […]"</p> +</blockquote> +<p>…Why <em>three</em> people to translate “a few pages”? That’s what bugged me at the time: it honestly seemed just a few days work for one person at most. Later on I understood why.<br /> +I wasn’t the first to volunteer for the Italian translation, actually: <strong><a href="http://www.raulparolari.com">Raul Parolari</a></strong> was indeed the first, but he was waiting for another two team members to start, of course.</p> +<p>We eventually persuaded Curt that <em>we could handle it</em> even without a third team member, so we started right away. As a matter of fact, we did manage to translate a lot of stuff within the first week.</p> +<h3>Translating is easy, right?</h3> +<p>Translating feels easy when you are mother tongue in the language you’re translating into (Italian), and you know fairly well the language you’re translating from (English): it can’t possibly hard, right? Nah, a piece of cake. <br /> +Most of the time it’s fairly easy and fast, too, but things can get a bit more complicated when you stumble upon idioms and tech jargon.</p> +<p>Personlly, I never surf the web in Italian. That’s a personal choice (I love the English language to an extreme extent), and I’ve learnt to live with it no matter what people think. I admit that it was hard for me to translate some of the things on the Ruby web site: not because they were hard for me to understand, but because in some cases a translation would simply not do justice to the original text.</p> +<p>Some of the text may sound weird in Italian, especially in the code examples. In the end we choose to translate every bit of code, e.g. <code>puts sentence</code> became <code>puts frase</code> and other equally horrid things. Sometimes I wonder whether we should have just left the original code as it was, but we wanted to make things easier for people who don’t speak much English at all.</p> +<h3>Stagnation</h3> +<p>Things went quite after the initial excitement, I admit. Both Raul and me more or less stopped translating as time went on, and I am truly and deeply sorry for that. You know how it is: you start off really enthusiastic and then you lose interest, you get involved in other projects, work, family, etc. etc.</p> +<p><strong><a href="http://www.lipsiasoft.com/">Davide D’Agostino</a></strong> came to our rescue in December 2007. He’s arguably the “most Italian” of the group and he came out with some interesting solutions for some particularly difficult bits of the translation. <br /> +Believe it or not, the 80% of the site was translated by the beginning of 2008: only a few bits were left, but then… erhm, things went quiet again. I put the translation of the site on my todo list, and I knew it was there all along: “Oh, yes, I should have a look at Ruby-Lang.org again” I repeated to myself from time to time.</p> +<p>About two weeks ago I got so pissed off with myself about this that I decided to finally “get things done” and translate the few remaining bits, reviewed the lot, got rid of some rough edges, did some minor proofreading and here it is, ready to be browsed by Italians, finally.</p> +<p>The most ironic thing? It took literally a few hours of “work” to sort things out… but nearly a year to finally find the will to do it.</p> +<h3>What now?</h3> +<p>Now the site is live and we’ll keep it up-to-date from now on. I sincerely hope it will help bringing more and more Italians closer to the Ruby world. I’m sure there are plenty of people out there who would have done a much better job than we did, and definitely in a much shorter timeframe… but hey, we finally did it, after all!</p> +<p>I would like to thank again <strong><a href="http://www.raulparolari.com">Raul Parolari</a></strong> and <strong><a href="http://www.lipsiasoft.com/">Davide D’Agostino</a></strong> for helping translating the site: I now finally understand why Curt wanted three people on the translation team!</p> +<p>One last thing: if you find any mistake (and there are plenty, I’m sure) or if you have any suggestion to improve the current translation, don’t hesitate to <a href="/about/">contact me</a>: I’ll try to fix things as soon as possible.</p> +<p>Enjoy Ruby, now finally <a href="http://www.ruby-lang.org/it/">in Italian</a> too!</p> +<hr /> +<p><a name="italian-version"></a></p> +<h2>È finalmente disponibile la traduzione italiana di Ruby-Lang.org</h2> +<p>Sono veramente contento di annunciare che il sito ufficiale del linguaggio di programmazione Ruby è ora disponibile anche in Italiano:</p> +<p><strong><a href="www.ruby-lang.org/it/">www.ruby-lang.org/it/</a></strong></p> +<h3>In principio…</h3> +<p>Tutto incominciò nel luglio del 2007, quando dopo un’occhiata più da vicino al sito mi accorsi che apparentemente non era disponibile in italiano! Com’era possibile? Era già tradotto in molte lingue tra cui francese, spagnolo, giapponese, coreano… ma niente italiano.</p> +<p>Mandai immediatamente un’email al webmaster, e in poche ore <a href="http://curthibbs.wordpress.com/">Curt Hibbs</a> (già, proprio <a href="http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html">quel</a> Curt Hibbs!) mi inviò le istruzioni su come iniziare a tradurre:</p> +<blockquote> +<p>“[…] La traduzione del sito di Ruby è articolata in due parti: 1) la traduzione iniziale degli attuali contenuti e 2) il continuo aggiornamento della versione italiana ogniqualvolta vengono create nuove pagine.</p> +<p>Questo sforzo è molto più sostenibile nel lungo termine se riesci a mettere insieme una squadra di almeno tre persone dedite a tradurre e ad aggiornare il sito. […]"</p> +</blockquote> +<p>…Perchè <em>tre</em> persone per tradurre “solo poche pagine”? Questo quello che mi chiesi in quel momento: sembrava veramente essere una questione di pochi giorni, e sicuramente una persona sarebbe stata più che sufficiente. Successivamente capii perchè tre persone erano necessarie.</p> +<p>Comunque, non ero il primo ad offrirmi volontario per la traduzione italiana: <strong><a href="http://www.raulparolari.com">Raul Parolari</a></strong> si era già fatto avanti, ma stava ancora aspettando altre due persone per poter iniziare, ovviamente.</p> +<p>Alla fine, riuscimmo comunque a persuadere Curt che <em>ce la potevamo fare</em>, anche senza una tersa persona ad aiutarci. Incominciammo a tradurre quindi di buona lena, e di fatto riuscimmo a tradurre molto durante la prima settimana.</p> +<h3>Tradurre è facile, non è così?</h3> +<p>Tradurre dall’inglese all’italiano sembra facile se sei madrelingua e conosci bene l’inglese: non può essere difficile, giusto? Facilissimo, ovvio. <br /> +Per la maggior parte è così, di fatto: facile e veloce. Ma le cose tendono a complicarsi un pochettino quando hai a che fare con modi di dire e linguaggio un po’ più tecnico.</p> +<p>Personalmente, non vado mai su siti italiani. È una mia scelta personale (mi piace tantissimo la lingua inglese), e ho imparato a non fare caso a quello che gli altri pensano di questa scelta. Devo ammettere che è stato difficile per me tradurre alcune parti del sito di Ruby: non perchè fossero difficili da capire, ma perchè in qualche caso una traduzione non è semplicemente in grado di rendere giustizia al testo originale.</p> +<p>Alcuni pezzi della traduzione, per questa ragione, potrebbero suonare un po’ strani alle orecchie di Italiani d.o.c., specialmente per quanto riguarda gli esempi di codice. Alla fine abbiamo deciso di tradurre la maggior parte del codice (ove possibile, ovviamente): <code>puts sentence</code> è quindi diventato <code>puts frase</code>, e altri simili orrori. Qualche volta mi chiedo se non avessimo fatto meglio a lasciare il codice originale così com’era, ma d’altra parta abbiamo cercato di fare il possibile per rendere le cose più semplici anche per persone che non sanno una parola di inglese.</p> +<h3>Stagnazione</h3> +<p>Col tempo, l’iniziale interesse nella traduzione è andato affievolendosi, lo ammetto. Sia io che Raul abbiamo praticamente interrotto la traduzione ad un certo punto, e mi dispiace veramente tanto. Sapete com’è: incominci entusiasta e poi piano piano inizi a perdere interesse, ti dedichi ad altri progetti, il lavoro, la famiglia, eccetera.</p> +<p><strong><a href="http://www.lipsiasoft.com/">Davide D’Agostino</a></strong> venne in nostro aiuto nel Dicembre 2007. Penso che sia quello “più italiano” del gruppo, tanto da essere in grado di proporre soluzioni interessanti per alcuni pezzi particolarmente difficili da tradurre. Che ci crediate oppure no, l’80% del sito era pronto e tradotto all’inizio del 2008: rimanevano solamente alcune piccole parti ancora da tradurre, e poi… beh, abbiamo un po’ lasciato perdere, di nuovo. La traduzione del sito era tra le mie cose da fare, c’è sempre stata: “Sì, certo, <em>dovrei</em> dare un’occhiata a Ruby-Lang.org”… mi sono ripetuto questa frase periodicamente, senza di fatto fare nulla.</p> +<p>Poi, finalmente, due settimane fa mi sono deciso a finire il lavoro traducendo le poche pagine rimaste, revisionando il tutto, facendo un po’ di pulizie qua e là, ed ecco qui: il sito può ora essere visitato da tutti gli italiani che lo desiderano.</p> +<p>La cosa più ironica? Sono bastate solo poche oro di “lavoro” per mettere le cose a posto, ma quasi un anno per trovare finalmente la forza di volontà per farlo…</p> +<h3>E adesso?</h3> +<p>Ora il sito è accessibile e lo terremo aggiornato d’ora in avanti. <br /> +Spero sinceramente che possa contribuire ad avvicinare sempre più italiani al mondo di Ruby, anche se sono sicuro che ci sono moltissime altre persone là fuori che avrebbero fatto un lavoro più ben fatto del nostro, e sicuramente in tempi molto più brevi… ma dopotutto, alla fine ce l’abbiamo fatta, no?</p> +<p>Vorrei spendere ancora due parole per ringraziare nuovamente <strong><a href="http://www.raulparolari.com">Raul Parolari</a></strong> e <strong><a href="http://www.lipsiasoft.com/">Davide D’Agostino</a></strong> per avermi aiutato a tradurre questo sito. Finalmente ora capisco perchè Curt voleva tre persone nel gruppo di traduzione!</p> +<p>Un’ultima cosa: se qualcuno di voi trova un errore (e ce ne saranno molti, ne sono sicuro), o se ha un suggerimento per migliorare l’attuale traduzione, può <a href="/about/">contattarmi</a>: cercherò di correggere il sito quanto prima possibile.</p> +<p>E ora, divertitevi con Ruby, ora anche <a href="http://www.ruby-lang.org/it/">in italiano</a>!</p>
@@ -0,0 +1,7 @@
+----- +title: "Easy-to-install server packages" +content-type: article +timestamp: 1119989539 +tags: "review|webdevelopment|php|databases" +----- +The first and most obvious difference between, say, a C++ programmer and a PHP developer is that the PHP developer needs a server with PHP support up and running somewhere in order to "show" others that the application is working. This normally means that a PHP developer must either have remote access to a server, or have one set up on his machine. Installing and configuring a server can be tricky sometimes, especially if you want to configure it "properly", but in some cases - for Linux/BSD users mainly - there are some pre-configured servers you can download and install. <br /><br />I won't examine all these methods in this article, but I'll describe three alternatives for installing and run a webserver on windows in 10 minutes or less.<br /><br /><strong>Preliminary considerations</strong><br />Let's assume that you just want to have a server set up on your computer for <em>internal use</em> only, for testing purposes. That means that you wouldn't need to be concerned about "security" or similar issues - you just want to be able to run your PHP scripts and access your database(s) quickly and easily. <br /><br />As I said earlier, Linux users would probably opt for some package available for their favourite distros - they would only have to download and install an .rpm or .deb package for (presumably) Apache httpd, PHP and MySQL, and just use a basic configuration. There are other tools around which can help if you want to compile or configure Apache, but that is beyond the scope of this article.<br /><br />Let's just focus on Windows users, then. Normally they like things that are easy to install and can be configured in a few minutes <em>maximum</em> or not at all. Finally, let's assume that as a Windows user, you don't want to spend more money for a new operating system with a bundled server, like Windows 2003, because you can use <a href="http://www.apache.org">Apache</a> on Windows as well, for free. Having said this, I actually found 3 possible solutions that are handy for PHP (or Perl) developers who don't want to spend time learning how to configure a server. There are people like that, including myself to some extent.<br /><br /><br /><strong>WAMPserver</strong><br /><a href="http://www.wampserver.com">WAMP</a> stands for "Windows Apache MySQL PHP", and I must say that this product happens to be my choice. The current version, available at the time of writing, offers:<br /><br />- PHP 5.0.4<br />- Apache 1.3.33<br />- MySQL 4.1.10a<br />- phpMyadmin 2.6.1-pl3<br />- SQLitemanager 1.0.4<br /><br />This is basically a fully working PHP5 environment, with other tools like phpMyadmin to administer your MySQL database even more easily (more laziness!), and, if you're into the new functionalities of PHP5, it also comes with sqlitemanager, a php application similar to phpMyAdmin but for sqlite databases, which are supported by default in PHP5.<br />You download it, you start the installation program, and it's DONE. That's it. In 5 minutes you have your own little apache/php/mysql(ite) environment up and running and you can start showing off your sites to your friends and co-workers right away.<br /><br />The program also installs two services which can be run at startup, a little icon in the system tray to access all the tools and, of course, <a href="http://localhost">http://localhost</a> in your favourite browser.<br /><br />If all this is still not enough for you, and you want more things more easily, you can install addons to set up PHP4 (and seamlessly switch between the two with a single click!), Perl, Zend Accelerator, and so forth.<br /><br /><br /><strong>EasyPHP</strong><br />The second suite I will briefly describe is <a href="http://www.easyphp.org">EasyPHP</a>. This is a French project (like the previous one, actually), which offers PHP4, MySQL and Apache, plus phpMyAdmin to administer the MySQL databases. However, it doesn't offer PHP5 support yet (so it's not my favourite) and thus there's no sqlite support either.<br /><br />Apart from that, it works exactly like WAMP: you download it, you install it, and it's done. Services are installed and you have - again - your little icon on the system tray to access all its functions and tools. It works well, but it doesn't seem to have any add-ons available like WAMP does.<br /><br /><strong>XAMPP</strong><br />This is by far the most complete distribution of the three I am focusing on. This project is developed by <a href="http://www.apachefriends.org">Apache Friends</a> and has a lot of features and flavours. XAMPP currently includes:<br /><br />- Apache HTTPD 2.0.54<br />- MySQL 4.1.12<br />- PHP 5.0.4 + 4.3.11 + PEAR + Switch<br />- MiniPerl 5.8.6<br />- Openssl 0.9.7g<br />- PHPMyAdmin 2.6.2-pl1<br />- XAMPP Control Panel 1.0<br />- eAccelerator 0.9.3<br />- Webalizer 2.01-10<br />- Mercury Mail Transport System for Win32 and NetWare Systems v4.01a<br />- FileZilla FTP Server 0.9.8a<br />- SQLite 2.8.15<br />- ADODB 4.63<br />- Zend Optimizer 2.5.7<br />- XAMPP Security for Windows 98, 2000, XP<br /><br />Honestly, you can't ask for more! If by chance you want to run this suite on other platforms, there's a version for Mac OS X, Solaris, and even Linux.<br /><br />The installation method for XAMPP is slightly more difficult than the other suites - you actually have to download and unzip it in a folder of your choice. Then you're off and running.<br /><br />Unfortunately (or fortunately), there's no icon on the system tray, so you need to actually access <a href="http://localhost">http://localhost</a> to get a list of services and tools. It also doesn't come with sqlitemanager, but you can download it and install it in the documents folder (like I did).<br /><br />I actually use XAMPP - the "lite" edition, which is smaller and has less features - for my USB drive. Since it doesn't require any services to be installed in order to run, you can simply copy it onto a USB stick and run it from there!<br /><br /><strong>Conclusion</strong><br />I'm quite impressed by all of the server packages I reviewed; WAMP and XAMPP in particular. I can now carry around my websites and applications and instantly run them or show them to anyone who has a computer with a USB port.<br /><br />As I said in the beginning, these programs are NOT meant to be used in a production environment or to be accessed publicly, therefore, security is not a consideration here. In my opinion, they are simply excellent for testing purposes, and for now, that's what I need them for.<br />
@@ -0,0 +1,53 @@
+----- +title: "Simply on Rails - Part 1: Concepts and Bubbles" +content-type: article +timestamp: 1183786980 +tags: "rails|website|web20" +----- +<p>The first thing I do when I start developing a new application is write down some ideas.</p> +<p>Pen and paper normally do the job, but nowadays there are some valid online and offline applications which work as good if not (probably) better.</p> +<p>I’ve never been a fan of <a href="http://en.wikipedia.org/wiki/Mind_Mapping">Mind Mapping</a>. I’ve been to a seminar on problem solving and creativity and they were showing how mind mapping can unleash your creativity, but it didn’t really work for me. I found the concept-idea-concept-idea sequences a bit too restrictive for my liking.</p> +<p>So I decided to try something different: bubbles! <a href="http://www.bubbl.us/">Bubbl.us</a> is an interesting online flash application which lets you create bubbles. You can create bubbles and relationships between them, change their color, their dimensions etc. And above all it’s absolutely fun to use. I created two bubble sheets, the first one to define how content will be organized in the next version of ItalySimply:</p> +<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="450" height="340" id="bblviewer"><br /> +<param name="movie" value="http://bubbl.us/sys/view.swf?sid=26306&pw=yaeyI.megNtZcMTh3azVsVjhwVEt0TQ" /><br /> +<param name="quality" value="high" /><br /> +<param name="SeamlessTabbing" value="false" /><br /> +<param name="AllowScriptAccess" value="always" /><br /> +<param name="FlashVars" value="_sid=26306&_title=ItalySimply%20v3%20-%20Content&_z=75&_pw=yaeyI.megNtZcMTh3azVsVjhwVEt0TQ" /><br /> +<embed src="http://bubbl.us/sys/view.swf?sid=26306&pw=yaeyI.megNtZcMTh3azVsVjhwVEt0TQ" FlashVars="_sid=26306&_title=ItalySimply%20v3%20-%20Content&_z=75&_pw=yaeyI.megNtZcMTh3azVsVjhwVEt0TQ" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="450" height="340" allowscriptaccess="always" SeamlessTabbing="false" name="bblviewer"></embed><br /> +</object></p> +<p>The diagram identifies three main types of content:</p> +<ul> + <li>Houses – basically what the site is about: house listing with information and pictures about houses for sale or rent.</li> + <li>Links – Either swapped with partners or suggested by users.</li> + <li>Pages – Static content.</li> +</ul> +<p>which will be organized in three different ways:</p> +<ul> + <li>Tags</li> + <li>Categories</li> + <li>An internal search engine, allowing people to filter houses according to some criteria.</li> +</ul> +<p>The other sheet focuses on relationships between content and users.</p> +<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="450" height="340" id="bblviewer"><br /> +<param name="movie" value="http://bubbl.us/sys/view.swf?sid=26307&pw=yaeyI.megNtZcMTgxeUw0S0FSNzhFNg" /><br /> +<param name="quality" value="high" /><br /> +<param name="SeamlessTabbing" value="false" /><br /> +<param name="AllowScriptAccess" value="always" /><br /> +<param name="FlashVars" value="_sid=26307&_title=ItalySimply%20v3%20-%20Communication&_z=75&_pw=yaeyI.megNtZcMTgxeUw0S0FSNzhFNg" /><br /> +<embed src="http://bubbl.us/sys/view.swf?sid=26307&pw=yaeyI.megNtZcMTgxeUw0S0FSNzhFNg" FlashVars="_sid=26307&_title=ItalySimply%20v3%20-%20Communication&_z=75&_pw=yaeyI.megNtZcMTgxeUw0S0FSNzhFNg" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="450" height="340" allowscriptaccess="always" SeamlessTabbing="false" name="bblviewer"></embed><br /> +</object></p> +<p>At the far sides we have users and administrators, and in the middle how they interact between themselves or with content, in particular:</p> +<ul> + <li>Users will be able to access house feeds and be notified automatically of new additions</li> + <li>Users will be able to ask questions or comments to each house (they’ll be moderated, of course).</li> + <li>Users will be able to suggest links, or contact administrators using a “House Preferences” form or a more generic contact form.</li> +</ul> +<p>Bubbles are fun, but while I was creating these two diagrams, I felt I absolutely needed to name the relationships between each entity or concept, so I spend some time trying to find a tool who would let me do so in an easy and fast way.</p> +<p>Yep, I needed to create a <a href="http://en.wikipedia.org/wiki/Domain_model">domain model</a> to move a bit closer to create the database architecture of the site.<br /> +It turns out that this magic tool exists, and it’s free for non-commercial use: <a href="http://cmap.ihmc.us/download/">CmapTools</a>.<br /> +It’s not web based, and it’s a 59MB Java desktop application which can be used to create <a href="http://en.wikipedia.org/wiki/Concept_map">Concept Maps</a>.</p> +<p>Within minutes I was able to create a simple but pretty and functional enough domain model for my site:</p> +<p><img src="/files/ItalySimply-v3_domain-model.jpg" alt="" /></p> +<p>Basically all the concepts I used are going to become models, and all the named relationships will become model associations in Rails.</p> +<p>Next step: database architecture.</p>
@@ -0,0 +1,16 @@
+----- +title: "Simply on Rails - Part 2: Database Design" +content-type: article +timestamp: 1184405220 +tags: "rails|databases" +----- +<p>This week I attended a course for work on how to <em>Implement Databases with Microsoft <span class="caps">SQL</span> Server 2005</em>. An interesting course indeed, which made me realize how feature-rich Bill’s product is, compared to the Open Source alternatives like MySQL. It also made me realize how nice it is to implement database-related logic (read: Models) using a <em>proper</em> programming language rather than using triggers, stored procedures, functions and other goodies offered by Transact-<span class="caps">SQL</span>.</p> +<p>It’s all a matter of taste and of necessities: using MS <span class="caps">SQL</span> Server for one of my website is simply not going to happen anytime soon, and I’m more than happy to have a database which can be used <em>just</em> as a database and a programming language (Ruby, in this case) which can do wonders, rather than a procedural-only surrogate.</p> +<p>Anyhow, back to our weekly series. After creating a <a href="/blog/simply-on-rails-1-concepts-map">concept map</a>, it’s time of <em>get real</em> and try to figure out a database architecture. The tool of choice this week is obviously the widely popular <a href="http://fabforce.net/dbdesigner4/">DbDesigner 4</a>. It’s free, it’s easy to use, and the results are pretty enough. There:</p> +<p><a href="/files/italysimply_database-architecture.png"><img src="/files/italysimply_database-architecture_thumb.png" alt="" /></a></p> +<p>It’s amazing how a relatively simple concept map can lead to such a complex database architecture, isn’t it?<br /> +Well, it’s normal. One of the reasons of this is that I totally forgot about geographical information about the houses which will be featured on the site, or better, I thought about it as a <em>strings</em> typed in by the administrators, whereas it would be much better having dropdown boxes.</p> +<p>Countries, regions, privinces, areas and cities will be added to the database only once, rather than having to type them in every time a house is added. Obvious, but this lead to five tables more and nine (!) relationships more.</p> +<p>The other reason of why the number of tables is higher than the number of entities in the domain model is that I decided <em>not</em> to use the <span class="caps">ENUM</span> type. Firstly because <a href="http://wiki.rubyonrails.org/rails/pages/HowtoUseSetAndEnumColumns">it’s not handled very well by Rails</a><br /> + and also because there’s <a href="http://blog.arabx.com.au/?p=87">a number of reasons</a> why ENUMs should not be used.</p> +<p>The only problem now is that whenever I load a house, I’ll have to get data from a lot of tables at once (and this means a lot of joins underneath the model layer) or – worse – a lot of queries in case I decide to load related data “on the fly”. It looks like I’ll have to do a bit of <a href="http://railsexpress.de/blog/articles/2005/11/06/the-case-for-piggy-backed-attributes">piggy-backing</a> here and there. <a href="http://railsexpress.de/blog/articles/2006/05/29/simpler-piggy-backing">Someone</a> already thought about a way of doing this in a more “Model-friendly” way. Perhaps I’ll give it a shot.</p>
@@ -0,0 +1,82 @@
+----- +title: "Simply On Rails - Part 4: Quick and Easy Default Data Migrations" +content-type: article +timestamp: 1189854600 +tags: "rails|ruby|databases" +----- +<p>In the <a href="http://www.h3rald.com/blog/simply-on-rails-3-shared-controller">last post</a> of this series I tried to find a <acronym title="Don't Repeat Yourself"><span class="caps">DRY</span></acronym> solution to deal with tables storing “ancillary” data, i.e. names of user roles, predefined categories, page state names and other similar things.<br /> +I personally chose to put this kind of data to make my application more dynamic, although I could have decided to use ENUMs or simply ordinary varchar fields — that would have been easier, but less flexible. For now, I’m sticking with my original choice.</p> +<p>The data in these tables is kind of a prerequisite for the application to run: I must be able to have a status to assign to a user when creating it, and the same applies to roles. Sure, I could spend 20 minutes populating these tables manually, but it would be nice if there was a less tedious way, wouldn’t it?</p> +<p>There is indeed. The inspiration came from a technique described in the book (which I highly recommend) <em>Agile Web Development With Rails</em>, in which the author outlines how it would be possible to use Rails’ fixtures and migrations to load data in the database automatically from <span class="caps">YAML</span> files. <br /> +All you have to do is create a migration to load the specified <span class="caps">YAML</span> files and you’re all set.</p> +<p>I wanted to take a little step further, allowing the migration to load data from <em>all <span class="caps">YAML</span> files in a specific directory</em>, automatically.Let’s start creating the <span class="caps">YAML</span> files then and place them all in one directory of the application like <code>/db/migrate/defaults</code>. Here’s the one I used for user roles, for example:</p> +<div class='yaml'><pre><code>visitor: + id: 1 + name: Visitor + level: 0 + +user: + id: 2 + name: User + level: 10 + +contributor: + id: 3 + name: Contributor + level: 20 + +provider: + id: 4 + name: Provider + level: 50 + +operator: + id: 5 + name: Operator + level: 100 + +administrator: + id: 6 + name: Administrator + level: 500 + +webmaster: + id: 7 + name: Webmaster + level: 1000</code></pre></div><p>The important thing to remember is to provide a unique string to identify each record, before specifying each fiels. The other files look similar, so I won’t bother listing them here.</p> +<p>And here’s the simple code for the migration:</p> +<div class='ruby'><pre><code>require 'active_record/fixtures' + +class LoadDefaults < ActiveRecord::Migration + + def self.up + down + models = self.default_models + models.each do |m| + Fixtures.create_fixtures(self.default_directory, m) + end + end + + def self.down + models = self.default_models + models.each do |m| + eval("#{m.singularize.capitalize}.delete_all") + end + end + + def self.default_directory + File.join(File.dirname(__FILE__), "defaults" ) + end + + def self.default_models + files, names = Dir.glob("#{self.default_directory}/*.yml"), [] + unless files.blank? + files.each { |f| names << File.basename(f, '.yml') } + names + else + [] + end + end + +end</code></pre></div><p>Basically the migration will look in a directory named “defaults” for some <span class="caps">YAML</span> files named after a particular database table, and it will attempt to load all the records defined in each one of them. <br /> +The <code>down</code> method of the migration <em>deletes all the data in the specified tables</em>, so use with care…</p>
@@ -0,0 +1,22 @@
+----- +title: "Simply on Rails?" +content-type: article +timestamp: 1183176000 +tags: "rails|web20" +----- +<p>So finally my site is back up, I don’t have to worry about coding anymore: just writing about whatever I like, no more Cake, no more <span class="caps">MVC</span>, no more frameworks…</p> +<p><em>What do you mean no coding anymore? You’ve been bragging about how this Rails thing is fast, how you can develop things easily, and this, and that… You <strong>know</strong> what you have to do now</em></p> +<p><sup>^</sup> That was my fiancée, actually, and she’s right: my web development days are far from being over, actually. I admit I tried to get away from it, but she kindly reminded me (and she can be <em>very</em> persuasive) that now I have to fix <a href="http://www.italysimply.com/">ItalySimply</a>, the site I created a while a go (4 years?) with a mixture of Mambo (the <span class="caps">CMS</span>, now Joomla) and spaghetti <span class="caps">PHP</span>.</p> +<p>A sort-of-real-estate thingie visited by people who want to move to Italy or simply buy a house here. And it’s due a makeover, to be honest.</p> +<p>How am I gonna manage this? Let’s see…</p> +<h3><span class="caps">COW</span></h3> +<p><span class="caps">COW</span> \- Code On Week-ends. my web development methodology: simple, effective, basically my only choice. Actually the full name is <span class="caps">COW</span> (<span class="caps">IYL</span>): Code On Week-ends <em>If You’re Lucky</em>, i.e.: if we’re not going out, if there’s nothing better to do, if I feel like it. No deadlines (almost), no plans to follow, nothing.</p> +<p>No, I’m not terribly motivated to take on this project, but I already thought about two things to get me going:</p> +<ul> + <li><strong>Get <a href="http://www.pragmaticprogrammer.com/titles/rails/">Agile Web Development with Rails</a></strong> \- I read bits of the first edition, and that’s what got me started with Rails, now it’s time to buy the real thing.</li> + <li><strong>Blog about it</strong> \- I’ll <em>try</em> to keep a diary of my coding efforts and share the most juicy bits with the rest of the world. In this way I’ll also have content for my site and the three people who read this blog will have something (hopefully) interested to read.</li> +</ul> +<h3>The Cunning Plan</h3> +<p>Instead of getting out of troubles by simply tidying up some <span class="caps">PHP</span> code or migrate the site to Joomla, I’d like to re-code the whole thing from scratch using Rails. Ideally I’d like to migrate quite a bit of the content (including the hundreds of houses with pictures which were published over the years), but at the moment I’m not thinking about it: after all, in the end the site will be so addictive and easy to use that adding hundreds of houses back on will be just so much fun! Right? Yeah, right…</p> +<p>First of all I’ll spend quite a bit of time planning the application and what has to be done, then I’ll have to practice a little bit with Rails, and then, eventually, I’ll end up writing some code. Of course, suggestions and ideas will be more than welcome throughout all the process.</p> +<p>Let’s see how it goes…</p>
@@ -0,0 +1,7 @@
+----- +title: "Slax - A small, complete and 'nice-looking' Linux live distribution" +content-type: article +timestamp: 1139156266 +tags: "review" +----- +How can I learn how to use Linux? Simple, you grab a copy of any of the twelve thousands different 'distros' available out there, and you install it on your PC, hoping not to damage your existing Windows installation (if any). Or there's a more lazy and safe way, get one of the few dozens of 'Linux live CDs', burn the cd, boot from it, and you're all set...It's true, nowadays the best solutions for Linux newbies is trying out a few <em>live CDs</em> before installing <em>the real deal</em> on their machines: it's safe(r), takes less time and it's much more fun. Yes, some people may object saying that the fun in learning Linux is installing it on your hard drive first, but a few people I know who 'accidentally' overwrote their Master Boot Record or 'accidentally' damaged their Windows installation might disagree there...<br /><br />A live distribution[1] basically is a CD (or DVD or USB drive) containing a fully working operating system - Linux in the specific - which can be run directly from the CD itself and does not require an hard disk installation. The drawback is that normally some part of the operating system are loaded and run from a <em>ram disk </em> and therefore the data written there will be erased once the system reboots. Due to the nature of CDs, saving data on the CD itself is obviously not possible, and this limitation can normally be bypassed by saving changes within a file to store either on your hard drive, remotely, or on some other media which allows read/writing like a floppy disk or USB stick.<br /><br />Linux is well known for the many different distributions available, each with its own features, pros and cons. The same happens for live distros: in the last few years the number grew a lot[2] and nearly all major distributions now have a <em>live</em> counterpart, mostly to allow new users to preview their product.<br /><br />The most famous, and possibly one of the first LiveCD ever made was Knoppix[3], a Debian[4]-based CD featuring a KDE[5] desktop environment and many useful applications <em>squeezed</em> into 700MB of space which can be used as a fully functional operating system. Add to this a truly impressive on-the-fly hardware detection ability, and there's the <em>best</em> (arguably) multi-purpose linux Live distribution ever made.<br />If Knoppix is "so perfect", why do other distributions exist at all? Well, some people noticed that they wanted to remove something from the collection of applications Knoppix included in the default CD, others wanted to add other bits, so soon a long list of Knoppix-based <em>customized</em> distros followed[6]...<br /><br />This is another story, I'd like focus my attention on perhaps the most valid Knoppix-alternative out there: Slax[7].<br /><br /><strong>Size vs. Features</strong><br />Knoppix was the first Live CD I tried, but I didn't like one thing about it: its size. 700MB means one CD, and one CD means that I can't carry it in my pocket now can I? Not literally, anyway, at least not comfortably. So I started looking for a smaller alternative, and I found various possible candidates. Damn Small Linux[8] was one of the most extreme: 50MB in total, nothing more, nothing less, and it worked! Alright, I must say that now it's much better than it was when I first tried it but, it was more or less functional at the time (2003), although relatively new on the scene. <br />I liked it, really but, due to its size self-limitations the user interface wasn't too pretty, and the applications included weren't exactly what I was looking for: when you're used to Firefox (or better, Firebird, at the time) to browse the Net, Dillo[9] doesn't really look exactly appealing and feature-rich - although remarkable for its size. <br /><br />I decided that I wanted something more than that, also because I was planning to burn the live-linux distro on a <em>brand new</em> (at the time) 8cm CD-RW with 180MB of space available. The best solution I could find, at the time and still now, perhaps, was Slackware Live CD, a very promising live distribution based on Slackware Linux[10].<br />I was very impressed at the time, especially for the effort the developer put to create a mini-distribution which is also user-friendly and nice-looking as well, incorporating the KDE Desktop. These are not the only strengths of the project, as we'll see in the next sections but, certainly the first thing everyone can notice. <br /><br />After a while the project changed names and became "Slax", perhaps to create its own identity and expand itself following a different direction than its non-live predecessor: while the 'real' Slackware is often quite cautious on using latest technologies and normally includes <em>stable</em> packages, Slax does quite the opposite, including more recent applications and solutions. <br /> <br /><br /><strong>Overview</strong><br />Slax website[7] evolved quite a bit through the years, and now it's a true example of clarity and exhaustiveness. An essential clean design, access to a lot of information on how to use the live CD, solutions to common problems and also something for developers interested in creating their own live distro: the truly remarkable thing is that the biggest part of the work is done - apparently - by one single person, Tomas Matejicek[11], the founder of the project. <br /><br />The strength of Slax - as I anticipated before - is perhaps its ability to compress a few carefully selected, commonly used applications which allow the user to fully enjoy his live experience in 177MB of space. Certainly the choice of using the K Desktop Environment instead of a more lightweight one like Fluxbox or Xfce may seem illogical, but for sure new Linux users would feel more "at home" with KDE, especially if coming from Windows XP. KDE is by far the most user friendly desktop environment available for Linux, and Slax made it even more user friendly by carefully organizing menus in an optimal way without cluttering the desktop with a myriad of icons and overly-crowded navigation bars.<br />When it comes to the applications included, Slax offers nearly everything the average desktop user needs: word processor (KWord), spreadsheet (KSpread), browser (Konqueror), multimedia player (Kplayer), editors, games and much more[26]! In its simplicity and especially for its size, Slax is a well-rounded, multi-purpose distribution. There's an interesting article available on tuxs.org[12] which documents the author's <em>personal challenge</em> of using <em>only</em> Slax (version 4.1.4 at the time) for a whole week. Surprisingly, the writer was really impressed of the features offered by this little distro: he was able to connect to the Net, browse the web, check his mail, write and do various other "everyday task", with no difficulty or extra hassle.<br /><br />Slax is also <em>very</em> fast: normally some other live CDs compress <em>the whole</em> operating system on a single file, or a few, while Slax developed an optimized modular architecture: groups of programs or even single applications are compressed <em>separately</em> into .mo files: this technique sensibly increases the performance and speed of the operating system: whenever I open KWord, for example, to write an article, the OS will access <em>just</em> the KWord module on the disk, without touching other modules. <br /><em>Surely there's a way to add/remove modules...</em> - Yes, there is, and this will be discussed later on.<br /><br />Finally, like various other live distros, Slax supports some handy "cheatcodes" which can be used to boot customize some options when booting the operating system.<br /><br />Some of the most interesting codes include:<br /><br /><code><br />boot: slax webconfig=passphrase<br />boot: slax webconfig=ask<br /></code><br />This is a recent feature: Slax allows users to save their settings remotely, directly on Slax server. Every user has to choose a 10+ characters password in order to use this feature[27].<br /><br /><code><br />boot: slax toram (just alias for copy2ram)<br />boot: slax copy2ram<br /></code><br />This code can be used to copy the entire operating system to your computer's RAM: this may make the booting process slower, but Slax will run faster than light afterwards (256MB+ ram required)<br /><br /><code><br />boot: slax changes=/dev/device<br /></code><br />Saves changes to a specified device using any linux filesystem, like a hard drive or a usb stick.<br /><br /><code><br />boot: slax load=module<br /></code><br />Load optional modules stored in the /optional/ directory. For further information about modules, see the "Make your own!" section below.<br /><br />For a full list of all Slax cheat codes, see the cheatcodes page[13] on Slax website. <br /><br /><strong>Different flavors</strong><br />I defined Slax a multi-purpose mini distribution, but as always different people have different needs: some users may want to be able to run some windows applications through Wine[14], for example, or may prefer a more lightweight Desktop Environment. The huge - and logical - limitation of all live CDs is that they normally don't offer the possibility of adding applications and packages: when the operating system starts the "root" partition is transferred onto a ramdrive which allows - even if until reboot - read/write access. Although this limitation can be overcome at least through using some of the cheatcodes described before, having the application already installed could be much easier.<br /><br />That's why Slax developers decided to start creating different <em>flavors</em> of Slax. Some of them are not available at the moment (the current slax version at the time of writing is 5.0.6), and others can be already downloaded from the official site[15].<br /><br /><span style="text-decoration:underline;">Slax "Kill Bill"</span> - This is the first Slax customization which became available, and came out more or less at the same time as Tarantino's movie. <em>Bill</em> Gates didn't seem to mind at all, even if this version actually allows users to run <em>some</em> Windows applications like notepad on linux. Basically Wine[15] dosbox[16] and qemu[17] can make this possible, with limitations... nothing too exciting but, definitely fun to try out.<br /><br /><br /><span style="text-decoration:underline;">Slax "Server"</span><br /><fieldset><blockquote>SLAX SRV is a pocket operating system with many internet services ready to use. Includes DNS, DHCP, SMB, HTTP, FTP, MySQL, SMTP, POP3, IMAP, SSH.</blockquote></fieldset><br />Unfortunately, this flavor of Slax is not yet available for download, but some updates concerning its status are available on the developer's TODO list[18]:<br /><br /><em>SE: mysql up and running <br />SE: httpd up and running, with PHP with MySQL <br />SE: DNS server up and running as a cache server <br />SE: DHCP server included but not started automatically, could confuse local network <br />SE: SSH server up and running <br />SE: MAIL server up and running, needs testing <br />SE: FTP server up and running</em><br /><br />This is definitely going to be an interesting project, and I'm really looking forward to it. In the meantime, there are two server-oriented live distribution available, which is also based on Slax: Slampp[19] and in particular Slampp Lite[20]. I tried Slampp Lite and I was really satisfied with its features: support for PHP, Perl, Python on Apache (basically includes XAMPP for Linux[21]), xfce desktop environment, the latest Firefox browser, antivirus, firewall, and more.<br /><br /><span style="text-decoration:underline;">Slax "Popcorn"</span><br />This Slax flavor is more minimalist, and substantially different from the Standard Edition. For a start it features the more lightweight xfce Desktop Environment[22], and thus removes all KDE-based applications making more room for Firefox browser and Abiword, which are not included in the Standard version due to the presence of their <em>KDE counterparts</em> (Konqueror and Kword). <br />Very fast, simple, and fits 128MB: suitable for small USB keys more than anything. <br /><br /><span style="text-decoration:underline;">Slax "Frodo"</span><br />As the name implies, this version is smaller again (47MB), and it's basically the base for all other flavors as it includes just a Linux console and some scripts for hardware detection and setting up the live environment.<br /><br /><strong>Make your own!</strong><br /><em>Nice! But I'd have included X instead of Y, then added Z as well, perhaps...</em><br />That's a common feeling: the truth is that people are never happy with what they get! If you're still not happy with what Slax in all its different flavors can offer you, well, you can make your own. Although some might want to start more or less from scratch, creating <em>Slax-based</em> customizations (this was the only option until the more recent versions), now there's an easier way: modules and the documentation present on the official site is complete enough and describes the necessary steps to take to create, modify and use them[23]. Modules are basically files with .mo extension containing an application which will be loaded by Slax at startup, if placed in the /modules/ directory, or only if required by the user (see the corresponding cheatcode) if placed in the /optional/ directory. The easiest way to create a module which requires no particular skill is converting a Slackware package, by issuing this command:<br /><br /><code>tgz2mo application.tgz application.mo</code> <br /><br />Of course there are other ways to create modules without converting Slackware packages, further details in the documentation[23]. There are also a lot (currently 576!) of user-contributed modules ready for use available for download and hosted on the Slax site[24], the only problem is that inevitably some of them seem to be out-of-date, and not constantly updated by their maintainers.<br /><br />Last but not least, the dream of all Windows users: MySlax Creator and MySlax Modulator[25], which allow Windows users to create their own Slax distribution with custom modules both for CD and USB drive and create Slax modules on windows respectively. Two really nice additions which make this project even more (Windows-)user-friendly!<br /><br /><strong>Conclusions</strong><br />Slax is exactly how advertised on its website: <em>"[a] fast and beautiful Linux operating system which fits on small (3.14") CD-ROM disc"</em>, nothing more, nothing less. Personally, I'd like to emphasize its user-friendliness, as it seems the most valid alternative to Knoppix, and perhaps even better: it does not include <em>as many applications as possible</em> which could confuse Linux neophytes but, just a bunch of useful programs for everyday use to give users a <em>taste</em> of what Linux is capable to do.<br />Normally, as Slax is mostly maintained by one person, Slax releases are not too frequent: normally 2-3 per year maximum. The version which was tested for this article was the 5.0.6 and (un)luckily a new one <em>just came out</em> while I was writing the article: version 5.0.7b is now available for download[15] and features KDE 3.5. A few bugs were discovered immediately after its released and quickly fixed with a patch-module (hence the "b"): This YOUR chance to try it out before I do...<br /><br />Happy Sla<em>x</em>ing! <br /><br /><br />[1]Linux Live CD - Wikipedia: <a href="http://en.wikipedia.org/wiki/Linux_live_cd">http://en.wikipedia.org/wiki/Linux_live_cd</a><br />[2]DrozenTech's LiveCD List: <a href="http://www.frozentech.com/content/livecd.php">http://www.frozentech.com/content/livecd.php</a><br />[3]Knoppix Official Site: <a href="http://www.knoppix.org/">http://www.knoppix.org/</a><br />[4]Debian Official Site: <a href="http://www.debian.org/">http://www.debian.org/</a><br />[5]K Desktop Environment: <a href="http://www.kde.org/">http://www.kde.org/</a><br />[6]Knoppix Customizations: <a href="http://www.knoppix.net/wiki/Knoppix_Customisations">http://www.knoppix.net/wiki/Knoppix_Customisations</a><br />[7]Slax Live CD: <a href="http://slax.linux-live.org">http://slax.linux-live.org</a><br />[8]Damn Small Linux - Official Page: <a href="http://www.damnsmalllinux.org/">http://www.damnsmalllinux.org/</a><br />[9]Dillo Browser, Official Page: <a href="http://www.dillo.org/">http://www.dillo.org/</a><br />[10]Slackware Linux, Official Page: <a href="http://www.slackware.com/">http://www.slackware.com/</a><br />[11]Slax - Developer's page: <a href="http://slax.linux-live.org/credits.php">http://slax.linux-live.org/credits.php</a><br />[12]Barney Matthews, "A week with Slax 4.1.4" - Tuxs.org: <a href="http://www.tuxs.org/slax.htm">http://www.tuxs.org/slax.htm</a><br />[13]Slax cheatcodes: <a href="http://slax.linux-live.org/cheatcodes.php">http://slax.linux-live.org/cheatcodes.php</a><br />[14]Wine HQ: <a href="http://www.winehq.com/">http://www.winehq.com/</a> <br />[15]Slax download page: <a href="http://slax.linux-live.org/download.php">http://slax.linux-live.org/download.php</a><br />[16]Dosbox Project: <a href="http://dosbox.sourceforge.net/news.php?show_news=1">http://dosbox.sourceforge.net/news.php?show_news=1</a><br />[17]Qemu Project: <a href="http://fabrice.bellard.free.fr/qemu/">http://fabrice.bellard.free.fr/qemu/</a><br />[18]Slax TODO list: <a href="http://slax.linux-live.org/todo.php">http://slax.linux-live.org/todo.php</a><br />[19]Slampp Official Page: <a href="http://slampp.abangadek.com/wiki/wikka.php?wakka=HomePage">http://slampp.abangadek.com/wiki/wikka.php?wakka=HomePage</a><br />[20]Slampp Lite page: <a href="http://slampp.abangadek.com/wiki/wikka.php?wakka=SlamppLite">http://slampp.abangadek.com/wiki/wikka.php?wakka=SlamppLite</a><br />[21]XAMPP for Linux: <a href="http://www.apachefriends.org/en/xampp-linux.html">http://www.apachefriends.org/en/xampp-linux.html</a><br />[22]Xfce desktop environment, official page: <a href="http://www.xfce.org">http://www.xfce.org</a><br />[23]Slax Documentation - Modules: <a href="http://slax.linux-live.org/doc_modules.php">http://slax.linux-live.org/doc_modules.php</a><br />[24]Slax modules page: <a href="http://slax.linux-live.org/modules.php">http://slax.linux-live.org/modules.php</a><br />[25]MySlax Projects: <a href="http://myslax.bonsonno.org/">http://myslax.bonsonno.org/</a><br />[26]Slax - installed packages: <a href="http://slax.linux-live.org/installed_packages.txt">http://slax.linux-live.org/installed_packages.txt</a><br />[27]Slax - Webconfig: <a href="http://slax.linux-live.org/webconfig.php">http://slax.linux-live.org/webconfig.php</a><br />
@@ -0,0 +1,7 @@
+----- +title: "SQLyog 5 - a fast and reliable MySQL front-end" +content-type: article +timestamp: 1141131000 +tags: "databases|review" +----- +MySQL[1] is a great database solution. Literally millions of people who use it can tell you that it is a well-performing, feature-rich database solution for almost any size project: it is low-cost (often free), and available on the majority of webservers all over the world. When I first discovered MySQL while learning some basic PHP programming, I almost immediately wondered how I'd effectively access MySQL and manage my databases other than through PHP code or command line. I was pointed to PHPMyAdmin[2], which I still use as a quick, general-purpose MySQL front-end. However, I wondered if there was anything better than that, and maybe not confined within a browser window...<br /><br />There are a few desktop "cousins" of PHPMyAdmin out there, especially for Windows, which is not surprising. After a quick search, three products come up immediately: MySQL-Front[3], Navicat MySQL[4] and SQLyog[5], all of them are proprietary solutions and seem to be the most popular ones around. <br /><br /><em>Alright, which one is the best?</em><br /><br />There are many different criteria available to choose a winner among these three products. The easiest for me was simply: "which one is free?"<br /><br />- SQLyog, with some restrictions, is our instant winner. Both MySQL-Front and Navicat MySQL offer a 30-day trial, while SQLyog can be free for life but only with basic features. However, the number of basic features is considerable.<br /><br /><strong>First impressions</strong><br />After launching SQLyog (free edition), a small and not-too-annoying nag screen appears: you click on it and it goes away, it doesn't last for 10 seconds like some others. The same screen appears when you try to access the power tools and advanced features which are not included in the free edition. I got used to it after a short while, and that's the only annoyance of the free version of the product. <br /><br />The program's interface seems a bit unconventional for the traditional Windows user, especially if compared to the other two products. The main window is divided into four parts: the main menu and a navigation bar underneath it, a left column listing all the databases and tables in an expandable tree, the top half of the main window which hosts a SQL editor, and the lower half with everything else, including a tabbed area for displaying query results, messages, table data, table structure and history.<br /><br />It seems as if the SQL editor should be in a tab as well, but after using SQLYog for a while, you understand why is not: the editor has been positioned such that it can be used often, easily, and immediately. It took me a while to figure this out, but once you embrace this philosophy, you'll never stop using this program; all front-ends include a query editor, but it's often relatively hidden, meaning that it is at least one or two clicks away from the rest of the interface.<br /><br /><br /><strong>Main Features</strong><br />After specifying your credentials, the program will connect to the MySQL server and list all of the available databases in an Explorer-like left side panel. All tables can be accessed by clicking once on the corresponding database. All column fields, indexes and triggers (if any) are displayed by clicking on each table name.<br /><br /><em>So when I click on a database or a table the corresponding structure is displayed, right?</em><br /><br />Wrong. When you do that, nothing happens. Remember the multi-tabbed lower panel, which is supposed to display results, table data, objects, etc.? Well, the focus is set to the <em>Result</em> column by default, so if you want to display the database or table structure you need to click on the <em>Objects</em> table, and voil� , the structure appears. Fortunately this behaviour can be changed by modifying the program's options, through the Tools menu.<br /> <br />Clicking on <em>Table data</em> will display the first 50 records of the selected table, while the <em>Result</em> and <em>Messages</em> tabs will still be empty; the editor wasn't used, so there's no result to show, and we didn't get any errors or other messages from MySQL yet, so everything is as it should be.<br /><br />The most interesting feature from an educational point of view, so far, is actually the <em>History</em> tab, which is just one click away and shows the following:<br /><br /><code><br />/*[11:11:11 AM][ 0 ms]*/ show variables like '%character%'<br />/*[11:11:11 AM][ 0 ms]*/ Set character_set_connection=latin1<br />/*[11:11:11 AM][ 0 ms]*/ Set character_set_results=latin1<br />/*[11:11:11 AM][ 0 ms]*/ Set character_set_client=latin1<br />/*[11:11:11 AM][ 0 ms]*/ set sql_mode=''<br />/*[11:11:11 AM][ 15 ms]*/ show databases<br />/*[11:11:22 AM][ 0 ms]*/ use `zzine_drupal`<br />/*[11:11:23 AM][ 203 ms]*/ select `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` <br /> where `TABLE_SCHEMA` = 'zzine_drupal' and `TABLE_TYPE` = 'BASE TABLE'<br />/*[11:11:32 AM][ 47 ms]*/ show full fields from `zzine_drupal`.`node`<br />/*[11:11:32 AM][ 140 ms]*/ show keys from `zzine_drupal`.`node`<br />/*[11:11:32 AM][ 0 ms]*/ select * from `zzine_drupal`.`node` limit 0, 50<br /></code><br /><br />The above is a log of all the SQL commands which were sent to the server so far: the program connected and showed all the databases, I clicked on the "zzine_drupal" database, got some info about it, and then clicked on the <em>node</em> table and displayed the first 50 records. So, if you are new to SQL and want to learn the syntax to query the database you can just have a glance at this tab every so often.<br /><br />Note that the time to execute a query is displayed in ms, and it's not wrong! SQLyog actually performs quite well, as boasted on the official site's features page[6]: <em>"[it] uses native MySQL C API - the fastest way to communicate with MySQL server"</em> - and they do mean it.<br /><br /><em>What else does SQLYog offer?</em><br /><br /> The free version includes the most used features, like the very two most basic operations: you can query the database by typing an SQL query into the editor and executing it (F5 or F8 if you want to edit the results) and change the value of each field through a convenient blob editor, which can display text or images, import content from a file or save it locally.<br />Then the program groups all functionalities in standard dropdown menus on the top bar, and also presents the most used operations as clickable icons as well. Now, this can be handy, but the program displays 25+ icons without any text underneath, so either you keep hovering your mouse on each one waiting for an explanation message to appear, or you just use the standard dropdown menus anyway. The authors did an outstanding job creating an icon for (literally) every action: they are quite well made and explanatory enough if you look at them carefully, but they are still very similar, and too numerous to memorize.<br /><br />However, SQLyog is also 100% keyboard friendly, as almost every function has a shortcut. Memorizing just a few of them, and it's worthwhile, as it makes everything much faster. At any rate it's better than memorizing all the icons instead!<br /><br />Let's examine each dropdown menu and the functions listed in them.<br /><br /><span style="text-decoration:underline;">File</span><br />This menu lists all the functions concerning database connection and disconnection, opening and saving SQL files, and opening new query tabs - the SQL editor panel can have multiple tabs.<br /><br /><span style="text-decoration:underline;">Edit</span><br />This menu refers to the SQL editor, not to the query results! It includes functions like execute queries, copy, paste, cut, undo, redo and find/replace, which does not find strings in a record/table/database, but only in the SQL editor. I do believe the "Find in Database" function is missing in SQLyog, and is present in some of the competitors, but you can search your database using the appropriate SQL queries, right? Maybe - in my opinion - an advanced <em>Find <something> in <somewhere></em> wizard or dialogue should be implemented - as the developers seem to be very good at creating those types of things, we'll soon find out.<br /><br /><span style="text-decoration:underline;">DB</span><br />Maybe I'd have called this "database" for the sake of newbies, but this menu indeed groups all database-related functionalities together. Create/truncate/drop databases, create table and create view (maybe they could have been placed under the <em>table</em> menu), and other interesting features like creating an HTML schema on the database and even copying a whole database (or just a few tables) to a different host (even remote, if accessible) with a single click! It works, just don't try to copy a database onto another remote server on a 56K dialup connection, like I did...<br /><br /><br /><span style="text-decoration:underline;">Tables</span><br />Another self-explanatory menu, listing all table-related operations like create, alter, rename, empty, drop, import, export tables, manage indexes, rearrange columns, etc. All these functions can be performed through wizards, dialogues or other equally simple methods that any average Windows user should be familiar with. There are only a few exception here and in other menus: when wizards would be inappropriate or inadequate for certain actions, SQLyog prepares a "template query" and lets the user fill it in, typically for more advanced needs, such as if you want to create a new (MySQL 5.0+ only) <em>trigger</em> named <em>test</em> on the <em>node</em> table of the aforementioned zzine_drupal database. For this, SQLyog prepares the following query template: <br /><br /><code><br />DELIMITER $$;<br /><br />DROP TRIGGER `zzine_drupal`.`test`$$<br /><br />CREATE TRIGGER `zzine_drupal`.`test` BEFORE/AFTER INSERT/UPDATE/DELETE on `zzine_drupal`.`node`<br />FOR EACH ROW BEGIN<br /><br />END$$<br /><br />DELIMITER ;$$<br /></code> <br /><br />...just remember to modify it according to your needs!<br />Do you like SQLyog's query templates? Check out Edit->Insert Templates and there's almost everything for every taste.<br /><br /><br /><span style="text-decoration:underline;">Objects</span><br />Presumably the authors created this menu to group some advanced or new functionalities together, but everything listed here is already present in one of the other menus: management of functions and triggers, view-related actions, and stored procedures... except for the <em>Drop Column</em> action, which is only available under this menu.<br /><br /><span style="text-decoration:underline;">Tools</span><br />This menu also lists two actions which we already saw under the <em>DB</em> menu, which is exporting or importing a database. however, there is also an <em>Export resultset</em> wizard, as well as a very handy user management tool, information about the current database, and the program preferences.<br /><br />The program preferences apparently have two settings which perhaps should be changed by default, which concern the previously mentioned weird tab focus: if you'd like something more intuitive and you don't need (or want) to use the SQL editor a lot, you can safely unclick the "Keep focus on SQL Editor after query execution" and click the "Always select Objects tab when a new item is selected".<br /><br />Believe it or not, you get all this for free. No charge, no trial periods: these are the actual features offered by the free edition of SQLyog! No surprise that over 500,000 people already downloaded it!<br /><br />What's in the <em>Professional</em> and in the <em>Enterprise</em> edition then? Nothing much, and <em>Power tools</em>.<br /><br /><br /><strong>"Power Tools"</strong><br />When I wrote <em>nothing much</em> earlier I actually referred to the Professional Edition, which - as the feature matrix shows[8]- doesn't offer anything more than the free edition: basically you pay $9 to get rid of the nag screens, which are normally not very intrusive...<br /><br /><span style="text-decoration:underline;">Tunneling</span><br />On the contrary, the Enterprise Edition ($49) has a lot of very interesting advanced tools which are actually worthwhile to have. Perhaps the most essential feature missing in the free version, especially for people using a remote hosting solution, is <em>tunnelling</em>. You can use SQLyog to connect to a remote server, theoretically; in reality though, in order to do so your hosting provider must allow privileged remote connections to the database (i.e. <user>@% instead of <user>@localhost), which is not permitted 98% of the time for security reasons. So how can you use SQLyog to access your remote database(s)? With tunneling.<br />The concept is simple: even if privileged remote connections are normally not permitted, privileged local connections are. So all you need to do is place a PHP script on your server, somewhere accessible, and specify it as a parameter for HTTP tunneling before establishing the connection; SQLyog will then access the script and the script will basically forward SQLyog's instruction to the database server, just as if the commands were issued locally. <br /><br /><em>I will never allow commands to be sent to my server unencrypted and through a PHP script, which can be exploited by the first script-kiddie passing by!</em><br /><br />This is a common, slightly biased, but ultimately reasonable concern, and for $49 you can also get SSH tunneling, provided that your host allows you to connect to the server through a SSH shell. I tried this option and it worked perfectly: with a 2MB/s ADSL connection all went smoothly and fast: the program proved to be a valid alternative to PHPMyAdmin in terms of speed and responsiveness. <br />Do not try this on a 56K connection! It's not worthwhile, and probably not even conceived of by the developers. As I always want to try extreme solutions, I also tried SSH tunneling on dialup and my final conclusion was: <em>stick with PHPMyAdmin</em>. SQLyog seems to have been developed in order to achieve relatively immediate responses, as a result, when a low speed connection is used to connect to a remote database, the program may hang for a little while before delivering results and executing queries as normal. Perhaps there's room for improvement here: it would be great to have progress bars display when an operation takes more time than normal.<br /><br /><span style="text-decoration:underline;">Database Synchronization and Migration</span><br />A common and useful feature you should expect from a MySQL front-end is a synchronization utility, and SQLyog has one: by clicking on <em>Database Synchronization</em> under the Powertools menu you can start a quick and easy synchronization wizard, to automatically update two databases. Simply provide the connection details (even if they are on different hosts or require tunneling), and select the databases you want to synchronize, also specifying if you want a two-way synchronization or only one way. A similar function is <em>structure synchronization</em>, which can be used to keep only the structure (not the data) up-to-date between two databases. You won't be asked to create two new connections, but the operation can only be performed on databases that are already accessed by SQLyog.<br /><br />For more information on how to take advantage of SQLyog's advanced synchronization features, I recommend reading a very informative article specifically devoted to this subject, available online[8].<br /><br />Another VERY interesting features SQLyog offers (which has been the subject of a whole article on DatabaseJournal.com[9]) is the possibility to easily migrate to MySQL from other ODBC sources. Through a relatively painless wizard it is possible to migrate from another database type to MySQL, while making sure that any errors are handled as expected.<br /><br /><span style="text-decoration:underline;">Periodic Tasks and Management</span> <br />MySQL is a wonderful relational database, but it fundamentally lacks the ability to execute scheduled queries and operations, which are normally accomplished by server-side scripts. SQLyog offers you the opportunity to easily create and administer periodic tasks, notifications and backups via a few wizards: the <em>Notification Services</em> wizard, which can be used to send the result of a particular user-defined periodic query to an email address or execute maintenance queries, and the <em>Scheduled Backups</em> wizard to automate full or partial database backups and exports. Webyog[10] itself offers an informative how-to[10] on these tasks, step-by-step with screenshots. Last but not least, you can manage all these scheduled jobs through a very handy <em>job manager</em> located in the <em>Powertools</em> menu.<br /><br /><br /><strong>Final Judgement</strong><br />SQLyog is a well-rounded, multi-functional front-end for MySQL which can be used by both newbies and more experienced users to manage their databases. I'd clean up and reorganize the interface a little bit and remove a lot of the icons as well as list all the functions under the top menus, possibly <em>without</em> the icons and without repeating the same function anywhere.<br /><br />Apart from those small items, SQLyog is definitely worth a shot, and the Webyog team definitely did a good job in this fifth version by incorporating all the latest MySQL 5 functionalities in an already excellent program. The free version in particular offers quite a wide range of functionalities with no trial period, and this certainly helped the program to grow in popularity. I would never buy the Professional edition, simply because it only gets rid of nag screens without offering nothing new over and above the Free Edition. On the other hand, the Enterprise Edition is an excellent and inexpensive solution if you need the power tools.<br /><br />SQLyog is just a few clicks away[11], only 7 Megabytes, and ready to install! <br /><br /><br /><strong>Notes</strong><br /><small>[1]MySQL - Official Site: <a href="http://www.mysql.com/">http://www.mysql.com/</a> <br />[2]PHPMyAdmin - Official Site: <a href="http://www.phpmyadmin.net/home_page/index.php">http://www.phpmyadmin.net/home_page/index.php</a><br />[3]MySQL-Front: <a href="http://www.mysqlfront.de/">http://www.mysqlfront.de/</a><br />[4]Navicat MySQL: <a href="http://www.navicat.com/">http://www.navicat.com/</a><br />[5]Webyog Website: <a href="http://www.webyog.com/">http://www.webyog.com/</a><br />[6]SQLyog, feature page: <a href="http://www.webyog.com/sqlyog/index.php ">http://www.webyog.com/sqlyog/index.php </a><br />[7]SQLyog, features matrix: <a href="http://www.webyog.com/sqlyog/featurematrix.html">http://www.webyog.com/sqlyog/featurematrix.html</a><br />[8] Peter Laursen & Quy Ton, "Using SQLyog Enterprise to Effectively Synchronize MySQL Databases" (PDF):<br /><a href="http://www.webyog.com/articles/Using_SQLyog_Enterprise_to_Effectively_Synchronize_MySQL_Databases.pdf">http://www.webyog.com/articles/Using_SQLyog_Enterprise_to_Effectively_Synchronize_MySQL_Databases.pdf</a><br />[9] Peter Laursen, "Migration to MySQL with SQLyog ver 4.1" : <a href="http://www.databasejournal.com/features/mysql/article.php/10897_3550146">http://www.databasejournal.com/features/mysql/article.php/10897_3550146</a><br />[10]Webyog, "How to use Scheduled Backups with SQLyog": <a href="http://www.webyog.com/articles/how_to_use_scheduled_backup.html">http://www.webyog.com/articles/how_to_use_scheduled_backup.html</a><br /></small><br />
@@ -0,0 +1,99 @@
+----- +title: "Book Review: Succeeding with Agile" +content-type: article +timestamp: 1272197788 +tags: "review|productivity|books|software" +pdf: true +----- + + <section class="section"> +<blockquote> +<p>“This is not a book for those who are completely new to <em>Scrum</em> or <em>agile</em>. There are other books, classes, and even websites for that. If you are completely new to <em>Scrum</em>, start with one of those.”</p> +</blockquote> +<p style="padding-left:5em;">— Mike Cohn, <em>Succeeding with Agile</em></p> +<p>Great. That’s just great. Good job I started with the <em>Introduction</em> first, otherwise the first chapters of this book would have been way too overwhelming!</p> +<p><a href="http://www.succeedingwithagile.com/"><em>Succeeding with Agile</em></a> is a book that <em>doesn’t</em> teach you about <em>Scrum</em> or <em>agile</em> methodologies, it won’t give you a definition of ScrumMaster, sprint, or backlog… instead, it takes all that for granted and teaches how to pragmatically adopt — or better, <acronym title="Awareness, Desire, Ability, Promotion, Transfer"><span class="caps">ADAPT</span></acronym> to — <em>Scrum</em>, in the context of yourself, your team, and even your entire organization.</p> +<blockquote> +<p>“[…] this book draws on my experience with <em>Scrum</em> over the past 15 years, but especialle the last 4. For the last 4 years, every evening after I spent the day with one of my clients, I would go back to my hotel room and make notes about problems they were facing, the question they asked, and the advice I gave.”</p> +</blockquote> +<p>Indeed, this book is a gold mine of information, anecdotes, tips and tricks about everything you could possibly want to know about making <em>Scrum</em> work, at any level. If you have some knowledge about <em>agile</em> development you definitely have some questions: <em>will it work?</em> … <em>is it really more productive?</em> … <em>how can I make my boss understant this?</em>. This book has all the answers you need. Most definitely, it also answer questions you didn’t think of.</p> +<p>If you don’t know what all this is about, then you’d better do your homework first:</p> +<ul> + <li><a href="http://www.mountaingoatsoftware.com/topics/scrum">Introduction to <em>Scrum</em> – An Agile Process</a></li> + <li><a href="http://en.wikipedia.org/wiki/_Scrum__(development)"><em>Scrum</em> (Wikipedia Page)</a></li> + <li><a href="http://www.scrumalliance.org/"><em>Scrum</em> Alliance</a></li> + <li><a href="http://www.scrum.org/"><em>Scrum</em>.org</a></li> +</ul> + +<section class="section"> +<header><h1 id="h_1" class="toc">Overview</h1></header> +<img src="/img/pictures/succeeding-with-agile.jpg" style="float:left;" /> +<p>The book is organized into five parts of different length, ranging from 20 to over 100 pages. If you read the book from the start till the very end, you’ll notice that the start of each part is like a new milestone in <em>Scrum</em> adoption: first the author makes sure that <em>you</em> are prepared (Part 1), then moves on to deal with individuals and initial resistance (Part 2), then teams (Part 3) and finally the whole organization (Part 4), until you can finally taste the fruits of you labor (Part 5).</p> +<p>In a way, you may well want to carry this book in your briefcase every day you go to work, and read it bit by bit, as you make progress in your quest for <em>Scrum</em> adoption.</p> + + <section class="section"> +<header><h1 id="h_2" class="toc">Part I: Getting Started</h1></header> +<p>Part I is about making sure you know <em>why</em> becoming gile is important and beneficial to you and your work environment. It will teach you how to promote <em>Scrum</em>, its advantages and challenges, and the different ways to go about it: Start Small or Go All In? Stealth or Public Display? Things like that. Pointless theory? Not really: everything is well documented, with success stories to support one way or the other.</p> + +</section> + + <section class="section"> +<header><h1 id="h_3" class="toc">Part II: Individuals</h1></header> +<p>This part was very interesting from a psychological point of view: it deals with individuals and their possible reactions to becoming <em>agile</em>. You’ll meet <em>skeptics</em>, <em>followers</em>, <em>saboteurs</em> and <em>diehards</em> — no hope? Well, of course not: you’ll learn how to deal with each one of them in the best way possible. This part will also introduce you to new roles and responsabilities related to <em>Scrum</em>.</p> + +</section> + + <section class="section"> +<header><h1 id="h_4" class="toc">Part III: Teams</h1></header> +<p>Up next, Teams. You’re no longer dealing with single-minded individuals, but with more complex groups. New challenges emerge, mostly related to communication and people interactions. I particularly enjoyed <strong>Chapter 13 — The Product Backlog</strong>, which provides invaluable insights on this important everyday tool. <strong>Chapter 15 — Planning</strong> is another interesting read: it teaches you a lot about planning vs. estimating, and coming to compromises to meet deadlines.</p> + +</section> + + <section class="section"> +<header><h1 id="h_5" class="toc">Part IV: The Organization</h1></header> +<p>If you made it up to here, then you’re nearly done. You probably know most of the tricks by now, but there’s still a lot to learn. <strong>Chapter 17 — Scaling <em>Scrum</em></strong> is definitely worth reading, even just for the analysis between <em>formal</em> and <em>informal communities</em>, while <strong>Chapter 19 —Cohexisting with Other Approaches</strong> almost feels heretical at times: mixing <em>Scrum</em> with Waterfall? Is that even conceivable? Yes. Sometimes it’s the only way, especially when you have to deal with compliance to standards like ISO9001. Once again, the author has a nice success story on how a company passed an ISO9001 audit by providing documentation in form of photocopied notes and by adding a single failing test to persuade the auditor that the automated test suite was not rigged. Priceless.</p> + +</section> + + <section class="section"> +<header><h1 id="h_6" class="toc">Part V: Next Steps</h1></header> +<p>Only two chapters in this part of the book, which mainly deals with (self) assessment and progress analysis. Still worth a read, but you can safely leave it out for when you succeeded with <em>agile</em>.</p> + +</section> + +</section> + +<section class="section"> +<header><h1 id="h_7" class="toc">Technical Analysis</h1></header> +<p>I’m not exaggerating when I say that this is <em>by far</em> the best book I’ve read in the past few years when it comes to the way it is organized. Start by reading the <a href="http://my.safaribooksonline.com/9780321660534?portal=informit">table of contents</a>: if you take each chapter out and make a bulletted list of each section you’ll end up with a handy (and free!) cheat sheet on how to promote and adopt Agile methodologies.</p> +<p>This doesn’t mean the book isn’t a worthwhile read, but rather that it can also be used as a reference when needed.</p> + +<section class="section"> +<header><h1 id="h_8" class="toc">Formatting and Readability</h1></header> +<p>From a technical writing point of view, this book is spotless. I should keep it on my desk to remind me how technical documentation should be written, except that… it’s not a technical manual of course. But the formatting and the way content is laid out can make the most skilled technical writer very jealous: there’s never a huge blob of boring text, never a series of pointless pictures: Mike Cohn (or his editors) did a terrific job composing this book.</p> +<p>You can start reading it from any point and it still makes sense, diagrams are simple and clear, and yet extremely useful, and so are the reference tables and spreadsheets. They never hurt, they are always in the right place, at the right time. And bold text is aptly used at the start of list items, so that even if you skim through the key concepts will still make it to your brain. Excellent.</p> + +</section> + +<section class="section"> +<header><h1 id="h_9" class="toc">Style and Contents</h1></header> +<p>Reading this book is like listening to a seminar hold by some charismatic icon like <a href="http://en.wikipedia.org/wiki/David_Allen_(author)">David Allen</a> or <a href="http://en.wikipedia.org/wiki/JoAnn_Hackos">JoAnn Hackos</a>: you never get bored, and you constantly learn something. Mike’s informal and conversational style is one of the main reasons why you should read this book instead of others on the subject: he is a great communicator, and he knows how to make his point across.</p> +<p>As an added value, Mike also uses two types of <em>boxes</em> throughout the book:</p> +<ul> + <li><strong>Things to try now</strong> — Whenever a new strategy or practice is introduced, you’ll find one of these boxes containing a bulleted list. <em>“Commit to running the next two or three sprints without any overtime”</em>, “Do you understand what motivates every other person on your team? If not, find out. How? Ask them.”, … these are just examples of some of the author’s reccommendations to put you in the right track.</li> + <li><strong>Objection</strong> — Either actual quotes from customers and employees, or possible statements which may come out throughout the process of adopting <em>Scrum</em>. Things like <em>“If the product includes less than what we’ve planned, no one will buy it”</em>, or <em>“My team won’t self organize; team members are too passive and look to me to lead”</em>, … of course, what makes these objection boxes valuable is not the statement themselves, but the tips on how what to do about them. There’s not a single one left unanswered: you really feel you’re covered in any situation.</li> +</ul> + +</section> + +</section> + +<section class="section"> +<header><h1 id="h_10" class="toc">Final Thoughts</h1></header> +<p>I really enjoyed this book. It took me ages to read it, not only because it’s quite long (450 pages), but also because it’s very dense of information. Another author could have made it three times longer, but I was glad Mike didn’t. I’m pretty certain I’ll keep it near me and read bits from it when I need to: it’s pretty much the Bible of <em>Scrum</em> adoption.</p> +<p>What’s wrong with it then? Not much. Perhaps the only thing I really missed was an introductory 50-page-chapter on <em>Scrum</em> and <em>agile</em>. I know this is not meant to be a book for beginners, but some basic glossary or <em>Scrum</em> cheat sheet would have made it accessible to an even wider audience, at virtually no cost for the author or the readers, who could have just skipped that part.</p> +<p>Anyhow, I give it a 9 out of 10.</p> + +</section> + +</section>
@@ -0,0 +1,300 @@
+----- +title: "Take back your site, with nanoc!" +content-type: article +subtitle: "How I turned H3RALD.com into a 100% static, hassle-free web site" +popular: true +timestamp: 1253014371 +tags: "website|ruby|programming|writing" +----- +<h3>Why I don’t need a blog platform</h3> +<p>There’s nothing inherently wrong with blog platforms like Wordpress: they allow <em>anyone</em> to publish content on the web using a user-friendly administration area. They were built with one thing in mind: make publishing content on the web something as simple as possible, even for people who don’t know anything about <span class="caps">HTML</span>, let alone server-side scripting.</p> +<p>What about people who <em>do</em> know about web development though? Do they still need a blog platform? Depends. If you are comfortable with editing files using a text editor, if you enjoy using the command-line on a daily basis, if you like programming and <em>hacking</em> a little bit, if you don’t really care about fancy and user-friendly administration backends… <em>then you probably don’t</em>.</p> +<p>All you need is a system to transform a bunch of source files into a web site. The good news is that such system exists – and you’re also spoiled for choices!</p> +<h3>Introducing site compilers</h3> +<p>The first <em>site compiler</em> I discovered was <a href="http://webby.rubyforge.org/">Webby</a>:</p> +<blockquote> +<p>[…] Webby works by combining the contents of a page with a layout to produce <span class="caps">HTML</span>. The layout contains everything common to all the pages — <span class="caps">HTML</span> headers, navigation menu, footer, etc. — and the page contains just the information for that page. You can use your favorite markup language to write your pages; Webby supports quite a few.</p> +</blockquote> +<p>There are quite a few applications like Webby, such as:</p> +<ul> + <li><a href="http://nanoc.stoneship.org/">nanoc</a></li> + <li><a href="http://snk.tuxfamily.org/lib/rassmalog/doc/guide.html">Rassmalog</a></li> + <li><a href="http://www.jekyllrb.com/">Jeckyll</a></li> + <li><a href="http://webgen.rubyforge.org/">WebGen</a></li> + <li><a href="http://rog.rubyforge.org/">Rog</a></li> + <li><a href="http://rote.rubyforge.org/">Rote</a></li> + <li><a href="http://hobix.com/">Hobix</a></li> + <li><a href="http://rakeweb.rubyforge.org/wiki/wiki.pl">RakeWeb</a></li> + <li><a href="http://www.apeth.com/RubyFrontierDocs/default.html">RubyFrontier</a></li> + <li><a href="http://staticmatic.rubyforge.org/">StaticMatic</a></li> + <li><a href="http://staticweb.rubyforge.org/">StaticWeb</a></li> + <li><a href="http://www.zenspider.com/ZSS/Products/ZenWeb/">ZenWeb</a></li> + <li><a href="http://yurtcms.roberthahn.ca/">YurtCMS</a></li> + <li><a href="http://nanoblogger.sourceforge.net/">NanoBlogger</a></li> +</ul> +<p>There are probably even more, with different features, but they all try to solve the same problem: provide a way to generate static web sites in an automated way.</p> +<p>I spent some time reading about each one of them, <a href="http://github.com/h3rald/h3rald/issues/closed#issue/1">evaluating the pros and cons</a> and in the end I decided to go for <a href="http://nanoc.stoneship.org/">nanoc</a>, simply because it was the only one that seemed to fit all my needs.</p> +<h3>A quick overview of nanoc</h3> +<p>nanoc is a nifty tool written in Ruby suitable for <em>[…] building small to medium-sized websites</em>. In other words, anything which doesn’t involve some fancy user interaction. For what concerns blogs, the only user interaction is <em>comments</em> – but that’s fine, because there’s more than one web service for that, such as <a href="http://disqus.com/">Disqus</a> or <a href="http://intensedebate.com/">IntenseDebate</a>.</p> +<h4>Some details on the project</h4> +<p>Compared to the alternatives, nanoc is one of the most mature and most maintained, having hit just a few weeks ago its 3.0 release. Its creator, Denis Defreyne, uses it for his own <a href="http://stoneship.org/">web site</a> and is involved with the project on a daily basis, both coding and offering support to nanoc users like myself who regularly ask questions on the <a href="http://groups.google.com/group/nanoc">nanoc user group</a>.</p> +<p>Denis also seems very concerned about keeping documentation up-to-date – something that really impressed me from a technical writer’s point of view. The <a href="http://nanoc.stoneship.org/tutorial/">tutorial</a> he put together will get you started in no time, and the <a href="http://nanoc.stoneship.org/manual/">manual</a> will explain everything else you may possibly want to know. When release 3.0 came out he even put together a <a href="http://nanoc.stoneship.org/migrating/">migration guide</a>. If this is still not enough and you don’t mind spending some time extending the system, nanoc’s <a href="http://nanoc.stoneship.org/doc/3.0.0/">RDoc documentation</a> is very comprehensive compared to other Ruby projects.</p> +<h4>Sites, Items and data sources</h4> +<p style="float:right;"><img src="/img/pictures/nanoc-structure.png" alt="" /></p> +<p>nanoc ships with a really neat command line tool that can do most of the work for you. <code>Nanoc3 create_site h3rald</code> will create a new web site in a folder called h3rald. The contents of this folder are laid out according to a particular logic (<em>convention over configuration</em>, remember?) So:</p> +<ul> + <li><strong>content</strong> – your articles, pages, stylesheets, images, …all the site content and assets.</li> + <li><strong>layouts</strong> – the site layouts (and partial layouts)</li> + <li><strong>lib</strong> – place your custom ruby code and vendor libraries here</li> + <li><strong>output</strong> – your “compiled” site, ready to be deployed</li> + <li><strong>config.yaml</strong> – your site’s configuration file. The only one (and it’s just a few lines)</li> + <li><strong>Rakefile</strong> – place any custom Rake task here</li> + <li><strong>Rules</strong> – defines the rules for compilation, layout and routing</li> +</ul> +<p>Here’s the default <code>config.yaml</code> file:</p> +<div class='yaml'><pre><code>--- +data_sources: +- items_root: / + layouts_root: / + type: filesystem_compact + output_dir: output</code></pre></div><p>A <em>data source</em> in nanoc defines where data is retrieved from to create the web site. By default, the <a href="http://nanoc.stoneship.org/doc/3.0.0/Nanoc3/DataSources/FilesystemCompact.html">filesystem_compact</a> data source requires that you create two files in the /content folder for each article or page of your web page:</p> +<ul> + <li>One containing the actual content of the page</li> + <li>Another for the page’s arbitrary metadata</li> +</ul> +<p>By personal preference, I chose the <a href="http://nanoc.stoneship.org/doc/3.0/Nanoc3/DataSources/FilesystemCombined.html">filesystem_combined</a> data source, which allows you to combine the content and the metadata of a page in a single file.</p> +<p>The source code for this very article, for example, starts like this:</p> +<div class='text'><pre><code>----- +type: article +tags: +- website +- ruby +- programming +- writing +date: 2009-09-15 13:32:51.049000 +02:00 +permalink: take-back-your-site-with-nanoc +title: "Take back your site, with nanoc!" +toc: true +----- +Back in 2004, when I bought the h3rald.com domain, this site was static. At the time I hardly +knew HTML and CSS, nevermind server-side languages, so I remember creating a _pseudo-template_ for + the web site layout and using it whenever I wanted to create a new page, to preserve the overall look-and-feel. +This was a crude and inefficient strategy, of course: whenever I changed the layout I had to replicate the change + in all the pages of the site – the whole eight of them.</code></pre></div><p>At run time, the content goes through a Textile filter and the metadata is used in layouts, to generate tag links automatically, for example.</p> +<h4>Layouts, filters, and helpers</h4> +<p>Layouts in nanoc are similar to layouts and views in Rails, but much simpler. The same applies to helpers. Here’s a snippet from my <a href="http://github.com/h3rald/h3rald/tree/master/layouts/default.erb">default layout</a>:</p> +<div class='text'><pre><code><div id="container"> + <!-- CONTENT START --> + <div id="content" class="clearfix<%= (@item[:permalink] == 'home') ? ' home' : ' standard' %>"> + <h2><%= @item[:title] %></h2> + <% case @item[:type] + when 'article' then%> + <div id="content-header"> + <%= render 'article_meta', :article => @item %> + </div> + <% end %> + <hr /> + <div id="content-body"> + <%= yield %> + </div> + <div id="content-footer"> + <div class="share"> + <script type="text/javascript" src="http://w.sharethis.com/button/sharethis.js#publisher=6e34d60c-b14e-4c19-9b2f-7c35a9f0ab09&type=website&linkfg=%23a4282d"></script> + <% if @item[:feed] then %> + <a href="<% @item[:feed_url] || @item[:feed]+"rss/" %>" type="application/rss+xml" rel="alternate"><img src="/images/theme/feed-icon-14x14.png" alt="#"/>H3RALD - <%= @item[:feed_title]%></a> + <% end %> + </div> + <%= render 'article_buttons' if @item[:type] == 'article' %> + </div> + </div></code></pre></div><p>This source code snippet shows quite a few features of nanoc’s layouts:</p> +<ul> + <li>You can access the metadata of the page which is being rendered using the <code>@item</code>, so <code>@item[:title]</code> returns the page’s title, for example.</li> + <li>Layouts can be nested, and behave like Rails’s partials. The <code>render</code> takes a string parameter (the name of the layout to render) and an optional hash parameter to pass variables to the layout.</li> + <li>The <code>yield</code> method is used to include the content of a page.</li> + <li>Layouts support any kind of filter, like <span class="caps">ERB</span> for example. Go crazy.</li> +</ul> +<p>Helpers can be used in layouts to perform common tasks, like creating links, feeds, navigation elements and so on. Check the <a href="http://nanoc.stoneship.org/doc/3.0.0/">source code docs</a> for more info, and of course feel free to create your own as you see fit.</p> +<p>Finally, filters are used to filter content markup. nanoc ships with <a href="http://nanoc.stoneship.org/manual/#list-of-built-in-filters">almost everything you need</a>, from Textile to Haml to RDoc, but nobody forbids you to create your own, and it’s dead easy.</p> +<h4>Rules and tasks</h4> +<p>While tasks (as in Rake tasks) do not constitute a huge part of nanoc (but as usual, you may need to create your own to perform custom operations), Rules became, as of version 3, one of the key concepts to grasp in order to make everything work. Rules are stored in the <code>Rules</code> file of your nanoc site, they can be used to:</p> +<ul> + <li>Define routes, i.e. where pages are deployed in the output folder.</li> + <li>Define how pages are compiled, which filters to apply to a particular set of pages, which layouts to use, etc.</li> + <li>Define how layout are handled, which filters to apply to a particular layout, etc.</li> +</ul> +<p>You can find more information in the <a href="http://nanoc.stoneship.org/manual/#rules">manual</a>, along with other important information, but for now, let’s say you should be familiar with <em>most</em> of nanoc’s jargon and how it works. Let’s see what you can do with it, in practice.</p> +<h3>Migrating from your blog platform</h3> +<p>As of version 7, h3rald.com has been powered by the <a href="http://www.typosphere.org">Typo</a> blog platform. If you are not familiar with it, let’s just say it’s a sort of Wordpress built on top of Rails: database backend, pretty admin front-end, tags, comments, and all sort of things a blog may need. While Typo is pleasant enough to use, it has all the inherent disadvantages of any other similar platform:</p> +<ul> + <li>It relies on a database</li> + <li>It relies on server-side scripting to render pages</li> + <li>It uses a complex caching mechanism to produce, ultimately, semi-static pages</li> + <li>It may be subject to exploits, attacks, high server loads, and similar</li> + <li>You can’t really customize it beyond a certain point</li> + <li>You have to upgrade your backend frequently, and often is not as painless as you may expect</li> + <li>You can’t use versioning tools like git for your content, as it’s stored in a database</li> +</ul> +<p>I’m not claiming that nanoc is blogging’s silver bullet (it was not created for that), but for sure:</p> +<ul> + <li>It <em>does not</em> rely on a database</li> + <li>It <em>does not</em> rely on server-side scripting to render pages (not in real-time, anyway)</li> + <li>It <em>does not</em> need a complex caching mechanism simply because it produces static pages</li> + <li>It is definitely less prone to nasty things</li> + <li>It’s extremely flexible and hackable with very little effort</li> + <li>You don’t have to upgrade all the time, but it is <em>really</em> painless if you decide to</li> + <li>You can use git and similar: your content is in plain old text files</li> +</ul> +<p>Rants are beside the point, suffice to say I recently convinced myself that switching from Typo to nanoc was a <em>good thing</em>, so let’s see how it worked out.</p> +<h4>Posts, pages and comments</h4> +<p>Out of Typo’s MySQL database, I just wanted to get the following data:</p> +<ul> + <li>Pages and posts</li> + <li>Tags</li> + <li>Comments</li> +</ul> +<p>Following the approach used by <a href="http://github.com/mojombo/jekyll">Jekyll</a>, I decided to use the simple and powerful <a href="http://sequel.rubyforge.org/">Sequel</a> gem. I’m sorry to disappoint you, but the whole migration process can be summarize with the following Rake task:</p> +<div class='ruby'><pre><code>task :migrate, :db, :usr, :pwd, :host do |t, args| + raise RuntimeError, "Please provide :db, :usr, :pass" unless args[:db] && args[:usr] && args[:pwd] + db = Sequel.mysql args[:db], :user => args[:usr], :password => args[:pwd], :host => args[:host] || 'localhost' + # Remove all existing pages! + dir = Pathname.new(Dir.pwd/'content') + dir.rmtree if dir.exist? + dir.mkpath + # Prepare page data + dataset = db[:contents].where("state = 'published' || type = 'Page'") + total = dataset.count + c = 1 + total_tags = [] + dataset.each do |a| + puts "Migrating [#{c}/#{total}]: '#{a[:title]}'..." + meta = {} + meta['tags'] = get_tags a[:keywords] + meta['comments'] = get_comments db, a[:id] + meta['permalink'] = a[:permalink] || a[:name] + meta['title'] = a[:title] + meta['type'] = a[:type].downcase + meta['date'] = a[:published_at] + meta['toc'] = true + meta['filters_pre'], extension = get_filter db, a[:text_filter_id] + contents = convert_code_blocks meta, a[:body]+a[:extended].to_s + write_page meta, contents, extension + c = c+1 + end + end</code></pre></div><p>That’s it. Well, almost: you can find the <code>get_comments</code>, <code>get_tags</code> and <code>get_filter</code> methods in a separate <a href="http://github.com/h3rald/h3rald/tree/master/lib/utils.rb">utility file</a>. Nothing special really, just a few convenience methods wrapping queries or simply processing data. Note how all information, including tags and legacy comments, is saved in each page’s metadata. The <code>write_page</code> method simply creates a file in the <code>/contents</code> folder.</p> +<h4>Filters and highlighters</h4> +<p>On my old site, I used mainly Textile and Markdown to write posts. However, some of my really old articles used BBCode, whose corresponding filter is not available in nanoc. No worries, I soon found out that creating a new nanoc filter came down to this:</p> +<div class='ruby'><pre><code>require 'rubygems' +require 'bb-ruby' + +class BbcodeFilter < Nanoc3::Filter + identifier :bbcode + + def run(content, args) + content.bbcode_to_html + end + +end</code></pre></div><p>Yes, that’s it. Granted, the <code>bb-ruby</code> gem does all the work, but notice how easy it is to just plug in new Ruby code into nanoc’s architecture!</p> +<p>The next big challange was code highlighting. After a quick research, I found at least a half dozen of possible solutions to highlight source code. Some were javascript based, others were based on a server-side language like <span class="caps">PHP</span>, Ruby or Python. Again, I looked at Jekyll for inspiration and discovered they integrated the <a href="http://www.pygments.org">Pygments</a> <em>Python</em> library. Why use a Python library for code highlighting in a Ruby-based project? Because there’s nothing to stop you (if you can run Python on your server, that is), because it looks very neat and because it supports a lot of different programming languages.</p> +<p>Lazy as I am, I more or less dropped <a href="http://github.com/h3rald/h3rald/blob/master/lib/albino.rb">Chris Wanstrath’s Ruby wrapper</a> into my <code>/lib</code> folder (I just used Open3 instead of Open4 for Windows compatibility), and monkey-patched nanoc’s filtering helper as follows:</p> +<div class='ruby'><pre><code>module Nanoc3::Helpers::Filtering + + def highlight(syntax, &block) + # Seamlessly ripped off from the filter method... + # Capture block + data = capture(&block) + # Reconvert + data.gsub! /<%/, '' + # Filter captured data + filtered_data = "\n<notextile>"+Albino.colorize(data, syntax)+"</notextile>\n" rescue data + # Append filtered data to buffer + buffer = eval('_erbout', block.binding) + buffer << filtered_data + end + +end + +include Nanoc3::Helpers::Filtering</code></pre></div><p>There you go, another thing sorted.</p> +<h4>Tags and Feeds</h4> +<p>Adding tagging support was a tiny bit more tricky. nanoc supports content tagging out-of-the-box though metadata and a simple helper, but I wanted to create tag pages (with feeds). Nothing too difficult though, it all came down to a simple Rake task:</p> +<div class='ruby'><pre><code>task :tags do + site = Nanoc3::Site.new('.') + site.load_data + dir = Pathname(Dir.pwd)/'content/tags' + dir.rmtree if dir.exist? + dir.mkpath + tags = {} + # Collect tag and page data + site.items.each do |p| + next unless p.attributes[:tags] + p.attributes[:tags].each do |t| + if tags[t] + tags[t] = tags[t]+1 + else + tags[t] = 1 + end + end + end + # Write pages + tags.each_pair do |k, v| + write_tag_page dir, k, v + write_tag_feed_page dir, k, 'RSS' + write_tag_feed_page dir, k, 'Atom' + end + end</code></pre></div><p>Again, you can find all the other simple utility methods in my <a href="http://github.com/h3rald/h3rald/tree/master/lib/utils.rb">utility file</a>.</p> +<p>When it came to feeds, I decided to create a new method for the Blogging helper to create <span class="caps">RSS</span> feeds, although nanoc does come with an Atom feed generator:</p> +<div class='ruby'><pre><code>def rss_feed(params={}) + require 'builder' + require 'time' + prepare_feed params + # Create builder + buffer = '' + xml = Builder::XmlMarkup.new(:target => buffer, :indent => 2) + # Build feed + xml.instruct! + xml.rss(:version => '2.0') do + xml.channel do + xml.title @item[:title] + xml.language 'en-us' + xml.lastBuildDate @item[:last][:date].rfc822 + xml.ttl '40' + xml.link @site.config[:base_url] + xml.description + @item[:articles].each do |a| + xml.item do + xml.title a[:title] + xml.description @item[:content_proc].call(a) + xml.pubDate a[:date].rfc822 + xml.guid url_for(a) + xml.link url_for(a) + xml.author @site.config[:author_email] + xml.comments url_for(a)+'#comments' + a[:tags].each do |t| + xml.category t + end + end + end + end + buffer + end + end</code></pre></div><p>Nothing too daunting, once you get used to Ruby’s <span class="caps">XML</span> builder. I followed a similar approach for my <a href="/archives">monthly archives</a></p> +<h4>3rd-party services</h4> +<p>Finally, the interactive bits. I basically turned to third-party services and a bit of jQuery for everything which required user-interaction or pulling data from other web sites. Here’s a list of services and APIs I currently use:</p> +<ul> + <li><a href="http://intensedebate.com/">IntenseDebate</a>, for comments.</li> + <li><a href="http://code.google.com/apis/ajaxsearch/web.html">Google <span class="caps">AJAX</span> Search <span class="caps">API</span></a> for internal site-wide search.</li> + <li><a href="http://apiwiki.twitter.com/">Twitter <span class="caps">JSON</span> <span class="caps">API</span></a> to fetch tweets.</li> + <li><a href="http://delicious.com/help/json">Delicious <span class="caps">JSON</span> <span class="caps">API</span></a> to fetch delicious bookmarks.</li> + <li><a href="http://www.backtype.com/developers">BackType <span class="caps">JSON</span> <span class="caps">API</span></a> to fetch comments from other sites.</li> + <li><a href="http://develop.github.com/">GitHub <span class="caps">JSON</span> <span class="caps">API</span></a> to fetch GitHub commits for most of my <a href="/projects">projects</a></li> +</ul> +<p>If you want to know how I integrated them, check out my <a href="http://github.com/h3rald/h3rald/tree/master/content/js">/js folder</a>, it was very simple, really.</p> +<h3>Conclusion</h3> +<p>I was very happy of switching to nanoc. It didn’t take me long, and I spent most of the time with non-nanoc issues (brushing up jQuery, <span class="caps">CSS</span>, graphics, etc.). Of course knowing the Ruby programming language helps, and if you’re not comfortable with hacking your way a little bit, then maybe it’s not for you.</p> +<p style="float:left;"><img src="/img/pictures/nanoc-compile.png" alt="" /></p> +<p>Personally, I’ve been waiting for something like nanoc for a long time: its simple and yet powerful architecture makes you able to do virtually anything with it. For the first time in a long time, I feel like I’m in complete control of my web site, I know every bits of it and if I want to change the way it works or looks I only have to touch a few files.</p> +<p>nanoc’s metadata is mindblowing for its simplicity and power: although you’re not dealing with a database, you can query your content in the easiest ways possible. Whenever I needed a way to easily access pages, filter them, add extra logic to them, I just added metadata. If you forget something, you don’t have to change your database tables, create new relationships or anything of the sort, you simply add metadata to pages.</p> +<p>Be warned that tweaking nanoc gets addictive very quickly: you soon end up creating silly little tasks for making things just the way you want. For me, adding a new article to my blog now just means this:</p> +<div class='text'><pre><code>$ rake site:article name=take-back-your-site-with-nanoc +$ vim content/articles/take-back-your-site-with-nanoc +... write & close the file ... +$ Nanoc3 compile</code></pre></div><p>…Exactly what I need. Nothing more, nothing less.</p>
@@ -0,0 +1,114 @@
+----- +title: "The Internet Philosopher" +content-type: article +timestamp: 1147345241 +tags: "internet|writing|travelling" +----- +<p>Recently I got this rather short email from a guy named Daniel Lampinen:</p> +<blockquote> +<p>Hi. Respect for being an internet addict – that’s good. I have moved to India just to afford and get time to be on the internet as much as possible:</p> +<p><a href="http://www.ropix.org/english.html">http://www.ropix.org/english.html</a></p> +</blockquote> +<p>Spam? Yeah, must be: I get this kind of stuff all the time, and this looked like another person asking for money. Or maybe not? After all this guy is not asking for anything in his mail, he’s just telling me something about myself and perhaps try to get me to visit his site<sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup>. I did indeed – after all it was just one click away – mostly for curiosity.That website was one of the most plain ones I’ve ever come across, perhaps to help the visitor to understand that <em>content</em> is the only think that matters, not <em>design</em>. Daniel seems to be Swedish, and he immediately apologizes for his imperfect English: indeed there are some mistakes here and there, but I could understand <em>enough</em> about him, his way of living and his beliefs that I decided to write this article about him.</p> +<h3>An Internet Philosopher</h3> +<p><em>“I’m trying to live for my opinions and ideas”</em></p> +<p style="float:right;"><img src="/img/pictures/lampinen/piccadilly.jpg" alt="" /></p> +<p>This is Daniel’s “statement” which guides his entire life. He lives for his opinions and ideas, he lives to debate them with others, to talk to others about them, and eventually getting money for doing so: that would be his ideal way of living, and he partly realized it already.<br /> +It all started last year (2005), when he was a mailman in Stockholm: that was a boring job, probably like a million other jobs anywhere in the world. He didn’t want to do that, and – believe it or not – he didn’t want a business career either: he just wanted to spend time on the Internet, creating <em>things</em>. Not cool websites or successful e-businesses, just express his own opinions, thoughts and ideas and spread them online, he defines himself a <em>philosopher</em>, and yet I could not find anything better to define him: he literally lives for his thoughts.</p> +<p>A few months ago the Italian Telecom broadcasted one of the most peculiar adverts I’ve ever seen: they were portraying an hypothetical past, where Gandhi was appearing on TV, on the Internet, on mobile phones, on big screens in the streets pronouncing one of his famous speeches. The advert ends with a sentence like <em>“Imagine what could have happened if he could have used our communication systems”</em>, trying to promote Telecom’s services, and it has been criticized<sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup> many times for this. <br /> +I immediately thought about this advert while reading Daniel’s homepage. Obviously he’s far from being Gandhi, but at least he attempts to live in a simple and honest way and tries to communicate with as many people as possible. And he lives in India, he recently moved there from Sweden mainly because it’s much, <span class="caps">MUCH</span> cheaper than any country in Europe or in the rest of the Rich World.</p> +<p style="float:left;"><img src="/img/pictures/lampinen/cow.jpg" alt="" /></p> +<p>From what I could read about him, his life is quite simple: he tries to spend as little money as possible and not in futile things. He lives in a cheap hotel in Puri, India, where he can access the Internet – that’s all that matters. Perhaps it may sound a bit freaky, but certainly not as freaky as going out getting trashed every night, buying drugs or waste money on trendy clothes – at least from someone’s point of view.</p> +<p><em>“Yeah, OK, it’s all good so far but how can he live like that? Has he got a job?”</em></p> +<p>Yes and no – not in a traditional way, at least. He sells stuff, his thoughts, ideas and writings to be more precise, and no, there are no set prices: he goes <em>“[…] by this principle (the Annalakshmi<sup class="footnote" id="fnr3"><a href="#fn3">3</a></sup> principle): pay as much as you think my work is worth.<sup class="footnote" id="fnr4"><a href="#fn4">4</a></sup>”</em>.<br /> +It’s quite similar to charity and it’s an interesting idea, whose success highly depends on the conscience of the giver: <em>the more honest his soul his, the more he’ll give</em>.</p> +<h3>Business Talk</h3> +<p>Don’t call him a beggar. Daniel has his own way of seeing the economy of the Rich World and also his own views when it comes to money:</p> +<p style="float:right;"><img src="/img/pictures/lampinen/money.jpg" alt="" /></p> +<blockquote> +<p>“This should be mentioned: give money to Unicef instead of to me. But give money to me instead of buying a expensive new couch.<br /> +[…] If I can inspire you to consume less, it may be worth some money. How would the world look like if everybody payed each other because they wanted to, not only because they legally had to? Pretty good, right? On some places in the world there’s today restaurants where you can pay as much as you thought that the food was worth. See this like a newspaper or a book that you can choose to pay for.</p> +<p>There’s plenty of different policies on what you should put your money on. On of the policies is to follow the market totally (except when it comes to classic charity). That one use to result in that you think it’s ok to buy a Gucci bag for $1000 but think it’s out of the question to give something to someone that “doesn’t wanna work for the money”.</p> +<p>[…] It can even be fun to get fooled by a souvenir salesman in a warm country – if you let go of some of the pride and the “millimeter justice”. Do that. You can still give as much or more to Unicef. I prefer a society where people put money on other people – both those struck by a catastrophe and rich people in your country – instead of buying un-necessary stuff.<sup class="footnote" id="fnr5"><a href="#fn5">5</a></sup>"</p> +</blockquote> +<p>Daniel accepts donations in many ways<sup class="footnote" id="fnr6"><a href="#fn6">6</a></sup>, and it must be noted is that his supporters may even choose how he should use his money, you can tell him what to buy or not to buy, and he’ll respect your decision: someone told him not to buy drugs and he never did, while another asked him to buy good food, and maybe a beer at local restaurants, and he did exactly that<sup class="footnote" id="fnr7"><a href="#fn7">7</a></sup>.<br /> +If you’re curious about what he buys, Daniel added a list of expenses<sup class="footnote" id="fnr8"><a href="#fn8">8</a></sup> to his site which diligently updates every time he spends money. Prices are in indian rupees (1$ is about 45 rupees!), and it looks like this:</p> +<ul> + <li>10 Bread</li> + <li>9 Tip to roomservice</li> + <li>30 Internet ticket</li> + <li>10 Drinking water</li> + <li>40 Riksa taxi</li> + <li>10 Muffins</li> + <li>10 Bananas</li> + <li>25 Bread and chips</li> + <li>10 Tip to roomservice</li> + <li>36 Candy</li> + <li>15 Bread</li> + <li>20 Internet ticket</li> + <li>12 Tip to roomservice</li> + <li>20 Tip to roomservice</li> + <li>7268 Hotel room for 8-18 April (plus food+bewerages+internet+laundry)</li> + <li>15 Tip roomservice</li> +</ul> +<p>In a nutshell, when it comes to money and buying things, Daniel lives by this simple rule:</p> +<blockquote> +<p>“Work with unwanted things as little as possible, consume as little as possible, communicate as much as possible”</p> +</blockquote> +<p>But is it really that simple? Could <em>you</em> live like him and still be happy? Certainly he has a big advantage: he lives in India, where everything costs much less than in Europe or the US. If you decide to try, he can help: he can give anybody suggestions on how to live cheaper and even keep you motivated to do so, and all he asks in exchange is what <span class="caps">YOU</span> think his suggestions are worth. All the payments for this service must be made through a Swedish company<sup class="footnote" id="fnr9"><a href="#fn9">9</a></sup>, which is technically his employer.</p> +<p>He can also sell “ideas” in the same way: you start emailing him explaining your situation and your needs, and he’ll try his best to come up with a solution and his own opinions. You won’t believe it, but a Swedish company<sup class="footnote" id="fnr10"><a href="#fn10">10</a></sup> was really pleased to hear his opinions and thoughts about innovation and used his suggestions to improve their services.</p> +<h3>An Internet Addict</h3> +<p style="float:left;"><img src="/img/pictures/lampinen/view.jpg" alt="" /></p> +<p>Perhaps one of the most interesting things about Daniel’s website is his journal. Not a proper blog, but just a single static webpage hosting all his daily thoughts: you can’t comment to them, but reading some passages may be interesting enough. <br /> +The best way to do so is trying to search for a particular word (in Firefox it’s pretty easy) and read what he wrote about that, I tried with “Internet” and here’s something I came across:</p> +<blockquote> +<p>“Now I’m finally realizing my two year old plans to be in a poor country. The only thing I’m gonna do is thinking, and surfing on the internet, see how long my money will last, and try to get new money to my <span class="caps">VISA</span> card by doing work that can be done with a brain and internet, for example producing ideas and point of views to companies in rich countrys. What’s good for everybody, is that I don’t need many dollars/euros to survive.”</p> +</blockquote> +<p>This was one of his early posts, and yes, that’s exactly what he started to do…</p> +<blockquote> +<p>So, I’m living at the internet. Hotel room, beach, internet. That’s pretty monotonous. But all together better than better than s[**]t job. I’m gonna contact medias that cover the internet and offer to write things in behalf of a person that have filled his life with only internet.</p> +</blockquote> +<blockquote> +<p>Internet, internet, internet. I’m happily addicted to something that makes me smarter and finding the right people. The only thing you need is a cable. People are crowding at the internet cafes here at the tourist street by the beach, and it’s a nice atmosphere.</p> +</blockquote> +<p>An happy internet addict. Although how good this addiction is can be debatable, Daniel seems to have found his perfect way of living, and the only thing he needs is an Internet connection and his brain.</p> +<blockquote> +<p>“Yesterday I searched on Google for the swedish words for “I am an internet addict” and e-mailed the words “respect for being an internet addict – that is good” to the bloggers that had written the sentence “I am an internet addict” during the last year."</p> +</blockquote> +<p>Yes, that’s exactly the message I got by email a few days ago. At first I must say I found it even a bit offensive: <em>“I am not an Internet addict! You might be, but I’m not.”</em> – He obviously didn’t mean to insult neither me nor any other blogger he mailed: for him, “being an internet addict” is probably one of the best things people – especially young people – can do.</p> +<p>Shocked? Yes, it’s understandable: we hear a lot about Internet addiction in these days, and I was reading in a recent study<sup class="footnote" id="fnr11"><a href="#fn11">11</a></sup> which pointed out that:</p> +<blockquote> +<p>“[…] When 54 percent of Internet addicts say they have a history of depression, 52 percent drug or alcohol abuse and 34 percent an anxiety disorder, it seems even clearer that cyberspace is just another place for unhealthy and self-destructive behaviors to manifest themselves.”</p> +</blockquote> +<p>Is it though? Daniel Lampinen truly admints he’s an Internet addict, but he most definitely doesn’t have any history of drug or alcohol abuse:</p> +<blockquote> +<p>“On [the] Give me money [page] there’s now a list of demands from the givers. The first demand come from the latest giver: no drugs. Which I’m fine with. As you can see on What I’m buying, I’ve only bought one joint (in Christiania in Copenhagen). And that was just a statement because I think others is gonna be free to do it. I never take anything to “get away from reality”, or to “have fun”. Not even beer, which I only take to relax. That’s how dull I am. The reality rules."</p> +</blockquote> +<p>There you are. <br /> +So why did he choose to become an Internet addict? Well, most definitely because he was tired of the Rich World’s society: he had a boring job which he didn’t enjoy, and he simply realised that the Internet <em>could</em> – at least sometimes – be better than ordinary life. He openly admits he’s a weird human being, and he’s fine with that, but you can be sure of two things:</p> +<ul> + <li>he’s totally, absolutely honest, in anything he does, and he’s not afraid to express his own opinions without adjusting them according to the people around him</li> + <li>he maintained his individuality at the cost of living in a poorer country</li> +</ul> +<p>How many people in the Rich World can accomplish either of these things? Please raise your hands…</p> +<h3>Notes</h3> +<p>Very special thanks to Daniel Lampinen for allowing me to write about him and providing all the pictures for this article.</p> +<p class="footnote" id="fn1"><a href="#fnr1"><sup>1</sup></a> Daniel Lampinen’s <a href="http://www.ropix.org/english.html">website</a>, English version.</p> +<p class="footnote" id="fn2"><a href="#fnr2"><sup>2</sup></a> <a href="http://www.zeusnews.it/index.php3?ar=stampa&cod=3432">Gandhi e Telecom Italia</a> – Comments on the famous Italian advert. [Italian]</p> +<p class="footnote" id="fn3"><a href="#fnr3"><sup>3</sup></a> <a href="http://www.annalakshmi.org/index.php">Annalakshmi</a> – <em>A non-profit organization dedicated to bringing the joy of Indian culinary, visual and performing arts to one and all.</em><br /> +<em>Annalakshmi is an international chain of vegetarian restaurants that augments its dining experience by showcasing Indian arts and handicrafts as well as cultural dance and music performances. Inspired by the Hindu concept for Abundance, Annalakshmi operates on the basis of “Eat as you Want, Pay as you Wish” where the guest decides not just what to order but also how much to pay.</em></p> +<p class="footnote" id="fn4"><a href="#fnr4"><sup>4</sup></a> From Daniel Lampinen’s <a href="http://www.ropix.org/ideas.html">UI Ideas</a> page.</p> +<p class="footnote" id="fn5"><a href="#fnr5"><sup>5</sup></a> From Daniel Lampinen’s <a href="http://www.ropix.org/money.html">Money</a> page.</p> +<p class="footnote" id="fn6"><a href="#fnr6"><sup>6</sup></a> Daniel’s <a href="http://www.ropix.org/money.html">Money page</a> lists all possible ways to dive him money, most notably:</p> +<ul> + <li><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=800825%40gmail%2ecom&item_name=Ropix&no_shipping=0&no_note=1&tax=0&currency_code=USD&bn=PP%2dDonationsBF&charset=UTF%2d8">Paypal</a></li> + <li>His <span class="caps">IBAN</span> bank account number (an international number):<br /> +SE1580000008201644439081<br /> +With this code: <span class="caps">BIC</span>. <span class="caps">SWEDSESS</span></li> + <li>His <a href="http://www.ropix.org/free.html">free page</a>.</li> +</ul> +<p class="footnote" id="fn7"><a href="#fnr7"><sup>7</sup></a> It’s documented in the <a href="http://www.ropix.org/gustav100kr.html">Gustav 100Kr</a> page.</p> +<p class="footnote" id="fn8"><a href="#fnr8"><sup>8</sup></a> Daniel’s <a href="http://www.ropix.org/expenses.html">list</a> of expenses.</p> +<p class="footnote" id="fn9"><a href="#fnr9"><sup>9</sup></a> <a href="http://www.f-bolaget.se/index.html">F-Bolaget AB</a></p> +<p class="footnote" id="fn10"><a href="#fnr10"><sup>10</sup></a> <a href="http://www.intip.se/">Intip</a></p> +<p class="footnote" id="fn11"><a href="#fnr11"><sup>11</sup></a> <a href="http://arstechnica.com/news.ars/post/20060510-6795.html">Is Internet addiction a real problem?</a> – Arstecnica.com</p>
@@ -0,0 +1,37 @@
+----- +title: "Book Review: The Merb Way" +content-type: article +timestamp: 1258452936 +tags: "ruby|books|review" +----- +<p>When I first picked up this book I was surprised by its length. Somehow, after reading <a href="/articles/the-rails-way-review">The Rails Way</a>, I got stuck in my mind that <a href="http://my.safaribooksonline.com/9780321601636">The Merb Way</a> had to be almost equally voluminous. Instead, this book is about 300 page long, roughly as long as the sum of the chapters devoted to <em>ActiveRecord</em> in Obie Fernandez’s acclaimed Rails bible.</p> +<p>Apparently it only takes 300 pages to describe a web framework nowadays! I couldn’t help but feeling a bit skeptical at first. Even in the foreword, Obie Fernandez presents the book – and the whole <a href="http://www.merbivore.com">Merb</a> framework – with some initial skepticism: isn’t Ruby on Rails enough? Why do we need yet another Ruby web framework? And above all, seeing that Merb is going to eventually be <a href="http://weblog.rubyonrails.org/2008/12/23/merb-gets-merged-into-rails-3">merged into Rails 3</a>, why on Earth do we need a book about Merb, <em>now</em>?</p> +<p>Needless to say, Foy Savas proved that both Merb and its book cannot be dismissed just like that.</p> +<h3>Getting started</h3> +<p style="float:right;"><img src="/img/pictures/therailsway.jpg" alt="" /></p> +<p>The book starts with the original <a href="http://pastie.org/14416">Merb Pastie</a>, a single page of Ruby code able to sort out <span class="caps">HTTP</span> requests, dispatch them to the appropriate controllers and render a web page. This piece of code is enough to convey what Merb is: a new breed of web framework, almost as simple as it can get but very poweful and flexible at the same time.</p> +<p>As you start diving in through the first chapter, you realize you’re reading about a <em>Hacker’s Web Framework</em>. That’s precisely what Merb is: a very versatile tool to get the job done, in the simplest way possible. Similarly, <em>The Merb Way</em> immediately feels like a <em>Hacker’s Handbook</em> rather than an ordinary guide on how to develop web applications. You won’t learn what <span class="caps">MVC</span> is by reading this book, and don’t expect to be taught what a <em>mixin</em> is; you are reading a book about a Ruby web framework that was born after the <em>Rails Revolution</em>, so it is safe (for the author) to assume that:</p> +<ul> + <li>You know the Ruby programming language</li> + <li>You know what Ruby on Rails is and you tried it out, at the very least</li> +</ul> +<p>The first few chapters are about the core functionalities provided by an an <span class="caps">MVC</span> framework: after a comprehensive first chapter about Merb’s fundamentals (from the layout of a Merb application to an overview of Merb internals) you are quite abruptly “introduced” to routing, controllers, views and models. These chapters do not aim to provide a comprehensive description of each component, they simply tell you: <em>here’s how Merb does this</em>.</p> +<p>Out of the first five chapters, favorite is definitely the one about <em>Models</em>. Although Merb is <span class="caps">ORM</span>-agnostic, DataMapper is the <em>de facto standard</em> for Merb applications, and it fully embrace the framework’s design and extreme flexibility without being <em>in the way</em> of your code.<br /> +Foy does an excellent job in this chapter by strategically describing DataMapper’s code from the top to the very bottom, from the highest abstractions to raw <span class="caps">SQL</span> code, using a plethora of snippets taken from the actual Merb code.</p> +<h3>It’s about how Merb works, not how to work with Merb</h3> +<p>After reading the <em>Models</em> chapter I decided to go back and re-examine the previous chapters. I didn’t notice until then, but the author sneakily <em>smuggled</em> a consistent amount of Merb source code into this book. This is rather unusual for books about web frameworks: they normally tell you how to use the framework, not how it was built! While this can be disappointing for people used to read Rails books, it came as a very pleasant surprise to me.</p> +<p>About 40-50% of this entire book (and I’m not exaggerating) is Ruby source code. In a good way, it feels like a collection of strategically-positioned code snippets glued together with explanations of the most tricky bits and digressions on how the framework was <em>designed</em>. In other words, it probably contains just enough text to make sure that the average reader understands the code, but remember that the <em>average reader</em> of this book must know Ruby failry well.</p> +<p>There is no pointless prose in this book, no explanations of obvious methods, no fancy words, no useless boasting on how cool the framework is: just an objective description of how Merb works and of the key design decisions behind it. If I may, the only thing that doesn’t feel quite right with this book is its title: <em>Merb Internals</em> would have been a better choice. Once you realize this, the book suddenly makes sense, and can even make you a better Ruby programmer.</p> +<p><em>The Merb Way</em> does an excellent job in describing how to design a web framework, or any real-world Ruby application for that matter. It teaches you that modularity is the key to flexibility by showing how the Merb stack is organized. Sure, it doesn’t teach you how to create a blog in five minutes, but perhaps a thorough explanation of how anthentication is implemented (Chapter 9) will actually be useful in two months time, when you’ll have to create your own Merb plugin from scratch.</p> +<h3>Some constructive criticism</h3> +<p>The idea behind this book is clever but a bit dangerous. I flipped through the pages in front of my wife and asked her what was wrong with it. <em>“There’s too much code!”</em> she said, without hesitation. Precisely.</p> +<p>It is damn good Ruby code, but sometimes you wish there was more text describing how to use it in practice. Or maybe some code examples on <em>using</em> the framework on a real-world application. Not a chance. Of all that holy code, there’s not much featuring something other than Merb itself. Basically the exact opposite of all the other books about Rails or other web frameworks!</p> +<p>Even accepting the fact that you are not reading a book about developing web applications, there are two more things which could be improved:</p> +<ul> + <li>Merb’s design is very intriguing, and you grasp the essentials by reading this book, but a few diagrams here and there and more in-depth digressions on the subjects would have been nice.</li> + <li>Besides DataMapper, what I really wanted to read about were Slices and Parts – unfortunately the chapters about them are far too short and shallow. The reasoning behind this is that <em>their future may be uncertain</em> due to the Rails 3 merge. Pity.</li> +</ul> +<h3>Conclusion</h3> +<p>The death of Merb has been greatly exaggerated. Too bad I <a href="/articles/take-back-your-site-with-nanoc/">gave up web frameworks altogether</a> for my site, because after reading this book I would have gone for Merb <em>today</em> rather than waiting to see the wonders of Rails 3 <em>tomorrow</em>. Even a book with this title could have been written in a very different way, I would still recommend it if you want to become a better Ruby programmer by learning from the best: Merb code really stands out, even compared to Rails, and Foy Savas does a great job presenting and describing it.</p> + +
@@ -0,0 +1,63 @@
+----- +title: "Book Review: The Rails 3 Way" +content-type: article +subtitle: "aka The (Rails) Bible, 2nd Edition" +timestamp: 1301141806 +tags: "review|books|rails" +pdf: true +----- + + <section class="section"> +<p>Obie did it, again. With the second edition of his former masterpiece, <em>The Rails Way</em>, he managed to outdo himself delivering a new, even more useful, Rails Bible. Wether you’re a Ruby on Rails professional like him or just an enthusiast, this book is pretty much everything you need to learn how to master the third release of DHH’s Ruby web framework.</p> +<p><a href="http://tr3w.com/">The Rails 3 Way</a> is no ordinary second edition. If you already own <em>The Rails Way</em>, you’ll be pleasantly surprised that this is a different, more polished book. While something had to remain the same, there’s a lot of new content in its 708 pages, and even the old content has been rewritten or at least revised.</p> +<p>It doesn’t matter whether you already know Rails 2.x or you’re jumping straight into the Rails 3 world, if you use Rails, you can’t miss this book.</p> +<p>I started the <a href="http://www.h3rald.com/articles/the-rails-way-review/">review of the first edition</a> with a quote from my fiancée (now wife) on how pointless programming books are, especially those dealing with newish technologies: they tend to go out of date fairly quickly. While this still holds true, there’s not much you can do about it, except maybe purchasing a digital edition of the book instead. However, if you want to keep a good Rails reference book by your side, this has to be the one.</p> + + + + +<section class="section"> +<header><h1 id="h_1" class="toc">What's New</h1></header> +<figure style="float:left;"><img src="/img/pictures/books/rails3way/compare.jpg" /><figcaption>The Rails Way vs. The Rails 3 Way</figcaption></figure> +<p>If you put <em>The Rails 3 Way</em> and the original <em>The Rails Way</em> one next to the other, you can see that the new book is considerably shorter: about 200 pages less. This doesn’t mean it contains less information, quite the opposite: the new book contains a lot more stuff with less <em>fluff</em>. Obie managed to reduce digressions to a bare minimum and focus on providing more informative content to the readers using less text. Think of it as a <em>fat-free</em> book.</p> +<p>While no <em>What’s new in Rails 3</em> section is included in the book, Obie points out the new stuff when needed (but not always). An example is chapter 12, <em>Ajax on Rails</em>, in which changes introduced by Rails 3 clearly stand out, especially the section on Unobtrusive JavaScript (<span class="caps">UJS</span>).</p> +<p>Although the book is divided into chapters, it can also be divided into parts (each dealing with a specific theme) simply by looking at the front edge. According to this theme-based partitioning, Active Record makes up for nearly <em>a quarter</em> of the book (173 pages), followed by <em>Active Support <span class="caps">API</span></em> appendix and the <em>All About Helpers</em> chapter.</p> +<p>Another nice addition that can really make the difference when you’re in a hurry is the <em>Method Index</em>, which is separate from the main Index. It seems to account for all the methods in all (or at least the most important) classes in Rails. I didn’t check method by method, but it is pretty comprehensive nonetheless, based on some quick spot checking.</p> + +</section> +<section class="section"> +<header><h1 id="h_2" class="toc">Contents</h1></header> +<figure style="float:right;"><img src="/img/pictures/books/rails3way/sections.jpg" /><figcaption>Active Record makes up for over 24% of the book</figcaption></figure> +<p>The first thing you notice once you read the first few pages, is that this book is <em>even more opinioned</em> than its predecessor.</p> +<blockquote> +<p>Even though Rails 3 is less opinionated than early versions, in that it allows for easy reconfiguration of Rails assumptions, this book is more opinionated than ever.</p> +</blockquote> + <p style="margin-left: 4em">– Obie Fernandez, <cite>Introduction to <em>The Rails Way</em></cite></p> +<p>In other words, you won’t find an ERb view in the whole book (Haml rulez!) and if you don’t like RSpec… well, you’d better skip Chapter 18 altogether.</p> +<p>The other big difference with traditional Ruby and Rails books is the amount of reference to third-party code, mainly rubygems. Rails comes with no authentication functionality? So what: <a href="https://github.com/binarylogic/authlogic">Authlogic</a> and <a href="https://github.com/plataformatec/devise">Devise</a> are great for the job, go check them out! Do you need to test your Active Mailer emails? <a href="https://github.com/bmabey/email-spec">email-spec</a> is all you need.</p> +<p>I was actually surprised to find so much content not strictly related to Rails in this book: the first chapter starts off with <a href="http://gembundler.com/">Bundler</a> (now a Rails dependency, however), Chapter 2 (Routes) mentions <a href="http://rack.rubyforge.org/">Rack</a>, and so does Chapter 4 (Controllers). If you want a nice and to-the-point practical introduction to <a href="http://relishapp.com/rspec">RSpec</a>, the first part of Chapter 18 covers that.</p> + + <figure style="float:left;"><img src="/img/pictures/books/rails3way/reference.jpg" /><figcaption>About 40% of the book is reference material</figcaption></figure> +<p>Then there’s reference material. Plenty of it, a good 40% I daresay. The good thing is that (unlike the first edition) it won’t bore you to death: take Chapter 5 (Working with Active Record) for example, you’ll fly through find-related methods so swiftly you’ll regret when it’s over. Active Support? I didn’t read every line of Appendix B, but when I want to know something about inflection methods I will know exactly where to find them, and what to expect: the method signature, a few lines of text, and a short example at most.</p> +<p>My only regret? Cheat sheets. Or better, the lack of them. More tables, please! Granted, the web is full of Rails cheat sheets, but a few of them at the end of the book or even in a separate foldable add-on like in the <a href="http://www.pragprog.com/titles/tpp/the-pragmatic-programmer">Pragmatic Programmer</a> can’t hurt.</p> +<p>Finally, some words about the code examples. The code/text ratio is almost 1:1, but Obie’s choice of <em>not</em> turning this book into a huge tutorial by implementing a single example application was absolutely right: The code snippets used in throughout the book are concise and relevant to the text around them and won’t distrupt your reading. If you want to play with them, they’re even <a href="https://github.com/obie/tr3w_time_and_expenses">on GitHub</a> for you to clone and fork.</p> + +</section> +<section class="section"> +<header><h1 id="h_3" class="toc">Organization and Writing Style</h1></header> +<figure style="float:right;"><img src="/img/pictures/books/rails3way/flick.jpg" /><figcaption>Yes, it’s a long book. But you don’t<br/>have to read it from start to finish!</figcaption></figure> +<p><em>The Rails 3 Way</em> is a book for Rails professionals. If you don’t know Ruby or if you never heard of Ruby on Rails, this book is <em>not</em> for you. It won’t teach you what <span class="caps">MVC</span> is, it won’t waste time on explaining <em>convention over configuration</em>, it won’t even describe the structure of a Rails app! If you’re newcomer to Rails… well, that’s what <a href="http://ruby.railstutorial.org/">The Rails Tutorial</a> is for.</p> +<p>To be honest, I’m with Obie on this. If this book had been beginner-friendly, it would have been even longer than the previous edition, and probably more boring. Instead, by assuming that the reader has been already initiated to the world of Ruby and Rails, the author can dive into the framework straight away. Moreover, chapters are not ordered by difficulty: they don’t need to be, they need to be ordered in a way that makes sense for a Rails developer.</p> +<p>Once again, this book includes personal sidebars used to voice the opinion of one of the co-authors or Rails gurus: there are plenty of “<em>Yehuda</em> says”, “<em>Xavier</em> says”, “<em>Durran</em> says”, and so on. Nothing new there, it’s just a nice way to provide the reader with authoritative opinions on some matters.</p> +<p>As I progressed through the book, I started noticing how Obie anticipated my questions and doubts: I found this to be a remarkable feature of this book, and an excellent way to make the readers feel they are on the same page with the author. If something should not be done because it may cause you problems, the author won’t hold back. See page 214, “Extra Columns on <strong>has_and_belongs_to_many</strong> Join Tables”, for example: it’s a cool feature, but it can cause all sort of annoyances, and the bottom line is: use <strong>has_many :through</strong> instead, if you need extra columns on join tables.</p> + +</section> +<section class="section"> +<header><h1 id="h_4" class="toc">Conclusion</h1></header> +<p><em>The Rails 3 Way</em> remains the <em>de facto</em> reference book for Rails. I was quite pleased to see that Obie improved it so much, compared to the first edition. Sure, it cannot be recommended to absolute beginners, but it’s not a big problem: if you’re new to Rails, all you have to do is browse around and read a few basic tutorials first.</p> +<p>What I really missed was a <em>What’s New</em> section, or something like that. The new stuff that was introduced in Ruby on Rails v3 is seamlessly blended with all the rest, which is great if you’re tackling the framework for the first time, but not so much when you already read tons of books on Rails 2.×. I would have tagged content specific to Rails 3 in some way at least, for example with labels on the side of each page. Or maybe have a short introductory chapter covering the new features, and directions on where to find them in the book.</p> +<p>Overall, <em>The Rails 3 Way</em> is a great book, and if you plan on using Rails 3 for your next web site, it deserves a special place on your desk.</p> + +</section> + +</section>
@@ -0,0 +1,85 @@
+----- +title: "Thoughts on Firefox 3 and Opera 9.5" +content-type: article +timestamp: 1213327080 +tags: "browsers|review|firefox|opera" +----- +<p>Opera 9.5 is out, Firefox 3 too (more or less), so, which browser are you going to use today?<br /> +This new generatio of browsers offers plenty of new, innovative features and improvements over the past, in both cases:</p> +<ul> + <li>You can finally use Firefox because it finally doesn’t eat up all your <span class="caps">RAM</span></li> + <li>You can finally use Opera because it is finally “understand” ajaxified web sites like Gmail</li> +</ul> +<p>Amazingly, these two releases have a lot in common…<img src="/files/opera_sharp.png" alt="" /></p> +<h3>A fresh new look</h3> +<p>Both browsers needed a new look, let’s be honest. Both didn’t really care that much in the past releases, but suddenly things changed: the new Opera theme, Sharp, looks truly awesome on any platform, and the Mozilla development team came up with <span class="caps">FOUR</span> different themes, aiming to camouflage Firefox as a native application for all the major OSes.</p> +<p>Personally, while I was really impressed by the new Opera theme, I was not too sure of the new direction taken for Firefox UI. Why a different theme for each different major operating system? In particular the XP theme could have been better, in my opinion. <br /> +Not a huge deal though, as both browsers are skinnable (although I’m not gonna alter the way Opera looks!).<br /> +<br /> +<br /> +<br /></p> +<h3>The speed of light</h3> +<p>My main complaint about Firefox 2 was its slow startup and generally slowness due to several memory leaks. This eventually led me to “switch to Opera” for my daily browsing a while ago.</p> +<p>Firefox 3, luckily, is much faster and more memory-efficient than its predecessor, as the development team squashed most of the memory-related bugs. The introduction of jemalloc as the new memory allocator and also the new cycle collectory improved things quite a bit.</p> +<p>Opera 9.5 still “feels” faster at startup and also the <span class="caps">GUI</span> is a bit more snappy than Firefox’s, but Firefox 3 is <em>terribly</em> fast at interpreting Javascript.<br /> +As a result, sites like Gmail or Google Reader are rendered almost instantaneously in Firefox 3, while Opera 9.5 is slightly slower.</p> +<h3>Address Bar 2.0</h3> +<p>Both browser struggled to add more features to the Address Bar: Opera now supports search-as-you-type history search and Firefox… well, let’s just say that Firefox Developers built something truly wonderful with the new “AwesomeBar”: it is now possible to search history items <em>tagged pages and bookmarks</em>.</p> +<p><img src="/files/awesomebar.png" alt="" /></p> +<p>But there’s more: you’ll notice that the AwesomeBar does an outstanding job in retrieving results ordered by relevance, frequency and access time, and it also allows the user to restrict search to specific page types.</p> +<p>As an Opera user, I must admit that Firefox is really way ahead with this. Unfortunately, Opera toolbar still is not that smart.</p> +<h3>Sync’ing up</h3> +<p>Opera offers the ability to sync your bookmarks, notes, custom toolbars and Quick Dial pages via the new <a href="http://link.opera.com/">Link</a> service.<br /> +It looks awfully similar to <a href="https://services.mozilla.com/">Mozilla Weave</a>, an experimental extension aiming to synchronize the whole Firefox profile.</p> +<p>Currently, Weave allows users to sync bookmarks, history and passwords in a very secure way: this truly preserve the “state” of your browser across multiple computers.</p> +<p>On the other hand, Opera is virtually on <em>any device or platform</em>, so Link can be handy if you use Opera as your mobile browser. Unfortunately, we’ll still have to wait a bit for a proper Mozilla competitor for mobile device, but it already <a href="http://arstechnica.com/news.ars/post/20080409-first-look-mozilla-fennec-targets-handheld-browser-market.html">looks very promising</a>.</p> +<h3>Be nice, be open</h3> +<p>Firefox is <span class="caps">THE</span> (only?) open source browser. Opera has always been (and always will be?) a proprietary, freeware, <em>closed source</em> app.<br /> +Some people are really bothered by this, especially Linux users of course: it really comes down to how religious you are about the software running on your machine.</p> +<p>Being open source, Firefox is more hacker-friendly: this release, especially, also delivers an awful lot of useful APIs which can be used to develop extensions in a much easier way. This of course isn’t an option for Opera.</p> +<p>From a different point of view, Opera actually implements <a href="http://dev.opera.com/articles/view/opera-9-5-the-next-generation-of-web-s/">more ‘next generation’ open standards</a> than Firefox, and it scores more than Firefox in the <a href="http://acid3.acidtests.org/">Acid 3</a> test.</p> +<p>Does this matter in the end? Well, yes and no: it’s nice that Opera struggles to be way ahead than others in this, but in the end, until Firefox 3 (and Internet Explorer too!) catch up, web developers won’t dare using any of the new features.</p> +<p>Do you have a web site optimized for Opera? No, probably not: you’re normally aiming at Firefox or IE (sigh!) when it comes to development, because they are still more widely used.</p> +<p>All this is very sad, but still terribly true. But at least, other browsers will feel more compelled to catch up.</p> +<h3>Usability is the key</h3> +<p>Personally, I prefer Opera’s philosophy of “everything in tabs” rather than having many dialog boxes floating around for downloads, history, bookmarks etc.</p> +<p>From this point of view, Firefox is arguably not as usable as Opera. Before Firefox <span class="caps">GUI</span> purists start screaming insults, I repeat that this is entirely up to your taste.</p> +<p>While Opera’s <span class="caps">GUI</span> didn’t undergo any major change, Firefox 3 definitely did:</p> +<ul> + <li>A new <em>Library</em> now holds all your bookmarks, history and feeds</li> + <li>The new Downloads dialog supports (finally!) download resumes, even across different browsing sessions</li> + <li>It is very easy to access information on web site, especially with the new identity button (that’s where the web site favicon is displayed).</li> +</ul> +<p><img src="/files/places.png" alt="" /></p> +<p>Another trend introduced by Firefox 3 is the ability to <em>search-as-you-type</em> in all these dialogs and in many others (like the Cookie Manager). This makes finding information much easier.</p> +<p>Opera didn’t need any major overhaul, but I would have liked to have cookies and preference in tabs, too (they are pretty much the only dialog boxes left).</p> +<h3>To extend or not extend?</h3> +<p>This is always the eternal dilemma when it comes to Firefox vs. other browsers.</p> +<p>The major strength of Firefox 3, like <em>all</em> its predecessors, lies in the hundreds of free extensions which can be installed by user to enhance browser’s functionality. You can turn Firefox into almost anything you like.</p> +<p>Because I’m trying to be browser-independent, I like to keep my Firefox extensions to a bare minimum:</p> +<ul> + <li>Weave</li> + <li>Operator</li> + <li>Web Developer</li> + <li>Del.icio.us</li> + <li>Firebug</li> + <li>StumbleUpon</li> + <li>ColorZilla</li> + <li>Secure Login</li> +</ul> +<p>Opera fans always boost that Opera can do pretty much everything you’d ever need <em>out of the box</em>, so you don’t need any extension at all. Part of this is true (does Firefox have an e-mail client? No. Does Firefox offer a Wand out-of-the-box? No., …read <a href="http://my.opera.com/Rijk/blog/2006/07/04/top-150-popular-firefox-extensions-and-opera">this</a> for the details)</p> +<p>In the past release, Opera added widget to let developers unleash their creativity. And I must admit that they are quite cute and work well enough (a few of them at least).</p> +<p>One of the most frequently-missed feature was a Firebug equivalent for Opera. Luckily, this was fixed in this release with the introduction of <a href="http://www.opera.com/products/dragonfly/">DragonFly</a>, which is already bundled with the browser itself. <br /> +I’m pretty sure this will make <em>a lot</em> of web developers very happy.</p> +<p><img src="/files/opera_dragonfly.png" alt="" /></p> +<p>Personally, I still miss an equivalent of the del.icio.us extension in Opera, but I guess I can survive with just a bookmarklet, if needed.</p> +<h3>Choose your winner</h3> +<p>It is really up to you. I don’t have a true favorite as for now: Firefox 3 is very, very tempting because of three things:</p> +<ul> + <li>The AwesomeBar: I feel I’m already becoming addicted to it</li> + <li>Some of its extensions, including Weave</li> + <li>The performance improvements, especially concerning memory management and the rendering of pages making extensive use of Javascript</li> +</ul> +<p>Opera, on the other hand, charmes me for what it can do out-of-the-box: it’s fast, sleek, has almost everything I need with no configuration at all. It’s ideal if you use multiple systems, including mobile devices.</p> +<p>Definitely I will not abandon any of the two as for now: I’ll probaly use Firefox for a more enhanced browsing experience, but I’ll definitely use Opera when I’m in a hurry to look something up for example, and every time my fiancée is using Firefox on the same account.</p> +<p>There’s no absolute winner in the Browser Wars yet: just different browsers for different occasions!</p>
@@ -0,0 +1,38 @@
+----- +title: "To REST or not to REST?" +content-type: article +timestamp: 1190605680 +tags: "rails" +----- +<p>Lately I’ve been reading quite a bit about Rails’ <span class="caps">REST</span> approach, and to be totally honest I’m not 100% convinced it can always be a good idea. The purpose of this post is to re-evaluate the situation, and ask other people their opinion on the matter.</p> +<p>Let’s see…</p> +<h3>Key Benefits</h3> +<p>To cut a long story short, from my understanding <span class="caps">REST</span> can be a good thing because:</p> +<ul> + <li>It introduces the powerful concept of “resources”, which is independent from the presentation. This basically means that you can have your “resources” represented in <span class="caps">HTML</span>. <span class="caps">XML</span> etc. etc. “for free”. If you are making an extensive use of web services, this is truly a bless.</li> + <li>Each <span class="caps">CRUD</span> action is carried out using a different <span class="caps">HTTP</span> command (get, post, put and delete). At present, because most browsers don’t understand <span class="caps">PUT</span> or <span class="caps">DELETE</span> requested, this is somehow simulated by Rails.</li> + <li>By thinking and modeling your application in terms of resources, everything should always be “in the right place”.</li> +</ul> +<h3>Downsides?</h3> +<p>Let’s now try to summarize what made me think more carefully this approach…</p> +<ul> + <li>While I really like Rails’ convention over configuration philosophy, this sounds a tiny bit too extreme for me. In the end it could be good, but it requires developers to completely re-think the way they develop their application in order to be 100% RESTful.</li> + <li>URLs aren’t that pretty anymore. While <a href="http://themysteriouswaysofruby.blogspot.com/2007/04/pretty-restful-urls-in-rails.html">someone</a> suggested a way to improve the way RESTful URLs look, that sounds like extra hassle to me. It’s subjective, I know, but I really don’t like using IDs in the url… I’d rather go for an univocal code any day (check out this site… I don’t even like dates in my blog).</li> + <li>Sometimes, it may take quite a bit to figure out how to model some functionality using resources. While it is straightforward when you want to perform <span class="caps">CRUD</span> operations, modeling a search action or authentication may be a bit tricky and may also feel a bit forced. Again, maybe it’s just me.</li> + <li>It may be a bit too early to take full advantage of this approach. <span class="caps">PUT</span> and <span class="caps">DELETE</span> are simulated, and this doesn’t sound right — agreed, that’s the only way for now, but it still sounds like a forceful workaround. Browsers are not RESTful (yet)!</li> + <li>All resources are virtually accessible by a <span class="caps">URL</span>. I’m not a security expert, but this scares me a bit.</li> +</ul> +<p>Here are some posts which made me think a bit:</p> +<ul> + <li><a href="http://gilesbowkett.blogspot.com/2007/04/looking-for-good-argument-against-rest.html">Looking for a good argument against <span class="caps">REST</span></a></li> +</ul> +<ul> + <li><a href="http://www.ipbabble.com/2007/07/restful_myths.html">RESTful Myths: Unraveling the Confusion</a></li> +</ul> +<ul> + <li><a href="http://blog.livollmers.net/index.php/2007/06/26/why-cant-web-apps-be-rest-ful/">Why Can’t Web Apps Be <span class="caps">REST</span>-ful?</a></li> +</ul> +<p>The bottom line is: is <span class="caps">REST</span> really worth the hassle? Especially for small and simple applications like a blog, is it really worthwhile to coerce myself to adopt a RESTful approach when I could accomplish exactly the same things with much less hassle?</p> +<p>In other words, is <span class="caps">REST</span> really the answer to everything or in <em>some cases</em> it is just <em>not necessary</em>?</p> +<p>And also (OK, this may sound harsh and impolite): does it really make sense to push people to adopt a RESTful approach no matter what? Sometimes someone may get the feeling that Rails is all about <span class="caps">REST</span> now. Is that true, or is there still room for <del>freedom</del> other views?</p> +<p>Looking forward to hear your comments, but please be nice and civilized!</p>
@@ -0,0 +1,18 @@
+----- +title: "Too many cooks... take #2" +content-type: article +timestamp: 1188708060 +tags: "cakephp|writing|rant" +----- +<p>Today I was not going to post on my blog. I have the flu, I don’t feel very well so I started reading some news feeds on Google Reader. That lasted for about half an hour, so I decided to check my old Netvibes account where I kept other feeds, including a bunch of CakePHP-related blogs.</p> +<p>Two posts immediately grab my attention:</p> +<p><a href="http://cakebaker.42dh.com/2007/08/27/i-dont-trust-cakephp-or-what-should-you-say-in-public/">I don’t trust CakePHP or what should you say in public?</a></p> +<p>and</p> +<p><a href="http://cakebaker.42dh.com/2007/08/28/bye-bye-cakephp-team/">Bye, bye, CakePHP team</a></p> +<p>They’re both from Daniel’s cakebaker blog, the one I used to read when I was really into Cake.</p> +<p>To cut a long story short, apparently Daniel said something wrong and he got “what he deserves” for speaking out. Naughty boy!</p> +<p>That’s because it might have put “CakePHP and the team in a bad light”. Well, I don’t know about that, but definitely now it IS in a bad light!</p> +<p>I even found a bunch of comment which link this incident to what happened to me a few months ago:</p> +<p><em>“I said it when Fabio/H3rald left, and I’ll say it again—I think the biggest weakness of Cake is that the core dev team is quick to cut people out who don’t hold to every dogma the devs do. Fundamentalism, ego, call it what you will, a great community will only count for so long if the core keeps alienating its biggest allies. (not that they’re neccessarily alienating you, dho. I truly hope you stick around. You do seem to be taking it well.)”</em></p> +<p><sup>^</sup> Whoever you are, you’re 100% right.</p> +<p>A core asset (at least for his writings) of the CakePHP team is gone, and another (big) chunk of CakePHP PR strategy is out of play, now, it seems. While I’m sorry the CakePHP community has to get the butt-end of it as always, I’m certainly happy for Daniel who, like me, will now have a chance to look around and experiment with new things. That’s right man, Rails or Django are the way to go.</p>
@@ -0,0 +1,18 @@
+----- +title: "Too many cooks... take #3" +content-type: article +timestamp: 1256408819 +tags: "cakephp|rant|php|li3" +----- +<p>Like <a href="http://www.h3rald.com/articles/too-many-cooks-take-2/">its predecessor</a>, this is another rant about the (end of the) <a href="http://www.cakephp.org">CakePHP framework</a>. Not that I particularly enjoy writing about the misfortune of others, but after reading <a href="http://bakery.cakephp.org/articles/view/the-cake-is-still-rising">this official announcement</a> I felt compelled to post.</p> +<p>It has been two years since my last post on this subject and yes, the cake is still rising, but at what price? Will it still taste sweet now that two of its main ingredients are not part of it anymore? As <a href="http://cakebaker.42dh.com/2009/10/23/the-end-of-cakephp/">Daniel</a> puts it, <em>probably the best thing to do now is to drink tea and to wait until the dust settles…</em></p> +<p>As far as I’m concerned, what really matters is that Garrett Woodworth (former CakePHP Project Manager) and Nate Abele (former CakePHP Lead Developer) are <em>gone</em>. They realized they had enough Nuts over the years and they decided to switch to a more <a href="http://irc.cakephp.org/logs/link/1110092#message1110102">Lithium-rich</a> diet. More helthy and depression-proof, too!</p> +<p>Stupid metaphors and painful jokes aside, this is probably the best piece of news the CakePHP community received in a long time: the birth of <em>a fork of the CakePHP framework</em>, more precisely of the so-called Cake3 branch.</p> +<p><em>Cake3</em>? I didn’t keep up-to-date with the buzz, so I didn’t know anything about this until today, when I decided to finally start catching up.</p> +<blockquote> +<p>“Cake 3.0, on the other hand, is pretty different from the existing core code in a few notable ways. Mainly, it’s been re-written from the ground up for <span class="caps">PHP</span> 5.3.”</p> +</blockquote> +<p style="padding-right:6em;">from <a href="http://debuggable.com/posts/Cake_3_interview_with_Nate_Abele:4a665a5e-5bfc-4e42-96ee-6d284834cda3">Cake 3 interview with Nate Abele</a>, debuggable.com</p> +<p>Of course, in these three years of my full immersion in the Ruby language, I almost completely forgot about <span class="caps">PHP</span> too. <span class="caps">PHP</span> 5.3 means namespace and closures, i.e. the Rubyist’s daily bread. A more modular CakePHP, properly object-oriented, with an ActiveRecord-like <span class="caps">API</span> for models (finally!) is definitely worth a look, especially if it’s Nut-free as well.</p> +<p>The new framework will be called <strong>Lithium</strong> (sounds more professional already), and it’s due to launch next monday, here: <a href="http://li3.rad-dev.org/">http://li3.rad-dev.org/</a> (at the time of writing, this link is password-protected).</p> +<p>Personally, I am <em>very</em> excited about this new project. It should have happened three years ago, really, but there’s no point in being greedy: the time has finally come. I would like to (pre-)thank Garrett and Nate for their (upcoming) amazing work, I’ll definitely keep a closer eye on it.</p>
@@ -0,0 +1,139 @@
+----- +title: "Tweaking Windows Explorer" +content-type: article +subtitle: "How to make the default Windows file manager suck less" +popular: true +timestamp: 1183109280 +tags: "review|software" +----- +<p>If you asked me what file manager I used on Windows, up to a month ago I’d have answered something like: <a href="http://www.primitus.us/a43/">A43</a> or <a href="http://www.cubicreality.com/">CubicExplorer</a>, for sure <em>anything but Windows Explorer</em>.<br /> +Well, it turns out that I had to change my mind after all…</p> +<p>There’s a multitude of “Explorer Replacements” which aim to be more feature-rich, more user-friendly, less bloated than Bill’s favorite, and I indeed tried quite a few of them, mostly the free ones of course.</p> +<p>The only problem is that whenever I got close to choose “the one”, I noticed that there always was one or two features missing somewhere, which were present in another and vice versa. Additionally, to be totally honest, the level of integration with Windows and other applications was never <em>complete</em>.</p> +<p>These are a few stupid, silly things which tend to be lacking or at least are not 100% functioning — not in all the file managers I tried, but at least in some:</p> +<ul> + <li>Environment variables integration — Alternative file managers normally are not able to parse Windows environment variables.</li> + <li>Icon overlays — Some file managers can’t render Subversion’s icon overlays.</li> + <li>Strange context menus — Sometimes right-clicking on a file or a directory may not open the standard Explorer context menu</li> + <li>Open Folder — Third-party application allowing you to open a folder, will always open it through Windows Explorer</li> + <li>auto complete address bar….</li> + <li>Special Folders — Some special folders (e.g. Control Panel) are now accessible using alternative file manager, but others may not (e.g. Network Connections). At any rate, typing “Control Panel” will <em>not</em> open the Control Panel in an alternative file manager.</li> +</ul> +<p><em>What about trying to “patch” Windows Explorer instead of using another program altogether?</em></p> +<p>I never really thought of that until <a href="http://lifehacker.com/software/featured-windows-download/add-tabs-to-windows-explorer-with-qt-tabbar-260926.php">LifeHacker</a> featured the QT TabBar shell extension by <a href="http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html">Quizo</a>. That was my epiphany: I immediately thought I was going to “patch” Windows Explorer using a few really useful (and free, of course) Windows Shell Extensions.</p> +<p>Here’s <em>my</em> file manager now:</p> +<p><img src="/files/tweaked_explorer.jpg" alt="" /></p> +<p>Yes, it is Windows Explorer, with just a few addons:</p> +<ul> + <li><a href="http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html#qttab">QT TabBar</a> (Requires .<span class="caps">NET</span> framework 2.0)</li> + <li><a href="http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html#qtadr">QT Address Bar</a> (Requires .<span class="caps">NET</span> framework 2.0)</li> + <li><a href="http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html#qtt2">QU ToolBar 2</a> (Requires .<span class="caps">NET</span> framework 2.0)</li> + <li><a href="http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html"><span class="caps">NTFS</span> Link Shell Extension</a></li> + <li><a href="http://www.lopesoft.com/en/fmtools/info.html">FileMenu Tools</a></li> +</ul> +<h3>Explorer Tabs</h3> +<p>For an instant gratification, download and install QT TabBar first, logoff and logon again for the changes to take effect (or install all the other extensions first, otherwise you’ll have to re-logon after installing nearly each one). As the name implies, this will add tabs to Windows Explorer, just the way you expect them to be: clean, stable and really smart.</p> +<p><img src="/files/tabs.gif" alt="" /></p> +<p>After the installation, right-click anywhere in an existing window toolbar and enable the <strong>QT Tab Standard Buttons</strong> and voilá, a the tab bar will appear. You can click CTRL+N a few times to open new tabs. Take your time to position QT TabBar wherever is more convenient for you.</p> +<p>Whenever you’re ready, take your time to configure QT TabBar (right-click on it and choose “Options”) General options:</p> +<p><img src="/files/tabbar_general.gif" alt="" /></p> +<p>…and at least the Window options:</p> +<p><img src="/files/tabbar_window.gif" alt="" /></p> +<p><strong>How do you create tabs?</strong> There are many different ways to do it, choose whatever is best for you:</p> +<ul> + <li>CTRL+N keyboard shortcut</li> + <li>Drag and drop a folder or a shortcut on QT TabBar – Even from other applications!</li> + <li>Right click on an tab and choose “Clone this”</li> +</ul> +<p>Other features? Sure, there’s plenty more, e.g.:</p> +<ul> + <li><strong>Single Instance</strong> — By enabling the appropriate option, you’ll only have a single instance of Windows explorer, everything will be opened in new tabs. A must.</li> + <li><strong>Rearrange tabs</strong> — Tabs can be rearranged by dragging and dropping.</li> + <li><strong>Lock/Unlock</strong> — Lock a tab (right-click > Lock) to avoid closing it accidentally.</li> + <li><strong>Folder Memo</strong> — It is possible to set a “folder memo” for a specific folder, which can be visualized and edited afterwards (right-click > Memo for this folder).</li> + <li><strong>Folder Password</strong> — Password-protect a particular tab (right-click > Set Password…).</li> + <li><strong>Picture Preview</strong> — Preview image files simply by hovering on them with the mouse.</li> + <li><strong>Groups</strong> — It is possible to group more tabs together by adding them to groups (right-click > Add to Group > [Group Name]) which can be configured via the QT TabBar option dialog.</li> + <li><strong>Keyboard Shortcuts</strong> — Open the folder in which you unzipped QT TabBar and run QTShortcutKeyEditor.exe and enable as many as you like (they are too many to list hered), the possibilities are endless.</li> +</ul> +<h3>Customizing Toolbars</h3> +<p>Windows Explorer allows users to choose the buttons which will be displayed in the <strong>Standar Buttons</strong> toolbar. To do so, proceed as follows:</p> +<ol> + <li>If necessary, enable the Standard Buttons toolbar by selecting <em>View > Toolbars > Standard Buttons</em> from the Explorer menu.</li> + <li>Select <em>View > Toolbars > Customize</em> from the Explorer menu.</li> + <li>Choose the buttons you want to display.</li> +</ol> +<p>I picked the following:</p> +<p><img src="/files/standard_explorer_buttons.gif" alt="" /></p> +<p>i.e.: Up , Refresh, Search, Folders, History, Favorites, Undo, Delete, Cut, Copy, Paste, Properties, View, Map Drive and Disconnect. It’s really up to you what you choose really.<br /> +I placed this toolbar right under the menu, on the top-left side.</p> +<p style="float:right;"><img src="/files/tabbar_buttons.gif" alt="" /></p> +<p>Right next to it I placed some of the buttons available for <strong>QT TabBar</strong>:</p> +<ul> + <li>Groups — Load an existing tab group (configurable in the options)</li> + <li>Recently Closed — open recently-closed tabs</li> + <li>Applications — run custom applications (configurable in the options)</li> + <li>Close — Close current tab</li> + <li>Lock — Lock current tab</li> + <li>Topmost — Force explorer to stay on top of other windows</li> +</ul> +<p>Then I decided to enable the <strong>Links</strong> Explorer toolbar, which can be configured to display bookarks and shortcuts placed in the Favorites > Links folder. As shortcuts, I dragged each drive available on my system and voilà: poor man’s Drive Toolbar! Unfortunately, unlike in the <em>proper</em> drive toolbars offered by alternative file managers, all drive shortcuts will remain there (with a red question mark) even when the drive is not connected to the system. I can live with that.</p> +<p style="float:right;"><img src="/files/toolbar2.gif" alt="" /></p> +<p>Right to the address bar (we’re going to substitute it in the next section though), I decided to place <strong>QT ToolBar 2</strong>, which is available – hear, hear – after installing the QT ToolVar 2 extension.<br /> +At first it looks like a search filter toolbar, and yes, it can be used for this <em>as well</em>. Just type .jpg in the search box and it will show only the <span class="caps">JPG</span> files in the current folder. Easy enough.</p> +<p>Of course there’s (much) more to it. A <em>search helper</em> is provided (click the little arrow pointing downwards at the end of the toolbar and select Search Helper) to perform more complex searches:</p> +<p><img src="/files/toolbar2_search.gif" alt="" /></p> +<p>Additionally, ToolBar allows you to display a handy copy file name/path button and up to two buttons to access two applications you use frequently. To configure them select <em>Option</em> from the dropdown menu accessible at the end of the toolbar, and configure your applications like this:</p> +<p><img src="/files/toolbar2_apps.gif" alt="" /></p> +<p>I choose the Command Prompt and the A43 file manager. The cool thing is that you can enable the “arguments for user application” and the the file path (if a file is selected) or the folder path will be passed automatically to the application, so my A43 file manage will open in the current folder. If you want to have more than two custom applications at your fingertips, all you have to do is to configure as many as you like in the Options tab of QT TabBar, and they’ll become available via the Applications button.</p> +<p>Two little utilities can also be used through QT TabBar 2, <em>MD5</em>, which instantly calculates the MD5 checksum of the selected file:</p> +<p><img src="/files/toolbar2_md5.gif" alt="" /></p> +<p>and <em>Folder Analyze</em>, which finds out the size of the current folder and how it is distributed across folders and files. A bit like a little <a href="windirstat.info">WinDirStat</a> but for the current folder only. It looks like this:</p> +<p><img src="/files/toolbar2_folder.gif" alt="" /></p> +<h3>Navigation Improvements</h3> +<p>Is there any way to make navigation through folder easier in Windows Explorer? Yep, more than one:</p> +<h4>Breadcrumbs</h4> +<p>Vista offers a <a href="http://www.zdnet.com.au/insight/software/soa/Investigating-Windows-Vista-s-breadcrumb-bar-/0,139023769,139218189,00.htm">Breadcrumb Bar</a>, and XP doesn’t. Quizo fixed it of course, with his <strong>QT Address Bar</strong>, which brings breadcrumbs navigation to Windows XP. Use it as an Explorer address bar replacement. By default breadcrumbs are displayed:</p> +<p><img src="/files/address-bar1.gif" alt="" /></p> +<p>…allowing you to navigate through your folder three within submenus without changing the current directory. Clicking it toggles the standard path:</p> +<p><img src="/files/address-bar2.gif" alt="" /></p> +<p>A nice thing to have.</p> +<h4>Take back your Favorites!</h4> +<p>I don’t use IE, I use Firefox, Opera, even Safari sometimes, but not IE unless I’m forced to do so. Hence I <em>hardly ever</em> used Internet Explorer’s Favorites, an I almost forgot about it, until I decided to begin tweaking Windows Explorer, and I (re-)discovered that Favorites are shared between the two… What’s that got to do with anything? Well, you can simply put Favorites to good use and use them to store <em>only</em> Windows Explorer folders.</p> +<p>Simple and effective: click the Favorites button in the toolbar, they’ll be loaded in a sidebar on the left, then simply drag a folder to QT TabBar and you’ll get there.</p> +<h4>Wormholes, anyone?</h4> +<p>Finally, <strong><span class="caps">NTFS</span> Link Shell Extension</strong> does something totally different altogether: it can be used to create hardlinks (a bit like Unix symlinks, but for <span class="caps">NTFS</span> drives only) junctions and symbolic links (Vista only). For an explanation of what each object is, refer to the explanations provided on the <a href="http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html#hardlinks">shell extension homepage</a>. For our purposes, we’ll just use junctions now:</p> +<p>bq.“[…] Junctions are wormholes in the tree structure of a directed graph. By browsing a Junction a maybe far distant location in the file system is made available. Modifying, Creating, Renaming and Deleting files within a junction tree structure operates at the junction target, i.e. if you delete a file in a Junction it is deleted at the original location. […]”</p> +<p>Consider the following example.</p> +<p style="float:right;"><img src="/files/junction.gif" alt="" /></p> +<p>1) Create a directory called “Gateway” in C:\. <br /> +2) With <span class="caps">NTFS</span> Link Shell Extension installed, right-click a directory “far, far away”, on any of your <span class="caps">NTFS</span> drives, for example D:\My\Very\Long\Path\MyDirectory, and select “Pick Link Source”.<br /> +3) Go back in your Gateway folder, right-click and select “Drop As > Junction”. A folder with a small chain overlay will be created.<br /> +4) You will now be able to access all the contents in D:\My\Very\Long\Path\MyDirectory directly from C:\Gateway.</p> +<p><strong>Important</strong> – No, creating a shortcut is <em>not</em> the same thing. the path C:\Gateway\MyDirectory is an actual <em>valid path</em>, i.e. you can use it to attach files to emails, and going up one level in C:\Gateway\MyDirectory will take you simply to C:\Gateway\, <em>not</em> to D:\My\Very\Long\Path\.</p> +<p>Both at home and at work, I use a “Gateway” folder containing junctions leading to commonly-accessed directories, and this speeds up navigations a lot. Just remember to delete junctions “properly” (right-click > Delete Junction), not like an ordinary directory… ;-)</p> +<h3>De-cluttering the Context Menus</h3> +<p>Right now our Windows Explorer interface has been streamlined, folder navigation is easier, but there’s still room for improvement. Where? Well, in the contex menus of course. <br /> +I spent ages trying to figure out an easy way to remove unnecessary or unwanted entries from the menus which appears on a right-click. Yes, they can be removed by fiddling with the Windows Registry, but that’s not exactly user-friendly, is it? Now there’s an easy alternative: <strong>FileMenu Tools</strong>.</p> +<p>This nifty little utility allows you to remove rubbish from your context menus and add new entries as well. Entries are grouped by file type and can be enabled or disabled with a single click. Unfortunately I was not able to disabe some of them, probably due to restriction on my computer at work.</p> +<p style="float:right;"><img src="/files/filemenu_tools.gif" alt="" /></p> +<p>Once the rubbish is gone, perhaps you can even evaluate the possibility to add some more. I chose to enable just <em>Attributes</em> and <em>Advanced Renamer</em>, but there are many more predefined commands (each with its own pretty icon) you can choose from:</p> +<ul> + <li>Synchronize Folders</li> + <li>Extended Delete</li> + <li>Find And Replace</li> + <li>Delete Locked File</li> + <li>Delete and no move to Recycle Bin</li> + <li>Change Icon</li> + <li>Run with Arguments</li> + <li>Command Line From Here</li> + <li>Split/Join File</li> + <li>Copy/Move to…</li> + <li>Copy Name/PAth/Content</li> + <li>Change Time</li> + <li>Register/Unregister <span class="caps">DLL</span></li> + <li>Create new folder</li> +</ul> +<p>Something missing? Well, you can always create your own entry, if you like!</p> +<h3>Conclusion</h3> +<p>I think that’s enough for you to give Windows Explorer another shot — or at least it was enough for me anyway. Be aware that there are and hopefully there will be more Windows shell extensions able to do neat things: <a href="http://www.7-zip.org/">7-Zip</a>, <a href="http://notepad-plus.sourceforge.net/uk/site.htm">Notepad++</a> and <a href="http://cream.sourceforge.net/">Cream</a> all add very useful context menus, and don’t forget <a href="http://tortoisesvn.tigris.org/">TortoiseSVN</a>, if you are a Windows-based developers (yes, they do exist).</p>
@@ -0,0 +1,7 @@
+----- +title: "Zero-cost website promotion - Part I" +content-type: article +timestamp: 1134133707 +tags: "internet|webdevelopment" +----- +Everybody from magazines to canned pasta sellers wants a website to promote their business, but you need to promote your site before you promote your products or services through it. In Part 1 of this article, I will explain some of the basics of promoting a website, and show you how to implement a cost-free strategy to get the search engine placement you need to promote your website.<strong>The Necessity of Website Promotion</strong><br />As the World Wide Web kept growing over the years, people soon realised that keeping updated <em>list</em>s of all the available pages on the Net was an impossible and pointless job. It became necessary to develop a new way to easily find and access the massive amount of content on the Web, and that is when <em>search engines</em> became a reality.<br /><br />Everyone should know the <em>legend</em> of the two lads from Stanford University who became multi-millionaires in a few years after developing and successfully marketing their easy-to-use, ultra-powerful search engine called Google. <br /><br />After it became clear that the Web was going to be (quite literally) dominated by search engines, IT professionals started developing strategies to cause their site to appearon the first page of search results. These strategies and techniques soon became known as <em>Search Engine Optimizations</em> (SEO). Call it ?science?, ?magic? or simply a way to make money, SEO is a business, and so-called "SEO experts" often <em>do</em> get a lot of cash just to take care of your website.<br /><br />Whether you like it or not, any website must be promoted in order to get visitors; some sort of marketing strategy <em>is</em> necessary if you want to stand out from the crowd, and even if you just want someone to find your page.<br /><br />Now let's assume that you don't want to spend a penny marketing your site, but you still want to be known and noticed among either competitors or friends and get some visitors to your new, exceptional (for you) and extremely innovative (to your eyes) website. Is it possible to do this, or do you need to shell out some money to an SEO expert'<br /><br />I think that a zero-cost marketing strategy does exist, and I tried to put one into practice myself. I achieved relatively good results without spending anything but time. Patience and dedication are the keys to success in a zero-cost method: if you don't have those two qualities, you either need to start working on them or find a job to make money to spend for a <em>proper</em> (but sometimes risky) marketing campaign.<br /><br /><br /><strong>1. Plan your website</strong><br /><br />Don't skip this part, because it's the most important step in the whole process: you have to come up with some clever ideas to make your site look unique and original!<br /><br /><em>2. Have a look around</em><br /><br /><em>?Well, if I were able to do <strong>that</strong> I wouldn't need to promote my site at all, and I wouldn't be reading this article?</em><br /><br />This is true to some extent - coming up with an original idea nowadays is difficult if not impossible. <em>Offering something different</em> or <em>presenting it in a different way</em> can be done, as can offering the same thing <em>but better</em> (that's what Google did). Once again, you need patience, dedication, and the belief that it is worth it.<br /> <br />The best way to decide if it's worth creating a new website is to study your potential competitors, i.e. any other website that deals with the same stuff. Study the way these websites are created, list their weaknesses and strengths, and after comparing a few of them, start thinking about what <em>you</em> can do to create a <em>better</em> website.<br /><br />Then, <em>objectively</em> evaluate your idea and decide if you have the ability to do it, what risks are involved, and how long it would take to create. After all this brainstorming, if you still want to spend time on your project, you can go on; if not, <em>this is your last chance to stop and think about something completely different</em> - it doesn't mean you?re a coward, it just means you are capable of understanding your limits, which is something many people have trouble doing these days.<br /><br /><em>4. Create an identity</em><br />Now it's time to think about a proper <em>identity</em> for your site, and this involves the following steps:<br /><br /><ul><br /><li>Define your objectives and purposes</li><br /><li>Define the audience of your site</li><br /><li>Think about a good name for your site</li><br /><li>Create some graphics and a logo</li><br /><li>Create slogans and descriptions </li><br /></ul><br /><br />Of course, defining the objectives and purposes of your site is the most important thing on that entire list. Again, you have to be honest with yourself and not be afraid to admit your limitations: if you find you can't do something you?d like to, try to imagine your site without that particular feature, and if there?s still a hope of success, go ahead. If not, try looking at your ideas from a different point of view.<br /><br />A different point of view could mean a different audience: if you see that there?s absolutely no chance of selling canned pasta to Italians,you might have better luck with the English. Audience is extremely important: it's a factor which influences both the content and the design of your site, as well as the features offered. Doing something the way <em>you</em> like it doesn't mean other people are going to like it, and for people to want to come to your site, they have to like it!<br /><br />Now, think about a good name for your site: it must be easy to remember, be somehow related to what you do, and most importantly, the domain must be available. Check on that before you commit to a particular name, or you might be in for a shock. There are plenty of places on the Net that can tell you if a particular domain with a particular TLD is available[1].<br /><br />Next, I think you should come up with a logo, though some people say it's premature to think about graphics at this stage. It's probably true, but I find that having a visual representation of your goal can often be a morale booster that will help you to keep going. <br /><br />The last step is a slogan or a description. This is an important part of creating your site's identity. It should be honest, yet promising: it has to stick in the consumer's mind. How you do this is entirely up to you, and it can also be the most time-consuming step of the process - it will probably take you a few tries to come up with something you really like.<br /><br /><br /><em>4. Features, Services and Architecture</em><br /><br />Now it's time to do something less idealistic and slightly more practical: you should start listing the features and services your site will offer, and start thinking about how to present them. Don't plan on doing too many things or implementing unnecesssary features on your site - having a forum, a newsletter <em>and</em> a blog on CannedPasta.com could be a bit too much, whereas having a gallery and a Testimonials area could be a much better use of resources. In short, add features because they can be useful, not because it's trendy to offer them.<br /><br />After you decide on your features, you have to think about the <em>architecture</em> of your site, or <em>how</em> people are going to find the services you offer on your site. Menus and navigation bars are a must, but keep them relatively uncluttered and easy to use: you must be able to grab the visitor?s attention and communicate what you do in the first 10 seconds; then, if the visitor remains on the site for another minute or two, he must be convinced by then that you are selling the best canned pasta he?s ever tried and cheaper than anyone else. This is accomplished mainly by putting links to relevant pages in at the right places: if a visitor can't find your content, he?ll never be persuaded to try your product!<br /><br /><br /><strong>Site Development</strong><br /><br />It's now time to start coding your site. Whether you do it yourself or have someone do it for you, the web developer should follow some important guidelines when coding the site. I will only touch on them very briefly.<br /><br /><em>Make it simple</em> -don't do something unless you have to. The layout of your site must be decided according to the site?s purpose - that's why movie sites have a lot of graphics, Flash[3] and other eye-catching things, and why forums and news sites don't need that stuff at all. Show your products and describe them with the minimum amount of content; people who want to buy canned pasta normally don't want to know the history of it: they just want to see if it's worth buying it. <br /><br /><em>Cleaner is better</em> -the code of your site should be clean,support web standards, and contain no errors. Although code validation[4] is not critical to acquire good placement in search engines, it can help to a certain extent. <br /><br />For the sake of code clarity, I normally recommend not using deprecated tags or and its attributes. Avoiding using tags attributes altogether, if possible: CSS[5] was created for a reason, and that's for making your life easier. A discussion of CSS is beyond the scope of this article, but I have included a reference link[6] for you to learn more about it.<br /><br /><em>Fundamentals of an SEO Strategy</em><br /><ul><br /><li>Always provide an ALT attribute for your image </li>(crawlers[7] will process that instead of the image)<br /><li>Always provide a relevant TITLE attribute to your links</li><br /><li>Always use properly formatted h1, h2, etc. tags for your titles.</li><br /><li>The tag in the of every page should be different each time and either reflect the page?s content or provide a proper title for it. It should also be one of the first tags on the page.</li><br /><li>Always remember to provide an icon for your site </li>(favicon[8])<br /><li>Don't forget a valid robots.txt</li>[9] file in the root directory of your site.<br /></ul><br /><br /><em> Meta Tags</em><br />Although Google doesn't seem to care about them any more, you should always include some meta tags in every page, particularly for keywords and the site description. Ideally, these should vary according to the page's content, contain not more than 10-15 relevant keywords, and give a brief yet complete description of the page.<br /><br /><em> Search Engine Friendly (SEF) URLs</em><br />Even though all the major search engines can process dynamic URLs correctly, a URL like <a href="http://www.cannedpasta/products/spaghetti.php">http://www.cannedpasta/products/spaghetti.php</a> is much better than something like <a href="http://www.cannedpasta.com/index.php?a=show&cat=1256&id=234.">http://www.cannedpasta.com/index.php?a=show&cat=1256&id=234.</a> The first one will not only be crawled by ANY search engine with no problems at all, but more importantly, users will remember it. If your site is dynamic (as are the majority of websites these days) and your pages are therefore automatically generated, you could try using mod_rewrite to transform complicated URLs into their simplified but more effective counterparts[10].<br /><br />That's all for this part of the article. Next time I?ll discuss the final phases of your site?s zero-cost promotion campaign: website promotion, website maintenance, and what to do once you get things going.<br /><br /><br /><strong>Notes, related links, and further reading:</strong><br /><br />[1]You can do so here, for example: <a href="http://www.mydomain.com">http://www.mydomain.com</a><br />[2]The domain is fictitious and used as an example<br />[3]Macromedia Flash: <a href="http://www.macromedia.com/software/flash/">http://www.macromedia.com/software/flash/</a><br />[4]W3C validator: <a href="http://validator.w3.org/ ">http://validator.w3.org/ </a><br />[5]CSS: <a href="http://www.w3.org/Style/CSS/ ">http://www.w3.org/Style/CSS/ </a><br />[6]Official CSS tutorial: <a href="http://www.w3schools.com/css/default.asp ">http://www.w3schools.com/css/default.asp </a><br />[7]Web crawler, Wikipedia page: <a href="http://en.wikipedia.org/wiki/Web_crawler">http://en.wikipedia.org/wiki/Web_crawler</a><br />[8]Favicon, Wikipedia page: <a href="http://en.wikipedia.org/wiki/Favicon">http://en.wikipedia.org/wiki/Favicon</a><br />[9]Robot.txt tutorial: <a href="http://www.searchengineworld.com/robots/robots_tutorial.htm">http://www.searchengineworld.com/robots/robots_tutorial.htm</a><br />[10]Apache mod_rewrite: <a href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html ">http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html </a><br />
@@ -0,0 +1,7 @@
+----- +title: "What is AJAX?" +content-type: article +timestamp: 1137047408 +tags: "internet|web20|ajax|webdevelopment" +----- +<em>"The Web is changing. The 30-year-old terminal-like technology it was originally is gradually giving way to new ways of doing things. The power of AJAX allows for rich user interaction without the trouble that has bugged traditional web applications."</em>This is the introduction to the script.aculo.us[1] website, and regardless your opinion about the so-called AJAX <em>programming technique</em>, they are fundamentally right: the web is changing. AJAX is at least one way to do things in a different way, enhancing - although arguably, in some cases - users' browsing experience.<br /><br /><strong>Application examples</strong><br />What is AJAX then? Nothing too new, but not too old either. I'd define AJAX as the <em>rebirth of Javascript</em>, for example, it's not only Javascript we're talking about. The acronym stands for Asynchronous Javascript And XML and it already gives an idea of the fundamentals of the technology: something build on <em>asynchronous server requests and responses </em>. This may be clear to coders, but the best way to try explaining this to everyday internet users is showing some famous applications:<br /><br /><em>Gmail[2]</em>: The first example? The most famous? The most used? Perhaps. Google aimed to impress both end users and geeks with it's free, long awaited email service. What's so unusual in this webmail application?<br /><ul><br /><li>An innovative and intuitive interface, more similar to a desktop application than a traditional webpage.</li><br /><li>Rich formatting through an effective, easy-to-use editor.</li><br /><li>Online spell checker.</li><br /><li>Instant </li>(one click) email tagging, labels, contact groups etc.<br /><li>Email auto save.</li><br /></ul><br /><br /><em>Kiko[3]</em>: This is a very neat online calendar, free to use and customizable. Features include:<br /><ul><br /><li>Multiple user/contacts/events administration.</li><br /><li>Personalization of the right click menu </li>(it overrides your browser's default behavior).<br /><li>Drag and drop events across the calendar.</li><br /><li>Easily switch through different calendar views without any page refresh.</li><br />- </ul><br /><br /><em>Writely[4]</em>: An online word processor. Although it is not as advanced as its desktop's cousins, this is a truly admirable effort to port a desktop application to the web. The service is free for now and it allows users to create, edit, share and export text documents. Among its features there are:<br /><ul><br /><li>High degree of document formatting - modify font size, style, colors, alignment, insert images and links etc.</li><br /><li>Enhanced exporting options - it can create html documents, Word documents, zip files etc.</li><br /><li>Online spell-checker.</li><br /><li>Ability to easily share and publish your work.</li><br /></ul><br /><br />This list can continue[5], as new "AJAX-powered" applications are created nearly every day. <br /><fieldset><blockquote>AJAX provides the web developer the ability to create web applications that look and feel like applications that run on the desktop. It does this by solving the 'partial update' problem. AJAX makes it possible for a web application to request data from the server (usually in response to a button click or other java script 'event') and change a part of the current page to reflect the result of the query. Prior to AJAX, if the web developer wanted to retrieve any information from the server a full page update was required. This may mean a full page load when the user clicks a help icon, spell checks a document or performs a drag and drop operation that changes data on the server. AJAX solves this problem and opens the door for a host of AJAX-powered web applications<br />There were some unconventional solutions to this problem prior to AJAX. I have ignored them for the purpose of this article as they were hacky or relied on a feature in a particular browser </blockquote></fieldset><br /><br /><strong>How does it work?</strong><br />Ajax[7] is fundamentally the union of various technologies - not something new by itself:<br /><ul><br /><li> </li>(X)HTML, CSS, etc., used as presentation layer and format the information retrieved by the server: nothing special here.<br /><li>The XMLHttpRequest</li>[8] object, which allows data exchange between client and server "silently", in an asynchronous way, without the need of refreshing and reloading a whole web page<br /><li>The Dom Object Model </li>(DOM)[9], a Object-Oriented way to represent and access HTML or XML.<br /><li>XML and XSLT used for data interchange and manipulation</li><br /></ul><br /><br />The magic is undoubtedly in the XMLHttpRequest object, originally invented by Microsoft as an ActiveX object and then made available as a standard Javascript class by Mozilla-based browsers. At least something which <em>seems</em> to be compatible with <em>most</em> browsers then.<br /><br />A necessary step in any Javascript script using the XMLHttpRequest object would be something like:<br /><br /><code><br />if (window.XMLHttpRequest) { // Mozilla, Safari, ...<br /> http_request = new XMLHttpRequest();<br />} else if (window.ActiveXObject) { // IE<br /> http_request = new ActiveXObject("Microsoft.XMLHTTP");<br />}<br /></code><br /><br />In order to have an http_request object to use later on which is independent from the browser type.<br /><br />Let's now examine an example of elementary Ajax application[10]. The following code is broken into different parts and commented, the uncommented source and a demo is available on degraeve.com[10].<br /><br />For this simple example we need to create a simple server-side script which will be called by our Ajax application. The script can be in any language, this one is in Perl.<br /><br /><code><br />#!/usr/bin/perl -w<br />use CGI;<br /><br />$query = new CGI;<br /><br />$secretword = $query-param('w');<br />$remotehost = $query-remote_host();<br /><br />print $query-header;<br />print "<p>The secret word is <b>$secretword</b> and your IP is <b>$remotehost</b>.<br /> </code><br /><br />Basically it creates a new CGI object named $query, used to access the parameter which will be passed by our submission form, "w", and get the user's IP address.<br />The script will then print a the page header and a phrase containing the word entered in our form and the user's IP address.<br /><br />And here's the simple Ajax application:<br /><br /><code><br /><html><br /><head><br /><title>Simple Ajax Example</title><br /><br /><script language="Javascript"><br /></code><br /><br /><em>Comment: Just the first HTML tags of the page, and the beginning of the script</em><br /><br /><code><br />function xmlhttpPost(strURL) {<br /> var xmlHttpReq = false;<br /> var self = this;<br /> // Mozilla/Safari<br /> if (window.XMLHttpRequest) {<br /> self.xmlHttpReq = new XMLHttpRequest();<br /> }<br /> // IE<br /> else if (window.ActiveXObject) {<br /> self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");<br /> }<br /></code><br /><br /><em>Comment: First of all we create a function named xmlhttpPost, which takes the parameter strURL, i.e. the web address of the script we created earlier. In the first part of the function, we create the HTMLHttpRequest object independently of the browser, which in this case is called self.xmlHttpReq. </em><br /><code><br /> <br /> self.xmlHttpReq.open('POST', strURL, true);<br /><br /> self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');<br /></code><br /><br /><em>Comment: with the method open we initialize the connection, specifying that we want to send a POST request to the page "strURL" and that the connection is asynchronous (true). The third parameter is actually true by default and could have been omitted in this case. <br />As we want to use the POST method, we need to set the content-type header for our request, in this case "application/x-www-form-urlencoded". </em><br /><br /><code><br /> self.xmlHttpReq.onreadystatechange = function() {<br /> if (self.xmlHttpReq.readyState == 4) {<br /> updatepage(self.xmlHttpReq.responseText);<br /> }<br /> }<br /> self.xmlHttpReq.send(getquerystring());<br />}<br /></code><br /><br /><br /><em>Comment: This is the crucial part, as we need to send the request and also define the behavior of our application once the response is received. The request is sent using the "send" method, which sends a properly formatted query string (see below), but before that we need to setup a "listener" to monitor what happens to our request.<br />The readyState variables is updated according to the status of the connection, and can assume the following values:<br /><ul><br /><li>0 - Uninitialised</li><br /><li>1 - Loading</li><br /><li>2 - Loaded</li><br /><li>3 - Interactive</li><br /><li>4 - Completed</li><br /></ul><br /><br />We want to update our page once we are sure that the connection with the script has been established, therefore we setup a listener (onreadystatechange) to update the page via the function update page defined below only if the connection's state is "Completed" (self.xmlHttpReq.readyState == 4). The self.xmlHttpReq.responseText variable which is sent to the update page function contains the response generated by our CGI script. </em><br /><br /><code><br />function getquerystring() {<br /> var form = document.forms['f1'];<br /> var word = form.word.value;<br /> qstr = 'w=' + escape(word); // NOTE: no '?' before querystring<br /> return qstr;<br />}<br /></code><br /><br /><em>Comment: This function simply formats the parameter sent to the script as "w=typedword" where "typedword" is the word typed in the form of our application. </em><br /><br /><code><br />function updatepage(str){<br /> document.getElementById("result").innerHTML = str;<br />}<br /></code><br /><br /><em>Comment: Finally, this function inserts the response we got from the CGI script into an HTML element with id=result, through the method innerHTML. </em><br /><br /><code><br /></script><br /></head><br /><br /><form name="f1"><br /> <pword: <input name="word" type="text" ><br /> <input value="Go" type="button" >onclick='JavaScript:xmlhttpPost("/cgi-bin/simple-ajax-example.cgi")'</p><br /> <div id="result"></div><br /></form><br /></body><br /></html><br /></code><br /><br /><em>Comment: This is the final part of the application, which defines our form containing a text field and a submit button. Note that our xmlhttpPost function is called once the button is clicked, through the on click attribute. </em><br /><br />That's it. <br />The first reaction after reading so far would probably be "Ajax is not easy at all", well, I never said it was. To create a simple application which just prints something on the screen we had to go through a lot of code, and we could have done something similar with much less hassle. This was just a trivial example, very different from those large scale applications available online.<br /><br />There's good news though, there are plenty of frameworks and toolkits which makes life easier for developers interested in using this programming technique. There are in particular various libraries built upon the Prototype[11] framework such as the already mentioned Script.aculo.us[1] and Rico[12] for examples, and various frameworks which integrate Ajax in some way in any server side language, like Ruby on Rails[13] or CakePHP[14], for example.<br /><br /><strong>Conclusion</strong><br />Undoubtedly Ajax can be used to create really powerful and innovative applications, but it shouldn't be abused or mis-used. There are a few things to keep in mind, when developing an Ajax application:<br /><ul><br /><li>It requires Javascript to be enable on the client browser, and the developer obviously can't control that</li><br /><li>The application may not compatible with all browsers, in particular older browsers will definitely not be able to access it.</li><br /><li>It can be too much of a surprise for the user who never used an Ajax application before: it may experience delays in responses, some basic functionalities like the "Back" button might not work as expected etc.</li><br /></ul><br /><br />There are actually many more things to consider [15] before even start planning to develop an application, and can basically be summarized as follows:<br /><br /><em>"Do not use Ajax in your web application unless you know what you're doing"</em><br /><br />Luckily, there are a lot of articles and resources[16] out there, waiting for you.<br /><br /><br /><strong>Notes and Resources</strong><br /><small><br />[1] Script.aculo.us AJAX toolkit: <a href="http://www.script.aculo.us ">http://www.script.aculo.us </a><br />[2] Gmail - Google's online webmail: <a href="http://mail.google.com/mail">http://mail.google.com/mail</a><br />[3] Kiko - Online calendar: <a href="http://www.kiko.com/">http://www.kiko.com/</a><br />[4] Writely - Online word processor: <a href="http://www.writely.com/">http://www.writely.com/</a> <br />[5] A venture forth Blog - Top 10 Ajax applications: <a href="http://www.aventureforth.com/?p=13">http://www.aventureforth.com/?p=13</a><br />[6] HTTP - Webopedia entry: <a href="http://www.webopedia.com/TERM/H/HTTP.html">http://www.webopedia.com/TERM/H/HTTP.html</a><br />[7] AJAX - Wikipedia Page: <a href="http://en.wikipedia.org/wiki/AJAX">http://en.wikipedia.org/wiki/AJAX</a><br />[8] XMLHTTP Wikipedia Page: <a href="http://en.wikipedia.org/wiki/XMLHTTP">http://en.wikipedia.org/wiki/XMLHTTP</a><br /><br />[9] Dom Object Model - Wikipedia Page: <a href="http://en.wikipedia.org/wiki/Document_Object_Model">http://en.wikipedia.org/wiki/Document_Object_Model</a><br />[10] degraeve.com - Simple Ajax Example: <a href="http://www.degraeve.com/reference/simple-ajax-example.php">http://www.degraeve.com/reference/simple-ajax-example.php</a><br />[11] Prototype Javascript Framework: <a href="http://prototype.conio.net/">http://prototype.conio.net/</a><br />[12] Rico open-source Javascript library: <a href="http://openrico.org/">http://openrico.org/</a><br />[13] Ruby on Rails: <a href="http://www.rubyonrails.org">http://www.rubyonrails.org</a><br />[14] CakePHP framework: <a href="http://www.cakephp.org">http://www.cakephp.org</a><br />[15] Alex Bosworth's Weblog: Ajax Mistakes: <a href="http://sourcelabs.com/ajb/archives/2005/05/ajax_mistakes.html">http://sourcelabs.com/ajb/archives/2005/05/ajax_mistakes.html</a><br />[16] AjaxMatters.com: <a href="http://www.ajaxmatters.com/r/welcome">http://www.ajaxmatters.com/r/welcome</a><br /></small><br />
@@ -0,0 +1,72 @@
+----- +title: "Where does your Ruby code live?" +content-type: article +timestamp: 1226147640 +tags: "ruby|programming" +----- +<p>Back when I wrote my <a href="/articles/10-reasons-to-learn-ruby">10 reasons to learn Ruby</a> article, I mentioned <a href="http://www.rubygems.org/">RubyGems</a> in <em>Reason #1</em> as one of they key features of the Ruby programming languages.<br /> +Indeed, gems make getting Ruby programs as easy as typing <code>gem install <something></code> from the command line. When you want to distribute something new in Ruby, there’s no need to give people download links, zip files or setup programs, just <a href="http://adam.blog.heroku.com/past/2008/11/2/pony_the_express_way_to_send_email_from_ruby/">tell them to get the gem</a>. That’s perfectly normal, and extremely cool.</p> +<p>Gems are normally stored on <a href="http://rubyforge.org">RubyForge</a>, so all you have to do is uploading your gem there, and it will be available to the rest of the universe. It’s a nice feeling. I remember when I first uploaded <a href="http://rubyforge.org/projects/rawline/">RawLine</a> and then tried <code>gem install rawline</code> just for the hell of it: it downloaded and installed the gem, as expected.</p> +<p>Back in the day, if you wanted to find something written in Ruby, all you had to do is search through RubyForge, and you’d eventually find it, with a bit of luck.</p> +<h3>Can we just have git, please?</h3> +<p>RubyForge had, until recently, one major problem: it only allowed <span class="caps">CVS</span> and <span class="caps">SVN</span> repositories, and you had to make your choice when creating the project, once and for all. So when the cool guys at <a href="http://github.com/">GitHub</a> rolled out their <em>social code hosting</em> web site, most of the <em>créme de la créme</em> of RubyForge flocked there in mass migration: <a href="http://github.com/rails/rails/tree/master">Rails</a>, <a href="http://github.com/wycats/merb-core/tree/master">Merb</a>, <a href="http://github.com/dchelimsky/rspec/tree/master">RSpec</a>… you name it.<br /> +Once the big guys made the switch, a lot jumped on the GitHub bandwagon of course. Result: we have a lot of projects still on RubyForge, but quite a few (and important ones) on GitHub.</p> +<p>Why did people move there? Well, at first it was because they wanted a sleek-looking git host, and RubyForge didn’t offer git at the time. But <a href="http://drnicwilliams.com/2008/04/08/git-for-rubyforge-accounts/">git is now available on RubyForge</a>, so why don’t people use it? <br /> +I’d like to know how many people use git on RubyForge. Apparently you can have your old <span class="caps">SVN</span> repository manually migrated to git, if you ask nicely (and RubyForge people are very helpful always, anyway). Still, I don’t think many people use git there, and hardly anyone (if any) moved back from GitHub.</p> +<p>What’s so special about this new “social code hosting” site then? I guess just a few key features:</p> +<ul> + <li>Fast and reliable git hosting</li> + <li>The ability to “watch” other people’s repositories and interact with them “the git way”, also by forking.</li> + <li>There’s a whole new and fresh community feeling to it: you can follow people, message them, etc.</li> + <li>The interface is much more neat than RubyForge’s (OK, granted, it doesn’t take much)</li> + <li>Really cool stats and graphs</li> + <li>A basic, but functional, wiki</li> +</ul> +<h3>…oh, and bug tracking, too!</h3> +<p>GitHub has no bug tracking features. It tracks an awful lot of stuff about your repositories and people working on them, but “batteries are sold separately”. You can get batteries <a href="http://lighthouseapp.com/">here</a>, for example. Apparently, GitHub and LightHouse are seamlessly <a href="http://github.com/blog/41-service-integration">integrated</a>.</p> +<p>So now you can sign up to two cool brand new web applications with neat interfaces instead of sticking with the old-looking RubyForge (which comes with “batteries included”, after all). <br /> +Personally <strong>I’m very confused now</strong>. Fortunately I don’t have any extremely cool projects used by thousands of people, so jumping from one source code hosting solution from another is not really an issue for me, but I imagine it would be for others! Correct?</p> +<p>So, as far as I know, if you are a Rubyist, here’s what you can do:</p> +<ol> + <li>Stick with RubyForge: it’s not so bad after all.</li> + <li>Embrace GitHub (and Lighthouse): it’s extremely nice to use. Some people are not <a href="http://groovie.org/2008/05/06/most-bizarre-git-service-and-other-stupid-rails-powered-businesses">too convinced</a> that this is the best choice though.</li> + <li>Go for something in between, like <a href="http://www.assembla.com/">Assembla</a>, which actually has an <em>impressive</em> list of features and is powered by Rails too, so you’ll feel at home. <a href="http://code.google.com/hosting/">Google Code</a> used to be another common choice, but sadly they don’t offer git yet.</li> + <li>Do-it-yourself, maybe using something like <a href="http://gitorious.org/">Gitorius</a> and some open source bug tracking/project management solution.</li> +</ol> +<p>So… what choice did <em>you</em> make or are you planning to make?</p> +<h3>Moving houses</h3> +<p>There’s one simple issue to consider when moving your code to a new place: what happens to your <em>old</em> place. If have a relatively popular project, a lot of people may have bookmarked your project page on RubyForge, or the RubyForge subdomain which you may have used as the “home page” for your project (in truth, most of the ones who moved away still use it).</p> +<p>You may setup a redirection to the new home page or put a notice saying that the project moved somewhere else and point visitors to GitHub and LightHouse, or to another web site, if you wish. When <a href="http://weblog.rubyonrails.org/2008/4/11/rails-premieres-on-github">Rails moved to GitHub</a>, that wasn’t much of a problem as Rails has its own web site.</p> +<p>What may become a problem is your old repository. In Rails’ case, they left the old <span class="caps">SVN</span> repository available on sourceforge for a while and then removed it altogether. Other project owners have just abandoned their old repositories, occasionally resulting in <a href="http://webby.rubyforge.org/">someone else</a> deciding to leave a note as their <a href="http://webby.rubyforge.org/svn/trunk/">last <span class="caps">SVN</span> commit</a>.</p> +<p>These solutions all work (you eventually drive people to the new home of your project), but it’s not very nice, that’s all. What happens if someone comes up with something cooler than GitHub? In all honesty, you may end up moving house over and over again.</p> +<h3>Don’t forget the gems!</h3> +<p>One thing I liked about RubyForge, as I wrote at the beginning, was that if you uploaded a gem there, it was immediately available to everyone typing <code>gem install <something></code>. <br /> +Luckily, <a href="http://gems.github.com/list.html">GitHub supports gems, too</a>! We’re saved. The page they put up is <a href="http://gems.github.com/">utterly awful</a>, but it does the job: you can have your gems hosted on GitHub.</p> +<p>Good! So surely I can get Rails now, right? Yup: <code>gem install rails</code> will get the latest version of Rails for you, straight from GitHub.</p> +<p>Actually, no. It doesn’t seem to work that way: sure you can get the latest rails in that way, but it will actually be downloaded from <em>RubyForge</em> (go check the <a href="http://rubyforge.org/frs/?group_id=307&release_id=27493">downloads</a>, you’ll see it there). <br /> +So even if technically you got Rails, you got it from RubyForge. If you want to get gem from GitHub, you have to add it as gem source first (that’s an <em>una tantum</em> operation, luckily): <code>gem sources -a http://gems.github.com</code>.</p> +<p>So, yes, you can move to GitHub and you’ll also get gem support: but please <em>remind the users</em> that they have to add GitHub as gem source. Or, better, you should always remember to upload your latest gems to GitHub <em>and to RubyForge as well</em>.</p> +<h3>The present</h3> +<p>To sum up:</p> +<ul> + <li>If you want, you can stay on RubyForge. It has git, it has gems, it’s probably not nearly as prettier than competitors and is not as social, but it works.</li> + <li>You can opt for GitHub+LightHouse, have a slick interface, plenty of features and your project will be scattered in 2 different places + your home page, and you’ll also have to keep uploading your gems to RubyForge.</li> + <li>At this point, you may even go for something completely different, like Assembla or your own setup, but still upload your gems to RubyForge.</li> +</ul> +<p>The obvious solutions at this point would be that the folks who craft rubygems (the gem which makes the gems, to be clear) add GitHub as default source. Sure as hell when that happens other people will want that too (hey, I’ll have gems.h3rald.com setup by then!). Is this the future? I hope not.</p> +<h3>The future?</h3> +<p>You know there’s a domain called <a href="http://www.rubygems.org/">www.rubygems.org</a>? It’s where the gem <em>manuals</em> are! <br /> +As much as I love documentation, there’s nothing wrong in moving all those documents and books to something like <em>docs.rubygems.org</em>, right? <br /> +Then they could make RubyGems.org the <em>only</em> official gem server and tell people they should upload their gems there if they want to distribute them efficiently (after manual approval, if necessary, like there is on RubyForge).</p> +<p>In this way:</p> +<ul> + <li>You wouldn’t have to upload stuff to RubyForge anymore</li> + <li>You could have the clever folks at GitHub to create a simple script to automate the upload</li> + <li>You’d have virtually <em>all</em> the gems in one place</li> + <li>You’d put a good domain name (currently almost forgotten) to good use</li> +</ul> +<p>While they are at it, <strong>the clever folks at RubyGems.org could also setup a <em>proper</em> gem directory with a <em>proper</em> search</strong>. I’m sure there would be plenty of people who could help, too!</p> +<p>It’s not impossible, right? They said that making Rails/Ruby/RSpec documentation more accurate and accessible was impossible, but now there’s <a href="http://apidock.com/">APIdock</a>, correct?</p> +<p>Personally I’d like it to be a collaborative effort of the Ruby community (like ruby-lang.org), rather than one private company showing off, but I think everyone will be happy as long as it works.<br /> +I’m sure people will contribute, I would try at least (after finishing the Italian translation of ruby-lang.org, that is… erhm, well, that’s another story…).</p> +<p>Thoughts?</p>
@@ -0,0 +1,78 @@
+----- +title: "Getting things done... in Wonderland!" +content-type: article +subtitle: "Why Wunderlist is the only Todo List I'll ever need" +timestamp: 1312063673 +tags: "productivity|review|software" +pdf: true +----- + + <section class="section"> +<p>I don’t remember the exact day when I started using a todo list in a serious way. It definitely happened at work, but I can’t remember when exactly. The point is that, once I started working (and getting paid for what I love doing – writing), I slowly turned into a real <em>productivity freak</em>.</p> +<p>I write <em>everything</em> down. My colleagues know that if I say that I’ll do something <em>right now</em> but I don’t do it within five minutes, they have to assume that I forgot about it altogether and they’d better send me an email.</p> +<p>I am not a paper person. Never been one. When I got a job which consisted in working on the computer for eight hours a day, I started looking for todo list programs. That turned into an endless quest: I tried X for a few weeks, then I discovered that Y was better, used it for months, then moved onto Z, and so on.</p> + + + <section class="section"> +<header><h1 id="h_1" class="toc">What's wrong with 90% of digital todo lists</h1></header> +<p>Over the past five years, I must have tried dozens of different digital todo lists, and every single one of them had something wrong with it. Here are the most common flaws I encountered in many applications:</p> +<ul> + <li><strong>Too many fields</strong> – I don’t want to specify (or see, either) a due date, a start date, a completion date, priority, effort, risk, tags, categories, sections, flags, stars, projects, reminder, pre-reminder, recurrency, location, contexts, and finally the actual task. I just want to write down what I have to do. Maybe I want to flag it as <em>important</em>. Sometimes I may need to set a deadline with a reminder, but that starts getting complex already.</li> + <li><strong>Too few fields</strong> – On the other hand, just a title and a checkbox won’t do. I want some form of categorization and (optional) deadlines.</li> + <li><strong>Not cross-platform</strong> – I use Windows at work, Linux at home, my wife has a Mac. We both have iPhones, but someday I may get an Android device, too. There aren’t many todo lists out there that support more than two operating systems, nevermind mobile devices or web access!</li> + <li><strong>Too fiddly</strong> – See the first complaint, above. With too many fields almost always comes a complex interface. I don’t want to wait 17 clicks to save my task. I want to type in what I want to do, and press Enter. Is it too much to ask for?</li> + <li><strong>Made for a particular methodology</strong> – <span class="caps">GTD</span> is great and David Allen is the God of Productivity, but I don’t want to use @contexts or specify next actions because don’t believe in them, therefore I shouldn’t be forced to do so.</li> +</ul> +<p>90% of the digital todo list suck. Believe me. 10% – perhaps – don’t. Luckily, I just need <em>one</em>, and guess what: I found it!</p> + +</section> + + <section class="section"> +<header><h1 id="h_2" class="toc">Introducing Wunderlist: the quest is over!</h1></header> +<p><a href="http://www.6wunderkinder.com/wunderlist/">Wunderlist</a>, the List of Wonders, you can use it anywhere and at any time. It’s so awesome that… I should stop the ass-kissing right now, and get to the <em>facts</em>.</p> +<p>I discovered Wunderlist when my endless quest led me to the App Store. I think I must have installed nearly all the damn todo list apps, even the crappy ones. I didn’t fall in love with Wunderlist at first tap: it took a few install-uninstall cycles, but in the end I settled for it. Here’s why:</p> +<ul> + <li><strong>Free</strong> – Not that it matters that much, I would happily pay a few bucks for a <em>good</em> app. And yes, I did pay for a few todo lists that I dumped afterwards. Bummer.</li> + <li><strong>Cross-platform</strong> – iPhone, iPad, Android, Windows, OS X. And Linux? Not really, but who cares: the web app is fine and it probably plays well <a href="http://haiku-os.org/">Haiku</a> as well.</li> + <li><strong>Simple and Efficient</strong> – Two clicks to add a task to any list. No compulsory extra-fields, optional deadlines, unlimited lists. Got something important to do? Tap the star on the left of the task to move it to the top of your list and bookmark it.</li> + <li><strong>Amazing email integration</strong> – Create tasks via email, share tasks with others via email, get reminders via push… or email. They even email you if you have overdue tasks. Like… everyday! I was so happy when they implemented this feature that I nearly cried when I got the first few emails.</li> + <li><strong>Everything is sync’ed</strong> – On your iPhone, iPad, Android device, Windows PC, Mac, web, etc. It’s all there, always, everywhere.</li> +</ul> +<p>When I finally realized how awesome this app was, I started using it for chores, and as a shopping list. Then I figured it was good enough as a backlog for my open source projects and my web site, and then… Then my wife discovered it.</p> + +</section> + + <section class="section"> +<header><h1 id="h_3" class="toc">Why your wife shouldn't use it...</h1></header> +<p><img src="/img/pictures/wunderlist/wunderlist-list.png" style="float:right;margin-top:1em;" /></p> +<p>One of the relatively unusual features of Wunderlist is the possibiliy of sharing lists with others. All you have to do is click a button, specify one or more email address, and send invitations out. People will then signup for a free Wunderlist account and they’ll be able to access (as in read/write access) your list.</p> +<p>Because Roxanne, my wife, has an iPhone, she was the most obvious candidate to try out this collaborative feature. First I shared my <em>Shopping</em> list with her: we needed to make a list of things to get for a party, and that was fun. Wunderlist worked perfectly: we went around the supermarket and ticked things off the shared list, which updated in real-time!</p> +<p>All went great until I decided to share the infamous <em>Chores</em> list. You know the one: bills, fees, errands… I used to say things like “it’s on my list, honey, I’ll do it”, or even “Yes… I’ll add it to the <em>Chores</em>, just gimme a minute”. Little did I know that my beloved liked Wunderlist so much that she started using it frequenly, constantly updating the damn chores list with things like “Take the rubbish out” or “Collect the package from the post office”.</p> +<p>I realized she became a true Wunderlist ninja when I found a task called “Flowers for Roxanne!” – starred and with a deadline set to <em>two months ago!</em></p> + +</section> + + <section class="section"> +<header><h1 id="h_4" class="toc">My five work lists</h1></header> +<p>After months of trial, I decided to use Wunderlist at work as well. With caution, of course: I made sure not to write down any sensitive information in my tasks, because you never know. I started off with just one list, but it got crowded very quickly. I now use <em>five</em> lists for work only:</p> +<p><img src="/img/pictures/wunderlist/wunderlist-work.png" style="float:right;margin-top:1em;" /></p> +<ul> + <li><strong>Work [!]</strong> – This is the most active one, I use it for things to do <span class="caps">ASAP</span>. Starred tasks are urgent and important, and should be dealt with within the day. At work, that’s my default list.</li> + <li><strong>Work [~]</strong> – This is for things that in progress, for tasks I delegated to other people, for keeping track of emails waiting for a reply, etc. I tend to check it at least a couple of times per day (if something is really urgent gets moved to the first list).</li> + <li><strong>Work […]</strong> – This is for someday/maybes. Something that is most definitely not urgent, and not too important either. I normally review it once a week, except in the middle of August when I won’t be able to do anything because everyone will be on holiday… It will become my default list for a week or two, then.</li> + <li><strong>Work [CoP]</strong> – I also work as the coordinator of a Community of Practice, and I want to keep CoP-related stuff separate, so that I know where to look when I can allocate some CoP time during my day.</li> + <li><strong>Work [@boss]</strong> – This is a special list for my boss only. We email each other frequently, but rather then sending her long emails she can’t afford to read, I write down discussion topics in this list, which I’ll then load up at the following status meeting.</li> +</ul> +<p>The next step? Maybe sharing lists with my boss and collegues, who knows…</p> + +</section> + + <section class="section"> +<header><h1 id="h_5" class="toc">The bottom line</h1></header> +<p>Saying that Wunderlist is the <em>perfect</em> todo list for <em>everyone</em> would be pointless: there would always be people who wouldn’t agree with that. Wunderlist is not perfect, but close enough for me: it has most of the feature I need, and – most importantly – very little features I don’t need. In the end, this is what makes an app truly awesome.</p> +<p>I give it four stars out of five. Why not five? Because in this way <a href="http://www.6wunderkinder.com/">6Wunderkinder</a> can make Wunderlist <em>even a better product</em> by surprising its users with something they didn’t know they wanted. That’s what Steve Jobs does at every Keynote, isn’t it?</p> +<p><img src="/img/pictures/wunderlist/wunderlist-done.png" style="text-align:center;margin:auto;display:block;" /></p> + +</section> + +</section>
@@ -0,0 +1,49 @@
+----- +title: "Concatenative" +content-type: project +github: "concatenative" +docs: "http://concatenative.rubyforge.org" +home: "/concatenative/" +summary: "A Ruby DSL for concatenative programming. Although quite slow if compared to other concatenative languages like Factor, it implements all the most common concatenative combinator and makes it possible to use Ruby objects in a concatenative way." +inactive: true +version: "0.2.0" +----- +<p>Concatenative is a Ruby <acronym title="Domain-specific Language"><span class="caps">DSL</span></acronym> for concatenative programming. It is heavily inspired by <a href="http://www.latrobe.edu.au/philosophy/phimvt/joy.html">Joy</a>, a minimalist programming language by Manfred von Thun. Like Joy, Concatenative features:</p> +<ul> + <li>function composition, instead of function application</li> + <li>quotation, instead of abstraction</li> + <li>no formal parameters</li> + <li>no variable assignments</li> +</ul> +<p>Plus, it allows you to use Ruby objects and methods in a concatenative fashion.</p> +<div class="spacer-50"></div> +<h3>Installation</h3> +<p>The simplest method to install Concatenative is to install the gem:</p> +<p><code>gem install concatenative</code></p> +<h3>Usage</h3> +<p>Initialization:</p> +<div class='ruby'><pre><code>require 'concatentive'</code></pre></div><p>Execute a Concatenative program:</p> +<div class='ruby'><pre><code>concatenate( + 10, + [0, :==], + [1, :+], + [:dup, 1, :-], + [:*], + :linrec + )</code></pre></div><p>The program above returns the factorial of 10, computed using the linrec combinator. It is also possible to execute arrays directly and define concatenative programs as symbols.</p> +<div class='ruby'><pre><code>:factorial << [[0, :==], [:pop, 1], [:dup, 1, :- , :factorial, :*], :if] + [5, :factorial].execute</code></pre></div><p>The program above calculates the factorial of 5, using explicit recursion.</p> +<p>You can use all Ruby methods in Concatenative programs as well, making sure that the right number of arguments (and the method’s receiver) are retrieved from the stack correctly. For this to work, Concatenative must know the arity of the method in advance, so the following rules are applied:</p> +<ul> + <li>All operators have an arity of 1</li> + <li>All other method have an arity of 0</li> + <li>If a method has a different arity, you must specify it explicitly using the pipe (|) operator.</li> +</ul> +<p>Example:</p> +<div class='ruby'><pre><code>concatenate("Goodbye, World!", /Goodbye/, "Hello", :sub|2)</code></pre> +</div> +<p>The program above is equivalent to <code>"Goodbye, World!".sub(/Goodbye/, "Hello")</code>.</p> +<h3>Latest Updates</h3> +<ul><li><a href="/articles/concatenative-020/">Concatenative 0.2.0 released</a></li> + <li><a href="/articles/concatenative-programming-in-ruby/">Concatenative programming in Ruby</a> </li> +</ul>
@@ -0,0 +1,143 @@
+----- +title: "Glyph" +content-type: project +subtitle: "A Rapid Document Authoring Framework" +github: glyph +home: /glyph/ +summary: "A Rapid Document Authoring Framework written in Ruby that can be used to create and manage books and articles." +inactive: true +docs: /glyph/book/ +version: 0.5.3.1 +----- + +<p>Glyph is a <em>Rapid Document Authoring Framework</em>.</p> +<p>With Glyph, creating and maintaining any kind of document becomes as easy as… <em>programming</em>. Glyph enables you to minimize text duplication, focus on content rather than presentation, manage references seamlessly and automate tedious tasks through a simple but effective macro language, specifically geared towards customization and extensibility.</p> + +<h3>Main Features</h3> +<h4>Command-line Interface</h4> +<p>Glyph is 100% command line. Its interface resambles <a href="http://git-scm.com/">Git’s</a> for its simplicity and power (thanks to the <a href="http://github.com/davetron5000/gli">gli</a> gem). Here are some example commands:</p> +<ul> + <li><code>glyph init</code> — to initialize a new Glyph project in the current (empty) directory.</li> + <li><code>glyph add introduction.textile</code> — to create a new file called <em>introduction.textile</em>.</li> + <li><code>glyph compile</code> — to compile the current document into a single <span class="caps">HTML</span> file.</li> + <li><code>glyph compile --auto</code> — to keep recompiling the current document every time a file is changed.</li> + <li><code>glyph compile -f pdf</code> — to compile the current document into <span class="caps">HTML</span> and then transform it into <span class="caps">PDF</span>.</li> + <li><code>glyph compile readme.glyph</code> — to compile a <em>readme.glyph</em> located in the current directory into a single <span class="caps">HTML</span> file.</li> + <li><code>glyph outline -l 2</code> — Display the document outline, up to second-level headers.</li> + <li><code>glyph stats</code> — Display project statistics.</li> +</ul> + + +<h4>Minimalist Syntax</h4> +<p>Glyph syntax rules can be explained using Glyph itself:</p> + +<pre><code> +section[ + @title[Something about Glyph] + txt[ +You can use Glyph macros in conjunction +with _Textile_ or _Markdown_ to +produce HTML files effortlessly. + ] + p[Alternatively, you can just use em[Glyph itself] to generate HTML tags.] + section[ + @title[What about PDFs?] + @id[pdf] + p[ +Once you have a single, well-formatted HTML +file, converting it to PDF is +extremely easy with a free 3rd-party +renderer like =>[http://www.princexml.com|Prince] +or =>[http://code.google.com/p/wkhtmltopdf/|wkhtmltopdf]. + ] + ] +] +</code></pre> + +<p>The Glyph code above corresponds to the following HTML code:</p> + + +<pre><code> +<div class="section"> + <h2 id="h_10">Something about Glyph</h2> + <p> + You can use Glyph macros in conjunction with + <em>Textile</em> or <em>Markdown</em> to + produce HTML files effortlessly. + </p> + <p> + Alternatively, you can just use <em>Glyph itself</em> + to generate HTML tags. + </p> + <div class="section"> + <h3 id="pdf">What about PDFs?</h3> + <p> + Once you have a single, well-formatted HTML + file, converting it to PDF is + extremely easy with a free 3rd-party renderer + like <a href="http://www.princexml.com">Prince</a> + or <a href="http://code.google.com/p/wkhtmltopdf/">wkhtmltopdf</a>. + </p> + </div> +</div> +</code></pre> + +<h4>Content Reuse</h4> +<p>Finding yourself repeating the same sentence over an over? Glyph allows you to create snippets. Within snippets. Within other snippets (and so on, for a long long time…) as long as you don’t define a snippet by defining itself, which would be kinda nasty (and Glyph would complain!):</p> + +<pre><code> +snippet:[entities|snippets and macros] +snippet:[custom_definitions| + p[Glyph allows you to define your own &[entities].] +] +&[custom_definitions] +</code></pre> + +<p>...which results in:</p> + +<pre><code> +<p>Glyph allows you to define your own snippets and macros.</p> +</code></pre> + +<p>If yourself dreaming about <em>parametric</em> snippets, just create your own macros (see the <a href="http://github.com/h3rald/glyph/blob/master/book/text/changelog.glyph">source</a> of Glyph’s changelog, just to have an idea).</p> + +<h4>Automation of Common Tasks</h4> +<p>If you’re writing a book, you shouldn’t have to worry about pagination, headers, footers, table of contents, section numbering or similar. Glyph understands you, and will take care of everything for you (with a little help from CSS3, sometimes).</p> + +<h4>Reference Validation</h4> +<p>Feel free to add plenty of links, snippets, bookmarks, … if Glyph doesn’t find something, it will definitely complain. Broken references are a thing on the past, and you don’t need to worry about it.</p> + +<h4>Extreme Extensibility</h4> +<ul> + <li>You miss a <code>!!!</code> macro to format really, <em>really</em> important things? Create it. In under 3 seconds, in Ruby or Glyph itself. And yes, you can use special characters, too.</li> + <li>You want your own, very special special <code>glyph create --everything</code> command to create all <em>you</em> need in a Glyph project? You can do it. Using your own Rake tasks, too.</li> + <li>You want Glyph to output <span class="caps">ODF</span> files? You can do it, and you’ll be able to run <code>glyph generate -f odf</code>. This would probably require a little more time, but it’s trivial, from a technical point of view.</li> +</ul> + +<h4>Convention over Configuration</h4> +<p>Put your text files in <code>/text</code>, your images in <code>/images</code>, add custom macros in a <code>macro</code> folder within your <code>/lib</code> folder… you get the picture: Glyph has its special places.</p> +<p>Nonetheless, you also have 1 (<em>one</em>) configuration file to customize to your heart’s content (with smart defaults).</p> + +<h4>Free and Open Source</h4> +<p>Glyph is 100% Open Source Software, developed using the Ruby Programming Language and licensed under the very permissive terms of the <a href="http://www.opensource.org/licenses/mit-license.php"><span class="caps">MIT</span> License</a>.</p> +<p>If you have Ruby installed, just run <code>gem install glyph</code>. That’s all it takes.</p> + +<h3>Resources</h3> +<ul> + <li>Repository: <a href="http://www.github.com/h3rald/glyph/">http://www.github.com/h3rald/glyph/</a></li> + <li>Bug Tracking: <a href="http://www.github.com/h3rald/glyph/issues">http://www.github.com/h3rald/glyph/issues</a></li> + <li>Development Wiki <a href="http://wiki.github.com/h3rald/glyph">http://wiki.github.com/h3rald/glyph</a></li> + <li>RubyGem Download <a href="http://www.rubygems.org/gems/glyph">http://www.rubygems.org/gems/glyph</a></li> + <li>Book (<span class="caps">PDF</span>): <a href="http://github.com/downloads/h3rald/glyph/glyph.pdf">http://github.com/downloads/h3rald/glyph/glyph.pdf</a></li> + <li>Book (Web): <a href="http://www.h3rald.com/glyph/book/">http://www.h3rald.com/glyph/book/</a></li> + <li>Reference Documentation: <a href="http://rubydoc.info/gems/glyph/">http://rubydoc.info/gems/glyph/</a></li> + <li>User Group: <a href="http://groups.google.com/group/glyph-framework">http://groups.google.com/group/glyph-framework</a></li> +</ul> + +<h3>Latest Updates</h3> +<ul><li><a href="/articles/glyph-050-released/">Glyph 0.5.0 Released</a> </li> + <li><a href="/articles/glyph-040-released/">Glyph 0.4.0 Released</a></li> + <li><a href="/articles/glyph-030-released/">Glyph 0.3.0 Released</a></li> + <li><a href="/articles/glyph-020-released/">Glyph 0.2.0 Released</a></li> + <li><a href="/articles/introducing-glyph/">Introducing Glyph</a></li> +</ul>
@@ -0,0 +1,225 @@
+----- +title: "H3RALD Web Site" +content-type: project +subtitle: "The site you're looking at" +github: h3rald +active: true +home: /h3rald/ +summary: "This very web site, in its 9th incarnation. H3RALD.com has been operative since 2004 and through the years its backend changed from being pure vanilla HTML, to server-side PHP (Prado and CakePHP) to Ruby (Rails, Nanoc), and finally Nim (HastySite)." +version: 9.0.0 +----- +<p>The H3RALD.com domain was bought in March 2004 and since than has always been my home on the Internet. Through the years, a total of 9 major versions of this web site has been released, each featuring some change in the backend.</p> +<p>Currently, this site is fully static (minus a few AJAX calls) and is powered by my very own static site generator, HastySite (soon to be released) and by <a href="/litestore/">LiteStore</a> (for the archive search functionality).</p> +<h3>Major Releases</h3> + + +<div class="timeline"> + <div class="timeline-item"> + <div class="timeline-left"> + <div class="timeline-icon icon-lg"> + <i class="ent ent-flag"></i> + </div> + </div> + <div class="timeline-content"> + <div class="tile"> + <div class="tile-content"> + <p class="tile-subtitle"> + Version 9 (October 2017 – present) + </p> + <ul> + <li>Web Server: <a href="http://wiki.nginx.org/Main">Nginx</a></li> + <li>Database: <a href="/litestore/">LiteStore</a> (for the archive search functionality only)</li> + <li>Framework/<span class="caps">CMS</span>/Other: HastySite (static site generator)</li> + <li>Programming Language: <a href="https://nim-lang.org">Nim</a></li> + </ul> + </div> + </div> + </div> + </div> + <div class="timeline-item"> + <div class="timeline-left"> + <div class="timeline-icon icon-lg"> + <i class="ent ent-flag"></i> + </div> + </div> + <div class="timeline-content"> + <div class="tile"> + <div class="tile-content"> + <p class="tile-subtitle"> + Version 8 (September 2009 – October 2017) + </p> + <ul> + <li>Web Server: <a href="http://www.apache.org">Apache</a>, <a href="http://wiki.nginx.org/Main">Nginx</a> (from version 8.3 onwards)</li> + <li>Database: n/a</li> + <li>Framework/<span class="caps">CMS</span>/Other: <a href="http://www.h3rald.com">Nanoc</a> (static site generator)</li> + <li>Programming Language: <a href="http://www.ruby-lang.org">Ruby</a></li> + </ul> + </div> + </div> + </div> + </div> + <div class="timeline-item"> + <div class="timeline-left"> + <div class="timeline-icon icon-lg"> + <i class="ent ent-flag"></i> + </div> + </div> + <div class="timeline-content"> + <div class="tile"> + <div class="tile-content"> + <p class="tile-subtitle"> + Version 7 (July 2007 – September 2009) + </p> + <ul> + <li>Web Server: <a href="http://www.apache.org">Apache</a></li> + <li>Database: <a href="http://www.mysql.com">MySQL</a></li> + <li>Framework/<span class="caps">CMS</span>/Other: <a href="http://www.rubyonrails.org">Ruby on Rails</a> + <a href="http://www.typosphere.org">Typo</a></li> + <li>Programming Language: <a href="http://www.ruby-lang.org">Ruby</a></li> + </ul> + </div> + </div> + </div> + </div> + <div class="timeline-item"> + <div class="timeline-left"> + <div class="timeline-icon icon-lg"> + <i class="ent ent-flag"></i> + </div> + </div> + <div class="timeline-content"> + <div class="tile"> + <div class="tile-content"> + <p class="tile-subtitle"> + Version 6 (December 2005 – July 2007) + </p> + <ul> + <li>Web Server: <a href="http://www.apache.org">Apache</a></li> + <li>Database: <a href="http://www.mysql.com">MySQL</a></li> + <li>Framework/<span class="caps">CMS</span>/Other: <a href="http://www.cakephp.com">CakePHP</a></li> + <li>Programming Language: <a href="http://www.php.net"><span class="caps">PHP</span></a></li> + </ul> + </div> + </div> + </div> + </div> + <div class="timeline-item"> + <div class="timeline-left"> + <div class="timeline-icon icon-lg"> + <i class="ent ent-flag"></i> + </div> + </div> + <div class="timeline-content"> + <div class="tile"> + <div class="tile-content"> + <p class="tile-subtitle"> + Version 5 (April 2005 – December 2005) + </p> + <ul> + <li>Web Server: <a href="http://www.apache.org">Apache</a></li> + <li>Database: <a href="http://www.sqlite.org">SQLite</a></li> + <li>Framework/<span class="caps">CMS</span>/Other: <a href="http://www.xisc.com/">Prado</a></li> + <li>Programming Language: <a href="http://www.php.net"><span class="caps">PHP</span></a></li> + </ul> + </div> + </div> + </div> + </div> + <div class="timeline-item"> + <div class="timeline-left"> + <div class="timeline-icon icon-lg"> + <i class="ent ent-flag"></i> + </div> + </div> + <div class="timeline-content"> + <div class="tile"> + <div class="tile-content"> + <p class="tile-subtitle"> + Version 4 (February 2005 – April 2005) + </p> + <ul> + <li>Web Server: <a href="http://www.apache.org">Apache</a></li> + <li>Database: <a href="http://www.mysql.com">MySQL</a></li> + <li>Framework/<span class="caps">CMS</span>/Other: n/a</li> + <li>Programming Language: <a href="http://www.php.net"><span class="caps">PHP</span></a></li> + </ul> + </div> + </div> + </div> + </div> + <div class="timeline-item"> + <div class="timeline-left"> + <div class="timeline-icon icon-lg"> + <i class="ent ent-flag"></i> + </div> + </div> + <div class="timeline-content"> + <div class="tile"> + <div class="tile-content"> + <p class="tile-subtitle"> + Version 3 (November 2005 – February 2005) + </p> + <ul> + <li>Web Server: <a href="http://www.apache.org">Apache</a></li> + <li>Database: <a href="http://www.mysql.com">MySQL</a></li> + <li>Framework/<span class="caps">CMS</span>/Other: <a href="http://www.xoops.org/"><span class="caps">XOOPS</span></a></li> + <li>Programming Language: <a href="http://www.php.net"><span class="caps">PHP</span></a></li> + </ul> + </div> + </div> + </div> + </div> + <div class="timeline-item"> + <div class="timeline-left"> + <div class="timeline-icon icon-lg"> + <i class="ent ent-flag"></i> + </div> + </div> + <div class="timeline-content"> + <div class="tile"> + <div class="tile-content"> + <p class="tile-subtitle"> + Version 2 (May 2004 – November 2004) + </p> + <ul> + <li>Web Server: <a href="http://www.apache.org">Apache</a></li> + <li>Database: n/a</li> + <li>Framework/<span class="caps">CMS</span>/Other: n/a</li> + <li>Programming Language: <a href="http://www.php.net"><span class="caps">PHP</span></a></li> + </ul> + </div> + </div> + </div> + </div> + <div class="timeline-item"> + <div class="timeline-left"> + <div class="timeline-icon icon-lg"> + <i class="ent ent-flag"></i> + </div> + </div> + <div class="timeline-content"> + <div class="tile"> + <div class="tile-content"> + <p class="tile-subtitle"> + Version 1 (March 2004 – May 2004) + </p> + <ul> + <li>Web Server: <a href="http://www.apache.org">Apache</a></li> + <li>Database: n/a</li> + <li>Framework/<span class="caps">CMS</span>/Other: n/a</li> + <li>Programming Language: n/a</li> + </ul> + </div> + </div> + </div> + </div> +</div> + +<h3>Latest Updates</h3> +<ul><li><a href="/articles/h3rald-83/">H3RALD.com v8.3 Released</a></li> + <li><a href="/articles/h3rald-81/">H3RALD.com v8.1 Released</a></li> + <li><a href="/articles/take-back-your-site-with-nanoc/">Take back your site, with nanoc!</a></li> + <li><a href="/articles/h3rald-71/">Introducing H3RALD.com v7.1</a></li> + <li><a href="/articles/h3rald-v7-overview/">Back on Track…</a></li> + <li><a href="/articles/37/">Some updates</a></li> + <li><a href="/articles/8/">New site operative</a></li> +</ul>
@@ -0,0 +1,36 @@
+----- +title: "HastyScribe" +content-type: project +github: hastyscribe +subtitle: "A self-contained markdown compiler" +active: true +home: /hastyscribe/ +docs: /hastyscribe/HastyScribe_UserGuide.htm +summary: "A self-contained Markdown compiler that can generate self-contained HTML files, useful for writing essays, reports, meeting notes, etc." +version: "1.6.0" +download: "https://github.com/h3rald/hastyscribe/releases/download/" +----- +{{download => https://github.com/h3rald/hastyscribe/releases/download/}} + +[](class:hastyscribe) is a simple, self-contained, command-line program able to convert [markdown](http://daringfireball.net/projects/markdown) files into self-contained HTML pages, automatically embedding all the needed fonts, stylesheets and images. + +HastyScribe is: + +* **cross-platform**, you can download precompiled binaries for macOS, Linux and Windows. +* **self-contained**, it's a command-line application that doesn't require installing or prerequisites: it's all in a single, small, executable file. +* a **powerful markdown compiler**, which leverages the feature-rich [Discount](https://www.pell.portland.or.us/~orc/Code/discount/) markdown engine, and adds even more features like snippets, custom fields, and substitution macros. +* able to generate **self-contained, responsive HTML5 documents** that can be viewed with any major modern broswer, and look great on any device. + +For more information and a sample of HastyScribe's power, you can download and read the [HastyScribe User Guide](/hastyscribe/HastyScribe_UserGuide.htm) – generated with HastyScribe of course. + +### Downloads + +* [macOS (x64)]({{$download}}v{{$version}}/{{$github}}_v{{$version}}_macosx_x64.zip) +* [Linux (x64)]({{$download}}v{{$version}}/{{$github}}_v{{$version}}_linux_x64.zip) +* [Linux (x86)]({{$download}}v{{$version}}/{{$github}}_v{{$version}}_linux_x86.zip) +* [Linux (ARM)]({{$download}}v{{$version}}/{{$github}}_v{{$version}}_linux_arm.zip) +* [Windows (x64)]({{$download}}v{{$version}}/{{$github}}_v{{$version}}_windows_x64.zip) + +### Resources + +* [Introducing HastyScribe](/articles/hastyscribe/)
@@ -0,0 +1,39 @@
+----- +title: "Herald Vim Color Scheme" +content-type: project +subtitle: "An easy to read, portable and pretty Vim Color Scheme" +home: /herald-vim-color-scheme/ +summary: "A dark, easy-to-read color scheme for the Vim text editor. It can be used with 255, 16 or 8 colors." +active: true +version: 0.2.1 +----- +<p><strong>herald</strong> is a dark color scheme for <a href="http://www.vim.org">Vim</a> which aims to be easy to read, eye-appealing, portable on multiple terminals, and suitable for source code highlighting in multiple languages.</p> +<p>You can get the latest version <strong><a href="/files/herald.vim"><span class="caps">HERE</span></a></strong> (direct link).</p> +<h3>Changelog</h3> +<ul> + <li><strong>v0.2.1</strong> + <ul> + <li>Improved readability in search highlights</li> + <li>Delimiters are now rendered like operators</li> + </ul></li> + <li><strong>v0.2.0</strong> + <ul> + <li>Support for 8 and 16 color modes</li> + <li>Fixed completion menu colors</li> + <li>Improved readability for Visual mode</li> + <li>Specified highlighting for all the most common Vim syntax groups</li> + </ul></li> + <li><strong>v0.1.0</strong> + <ul> + <li>Initial Release</li> + </ul></li> +</ul> +<h3>Screenshot</h3> +<p><img src="/images/herald.vim/herald_vim_example.png" alt="" /></p> +<h3>Resources</h3> +<ul> + <li><a href="/articles/herald-vim-color-scheme">First Announcement</a></li> + <li><a href="/articles/herald-vim-021">0.2.1 Release Annoucement</a></li> + <li><a href="http://www.vim.org/scripts/script.php?script_id=2684">Script Page</a> [on Vim.org]</li> + <li><a href="http://github.com/h3rald/stash/commits/master/.vim/colors/herald.vim">File History</a> [on GitHub]</li> +</ul>
@@ -0,0 +1,197 @@
+----- +title: "Home" +content-type: page +----- +<div class="columns"> + <div class="column col-xs-12 col-md-6"> + <article> + <h2><a href="/articles/litestore/">Introducing LiteStore</a></h2> + <p class="subtitle"> + A tiny, lightweight, self-contained, RESTful document store + </p> + <p class="date"><i class="ent ent-calendar"></i> <time>Monday, August 14<sup>th</sup> 2017</time></p> + <section> + <p>Lately I have become more and more interested in client-side single-page applications. Nowadays you can write your web apps in Javascript using your favorite framework, without any server-side logic, but you obviously still need:</p> + <ul> + <li>some web service to retrieve and persist your application data.</li> + <li>a web server to serve the source code and the static assets of your web application.</li> + </ul> + <p>NodeJS is probably one of the easiest backend to setup for prototyping SPAs. It is very easy to create a simple web server in Node and to implement a simple <span class="caps">REST</span> <span class="caps">API</span> using Express or a similar framework, but you still need to install node and write some code to wire up your backend.</p> + <p>I wanted something even more lazy then that. I wanted a fully <em>self-contained</em> program able to:</p> + <ul> + <li>Serve static files</li> + <li>Act as a simple <span class="caps">JSON</span> document store</li> + <li>Provide a simple <span class="caps">REST</span> <span class="caps">API</span> to work with</li> + <li>(bonus!) provide a way to pack web apps for easy distribution</li> + </ul> + <p>…and that’s how I ended up developing <em>LiteStore</em>.</p> + <p><a href="/articles/litestore/">Continue reading →</a></p> + </section> + </article> + <div class="divider text-center" data-content="more recent articles"></div> + <article> + <h4><a href="/articles/litestore/">Introducing LiteStore</a></h4> + <p> + A tiny, lightweight, self-contained, RESTful document store + </p> + </article> + <article> + <h4><a href="/articles/litestore/">Introducing LiteStore</a></h4> + <p> + A tiny, lightweight, self-contained, RESTful document store + </p> + </article> + <article> + <h4><a href="/articles/litestore/">Introducing LiteStore</a></h4> + <p> + A tiny, lightweight, self-contained, RESTful document store + </p> + </article> + <div class="panel contact-list"> + <div class="panel-header"> + <div class="panel-title">Contact</div> + </div> + <div class="panel-body"> + <p>This site was made by Fabio Cevasco. For more information, see the <a href="/about/">About</a> page.</p> + <p>To contact me, use the links below.</p> + <ul> + <li><i class="ent ent-mail"></i> <a href='mailto:h3rald@h3rald.com'>E-mail</a></li> + <li><i class="ent ent-linkedin"></i> <a href="https://www.linkedin.com/in/fabiocevasco" rel="me">LinkedIn</a></li> + <li><i class="ent ent-twitter"></i> <a href="http://twitter.com/h3rald" rel="me">Twitter</a></li> + <li><i class="ent ent-pin"></i> <a href="http://pinboard.in/u:h3rald/" rel="me">Pinboard</a></li> + <li><i class="ent ent-instagram"></i> <a href="http://instagram.com/h3rald/" rel="me">Instagram</a></li> + <li><i class="ent ent-github"></i> <a href="https://github.com/h3rald" rel="me">Github</a></li> + <li><i class="ent ent-flickr"></i> <a href="https://www.flickr.com/photos/h3rald/" rel="me">Flickr</a></li> + <li><i class="ent ent-foursquare"></i> <a href="http://foursquare.com/h3rald" rel="me">Foursquare</a></li> + </ul> + </div> + </div> + </div> + <div class="column col-xs-12 col-md-6"> + <div class="panel featured"> + <div class="panel-header"> + featured articles + </div> + <div class="panel-body"> + <article id="a_randal-schwartz"> + <header> + <h3><a href="/articles/randal-schwartz/">A pizza with Randal Schwartz</a></h3> + <p class="subtitle">Talking about open source, programming, emacs and technical writing</p> + </header> + </article> + <article id="a_herald-vim-color-scheme"> + <header> + <h3><a href="/articles/herald-vim-color-scheme/">Herald (Vim Color Scheme)</a></h3> + <p class="subtitle">My very own VIM color scheme. Featuring 256, 16 and 8 color support, high readability and... pretty colors!</p> + </header> + </article> + <article id="a_10-programming-languages"> + <header> + <h3><a href="/articles/10-programming-languages/">10 programming languages worth checking out</a></h3> + <p class="subtitle">A quick comparison of 10 non-mainstream programming languages</p> + </header> + </article> + </div> + </div> + <div class="v-spacer"></div> + <div class="panel featured"> + <div class="panel-header"> + top tags + </div> + <div class="panel-body chips"> + <label class="chip"> + <figure class="avatar avatar-xs" data-initial="34"></figure> + programming + </label> + <label class="chip"> + <figure class="avatar avatar-xs" data-initial="32"></figure> + webdevelopment + </label> + <label class="chip"> + <figure class="avatar avatar-xs" data-initial="27"></figure> + webdesign + </label> + <label class="chip"> + <figure class="avatar avatar-xs" data-initial="25"></figure> + review + </label> + <label class="chip"> + <figure class="avatar avatar-xs" data-initial="22"></figure> + website + </label> + <label class="chip"> + <figure class="avatar avatar-xs" data-initial="18"></figure> + writing + </label> + <label class="chip"> + <figure class="avatar avatar-xs" data-initial="16"></figure> + opensource + </label> + <label class="chip"> + <figure class="avatar avatar-xs" data-initial="15"></figure> + rails + </label> + <label class="chip"> + <figure class="avatar avatar-xs" data-initial="13"></figure> + ruby + </label> + <label class="chip"> + <figure class="avatar avatar-xs" data-initial="9"></figure> + internet + </label> + </div> + <div class="panel-footer"> + </div> + </div> + <div class="v-spacer"></div> + <div class="panel featured"> + <div class="panel-header"> + featured projects + </div> + <div class="panel-body"> + <div class="columns"> + <div class="column col-xs-12 col-md-6"> + <h3><a href="https://min-lang.org/">min</a></h3> + <p>A tiny concatenative programming language and system shell, providing a small standard library with regular expression support, cryptography, file management, and more.</p> + </div> + <div class="column col-xs-12 col-md-6"> + <h3><a href="/hastyscribe/">HastyScribe</a></h3> + <p>A self-contained Markdown to HTML compiler based on discount but including additional features such as support for snippets, custom fields, simple macros and more.</p> + </div> + </div> + </div> + </div> + <div class="v-spacer"></div> + <div class="panel"> + <div class="panel-header"> + <div class="panel-title">Credits</div> + </div> + <div class="panel-body"> + <p>Special thanks to the following people, who made this web site possible:</p> + <ul> + <li> + <a href="http://scholarsfonts.net/">David J. Perry</a>, who designed the <a href="http://scholarsfonts.net/cardofnt.html">Cardo</a> font used for the H3RALD logo. + </li> + <li> + <a href="http://atipo.es/en/">atipo</a>, who designed the <a href="http://calendasplus.com">Calendas Plus</a> font, used throughout this web site. + </li> + <li> + <a href="https://twitter.com/picturepan2">Yan Zhu</a>, the creator of the <a href="https://picturepan2.github.io/spectre/">Spectre</a> CSS framework. + </li> + <li> + <a href="http://www.danielbruce.se/">Daniel Bruce</a>, designer of the <a href="http://www.entypo.com/">Entypo</a> font, used for the icons on this web site. + </li> + <li> + <a href="https://github.com/nagoshiashumari">Daniela Howe</a> and <a href="https://github.com/idmontie">Ivan Montiel</a>, designers of the <a href="http://nagoshiashumari.github.io/Rpg-Awesome/">RPG Awesome</a> font, used for some of the icons on this web site. + </li> + </ul> + </div> + </div> + </div> +</div> +<div class="columns"> + <div class="column col-xs-12 col-md-6"> + </div> + <div class="column col-xs-12 col-md-6"> + </div> +</div>
@@ -0,0 +1,34 @@
+----- +title: "LiteStore" +content-type: project +github: litestore +home: /litestore/ +active: true +docs: /litestore/LiteStore_UserGuide.htm +version: 1.1.1 +subtitle: "A tiny NoSQL database for rapid prototyping" +summary: "A lightweight, self-contained, RESTful, multi-format NoSQL document store server written in Nim and powered by a SQLite backend for storage." +download: "https://github.com/h3rald/litestore/releases/download/" +----- + +LiteStore is a lightweight, self-contained, RESTful, multi-format NoSQL document store server written in [Nim](http://nim-lang.org) and powered by a [SQLite](http://www.sqlite.org)" backend for storage. It aims to be a very simple and lightweight backend ideal for prototyping and testing REST APIs and client-side, single-page applications. + +LiteStore is: + + +* **cross-platform**, you can download precompiled binaries for macOS, Linux and Windows. +* **self-contained**, it's a command-line application that doesn't require installing or prerequisites: it's all in a single, small, executable file. +* **RESTful**, you can access it via HTTP — perfect for prototyping SPAs. + +### Downloads + +* [macOS (x64)]({{$download}}v{{$version}}/{{$github}}_v{{$version}}_macosx_x64.zip) +* [Linux (x64)]({{$download}}v{{$version}}/{{$github}}_v{{$version}}_linux_x64.zip) +* [Linux (x86)]({{$download}}v{{$version}}/{{$github}}_v{{$version}}_linux_x86.zip) +* [Linux (ARM)]({{$download}}v{{$version}}/{{$github}}_v{{$version}}_linux_arm.zip) +* [Windows (x64)]({{$download}}v{{$version}}/{{$github}}_v{{$version}}_windows_x64.zip) +* [Windows (x86)]({{$download}}v{{$version}}/{{$github}}_v{{$version}}_windows_x86.zip) + +### Resources + +* [Introducing LiteStore](/articles/litestore/)
@@ -0,0 +1,49 @@
+----- +title: "RawLine" +content-type: project +subtitle: "A pure-ruby alternative to ReadLine" +github: rawline +inactive: true +home: /rawline/ +summary: "A Ruby library which provides a subset of the functionality of the C Readline library. Being implemented in pure Ruby, it gives Ruby developers much more control over key bindings and word completion." +version: 0.3.2 +docs: "http://rawline.rubyforge.org" +----- +<p>RawLine is a 100% Ruby alternative to the ReadLine library, providing some of its most popular features such as:</p> +<ul> + <li>Basic line editing operations</li> + <li>Word completion</li> + <li>History Management</li> + <li>Custom key/key sequences bindings</li> +</ul> +<h3>Installation</h3> +<p>The simplest method to install RawLine is to install the gem:</p> +<div><pre><code class="bash">gem install rawline</code></pre></div><h3>Usage</h3> +<p>Editor initialization:</p> +<div><pre><code class="ruby">require 'rawline' +editor = RawLine::Editor.new</code></pre></div><p>Key binding:</p> +<div><pre><code>editor.bind(:ctrl_z) { editor.undo } +editor.bind(:up_arrow) { editor.history_back } +editor.bind(:ctrl_x) { puts "Exiting..."; exit }</code></pre></div><p>Setup word completion</p> +<div><pre><code>editor.completion_proc = lambda do |word| + if word + ['select', 'update', 'delete', 'debug', 'destroy'].find_all { |e| e.match(/^#{Regexp.escape(word)}/) } + end +end + +editor.completion_append_string = " "</code></pre></div><p>Read input:</p> +<div><pre><code>editor.read("=> ", true)</code></pre></div><h3>Replacing Readline</h3> +<p>Simply include the RawLine (or Rawline) module:</p> +<div><pre><code>include Rawline</code></pre></div><p>…and you’ll get:</p> +<div><pre><code class="ruby">readline(prompt, add_history) # RawLine::Editor#read(prompt, add_history) +HISTORY # RawLine::Editor#history +FILENAME_COMPLETION_PROC # Rawline::Editor#filename_completion_proc +# ...</code></pre></div><p>but also:</p> +<div><pre><code class="ruby">Rawline.editor # RawLine::Editor</code></pre></div><p>…which opens a world of endless possibilities! ;-)</p> +<h3>Latest Updates</h3> +<ul><li><a href="/articles/real-world-rawline-usage/">Real-world Rawline usage</a></li> + <li><a href="/articles/rawline-030/">RawLine 0.3.0 released â now with Readline emulation</a></li> + <li><a href="/articles/rawline-020/">New Release: RawLine 0.2.0</a></li> + <li><a href="/articles/inline-name-change/">InLine name change: what’s your opinion?</a></li> + <li><a href="/articles/inline-introduction/">RawLine – a 100% Ruby solution for console inline editing</a></li> +</ul>
@@ -1,13 +0,0 @@
------ -filter: erb ------ -<article id="a_<%= @item[:permalink] %>"> - <header> - <h2><a href="<%= @item.identifier %>"><%= @item[:title]%></a></h2> - <% unless @item[:subtitle].blank? then %> - <h3><%= @item[:subtitle] %></h3> - <% end %> - </header> -</article> -<hr /> -
@@ -1,25 +0,0 @@
------ -filter: erb ------ -<% - author = @item[:author] || "Fabio Cevasco" - intro = @extended ? @item[:intro].to_s+"\n\n"+@item[:extended_intro].to_s : @item[:intro] -%><article id="a_<%= @item[:permalink] %>"> - <header> - <h2><a href="<%= @item.identifier %>"><%= @item[:title]%></a></h2> - <% unless @item[:subtitle].blank? then %> - <h3><%= @item[:subtitle] %></h3> - <% end %> - <p class="pubdate pull-right"><i class="h3-quill-ink"></i> <time datetime="<%= @item[:date].to_iso8601_time %>"><%= @item[:date].strftime("%A, %B %d %Y") %></time></p> - <div class="clearfix"></div> - </header> - <div class="<%= @classes %>"> - <% if @item[:image] && @extended then %> - <img src="<%=@item[:image]%>" style="float:left; margin: 0 10px 10px 0;" alt="#" /> - <% end %> - <%= RedCloth.new(intro.to_s).to_html %> - <p><a href="<%= @item.identifier %>">Continue reading →</a></p> - </div> - <hr /> -</article> -
@@ -1,21 +0,0 @@
------ -filter: erb ------ - -<div id="disqus_thread"></div> -<script> - var disqus_config = function () { - this.page.url = 'https://h3rald.com/articles/<%= @item[:permalink] %>/'; // Replace PAGE_URL with your page's canonical URL variable - this.page.identifier = 'articles/<%= @item[:permalink] %>'; // Replace PAGE_IDENTIFIER with your page's unique identifier variable - }; - (function() { // DON'T EDIT BELOW THIS LINE - var d = document, s = d.createElement('script'); - - s.src = '//h3rald.disqus.com/embed.js'; - - s.setAttribute('data-timestamp', +new Date()); - (d.head || d.body).appendChild(s); - })(); -</script> -<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript> -<script id="dsq-count-scr" src="//h3rald.disqus.com/count.js" async></script>
@@ -1,4 +0,0 @@
------ -filter: erb ------ -<li><a href="/articles/<%= @article.attributes[:permalink]%>/"><%= @article.attributes[:title]%></a> — <time class="timeago" datetime="<%=@article.attributes[:date].to_iso8601_time%>"><%= @article.attributes[:date].strftime("%A, %d %B %Y")%></time></li>
@@ -1,92 +0,0 @@
------ -filter: erb ------ -<!DOCTYPE html> -<html lang="en"> - <head> - <title><%= @item[:title] || @item[:title_tag] %> - H3RALD</title> - <% if @item[:feed_url] then %> - <link rel="alternate" type="application/rss+xml" title="H3RALD - <%= @item[:feed_title]%>" href="<%= @item[:feed_url]%>" /> - <% else %> - <% if @item[:feed] then %> - <link rel="alternate" type="application/rss+xml" title="H3RALD - <%= @item[:feed_title]%>" href="<%= @item[:feed]%>rss/" /> - <link rel="alternate" type="application/atom+xml" title="H3RALD - <%= @item[:feed_title]%>" href="<%= @item[:feed]%>atom/" /> - <% end %> - <% end %> - <meta charset="utf-8" /> - <meta name="author" content="Fabio Cevasco" /> - <meta name="robots" content="all, follow" /> - <meta name="Revisit-After" content="2 Days" /> - <meta name="description" content="H3RALD - Fabio Cevasco's Web Site" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> - <% - min_keywords = "h3rald, fabio cevasco, " - default = "ruby, rails technical writing, reviews, software, browsers, articles, traveling, books, genova" - case @item[:type] - when 'article' then - keywords = min_keywords+@item[:tags].join(', ') - when 'project' then - keywords = @item[:permalink] == 'h3rald' ? "fabio cevasco, "+@item[:permalink] : min_keywords+@item[:permalink] - else - keywords = min_keywords+default - end - %> - <meta name="keywords" content="<%= keywords %>" /> - <link rel="shortcut icon" href="/favicon.png" type="image/png" /> - <meta content="44.388041;9.073248" name="ICBM" /> - - <link rel="stylesheet" type="text/css" href="/styles/style.css" /> - <!-- <script src="https://www.google.com/jsapi?key=ABQIAAAAr6RY1Z6dchG_sX9WDLSy3xRlq2n1sm52B5HDRR5tm6o8XM18FhR56xHNNH6CsX86uN5VoTrglpyOyQ" type="text/javascript"></script> --> - <script src="js/fingerprint.js"></script> - <script src="/js/jquery.js" type="text/javascript"></script> - <script src="/js/jquery-timeago.js" type="text/javascript"></script> - <script src="/js/date.js" type="text/javascript"></script> - <script src="/js/init.js" type="text/javascript"></script> - <script src="/js/search.js" type="text/javascript"></script> - <script src="/js/highlight.js" type="text/javascript"></script> - <script src="/js/bootstrap.js" type="text/javascript"></script> - </head> - <body> - <div id="wrap"> - <%= render 'header' %> - <div class="hidden container" id="h3rald-search-results"></div> - <main id="main" class="container"> - <% if @item[:permalink] == 'home' then %> - <%= yield %> - <% else %> - <article class="page"> - <%= render 'page_meta', :item => @item %> - <div id="body-text" class="hyphenate"> - <%= yield %> - </div> - </article> - <% if @item[:type] == 'article' then %> - <%= render 'legacy_comments', :item => @item if @item[:comments] %> - <%= render 'comments', :item => @item %> - <% end %> - <% end %> - </main> - <%= render 'footer' %> - <script> - hljs.tabReplace = ' '; - hljs.initHighlightingOnLoad(); - </script> - <!-- Start Google Analytics --> - <script type="text/javascript"> - (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ - (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), - m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) - })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); - - ga('create', 'UA-18587377-1', { - 'storage': 'none', - 'clientId': new Fingerprint().get() - }); - ga('set', 'anonymizeIp', true); - ga('send', 'pageview'); - - </script> - <!-- End Google Analytics --> - </div> <!-- End #wrap --> - </body> -</html>
@@ -1,62 +0,0 @@
------ -filter: erb ------ -<footer class="navbar-static-bottom" id="site-footer"> -<div class="container"> - <div class="row copyright"> - <p><span class="h3rald h3rald-footer"></span> Web Site v8.4.2</p> - <p>© 2004 — 2016 <em>Fabio Cevasco</em></p> - </div> - <div class="row"> - <div class="contact-list col-md-4"> - <h2><i class="h3-speech-bubbles"></i> Contact</h2> - <p>This site was made by Fabio Cevasco. For more information, see the <a href="/about/">About</a> page.</p> - <p>To contact me, use the links below.</p> - <ul> - <li><i class="h3-gmail"></i> <a href='mailto:h3rald@h3rald.com'>h3rald@h3rald.com</a></li> - <li><i class="h3-linkedin"></i> <a href="https://www.linkedin.com/in/fabiocevasco" title="LinkedIn">fabiocevasco</a></li> - <li><i class="h3-twitter"></i> <a href="http://twitter.com/h3rald" title="Twitter">@h3rald</a></li> - <li><i class="h3-pin-3"></i> <a href="http://pinboard.in/u:h3rald/" title="Pinboard">h3rald</a></li> - <li><i class="h3-instagram"></i> <a href="http://instagram.com/h3rald/" title="Instagram">h3rald</a></li> - <li><i class="h3-github-02"></i> <a href="https://github.com/h3rald" title="Github">h3rald</a></li> - <li><i class="h3-reddit"></i> <a href="https://www.reddit.com/user/h3rald" title="Reddit">h3rald</a></li> - <li><i class="h3-foursquare_1"></i> <a href="http://foursquare.com/h3rald" title="Foursquare">h3rald</a></li> - </ul> - </div> - <div class="col-md-4"> - <h2><i class="h3-key"></i> License</h2> - <p>Unless stated otherwise, all the articles and content published on this web site is licensed under the <a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/">Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License</a>.</p> - - <p class="license-logo"> - <img alt="Creative Commons License" src="/img/by-nc-nd.png" /> - </p> - - <p>The source code of this web site, such as its layout, <span class="caps">LESS/CSS</span> stylesheets, custom rake tasks and code is licensed under the terms of the <a href="http://creativecommons.org/licenses/MIT/"><span class="caps">MIT</span> License</a> and it is available on <a href="https://github.com/h3rald/h3rald">GitHub</a>.</p> - </div> - <div class="col-md-4"> - <h2><i class="h3-candle"></i> Credits</h2> - <p>Special thanks to the following people, who made this web site possible:</p> - <ul> - <li> - <a href="http://www.stoneship.org/">Denis Defreyne</a>, creator of the exceptional <a href="http://nanoc.stoneship.org/">nanoc</a> static site generator. - </li> - <li> - <a href="http://scholarsfonts.net/">David J. Perry</a>, who designed the <a href="http://scholarsfonts.net/cardofnt.html">Cardo</a> font used for the H3RALD logo. - </li> - <li> - <a href="http://atipo.es/en/">atipo</a>, who designed the <a href="http://calendasplus.com">Calendas Plus</a> font, used throughout this web site. - </li> - <li> - <a href="https://twitter.com/mdo">Mark Otto</a> and <a href="https://twitter.com/fat">fat-kun</a>, creators of the awesome <a href="http://getbootstrap.com">Bootstrap</a> framework. - </li> - <li> - <a href="http://twitter.com/davegandy">Dave Gandy</a>, designer of the <a href="http://fontawesome.io/">FontAwesome</a> font, used for some of the icons on this web site. - </li> - <li> - <a href="https://github.com/nagoshiashumari">Daniela Howe</a> and <a href="https://github.com/idmontie">Ivan Montiel</a>, designers of the <a href="http://nagoshiashumari.github.io/Rpg-Awesome/">RPG Awesome</a> font, used for some of the icons on this web site. - </li> - </ul> - </div> - </div> -</div> -</footer>
@@ -1,46 +0,0 @@
------ -filter: erb ------ -<% - def active_if(ident) - if @item[:permalink] == ident then - %{ class="active"} - else - "" - end -end -%><header class="container" id="site-header"> - <nav id="main-navbar" class="navbar navbar-fixed-top"> - <div class="container"> - <div class="navbar-header"> - <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> - <span class="sr-only">Toggle navigation</span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <h1 class="navbar-brand"> - <a href="/" class="h3rald h3rald-header"> </a> - </h1> - </div> - <div class="navbar-collapse collapse"> - <ul class="nav navbar-nav"> - <li<%=active_if("projects")%>><a href="/projects/"><i class="h3-fizzing-flask"></i> PROJECTS</a></li> - <li<%=active_if("tags")%>><a href="/tags/"><i class="h3-tags"></i> TAGS</a></li> - <li<%=active_if("archives")%>><a href="/archives/"><i class="h3-lb-book-02"></i> ARCHIVES</a></li> - <li<%=active_if("about")%>><a href="/about/"><i class="h3-scroll-unfurled"></i> ABOUT</a></li> - <li> - </li> - </ul> - <form class="navbar-form navbar-right"> - <div class="input-group"> - <input type="text" class="form-control" name="q" placeholder="Search" id="h3rald-search-box"> - <span class="input-group-btn"> - <button class="btn btn-default" id="h3rald-search-btn" type="button"><i class="fa fa-search"></i></button> - </span> - </div> - </form> - </div> - </div> - </nav> -</header>
@@ -1,18 +0,0 @@
------ -filters: -- erb ------ -<div id="legacy-comments"> - <h3>Legacy Comments</h3> - <p> - <em>These comments were imported automatically from an old version of this web site. Scroll <a href="#dsq-content">down</a> for the newest stuff.</em> - </p> - <% @item[:comments].each do |c| %> - <div id="comment-<%=c[:id]%>" class="legacy-comment well"> - <div class="lc-header"><%= (c[:url].empty?) ? c[:author] : %{<a href="#{c[:url]}">#{c[:author]}</a>} %></div> - <div class="lc-body"> - <%= RedCloth.new(c[:body]).to_html %> - </div> - </div> - <% end %> -</div>
@@ -1,21 +0,0 @@
------ -filter: erb ------ -<% - author = @item[:author] || "Fabio Cevasco" - pdf = false#%{<a href="/articles/#{@item[:permalink]}.pdf"><i class="fa fa-download"> </i>Download as PDF</a>} if @item[:pdf] -%><div class="row"> - <header class="col-md-9"> - <h2><%= @item[:title] %></h2> - <% if !@item[:subtitle].blank? then %> - <h3><%= @item[:subtitle] %></h3> - <% end %> - </header> - <% if @item[:type] == 'article' then %> - <ul class="list-unstyled article-info col-md-3"> - <li><i class="h3-quill-ink"></i> <time datetime="<%= @item[:date].to_iso8601_time %>"><%= @item[:date].strftime("%A, %B %d %Y") %></time></li> - <li><i class="h3-tags"></i> <%= tags_for(@item) %></li> - <%= "<li>#{pdf}</li>" if pdf %> - </ul> - <% end %> -</div>
@@ -1,12 +0,0 @@
------ -filter: erb ------ -<nav class="project-links"> - <%= @item.attributes[:links].map{ |l| - res=nil; l.each_pair{ |label, value| res = %{<a href="#{value}">#{label.to_s.upcase}</a>}}; res - }.join(" | ") %> -</nav> -<ul class="project-data"> - <li>Project Status: <strong><%= @item.attributes[:status] %></strong></li> - <li>Version: <strong><%= @item.attributes[:version]%></strong></li> -</ul>
@@ -1,10 +0,0 @@
------ -filters_pre: -- erb -- redcloth ------ - -<h3>Latest Updates</h3> - -<ul><% articles_tagged_with(@tag).each do |a| %><%= render 'dated_article', :article => a %><% end %></ul> -
@@ -1,23 +0,0 @@
-require 'rubygems' -begin -require 'bb-ruby' -rescue Exception -end - -class BbcodeFilter < Nanoc3::Filter - identifier :bbcode - - def run(content, args) - custom_tags = { - 'Small' => [ - /\[small\](.*?)\[\/small\]/mi, - '<small>\1</small>', - 'small', - '[small]...[/small]', - :small - ] - } - content.gsub("\n", "<br />").bbcode_to_html(custom_tags, false) rescue content - end - -end
@@ -1,95 +0,0 @@
---[-------------------- Snippets ------------------------] -&:[G|Glyph] ---[-------------------- Macros --------------------------] -def:[h3rald.article| - article[ - @head[ - style[pagination.css] - style[default.css] - <style> -.halftitlepage { - margin: auto; - text-align: center; } - - -.halftitlepage h1 { - padding-top: 0; - font-size: 2em; - font-weight: normal; - line-height: 1.2em; - margin-bottom: 0.2em; } -.halftitlepage h2 { - padding-top: 0; - font-style: italic; - font-size: 1.1em; - font-weight: normal; - line-height: 1.2em; - prince-bookmark-level: none; } - -#toc { - display: none; -} - -.author { - font-size: 1em; } - -.pubdate { - font-size: 0.8em; } - -.contents { - page-break-after: always; - } - -h3.toc, h4.toc, h5.toc { - font-weight: normal; - font-size: 150%; - margin-bottom: 1em; - margin-top: 1.5em; -} - </style> - ] - @pre-title[ - =>[http://www.h3rald.com/archives/|image[@width[25%]@height[25%]$[site.root]/images/logo.svg]] - ] - @post-title[ - div[em[Originally published on =>[http://www.h3rald.com{{identifier}}|H3RALD.com]]] - toc[] - ] - {{content}} - ] -] -def:[pt| - section[@title[Part {{0}}: {{1}}] - txt[{{2}}] - ] -] -def:[quote| - blockquote[ - {{0}} - ] - ?[{{1}}|p[@style[margin-left: 4em]– {{1}}\/?[{{2}}|, cite[{{2}}]]]] -] -def:[float-img| - image[@class[{{1}}]$[site.root]{{0}}] -] -def:[float-fig| - figure[@style[float:{{2}};]$[site.root]{{0}}|{{1}}] -] -def:[left-img| - float-img[{{0}}|left] -] -def:[right-img| - float-img[{{0}}|right] -] -def:[center-img| - float-img[{{0}}|center] -] -def:[left-fig| - float-fig[{{0}}|{{1}}|left] -] -def:[right-fig| - float-fig[{{0}}|{{1}}|right] -] -def:[center-fig| - float-fig[{{0}}|{{1}}|center] -]
@@ -1,48 +0,0 @@
-class Nanoc3::RuleContext - - require 'glyph' - - def glyph_config(item) - Glyph['document.intro'] = RedCloth.new("#{item[:intro]}\n\n#{item[:extended_intro]}").to_html - Glyph['document.date'] = item[:date].strftime "%A, %d %B %Y" - Glyph['document.title'] = item[:title] - Glyph['document.subtitle'] = item[:subtitle] - Glyph['document.author'] = "Fabio Cevasco" - Glyph.filter Glyph.file_load("#{Dir.pwd}/lib/data.glyph") - end - - def glyph_pdf_for(item) - Glyph['document.output'] = 'pdf' - Glyph['output.pdf.generator'] = "prince" - Glyph['site.root'] = ".." - f = Pathname.new "#{Dir.pwd}/output#{item.identifier.gsub(/\/$/, '')}.glyph" - f.parent.mkpath - doc = %{ - h3rald.article[ - @identifier[#{item.identifier}] - @content[section[#{item.raw_content}]] - ] - } - # Write the new raw file using Glyph's file_write method - Glyph.file_write f, doc - # Now compile the PDF (works if Prince is installed) - # Glyph.debug_mode = true - begin - puts "Generating PDF for '#{f}'..." - Glyph.compile f.to_s - f.unlink - Pathname.new(f.to_s.gsub(/\.glyph$/, '.html')).unlink - puts "Done." - rescue Exception => e - puts "Glyph Error: #{e.message}" - end - end - - def glyph_article_for(item) - Glyph['document.output'] = 'html5' - Glyph['site.root'] = "" - filter :glyph - layout 'default' - end - -end
@@ -1,15 +0,0 @@
-require 'rubygems' -require 'glyph' - -class GlyphFilter < Nanoc3::Filter - identifier :glyph - - def run(content, args) - doc = %{ - section[ -#{content} - ]} - Glyph.filter doc - end - -end
@@ -1,195 +0,0 @@
-require 'redcloth' - -module Nanoc3::Helpers::Tagging - - def site_tags - ts = {} - @items.each do |p| - next unless p[:tags] - p[:tags].each do |t| - if ts[t] - ts[t] = ts[t]+1 - else - ts[t] = 1 - end - end - end - ts - end - - def tags_for(article) - article.attributes[:tags].map{|t| %{<a class="tag" href="/tags/#{t}/">#{t}</a>}}.join(", ") - end - - def link_for_tag(tag, base_url) - %[<a href="#{base_url}#{tag.downcase}/" rel="tag">#{tag}</a>] - end - - def tag_link_with_count(tag, count) - %{#{link_for_tag(tag, '/tags/')} (#{count})} - end - - def sorted_site_tags - site_tags.sort{|a, b| a[0] <=> b[0]} - end - - def articles_tagged_with(tag) - @site.items.select{|p| p.attributes[:tags] && p.attributes[:tags].include?(tag)}.sort{|a,b| a.attributes[:date] <=> b.attributes[:date]}.reverse - end - -end - -module Nanoc3::Helpers::Blogging - - def check_data(params) - raise RuntimeError.new('Cannot build feed: site configuration has no base_url') if @site.config[:base_url].nil? - raise RuntimeError.new('Cannot build feed: feed item has no title') if @item[:title].nil? - raise RuntimeError.new('Cannot build feed: no articles') if feed_articles(params).empty? - raise RuntimeError.new('Cannot build feed: one or more articles doesn\'t have a date') if feed_articles(params).any? { |a| a[:date].nil? } - end - - def feed_articles(params) - params[:articles] || latest_articles(10) - end - - def feed_content_proc(params) - params[:content_proc] || lambda { |a| a.reps[0].content_at_snapshot(:pre)} - end - - def feed_excerpt_proc(params) - params[:excerpt_proc] || lambda { |a| a[:excerpt] } - end - - def rss_feed(params={}) - require 'builder' - require 'time' - check_data params - # Create builder - buffer = '' - xml = Builder::XmlMarkup.new(:target => buffer, :indent => 2) - # Build feed - xml.instruct! - xml.rss(:version => '2.0') do - xml.channel do - xml.title @item[:title] - xml.language 'en-us' - xml.lastBuildDate feed_articles(params).first[:date].rfc822 - xml.ttl '40' - xml.link @site.config[:base_url] - xml.description - feed_articles(params).each do |a| - xml.item do - xml.title a[:title] - xml.description feed_content_proc(params).call(a) - xml.pubDate a[:date].rfc822 - xml.guid url_for(a) - xml.link url_for(a) - xml.author @site.config[:author_email] - xml.comments url_for(a)+'#comments' - a[:tags].each do |t| - xml.category t - end - end - end - end - buffer - end - end - - # Redefine atom_feed method - def atom_feed(params={}) - require 'builder' - require 'time' - check_data params - buffer = '' - xml = Builder::XmlMarkup.new(:target => buffer, :indent => 2) - xml.instruct! - xml.feed(:xmlns => 'http://www.w3.org/2005/Atom') do - xml.id @site.config[:base_url] + '/' - xml.title @item[:title] - xml.updated feed_articles(params).first[:date].to_iso8601_time - xml.link(:rel => 'alternate', :href => @site.config[:base_url]) - xml.link(:rel => 'self', :href => @site.config[:base_url]+"/#{@item[:permalink]}/") - xml.author do - xml.name(@item[:author_name] || @site.config[:author_name]) - xml.uri(@item[:author_uri] || @site.config[:base_url]) - end - count = 0 - feed_articles(params).each do |a| - xml.entry do - xml.id atom_tag_for(a) - xml.title a[:title] - xml.published a[:date].to_iso8601_time - # Subtract a few seconds to avoid having the same update time (compilation time) - xml.updated((a.mtime-count).to_iso8601_time) - count = count+1 - xml.link(:rel => 'alternate', :href => url_for(a)) - a[:tags].each do |t| - xml.category(:term => t, :scheme => "#{@site.config[:base_url]}/tags/#{t}/") - end - summary = feed_excerpt_proc(params).call(a) - xml.summary summary, :type => 'html' unless summary.nil? - xml.content(:type => 'html') do |c| - c << %{<![CDATA[\n#{feed_content_proc(params).call(a)}]]>\n} - end - end - end - end - buffer - end - - def atom_tag_for(item) - require 'time' - hostname = @site.config[:base_url].sub(/.*:\/\/(.+?)\/?$/, '\1') - formatted_date = item[:date].to_iso8601_date - 'tag:' + hostname + ',' + formatted_date + ':' + (item.reps[0].path || item.identifier) - end - - def latest_articles(max=nil) - total = @site.items.select{|p| p.attributes[:type] == 'article'}.sort{|a, b| a.attributes[:date] <=> b.attributes[:date]}.reverse - max ||= total.length - total[0..max-1] - end - - def popular_articles(max=nil) - total = @site.items.select{|p| p.attributes[:date] && p.attributes[:type] == 'article' && p.attributes[:popular]}.sort{|a, b| a.attributes[:date] <=> b.attributes[:date]}.reverse - max ||= total.length - total[0..max-1] - end - - def by_permalink(articles, permalink) - articles.select{|a| a[:permalink] == permalink}[0] rescue nil - end - - def articles_by_month - articles = latest_articles - m_articles = [] - index = -1 - current_month = "" - articles.each do |a| - next unless a.attributes[:date] - month = a.attributes[:date].strftime("%B %Y") - if current_month != month then - # new month - m_articles << [month, [a]] - index = index + 1 - current_month = month - else - # same month - m_articles[index][1] << a - end - end - m_articles - end - - def month_link_with_count(month, count) - permalink = month.downcase.gsub /\s/, '-' - %{<a href="/archives/#{permalink}/">#{month}</a> (#{count})} - end - -end - -include Nanoc3::Helpers::Tagging -include Nanoc3::Helpers::Blogging -include Nanoc3::Helpers::Rendering -include Nanoc3::Helpers::XMLSitemap
@@ -1,21 +0,0 @@
-# Monkey patch Nanoc::Helpers::Filtering -#require 'coderay' - -module Nanoc3::Helpers::Filtering - - def highlight(syntax, &block) - data = capture(&block).strip - # Reconvert <% %> - data.gsub! /</, '<' - data.gsub! />/, '>' - data.gsub! /<%/, '<%' - data.gsub! /%>/, '%>' - #filtered_data = CodeRay.scan(data.strip, syntax).div(:line_numbers => :inline, :tab_width => 2, :css =>:class) - filtered_data = "<notextile>\n<div class='#{syntax}'><pre><code>"+data+"</code></pre></div></notextile>" - buffer = eval('_erbout', block.binding) - buffer << filtered_data - end - -end - -include Nanoc3::Helpers::Filtering
@@ -1,132 +0,0 @@
-module SiteUtils - - def write_tag_page(dir, tag, count) - meta = {} - meta[:title] = "Tag: #{tag}" - meta[:type] = 'page' - meta[:filters_pre] = ['erb'] - meta[:feed] = "/tags/#{tag}/" - meta[:feed_title] = "Tag '#{tag}'" - meta[:permalink] = tag - pl = (count == 1) ? ' is' : 's are' - contents = %{ -<p>#{count} item#{pl} tagged with <em>#{tag}</em>:</p> -<ul> - <% articles_tagged_with('#{tag}').each do |a| %> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> - } - # Write html page - write_item dir/"#{tag}.textile", meta, contents - end - - def write_tag_feed_page(dir, tag, format) - f = format.downcase - meta = {} - meta[:title] = "H3RALD - Tag '#{tag}' (#{format} Feed)" - meta[:type] = 'feed' - meta[:permalink] = "tags/#{tag}/#{f}" - contents = %{<%= #{f}_feed(:articles => articles_tagged_with('#{tag}'))%>} - write_item dir/"#{tag}-#{f}.xml", meta, contents - end - - def write_archive_page(dir, name, count) - meta = {} - meta[:title] = "Archive: #{name}" - meta[:type] = 'page' - meta[:filters_pre] = ['erb'] - meta[:permalink] = name.downcase.gsub /\s/, '-' - pl = (count == 1) ? ' was' : 's were' - contents = %{ -<p>#{count} article#{pl} written in <em>#{name}</em>:</p> -<ul> - <% articles_by_month.select{|i| i[0] == "#{name}"}[0][1].each do |a|%> - <%= render 'dated_article', :article => a %> - <% end %> -</ul> - } - # Write file - write_item dir/"#{meta[:permalink]}.textile", meta, contents - end - - def write_item(path, meta, contents) - path.parent.mkpath - (path).open('w+') do |f| - f.print "--" - f.puts meta.to_yaml - f.puts "-----" - f.puts contents - end - end - -end - -module TypoUtils extend SiteUtils - - # Ignored by Nanoc 3 - def get_filter(db, fid) - filter = db[:text_filters].where("id = ?", fid).get(:name).downcase - # Multiple filters are not handled (e.g. markdown smartypants) - filter = filter.split(' ')[0] - # Prepare metadata - case filter - when 'textile' then - return ['redcloth'], 'textile' - when 'markdown' then - return ['redcarpet'], 'markdown' - when 'bbcode' then - return ['bbcode'], 'bbcode' - else - return [], 'txt' - end - end - - def get_tags(keywords=nil) - tags = [] - if keywords then - if keywords.match ',' then - tags = keywords.downcase.split(", ") - else - tags = keywords.downcase.split(" ") - end - end - tags - end - - def get_comments(db, aid) - dataset = db[:feedback].where("article_id = ? && state LIKE '%ham%'", aid) - comments = [] - dataset.each do |c| - comment = {} - comment[:id] = c[:id] - comment[:author] = c[:author] - comment[:body] = c[:body].to_s - comment[:url] = c[:url] - comment[:date] = c[:published_at] - comments << comment - end - comments - end - - def convert_code_blocks(meta, contents) - if contents.match /<typo:code/ then - # troubles if erb filter is enabled! - contents.gsub! /<%/, '<%' - contents.gsub! /%>/, '%>' - contents.gsub!(/<typo:code lang="([a-zA-Z0-9]+)">/, '<% highlight :\1 do %>') - contents.gsub!(/<typo:code>/, '<% highlight :text do %>') - contents.gsub!(/<\/typo:code>/, "<% end %>") - meta['filters_pre'] = ['erb'].concat meta['filters_pre'] - end - contents - end - - def write_page(meta, contents, extension) - path = (meta['type'] == 'article') ? Pathname.new(Dir.pwd)/"content/articles/" : Pathname.new(Dir.pwd)/"content/" - name = "#{meta['permalink']}.#{extension}" - write_item path/name, meta, contents - end - -end -
@@ -0,0 +1,359 @@
+'hastysite import + +() =TAGS +() =TAG-COLUMNS +() =ARCHIVES +() =ARCHIVE-COLUMNS +() =ARTICLES +() =HOME +() =PROJECTS + + +; Populates the ARCHIVE-COLUMNS array containing tags in groups +; of four, suitable for the creation of the archives page. +;( +; ARCHIVES dsort reverse #ARCHIVES +; 0 :count +; () =archcolumn +; ARCHIVES size :acount +; ARCHIVES ( +; =archive +; acount pred @acount +; archive last =arch +; arch /id :archid +; arch /articles size :archcount +; arch /month :month +; () +; archcount %count +; archid %id +; month %month +; =archdata +; count succ @count +; archdata archcolumn append #archcolumn +; (count 4 == acount 0 == or) +; ( +; () +; archcolumn %archives +; ARCHIVE-COLUMNS append #ARCHIVE-COLUMNS +; 0 @count +; () #archcolumn +; ) when +; ) foreach +;) :prepare-archive-data + + +; Populates the TAG-COLUMNS array containing tags in groups +; of four, suitable for the creation of the tags page. +;( +; TAGS dsort #TAGS +; 0 :count +; () =tagcolumn +; TAGS size :tcount +; TAGS ( +; =tag +; tcount pred @tcount +; tag first :tagname +; tag last size :tagcount +; () +; tagname %tag +; tagcount %count +; =tagdata +; count succ @count +; tagdata tagcolumn append #tagcolumn +; (count 4 == tcount 0 == or) +; ( +; () +; tagcolumn %tags +; TAG-COLUMNS append #TAG-COLUMNS +; 0 @count +; () #tagcolumn +; ) when +; ) foreach +;) :prepare-tag-data + + +; Utility operator to format a timestamp into a date +( + int "dddd, d MMMM yyyy" tformat +) :to-date + + +; Create the Archives page. +( + () + "archives/index" %id + "archives.html" %path + ".html" %ext + "Archives" %title + "page" %content-type + ARCHIVES 'last map (/code :a /code :b a b >) sort %archives + ;ARCHIVE-COLUMNS %archive-columns + dup "_archives" swap mustache %contents + dup "page" swap mustache %contents + output-fwrite +) :create-archives-page + +; Create the Projects page +( + () + "projects/index" %id + "projects.html" %path + ".html" %ext + "Projects" %title + "page" %content-type + PROJECTS (?active) sort %projects + dup "projects" swap mustache %contents + output-fwrite +) :create-projects-page + +; Create the Tags page. +;( +; () +; "tags/index" %id +; "tags.html" %path +; ".html" %ext +; "Tags" %title +; "page" %content-type +; TAG-COLUMNS %tag-columns +; dup "_tags" swap mustache %contents +; dup "page" swap mustache %contents +; output-fwrite +;) :create-tags-page + + +; Create a page for a specific archive +;( +; (quot) expect -> =archive +; archive last =archdata +; archdata /month :month +; archdata /articles =articles +; archdata /id :id +; articles +; articles ( +; ((/timestamp swap /timestamp >) sort) +; ((dup /timestamp to-date %date) map) +; ) tap #articles +; articles size :count +; (count 1 ==) +; ("1 article was written") +; ("$1 articles were written" (count) => %) +; if :articles-written +; () +; "archives/$1/index" (id) => % %id +; "archives/$1.html" (id) => % %path +; ".html" %ext +; "page" %content-type +; "Archive: $1" (month) => % %title +; month %month +; articles-written %articles-written +; articles %articles +; dup "_archive" swap mustache %contents +; dup "page" swap mustache %contents +; output-fwrite +;) :create-archive-page + + +; Create a page for a specific tag +;( +; (quot) expect -> =tagdata +; tagdata first :tag +; tagdata last =articles +; articles +; articles ( +; ((/timestamp swap /timestamp >) sort) +; ((dup /timestamp to-date %date) map) +; ) tap #articles +; articles size :count +; (count 1 ==) +; ("1 article is tagged") +; ("$1 articles are tagged" (count) => %) +; if :articles-tagged +; () +; "tags/$1/index" (tag) => % %id +; "tags/$1.html" (tag) => % %path +; tag %tag +; ".html" %ext +; "page" %content-type +; "Tag: $1" (tag) => % %title +; articles-tagged %articles-tagged +; articles %articles +; dup "_tag" swap mustache %contents +; dup "page" swap mustache %contents +; output-fwrite +;) :create-tag-page + +; Group articles by month +( + (dict) expect -> =content + (content ?timestamp) + ( + content /timestamp :ts + ts to-date :date + ts int "yyyyMM" tformat :code + ts int "MMMM yyyy" tformat :month + ts int "MMMM-yyyy" tformat lowercase :id + ; Add to articles + content date %date #content + content ARTICLES append #ARTICLES + (ARCHIVES code dhas?) + ( + ; Add article to existing archive + content ("id" "title" "timestamp" "date") dpick =article + ARCHIVES code dget =archivedata + archivedata /articles =articles + article articles append #articles + archivedata articles %articles #archivedata + ARCHIVES archivedata code dset #ARCHIVES + ) + ( + ; Create new monthly archive + content ("id" "title" "timestamp" "date") dpick ' =article + () + month %month + code %code + article %articles + id %id + =archive + ARCHIVES archive code dset #ARCHIVES + ) if + ) when + content +) :process-timestamp + + +; Group articles by tags +( + (dict) expect -> =content + (content ?tags) + ( + content /tags "|" split =tags + tags ( + :tag + (TAGS tag dhas?) + ( + ; Add article to existing tag + content ("id" "title" "timestamp") dpick =article + TAGS tag dget =tagdata + article tagdata append #tagdata + TAGS tagdata tag dset #TAGS + ) + ( + ; Create new tag + content ("id" "title" "timestamp") dpick ' =article + TAGS article tag dset #TAGS + ) if + ) foreach + ) when + content +) :process-tags + + +; Copy PDF files saved in asset folder +; to the corresponding article output folder. +( + (dict) expect -> =asset + asset /id :id + id "^pdf\/(.+)$" search 1 get :name + asset "output/articles/$1/$1" (name) => % %id #asset + asset output-cp +) :copy-pdf-article-asset + + +; Process a content file applying the appropriate template +; and compiling markdown to HTML if necessary. +( + (dict) expect -> =content + content /id :id + content /content-type :ct + "page" :tpl + (ct "article" ==) ("article" @tpl) when + (ct "project" ==) ("project" @tpl) when + (id "index" ==) (content #HOME "home" @tpl) when + "" :page + "" :contents + content ( + (input-fread @contents content) + ((/ext ".md" ==) (=temp contents temp markdown @contents temp) when) + (contents %contents) + (=temp tpl temp mustache @page temp) + (page %contents) + (( + ((id "^(glyph|ruby-compendium)\/book" match) ()) ;Do not add index.html + ((id "index" !=)("$1/index" (id) => % %id ".html" %ext)) + ) case) + ) tap +) :process-content + + +; Process and generate home page +( + ; Sort articles by timestamp + ARTICLES (/timestamp swap /timestamp >) sort #ARTICLES + ARTICLES first =latest + ARTICLES 1 4 slice =recents + ; Process summary + latest input-fread "/(.+)?<hr/ms" regex 1 get latest markdown :summary + latest summary %summary #latest + latest dup /timestamp to-date %date #latest + ; Process top tags + TAGS ( + dup first :tag + last size :total + (tag total) => + ) map + (last swap last >) sort + 0 9 slice + ( + =data + () + data first %tag + data last %total + ) map + =tags + HOME ( + (latest %latest) + (recents %recents) + (tags %tags) + (=temp temp "home" temp mustache %contents) + (output-fwrite) + ) tap! +) :generate-home + +;;;;; MAIN ;;;;; + +; Process all contents +contents ( + =content + content /id :id + content + (/content-type "project" ==) (content PROJECTS append #PROJECTS content) when + process-tags + process-timestamp + process-content + (id "index" !=) 'output-fwrite when +) foreach + +; Generate tag pages +;prepare-tag-data +;create-tags-page +;TAGS 'create-tag-page foreach + +; Generate archive pages +;prepare-archive-data +create-projects-page +create-archives-page +;ARCHIVES 'create-archive-page foreach + +; Generate home page +generate-home + + + +; Process all assets. +assets ( + dup + ( + ((/id "^pdf\/" match) (copy-pdf-article-asset)) + ((true) (output-cp)) + ) case +) foreach
@@ -0,0 +1,10 @@
+;Builds a site by processing contents and assets. +'hastysite import + +"Preprocessing..." notice +preprocess +"Processing rules.." notice +process-rules +"Postprocessing..." notice +postprocess +"All done." notice
@@ -0,0 +1,8 @@
+;Deletes all temporary and output files. +'hastysite import + +"Cleaning temporary folder..." notice +clean-temp +"Cleaning output folder..." notice +clean-output +"All done." notice
@@ -0,0 +1,22 @@
+;Re-index articles +'hastysite import + +"Indexing articles..." notice + +. :pwd +(. "data.db") => "/" join :store + +(. "output") => "/" join cd + +(store file?) +( + "Deleting search index..." notice + store rm +) when + +"Importing data..." notice +"litestore -s:$1 -d:articles import" (store) => % ! + +pwd cd + +"All done." notice
@@ -0,0 +1,10 @@
+{ + "contents": "contents", + "assets": "assets", + "templates": "templates", + "temp": "temp", + "output": "output", + "scripts": "scripts", + "title": "H3RALD", + "rules": "rules.min" +}
@@ -1,153 +0,0 @@
-require 'rubygems' -require 'extlib' -require 'pathname' -require 'fileutils' -require 'nanoc3' -require "#{Dir.pwd}/lib/utils.rb" - -include SiteUtils - -namespace :site do - - task :clean do - output = Pathname.new(Dir.pwd)/'output' - puts "Deleting all files in output dir..." - output.rmtree - (output/'data').mkpath - end - - task :update => [:tags, :archives, :compile] do - end - - task :compile do - system "nanoc3 co" - end - - task :run do - system "nanoc3 aco -s thin" - end - - task :rebuild => [:clean, :update] do - end - - task :tags do - site = Nanoc3::Site.new('.') - dir = Pathname(Dir.pwd)/'content/tags' - tags = {} - # Collect tag and page data - site.items.each do |p| - next unless p.attributes[:tags] - p.attributes[:tags].each do |t| - if tags[t] - tags[t] = tags[t]+1 - else - tags[t] = 1 - end - end - end - # Write pages - tags.each_pair do |k, v| - unless (dir/"#{k}.textile").exist? && (dir/"#{k}-rss.xml").exist? && (dir/"#{k}-atom.xml").exist? then - puts "Creating tag pages for '#{k}'" - write_tag_page dir, k, v - write_tag_feed_page dir, k, 'RSS' - write_tag_feed_page dir, k, 'Atom' - end - end - # Remove unused tags - dir.children.each do |c| - t = c.basename.to_s.gsub /(-(rss|atom))?\..+$/, '' - unless tags[t] then - puts "Deleting unused tag page '#{c.basename}'" - c.delete - end - end - end - - task :archives do - site = Nanoc3::Site.new('.') - dir = Pathname(Dir.pwd)/'content/archives' - dir.rmtree if dir.exist? - dir.mkpath - m_articles = [] - index = -1 - current_month = "" - # Collect month and page data - articles = site.items.select{|p| p.attributes[:date] && p.attributes[:type] == 'article'}.sort{|a, b| a.attributes[:date] <=> b.attributes[:date]}.reverse - articles.each do |a| - month = a.attributes[:date].strftime("%B %Y") - if current_month != month then - # new month - m_articles << [month, [a]] - index = index + 1 - current_month = month - else - # same month - m_articles[index][1] << a - end - end - # Write pages - m_articles.each do |m| - write_archive_page dir, m[0], m[1].length - end - end - - task :article, :name do |t, args| - raise RuntimeError, "Name not specified" unless args[:name] - raise RuntimeError, "Article name can only contain letters, numbers and dashes" unless args[:name].match /^[a-zA-Z0-9-]+$/ - meta = {} - meta[:permalink] = args[:name] - meta[:title] = nil - meta[:subtitle] = nil - meta[:type] = 'article' - meta[:intro] = " |\n " - meta[:extended_intro] = " |\n " - meta[:tags] = nil - meta[:date] = Time.now - meta[:pdf] = true - file = Pathname.new Dir.pwd/"content/articles/#{meta[:permalink]}.glyph" - raise "File '#{file}' already exists!" if file.exist? - write_item file, meta, "$[document.intro]\n\n" - end - - task :page, :name do |t, args| - raise RuntimeError, "Name not specified" unless args[:name] - raise RuntimeError, "Page name can only contain letters, numbers and dashes" unless args[:name].match /^[a-zA-Z0-9-]+$/ - meta = {} - meta[:permalink] = args[:name] - meta[:title] = "" - meta[:type] = 'page' - file = Pathname.new Dir.pwd/"content/#{meta[:permalink]}.textile" - raise "File '#{file}' already exists!" if file.exist? - write_item file, meta, '' - end - - task :project, :name do |t, args| - raise RuntimeError, "Name not specified" unless args[:name] - raise RuntimeError, "Project name can only contain letters, numbers and dashes" unless args[:name].match /^[a-zA-Z0-9-]+$/ - meta = {} - meta[:permalink] = args[:name] - meta[:title] = "" - meta[:github] = args[:name] - meta[:status] = "Active" - meta[:version] = "0.1.0" - meta[:type] = 'project' - meta[:links] = [{"Documentation" => "http://rubydoc.info/gems/#{args[:name]}/#{meta[:version]}/frames"}, - {"Download" => "https://rubygems.org/gems/#{args[:name]}"}, - {"Source" => "http://github.com/h3rald/#{args[:name]}/tree/master"}, - {"Tracking" => "http://github.com/h3rald/#{args[:name]}/issues"}] - contents = %{ -<%= render 'project_data', :tag => '#{args[:name]}' %> - -h3. Installation - -h3. Usage - -<%= render 'project_updates', :tag => '#{args[:name]}' %> - } - file = Pathname.new Dir.pwd/"content/#{meta[:permalink]}.textile" - raise "File '#{file}' already exists!" if file.exist? - write_item file, meta, contents - end - -end
@@ -1,46 +0,0 @@
-require 'rubygems' -require 'extlib' -require 'pathname' -require 'fileutils' -begin - require 'mysql' - require 'sequel' -rescue Exception => e -end -require 'yaml' -require "#{Dir.pwd}/lib/utils.rb" - -include TypoUtils - -namespace :typo do - - task :migrate, :db, :usr, :pwd, :host do |t, args| - raise RuntimeError, "Please provide :db, :usr, :pass" unless args[:db] && args[:usr] && args[:pwd] - db = Sequel.mysql args[:db], :user => args[:usr], :password => args[:pwd], :host => args[:host] || 'localhost' - # Remove all existing pages! - dir = Pathname.new(Dir.pwd/'content') - dir.rmtree if dir.exist? - dir.mkpath - # Prepare page data - dataset = db[:contents].where("state = 'published' || type = 'Page'") - total = dataset.count - c = 1 - total_tags = [] - dataset.each do |a| - puts "Migrating [#{c}/#{total}]: '#{a[:title]}'..." - meta = {} - meta['tags'] = get_tags a[:keywords] - meta['comments'] = get_comments db, a[:id] - meta['permalink'] = a[:permalink] || a[:name] - meta['title'] = a[:title] - meta['type'] = a[:type].downcase - meta['date'] = a[:published_at] - meta['toc'] = true - meta['filters_pre'], extension = get_filter db, a[:text_filter_id] - contents = convert_code_blocks meta, a[:body]+a[:extended].to_s - write_page meta, contents, extension - c = c+1 - end - end - -end
@@ -0,0 +1,56 @@
+<div class="container archives"> + <div class="input-group archives-search"> + <input type="text" class="form-input search-input" placeholder="Search articles..."> + <button class="btn input-group-btn clear-button d-none"><i class="ent ent-circle-with-cross"></i></button> + <button class="btn btn-primary input-group-btn search-button"><i class="ent ent-magnifying-glass"></i></button> + </div> + <div class="loading clearfix"></div> + <div class="no-search-results d-none clearfix"> + <div class="empty"> + <p class="empty-title h5">No results found</p> + <p class="empty-subtitle">There are no articles matching your query.</p> + <div class="empty-action"> + <button class="btn btn-primary archives-button">Go back</button> + </div> + </div> + </div> + <div class="search-results d-none clearfix"> + Results go here... + </div> + <div class="timeline clearfix d-none"> + {{#archives}} + <div class="timeline-item"> + <div class="timeline-left"> + <div class="timeline-icon icon-lg"> + <i class="ent ent-calendar"></i> + </div> + </div> + <div class="timeline-content"> + <div class="tile"> + <div class="tile-content"> + <p class="tile-subtitle">{{month}}</p> + </div> + </div> + </div> + </div> + {{#articles}} + <div class="timeline-item"> + <div class="timeline-left"> + <div class="timeline-icon"> + </div> + </div> + <div class="timeline-content"> + <div class="tile"> + <div class="tile-content"> + <p class="tile-subtitle"> + {{date}} — <a href="{{id}}">{{title}}</a> + </p> + </div> + </div> + </div> + </div> + {{/articles}} + {{/archives}} + </div> +</div> +<script src="/js/search.js" type="text/javascript"></script>
@@ -0,0 +1,21 @@
+ <head> + <title>{{title}} - H3RALD</title> + <meta charset="utf-8" /> + <meta name="author" content="Fabio Cevasco" /> + <meta name="robots" content="all, follow" /> + <meta name="Revisit-After" content="2 Days" /> + <meta name="description" content="H3RALD - Fabio Cevasco's Web Site" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> + <meta name="keywords" content="{{keywords}}" /> + <link rel="shortcut icon" href="/favicon.png" type="image/png" /> + <meta content="44.388041;9.073248" name="ICBM" /> + <link rel="stylesheet" type="text/css" href="/styles/entypo.css" /> + <link rel="stylesheet" type="text/css" href="/styles/fonts.css" /> + <link rel="stylesheet" type="text/css" href="/styles/spectre.min.css" /> + <link rel="stylesheet" type="text/css" href="/styles/spectre-exp.min.css" /> + <link rel="stylesheet" type="text/css" href="/styles/atom-one-light.css" /> + <link rel="stylesheet" type="text/css" href="/styles/style.css" /> + <script src="/js/es6-shim.min.js" type="text/javascript"></script> + <script src="/js/axios.min.js" type="text/javascript"></script> + <script src="/js/highlight.pack.js" type="text/javascript"></script> + </head>
@@ -0,0 +1,9 @@
+<header class="navbar"> + <section class="navbar-section"></section> + <section class="navbar-center"> + <a href="/archives" class="navbar-link navbar-left">archives</a> + <a href="/" class="h3rald h3rald-header"> </a> + <a href="/projects" class="navbar-link navbar-right">projects</a> + </section> + <section class="navbar-section"></section> +</header>
@@ -0,0 +1,6 @@
+<header class="col-md-9"> + <h2>{{title}}</h2> + {{#subtitle}} + <h3>{{subtitle}}</h3> + {{/subtitle}} +</header>
@@ -0,0 +1,37 @@
+ <div class="card project-card"> + <div class="card-header"> + <div class="card-title h5"> + {{#active}} + <small class="label label-success">active</small> + {{/active}} + {{#inactive}} + <small class="label label-warning">inactive</small> + {{/inactive}} + {{title}} + <span class="badge" data-badge="v{{version}}"></span> + </div> + </div> + <div class="card-body"> + {{summary}} + </div> + <div class="card-footer"> + {{#home}} + <a href="{{home}}" class="btn btn-link"> + info + </a> + {{/home}} + {{#github}} + <a href="https://github.com/h3rald/{{github}}" class="btn btn-link"> + source + </a> + <a href="https://github.com/h3rald/{{github}}/issues" class="btn btn-link"> + issues + </a> + {{/github}} + {{#docs}} + <a href="{{docs}}" class="btn btn-link"> + docs + </a> + {{/docs}} + </div> + </div>
@@ -0,0 +1,6 @@
+<p>{{articles-tagged}} <em>{{tag}}</em>:</p> +<ul> + {{#articles}} + <li><a href="/articles/{{id}}/">{{title}}</a> — {{date}}</li> + {{/articles}} +</ul>
@@ -0,0 +1,26 @@
+<!DOCTYPE html> +<html lang="en"> + {{> _head}} + <body> + <div id="wrap"> + {{> _header}} + <main class="container"> + <article class="{{content-type}}"> + <div class="row"> + {{> _page_header}} + <time datetime="{{date-iso8601}}"><i class="ent ent-calendar"></i> {{date}}</time> + </div> + <div class="body-text" class="hyphenate"> + {{{contents}}} + </div> + </article> + </main> + {{> _footer}} + </div> + <script src="/js/highlight.pack.js"></script> + <script> + hljs.configure({tabReplace: ' '}); + hljs.initHighlightingOnLoad(); + </script> + </body> +</html>
@@ -0,0 +1,142 @@
+<!DOCTYPE html> +<html lang="en"> + {{> _head}} + <body> + <div id="wrap"> + {{> _header}} + <main id="main" class="container"> + <div class="columns"> + <div class="column col-xs-12 col-md-6"> + <article> + <h2><a href="/{{latest.id}}">{{latest.title}}</a></h2> + <p class="subtitle"> + {{latest.subtitle}} + </p> + <time><i class="ent ent-calendar"></i> {{latest.date}}</time></p> + <section class="body-text"> + {{{latest.summary}}} + <p><a href="/articles/litestore/">Continue reading →</a></p> + </section> + </article> + <div class="divider text-center" data-content="more recent articles"></div> + {{#recents}} + <article> + <h4><a href="/{{id}}">{{title}}</a></h4> + <p class="subtitle"> + {{subtitle}} + </p> + <time><i class="ent ent-calendar"></i> {{date}}</time></p> + </article> + {{/recents}} + </div> + <div class="column col-xs-12 col-md-6"> + <div class="panel featured"> + <div class="panel-header"> + featured articles + </div> + <div class="panel-body"> + <article id="a_randal-schwartz"> + <header> + <h3><a href="/articles/randal-schwartz/">A pizza with Randal Schwartz</a></h3> + <p class="subtitle">Talking about open source, programming, emacs and technical writing</p> + </header> + </article> + <article id="a_herald-vim-color-scheme"> + <header> + <h3><a href="/articles/herald-vim-color-scheme/">Herald (Vim Color Scheme)</a></h3> + <p class="subtitle">My very own VIM color scheme. Featuring 256, 16 and 8 color support, high readability and... pretty colors!</p> + </header> + </article> + <article id="a_10-programming-languages"> + <header> + <h3><a href="/articles/10-programming-languages/">10 programming languages worth checking out</a></h3> + <p class="subtitle">A quick comparison of 10 non-mainstream programming languages</p> + </header> + </article> + </div> + </div> + <div class="v-spacer"></div> + <!-- + <div class="panel featured"> + <div class="panel-header"> + top tags + </div> + <div class="panel-body chips"> + {{#tags}} + <label class="chip"> + <figure class="avatar avatar-xs" data-initial="{{total}}"></figure> + <a href="/tags/{{tag}}/">{{tag}}</a> + </label> + {{/tags}} + </div> + <div class="panel-footer"> + </div> + </div> + <div class="v-spacer"></div> + --> + <div class="panel featured"> + <div class="panel-header"> + featured projects + </div> + <div class="panel-body"> + <div class="columns"> + <div class="column col-xs-12 col-md-6"> + <h3><a href="https://min-lang.org/">min</a></h3> + <p>A tiny concatenative programming language and system shell, providing a small standard library with regular expression support, cryptography, file management, and more.</p> + </div> + <div class="column col-xs-12 col-md-6"> + <h3><a href="/hastyscribe/">HastyScribe</a></h3> + <p>A self-contained Markdown to HTML compiler based on discount but including additional features such as support for snippets, custom fields, simple macros and more.</p> + </div> + </div> + </div> + </div> + <div class="v-spacer"></div> + <div class="panel featured"> + <div class="panel-header"> + credits + </div> + <div class="panel-body"> + <p>Special thanks to the following people, who made this web site possible:</p> + <ul> + <li> + <a href="http://scholarsfonts.net/">David J. Perry</a>, who designed the <a href="http://scholarsfonts.net/cardofnt.html">Cardo</a> font used for the H3RALD logo. + </li> + <li> + <a href="https://www.theleagueofmoveabletype.com/members/matt">Matt McInerney</a>, who designed the <a href="https://www.theleagueofmoveabletype.com/raleway">Raleway</a> font, used throughout this web site. + </li> + <li> + <a href="https://twitter.com/picturepan2">Yan Zhu</a>, the creator of the <a href="https://picturepan2.github.io/spectre/">Spectre</a> CSS framework. + </li> + <li> + <a href="http://www.danielbruce.se/">Daniel Bruce</a>, designer of the <a href="http://www.entypo.com/">Entypo</a> font, used for the icons on this web site. + </li> + </ul> + </div> + </div> + <div class="v-spacer"></div> + <div class="panel featured contact-list"> + <div class="panel-header"> + contact + </div> + <div class="panel-body"> + <p>This site was made by Fabio Cevasco. For more information, see the <a href="/about/">About</a> page. To contact me, use the links below.</p> + <ul> + <li><i class="ent ent-mail"></i> <a href='mailto:h3rald@h3rald.com'>E-mail</a></li> + <li><i class="ent ent-linkedin"></i> <a href="https://www.linkedin.com/in/fabiocevasco" rel="me">LinkedIn</a></li> + <li><i class="ent ent-twitter"></i> <a href="http://twitter.com/h3rald" rel="me">Twitter</a></li> + <li><i class="ent ent-pin"></i> <a href="http://pinboard.in/u:h3rald/" rel="me">Pinboard</a></li> + <li><i class="ent ent-instagram"></i> <a href="http://instagram.com/h3rald/" rel="me">Instagram</a></li> + <li><i class="ent ent-github"></i> <a href="https://github.com/h3rald" rel="me">Github</a></li> + <li><i class="ent ent-flickr"></i> <a href="https://www.flickr.com/photos/h3rald/" rel="me">Flickr</a></li> + <li><i class="ent ent-foursquare"></i> <a href="http://foursquare.com/h3rald" rel="me">Foursquare</a></li> + </ul> + </div> + </div> + </div> + </div> + </main> + {{> _footer}} + </div> + </body> +</html>
@@ -0,0 +1,20 @@
+<!DOCTYPE html> +<html lang="en"> + {{> _head}} + <body> + <div id="wrap"> + {{> _header}} + <main id="main" class="container"> + <article class="{{content-type}}"> + <div class="row"> + {{> _page_header}} + </div> + <div id="body-text" class="hyphenate"> + {{{contents}}} + </div> + </article> + </main> + {{> _footer}} + </div> + </body> +</html>
@@ -0,0 +1,46 @@
+<!DOCTYPE html> +<html lang="en"> + {{> _head}} + <body> + <div id="wrap"> + {{> _header}} + <main class="container"> + <article class="{{content-type}}"> + <div class="row"> + {{> _page_header}} + </div> + {{#github}} + <div class="card project-card"> + <div class="card-footer"> + <a href="https://github.com/h3rald/{{github}}" class="btn btn-link"> + source + </a> + <a href="https://github.com/h3rald/{{github}}/issues" class="btn btn-link"> + issues + </a> + {{#docs}} + <a href="{{docs}}" class="btn btn-link"> + docs + </a> + {{/docs}} + <br/> + <img src="https://img.shields.io/github/release/h3rald/{{github}}/all.svg" style="vertical-align: middle;"/> + <img src="https://img.shields.io/github/license/h3rald/{{github}}.svg" style="vertical-align: middle;"/> + <img src="https://img.shields.io/github/last-commit/h3rald/{{github}}.svg" style="vertical-align: middle;"/> + </div> + </div> + {{/github}} + <div class="body-text" class="hyphenate"> + {{{contents}}} + </div> + </article> + </main> + {{> _footer}} + </div> + <script src="/js/highlight.pack.js"></script> + <script> + hljs.configure({tabReplace: ' '}); + hljs.initHighlightingOnLoad(); + </script> + </body> +</html>
@@ -0,0 +1,22 @@
+<!DOCTYPE html> +<html lang="en"> + {{> _head}} + <body> + <div id="wrap"> + {{> _header}} + <main id="main" class="container"> + <article class="projects"> + <div class="row"> + {{> _page_header}} + </div> + <div class="body-text hyphenate"> + {{#projects}} + {{> _project}} + {{/projects}} + </div> + </article> + </main> + {{> _footer}} + </div> + </body> +</html>
@@ -1,8 +0,0 @@
-#!/usr/bin/env bash -mv content/hastystyles/images/hastyscribe.svg content/hastystyles/images/hastyscribe-logo.svg -mv content/hastystyles/styles/hastyscribe.css content/hastystyles/styles/hastyscribe-styles.css -rake site:tags -rake site:archives -nanoc co -mv content/hastystyles/images/hastyscribe-logo.svg content/hastystyles/images/hastyscribe.svg -mv content/hastystyles/styles/hastyscribe-styles.css content/hastystyles/styles/hastyscribe.css