Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Initial commit

  • Loading branch information...
commit 0406ae138a5fad2bc04a64e2e4b6c55c34d5fb52 0 parents
@robert-stuttaford authored
Showing with 11,963 additions and 0 deletions.
  1. +8 −0 .gitignore
  2. +18 −0 Gemfile
  3. +4 −0 Guardfile
  4. +78 −0 README.md
  5. +61 −0 app/app.js
  6. +33 −0 app/compiler.js.erb
  7. +9 −0 app/config.js
  8. +48 −0 app/model/modelUtil.js
  9. +52 −0 app/model/modelUtil_spec.coffee
  10. +63 −0 app/model/modelUtil_spec.js
  11. +56 −0 app/services/configService.js
  12. +29 −0 app/ui/common/_common.scss
  13. +11 −0 app/ui/common/common.soy
  14. +20 −0 app/ui/common/common.soy.js
  15. +14 −0 app/ui/main.js
  16. +14 −0 app/ui/scss/_defaults.scss
  17. +11 −0 app/ui/scss/_fonts.scss
  18. +55 −0 app/ui/scss/_html5reset.scss
  19. +83 −0 app/ui/scss/_mixins.scss
  20. +18 −0 app/ui/style.scss
  21. +6 −0 app/ui/widget/_widget.scss
  22. +55 −0 app/ui/widget/widget.js
  23. +10 −0 app/ui/widget/widget.soy
  24. +20 −0 app/ui/widget/widget.soy.js
  25. +26 −0 build/404.html
  26. +26 −0 build/422.html
  27. +26 −0 build/500.html
  28. BIN  build/apple-touch-icon-114x114-precomposed.png
  29. BIN  build/apple-touch-icon-57x57-precomposed.png
  30. BIN  build/apple-touch-icon-72x72-precomposed.png
  31. BIN  build/apple-touch-icon-precomposed.png
  32. BIN  build/apple-touch-icon.png
  33. +25 −0 build/crossdomain.xml
  34. +17 −0 build/debug.html
  35. BIN  build/favicon.ico
  36. +43 −0 build/humans.txt
  37. +17 −0 build/index.html
  38. +5 −0 build/robots.txt
  39. +17 −0 config.rb
  40. +32 −0 deploy
  41. +173 −0 externs/modernizr-2.0.6.externs.js
  42. +9 −0 features/app.feature
  43. +11 −0 features/step_definitions/basic_steps.rb
  44. +16 −0 features/support/env.rb
  45. +24 −0 images
  46. +1 −0  public/.gitignore
  47. +11 −0 public/config.ru
  48. +120 −0 public/css/style.css
  49. +3 −0  public/data/config.json
  50. +17 −0 public/debug.erb
  51. +17 −0 public/debug_build.erb
  52. +17 −0 public/dev.erb
  53. +116 −0 public/externsgen.erb
  54. BIN  public/fonts/droidsans-bold-webfont.eot
  55. +250 −0 public/fonts/droidsans-bold-webfont.svg
  56. BIN  public/fonts/droidsans-bold-webfont.ttf
  57. BIN  public/fonts/droidsans-bold-webfont.woff
  58. BIN  public/fonts/droidsans-webfont.eot
  59. +250 −0 public/fonts/droidsans-webfont.svg
  60. BIN  public/fonts/droidsans-webfont.ttf
  61. BIN  public/fonts/droidsans-webfont.woff
  62. BIN  public/img/ajax-loader.gif
  63. +98 −0 public/index.erb
  64. +1,583 −0 public/js/app.debug.js
  65. +45 −0 public/js/app.js
  66. +7,685 −0 public/js/app.map
  67. +4 −0 public/js/modernizr-2.0.6.js
  68. +17 −0 public/production.erb
  69. +17 −0 public/production_build.erb
  70. +41 −0 public/spec.erb
  71. +18 −0 public/spec_helpers/jquery.js
  72. +217 −0 public/spec_helpers/jquery_matchers.js
  73. +54 −0 public/spec_helpers/load_fixture.js
  74. +110 −0 public/spec_helpers/matchers.js
  75. +26 −0 public/spec_helpers/spec_helper.js
  76. +3 −0  serve
8 .gitignore
@@ -0,0 +1,8 @@
+.bundle
+.DS_Store
+.idea
+.sass-cache/
+closure-library
+jasmine
+bin
+Gemfile.lock
18 Gemfile
@@ -0,0 +1,18 @@
+source 'http://rubygems.org'
+
+# google closure compiler and templates compiler
+gem 'closure'
+
+# sass/compass
+gem 'compass'
+gem 'sassy-buttons'
+
+# so that jasmine tests are automatically compiled to js
+gem 'guard-coffeescript'
+gem 'rb-fsevent'
+
+# cucumber and capybara, and a drb server for quicker cucumber execution
+gem 'cucumber'
+gem 'capybara'
+gem 'capybara-webkit'
+gem 'spork', '~> 0.9.0.rc'
4 Guardfile
@@ -0,0 +1,4 @@
+# A sample Guardfile
+# More info at https://github.com/guard/guard#readme
+
+guard 'coffeescript', :input => 'app'
78 README.md
@@ -0,0 +1,78 @@
+# Closure-Script Boilerplate
+
+Google Closure development with the [Closure-Script](https://github.com/dturnbull/closure-script) gem, [Jasmine](https://github.com/pivotal/jasmine) for BDD style unit testing, and [Cucumber](http://cukes.info/) with [Capybara](https://github.com/jnicklas/capybara) for functional/integration/acceptance testing. Also included are Sass/Compass with the HTML5 Boilerplate all sassed up, and Guard for Coffeescript compilation, so that Jasmine tests can be written with Coffeescript.
+
+I use this on OSX Lion. Prerequisites: Ruby 1.9.2 (haven't tested 1.8 or JRuby) via `rvm` and `homebrew`.
+
+## Installation
+
+Clone me:
+
+ git clone https://github.com/robert-stuttaford/Closure-Script-Boilerplate.git
+ cd Closure-Script-Boilerplate
+
+Get the Closure Library:
+
+ svn checkout http://closure-library.googlecode.com/svn/trunk closure-library
+
+Get Jasmine:
+
+ git clone https://github.com/pivotal/jasmine.git
+
+I actually have both of these in a separate frameworks folder and I've simply symlinked these into each project.
+
+Install the QT library from Nokia, capybara-webkit requires this (see <https://github.com/thoughtbot/capybara-webkit/wiki/Installing-QT>):
+
+ brew install qt
+
+Install gems:
+
+ bundle install --binstubs
+
+Start the Rack server:
+
+ ./serve
+
+Visit `localhost:3000` to see the development dashboard.
+
+If you're writing Jasmine tests, be sure to start guard:
+
+ guard
+
+And if you're writing any CSS, be sure to start compass:
+
+ compass watch
+
+## Development dashboard
+
+This is a two column page with useful links down the left and an iframe for your app and Jasmine tests on the right.
+
+The left column has a couple sections:
+
+* A big refresh button, mapped to keyboard shortcut 'r'. This refreshes the iframe.
+* Links to Jasmine specs:
+ * A link to run all the _spec.js files found inside `app/` (regardless of depth) at the same time.
+ * A dynamic list of all those _spec.js files, nicely formatted for readability. My own project uses short filenames, so I chose to allow more than one spec per line for compactness.
+* Links to view the app itself:
+ * Development version (uncompiled)
+ * Compiled debug version, and the compile-on-demand debug version, which produces the app.debug.js used by the compiled version.
+ * Compiled production version, and the compile-on-demand production version, which produces the app.js used by the compiled version.
+* Tools and reference:
+ * Externs generator: load up a 3rd-party javascript file, enter which objects you want externs for, and it'll produce the externs for you. Drop the contents into a file named (file).externs.js into the externs folder, and the compiler will use it. Credit goes to Guido Tapa on the Closure-Library Google Group list for this.
+ * Links to the local Closure demos, and the Closure Library and Templates API documentation on the web. These open in a new tab.
+
+## Cucumber/Capybara testing
+
+Start the `spark` daemon:
+
+ spork
+
+Then run `cucumber --drb` to run your cucumber integration tests. See `features/app.feature` for a sample test. See <http://cheat.errtheblog.com/s/capybara> for a quick reference and <https://github.com/jnicklas/capybara> for the full story.
+
+## Deployment
+
+To take advantage of the image compression, install `optipng` and `jpegtrans`:
+
+ brew install optipng jpeg
+
+Alter the deploy script to suit your own requirements. I target this script in my Jenkins CI build configuration.
61 app/app.js
@@ -0,0 +1,61 @@
+goog.provide('app.App');
+
+// require this so that the jasmine tests work
+goog.require('app.model.util');
+goog.require('app.services.ConfigService');
+goog.require('app.ui.common.templates');
+goog.require('app.ui.Widget');
+goog.require('app.ui.Main');
+goog.require('goog.events');
+goog.require('goog.events.EventTarget');
+goog.require('goog.style');
+
+/**
+ * The App application.
+ * @constructor
+ * @extends {goog.events.EventTarget}
+ */
+app.App = function() {
+ goog.events.EventTarget.call(this);
+
+ var div = document.createElement('div');
+ div.style.cssText = 'height:100%';
+ div.innerHTML = app.ui.common.templates.app();
+ document.body.appendChild(div);
+
+ /** @type {app.services.ConfigService} */
+ var configService = new app.services.ConfigService();
+ goog.events.listenOnce(configService, app.services.ConfigService.EventType.CONFIG_LOADED, this.startUp_, false, this);
+ configService.loadConfig();
+
+ /**
+ * The Main view
+ * @type {app.ui.Main}
+ * @private
+ */
+ this.main_ = new app.ui.Main();
+ this.main_.decorate(goog.dom.getElement('main'));
+};
+goog.inherits(app.App, goog.events.EventTarget);
+
+/**
+ * Starts App after loading the config
+ * @param {goog.events.Event=} opt_event Event.
+ * @private
+ */
+app.App.prototype.startUp_ = function(opt_event) {
+ /**
+ * The Widget
+ * @type {app.ui.Widget}
+ * @private
+ */
+ this.widget_ = new app.ui.Widget();
+ this.main_.addChild(this.widget_, true);
+};
+
+/** Start the app */
+app.App.start = function() {
+ app.App.app = new app.App();
+};
+
+goog.exportSymbol('start', app.App.start);
33 app/compiler.js.erb
@@ -0,0 +1,33 @@
+<%
+args = %w{
+ --summary_detail_level 3
+ --ns app.App
+}
+compiled = %w{
+ --compilation_level ADVANCED_OPTIMIZATIONS
+ --warning_level VERBOSE
+ --language_in ECMASCRIPT5_STRICT
+}
+compiled += Dir.glob( expand_path('../externs/*.externs.js') ).map { |x| ['--externs',x] }
+compiled.flatten!
+
+args += case query_string
+when 'build' then compiled + %w{
+ --js_output_file ../public/js/app.js
+ --create_source_map ../public/js/app.map
+}
+when 'debug' then compiled + %w{
+ --js_output_file ../public/js/app.debug.js
+ --debug true
+ --formatting PRETTY_PRINT
+}
+else;[];end
+goog.soy_to_js %w{
+ --cssHandlingScheme goog
+ --shouldGenerateJsdoc
+ --shouldProvideRequireSoyNamespaces
+ --outputPathFormat {INPUT_DIRECTORY}{INPUT_FILE_NAME}.js
+ **/*.soy
+}
+@response = goog.compile(args).to_response
+%>
9 app/config.js
@@ -0,0 +1,9 @@
+goog.provide('app.Config');
+
+/**
+ * Public Configuration Store
+ * @type {Object}
+ */
+app.Config = {
+ CONFIG_VALUE: ''
+};
48 app/model/modelUtil.js
@@ -0,0 +1,48 @@
+goog.provide('app.model.util');
+
+/** @enum {string} */
+app.model.ID_RANGE = {
+ ALL: 'all',
+ NONE: 'none'
+};
+
+/**
+ * Expand a set of numerical ID ranges to full lists of distinct IDs
+ * @param {string} range
+ * @return {?string}
+ */
+app.model.util.expandIDs = function (range) {
+ if ( range == null || range.search( /^(all|none|[0-9,-]+)$/i ) == -1 ) {
+ return null;
+ }
+ if ( range.indexOf( '-' ) == -1 ) {
+ return range.toLowerCase();
+ }
+ /** @type {Array.<string>} */
+ var items = range.replace( / /g, '' ).split( ',' );
+
+ /** @type {Array} */
+ var newItems = goog.array.map(items,function (/** @type {string} */item) {
+ if ( item.indexOf( '-' ) === -1 ) {
+ return item;
+ }
+ /** @type {Array.<string>} */
+ var bounds = item.split( '-' );
+ /** @type {number} */
+ var lower = parseInt(bounds[ 0 ], 10);
+ /** @type {number} */
+ var upper = parseInt(bounds[ 1 ], 10);
+ if ( lower > upper ) {
+ return null;
+ }
+ lower--;
+ upper++;
+ /** @type {Array.<string>} */
+ var newSet = [];
+ while ( ++lower < upper ) {
+ newSet.push( lower );
+ }
+ return newSet.join( ',' );
+ });
+ return newItems.join( ',' );
+};
52 app/model/modelUtil_spec.coffee
@@ -0,0 +1,52 @@
+describe 'Model Util', ->
+
+ describe 'expand ids', ->
+
+ expandIDs = null
+
+ beforeEach ->
+ expandIDs = app.model.util.expandIDs
+
+ it 'returns null if given null', ->
+ expect( expandIDs() ).toBe null
+
+ it 'returns null if not given "all", "none", or any combination of comma-delimited numbers and/or ranges of numbers', ->
+ expect( expandIDs('bad data') ).toBe null
+ expect( expandIDs('all,none') ).toBe null
+ expect( expandIDs('all,1,2,3') ).toBe null
+
+ it 'returns what it was given if there are no ranges present', ->
+ expect( expandIDs( '1,2,3' ) ).toBe '1,2,3'
+ expect( expandIDs( 'all' ) ).toBe 'all'
+ expect( expandIDs( 'none' ) ).toBe 'none'
+
+ it 'returns expanded list if given a range', ->
+ expect( expandIDs('1-4') ).toBe '1,2,3,4'
+ expect( expandIDs('10-14') ).toBe '10,11,12,13,14'
+
+ it 'returns all numbers, ranges expanded, if given any combination of comma-delimited numbers and/or ranges of numbers', ->
+ expect( expandIDs('1,2,3-6') ).toBe '1,2,3,4,5,6'
+ expect( expandIDs('1-3,4,5,6') ).toBe '1,2,3,4,5,6'
+ expect( expandIDs('1-3,4-6') ).toBe '1,2,3,4,5,6'
+
+ describe 'filter items by ids', ->
+
+ filterItemsByIDs = null
+
+ beforeEach ->
+ filterItemsByIDs = app.model.util.filterItemsByIDs
+
+ it 'returns empty collection if given nulls', ->
+ expect( goog.object.getCount filterItemsByIDs(null,null) ).toBe 0
+
+ it 'returns empty collection if given NONE', ->
+ expect( goog.object.getCount filterItemsByIDs(app.model.ID_RANGE.NONE,{}) ).toBe 0
+
+ it 'returns clone of passed in collection if given ALL', ->
+ expect( goog.object.getCount filterItemsByIDs(app.model.ID_RANGE.ALL,{1:'foo'}) ).toBe 1
+
+ it 'returns correct items in collection when passed ids', ->
+ items = {1:'foo',2:'bar'}
+ filteredItems = filterItemsByIDs('1',items)
+ expect( goog.object.getCount filteredItems ).toBe 1
+ expect( filteredItems[1] ).toBe items[1]
63 app/model/modelUtil_spec.js
@@ -0,0 +1,63 @@
+(function() {
+
+ describe('Model Util', function() {
+ describe('expand ids', function() {
+ var expandIDs;
+ expandIDs = null;
+ beforeEach(function() {
+ return expandIDs = app.model.util.expandIDs;
+ });
+ it('returns null if given null', function() {
+ return expect(expandIDs()).toBe(null);
+ });
+ it('returns null if not given "all", "none", or any combination of comma-delimited numbers and/or ranges of numbers', function() {
+ expect(expandIDs('bad data')).toBe(null);
+ expect(expandIDs('all,none')).toBe(null);
+ return expect(expandIDs('all,1,2,3')).toBe(null);
+ });
+ it('returns what it was given if there are no ranges present', function() {
+ expect(expandIDs('1,2,3')).toBe('1,2,3');
+ expect(expandIDs('all')).toBe('all');
+ return expect(expandIDs('none')).toBe('none');
+ });
+ it('returns expanded list if given a range', function() {
+ expect(expandIDs('1-4')).toBe('1,2,3,4');
+ return expect(expandIDs('10-14')).toBe('10,11,12,13,14');
+ });
+ return it('returns all numbers, ranges expanded, if given any combination of comma-delimited numbers and/or ranges of numbers', function() {
+ expect(expandIDs('1,2,3-6')).toBe('1,2,3,4,5,6');
+ expect(expandIDs('1-3,4,5,6')).toBe('1,2,3,4,5,6');
+ return expect(expandIDs('1-3,4-6')).toBe('1,2,3,4,5,6');
+ });
+ });
+ return describe('filter items by ids', function() {
+ var filterItemsByIDs;
+ filterItemsByIDs = null;
+ beforeEach(function() {
+ return filterItemsByIDs = app.model.util.filterItemsByIDs;
+ });
+ it('returns empty collection if given nulls', function() {
+ return expect(goog.object.getCount(filterItemsByIDs(null, null))).toBe(0);
+ });
+ it('returns empty collection if given NONE', function() {
+ return expect(goog.object.getCount(filterItemsByIDs(app.model.ID_RANGE.NONE, {}))).toBe(0);
+ });
+ it('returns clone of passed in collection if given ALL', function() {
+ return expect(goog.object.getCount(filterItemsByIDs(app.model.ID_RANGE.ALL, {
+ 1: 'foo'
+ }))).toBe(1);
+ });
+ return it('returns correct items in collection when passed ids', function() {
+ var filteredItems, items;
+ items = {
+ 1: 'foo',
+ 2: 'bar'
+ };
+ filteredItems = filterItemsByIDs('1', items);
+ expect(goog.object.getCount(filteredItems)).toBe(1);
+ return expect(filteredItems[1]).toBe(items[1]);
+ });
+ });
+ });
+
+}).call(this);
56 app/services/configService.js
@@ -0,0 +1,56 @@
+goog.provide('app.services.ConfigService');
+
+goog.require('app.Config');
+goog.require('goog.events');
+goog.require('goog.events.EventTarget');
+goog.require('goog.net.XhrIo');
+
+/**
+ * The App Resource Service.
+ * @constructor
+ * @extends {goog.events.EventTarget}
+ */
+app.services.ConfigService = function() {
+ goog.events.EventTarget.call(this);
+};
+goog.inherits(app.services.ConfigService, goog.events.EventTarget);
+
+/**
+ * Fetch configuration data.
+ */
+app.services.ConfigService.prototype.loadConfig = function() {
+ var xhr = new goog.net.XhrIo();
+
+ var self = this;
+ goog.events.listen(xhr, goog.net.EventType.COMPLETE, function(e) {
+
+ goog.style.showElement(goog.dom.getElement('loadingIndicator'), false);
+
+ var xhr = /** @type {goog.net.XhrIo} */ (e.target);
+ /** @type {Object|null|undefined} */
+ var obj = xhr.getResponseJson();
+ /** @type {string} */
+ var val;
+
+ // contrived example
+ val = obj['configValue'];
+ if (goog.isDefAndNotNull(val)) {
+ app.Config.CONFIG_VALUE = val;
+ }
+
+ self.dispatchEvent(app.services.ConfigService.EventType.CONFIG_LOADED);
+
+ xhr.dispose();
+ });
+ if (xhr !== null) {
+
+ goog.style.showElement(goog.dom.getElement('loadingIndicator'), true);
+
+ xhr.send('/data/config.json');
+ }
+};
+
+/** @enum {string} */
+app.services.ConfigService.EventType = {
+ CONFIG_LOADED: goog.events.getUniqueId('config-loaded')
+};
29 app/ui/common/_common.scss
@@ -0,0 +1,29 @@
+#loadingIndicator {
+ @include border-bottom-left-radius( 8px );
+ position: fixed;
+ top: 0;
+ right: 0;
+ z-index: 20;
+ background: black url('/img/ajax-loader.gif') center center no-repeat;
+ width: 50px;
+ height: 50px;
+}
+
+button {
+ @include sassy-button("shiny", 4px, 12px, #DE1F4F, false, #fff, "raised");
+ font-family: Droid Sans Bold;
+ margin: 5px;
+
+ &.goog-button-disabled, &.goog-button-disabled:hover {
+ border-color: #d2d2d2;
+ background: #ddd;
+ cursor: default;
+ text-shadow: none;
+ }
+
+ &.large {
+ @include border-radius(6px);
+ font-size: 16px;
+ margin: 8px;
+ }
+}
11 app/ui/common/common.soy
@@ -0,0 +1,11 @@
+{namespace app.ui.common.templates autoescape="contextual"}
+
+/**
+ * The main app
+ */
+{template .app}
+<div id="container">
+ <div id="loadingIndicator" style="display: none"></div>
+ <div id="main"></div>
+</div>
+{/template}
20 app/ui/common/common.soy.js
@@ -0,0 +1,20 @@
+// This file was automatically generated from common.soy.
+// Please don't edit this file by hand.
+
+goog.provide('app.ui.common.templates');
+
+goog.require('soy');
+goog.require('soy.StringBuilder');
+
+
+/**
+ * @param {Object.<string, *>=} opt_data
+ * @param {soy.StringBuilder=} opt_sb
+ * @return {string}
+ * @notypecheck
+ */
+app.ui.common.templates.app = function(opt_data, opt_sb) {
+ var output = opt_sb || new soy.StringBuilder();
+ output.append('<div id="container"><div id="loadingIndicator" style="display: none"></div><div id="main"></div></div>');
+ return opt_sb ? '' : output.toString();
+};
14 app/ui/main.js
@@ -0,0 +1,14 @@
+goog.provide('app.ui.Main');
+
+goog.require('goog.ui.Component');
+
+/**
+ * TopBar
+ * @param {goog.dom.DomHelper=} opt_domHelper Optional DOM helper.
+ * @constructor
+ * @extends {goog.ui.Component}
+ */
+app.ui.Main = function(opt_domHelper) {
+ goog.ui.Component.call(this, opt_domHelper);
+};
+goog.inherits(app.ui.Main, goog.ui.Component);
14 app/ui/scss/_defaults.scss
@@ -0,0 +1,14 @@
+// Not targeting Opera or KHTML
+$experimental-support-for-opera: false;
+$experimental-support-for-khtml: false;
+
+// OR IE 6
+$legacy-support-for-ie6: false;
+
+// OR IE 7
+// $legacy-support-for-ie7: false;
+
+// Defaults
+$background-color: #fff !default;
+$text-color: #000 !default;
+$link-color: #000 !default;
11 app/ui/scss/_fonts.scss
@@ -0,0 +1,11 @@
+@include font-face("Droid Sans",
+ font-files("/fonts/droidsans-webfont.woff", woff,
+ "/fonts/droidsans-webfont.ttf", truetype,
+ "/fonts/droidsans-webfont.svg", svg),
+ "/fonts/droidsans-webfont.eot");
+
+@include font-face("Droid Sans Bold",
+ font-files("/fonts/droidsans-bold-webfont.woff", woff,
+ "/fonts/droidsans-bold-webfont.ttf", truetype,
+ "/fonts/droidsans-bold-webfont.svg", svg),
+ "/fonts/droidsans-bold-webfont.eot");
55 app/ui/scss/_html5reset.scss
@@ -0,0 +1,55 @@
+/* HTML5 Boilerplate
+ * ==|== normalize ==========================================================
+ */
+article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; }
+audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; }
+audio:not([controls]) { display: none; }
+[hidden] { display: none; }
+html { font-size: 100%; overflow-y: scroll; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
+body { margin: 0; font-size: 13px; line-height: 1.231; }
+body, button, input, select, textarea { font-family: sans-serif; color: #222; }
+::-moz-selection { background: #00a0db; color: #fff; text-shadow: none; }
+::selection { background: #00a0db; color: #fff; text-shadow: none; }
+a { color: #00e; }
+a:visited { color: #551a8b; }
+a:hover { color: #06e; }
+a:focus { outline: thin dotted; }
+a:hover, a:active { outline: 0; }
+abbr[title] { border-bottom: 1px dotted; }
+b, strong { font-weight: bold; }
+blockquote { margin: 1em 40px; }
+dfn { font-style: italic; }
+hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
+ins { background: #ff9; color: #000; text-decoration: none; }
+mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }
+pre, code, kbd, samp { font-family: monospace, monospace; _font-family: 'courier new', monospace; font-size: 1em; }
+pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }
+q { quotes: none; }
+q:before, q:after { content: ""; content: none; }
+small { font-size: 85%; }
+sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
+sup { top: -0.5em; }
+sub { bottom: -0.25em; }
+ul, ol { margin: 1em 0; padding: 0 0 0 40px; }
+dd { margin: 0 0 0 40px; }
+nav ul, nav ol { list-style: none; list-style-image: none; margin: 0; padding: 0; }
+img { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; }
+svg:not(:root) { overflow: hidden; }
+figure { margin: 0; }
+form { margin: 0; }
+fieldset { border: 0; margin: 0; padding: 0; }
+label { cursor: pointer; }
+legend { border: 0; *margin-left: -7px; padding: 0; }
+button, input, select, textarea { font-size: 100%; margin: 0; vertical-align: baseline; *vertical-align: middle; }
+button, input { line-height: normal; *overflow: visible; }
+table button, table input { *overflow: auto; }
+button, input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; }
+input[type="checkbox"], input[type="radio"] { box-sizing: border-box; }
+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-decoration { -webkit-appearance: none; }
+button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
+textarea { overflow: auto; vertical-align: top; resize: vertical; }
+input:valid, textarea:valid { }
+input:invalid, textarea:invalid { background-color: #f0dddd; }
+table { border-collapse: collapse; border-spacing: 0; }
+td { vertical-align: top; }
83 app/ui/scss/_mixins.scss
@@ -0,0 +1,83 @@
+// Default font
+@mixin typeface {
+ // From: Better Helvetica Font Stack http://j.mp/9t6O6Z
+ font-family: "Helvetica Neue", Arial, sans-serif;
+}
+
+// Global transition
+@mixin global-transition {
+ @include transition(all, 150ms, ease-in-out);
+}
+
+// Inline Block + Zoom Fix
+@mixin inline-block-zoom {
+ @include inline-block;
+ zoom: 1;
+}
+
+// A new micro clearfix hack
+// http://nicolasgallagher.com/micro-clearfix-hack/
+@mixin microfix {
+ // For modern browsers
+ &:before, &:after {
+ content:"";
+ display:table;
+ }
+
+ &:after {
+ clear:both;
+ }
+
+ @if $legacy-support-for-ie {
+ // For IE 6/7 (trigger hasLayout)
+ zoom : 1;
+ }
+}
+
+// For image replacement
+@mixin ir {
+ display: block;
+ border: 0;
+ text-indent: -999em;
+ overflow: hidden;
+ background-color: transparent;
+ background-repeat: no-repeat;
+ text-align: left;
+ direction: ltr;
+ br {
+ display: none;
+ }
+}
+
+// Hide from both screenreaders and browsers: h5bp.com/u
+@mixin hidden {
+ display: none !important;
+ visibility: hidden;
+}
+
+// Hide only visually, but have it available for screenreaders: h5bp.com/v
+@mixin visuallyhidden {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+
+ // Extends the .visuallyhidden class to allow the element to be focusable when navigated to via the keyboard: h5bp.com/p
+ &.focusable:active, &.focusable:focus {
+ clip: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ position: static;
+ width: auto;
+ }
+}
+
+// Hide visually and from screenreaders, but maintain layout
+@mixin invisible {
+ visibility: hidden;
+}
18 app/ui/style.scss
@@ -0,0 +1,18 @@
+@import "compass";
+@import "sassy-buttons";
+
+@import "scss/html5reset";
+@import "scss/defaults";
+@import "scss/mixins";
+@import "scss/fonts";
+
+html {
+ height: 100%;
+}
+
+body {
+ @include typeface;
+}
+
+@import "common/common";
+@import "widget/widget"
6 app/ui/widget/_widget.scss
@@ -0,0 +1,6 @@
+.widget {
+ margin: 3em;
+ font-weight: bold;
+ font-size: 24px;
+ font-family: "Droid Sans", sans-serif;
+}
55 app/ui/widget/widget.js
@@ -0,0 +1,55 @@
+goog.provide('app.ui.Widget');
+
+goog.require('app.ui.templates.widget');
+goog.require('goog.dom');
+goog.require('goog.ui.Component');
+
+/**
+ * App Start
+ * @param {goog.dom.DomHelper=} opt_domHelper Optional DOM helper.
+ * @constructor
+ * @extends {goog.ui.Component}
+ */
+app.ui.Widget = function(opt_domHelper) {
+ goog.ui.Component.call(this, opt_domHelper);
+};
+goog.inherits(app.ui.Widget, goog.ui.Component);
+
+/** @return {Object} Data used to populate the template. */
+app.ui.Widget.prototype.getTemplateModel = function() {
+ return {};
+};
+
+/** @return {Function} Template. */
+app.ui.Widget.prototype.getTemplate = function() {
+ return app.ui.templates.widget.widget;
+};
+
+/** @override */
+app.ui.Widget.prototype.createDom = function() {
+ /** @type {Node} */
+ var node = soy.renderAsFragment(this.getTemplate(), this.getTemplateModel());
+ /** @type {Element} */
+ var el = /** @type {Element} */ node;
+ this.setElementInternal(el);
+ this.decorate(this.getElement());
+};
+
+/** @override */
+app.ui.Widget.prototype.decorateInternal = function(element) {
+ goog.base(this, 'decorateInternal', element);
+
+ /** @type {Element} */
+ var el = this.getElement();
+};
+
+/** @override */
+app.ui.Widget.prototype.enterDocument = function() {
+ goog.base(this, 'enterDocument');
+ var eh = this.getHandler();
+};
+
+/** @override */
+app.ui.Widget.prototype.disposeInternal = function() {
+ goog.base(this, 'disposeInternal');
+};
10 app/ui/widget/widget.soy
@@ -0,0 +1,10 @@
+{namespace app.ui.templates.widget}
+
+/**
+ * Displays the App Start.
+ */
+{template .widget}
+<div class="widget">
+ A Widget.
+</div>
+{/template}
20 app/ui/widget/widget.soy.js
@@ -0,0 +1,20 @@
+// This file was automatically generated from widget.soy.
+// Please don't edit this file by hand.
+
+goog.provide('app.ui.templates.widget');
+
+goog.require('soy');
+goog.require('soy.StringBuilder');
+
+
+/**
+ * @param {Object.<string, *>=} opt_data
+ * @param {soy.StringBuilder=} opt_sb
+ * @return {string}
+ * @notypecheck
+ */
+app.ui.templates.widget.widget = function(opt_data, opt_sb) {
+ var output = opt_sb || new soy.StringBuilder();
+ output.append('<div class="widget">A Widget.</div>');
+ return opt_sb ? '' : output.toString();
+};
26 build/404.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>The page you were looking for doesn't exist (404)</title>
+ <style type="text/css">
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
+ div.dialog {
+ width: 25em;
+ padding: 0 4em;
+ margin: 4em auto 0 auto;
+ border: 1px solid #ccc;
+ border-right-color: #999;
+ border-bottom-color: #999;
+ }
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
+ </style>
+</head>
+
+<body>
+ <!-- This file lives in public/404.html -->
+ <div class="dialog">
+ <h1>The page you were looking for doesn't exist.</h1>
+ <p>You may have mistyped the address or the page may have moved.</p>
+ </div>
+</body>
+</html>
26 build/422.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>The change you wanted was rejected (422)</title>
+ <style type="text/css">
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
+ div.dialog {
+ width: 25em;
+ padding: 0 4em;
+ margin: 4em auto 0 auto;
+ border: 1px solid #ccc;
+ border-right-color: #999;
+ border-bottom-color: #999;
+ }
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
+ </style>
+</head>
+
+<body>
+ <!-- This file lives in public/422.html -->
+ <div class="dialog">
+ <h1>The change you wanted was rejected.</h1>
+ <p>Maybe you tried to change something you didn't have access to.</p>
+ </div>
+</body>
+</html>
26 build/500.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>We're sorry, but something went wrong (500)</title>
+ <style type="text/css">
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
+ div.dialog {
+ width: 25em;
+ padding: 0 4em;
+ margin: 4em auto 0 auto;
+ border: 1px solid #ccc;
+ border-right-color: #999;
+ border-bottom-color: #999;
+ }
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
+ </style>
+</head>
+
+<body>
+ <!-- This file lives in public/500.html -->
+ <div class="dialog">
+ <h1>We're sorry, but something went wrong.</h1>
+ <p>We've been notified about this issue and we'll take a look at it shortly.</p>
+ </div>
+</body>
+</html>
BIN  build/apple-touch-icon-114x114-precomposed.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  build/apple-touch-icon-57x57-precomposed.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  build/apple-touch-icon-72x72-precomposed.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  build/apple-touch-icon-precomposed.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  build/apple-touch-icon.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
25 build/crossdomain.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
+<cross-domain-policy>
+
+
+<!-- Read this: www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html -->
+
+<!-- Most restrictive policy: -->
+ <site-control permitted-cross-domain-policies="none"/>
+
+
+
+<!-- Least restrictive policy: -->
+<!--
+ <site-control permitted-cross-domain-policies="all"/>
+ <allow-access-from domain="*" to-ports="*" secure="false"/>
+ <allow-http-request-headers-from domain="*" headers="*" secure="false"/>
+-->
+<!--
+ If you host a crossdomain.xml file with allow-access-from domain="*"
+ and don’t understand all of the points described here, you probably
+ have a nasty security vulnerability. ~ simon willison
+-->
+
+</cross-domain-policy>
17 build/debug.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
+<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
+<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
+<head>
+ <meta charset="utf-8">
+ <title>Closure-Script Boilerplate</title>
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="stylesheet" href="css/style.css">
+ <script type="text/javascript" src="js/modernizr-2.0.6.js"></script>
+</head>
+<body>
+ <script src="js/app.debug.js"></script>
+ <script>start();</script>
+</body>
+</html>
BIN  build/favicon.ico
Binary file not shown
43 build/humans.txt
@@ -0,0 +1,43 @@
+/* the humans responsible & colophon */
+/* humanstxt.org */
+
+
+/* TEAM */
+ <your title>: <your name>
+ Site:
+ Twitter:
+ Location:
+
+/* THANKS */
+ Names (& URL):
+
+/* SITE */
+ Standards: HTML5, CSS3
+ Components: Modernizr, jQuery
+ Software:
+
+
+
+ -o/-
+ +oo//-
+ :ooo+//:
+ -ooooo///-
+ /oooooo//:
+ :ooooooo+//-
+ -+oooooooo///-
+ -://////////////+oooooooooo++////////////::
+ :+ooooooooooooooooooooooooooooooooooooo+:::-
+ -/+ooooooooooooooooooooooooooooooo+/::////:-
+ -:+oooooooooooooooooooooooooooo/::///////:-
+ --/+ooooooooooooooooooooo+::://////:-
+ -:+ooooooooooooooooo+:://////:--
+ /ooooooooooooooooo+//////:-
+ -ooooooooooooooooooo////-
+ /ooooooooo+oooooooooo//:
+ :ooooooo+/::/+oooooooo+//-
+ -oooooo/::///////+oooooo///-
+ /ooo+::://////:---:/+oooo//:
+ -o+/::///////:- -:/+o+//-
+ :-:///////:- -:/://
+ -////:- --//:
+ -- -:
17 build/index.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
+<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
+<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
+<head>
+ <meta charset="utf-8">
+ <title>Closure-Script Boilerplate</title>
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="stylesheet" href="css/style.css">
+ <script type="text/javascript" src="js/modernizr-2.0.6.js"></script>
+</head>
+<body>
+ <script src="js/app.js"></script>
+ <script>start();</script>
+</body>
+</html>
5 build/robots.txt
@@ -0,0 +1,5 @@
+# www.robotstxt.org/
+# www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156449
+
+User-agent: *
+
17 config.rb
@@ -0,0 +1,17 @@
+
+# Require any additional compass plugins here.
+require 'sassy-buttons'
+
+# Set this to the root of your project when deployed:
+sass_dir = "app/ui/."
+http_path = "/"
+css_dir = "public/css"
+images_dir = "public/img"
+
+# You can select your preferred output style here (can be overridden via the command line):
+# output_style = :expanded or :nested or :compact or :compressed
+output_style = :compact
+# To enable relative paths to assets via compass helper functions. Uncomment:
+relative_assets = true
+# To disable debugging comments that display the original location of your selectors. Uncomment:
+line_comments = false
32 deploy
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+./images
+
+if [ ! -f public/css/style.css ];
+then
+ echo "public/css/style.css not found!"
+fi
+
+if [ ! -f public/js/app.js ];
+then
+ echo "public/js/app.js not found!"
+fi
+
+if [ ! -f public/js/app.debug.js ];
+then
+ echo "public/js/app.debug.js not found!"
+fi
+
+SERVER="/path/to/public/web"
+PUBLIC="$SERVER/public"
+
+if [ -d $SERVER ];
+then
+ rm -rf $PUBLIC/*
+ cp -r build/* $PUBLIC
+ cp -r public/css $PUBLIC
+ cp -r public/fonts $PUBLIC
+ cp -r public/js $PUBLIC
+else
+ echo "$SERVER not found!"
+fi
173 externs/modernizr-2.0.6.externs.js
@@ -0,0 +1,173 @@
+/** @constructor */
+function Modernizr() {};
+/** @type {boolean} */
+Modernizr.touch;
+/** @type {boolean} */
+Modernizr.csstransforms3d;
+/** @type {boolean} */
+Modernizr.generatedcontent;
+/** @type {boolean} */
+Modernizr.fontface;
+/** @type {boolean} */
+Modernizr.flexbox;
+/** @type {boolean} */
+Modernizr.canvas;
+/** @type {boolean} */
+Modernizr.canvastext;
+/** @type {boolean} */
+Modernizr.webgl;
+/** @type {boolean} */
+Modernizr.geolocation;
+/** @type {boolean} */
+Modernizr.postmessage;
+/** @type {boolean} */
+Modernizr.websqldatabase;
+/** @type {boolean} */
+Modernizr.indexeddb;
+/** @type {boolean} */
+Modernizr.hashchange;
+/** @type {boolean} */
+Modernizr.history;
+/** @type {boolean} */
+Modernizr.draganddrop;
+/** @type {boolean} */
+Modernizr.websockets;
+/** @type {boolean} */
+Modernizr.rgba;
+/** @type {boolean} */
+Modernizr.hsla;
+/** @type {boolean} */
+Modernizr.multiplebgs;
+/** @type {boolean} */
+Modernizr.backgroundsize;
+/** @type {boolean} */
+Modernizr.borderimage;
+/** @type {boolean} */
+Modernizr.borderradius;
+/** @type {boolean} */
+Modernizr.boxshadow;
+/** @type {boolean} */
+Modernizr.textshadow;
+/** @type {boolean} */
+Modernizr.opacity;
+/** @type {boolean} */
+Modernizr.cssanimations;
+/** @type {boolean} */
+Modernizr.csscolumns;
+/** @type {boolean} */
+Modernizr.cssgradients;
+/** @type {boolean} */
+Modernizr.cssreflections;
+/** @type {boolean} */
+Modernizr.csstransforms;
+/** @type {boolean} */
+Modernizr.csstransitions;
+/** @constructor */
+function video() {};
+/** @type {video} */
+Modernizr.video;
+/** @constructor */
+function audio() {};
+/** @type {audio} */
+Modernizr.audio;
+/** @type {boolean} */
+Modernizr.localstorage;
+/** @type {boolean} */
+Modernizr.sessionstorage;
+/** @type {boolean} */
+Modernizr.webworkers;
+/** @type {boolean} */
+Modernizr.applicationcache;
+/** @type {boolean} */
+Modernizr.svg;
+/** @type {boolean} */
+Modernizr.inlinesvg;
+/** @type {boolean} */
+Modernizr.smil;
+/** @type {boolean} */
+Modernizr.svgclippaths;
+/** @constructor */
+function input() {};
+/** @type {input} */
+Modernizr.input;
+/** @type {boolean} */
+input.prototype.autocomplete;
+/** @type {boolean} */
+input.prototype.autofocus;
+/** @type {boolean} */
+input.prototype.list;
+/** @type {boolean} */
+input.prototype.placeholder;
+/** @type {boolean} */
+input.prototype.max;
+/** @type {boolean} */
+input.prototype.min;
+/** @type {boolean} */
+input.prototype.multiple;
+/** @type {boolean} */
+input.prototype.pattern;
+/** @type {boolean} */
+input.prototype.required;
+/** @type {boolean} */
+input.prototype.step;
+/** @constructor */
+function inputtypes() {};
+/** @type {inputtypes} */
+Modernizr.inputtypes;
+/** @type {boolean} */
+inputtypes.prototype.search;
+/** @type {boolean} */
+inputtypes.prototype.tel;
+/** @type {boolean} */
+inputtypes.prototype.url;
+/** @type {boolean} */
+inputtypes.prototype.email;
+/** @type {boolean} */
+inputtypes.prototype.datetime;
+/** @type {boolean} */
+inputtypes.prototype.date;
+/** @type {boolean} */
+inputtypes.prototype.month;
+/** @type {boolean} */
+inputtypes.prototype.week;
+/** @type {boolean} */
+inputtypes.prototype.time;
+/** @type {boolean} */
+inputtypes.prototype.number;
+/** @type {boolean} */
+inputtypes.prototype.range;
+/** @type {boolean} */
+inputtypes.prototype.color;
+/**
+ * @param {*} b
+ * @return {*}
+ */
+Modernizr.mq = function(b) {};
+/**
+ * @param {*} d
+ * @param {*} e
+ * @return {*}
+ */
+Modernizr.hasEvent = function(d,e) {};
+/**
+ * @param {*} a
+ * @return {*}
+ */
+Modernizr.testProp = function(a) {};
+/**
+ * @param {*} a
+ * @param {*} b
+ * @return {*}
+ */
+Modernizr.testAllProps = function(a,b) {};
+/**
+ * @param {*} a
+ * @param {*} c
+ * @param {*} d
+ * @param {*} e
+ */
+Modernizr.testStyles = function(a,c,d,e) {};
+/**
+ * @param {Object} a
+ */
+Modernizr.load = function(a) {};
9 features/app.feature
@@ -0,0 +1,9 @@
+@javascript
+Feature: Start Feature
+
+ Background:
+ When I visit the app
+
+ Scenario: Open the Chooser from the Start page
+ When I click the "Choose a Cog" button
+ Then I should see the "chooser" overlay
11 features/step_definitions/basic_steps.rb
@@ -0,0 +1,11 @@
+When /^I visit the app$/ do
+ visit '/production'
+end
+
+When /^I click the "([^"]*)" button$/ do |name|
+ click_button(name)
+end
+
+Then /^I should see the "([^"]*)" overlay$/ do |overlay|
+ page.should have_selector('div#overlay>div.'+overlay)
+end
16 features/support/env.rb
@@ -0,0 +1,16 @@
+require 'capybara'
+require 'capybara-webkit'
+require 'capybara/cucumber'
+require 'capybara/dsl'
+require 'rubygems'
+require 'spork'
+
+Spork.prefork do
+ Capybara.app_host = 'http://localhost:3000'
+ Capybara.javascript_driver = :webkit
+ Capybara.run_server = false
+ Capybara.default_selector = :css
+end
+
+Spork.each_run do
+end
24 images
@@ -0,0 +1,24 @@
+#!/bin/bash
+shopt -s nullglob
+
+echo "copy"
+rm -rf build/img
+mkdir -p build/img
+cp -r public/img/* build/img
+
+echo "pngs"
+for f in build/img/*.png
+do
+ optipng -quiet -o7 -out build/img/$(basename $f) $f
+done
+
+echo "jpgs"
+for f in build/img/*.jpg
+do
+ jpegtran -copy none -optimize -outfile build/img/$(basename $f) $f
+done
+
+echo "before"
+du -hs public/img
+echo "after"
+du -hs build/img
1  public/.gitignore
@@ -0,0 +1 @@
+uploads
11 public/config.ru
@@ -0,0 +1,11 @@
+#\ -p 3000 -E none
+require 'closure'
+Closure.add_source '.', '/'
+Closure.add_source :soy, '/soy'
+Closure.add_source '../closure-library', '/closure-library'
+Closure.add_source '../app', '/app'
+Closure.add_source '../jasmine', '/jasmine'
+
+use Closure::Middleware, 'index'
+
+run Rack::File.new '.'
120 public/css/style.css
@@ -0,0 +1,120 @@
+/* HTML5 Boilerplate ==|== normalize ========================================================== */
+article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; }
+
+audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; }
+
+audio:not([controls]) { display: none; }
+
+[hidden] { display: none; }
+
+html { font-size: 100%; overflow-y: scroll; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
+
+body { margin: 0; font-size: 13px; line-height: 1.231; }
+
+body, button, input, select, textarea { font-family: sans-serif; color: #222; }
+
+::-moz-selection { background: #00a0db; color: #fff; text-shadow: none; }
+
+::selection { background: #00a0db; color: #fff; text-shadow: none; }
+
+a { color: #00e; }
+
+a:visited { color: #551a8b; }
+
+a:hover { color: #06e; }
+
+a:focus { outline: thin dotted; }
+
+a:hover, a:active { outline: 0; }
+
+abbr[title] { border-bottom: 1px dotted; }
+
+b, strong { font-weight: bold; }
+
+blockquote { margin: 1em 40px; }
+
+dfn { font-style: italic; }
+
+hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
+
+ins { background: #ff9; color: #000; text-decoration: none; }
+
+mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }
+
+pre, code, kbd, samp { font-family: monospace, monospace; _font-family: 'courier new', monospace; font-size: 1em; }
+
+pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }
+
+q { quotes: none; }
+
+q:before, q:after { content: ""; content: none; }
+
+small { font-size: 85%; }
+
+sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
+
+sup { top: -0.5em; }
+
+sub { bottom: -0.25em; }
+
+ul, ol { margin: 1em 0; padding: 0 0 0 40px; }
+
+dd { margin: 0 0 0 40px; }
+
+nav ul, nav ol { list-style: none; list-style-image: none; margin: 0; padding: 0; }
+
+img { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; }
+
+svg:not(:root) { overflow: hidden; }
+
+figure { margin: 0; }
+
+form { margin: 0; }
+
+fieldset { border: 0; margin: 0; padding: 0; }
+
+label { cursor: pointer; }
+
+legend { border: 0; *margin-left: -7px; padding: 0; }
+
+button, input, select, textarea { font-size: 100%; margin: 0; vertical-align: baseline; *vertical-align: middle; }
+
+button, input { line-height: normal; *overflow: visible; }
+
+table button, table input { *overflow: auto; }
+
+button, input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; }
+
+input[type="checkbox"], input[type="radio"] { box-sizing: border-box; }
+
+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-decoration { -webkit-appearance: none; }
+
+button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
+
+textarea { overflow: auto; vertical-align: top; resize: vertical; }
+
+input:invalid, textarea:invalid { background-color: #f0dddd; }
+
+table { border-collapse: collapse; border-spacing: 0; }
+
+td { vertical-align: top; }
+
+@font-face { font-family: "Droid Sans"; src: url(/fonts/droidsans-webfont.eot); src: url(/fonts/droidsans-webfont.eot?iefix) format('eot'), url(/fonts/droidsans-webfont.woff) format('woff'), url(/fonts/droidsans-webfont.ttf) format('truetype'), url(/fonts/droidsans-webfont.svg) format('svg'); }
+
+@font-face { font-family: "Droid Sans Bold"; src: url(/fonts/droidsans-bold-webfont.eot); src: url(/fonts/droidsans-bold-webfont.eot?iefix) format('eot'), url(/fonts/droidsans-bold-webfont.woff) format('woff'), url(/fonts/droidsans-bold-webfont.ttf) format('truetype'), url(/fonts/droidsans-bold-webfont.svg) format('svg'); }
+
+html { height: 100%; }
+
+body { font-family: "Helvetica Neue", Arial, sans-serif; }
+
+#loadingIndicator { -moz-border-radius-bottomleft: 8px; -webkit-border-bottom-left-radius: 8px; -ms-border-bottom-left-radius: 8px; border-bottom-left-radius: 8px; position: fixed; top: 0; right: 0; z-index: 20; background: black url("/img/ajax-loader.gif") center center no-repeat; width: 50px; height: 50px; }
+
+button { font-size: 12px; padding: 0.3em 1.5em; display: inline-block; cursor: pointer; line-height: 1.5; -moz-border-radius: 4px; -webkit-border-radius: 4px; -ms-border-radius: 4px; border-radius: 4px; background-color: #de1f4f; background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ef8da6), color-stop(50%, #de1f4f), color-stop(100%, #b1193f)); background: -webkit-linear-gradient(#ef8da6, #de1f4f 50%, #b1193f); background: -moz-linear-gradient(#ef8da6, #de1f4f 50%, #b1193f); background: -ms-linear-gradient(#ef8da6, #de1f4f 50%, #b1193f); background: linear-gradient(#ef8da6, #de1f4f 50%, #b1193f); -moz-box-shadow: #f9d0db 0 1px 0 inset; -webkit-box-shadow: #f9d0db 0 1px 0 inset; box-shadow: #f9d0db 0 1px 0 inset; border: 1px solid #9b1637; color: white; text-shadow: #b81a41 0 1px 0; font-family: Droid Sans Bold; margin: 5px; }
+button:hover { background-color: #b1193f; background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ee849f), color-stop(50%, #b1193f), color-stop(100%, #8d1432)); background: -webkit-linear-gradient(#ee849f, #b1193f 50%, #8d1432); background: -moz-linear-gradient(#ee849f, #b1193f 50%, #8d1432); background: -ms-linear-gradient(#ee849f, #b1193f 50%, #8d1432); background: linear-gradient(#ee849f, #b1193f 50%, #8d1432); }
+button:active { -moz-box-shadow: #8d1432 0 1px 2px inset; -webkit-box-shadow: #8d1432 0 1px 2px inset; box-shadow: #8d1432 0 1px 2px inset; }
+button.goog-button-disabled, button.goog-button-disabled:hover { border-color: #d2d2d2; background: #ddd; cursor: default; text-shadow: none; }
+button.large { -moz-border-radius: 6px; -webkit-border-radius: 6px; -ms-border-radius: 6px; border-radius: 6px; font-size: 16px; margin: 8px; }
+
+.widget { margin: 3em; font-weight: bold; font-size: 24px; font-family: "Droid Sans", sans-serif; }
3  public/data/config.json
@@ -0,0 +1,3 @@
+{
+ "configValue": "value"
+}
17 public/debug.erb
@@ -0,0 +1,17 @@
+<!doctype html>
+<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
+<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
+<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
+<head>
+ <meta charset="utf-8">
+ <title>Closure-Script Boilerplate</title>
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="stylesheet" href="css/style.css">
+ <script type="text/javascript" src="js/modernizr-2.0.6.js"></script>
+</head>
+<body>
+ <script src="js/app.debug.js"></script>
+ <script>start();</script>
+</body>
+</html>
17 public/debug_build.erb
@@ -0,0 +1,17 @@
+<!doctype html>
+<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
+<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
+<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
+<head>
+ <meta charset="utf-8">
+ <title>Closure-Script Boilerplate</title>
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="stylesheet" href="css/style.css">
+ <script type="text/javascript" src="js/modernizr-2.0.6.js"></script>
+</head>
+<body>
+ <script src="app/compiler.js?debug"></script>
+ <script>start();</script>
+</body>
+</html>
17 public/dev.erb
@@ -0,0 +1,17 @@
+<!doctype html>
+<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
+<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
+<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
+<head>
+ <meta charset="utf-8">
+ <title>Closure-Script Boilerplate</title>
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="stylesheet" href="css/style.css">
+ <script type="text/javascript" src="js/modernizr-2.0.6.js"></script>
+</head>
+<body>
+ <script src="app/compiler.js"></script>
+ <script>start();</script>
+</body>
+</html>
116 public/externsgen.erb
@@ -0,0 +1,116 @@
+<html><body>
+Script Uri: <input id='script_uri' type='text' value='' style='width:400;'/>
+<a id='load' href='#'>Load Script</a>
+<br/>
+Object to extern: <input id='object_to_extern' type='text' value='' style='width:400;'/>
+<a id='go' href='#'>Go!</a>
+<br/>
+<textarea id='console' rows='1000' cols='100'></textarea>
+<br/>
+<script src='/spec_helpers/jquery.js'></script>
+</body></html>
+<script>
+var externed = '';
+var done = {};
+$('#load').click(loadScript);
+$('#go').click(go);
+
+function loadScript() {
+ var uri = $('#script_uri').val();
+ if (!uri) {
+ alert('Please enter script to load');
+ return false;
+ }
+ console.log('Loading: ' + uri);
+ var script = document.createElement('script');
+ script.type = 'text/javascript';
+ script.src = uri;
+ document.body.appendChild(script);
+
+ console.log('Successfully loaded the script at: ' + uri);
+ return false;
+};
+
+function go() {
+ var name = $('#object_to_extern').val();
+ if (!name) {
+ alert('Please enter an object to extern. Example: "PhoneGap"');
+ return false;
+ }
+ var o = eval(name);
+ if (!o) {
+ alert('Could not find the specified object.');
+ return false;
+ }
+ done = {};
+ externed = '/** @constructor */\nfunction ' + name + '() {};';
+ externObject(o, name + '.prototype.');
+ $('#console').val(externed);
+};
+
+function externObject(o, prefix) {
+ for (var i in o) {
+ if (!isValidPropName(i)) continue; // Invalid prop name
+ var prop = o[i];
+ var type = typeof(prop);
+ var name = prefix + i;
+ var key = name + '_' + type;
+ if (done[key] === 1) { continue; }
+ done[key] = 1;
+
+ if (type === 'function') {
+ externFunction(name, prop);
+ } else if (type === 'object') {
+ externInnerObject(name, prop, i)
+ } else if (type === 'boolean') {
+ externed += '\n/** @type {boolean} */\n' + name + ';';
+ } else if (type === 'number') {
+ externed += '\n/** @type {number} */\n' + name + ';';
+ } else if (type === 'number') {
+ externed += '\n/** @type {' + type + '} */\n' + name + ';';
+ }
+ }
+};
+
+function isValidPropName(propName) {
+ var re = /^[a-zA-Z]+[a-zA-Z_0-9]*$/;
+ var valid = re.test(propName);
+ return valid;
+};
+
+function externFunction(name, prop) {
+ var desc = prop.toString();
+ var paramNames = getParamNames(desc);
+ var ret = hasReturn(desc);
+ if (ret || paramNames.length) {
+ externed += '\n/**';
+ for (var i = 0; i < paramNames.length; i++) {
+ externed += '\n * @param {*} ' + paramNames[i];
+ }
+ if (ret) { externed += '\n * @return {*}'; }
+ externed += '\n */';
+ }
+ externed += '\n' + name +
+ ' = function(' + paramNames.join(',') + ') {};';
+};
+
+function getParamNames(desc) {
+ desc = desc.substring(desc.indexOf('(') + 1);
+ desc = desc.substring(0, desc.indexOf(')'));
+ return !desc ? [] : desc.split(',');
+};
+
+function hasReturn(desc) {
+ return desc.indexOf('return ') >= 0;
+};
+
+function externInnerObject(name, prop, fieldName) {
+ var key = fieldName + '_function';
+ if (done[key] === 1) { return; }
+ done[key] = 1;
+
+ externed += '\n/** @constructor */\nfunction ' + fieldName + '() {};';
+ externed += '\n/** @type {' + fieldName +'} */\n' + name + ';';
+ externObject(prop, fieldName + '.prototype.');
+};
+</script>
BIN  public/fonts/droidsans-bold-webfont.eot
Binary file not shown
250 public/fonts/droidsans-bold-webfont.svg
@@ -0,0 +1,250 @@
+<?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>
+This is a custom SVG webfont generated by Font Squirrel.
+Copyright : Digitized data copyright 2007 Google Corporation
+Foundry : Ascender Corporation
+Foundry URL : httpwwwascendercorpcom
+</metadata>
+<defs>
+<font id="webfontNBZS7Dxy" horiz-adv-x="1128" >
+<font-face units-per-em="2048" ascent="1638" descent="-410" />
+<missing-glyph horiz-adv-x="532" />
+<glyph unicode=" " horiz-adv-x="532" />
+<glyph unicode="&#x09;" horiz-adv-x="532" />
+<glyph unicode="&#xa0;" horiz-adv-x="532" />
+<glyph unicode="!" horiz-adv-x="586" d="M416 485h-244l-51 977h346zM117 143q0 47 13.5 79.5t37.5 52.5t56 29t69 9q35 0 66.5 -9t55.5 -29t38 -52.5t14 -79.5q0 -45 -14 -77t-38 -53t-55.5 -30.5t-66.5 -9.5q-37 0 -69 9.5t-56 30.5t-37.5 53t-13.5 77z" />
+<glyph unicode="&#x22;" horiz-adv-x="967" d="M412 1462l-41 -528h-197l-41 528h279zM834 1462l-41 -528h-197l-41 528h279z" />
+<glyph unicode="#" horiz-adv-x="1323" d="M999 844l-47 -232h258v-206h-297l-77 -406h-220l78 406h-194l-76 -406h-215l74 406h-238v206h277l47 232h-252v209h289l77 407h219l-77 -407h198l78 407h215l-78 -407h240v-209h-279zM539 612h196l47 232h-196z" />
+<glyph unicode="$" d="M1061 457q0 -75 -26.5 -139t-79 -112t-130.5 -79t-180 -41v-205h-137v201q-66 2 -122 8t-105 17t-93.5 26.5t-87.5 34.5v264q42 -21 91.5 -40t102.5 -34.5t107.5 -26.5t106.5 -14v318q-8 3 -17 7l-16 6q-8 3 -14 5q-91 35 -159 73t-113.5 85t-68 104t-22.5 129 q0 75 28.5 136.5t81.5 107t129 74t171 37.5v157h137v-151q87 -5 178 -25t191 -63l-101 -234q-65 26 -135.5 46.5t-132.5 25.5v-293l39 -14q95 -35 166 -72t118 -83t70 -103t23 -133zM760 451q0 24 -6.5 42t-20.5 33t-35.5 27.5t-52.5 26.5v-252q59 9 87 39t28 84zM399 1051 q0 -47 26 -78.5t83 -52.5v233q-54 -6 -81.5 -30t-27.5 -72z" />
+<glyph unicode="%" horiz-adv-x="1804" d="M315 1024q0 -127 22.5 -189.5t72.5 -62.5q49 0 72.5 62t23.5 190q0 250 -96 250q-50 0 -72.5 -61.5t-22.5 -188.5zM758 1026q0 -108 -20.5 -194t-63.5 -145t-109 -90.5t-157 -31.5q-85 0 -149.5 31.5t-108 90.5t-65.5 145t-22 194t20 193t62.5 143.5t107.5 89.5t155 31 q86 0 151.5 -31t109.5 -89.5t66.5 -143.5t22.5 -193zM1425 1462l-811 -1462h-239l811 1462h239zM1298 440q0 -127 22.5 -189.5t72.5 -62.5q49 0 72.5 62t23.5 190q0 250 -96 250q-50 0 -72.5 -61.5t-22.5 -188.5zM1741 442q0 -108 -20.5 -193.5t-63.5 -144.5t-109 -90.5 t-157 -31.5q-85 0 -149 31.5t-107.5 90.5t-65.5 144.5t-22 193.5t20 193t62 143.5t107 89.5t155 31q86 0 151.5 -31t109.5 -89.5t66.5 -143.5t22.5 -193z" />
+<glyph unicode="&#x26;" horiz-adv-x="1479" d="M1475 0h-377l-97 100q-80 -55 -176.5 -87.5t-212.5 -32.5q-120 0 -217.5 30t-167 84.5t-107.5 131t-38 169.5q0 77 18.5 137.5t52.5 109.5t82.5 89t108.5 76q-38 46 -64.5 88.5t-42.5 84t-23 83t-7 86.5q0 78 30.5 139.5t85 105t130 66.5t165.5 23q86 0 158.5 -21 t125 -61.5t82.5 -100t30 -135.5q0 -69 -22.5 -126.5t-60.5 -106.5t-89.5 -90t-110.5 -76l260 -268q35 66 61.5 139t45.5 147h317q-15 -57 -35.5 -120t-47.5 -126.5t-62 -126.5t-78 -120zM403 424q0 -44 16 -79t44.5 -59t67 -37t83.5 -13q60 0 111 15.5t94 43.5l-309 330 q-51 -42 -79 -90t-28 -111zM731 1124q0 31 -10 52.5t-26.5 35.5t-37 20.5t-41.5 6.5q-22 0 -44.5 -6t-41 -19.5t-30 -36t-11.5 -55.5q0 -52 23 -98t63 -92q77 44 116.5 88t39.5 104z" />
+<glyph unicode="'" horiz-adv-x="545" d="M412 1462l-41 -528h-197l-41 528h279z" />
+<glyph unicode="(" horiz-adv-x="694" d="M82 561q0 125 18 246.5t55 236t93.5 220t134.5 198.5h250q-141 -193 -213 -424t-72 -475q0 -119 18 -237t54 -231t89 -219t122 -200h-248q-78 90 -134.5 193t-93.5 215.5t-55 232.5t-18 244z" />
+<glyph unicode=")" horiz-adv-x="694" d="M612 561q0 -124 -18 -244t-55 -232.5t-93.5 -215.5t-134.5 -193h-248q69 94 122 200t89 219t54 231t18 237q0 244 -72 475t-213 424h250q78 -93 134.5 -198.5t93.5 -220t55 -236t18 -246.5z" />
+<glyph unicode="*" horiz-adv-x="1116" d="M688 1556l-41 -368l373 104l33 -252l-340 -24l223 -297l-227 -121l-156 313l-137 -311l-236 119l221 297l-338 26l39 250l365 -104l-41 368h262z" />
+<glyph unicode="+" d="M455 612h-367v219h367v369h219v-369h366v-219h-366v-364h-219v364z" />
+<glyph unicode="," horiz-adv-x="594" d="M459 215q-14 -54 -33.5 -115t-43.5 -123l-48 -123l-51 -118h-220q15 61 29 127l28 131q14 66 25 128.5t19 115.5h280z" />
+<glyph unicode="-" horiz-adv-x="659" d="M61 424v250h537v-250h-537z" />
+<glyph unicode="." horiz-adv-x="584" d="M117 143q0 47 13.5 79.5t37.5 52.5t56 29t69 9q35 0 66.5 -9t55.5 -29t38 -52.5t14 -79.5q0 -45 -14 -77t-38 -53t-55.5 -30.5t-66.5 -9.5q-37 0 -69 9.5t-56 30.5t-37.5 53t-13.5 77z" />
+<glyph unicode="/" horiz-adv-x="846" d="M836 1462l-545 -1462h-277l545 1462h277z" />
+<glyph unicode="0" d="M1065 731q0 -177 -27.5 -316t-88 -236t-156 -148t-230.5 -51q-127 0 -221 51t-156 148t-92.5 236t-30.5 316t27.5 317t87.5 237t155 148.5t230 51.5q126 0 220 -51t157 -148t94 -237t31 -318zM371 731q0 -250 43 -376t149 -126q104 0 149.5 125t45.5 377 q0 251 -45.5 377.5t-149.5 126.5q-53 0 -89.5 -32t-59.5 -95t-33 -157.5t-10 -219.5z" />
+<glyph unicode="1" d="M817 0h-309v846v62t2 76l4 80q2 40 2 73q-5 -6 -17 -18l-27 -27l-31 -29q-16 -15 -31 -27l-168 -135l-150 186l471 375h254v-1462z" />
+<glyph unicode="2" d="M1063 0h-981v215l344 371l118 129q53 59 91 115t59 114t21 125q0 74 -44.5 115t-119.5 41q-79 0 -152 -39t-153 -111l-168 199q45 41 94 78.5t108 66.5t130 46.5t159 17.5q105 0 188.5 -29t142.5 -82.5t90.5 -129.5t31.5 -171q0 -86 -30 -164.5t-82 -154t-120.5 -150 t-146.5 -151.5l-176 -177v-14h596v-260z" />
+<glyph unicode="3" d="M1006 1135q0 -76 -24.5 -136.5t-67 -106t-100 -76t-124.5 -46.5v-6q177 -22 268 -107.5t91 -230.5q0 -96 -34.5 -177.5t-106 -141.5t-180 -93.5t-255.5 -33.5q-118 0 -222 19.5t-194 59.5v263q45 -24 95 -42t100 -30.5t98.5 -18.5t91.5 -6q86 0 143 16t91 45t48.5 69.5 t14.5 88.5q0 45 -18.5 81.5t-60 62t-108.5 39.5t-165 14h-104v217h102q92 0 153 16.5t97.5 45t51.5 66.5t15 81q0 78 -48.5 122t-153.5 44q-48 0 -89.5 -9.5t-77 -24t-65 -32t-53.5 -34.5l-156 206q42 31 91.5 57t107.5 45.5t125 30.5t143 11q108 0 196.5 -23.5t151.5 -68 t97.5 -109t34.5 -147.5z" />
+<glyph unicode="4" d="M1085 303h-176v-303h-301v303h-604v215l621 944h284v-919h176v-240zM608 543v248q0 13 0.5 37.5t1.5 55.5q0 31 2 64l4 63q2 30 3 52.5t2 32.5h-9q-18 -42 -40.5 -89t-51.5 -94l-244 -370h332z" />
+<glyph unicode="5" d="M598 934q94 0 175 -29t141 -85t94 -139.5t34 -191.5q0 -119 -37 -213.5t-109 -160t-178.5 -100.5t-244.5 -35q-55 0 -109 5t-103.5 14.5t-94 24.5t-80.5 35v267q35 -20 81 -37.5t95.5 -30t99.5 -20t95 -7.5q134 0 204 55.5t70 176.5q0 108 -68.5 164.5t-211.5 56.5 q-26 0 -55.5 -3t-58 -8t-54.5 -10.5t-45 -11.5l-123 66l55 745h772v-262h-504l-24 -287q32 7 74.5 14t109.5 7z" />
+<glyph unicode="6" d="M76 621q0 105 11.5 209t41 199.5t80 177.5t128 142.5t186 95t253.5 34.5q21 0 46 -1t50.5 -2.5t49.5 -4.5t43 -7v-247q-38 9 -80.5 14.5t-85.5 5.5q-135 0 -222 -33.5t-138 -93.5t-72.5 -144t-26.5 -186h12q20 36 48.5 67.5t66.5 54t85.5 35.5t106.5 13q95 0 171 -31 t128.5 -90t80.5 -145t28 -197q0 -119 -33.5 -213t-95.5 -159.5t-150 -100t-198 -34.5q-108 0 -202 38.5t-163.5 117.5t-109 199.5t-39.5 285.5zM584 227q41 0 74.5 15.5t58 47t38 79.5t13.5 114q0 107 -44.5 168.5t-135.5 61.5q-46 0 -84 -18t-65 -47t-41.5 -65t-14.5 -73 q0 -51 12.5 -101.5t38 -91t63 -65.5t87.5 -25z" />
+<glyph unicode="7" d="M207 0l520 1200h-672v260h1008v-194l-533 -1266h-323z" />
+<glyph unicode="8" d="M565 1481q91 0 172 -22t142 -66t97 -110t36 -155q0 -66 -20 -119.5t-55 -97t-83 -77.5t-104 -62q58 -31 113.5 -69t98.5 -85.5t69 -106.5t26 -132q0 -91 -36 -165t-101 -126t-155.5 -80t-199.5 -28q-118 0 -210 27t-155 77t-95.5 123t-32.5 164q0 75 22 135t60 108t89 85 t109 65q-49 31 -92 67.5t-74.5 81t-50 98.5t-18.5 119q0 87 36.5 152.5t98.5 110t143 66.5t170 22zM358 389q0 -40 13 -73.5t38.5 -57.5t63.5 -37.5t88 -13.5q105 0 157 49.5t52 130.5q0 42 -17.5 75.5t-45 62t-62.5 52.5l-70 46l-22 14q-44 -22 -80 -47.5t-61.5 -56 t-39.5 -66.5t-14 -78zM563 1255q-33 0 -61.5 -10t-49 -29t-32.5 -47t-12 -63q0 -42 12.5 -72.5t34 -54t50 -42t60.5 -36.5q31 16 59 35t49.5 43.5t34.5 55.5t13 71q0 35 -12 63t-33 47t-50 29t-63 10z" />
+<glyph unicode="9" d="M1055 838q0 -105 -11.5 -209.5t-41 -199.5t-80 -177.5t-128 -142.5t-186 -94.5t-254.5 -34.5q-21 0 -46 1t-50.5 2.5t-49.5 4t-42 6.5v248q37 -10 79.5 -15.5t86.5 -5.5q135 0 222 33.5t138 94t72.5 144.5t26.5 185h-13q-20 -36 -48 -67t-66 -54t-86 -36t-107 -13 q-95 0 -171 31t-128.5 90t-80.5 145t-28 197q0 119 33.5 213t95.5 159.5t150.5 100.5t198.5 35q108 0 202 -38.5t163 -117.5t109 -200t40 -285zM547 1231q-41 0 -75 -15t-58.5 -46.5t-38 -80t-13.5 -114.5q0 -106 45 -168t136 -62q46 0 84 18t65 47t41.5 65t14.5 73 q0 51 -12.5 101.5t-38 91t-63 65.5t-87.5 25z" />
+<glyph unicode=":" horiz-adv-x="584" d="M117 143q0 47 13.5 79.5t37.5 52.5t56 29t69 9q35 0 66.5 -9t55.5 -29t37.5 -52.5t14.5 -79.5q0 -45 -14.5 -77t-38 -53t-55 -30.5t-66.5 -9.5q-37 0 -69 9.5t-56 30.5t-37.5 53t-13.5 77zM117 969q0 47 13.5 79.5t37.5 52.5t56 29t69 9q35 0 66.5 -9t55.5 -29 t37.5 -52.5t14.5 -79.5q0 -45 -14.5 -77.5t-38 -53t-55 -30t-66.5 -9.5q-37 0 -69 9.5t-56 30t-37.5 53t-13.5 77.5z" />
+<glyph unicode=";" horiz-adv-x="594" d="M444 238l15 -23q-14 -54 -33.5 -115t-43.5 -123l-48 -123l-51 -118h-220q15 61 29 127l28 131q14 66 25 128.5t19 115.5h280zM117 969q0 47 13.5 79.5t37.5 52.5t56 29t69 9q35 0 66.5 -9t55.5 -29t38 -52.5t14 -79.5q0 -45 -14 -77.5t-38 -53t-55.5 -30t-66.5 -9.5 q-37 0 -69 9.5t-56 30t-37.5 53t-13.5 77.5z" />
+<glyph unicode="&#x3c;" d="M1040 203l-952 438v143l952 496v-240l-643 -317l643 -281v-239z" />
+<glyph unicode="=" d="M88 807v217h952v-217h-952zM88 418v219h952v-219h-952z" />
+<glyph unicode="&#x3e;" d="M88 442l643 281l-643 317v240l952 -496v-143l-952 -438v239z" />
+<glyph unicode="?" horiz-adv-x="940" d="M264 485v74q0 51 10.5 92.5t32 79t55.5 73t82 73.5q42 33 71 59t47 51.5t26 53.5t8 65q0 57 -38.5 94t-117.5 37q-69 0 -148.5 -29t-164.5 -71l-102 221q43 25 93.5 47.5t105 40t110.5 27.5t110 10q102 0 184 -24.5t139 -71.5t87.5 -114t30.5 -153q0 -63 -14 -112.5 t-41.5 -92t-69 -82t-96.5 -83.5q-42 -33 -68.5 -57.5t-41.5 -46.5t-20.5 -45.5t-5.5 -55.5v-60h-264zM231 143q0 47 13.5 79.5t37.5 52.5t56.5 29t69.5 9q35 0 66.5 -9t55.5 -29t38 -52.5t14 -79.5q0 -45 -14 -77t-38 -53t-55.5 -30.5t-66.5 -9.5q-37 0 -69.5 9.5 t-56.5 30.5t-37.5 53t-13.5 77z" />
+<glyph unicode="@" horiz-adv-x="1774" d="M1673 752q0 -95 -22.5 -188t-68.5 -166.5t-115.5 -119t-163.5 -45.5q-38 0 -71.5 9.5t-61.5 27t-48.5 41t-31.5 51.5h-15q-19 -25 -44 -48.5t-56 -41.5t-68.5 -28.5t-81.5 -10.5q-83 0 -147.5 28.5t-108.5 81t-67 126t-23 162.5q0 103 31 189t89 148.5t141 97t186 34.5 q45 0 93 -5t92.5 -13t83.5 -18t67 -20l-21 -419q-2 -22 -2 -43v-27q0 -42 6.5 -69t17 -42.5t24 -21.5t28.5 -6q35 0 61 27t43 73t26 107.5t9 130.5q0 128 -38 228t-105.5 169t-160.5 105t-202 36q-153 0 -269.5 -51t-195 -142.5t-119 -216.5t-40.5 -274q0 -138 35 -244.5 t104 -179t170 -110t233 -37.5q56 0 115 7t117.5 19t115 29t107.5 37v-192q-94 -42 -208.5 -66.5t-244.5 -24.5q-181 0 -323.5 51.5t-240.5 148.5t-150 237.5t-52 318.5q0 124 27 237.5t78 211t124.5 177t167.5 136t207 87t242 30.5q158 0 291 -50.5t229.5 -145t150.5 -229.5 t54 -304zM711 627q0 -112 38 -161.5t101 -49.5q42 0 72.5 19.5t50 55t30 85t13.5 110.5l12 221q-20 5 -47 8t-55 3q-59 0 -100 -25t-66.5 -66t-37 -93.5t-11.5 -106.5z" />
+<glyph unicode="A" horiz-adv-x="1331" d="M1018 0l-100 348h-504l-101 -348h-313l475 1468h379l477 -1468h-313zM846 608l-94 320q-6 18 -18 59l-26 91q-13 49 -25 99t-17 85q-4 -22 -10.5 -52t-15.5 -64l-17 -67l-17 -64l-14 -53l-10 -34l-93 -320h357z" />
+<glyph unicode="B" horiz-adv-x="1315" d="M184 1462h428q138 0 242 -19.5t174 -63t105.5 -114t35.5 -173.5q0 -62 -15 -116t-44 -95t-70.5 -68.5t-95.5 -36.5v-10q55 -12 102.5 -34.5t83 -62t56 -99.5t20.5 -146q0 -100 -35 -178.5t-100.5 -133t-159 -83.5t-211.5 -29h-516v1462zM494 883h161q58 0 97 10.5 t63 31.5t34.5 52.5t10.5 73.5q0 84 -52.5 120.5t-166.5 36.5h-147v-325zM494 637v-381h182q61 0 102.5 14t67 40t36.5 63t11 82q0 41 -11 74.5t-37.5 57.5t-69.5 37t-107 13h-174z" />
+<glyph unicode="C" horiz-adv-x="1305" d="M805 1225q-89 0 -157.5 -34.5t-115 -99t-70.5 -157t-24 -207.5q0 -117 21.5 -208t66 -153.5t114 -95t165.5 -32.5q89 0 178.5 20t194.5 57v-260q-48 -20 -95 -34t-96 -23t-100.5 -13.5t-110.5 -4.5q-169 0 -293 54t-205 152t-120 236t-39 307q0 166 45 304.5t132 238.5 t215 155.5t294 55.5q109 0 218.5 -27.5t209.5 -75.5l-100 -252q-82 39 -165 68t-163 29z" />
+<glyph unicode="D" horiz-adv-x="1434" d="M1315 745q0 -185 -50.5 -324.5t-146 -233t-234 -140.5t-315.5 -47h-385v1462h428q161 0 290.5 -46t221.5 -136.5t141.5 -224.5t49.5 -310zM1001 737q0 122 -24.5 210.5t-71 146.5t-114 86t-154.5 28h-143v-952h114q196 0 294.5 120t98.5 361z" />
+<glyph unicode="E" horiz-adv-x="1147" d="M1026 0h-842v1462h842v-254h-532v-321h495v-254h-495v-377h532v-256z" />
+<glyph unicode="F" horiz-adv-x="1124" d="M489 0h-305v1462h838v-254h-533v-377h496v-253h-496v-578z" />
+<glyph unicode="G" horiz-adv-x="1483" d="M739 821h580v-758q-58 -19 -117 -34.5t-122.5 -26t-133 -16.5t-147.5 -6q-164 0 -290.5 48.5t-213 144t-131.5 236t-45 324.5q0 172 50 311t147.5 236.5t240 150t326.5 52.5q117 0 229 -25t205 -65l-103 -248q-68 34 -153.5 57t-179.5 23q-102 0 -183.5 -35.5 t-139.5 -100.5t-89 -157t-31 -205q0 -108 21.5 -197.5t67.5 -154.5t118.5 -101t173.5 -36q66 0 111.5 6t85.5 14v305h-277v258z" />
+<glyph unicode="H" horiz-adv-x="1485" d="M1300 0h-309v631h-497v-631h-310v1462h310v-573h497v573h309v-1462z" />
+<glyph unicode="I" horiz-adv-x="797" d="M731 0h-665v176l178 82v946l-178 82v176h665v-176l-178 -82v-946l178 -82v-176z" />
+<glyph unicode="J" horiz-adv-x="678" d="M-2 -430q-65 0 -114 6.5t-83 15.5v258q37 -8 77.5 -14t88.5 -6q46 0 85.5 10t69 34.5t46 65.5t16.5 103v1419h310v-1409q0 -126 -36.5 -217t-102 -150.5t-156.5 -87.5t-201 -28z" />
+<glyph unicode="K" horiz-adv-x="1298" d="M1298 0h-352l-336 608l-116 -86v-522h-310v1462h310v-704l122 207l334 497h344l-467 -659z" />
+<glyph unicode="L" horiz-adv-x="1096" d="M184 0v1462h310v-1206h532v-256h-842z" />
+<glyph unicode="M" horiz-adv-x="1870" d="M772 0l-321 1147h-9q6 -92 10 -178l4 -76l2 -77q2 -38 2.5 -73t0.5 -63v-680h-277v1462h422l316 -1118h6l336 1118h422v-1462h-289v692q0 26 0.5 59t1.5 70t2.5 75t2.5 74q4 84 7 175h-8l-346 -1145h-285z" />
+<glyph unicode="N" horiz-adv-x="1604" d="M1419 0h-393l-575 1106h-9q6 -77 10 -153q4 -65 6.5 -136.5t2.5 -128.5v-688h-277v1462h391l574 -1095h6q-3 76 -7 150q-1 32 -2.5 65.5t-2.5 67t-1.5 64.5t-0.5 56v692h278v-1462z" />
+<glyph unicode="O" horiz-adv-x="1548" d="M1430 733q0 -169 -39.5 -308t-120.5 -238t-204.5 -153t-291.5 -54t-291.5 54t-204 153t-120 238.5t-39.5 309.5t39.5 308.5t120.5 236.5t204.5 151.5t292.5 53.5q168 0 291 -53.5t203.5 -152t120 -237t39.5 -309.5zM438 733q0 -115 20 -206.5t61.5 -155t104.5 -97.5 t150 -34q89 0 152.5 34t104 97.5t60 155t19.5 206.5t-19.5 206.5t-60 155.5t-103.5 98t-151 34q-87 0 -151 -34t-105.5 -98t-61.5 -155.5t-20 -206.5z" />
+<glyph unicode="P" horiz-adv-x="1225" d="M494 774h61q131 0 197.5 52t66.5 169q0 109 -59.5 161t-186.5 52h-79v-434zM1133 1006q0 -96 -29 -184t-95.5 -155t-175 -107t-268.5 -40h-71v-520h-310v1462h406q141 0 243.5 -31.5t169 -90t98.5 -143t32 -191.5z" />
+<glyph unicode="Q" horiz-adv-x="1548" d="M1430 733q0 -119 -19.5 -223.5t-59 -190.5t-99 -153t-140.5 -111l361 -403h-398l-268 330q-7 0 -13 -1q-5 -1 -10 -1h-10q-168 0 -291.5 54t-204 153t-120 238.5t-39.5 309.5t39.5 308.5t120.5 236.5t204.5 151.5t292.5 53.5q168 0 291 -53.5t203.5 -152t120 -237 t39.5 -309.5zM438 733q0 -115 20 -206.5t61.5 -155t104.5 -97.5t150 -34q89 0 152.5 34t104 97.5t60 155t19.5 206.5t-19.5 206.5t-60 155.5t-103.5 98t-151 34q-87 0 -151 -34t-105.5 -98t-61.5 -155.5t-20 -206.5z" />
+<glyph unicode="R" horiz-adv-x="1290" d="M494 813h84q129 0 185 51.5t56 151.5q0 104 -60 148t-186 44h-79v-395zM494 561v-561h-310v1462h400q281 0 415 -108.5t134 -329.5q0 -75 -20 -136t-53.5 -108.5t-77 -83t-91.5 -59.5l199 -318l74 -117l63 -102l46 -72l17 -28h-344l-317 561h-135z" />
+<glyph unicode="S" horiz-adv-x="1073" d="M985 406q0 -98 -33.5 -176.5t-98 -134t-158 -85.5t-214.5 -30q-106 0 -204.5 22t-182.5 66v288l97 -44q49 -22 99.5 -39t101 -27t100.5 -10q51 0 87.5 11.5t59 32t33 49t10.5 62.5q0 41 -17.5 72.5t-49 59t-76 53.5t-99.5 55q-46 24 -103 58t-107.5 84.5t-84.5 122 t-34 171.5q0 98 32.5 175.5t92.5 131t145.5 81.5t191.5 28q53 0 103.5 -7t100 -20t99.5 -32t103 -44l-100 -241q-45 21 -84 37t-76 27t-72.5 16.5t-71.5 5.5q-78 0 -119.5 -41.5t-41.5 -110.5q0 -37 12.5 -65.5t40 -53.5t71 -51t105.5 -59q75 -40 138 -81.5t108.5 -92 t70.5 -114.5t25 -150z" />
+<glyph unicode="T" horiz-adv-x="1124" d="M717 0h-309v1204h-367v258h1042v-258h-366v-1204z" />
+<glyph unicode="U" horiz-adv-x="1466" d="M1292 1462v-946q0 -114 -34.5 -212t-105 -170t-176.5 -113t-249 -41q-135 0 -238.5 38.5t-173 109.5t-105.5 170.5t-36 221.5v942h309v-919q0 -81 16 -138.5t47.5 -94t78.5 -53.5t110 -17q131 0 189.5 76t58.5 229v917h309z" />
+<glyph unicode="V" horiz-adv-x="1249" d="M936 1462h313l-456 -1462h-338l-455 1462h313l248 -880q5 -17 13 -57l18 -88l19 -96q9 -48 14 -81q5 33 14 81t19 95.5t19.5 87.5t14.5 58z" />
+<glyph unicode="W" horiz-adv-x="1898" d="M1546 0h-352l-180 721q-4 15 -10 42l-12 61l-14 71q-7 37 -13 72t-10.5 64.5t-6.5 47.5q-2 -18 -6.5 -47.5t-10.5 -63.5l-13 -72l-12 -71l-13 -62t-10 -44l-178 -719h-353l-352 1462h305l166 -798l9 -46l12 -69l14 -80l15 -82l13 -75q6 -34 9 -56q3 22 9 56l11 72 q6 39 13 80l14 76q6 36 11.5 63.5t8.5 39.5l203 819h272l203 -819q3 -12 8 -39l12 -64l14 -76l14 -80l12 -72l8 -56q3 22 8.5 56.5t12.5 74.5l15 82l14 80l12 69l9 46l166 798h305z" />
+<glyph unicode="X" horiz-adv-x="1284" d="M1284 0h-354l-299 553l-299 -553h-332l444 754l-413 708h342l274 -526l268 526h334l-418 -725z" />
+<glyph unicode="Y" horiz-adv-x="1196" d="M598 860l264 602h334l-444 -893v-569h-308v559l-444 903h336z" />
+<glyph unicode="Z" horiz-adv-x="1104" d="M1055 0h-1006v201l619 1005h-600v256h968v-200l-618 -1006h637v-256z" />
+<glyph unicode="[" horiz-adv-x="678" d="M627 -324h-484v1786h484v-211h-224v-1364h224v-211z" />
+<glyph unicode="\" horiz-adv-x="846" d="M289 1462l545 -1462h-277l-545 1462h277z" />
+<glyph unicode="]" horiz-adv-x="678" d="M51 -113h223v1364h-223v211h484v-1786h-484v211z" />
+<glyph unicode="^" horiz-adv-x="1090" d="M8 520l438 950h144l495 -950h-239l-322 643l-140 -324l-140 -319h-236z" />
+<glyph unicode="_" horiz-adv-x="842" d="M846 -324h-850v140h850v-140z" />
+<glyph unicode="`" horiz-adv-x="1182" d="M645 1241l-81 69l-94 86q-46 44 -84 84.5t-54 67.5v21h342q16 -35 38 -75l44 -80l47 -78.5t45 -67.5v-27h-203z" />
+<glyph unicode="a" horiz-adv-x="1176" d="M809 0l-59 152h-9q-33 -45 -66 -77.5t-72 -53.5t-87.5 -31t-112.5 -10q-68 0 -126 21.5t-100.5 65t-66.5 110t-24 157.5q0 178 114 262.5t341 93.5l178 6v84q0 69 -40 102t-112 33t-140.5 -21t-137.5 -56l-99 202q84 47 186 74t214 27q209 0 320.5 -98t111.5 -298v-745 h-213zM719 518l-101 -4q-61 -2 -103 -16t-67.5 -37.5t-37 -56t-11.5 -72.5q0 -70 34 -99.5t89 -29.5q42 0 78 14.5t62.5 43t41.5 70t15 95.5v92z" />
+<glyph unicode="b" horiz-adv-x="1245" d="M756 1139q86 0 157 -37t122 -110t79.5 -181t28.5 -250q0 -144 -28.5 -252.5t-80.5 -181.5t-125 -110t-161 -37q-56 0 -99.5 12t-77.5 32t-59.5 45.5t-46.5 53.5h-21l-51 -123h-233v1556h305v-362q0 -33 -2 -71.5t-4 -71.5l-6 -78h12q21 35 48 65t62.5 52.5t80.5 35.5 t100 13zM653 895q-51 0 -86.5 -18.5t-57.5 -55.5t-32 -93.5t-12 -131.5v-33q0 -81 9.5 -144t31.5 -105.5t58.5 -64.5t90.5 -22q91 0 133.5 86.5t42.5 251.5t-42.5 247.5t-135.5 82.5z" />
+<glyph unicode="c" horiz-adv-x="1022" d="M625 -20q-120 0 -216.5 33t-165 102.5t-105 178t-36.5 259.5q0 167 37.5 279.5t106 180.5t165 97t214.5 29q86 0 171 -21t160 -59l-88 -232q-66 29 -127 47.5t-116 18.5q-111 0 -161 -84.5t-50 -253.5q0 -168 50 -248t157 -80q87 0 158 22.5t145 57.5v-254 q-37 -18 -72 -32t-70.5 -23t-74 -13.5t-82.5 -4.5z" />
+<glyph unicode="d" horiz-adv-x="1245" d="M489 -20q-86 0 -157 37t-122 109.5t-79.5 180.5t-28.5 250q0 144 28.5 252.5t81 182t125.5 110.5t161 37q54 0 99 -12.5t81 -35t64.5 -52t50.5 -64.5h10q-6 39 -11 79q-5 34 -8.5 72.5t-3.5 71.5v358h305v-1556h-233l-59 145h-13q-21 -34 -48 -64.5t-62.5 -52.5t-80 -35 t-100.5 -13zM600 223q54 0 92 18.5t61.5 56t35 93.5t12.5 131v33q0 81 -10 144t-33 105.5t-62 64.5t-98 22q-96 0 -141 -86.5t-45 -251.5t45.5 -247.5t142.5 -82.5z" />
+<glyph unicode="e" horiz-adv-x="1190" d="M612 922q-81 0 -134.5 -57t-61.5 -179h389q-1 51 -13 94t-36 74.5t-60 49.5t-84 18zM651 -20q-120 0 -221 35t-174 105.5t-113.5 178t-40.5 252.5q0 147 37 257t103.5 183.5t160 110.5t207.5 37q111 0 200.5 -33.5t152 -98.5t96 -159.5t33.5 -216.5v-148h-682 q2 -64 20.5 -115.5t52 -87t81 -54.5t108.5 -19q51 0 96.5 5.5t88.5 16.5t85 27.5t86 38.5v-236q-40 -21 -80.5 -35.5t-85.5 -24.5t-97 -14.5t-114 -4.5z" />
+<glyph unicode="f" horiz-adv-x="793" d="M741 889h-227v-889h-305v889h-168v147l168 82v82q0 107 26 177.5t74 112.5t116 59.5t153 17.5q92 0 155 -14.5t107 -32.5l-72 -224q-31 11 -65 20t-80 9q-60 0 -84.5 -38.5t-24.5 -98.5v-70h227v-229z" />
+<glyph unicode="g" horiz-adv-x="1130" d="M1085 1116v-166l-163 -51q20 -34 28 -70.5t8 -78.5q0 -85 -27 -155.5t-80 -120.5t-133 -77.5t-186 -27.5q-23 0 -50 2.5t-40 5.5q-20 -17 -31.5 -35.5t-11.5 -44.5q0 -21 13 -33.5t34 -20t49 -10t58 -2.5h174q81 0 145 -18.5t108.5 -56.5t68.5 -96.5t24 -139.5 q0 -95 -38 -171.5t-113.5 -130t-187.5 -82t-259 -28.5q-114 0 -199 21.5t-142 62t-85.5 97.5t-28.5 129q0 61 21 106t56 77t79.5 52t91.5 31q-21 9 -41.5 25t-37 37t-27 46.5t-10.5 53.5q0 32 9.5 58t27.5 48.5t45 42.5t61 41q-88 38 -139.5 122t-51.5 198q0 90 28 161 t82 120.5t134 75.5t184 26q20 0 45 -2.5t49.5 -6t45.5 -7.5t33 -7h380zM285 -158q0 -25 10.5 -48.5t34.5 -41.5t63 -28.5t96 -10.5q156 0 235 44t79 118q0 63 -49 84t-152 21h-141q-27 0 -58 -6.5t-57 -22.5t-43.5 -42.5t-17.5 -66.5zM395 752q0 -91 34 -141t103 -50 q72 0 104 50t32 141q0 90 -31.5 143t-104.5 53q-137 0 -137 -196z" />
+<glyph unicode="h" horiz-adv-x="1284" d="M1130 0h-305v653q0 121 -37.5 181.5t-115.5 60.5q-59 0 -99 -24t-64 -71t-34 -116t-10 -158v-526h-305v1556h305v-317q0 -42 -2 -88.5t-5 -85.5q-4 -46 -7 -90h16q49 87 125 125.5t172 38.5q83 0 150.5 -23.5t115.5 -73.5t74 -127.5t26 -185.5v-729z" />
+<glyph unicode="i" horiz-adv-x="625" d="M147 1407q0 43 13 71.5t35.5 46t53 24.5t64.5 7t64 -7t52.5 -24.5t36 -46t13.5 -71.5q0 -42 -13.5 -71t-36 -46.5t-52.5 -25t-64 -7.5t-64.5 7.5t-53 25t-35.5 46.5t-13 71zM465 0h-305v1118h305v-1118z" />
+<glyph unicode="j" horiz-adv-x="625" d="M102 -492q-48 0 -99 7t-85 18v240q31 -10 58 -14.5t61 -4.5q25 0 47.5 7.5t39 27t26.5 52t10 83.5v1194h305v-1239q0 -77 -19.5 -144.5t-63 -118t-112.5 -79.5t-168 -29zM147 1407q0 43 13 71.5t35.5 46t53 24.5t64.5 7t64 -7t52.5 -24.5t36 -46t13.5 -71.5 q0 -42 -13.5 -71t-36 -46.5t-52.5 -25t-64 -7.5t-64.5 7.5t-53 25t-35.5 46.5t-13 71z" />
+<glyph unicode="k" horiz-adv-x="1208" d="M453 608l112 170l273 340h344l-404 -485l430 -633h-352l-272 430l-119 -82v-348h-305v1556h305v-694l-16 -254h4z" />
+<glyph unicode="l" horiz-adv-x="625" d="M465 0h-305v1556h305v-1556z" />
+<glyph unicode="m" horiz-adv-x="1929" d="M1120 0h-305v653q0 121 -36 181.5t-113 60.5q-58 0 -96.5 -24t-61.5 -71t-33 -116t-10 -158v-526h-305v1118h233l41 -143h17q24 43 57.5 74t73.5 51t85 29.5t91 9.5q115 0 195.5 -39.5t123.5 -124.5h25q24 43 58 74t75 51t86.5 29.5t91.5 9.5q180 0 271.5 -97.5 t91.5 -312.5v-729h-306v653q0 121 -36 181.5t-113 60.5q-109 0 -155 -86.5t-46 -247.5v-561z" />
+<glyph unicode="n" horiz-adv-x="1284" d="M1130 0h-305v653q0 121 -36.5 181.5t-116.5 60.5q-60 0 -100 -24t-63.5 -71t-33.5 -116t-10 -158v-526h-305v1118h233l41 -143h17q24 43 58.5 74t75.5 51t87 29.5t94 9.5q82 0 149 -23.5t115 -73.5t74 -127.5t26 -185.5v-729z" />
+<glyph unicode="o" horiz-adv-x="1227" d="M414 561q0 -167 47 -251.5t153 -84.5q105 0 152 85t47 251q0 167 -47 249.5t-154 82.5q-105 0 -151.5 -82.5t-46.5 -249.5zM1124 561q0 -140 -35.5 -248t-102 -182t-162 -112.5t-214.5 -38.5q-111 0 -204 38.5t-160.5 112.5t-105.5 182t-38 248q0 139 35.5 247t102 181.5 t161.5 111.5t215 38q111 0 204 -38t160.5 -111.5t105.5 -181.5t38 -247z" />
+<glyph unicode="p" horiz-adv-x="1245" d="M748 -20q-55 0 -98.5 12t-77.5 32t-60 45.5t-47 53.5h-16q4 -35 8 -66q3 -26 5.5 -53.5t2.5 -42.5v-453h-305v1610h248l43 -145h14q21 34 48 64t62.5 52.5t80.5 36t100 13.5q87 0 158 -37t122 -110t79 -181t28 -250q0 -143 -29 -251.5t-81.5 -182t-125 -110.5t-159.5 -37 zM653 895q-51 0 -86.5 -18.5t-57.5 -55.5t-32 -93.5t-12 -131.5v-33q0 -81 9.5 -144t31.5 -105.5t58.5 -64.5t90.5 -22q91 0 133.5 86.5t42.5 251.5t-42.5 247.5t-135.5 82.5z" />
+<glyph unicode="q" horiz-adv-x="1245" d="M602 219q55 0 92.5 18.5t60.5 55.5t34 93.5t12 131.5v37q0 81 -9.5 144t-33 105.5t-62 64.5t-96.5 22q-96 0 -141 -86.5t-45 -251.5q0 -168 45.5 -251t142.5 -83zM489 -20q-87 0 -158 37t-122 109.5t-79 180.5t-28 250q0 143 28.5 251.5t81 182t125.5 111t161 37.5 q56 0 101 -12.5t81.5 -35t64.5 -52t50 -64.5h8l24 143h258v-1610h-305v469q0 19 2.5 47.5t4.5 55.5l6 65h-13q-20 -34 -47 -64.5t-62.5 -52.5t-80.5 -35t-101 -13z" />
+<glyph unicode="r" horiz-adv-x="889" d="M743 1139q12 0 26.5 -0.5t28 -2t25 -3t17.5 -3.5v-286q-8 2 -22 4t-29.5 3.5t-30.5 2t-25 0.5q-59 0 -108.5 -15t-85 -48.5t-55 -88t-19.5 -133.5v-569h-305v1118h231l45 -168h15q24 43 52 78t62.5 59.5t78 38t99.5 13.5z" />
+<glyph unicode="s" horiz-adv-x="985" d="M905 332q0 -88 -32 -154t-91 -110t-143 -66t-188 -22q-55 0 -102 3.5t-89 11.5t-81 20t-79 30v252q42 -21 88.5 -38t92.5 -29.5t89.5 -19.5t80.5 -7q41 0 70 7.5t47.5 21t27 32t8.5 39.5t-6.5 37.5t-29.5 35t-67.5 42t-119.5 57.5q-73 33 -126.5 65.5t-88 72.5 t-51.5 91.5t-17 122.5q0 78 30 136.5t85 97.5t132.5 58.5t172.5 19.5q100 0 190 -23t185 -69l-92 -216q-76 36 -145 59t-138 23q-62 0 -89.5 -22t-27.5 -60q0 -20 7 -35.5t28 -32t59 -36t99 -47.5q71 -31 128 -61.5t98 -69.5t63 -91t22 -126z" />
+<glyph unicode="t" horiz-adv-x="848" d="M614 223q45 0 85.5 10t82.5 25v-227q-43 -22 -106.5 -36.5t-138.5 -14.5q-73 0 -136 17t-109 59.5t-72.5 114t-26.5 179.5v539h-146v129l168 102l88 236h195v-238h272v-229h-272v-539q0 -65 32 -96t84 -31z" />
+<glyph unicode="u" horiz-adv-x="1284" d="M891 0l-41 143h-16q-25 -43 -59.5 -73.5t-75.5 -50.5t-87 -29.5t-94 -9.5q-82 0 -149 23.5t-115 73.5t-74 127t-26 185v729h305v-653q0 -121 36.5 -181.5t116.5 -60.5q60 0 100 24t63.5 71t33.5 116t10 158v526h305v-1118h-233z" />
+<glyph unicode="v" horiz-adv-x="1104" d="M395 0l-395 1118h319l185 -637q17 -57 29.5 -118.5t15.5 -110.5h6q3 53 15.5 112.5t29.5 116.5l184 637h320l-395 -1118h-314z" />
+<glyph unicode="w" horiz-adv-x="1651" d="M1014 0l-86 391q-4 17 -10 49l-15 70l-17 84l-17 89l-44 222h-6l-42 -223l-17 -89l-16 -85l-14 -71l-11 -50l-90 -387h-328l-301 1118h303l113 -495q9 -39 18.5 -93.5t17.5 -109.5l16 -106l11 -78h6q1 19 4.5 49.5t8.5 65.5l10 71q6 37 12 69l10 57q4 24 7 34l122 536 h336l117 -536q5 -22 13 -68l17 -98q8 -53 14 -102.5t7 -77.5h6q3 25 11 74l16 106q9 56 19.5 112t19.5 95l117 495h299l-305 -1118h-332z" />
+<glyph unicode="x" horiz-adv-x="1122" d="M389 571l-360 547h346l186 -336l189 336h346l-365 -547l381 -571h-346l-205 362l-205 -362h-346z" />
+<glyph unicode="y" horiz-adv-x="1104" d="M0 1118h334l180 -629q16 -52 23.5 -111t9.5 -106h6q2 23 5.5 51t8.5 57t11.5 57.5t13.5 51.5l176 629h336l-442 -1261q-62 -177 -169 -263t-268 -86q-52 0 -90 5.5t-65 11.5v242q21 -5 53 -9t67 -4q48 0 82 13t58.5 36.5t42 56.5t30.5 74l19 56z" />
+<glyph unicode="z" horiz-adv-x="936" d="M877 0h-822v180l457 705h-426v233h772v-198l-442 -687h461v-233z" />
+<glyph unicode="{" horiz-adv-x="745" d="M221.5 408q-65.5 41 -190.5 41v239q62 0 110.5 9.5t81.5 31t49.5 55.5t14.5 82v318q0 74 19 126.5t68.5 86t134.5 49.5t216 16v-225q-40 -1 -72.5 -7t-55 -21.5t-34.5 -42.5t-12 -70v-299q-6 -187 -234 -222v-12q115 -17 176 -72t58 -149v-299q0 -43 12 -70t34.5 -42.5 t55 -21.5t72.5 -7v-226q-131 0 -216 16t-134.5 49.5t-68.5 86.5t-19 127v315q0 97 -65.5 138z" />
+<glyph unicode="|" d="M455 1550h219v-2015h-219v2015z" />
+<glyph unicode="}" horiz-adv-x="745" d="M469 -45q0 -74 -19 -127t-68.5 -86.5t-134.5 -49.5t-216 -16v226q40 1 72 7t54.5 21.5t35 42.5t12.5 70v299q-3 94 58 149t175 72v12q-227 35 -233 222v299q0 43 -12.5 70t-35 42.5t-54.5 21.5t-72 7v225q131 0 216 -16t134.5 -49.5t68.5 -86t19 -126.5v-318 q-1 -48 15 -82t49 -55.5t81.5 -31t110.5 -9.5v-239q-125 0 -190.5 -41t-65.5 -138v-315z" />
+<glyph unicode="~" d="M528 616q-37 16 -65.5 27t-52 17.5t-44.5 9t-44 2.5q-29 0 -60 -9.5t-61 -26t-58.5 -38.5t-54.5 -47v231q51 54 114.5 81.5t141.5 27.5q30 0 55.5 -2.5t54 -9.5t63.5 -19.5t83 -32.5q38 -16 66.5 -26.5t52.5 -17t45 -9t43 -2.5q29 0 60 9.5t61 25.5t58.5 38.5t53.5 47.5 v-231q-101 -109 -256 -109q-30 0 -55.5 2.5t-54 9t-63.5 19t-83 32.5z" />
+<glyph unicode="&#xa1;" horiz-adv-x="586" d="M168 606h244l51 -975h-346zM467 948q0 -47 -13.5 -79.5t-37.5 -52.5t-56 -29t-69 -9q-35 0 -66.5 9t-55.5 29t-38 52.5t-14 79.5q0 45 14 77.5t38 53t55.5 30t66.5 9.5q37 0 69 -9.5t56 -30t37.5 -53t13.5 -77.5z" />
+<glyph unicode="&#xa2;" d="M543 -20v206q-92 13 -166 50.5t-126 104t-80 166t-28 236.5q0 141 28 242.5t80.5 169.5t126.5 105.5t165 50.5v172h178v-164q38 -1 76 -6.5t73.5 -13.5t67 -18t55.5 -21l-86 -226q-21 10 -47.5 19.5t-54.5 17t-55.5 12t-51.5 4.5q-66 0 -112 -20t-75.5 -61.5t-42.5 -105 t-13 -150.5q0 -171 57 -250.5t186 -79.5q76 0 146.5 18.5t120.5 42.5v-239q-51 -29 -113 -44.5t-131 -17.5v-200h-178z" />
+<glyph unicode="&#xa3;" d="M680 1483q110 0 199.5 -24t169.5 -58l-93 -230q-71 29 -129.5 46.5t-121.5 17.5q-67 0 -104.5 -38.5t-37.5 -133.5v-193h334v-219h-334v-143q0 -55 -13.5 -95.5t-35.5 -69.5t-48.5 -49t-53.5 -34h678v-260h-1008v248q42 18 75.5 39t57 50t35.5 70t12 99v145h-178v219h178 v195q0 113 31.5 192.5t87 129.5t132 73t167.5 23z" />
+<glyph unicode="&#xa4;" d="M168 723q0 54 14 103.5t39 93.5l-129 127l148 147l127 -127q43 25 94 39t102 14q54 0 102 -13.5t95 -41.5l127 129l149 -143l-129 -129q25 -42 39.5 -93.5t14.5 -105.5q0 -56 -14 -105t-40 -94l125 -125l-145 -145l-127 125q-44 -23 -93.5 -37t-103.5 -14 q-56 0 -105.5 12.5t-92.5 38.5l-125 -123l-146 145l127 125q-53 91 -53 197zM375 723q0 -39 15 -73.5t40.5 -60t59.5 -40t73 -14.5q40 0 75 14.5t61.5 40t41.5 60t15 73.5q0 40 -15 74.5t-41.5 60t-61.5 40.5t-75 15q-39 0 -73 -15t-59.5 -40.5t-40.5 -60t-15 -74.5z" />
+<glyph unicode="&#xa5;" d="M565 860l244 602h313l-362 -747h194v-178h-245v-138h245v-178h-245v-221h-287v221h-248v178h248v138h-248v178h191l-357 747h316z" />
+<glyph unicode="&#xa6;" d="M455 1550h219v-815h-219v815zM455 350h219v-815h-219v815z" />
+<glyph unicode="&#xa7;" horiz-adv-x="995" d="M121 805q0 44 10.5 81.5t29 69t42.5 56.5t51 43q-63 40 -98 99t-35 134q0 65 29 118.5t82.5 91.5t128 58.5t165.5 20.5q102 0 190 -23.5t173 -60.5l-82 -190q-68 32 -138.5 57.5t-148.5 25.5q-81 0 -118 -23t-37 -71q0 -25 12 -46t38 -40.5t66.5 -39t96.5 -42.5 q71 -28 129.5 -62t100 -75.5t64.5 -92t23 -112.5q0 -100 -34.5 -161.5t-90.5 -98.5q62 -40 93.5 -92.5t31.5 -126.5t-31 -133.5t-88 -101.5t-138.5 -65t-182.5 -23q-110 0 -194.5 20.5t-154.5 58.5v207q39 -20 84 -37.5t91 -31t90.5 -21.5t83.5 -8q56 0 93 9t59.5 25t32 37 t9.5 46t-7.5 44.5t-30 38.5t-63 40t-106.5 49q-76 32 -136 64t-101 72.5t-62.5 91.5t-21.5 120zM344 827q0 -63 56.5 -111.5t174.5 -99.5l15 -6q15 11 29 25.5t25 32.5t17.5 40t6.5 48q0 32 -10.5 59t-36.5 52.5t-71.5 50t-115.5 49.5q-18 -7 -34 -20.5t-28.5 -31.5t-20 -40 t-7.5 -48z" />
+<glyph unicode="&#xa8;" horiz-adv-x="1182" d="M248 1405q0 35 11 60.5t29.5 42t44 24.5t54.5 8t54.5 -8t44.5 -24.5t30.5 -42t11.5 -60.5q0 -34 -11.5 -59t-30.5 -41.5t-44.5 -24.5t-54.5 -8t-54.5 8t-44 24.5t-29.5 41.5t-11 59zM651 1405q0 35 11 60.5t30 42t45 24.5t56 8q28 0 53.5 -8t45 -24.5t31 -42t11.5 -60.5 q0 -34 -11.5 -59t-31 -41.5t-45 -24.5t-53.5 -8q-60 0 -101 33t-41 100z" />
+<glyph unicode="&#xa9;" horiz-adv-x="1704" d="M895 1010q-97 0 -150 -74t-53 -205q0 -135 48 -207.5t155 -72.5q57 0 123 15t123 44v-191q-57 -27 -116 -42t-136 -15q-107 0 -187 34t-133.5 96t-80.5 148.5t-27 192.5q0 103 26 188.5t78.5 147t131.5 95.5t184 34q83 0 160 -22t145 -56l-74 -168q-113 58 -217 58z M100 731q0 104 27 200t75.5 179.5t117.5 152.5t152.5 117.5t179.5 75.5t200 27t200 -27t179.5 -75.5t152.5 -117.5t117.5 -152.5t75.5 -179.5t27 -200t-27 -200t-75.5 -179.5t-117.5 -152t-152.5 -117.5t-179.5 -75.5t-200 -26.5t-200 26.5t-179.5 75.5t-152.5 117.5 t-117.5 152t-75.5 179.5t-27 200zM242 731q0 -127 48 -238t130.5 -193.5t193.5 -130.5t238 -48t238 48t193.5 130.5t130.5 193.5t48 238t-48 238t-130.5 193.5t-193.5 130.5t-238 48t-238 -48t-193.5 -130.5t-130.5 -193.5t-48 -238z" />
+<glyph unicode="&#xaa;" horiz-adv-x="743" d="M520 764l-31 110q-40 -58 -96.5 -90t-124.5 -32q-50 0 -90.5 13.5t-69.5 41t-45 69.5t-16 99q0 60 21.5 101.5t62 68t100 40t134.5 17.5l90 4q0 63 -29.5 90t-83.5 27q-40 0 -89 -17t-101 -44l-66 135q62 32 136 57t165 25q68 0 118.5 -19.5t83.5 -55t49.5 -86 t16.5 -112.5v-442h-135zM373 1081q-38 -3 -61.5 -13t-37 -24.5t-18 -31.5t-4.5 -35q0 -38 19 -56t46 -18q32 0 57.5 11t43.5 30.5t27.5 47t9.5 59.5v36z" />
+<glyph unicode="&#xab;" horiz-adv-x="1198" d="M82 573l309 455l219 -119l-217 -348l217 -348l-219 -119l-309 453v26zM588 573l309 455l219 -119l-217 -348l217 -348l-219 -119l-309 453v26z" />
+<glyph unicode="&#xac;" d="M1040 248h-219v364h-733v219h952v-583z" />
+<glyph unicode="&#xad;" horiz-adv-x="659" d="M61 424v250h537v-250h-537z" />
+<glyph unicode="&#xae;" horiz-adv-x="1704" d="M1157 905q0 -94 -38.5 -149t-104.5 -84l237 -400h-254l-178 338h-47v-338h-229v916h264q182 0 266 -70t84 -213zM772 778h31q66 0 94.5 28.5t28.5 94.5q0 35 -7.5 58t-23 36.5t-39 19t-55.5 5.5h-29v-242zM100 731q0 104 27 200t75.5 179.5t117.5 152.5t152.5 117.5 t179.5 75.5t200 27t200 -27t179.5 -75.5t152.5 -117.5t117.5 -152.5t75.5 -179.5t27 -200t-27 -200t-75.5 -179.5t-117.5 -152t-152.5 -117.5t-179.5 -75.5t-200 -26.5t-200 26.5t-179.5 75.5t-152.5 117.5t-117.5 152t-75.5 179.5t-27 200zM242 731q0 -127 48 -238 t130.5 -193.5t193.5 -130.5t238 -48t238 48t193.5 130.5t130.5 193.5t48 238t-48 238t-130.5 193.5t-193.5 130.5t-238 48t-238 -48t-193.5 -130.5t-130.5 -193.5t-48 -238z" />
+<glyph unicode="&#xaf;" horiz-adv-x="1024" d="M1030 1556h-1036v201h1036v-201z" />
+<glyph unicode="&#xb0;" horiz-adv-x="877" d="M92 1137q0 71 27 134t74 110t110 74.5t135 27.5t135.5 -27.5t110 -74.5t73.5 -110t27 -134q0 -72 -27 -135t-73.5 -109.5t-110 -73t-135.5 -26.5t-135 26.5t-110 73t-74 109.5t-27 135zM283 1137q0 -31 12 -59t33 -49t49.5 -33.5t60.5 -12.5t60.5 12.5t49.5 33.5t33.5 49 t12.5 59q0 32 -12.5 60.5t-33.5 50t-49.5 34t-60.5 12.5t-60.5 -12.5t-49.5 -34t-33 -50t-12 -60.5z" />
+<glyph unicode="&#xb1;" d="M455 674h-367v219h367v369h219v-369h366v-219h-366v-365h-219v365zM88 0v219h952v-219h-952z" />
+<glyph unicode="&#xb2;" horiz-adv-x="776" d="M702 586h-647v168l224 219q46 45 76.5 78t49 60t26 50.5t7.5 50.5q0 38 -24 58t-64 20t-83.5 -20.5t-96.5 -67.5l-123 152q65 57 146 93t190 36q66 0 120.5 -16.5t93 -48t60 -78t21.5 -107.5q0 -46 -12.5 -86.5t-39.5 -81.5t-69 -85.5t-102 -98.5l-105 -95h352v-200z" />
+<glyph unicode="&#xb3;" horiz-adv-x="776" d="M666 1249q0 -69 -40.5 -119t-129.5 -79v-13q51 -10 88 -31t61.5 -48.5t36.5 -60.5t12 -69q0 -121 -88 -190.5t-274 -69.5q-76 0 -142 17.5t-131 52.5v190q66 -40 132 -65t139 -25q74 0 108.5 27t34.5 80q0 21 -8 40t-27 33.5t-51 23.5t-80 9h-112v160h92q52 0 84 9 t50 24.5t24 35t6 40.5q0 38 -25 63t-76 25q-47 0 -89 -19t-99 -59l-101 141q62 47 137.5 78t178.5 31q62 0 115 -16.5t91.5 -46.5t60.5 -73t22 -96z" />
+<glyph unicode="&#xb4;" horiz-adv-x="1182" d="M332 1241v27q21 29 45 67l47 79q24 40 45 80.5t37 74.5h342v-21q-11 -18 -32 -42.5t-48 -52.5l-58 -57l-62 -58l-61 -53l-52 -44h-203z" />
+<glyph unicode="&#xb5;" horiz-adv-x="1290" d="M465 465q0 -121 37.5 -181.5t118.5 -60.5q58 0 97 24t63 71t34 116t10 158v526h305v-1118h-233l-43 150h-12q-35 -85 -87.5 -127.5t-127.5 -42.5q-54 0 -99 23t-73 67q2 -42 5 -85q2 -37 3.5 -79t1.5 -78v-320h-305v1610h305v-653z" />
+<glyph unicode="&#xb6;" horiz-adv-x="1341" d="M1167 -260h-161v1616h-166v-1616h-162v819q-61 -18 -146 -18q-95 0 -172.5 25.5t-132 84.5t-84.5 155t-30 236q0 147 32.5 245.5t92 158.5t142.5 85t183 25h604v-1816z" />
+<glyph unicode="&#xb7;" horiz-adv-x="584" d="M117 723q0 47 13.5 79.5t37.5 52.5t56 29t69 9q35 0 66.5 -9t55.5 -29t38 -52.5t14 -79.5q0 -45 -14 -77.5t-38 -53t-55.5 -30t-66.5 -9.5q-37 0 -69 9.5t-56 30t-37.5 53t-13.5 77.5z" />
+<glyph unicode="&#xb8;" horiz-adv-x="420" d="M418 -250q0 -57 -15.5 -102t-51.5 -76t-95.5 -47.5t-146.5 -16.5q-45 0 -81 6t-65 15v168q15 -4 33.5 -7.5t38 -6.5t38 -5t33.5 -2q29 0 50.5 13.5t21.5 48.5q0 37 -37 65.5t-129 42.5l78 154h193l-27 -61q31 -10 60 -27t51.5 -40.5t36.5 -54t14 -67.5z" />
+<glyph unicode="&#xb9;" horiz-adv-x="776" d="M584 586h-238v446q0 20 0.5 50.5t2 61.5t3 57t2.5 38q-6 -9 -16 -19l-20 -21l-20 -21l-19 -17l-78 -61l-109 127l301 235h191v-876z" />
+<glyph unicode="&#xba;" horiz-adv-x="754" d="M696 1116q0 -87 -22.5 -154.5t-64.5 -114t-101 -71t-133 -24.5q-69 0 -127.5 24.5t-101 71t-66 114t-23.5 154.5t22.5 154.5t64 114t101 70.5t134.5 24q68 0 125.5 -24t100.5 -70.5t67 -114t24 -154.5zM260 1116q0 -100 27.5 -150.5t89.5 -50.5q60 0 87.5 50.5 t27.5 150.5t-27.5 149.5t-87.5 49.5q-62 0 -89.5 -49.5t-27.5 -149.5z" />
+<glyph unicode="&#xbb;" horiz-adv-x="1198" d="M1118 547l-309 -453l-219 119l217 348l-217 348l219 119l309 -455v-26zM612 547l-309 -453l-219 119l217 348l-217 348l219 119l309 -455v-26z" />
+<glyph unicode="&#xbc;" horiz-adv-x="1804" d="M1370 1462l-811 -1462h-239l811 1462h239zM538 586h-238v446q0 20 0.5 50.5t2 61.5t3 57t2.5 38q-6 -9 -16 -19l-20 -21l-20 -21l-19 -17l-78 -61l-109 127l301 235h191v-876zM1682 152h-125v-151h-238v151h-383v154l385 577h236v-563h125v-168zM1319 320v164 q0 42 1.5 88.5t4.5 95.5q-5 -13 -15 -35q-9 -22 -20 -44l-22 -43q-11 -21 -20 -35l-127 -191h198z" />
+<glyph unicode="&#xbd;" horiz-adv-x="1804" d="M1370 1462l-811 -1462h-239l811 1462h239zM538 586h-238v446q0 20 0.5 50.5t2 61.5t3 57t2.5 38q-6 -9 -16 -19l-20 -21l-20 -21l-19 -17l-78 -61l-109 127l301 235h191v-876zM1716 1h-647v168l224 219q46 45 76.5 78t49 60t26 50.5t7.5 50.5q0 38 -24 58t-64 20 t-83.5 -20.5t-96.5 -67.5l-123 152q65 57 146 93t190 36q66 0 120.5 -16.5t93 -48t60 -78t21.5 -107.5q0 -46 -12.5 -86.5t-39.5 -81.5t-69 -85.5t-102 -98.5l-105 -95h352v-200z" />
+<glyph unicode="&#xbe;" horiz-adv-x="1804" d="M1441 1462l-811 -1462h-239l811 1462h239zM1712 152h-125v-151h-238v151h-383v154l385 577h236v-563h125v-168zM1349 320v164q0 42 1.5 88.5t4.5 95.5q-5 -13 -15 -35q-9 -22 -20 -44l-22 -43q-11 -21 -20 -35l-127 -191h198zM697 1249q0 -69 -40.5 -119t-129.5 -79v-13 q51 -10 88 -31t61.5 -48.5t36.5 -60.5t12 -69q0 -121 -88 -190.5t-274 -69.5q-76 0 -142 17.5t-131 52.5v190q66 -40 132 -65t139 -25q74 0 108.5 27t34.5 80q0 21 -8 40t-27 33.5t-51 23.5t-80 9h-112v160h92q52 0 84 9t50 24.5t24 35t6 40.5q0 38 -25 63t-76 25 q-47 0 -89 -19t-99 -59l-101 141q62 47 137.5 78t178.5 31q62 0 115 -16.5t91.5 -46.5t60.5 -73t22 -96z" />
+<glyph unicode="&#xbf;" horiz-adv-x="940" d="M686 606v-74q0 -51 -10.5 -92.5t-32 -79t-55.5 -72.5t-82 -73q-42 -33 -71 -59t-47 -51.5t-26 -53.5t-8 -65q0 -57 39 -94t117 -37q69 0 149 29.5t164 70.5l103 -221q-43 -26 -94 -48.5t-105.5 -39.5t-110.5 -27t-110 -10q-102 0 -183.5 24.5t-138.5 71t-87.5 114 t-30.5 152.5q0 63 13.5 112.5t41.5 92t69.5 82.5t96.5 84q41 33 67.5 57.5t41.5 46.5t20.5 46t5.5 55v59h264zM719 948q0 -47 -13.5 -79.5t-37.5 -52.5t-56 -29t-69 -9q-35 0 -66.5 9t-55.5 29t-38 52.5t-14 79.5q0 45 14 77.5t38 53t55.5 30t66.5 9.5q37 0 69 -9.5t56 -30 t37.5 -53t13.5 -77.5z" />
+<glyph unicode="&#xc0;" horiz-adv-x="1331" d="M1018 0l-100 348h-504l-101 -348h-313l475 1468h379l477 -1468h-313zM846 608l-94 320q-6 18 -18 59l-26 91q-13 49 -25 99t-17 85q-4 -22 -10.5 -52t-15.5 -64l-17 -67l-17 -64l-14 -53l-10 -34l-93 -320h357zM632 1579l-81 69l-94 86q-46 44 -84 84.5t-54 67.5v21h342 q16 -35 38 -75l44 -80l47 -78.5t45 -67.5v-27h-203z" />
+<glyph unicode="&#xc1;" horiz-adv-x="1331" d="M1018 0l-100 348h-504l-101 -348h-313l475 1468h379l477 -1468h-313zM846 608l-94 320q-6 18 -18 59l-26 91q-13 49 -25 99t-17 85q-4 -22 -10.5 -52t-15.5 -64l-17 -67l-17 -64l-14 -53l-10 -34l-93 -320h357zM494 1579v27q21 29 45 67l47 79q24 40 45 80.5t37 74.5h342 v-21q-11 -18 -32 -42.5t-48 -52.5l-58 -57l-62 -58l-61 -53l-52 -44h-203z" />
+<glyph unicode="&#xc2;" horiz-adv-x="1331" d="M1018 0l-100 348h-504l-101 -348h-313l475 1468h379l477 -1468h-313zM846 608l-94 320q-6 18 -18 59l-26 91q-13 49 -25 99t-17 85q-4 -22 -10.5 -52t-15.5 -64l-17 -67l-17 -64l-14 -53l-10 -34l-93 -320h357zM879 1579q-51 34 -106 77t-107 99q-54 -56 -106 -99 t-103 -77h-203v27l58 67l64 79l62 80q30 40 52 75h356q21 -35 51 -75l63 -80l64 -79l58 -67v-27h-203z" />
+<glyph unicode="&#xc3;" horiz-adv-x="1331" d="M1018 0l-100 348h-504l-101 -348h-313l475 1468h379l477 -1468h-313zM846 608l-94 320q-6 18 -18 59l-26 91q-13 49 -25 99t-17 85q-4 -22 -10.5 -52t-15.5 -64l-17 -67l-17 -64l-14 -53l-10 -34l-93 -320h357zM504 1684q-31 0 -49.5 -26.5t-30.5 -80.5h-149q6 80 26 138 t52.5 96t76.5 56.5t97 18.5q41 0 80 -16t77.5 -35.5t76 -36t73.5 -16.5q31 0 49 26t31 80h149q-6 -79 -26.5 -137t-53.5 -96.5t-76.5 -57t-95.5 -18.5q-40 0 -80 16.5t-78 36t-75.5 36t-73.5 16.5z" />
+<glyph unicode="&#xc4;" horiz-adv-x="1331" d="M1018 0l-100 348h-504l-101 -348h-313l475 1468h379l477 -1468h-313zM846 608l-94 320q-6 18 -18 59l-26 91q-13 49 -25 99t-17 85q-4 -22 -10.5 -52t-15.5 -64l-17 -67l-17 -64l-14 -53l-10 -34l-93 -320h357zM324 1743q0 35 11 60.5t29.5 42t44 24.5t54.5 8t54.5 -8 t44.5 -24.5t30.5 -42t11.5 -60.5q0 -34 -11.5 -59t-30.5 -41.5t-44.5 -24.5t-54.5 -8t-54.5 8t-44 24.5t-29.5 41.5t-11 59zM727 1743q0 35 11 60.5t30 42t45 24.5t56 8q28 0 53.5 -8t45 -24.5t31 -42t11.5 -60.5q0 -34 -11.5 -59t-31 -41.5t-45 -24.5t-53.5 -8 q-60 0 -101 33t-41 100z" />
+<glyph unicode="&#xc5;" horiz-adv-x="1331" d="M1018 0l-100 348h-504l-101 -348h-313l475 1468h379l477 -1468h-313zM846 608l-94 320q-6 18 -18 59l-26 91q-13 49 -25 99t-17 85q-4 -22 -10.5 -52t-15.5 -64l-17 -67l-17 -64l-14 -53l-10 -34l-93 -320h357zM918 1567q0 -56 -19.5 -100.5t-54 -75.5t-80.5 -47.5 t-100 -16.5q-55 0 -101 16.5t-78.5 47t-50.5 75t-18 99.5t18 99t50.5 74.5t78.5 47t101 16.5q53 0 99 -16.5t80.5 -47t54.5 -74t20 -97.5zM760 1565q0 45 -27 70.5t-69 25.5t-69 -25.5t-27 -70.5t24 -71t72 -26q42 0 69 26t27 71z" />
+<glyph unicode="&#xc6;" horiz-adv-x="1888" d="M1767 0h-841v348h-461l-150 -348h-315l655 1462h1112v-254h-532v-321h496v-254h-496v-377h532v-256zM578 608h348v590h-97z" />
+<glyph unicode="&#xc7;" horiz-adv-x="1305" d="M805 1225q-89 0 -157.5 -34.5t-115 -99t-70.5 -157t-24 -207.5q0 -117 21.5 -208t66 -153.5t114 -95t165.5 -32.5q89 0 178.5 20t194.5 57v-260q-48 -20 -95 -34t-96 -23t-100.5 -13.5t-110.5 -4.5q-169 0 -293 54t-205 152t-120 236t-39 307q0 166 45 304.5t132 238.5 t215 155.5t294 55.5q109 0 218.5 -27.5t209.5 -75.5l-100 -252q-82 39 -165 68t-163 29zM926 -250q0 -57 -15.5 -102t-51.5 -76t-95.5 -47.5t-146.5 -16.5q-45 0 -81 6t-65 15v168q15 -4 33.5 -7.5t38 -6.5t38 -5t33.5 -2q29 0 50.5 13.5t21.5 48.5q0 37 -37 65.5t-129 42.5 l78 154h193l-27 -61q31 -10 60 -27t51.5 -40.5t36.5 -54t14 -67.5z" />
+<glyph unicode="&#xc8;" horiz-adv-x="1147" d="M1026 0h-842v1462h842v-254h-532v-321h495v-254h-495v-377h532v-256zM572 1579l-81 69l-94 86q-46 44 -84 84.5t-54 67.5v21h342q16 -35 38 -75l44 -80l47 -78.5t45 -67.5v-27h-203z" />
+<glyph unicode="&#xc9;" horiz-adv-x="1147" d="M1026 0h-842v1462h842v-254h-532v-321h495v-254h-495v-377h532v-256zM424 1579v27q21 29 45 67l47 79q24 40 45 80.5t37 74.5h342v-21q-11 -18 -32 -42.5t-48 -52.5l-58 -57l-62 -58l-61 -53l-52 -44h-203z" />
+<glyph unicode="&#xca;" horiz-adv-x="1147" d="M1026 0h-842v1462h842v-254h-532v-321h495v-254h-495v-377h532v-256zM832 1579q-51 34 -106 77t-107 99q-54 -56 -106 -99t-103 -77h-203v27l58 67l64 79l62 80q30 40 52 75h356q21 -35 51 -75l63 -80l64 -79l58 -67v-27h-203z" />
+<glyph unicode="&#xcb;" horiz-adv-x="1147" d="M1026 0h-842v1462h842v-254h-532v-321h495v-254h-495v-377h532v-256zM273 1743q0 35 11 60.5t29.5 42t44 24.5t54.5 8t54.5 -8t44.5 -24.5t30.5 -42t11.5 -60.5q0 -34 -11.5 -59t-30.5 -41.5t-44.5 -24.5t-54.5 -8t-54.5 8t-44 24.5t-29.5 41.5t-11 59zM676 1743 q0 35 11 60.5t30 42t45 24.5t56 8q28 0 53.5 -8t45 -24.5t31 -42t11.5 -60.5q0 -34 -11.5 -59t-31 -41.5t-45 -24.5t-53.5 -8q-60 0 -101 33t-41 100z" />
+<glyph unicode="&#xcc;" horiz-adv-x="797" d="M731 0h-665v176l178 82v946l-178 82v176h665v-176l-178 -82v-946l178 -82v-176zM355 1579l-81 69l-94 86q-46 44 -84 84.5t-54 67.5v21h342q16 -35 38 -75l44 -80l47 -78.5t45 -67.5v-27h-203z" />
+<glyph unicode="&#xcd;" horiz-adv-x="797" d="M731 0h-665v176l178 82v946l-178 82v176h665v-176l-178 -82v-946l178 -82v-176zM237 1579v27q21 29 45 67l47 79q24 40 45 80.5t37 74.5h342v-21q-11 -18 -32 -42.5t-48 -52.5l-58 -57l-62 -58l-61 -53l-52 -44h-203z" />
+<glyph unicode="&#xce;" horiz-adv-x="797" d="M731 0h-665v176l178 82v946l-178 82v176h665v-176l-178 -82v-946l178 -82v-176zM609 1579q-51 34 -106 77t-107 99q-54 -56 -106 -99t-103 -77h-203v27l58 67l64 79l62 80q30 40 52 75h356q21 -35 51 -75l63 -80l64 -79l58 -67v-27h-203z" />
+<glyph unicode="&#xcf;" horiz-adv-x="797" d="M731 0h-665v176l178 82v946l-178 82v176h665v-176l-178 -82v-946l178 -82v-176zM54 1743q0 35 11 60.5t29.5 42t44 24.5t54.5 8t54.5 -8t44.5 -24.5t30.5 -42t11.5 -60.5q0 -34 -11.5 -59t-30.5 -41.5t-44.5 -24.5t-54.5 -8t-54.5 8t-44 24.5t-29.5 41.5t-11 59z M457 1743q0 35 11 60.5t30 42t45 24.5t56 8q28 0 53.5 -8t45 -24.5t31 -42t11.5 -60.5q0 -34 -11.5 -59t-31 -41.5t-45 -24.5t-53.5 -8q-60 0 -101 33t-41 100z" />
+<glyph unicode="&#xd0;" horiz-adv-x="1434" d="M47 850h137v612h428q161 0 290.5 -46t221.5 -136.5t141.5 -224.5t49.5 -310q0 -185 -50.5 -324.5t-146 -233t-234 -140.5t-315.5 -47h-385v596h-137v254zM1001 737q0 122 -24.5 210.5t-71 146.5t-114 86t-154.5 28h-143v-358h237v-254h-237v-340h114q196 0 294.5 120 t98.5 361z" />
+<glyph unicode="&#xd1;" horiz-adv-x="1604" d="M1419 0h-393l-575 1106h-9q6 -77 10 -153q4 -65 6.5 -136.5t2.5 -128.5v-688h-277v1462h391l574 -1095h6q-3 76 -7 150q-1 32 -2.5 65.5t-2.5 67t-1.5 64.5t-0.5 56v692h278v-1462zM623 1684q-31 0 -49.5 -26.5t-30.5 -80.5h-149q6 80 26 138t52.5 96t76.5 56.5t97 18.5 q41 0 80 -16t77.5 -35.5t76 -36t73.5 -16.5q31 0 49 26t31 80h149q-6 -79 -26.5 -137t-53.5 -96.5t-76.5 -57t-95.5 -18.5q-40 0 -80 16.5t-78 36t-75.5 36t-73.5 16.5z" />
+<glyph unicode="&#xd2;" horiz-adv-x="1548" d="M1430 733q0 -169 -39.5 -308t-120.5 -238t-204.5 -153t-291.5 -54t-291.5 54t-204 153t-120 238.5t-39.5 309.5t39.5 308.5t120.5 236.5t204.5 151.5t292.5 53.5q168 0 291 -53.5t203.5 -152t120 -237t39.5 -309.5zM438 733q0 -115 20 -206.5t61.5 -155t104.5 -97.5 t150 -34q89 0 152.5 34t104 97.5t60 155t19.5 206.5t-19.5 206.5t-60 155.5t-103.5 98t-151 34q-87 0 -151 -34t-105.5 -98t-61.5 -155.5t-20 -206.5zM729 1579l-81 69l-94 86q-46 44 -84 84.5t-54 67.5v21h342q16 -35 38 -75l44 -80l47 -78.5t45 -67.5v-27h-203z" />
+<glyph unicode="&#xd3;" horiz-adv-x="1548" d="M1430 733q0 -169 -39.5 -308t-120.5 -238t-204.5 -153t-291.5 -54t-291.5 54t-204 153t-120 238.5t-39.5 309.5t39.5 308.5t120.5 236.5t204.5 151.5t292.5 53.5q168 0 291 -53.5t203.5 -152t120 -237t39.5 -309.5zM438 733q0 -115 20 -206.5t61.5 -155t104.5 -97.5 t150 -34q89 0 152.5 34t104 97.5t60 155t19.5 206.5t-19.5 206.5t-60 155.5t-103.5 98t-151 34q-87 0 -151 -34t-105.5 -98t-61.5 -155.5t-20 -206.5zM590 1579v27q21 29 45 67l47 79q24 40 45 80.5t37 74.5h342v-21q-11 -18 -32 -42.5t-48 -52.5l-58 -57l-62 -58l-61 -53 l-52 -44h-203z" />
+<glyph unicode="&#xd4;" horiz-adv-x="1548" d="M1430 733q0 -169 -39.5 -308t-120.5 -238t-204.5 -153t-291.5 -54t-291.5 54t-204 153t-120 238.5t-39.5 309.5t39.5 308.5t120.5 236.5t204.5 151.5t292.5 53.5q168 0 291 -53.5t203.5 -152t120 -237t39.5 -309.5zM438 733q0 -115 20 -206.5t61.5 -155t104.5 -97.5 t150 -34q89 0 152.5 34t104 97.5t60 155t19.5 206.5t-19.5 206.5t-60 155.5t-103.5 98t-151 34q-87 0 -151 -34t-105.5 -98t-61.5 -155.5t-20 -206.5zM975 1579q-51 34 -106 77t-107 99q-54 -56 -106 -99t-103 -77h-203v27l58 67l64 79l62 80q30 40 52 75h356q21 -35 51 -75 l63 -80l64 -79l58 -67v-27h-203z" />
+<glyph unicode="&#xd5;" horiz-adv-x="1548" d="M1430 733q0 -169 -39.5 -308t-120.5 -238t-204.5 -153t-291.5 -54t-291.5 54t-204 153t-120 238.5t-39.5 309.5t39.5 308.5t120.5 236.5t204.5 151.5t292.5 53.5q168 0 291 -53.5t203.5 -152t120 -237t39.5 -309.5zM438 733q0 -115 20 -206.5t61.5 -155t104.5 -97.5 t150 -34q89 0 152.5 34t104 97.5t60 155t19.5 206.5t-19.5 206.5t-60 155.5t-103.5 98t-151 34q-87 0 -151 -34t-105.5 -98t-61.5 -155.5t-20 -206.5zM612 1684q-31 0 -49.5 -26.5t-30.5 -80.5h-149q6 80 26 138t52.5 96t76.5 56.5t97 18.5q41 0 80 -16t77.5 -35.5t76 -36 t73.5 -16.5q31 0 49 26t31 80h149q-6 -79 -26.5 -137t-53.5 -96.5t-76.5 -57t-95.5 -18.5q-40 0 -80 16.5t-78 36t-75.5 36t-73.5 16.5z" />
+<glyph unicode="&#xd6;" horiz-adv-x="1548" d="M1430 733q0 -169 -39.5 -308t-120.5 -238t-204.5 -153t-291.5 -54t-291.5 54t-204 153t-120 238.5t-39.5 309.5t39.5 308.5t120.5 236.5t204.5 151.5t292.5 53.5q168 0 291 -53.5t203.5 -152t120 -237t39.5 -309.5zM438 733q0 -115 20 -206.5t61.5 -155t104.5 -97.5 t150 -34q89 0 152.5 34t104 97.5t60 155t19.5 206.5t-19.5 206.5t-60 155.5t-103.5 98t-151 34q-87 0 -151 -34t-105.5 -98t-61.5 -155.5t-20 -206.5zM428 1743q0 35 11 60.5t29.5 42t44 24.5t54.5 8t54.5 -8t44.5 -24.5t30.5 -42t11.5 -60.5q0 -34 -11.5 -59t-30.5 -41.5 t-44.5 -24.5t-54.5 -8t-54.5 8t-44 24.5t-29.5 41.5t-11 59zM831 1743q0 35 11 60.5t30 42t45 24.5t56 8q28 0 53.5 -8t45 -24.5t31 -42t11.5 -60.5q0 -34 -11.5 -59t-31 -41.5t-45 -24.5t-53.5 -8q-60 0 -101 33t-41 100z" />
+<glyph unicode="&#xd7;" d="M408 723l-299 301l151 154l301 -299l305 299l154 -150l-305 -305l301 -303l-150 -152l-305 301l-301 -299l-149 152z" />
+<glyph unicode="&#xd8;" horiz-adv-x="1548" d="M1430 733q0 -169 -39.5 -308t-120.5 -238t-204.5 -153t-291.5 -54q-179 0 -307 61l-72 -117l-168 94l82 134q-97 100 -143.5 248t-46.5 335q0 170 39.5 308.5t120.5 236.5t204.5 151.5t292.5 53.5q91 0 168.5 -16.5t142.5 -47.5l70 111l166 -96l-80 -129 q94 -99 140.5 -244.5t46.5 -329.5zM438 733q0 -180 47 -295l457 746q-69 43 -166 43q-87 0 -151 -34t-105.5 -98t-61.5 -155.5t-20 -206.5zM1110 733q0 171 -43 287l-455 -741q34 -19 74 -29t88 -10q89 0 152.5 34t104 97.5t60 155t19.5 206.5z" />
+<glyph unicode="&#xd9;" horiz-adv-x="1466" d="M1292 1462v-946q0 -114 -34.5 -212t-105 -170t-176.5 -113t-249 -41q-135 0 -238.5 38.5t-173 109.5t-105.5 170.5t-36 221.5v942h309v-919q0 -81 16 -138.5t47.5 -94t78.5 -53.5t110 -17q131 0 189.5 76t58.5 229v917h309zM706 1579l-81 69l-94 86q-46 44 -84 84.5 t-54 67.5v21h342q16 -35 38 -75l44 -80l47 -78.5t45 -67.5v-27h-203z" />
+<glyph unicode="&#xda;" horiz-adv-x="1466" d="M1292 1462v-946q0 -114 -34.5 -212t-105 -170t-176.5 -113t-249 -41q-135 0 -238.5 38.5t-173 109.5t-105.5 170.5t-36 221.5v942h309v-919q0 -81 16 -138.5t47.5 -94t78.5 -53.5t110 -17q131 0 189.5 76t58.5 229v917h309zM570 1579v27q21 29 45 67l47 79q24 40 45 80.5 t37 74.5h342v-21q-11 -18 -32 -42.5t-48 -52.5l-58 -57l-62 -58l-61 -53l-52 -44h-203z" />
+<glyph unicode="&#xdb;" horiz-adv-x="1466" d="M1292 1462v-946q0 -114 -34.5 -212t-105 -170t-176.5 -113t-249 -41q-135 0 -238.5 38.5t-173 109.5t-105.5 170.5t-36 221.5v942h309v-919q0 -81 16 -138.5t47.5 -94t78.5 -53.5t110 -17q131 0 189.5 76t58.5 229v917h309zM942 1579q-51 34 -106 77t-107 99 q-54 -56 -106 -99t-103 -77h-203v27l58 67l64 79l62 80q30 40 52 75h356q21 -35 51 -75l63 -80l64 -79l58 -67v-27h-203z" />
+<glyph unicode="&#xdc;" horiz-adv-x="1466" d="M1292 1462v-946q0 -114 -34.5 -212t-105 -170t-176.5 -113t-249 -41q-135 0 -238.5 38.5t-173 109.5t-105.5 170.5t-36 221.5v942h309v-919q0 -81 16 -138.5t47.5 -94t78.5 -53.5t110 -17q131 0 189.5 76t58.5 229v917h309zM393 1743q0 35 11 60.5t29.5 42t44 24.5 t54.5 8t54.5 -8t44.5 -24.5t30.5 -42t11.5 -60.5q0 -34 -11.5 -59t-30.5 -41.5t-44.5 -24.5t-54.5 -8t-54.5 8t-44 24.5t-29.5 41.5t-11 59zM796 1743q0 35 11 60.5t30 42t45 24.5t56 8q28 0 53.5 -8t45 -24.5t31 -42t11.5 -60.5q0 -34 -11.5 -59t-31 -41.5t-45 -24.5 t-53.5 -8q-60 0 -101 33t-41 100z" />
+<glyph unicode="&#xdd;" horiz-adv-x="1196" d="M598 860l264 602h334l-444 -893v-569h-308v559l-444 903h336zM422 1579v27q21 29 45 67l47 79q24 40 45 80.5t37 74.5h342v-21q-11 -18 -32 -42.5t-48 -52.5l-58 -57l-62 -58l-61 -53l-52 -44h-203z" />
+<glyph unicode="&#xde;" horiz-adv-x="1225" d="M1133 770q0 -94 -25.5 -180t-84 -152t-154 -105.5t-236.5 -39.5h-139v-293h-310v1462h310v-229h161q124 0 214 -33t148.5 -93.5t87 -146t28.5 -190.5zM494 543h84q121 0 181 52.5t60 174.5q0 108 -53 159.5t-168 51.5h-104v-438z" />
+<glyph unicode="&#xdf;" horiz-adv-x="1395" d="M1188 1241q0 -64 -21.5 -112.5t-53 -86.5t-69.5 -67l-68 -53q-32 -24 -53.5 -45t-21.5 -43q0 -20 12.5 -37t39 -37t67.5 -46l98 -63q49 -31 87 -63.5t64.5 -71t40 -84.5t13.5 -106q0 -172 -117 -259t-344 -87q-98 0 -170.5 14.5t-132.5 48.5v242q24 -16 58.5 -31.5 t72.5 -27.5t78 -19.5t74 -7.5q80 0 124 30.5t44 92.5q0 27 -7 48t-27.5 42t-57.5 45.5t-97 58.5q-63 36 -105.5 68t-69 63.5t-37.5 66t-11 74.5q0 53 20.5 92t51.5 70t67.5 57t67.5 52.5t51.5 57.5t20.5 71q0 63 -50 102t-147 39q-108 0 -161.5 -48.5t-53.5 -152.5v-1128 h-305v1139q0 109 37 189.5t105.5 133.5t164.5 79t213 26q115 0 209 -21.5t160.5 -63t102.5 -102.5t36 -139z" />
+<glyph unicode="&#xe0;" horiz-adv-x="1176" d="M809 0l-59 152h-9q-33 -45 -66 -77.5t-72 -53.5t-87.5 -31t-112.5 -10q-68 0 -126 21.5t-100.5 65t-66.5 110t-24 157.5q0 178 114 262.5t341 93.5l178 6v84q0 69 -40 102t-112 33t-140.5 -21t-137.5 -56l-99 202q84 47 186 74t214 27q209 0 320.5 -98t111.5 -298v-745 h-213zM719 518l-101 -4q-61 -2 -103 -16t-67.5 -37.5t-37 -56t-11.5 -72.5q0 -70 34 -99.5t89 -29.5q42 0 78 14.5t62.5 43t41.5 70t15 95.5v92zM552 1241l-81 69l-94 86q-46 44 -84 84.5t-54 67.5v21h342q16 -35 38 -75l44 -80l47 -78.5t45 -67.5v-27h-203z" />
+<glyph unicode="&#xe1;" horiz-adv-x="1176" d="M809 0l-59 152h-9q-33 -45 -66 -77.5t-72 -53.5t-87.5 -31t-112.5 -10q-68 0 -126 21.5t-100.5 65t-66.5 110t-24 157.5q0 178 114 262.5t341 93.5l178 6v84q0 69 -40 102t-112 33t-140.5 -21t-137.5 -56l-99 202q84 47 186 74t214 27q209 0 320.5 -98t111.5 -298v-745 h-213zM719 518l-101 -4q-61 -2 -103 -16t-67.5 -37.5t-37 -56t-11.5 -72.5q0 -70 34 -99.5t89 -29.5q42 0 78 14.5t62.5 43t41.5 70t15 95.5v92zM441 1241v27q21 29 45 67l47 79q24 40 45 80.5t37 74.5h342v-21q-11 -18 -32 -42.5t-48 -52.5l-58 -57l-62 -58l-61 -53 l-52 -44h-203z" />
+<glyph unicode="&#xe2;" horiz-adv-x="1176" d="M809 0l-59 152h-9q-33 -45 -66 -77.5t-72 -53.5t-87.5 -31t-112.5 -10q-68 0 -126 21.5t-100.5 65t-66.5 110t-24 157.5q0 178 114 262.5t341 93.5l178 6v84q0 69 -40 102t-112 33t-140.5 -21t-137.5 -56l-99 202q84 47 186 74t214 27q209 0 320.5 -98t111.5 -298v-745 h-213zM719 518l-101 -4q-61 -2 -103 -16t-67.5 -37.5t-37 -56t-11.5 -72.5q0 -70 34 -99.5t89 -29.5q42 0 78 14.5t62.5 43t41.5 70t15 95.5v92zM801 1240q-51 34 -106 77t-107 99q-54 -56 -106 -99t-103 -77h-203v27l58 67l64 79l62 80q30 40 52 75h356q21 -35 51 -75 l63 -80l64 -79l58 -67v-27h-203z" />
+<glyph unicode="&#xe3;" horiz-adv-x="1176" d="M809 0l-59 152h-9q-33 -45 -66 -77.5t-72 -53.5t-87.5 -31t-112.5 -10q-68 0 -126 21.5t-100.5 65t-66.5 110t-24 157.5q0 178 114 262.5t341 93.5l178 6v84q0 69 -40 102t-112 33t-140.5 -21t-137.5 -56l-99 202q84 47 186 74t214 27q209 0 320.5 -98t111.5 -298v-745 h-213zM719 518l-101 -4q-61 -2 -103 -16t-67.5 -37.5t-37 -56t-11.5 -72.5q0 -70 34 -99.5t89 -29.5q42 0 78 14.5t62.5 43t41.5 70t15 95.5v92zM425 1346q-31 0 -49.5 -26.5t-30.5 -80.5h-149q6 80 26 138t52.5 96t76.5 56.5t97 18.5q41 0 80 -16t77.5 -35.5t76 -36 t73.5 -16.5q31 0 49 26t31 80h149q-6 -79 -26.5 -137t-53.5 -96.5t-76.5 -57t-95.5 -18.5q-40 0 -80 16.5t-78 36t-75.5 36t-73.5 16.5z" />
+<glyph unicode="&#xe4;" horiz-adv-x="1176" d="M809 0l-59 152h-9q-33 -45 -66 -77.5t-72 -53.5t-87.5 -31t-112.5 -10q-68 0 -126 21.5t-100.5 65t-66.5 110t-24 157.5q0 178 114 262.5t341 93.5l178 6v84q0 69 -40 102t-112 33t-140.5 -21t-137.5 -56l-99 202q84 47 186 74t214 27q209 0 320.5 -98t111.5 -298v-745 h-213zM719 518l-101 -4q-61 -2 -103 -16t-67.5 -37.5t-37 -56t-11.5 -72.5q0 -70 34 -99.5t89 -29.5q42 0 78 14.5t62.5 43t41.5 70t15 95.5v92zM254 1405q0 35 11 60.5t29.5 42t44 24.5t54.5 8t54.5 -8t44.5 -24.5t30.5 -42t11.5 -60.5q0 -34 -11.5 -59t-30.5 -41.5 t-44.5 -24.5t-54.5 -8t-54.5 8t-44 24.5t-29.5 41.5t-11 59zM657 1405q0 35 11 60.5t30 42t45 24.5t56 8q28 0 53.5 -8t45 -24.5t31 -42t11.5 -60.5q0 -34 -11.5 -59t-31 -41.5t-45 -24.5t-53.5 -8q-60 0 -101 33t-41 100z" />
+<glyph unicode="&#xe5;" horiz-adv-x="1176" d="M809 0l-59 152h-9q-33 -45 -66 -77.5t-72 -53.5t-87.5 -31t-112.5 -10q-68 0 -126 21.5t-100.5 65t-66.5 110t-24 157.5q0 178 114 262.5t341 93.5l178 6v84q0 69 -40 102t-112 33t-140.5 -21t-137.5 -56l-99 202q84 47 186 74t214 27q209 0 320.5 -98t111.5 -298v-745 h-213zM719 518l-101 -4q-61 -2 -103 -16t-67.5 -37.5t-37 -56t-11.5 -72.5q0 -70 34 -99.5t89 -29.5q42 0 78 14.5t62.5 43t41.5 70t15 95.5v92zM842 1479q0 -56 -19.5 -100.5t-54 -75.5t-80.5 -47.5t-100 -16.5q-55 0 -101 16.5t-78.5 47t-50.5 75t-18 99.5t18 99 t50.5 74.5t78.5 47t101 16.5q53 0 99 -16.5t80.5 -47t54.5 -74t20 -97.5zM684 1477q0 45 -27 70.5t-69 25.5t-69 -25.5t-27 -70.5t24 -71t72 -26q42 0 69 26t27 71z" />
+<glyph unicode="&#xe6;" horiz-adv-x="1806" d="M1268 -20q-131 0 -238 50.5t-176 155.5q-43 -54 -85 -92.5t-91 -64t-110.5 -37.5t-143.5 -12q-68 0 -129.5 21.5t-108 65t-73.5 110t-27 157.5q0 178 114 262.5t341 93.5l178 6v84q0 69 -40 102t-112 33t-140.5 -21t-137.5 -56l-99 202q84 47 186 74t214 27 q214 0 323 -131q126 129 314 129q111 0 200.5 -33.5t151.5 -98.5t95.5 -159.5t33.5 -216.5v-148h-682q2 -64 20.5 -115.5t52 -87t81 -54.5t108.5 -19q94 0 181.5 21.5t175.5 66.5v-236q-40 -21 -80.5 -35.5t-85.5 -24.5t-97 -14.5t-114 -4.5zM719 518l-101 -4 q-61 -2 -103 -16t-67.5 -37.5t-37 -56t-11.5 -72.5q0 -70 34 -99.5t89 -29.5q42 0 78 14.5t62.5 43t41.5 70t15 95.5v92zM1229 922q-82 0 -135.5 -57t-61.5 -179h389q-1 51 -13 94t-35.5 74.5t-59.5 49.5t-84 18z" />
+<glyph unicode="&#xe7;" horiz-adv-x="1022" d="M625 -20q-120 0 -216.5 33t-165 102.5t-105 178t-36.5 259.5q0 167 37.5 279.5t106 180.5t165 97t214.5 29q86 0 171 -21t160 -59l-88 -232q-66 29 -127 47.5t-116 18.5q-111 0 -161 -84.5t-50 -253.5q0 -168 50 -248t157 -80q87 0 158 22.5t145 57.5v-254 q-37 -18 -72 -32t-70.5 -23t-74 -13.5t-82.5 -4.5zM778 -250q0 -57 -15.5 -102t-51.5 -76t-95.5 -47.5t-146.5 -16.5q-45 0 -81 6t-65 15v168q15 -4 33.5 -7.5t38 -6.5t38 -5t33.5 -2q29 0 50.5 13.5t21.5 48.5q0 37 -37 65.5t-129 42.5l78 154h193l-27 -61q31 -10 60 -27 t51.5 -40.5t36.5 -54t14 -67.5z" />
+<glyph unicode="&#xe8;" horiz-adv-x="1190" d="M612 922q-81 0 -134.5 -57t-61.5 -179h389q-1 51 -13 94t-36 74.5t-60 49.5t-84 18zM651 -20q-120 0 -221 35t-174 105.5t-113.5 178t-40.5 252.5q0 147 37 257t103.5 183.5t160 110.5t207.5 37q111 0 200.5 -33.5t152 -98.5t96 -159.5t33.5 -216.5v-148h-682 q2 -64 20.5 -115.5t52 -87t81 -54.5t108.5 -19q51 0 96.5 5.5t88.5 16.5t85 27.5t86 38.5v-236q-40 -21 -80.5 -35.5t-85.5 -24.5t-97 -14.5t-114 -4.5zM578 1241l-81 69l-94 86q-46 44 -84 84.5t-54 67.5v21h342q16 -35 38 -75l44 -80l47 -78.5t45 -67.5v-27h-203z" />
+<glyph unicode="&#xe9;" horiz-adv-x="1190" d="M612 922q-81 0 -134.5 -57t-61.5 -179h389q-1 51 -13 94t-36 74.5t-60 49.5t-84 18zM651 -20q-120 0 -221 35t-174 105.5t-113.5 178t-40.5 252.5q0 147 37 257t103.5 183.5t160 110.5t207.5 37q111 0 200.5 -33.5t152 -98.5t96 -159.5t33.5 -216.5v-148h-682 q2 -64 20.5 -115.5t52 -87t81 -54.5t108.5 -19q51 0 96.5 5.5t88.5 16.5t85 27.5t86 38.5v-236q-40 -21 -80.5 -35.5t-85.5 -24.5t-97 -14.5t-114 -4.5zM447 1241v27q21 29 45 67l47 79q24 40 45 80.5t37 74.5h342v-21q-11 -18 -32 -42.5t-48 -52.5l-58 -57l-62 -58l-61 -53 l-52 -44h-203z" />
+<glyph unicode="&#xea;" horiz-adv-x="1190" d="M612 922q-81 0 -134.5 -57t-61.5 -179h389q-1 51 -13 94t-36 74.5t-60 49.5t-84 18zM651 -20q-120 0 -221 35t-174 105.5t-113.5 178t-40.5 252.5q0 147 37 257t103.5 183.5t160 110.5t207.5 37q111 0 200.5 -33.5t152 -98.5t96 -159.5t33.5 -216.5v-148h-682 q2 -64 20.5 -115.5t52 -87t81 -54.5t108.5 -19q51 0 96.5 5.5t88.5 16.5t85 27.5t86 38.5v-236q-40 -21 -80.5 -35.5t-85.5 -24.5t-97 -14.5t-114 -4.5zM819 1241q-51 34 -106 77t-107 99q-54 -56 -106 -99t-103 -77h-203v27l58 67l64 79l62 80q30 40 52 75h356 q21 -35 51 -75l63 -80l64 -79l58 -67v-27h-203z" />
+<glyph unicode="&#xeb;" horiz-adv-x="1190" d="M612 922q-81 0 -134.5 -57t-61.5 -179h389q-1 51 -13 94t-36 74.5t-60 49.5t-84 18zM651 -20q-120 0 -221 35t-174 105.5t-113.5 178t-40.5 252.5q0 147 37 257t103.5 183.5t160 110.5t207.5 37q111 0 200.5 -33.5t152 -98.5t96 -159.5t33.5 -216.5v-148h-682 q2 -64 20.5 -115.5t52 -87t81 -54.5t108.5 -19q51 0 96.5 5.5t88.5 16.5t85 27.5t86 38.5v-236q-40 -21 -80.5 -35.5t-85.5 -24.5t-97 -14.5t-114 -4.5zM266 1405q0 35 11 60.5t29.5 42t44 24.5t54.5 8t54.5 -8t44.5 -24.5t30.5 -42t11.5 -60.5q0 -34 -11.5 -59t-30.5 -41.5 t-44.5 -24.5t-54.5 -8t-54.5 8t-44 24.5t-29.5 41.5t-11 59zM669 1405q0 35 11 60.5t30 42t45 24.5t56 8q28 0 53.5 -8t45 -24.5t31 -42t11.5 -60.5q0 -34 -11.5 -59t-31 -41.5t-45 -24.5t-53.5 -8q-60 0 -101 33t-41 100z" />
+<glyph unicode="&#xec;" horiz-adv-x="625" d="M465 0h-305v1118h305v-1118zM269 1241l-81 69l-94 86q-46 44 -84 84.5t-54 67.5v21h342q16 -35 38 -75l44 -80l47 -78.5t45 -67.5v-27h-203z" />
+<glyph unicode="&#xed;" horiz-adv-x="625" d="M465 0h-305v1118h305v-1118zM145 1241v27q21 29 45 67l47 79q24 40 45 80.5t37 74.5h342v-21q-11 -18 -32 -42.5t-48 -52.5l-58 -57l-62 -58l-61 -53l-52 -44h-203z" />
+<glyph unicode="&#xee;" horiz-adv-x="625" d="M465 0h-305v1118h305v-1118zM521 1241q-51 34 -106 77t-107 99q-54 -56 -106 -99t-103 -77h-203v27l58 67l64 79l62 80q30 40 52 75h356q21 -35 51 -75l63 -80l64 -79l58 -67v-27h-203z" />
+<glyph unicode="&#xef;" horiz-adv-x="625" d="M465 0h-305v1118h305v-1118zM-32 1405q0 35 11 60.5t29.5 42t44 24.5t54.5 8t54.5 -8t44.5 -24.5t30.5 -42t11.5 -60.5q0 -34 -11.5 -59t-30.5 -41.5t-44.5 -24.5t-54.5 -8t-54.5 8t-44 24.5t-29.5 41.5t-11 59zM371 1405q0 35 11 60.5t30 42t45 24.5t56 8q28 0 53.5 -8 t45 -24.5t31 -42t11.5 -60.5q0 -34 -11.5 -59t-31 -41.5t-45 -24.5t-53.5 -8q-60 0 -101 33t-41 100z" />
+<glyph unicode="&#xf0;" horiz-adv-x="1182" d="M457 1309l-73 45q-39 24 -81 47l96 170q73 -34 137 -68.5t121 -72.5l226 139l100 -154l-174 -106q72 -69 126 -147t89.5 -169t53.5 -195t18 -225q0 -142 -36 -252t-103 -186t-162 -115.5t-213 -39.5q-111 0 -204 34t-160.5 99t-105.5 159.5t-38 216.5t32.5 216t91 158.5 t140 98t178.5 33.5q96 0 164 -31.5t100 -80.5l21 2q-28 88 -78.5 165.5t-116.5 133.5l-231 -144l-101 156zM784 532q0 47 -11.5 90t-36 76t-62 52.5t-88.5 19.5q-108 0 -154.5 -70.5t-46.5 -212.5q0 -63 11.5 -115t36 -89t62.5 -57.5t91 -20.5q106 0 152 81.5t46 245.5z" />
+<glyph unicode="&#xf1;" horiz-adv-x="1284" d="M1130 0h-305v653q0 121 -36.5 181.5t-116.5 60.5q-60 0 -100 -24t-63.5 -71t-33.5 -116t-10 -158v-526h-305v1118h233l41 -143h17q24 43 58.5 74t75.5 51t87 29.5t94 9.5q82 0 149 -23.5t115 -73.5t74 -127.5t26 -185.5v-729zM477 1346q-31 0 -49.5 -26.5t-30.5 -80.5 h-149q6 80 26 138t52.5 96t76.5 56.5t97 18.5q41 0 80 -16t77.5 -35.5t76 -36t73.5 -16.5q31 0 49 26t31 80h149q-6 -79 -26.5 -137t-53.5 -96.5t-76.5 -57t-95.5 -18.5q-40 0 -80 16.5t-78 36t-75.5 36t-73.5 16.5z" />
+<glyph unicode="&#xf2;"