/*!
 * Copyright (c) 2010 Simo Kinnunen.
 * Licensed under the MIT license.
 *
 * @version ${Version}
 */

var Cufon = (function() {

	var api = function() {
		return api.replace.apply(null, arguments);
	};

	var DOM = api.DOM = {

		ready: (function() {

			var complete = false, readyStatus = { loaded: 1, complete: 1 };

			var queue = [], perform = function() {
				if (complete) return;
				complete = true;
				for (var fn; fn = queue.shift(); fn());
			};

			// Gecko, Opera, WebKit r26101+

			if (document.addEventListener) {
				document.addEventListener('DOMContentLoaded', perform, false);
				window.addEventListener('pageshow', perform, false); // For cached Gecko pages
			}

			// Old WebKit, Internet Explorer

			if (!window.opera && document.readyState) (function() {
				readyStatus[document.readyState] ? perform() : setTimeout(arguments.callee, 10);
			})();

			// Internet Explorer

			if (document.readyState && document.createStyleSheet) (function() {
				try {
					document.body.doScroll('left');
					perform();
				}
				catch (e) {
					setTimeout(arguments.callee, 1);
				}
			})();

			addEvent(window, 'load', perform); // Fallback

			return function(listener) {
				if (!arguments.length) perform();
				else complete ? listener() : queue.push(listener);
			};

		})(),

		root: function() {
			return document.documentElement || document.body;
		}

	};

	var CSS = api.CSS = {

		Size: function(value, base) {

			this.value = parseFloat(value);
			this.unit = String(value).match(/[a-z%]*$/)[0] || 'px';

			this.convert = function(value) {
				return value / base * this.value;
			};

			this.convertFrom = function(value) {
				return value / this.value * base;
			};

			this.toString = function() {
				return this.value + this.unit;
			};

		},

		addClass: function(el, className) {
			var current = el.className;
			el.className = current + (current && ' ') + className;
			return el;
		},

		color: cached(function(value) {
			var parsed = {};
			parsed.color = value.replace(/^rgba\((.*?),\s*([\d.]+)\)/, function($0, $1, $2) {
				parsed.opacity = parseFloat($2);
				return 'rgb(' + $1 + ')';
			});
			return parsed;
		}),

		// has no direct CSS equivalent.
		// @see http://msdn.microsoft.com/en-us/library/system.windows.fontstretches.aspx
		fontStretch: cached(function(value) {
			if (typeof value == 'number') return value;
			if (/%$/.test(value)) return parseFloat(value) / 100;
			return {
				'ultra-condensed': 0.5,
				'extra-condensed': 0.625,
				condensed: 0.75,
				'semi-condensed': 0.875,
				'semi-expanded': 1.125,
				expanded: 1.25,
				'extra-expanded': 1.5,
				'ultra-expanded': 2
			}[value] || 1;
		}),

		getStyle: function(el) {
			var view = document.defaultView;
			if (view && view.getComputedStyle) return new Style(view.getComputedStyle(el, null));
			if (el.currentStyle) return new Style(el.currentStyle);
			return new Style(el.style);
		},

		gradient: cached(function(value) {
			var gradient = {
				id: value,
				type: value.match(/^-([a-z]+)-gradient\(/)[1],
				stops: []
			}, colors = value.substr(value.indexOf('(')).match(/([\d.]+=)?(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)/ig);
			for (var i = 0, l = colors.length, stop; i < l; ++i) {
				stop = colors[i].split('=', 2).reverse();
				gradient.stops.push([ stop[1] || i / (l - 1), stop[0] ]);
			}
			return gradient;
		}),

		quotedList: cached(function(value) {
			// doesn't work properly with empty quoted strings (""), but
			// it's not worth the extra code.
			var list = [], re = /\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g, match;
			while (match = re.exec(value)) list.push(match[3] || match[1]);
			return list;
		}),

		recognizesMedia: cached(function(media) {
			var el = document.createElement('style'), sheet, container, supported;
			el.type = 'text/css';
			el.media = media;
			try { // this is cached anyway
				el.appendChild(document.createTextNode('/**/'));
			} catch (e) {}
			container = elementsByTagName('head')[0];
			container.insertBefore(el, container.firstChild);
			sheet = (el.sheet || el.styleSheet);
			supported = sheet && !sheet.disabled;
			container.removeChild(el);
			return supported;
		}),

		removeClass: function(el, className) {
			var re = RegExp('(?:^|\\s+)' + className +  '(?=\\s|$)', 'g');
			el.className = el.className.replace(re, '');
			return el;
		},

		supports: function(property, value) {
			var checker = document.createElement('span').style;
			if (checker[property] === undefined) return false;
			checker[property] = value;
			return checker[property] === value;
		},

		textAlign: function(word, style, position, wordCount) {
			if (style.get('textAlign') == 'right') {
				if (position > 0) word = ' ' + word;
			}
			else if (position < wordCount - 1) word += ' ';
			return word;
		},

		textShadow: cached(function(value) {
			if (value == 'none') return null;
			var shadows = [], currentShadow = {}, result, offCount = 0;
			var re = /(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)|(-?[\d.]+[a-z%]*)|,/ig;
			while (result = re.exec(value)) {
				if (result[0] == ',') {
					shadows.push(currentShadow);
					currentShadow = {};
					offCount = 0;
				}
				else if (result[1]) {
					currentShadow.color = result[1];
				}
				else {
					currentShadow[[ 'offX', 'offY', 'blur' ][offCount++]] = result[2];
				}
			}
			shadows.push(currentShadow);
			return shadows;
		}),

		textTransform: (function() {
			var map = {
				uppercase: function(s) {
					return s.toUpperCase();
				},
				lowercase: function(s) {
					return s.toLowerCase();
				},
				capitalize: function(s) {
					return s.replace(/(?:^|\s)./g, function($0) {
						return $0.toUpperCase();
					});
				}
			};
			return function(text, style) {
				var transform = map[style.get('textTransform')];
				return transform ? transform(text) : text;
			};
		})(),

		whiteSpace: (function() {
			var ignore = {
				inline: 1,
				'inline-block': 1,
				'run-in': 1
			};
			var wsStart = /^\s+/, wsEnd = /\s+$/;
			return function(text, style, node, previousElement, simple) {
				if (simple) return text.replace(wsStart, '').replace(wsEnd, ''); // @fixme too simple
				if (previousElement) {
					if (previousElement.nodeName.toLowerCase() == 'br') {
						text = text.replace(wsStart, '');
					}
				}
				if (ignore[style.get('display')]) return text;
				if (!node.previousSibling) text = text.replace(wsStart, '');
				if (!node.nextSibling) text = text.replace(wsEnd, '');
				return text;
			};
		})()

	};

	CSS.ready = (function() {

		// don't do anything in Safari 2 (it doesn't recognize any media type)
		var complete = !CSS.recognizesMedia('all'), hasLayout = false;

		var queue = [], perform = function() {
			complete = true;
			for (var fn; fn = queue.shift(); fn());
		};

		var links = elementsByTagName('link'), styles = elementsByTagName('style');

		function isContainerReady(el) {
			return el.disabled || isSheetReady(el.sheet, el.media || 'screen');
		}

		function isSheetReady(sheet, media) {
			// in Opera sheet.disabled is true when it's still loading,
			// even though link.disabled is false. they stay in sync if
			// set manually.
			if (!CSS.recognizesMedia(media || 'all')) return true;
			if (!sheet || sheet.disabled) return false;
			try {
				var rules = sheet.cssRules, rule;
				if (rules) {
					// needed for Safari 3 and Chrome 1.0.
					// in standards-conforming browsers cssRules contains @-rules.
					// Chrome 1.0 weirdness: rules[<number larger than .length - 1>]
					// returns the last rule, so a for loop is the only option.
					search: for (var i = 0, l = rules.length; rule = rules[i], i < l; ++i) {
						switch (rule.type) {
							case 2: // @charset
								break;
							case 3: // @import
								if (!isSheetReady(rule.styleSheet, rule.media.mediaText)) return false;
								break;
							default:
								// only @charset can precede @import
								break search;

						}
					}
				}
			}
			catch (e) {} // probably a style sheet from another domain
			return true;
		}

		function allStylesLoaded() {
			// Internet Explorer's style sheet model, there's no need to do anything
			if (document.createStyleSheet) return true;
			// standards-compliant browsers
			var el, i;
			for (i = 0; el = links[i]; ++i) {
				if (el.rel.toLowerCase() == 'stylesheet' && !isContainerReady(el)) return false;
			}
			for (i = 0; el = styles[i]; ++i) {
				if (!isContainerReady(el)) return false;
			}
			return true;
		}

		DOM.ready(function() {
			// getComputedStyle returns null in Gecko if used in an iframe with display: none
			if (!hasLayout) hasLayout = CSS.getStyle(document.body).isUsable();
			if (complete || (hasLayout && allStylesLoaded())) perform();
			else setTimeout(arguments.callee, 10);
		});

		return function(listener) {
			if (complete) listener();
			else queue.push(listener);
		};

	})();

	function Font(data) {

		var face = this.face = data.face, wordSeparators = {
			'\u0020': 1,
			'\u00a0': 1,
			'\u3000': 1
		};

		this.glyphs = (function(glyphs) {
			var key, fallbacks = {
				'\u2011': '\u002d',
				'\u00ad': '\u2011'
			};
			for (key in fallbacks) {
				if (!hasOwnProperty(fallbacks, key)) continue;
				if (!glyphs[key]) glyphs[key] = glyphs[fallbacks[key]];
			}
			return glyphs;
		})(data.glyphs);

		this.w = data.w;
		this.baseSize = parseInt(face['units-per-em'], 10);

		this.family = face['font-family'].toLowerCase();
		this.weight = face['font-weight'];
		this.style = face['font-style'] || 'normal';

		this.viewBox = (function () {
			var parts = face.bbox.split(/\s+/);
			var box = {
				minX: parseInt(parts[0], 10),
				minY: parseInt(parts[1], 10),
				maxX: parseInt(parts[2], 10),
				maxY: parseInt(parts[3], 10)
			};
			box.width = box.maxX - box.minX;
			box.height = box.maxY - box.minY;
			box.toString = function() {
				return [ this.minX, this.minY, this.width, this.height ].join(' ');
			};
			return box;
		})();

		this.ascent = -parseInt(face.ascent, 10);
		this.descent = -parseInt(face.descent, 10);

		this.height = -this.ascent + this.descent;

		this.spacing = function(chars, letterSpacing, wordSpacing) {
			var glyphs = this.glyphs, glyph,
				kerning, k,
				jumps = [],
				width = 0, w,
				i = -1, j = -1, chr;
			while (chr = chars[++i]) {
				glyph = glyphs[chr] || this.missingGlyph;
				if (!glyph) continue;
				if (kerning) {
					width -= k = kerning[chr] || 0;
					jumps[j] -= k;
				}
				w = glyph.w;
				if (isNaN(w)) w = +this.w; // may have been a String in old fonts
				if (w > 0) {
					w += letterSpacing;
					if (wordSeparators[chr]) w += wordSpacing;
				}
				width += jumps[++j] = ~~w; // get rid of decimals
				kerning = glyph.k;
			}
			jumps.total = width;
			return jumps;
		};

	}

	function FontFamily() {

		var styles = {}, mapping = {
			oblique: 'italic',
			italic: 'oblique'
		};

		this.add = function(font) {
			(styles[font.style] || (styles[font.style] = {}))[font.weight] = font;
		};

		this.get = function(style, weight) {
			var weights = styles[style] || styles[mapping[style]]
				|| styles.normal || styles.italic || styles.oblique;
			if (!weights) return null;
			// we don't have to worry about "bolder" and "lighter"
			// because IE's currentStyle returns a numeric value for it,
			// and other browsers use the computed value anyway
			weight = {
				normal: 400,
				bold: 700
			}[weight] || parseInt(weight, 10);
			if (weights[weight]) return weights[weight];
			// http://www.w3.org/TR/CSS21/fonts.html#propdef-font-weight
			// Gecko uses x99/x01 for lighter/bolder
			var up = {
				1: 1,
				99: 0
			}[weight % 100], alts = [], min, max;
			if (up === undefined) up = weight > 400;
			if (weight == 500) weight = 400;
			for (var alt in weights) {
				if (!hasOwnProperty(weights, alt)) continue;
				alt = parseInt(alt, 10);
				if (!min || alt < min) min = alt;
				if (!max || alt > max) max = alt;
				alts.push(alt);
			}
			if (weight < min) weight = min;
			if (weight > max) weight = max;
			alts.sort(function(a, b) {
				return (up
					? (a >= weight && b >= weight) ? a < b : a > b
					: (a <= weight && b <= weight) ? a > b : a < b) ? -1 : 1;
			});
			return weights[alts[0]];
		};

	}

	function HoverHandler() {

		function contains(node, anotherNode) {
			try {
				if (node.contains) return node.contains(anotherNode);
				return node.compareDocumentPosition(anotherNode) & 16;
			}
			catch(e) {} // probably a XUL element such as a scrollbar
			return false;
		}

		function onOverOut(e) {
			var related = e.relatedTarget;
			// there might be no relatedTarget if the element is right next
			// to the window frame
			if (related && contains(this, related)) return;
			trigger(this, e.type == 'mouseover');
		}

		function onEnterLeave(e) {
			trigger(this, e.type == 'mouseenter');
		}

		function trigger(el, hoverState) {
			// A timeout is needed so that the event can actually "happen"
			// before replace is triggered. This ensures that styles are up
			// to date.
			setTimeout(function() {
				var options = sharedStorage.get(el).options;
				api.replace(el, hoverState ? merge(options, options.hover) : options, true);
			}, 10);
		}

		this.attach = function(el) {
			if (el.onmouseenter === undefined) {
				addEvent(el, 'mouseover', onOverOut);
				addEvent(el, 'mouseout', onOverOut);
			}
			else {
				addEvent(el, 'mouseenter', onEnterLeave);
				addEvent(el, 'mouseleave', onEnterLeave);
			}
		};

	}

	function ReplaceHistory() {

		var list = [], map = {};

		function filter(keys) {
			var values = [], key;
			for (var i = 0; key = keys[i]; ++i) values[i] = list[map[key]];
			return values;
		}

		this.add = function(key, args) {
			map[key] = list.push(args) - 1;
		};

		this.repeat = function() {
			var snapshot = arguments.length ? filter(arguments) : list, args;
			for (var i = 0; args = snapshot[i++];) api.replace(args[0], args[1], true);
		};

	}

	function Storage() {

		var map = {}, at = 0;

		function identify(el) {
			return el.cufid || (el.cufid = ++at);
		}

		this.get = function(el) {
			var id = identify(el);
			return map[id] || (map[id] = {});
		};

	}

	function Style(style) {

		var custom = {}, sizes = {};

		this.extend = function(styles) {
			for (var property in styles) {
				if (hasOwnProperty(styles, property)) custom[property] = styles[property];
			}
			return this;
		};

		this.get = function(property) {
			return custom[property] != undefined ? custom[property] : style[property];
		};

		this.getSize = function(property, base) {
			return sizes[property] || (sizes[property] = new CSS.Size(this.get(property), base));
		};

		this.isUsable = function() {
			return !!style;
		};

	}

	function addEvent(el, type, listener) {
		if (el.addEventListener) {
			el.addEventListener(type, listener, false);
		}
		else if (el.attachEvent) {
			el.attachEvent('on' + type, function() {
				return listener.call(el, window.event);
			});
		}
	}

	function attach(el, options) {
		var storage = sharedStorage.get(el);
		if (storage.options) return el;
		if (options.hover && options.hoverables[el.nodeName.toLowerCase()]) {
			hoverHandler.attach(el);
		}
		storage.options = options;
		return el;
	}

	function cached(fun) {
		var cache = {};
		return function(key) {
			if (!hasOwnProperty(cache, key)) cache[key] = fun.apply(null, arguments);
			return cache[key];
		};
	}

	function getFont(el, style) {
		var families = CSS.quotedList(style.get('fontFamily').toLowerCase()), family;
		for (var i = 0; family = families[i]; ++i) {
			if (fonts[family]) return fonts[family].get(style.get('fontStyle'), style.get('fontWeight'));
		}
		return null;
	}

	function elementsByTagName(query) {
		return document.getElementsByTagName(query);
	}

	function hasOwnProperty(obj, property) {
		return obj.hasOwnProperty(property);
	}

	function merge() {
		var merged = {}, arg, key;
		for (var i = 0, l = arguments.length; arg = arguments[i], i < l; ++i) {
			for (key in arg) {
				if (hasOwnProperty(arg, key)) merged[key] = arg[key];
			}
		}
		return merged;
	}

	function process(font, text, style, options, node, el) {
		var fragment = document.createDocumentFragment(), processed;
		if (text === '') return fragment;
		var separate = options.separate;
		var parts = text.split(separators[separate]), needsAligning = (separate == 'words');
		if (needsAligning && HAS_BROKEN_REGEXP) {
			// @todo figure out a better way to do this
			if (/^\s/.test(text)) parts.unshift('');
			if (/\s$/.test(text)) parts.push('');
		}
		for (var i = 0, l = parts.length; i < l; ++i) {
			processed = engines[options.engine](font,
				needsAligning ? CSS.textAlign(parts[i], style, i, l) : parts[i],
				style, options, node, el, i < l - 1);
			if (processed) fragment.appendChild(processed);
		}
		return fragment;
	}

	function replaceElement(el, options) {
		var name = el.nodeName.toLowerCase();
		if (options.ignore[name]) return;
		if (options.onBeforeReplace) options.onBeforeReplace(el, options);
		var replace = !options.textless[name], simple = (options.trim === 'simple');
		var style = CSS.getStyle(attach(el, options)).extend(options);
		// may cause issues if the element contains other elements
		// with larger fontSize, however such cases are rare and can
		// be fixed by using a more specific selector
		if (parseFloat(style.get('fontSize')) === 0) return;
		var font = getFont(el, style), node, type, next, anchor, text, lastElement;
		var isShy = options.softHyphens, anyShy = false, pos, shy, reShy = /\u00ad/g;
		var modifyText = options.modifyText;
		if (!font) return;
		for (node = el.firstChild; node; node = next) {
			type = node.nodeType;
			next = node.nextSibling;
			if (replace && type == 3) {
				if (isShy && el.nodeName.toLowerCase() != TAG_SHY) {
					pos = node.data.indexOf('\u00ad');
					if (pos >= 0) {
						node.splitText(pos);
						next = node.nextSibling;
						next.deleteData(0, 1);
						shy = document.createElement(TAG_SHY);
						shy.appendChild(document.createTextNode('\u00ad'));
						el.insertBefore(shy, next);
						next = shy;
						anyShy = true;
					}
				}
				// Node.normalize() is broken in IE 6, 7, 8
				if (anchor) {
					anchor.appendData(node.data);
					el.removeChild(node);
				}
				else anchor = node;
				if (next) continue;
			}
			if (anchor) {
				text = anchor.data;
				if (!isShy) text = text.replace(reShy, '');
				text = CSS.whiteSpace(text, style, anchor, lastElement, simple);
				// modify text only on the first replace
				if (modifyText) text = modifyText(text, anchor, el, options);
				el.replaceChild(process(font, text, style, options, node, el), anchor);
				anchor = null;
			}
			if (type == 1) {
				if (node.firstChild) {
					if (node.nodeName.toLowerCase() == 'cufon') {
						engines[options.engine](font, null, style, options, node, el);
					}
					else arguments.callee(node, options);
				}
				lastElement = node;
			}
		}
		if (isShy && anyShy) {
			updateShy(el);
			if (!trackingShy) addEvent(window, 'resize', updateShyOnResize);
			trackingShy = true;
		}
		if (options.onAfterReplace) options.onAfterReplace(el, options);
	}

	function updateShy(context) {
		var shys, shy, parent, glue, newGlue, next, prev, i;
		shys = context.getElementsByTagName(TAG_SHY);
		// unfortunately there doesn't seem to be any easy
		// way to avoid having to loop through the shys twice.
		for (i = 0; shy = shys[i]; ++i) {
			shy.className = C_SHY_DISABLED;
			glue = parent = shy.parentNode;
			if (glue.nodeName.toLowerCase() != TAG_GLUE) {
				newGlue = document.createElement(TAG_GLUE);
				newGlue.appendChild(shy.previousSibling);
				parent.insertBefore(newGlue, shy);
				newGlue.appendChild(shy);
			}
			else {
				// get rid of double glue (edge case fix)
				glue = glue.parentNode;
				if (glue.nodeName.toLowerCase() == TAG_GLUE) {
					parent = glue.parentNode;
					while (glue.firstChild) {
						parent.insertBefore(glue.firstChild, glue);
					}
					parent.removeChild(glue);
				}
			}
		}
		for (i = 0; shy = shys[i]; ++i) {
			shy.className = '';
			glue = shy.parentNode;
			parent = glue.parentNode;
			next = glue.nextSibling || parent.nextSibling;
			// make sure we're comparing same types
			prev = (next.nodeName.toLowerCase() == TAG_GLUE) ? glue : shy.previousSibling;
			if (prev.offsetTop >= next.offsetTop) {
				shy.className = C_SHY_DISABLED;
				if (prev.offsetTop < next.offsetTop) {
					// we have an annoying edge case, double the glue
					newGlue = document.createElement(TAG_GLUE);
					parent.insertBefore(newGlue, glue);
					newGlue.appendChild(glue);
					newGlue.appendChild(next);
				}
			}
		}
	}

	function updateShyOnResize() {
		if (ignoreResize) return; // needed for IE
		CSS.addClass(DOM.root(), C_VIEWPORT_RESIZING);
		clearTimeout(shyTimer);
		shyTimer = setTimeout(function() {
			ignoreResize = true;
			CSS.removeClass(DOM.root(), C_VIEWPORT_RESIZING);
			updateShy(document);
			ignoreResize = false;
		}, 100);
	}

	var HAS_BROKEN_REGEXP = ' '.split(/\s+/).length == 0;
	var TAG_GLUE = 'cufonglue';
	var TAG_SHY = 'cufonshy';
	var C_SHY_DISABLED = 'cufon-shy-disabled';
	var C_VIEWPORT_RESIZING = 'cufon-viewport-resizing';

	var sharedStorage = new Storage();
	var hoverHandler = new HoverHandler();
	var replaceHistory = new ReplaceHistory();
	var initialized = false;
	var trackingShy = false;
	var shyTimer;
	var ignoreResize = false;

	var engines = {}, fonts = {}, defaultOptions = {
		autoDetect: false,
		engine: null,
		//fontScale: 1,
		//fontScaling: false,
		forceHitArea: false,
		hover: false,
		hoverables: {
			a: true
		},
		ignore: {
			applet: 1,
			canvas: 1,
			col: 1,
			colgroup: 1,
			head: 1,
			iframe: 1,
			map: 1,
			noscript: 1,
			optgroup: 1,
			option: 1,
			script: 1,
			select: 1,
			style: 1,
			textarea: 1,
			title: 1,
			pre: 1
		},
		modifyText: null,
		onAfterReplace: null,
		onBeforeReplace: null,
		printable: true,
		//rotation: 0,
		//selectable: false,
		selector: (
				window.Sizzle
			||	(window.jQuery && function(query) { return jQuery(query); }) // avoid noConflict issues
			||	(window.dojo && dojo.query)
			||	(window.glow && glow.dom && glow.dom.get)
			||	(window.Ext && Ext.query)
			||	(window.YAHOO && YAHOO.util && YAHOO.util.Selector && YAHOO.util.Selector.query)
			||	(window.$$ && function(query) { return $$(query); })
			||	(window.$ && function(query) { return $(query); })
			||	(document.querySelectorAll && function(query) { return document.querySelectorAll(query); })
			||	elementsByTagName
		),
		separate: 'words', // 'none' and 'characters' are also accepted
		softHyphens: true,
		textless: {
			dl: 1,
			html: 1,
			ol: 1,
			table: 1,
			tbody: 1,
			thead: 1,
			tfoot: 1,
			tr: 1,
			ul: 1
		},
		textShadow: 'none',
		trim: 'advanced'
	};

	var separators = {
		// The first pattern may cause unicode characters above
		// code point 255 to be removed in Safari 3.0. Luckily enough
		// Safari 3.0 does not include non-breaking spaces in \s, so
		// we can just use a simple alternative pattern.
		words: /\s/.test('\u00a0') ? /[^\S\u00a0]+/ : /\s+/,
		characters: '',
		none: /^/
	};

	api.now = function() {
		DOM.ready();
		return api;
	};

	api.refresh = function() {
		replaceHistory.repeat.apply(replaceHistory, arguments);
		return api;
	};

	api.registerEngine = function(id, engine) {
		if (!engine) return api;
		engines[id] = engine;
		return api.set('engine', id);
	};

	api.registerFont = function(data) {
		if (!data) return api;
		var font = new Font(data), family = font.family;
		if (!fonts[family]) fonts[family] = new FontFamily();
		fonts[family].add(font);
		return api.set('fontFamily', '"' + family + '"');
	};

	api.replace = function(elements, options, ignoreHistory) {
		options = merge(defaultOptions, options);
		if (!options.engine) return api; // there's no browser support so we'll just stop here
		if (!initialized) {
			CSS.addClass(DOM.root(), 'cufon-active cufon-loading');
			CSS.ready(function() {
				// fires before any replace() calls, but it doesn't really matter
				CSS.addClass(CSS.removeClass(DOM.root(), 'cufon-loading'), 'cufon-ready');
			});
			initialized = true;
		}
		if (options.hover) options.forceHitArea = true;
		if (options.autoDetect) delete options.fontFamily;
		if (typeof options.textShadow == 'string') {
			options.textShadow = CSS.textShadow(options.textShadow);
		}
		if (typeof options.color == 'string' && /^-/.test(options.color)) {
			options.textGradient = CSS.gradient(options.color);
		}
		else delete options.textGradient;
		if (!ignoreHistory) replaceHistory.add(elements, arguments);
		if (elements.nodeType || typeof elements == 'string') elements = [ elements ];
		CSS.ready(function() {
			for (var i = 0, l = elements.length; i < l; ++i) {
				var el = elements[i];
				if (typeof el == 'string') api.replace(options.selector(el), options, true);
				else replaceElement(el, options);
			}
		});
		return api;
	};

	api.set = function(option, value) {
		defaultOptions[option] = value;
		return api;
	};

	return api;

})();

Cufon.registerEngine('vml', (function() {

	var ns = document.namespaces;
	if (!ns) return;
	ns.add('cvml', 'urn:schemas-microsoft-com:vml');
	ns = null;

	var check = document.createElement('cvml:shape');
	check.style.behavior = 'url(#default#VML)';
	if (!check.coordsize) return; // VML isn't supported
	check = null;

	var HAS_BROKEN_LINEHEIGHT = (document.documentMode || 0) < 8;

	document.write(('<style type="text/css">' +
		'cufoncanvas{text-indent:0;}' +
		'@media screen{' +
			'cvml\\:shape,cvml\\:rect,cvml\\:fill,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute;}' +
			'cufoncanvas{position:absolute;text-align:left;}' +
			'cufon{display:inline-block;position:relative;vertical-align:' +
			(HAS_BROKEN_LINEHEIGHT
				? 'middle'
				: 'text-bottom') +
			';}' +
			'cufon cufontext{position:absolute;left:-10000in;font-size:1px;text-align:left;}' +
			'cufonshy.cufon-shy-disabled,.cufon-viewport-resizing cufonshy{display:none;}' +
			'cufonglue{white-space:nowrap;display:inline-block;}' +
			'.cufon-viewport-resizing cufonglue{white-space:normal;}' +
			'a cufon{cursor:pointer}' + // ignore !important here
		'}' +
		'@media print{' +
			'cufon cufoncanvas{display:none;}' +
		'}' +
	'</style>').replace(/;/g, '!important;'));

	function getFontSizeInPixels(el, value) {
		return getSizeInPixels(el, /(?:em|ex|%)$|^[a-z-]+$/i.test(value) ? '1em' : value);
	}

	// Original by Dead Edwards.
	// Combined with getFontSizeInPixels it also works with relative units.
	function getSizeInPixels(el, value) {
		if (!isNaN(value) || /px$/i.test(value)) return parseFloat(value);
		var style = el.style.left, runtimeStyle = el.runtimeStyle.left;
		el.runtimeStyle.left = el.currentStyle.left;
		el.style.left = value.replace('%', 'em');
		var result = el.style.pixelLeft;
		el.style.left = style;
		el.runtimeStyle.left = runtimeStyle;
		return result;
	}

	function getSpacingValue(el, style, size, property) {
		var key = 'computed' + property, value = style[key];
		if (isNaN(value)) {
			value = style.get(property);
			style[key] = value = (value == 'normal') ? 0 : ~~size.convertFrom(getSizeInPixels(el, value));
		}
		return value;
	}

	var fills = {};

	function gradientFill(gradient) {
		var id = gradient.id;
		if (!fills[id]) {
			var stops = gradient.stops, fill = document.createElement('cvml:fill'), colors = [];
			fill.type = 'gradient';
			fill.angle = 180;
			fill.focus = '0';
			fill.method = 'none';
			fill.color = stops[0][1];
			for (var j = 1, k = stops.length - 1; j < k; ++j) {
				colors.push(stops[j][0] * 100 + '% ' + stops[j][1]);
			}
			fill.colors = colors.join(',');
			fill.color2 = stops[k][1];
			fills[id] = fill;
		}
		return fills[id];
	}

	return function(font, text, style, options, node, el, hasNext) {

		var redraw = (text === null);

		if (redraw) text = node.alt;

		var viewBox = font.viewBox;

		var size = style.computedFontSize || (style.computedFontSize = new Cufon.CSS.Size(getFontSizeInPixels(el, style.get('fontSize')) + 'px', font.baseSize));

		var wrapper, canvas;

		if (redraw) {
			wrapper = node;
			canvas = node.firstChild;
		}
		else {
			wrapper = document.createElement('cufon');
			wrapper.className = 'cufon cufon-vml';
			wrapper.alt = text;

			canvas = document.createElement('cufoncanvas');
			wrapper.appendChild(canvas);

			if (options.printable) {
				var print = document.createElement('cufontext');
				print.appendChild(document.createTextNode(text));
				wrapper.appendChild(print);
			}

			// ie6, for some reason, has trouble rendering the last VML element in the document.
			// we can work around this by injecting a dummy element where needed.
			// @todo find a better solution
			if (!hasNext) wrapper.appendChild(document.createElement('cvml:shape'));
		}

		var wStyle = wrapper.style;
		var cStyle = canvas.style;

		var height = size.convert(viewBox.height), roundedHeight = Math.ceil(height);
		var roundingFactor = roundedHeight / height;
		var stretchFactor = roundingFactor * Cufon.CSS.fontStretch(style.get('fontStretch'));
		var minX = viewBox.minX, minY = viewBox.minY;

		cStyle.height = roundedHeight;
		cStyle.top = Math.round(size.convert(minY - font.ascent));
		cStyle.left = Math.round(size.convert(minX));

		wStyle.height = size.convert(font.height) + 'px';

		var color = style.get('color');
		var chars = Cufon.CSS.textTransform(text, style).split('');

		var jumps = font.spacing(chars,
			getSpacingValue(el, style, size, 'letterSpacing'),
			getSpacingValue(el, style, size, 'wordSpacing')
		);

		if (!jumps.length) return null;

		var width = jumps.total;
		var fullWidth = -minX + width + (viewBox.width - jumps[jumps.length - 1]);

		var shapeWidth = size.convert(fullWidth * stretchFactor), roundedShapeWidth = Math.round(shapeWidth);

		var coordSize = fullWidth + ',' + viewBox.height, coordOrigin;
		var stretch = 'r' + coordSize + 'ns';

		var fill = options.textGradient && gradientFill(options.textGradient);

		var glyphs = font.glyphs, offsetX = 0;
		var shadows = options.textShadow;
		var i = -1, j = 0, chr;

		while (chr = chars[++i]) {

			var glyph = glyphs[chars[i]] || font.missingGlyph, shape;
			if (!glyph) continue;

			if (redraw) {
				// some glyphs may be missing so we can't use i
				shape = canvas.childNodes[j];
				while (shape.firstChild) shape.removeChild(shape.firstChild); // shadow, fill
			}
			else {
				shape = document.createElement('cvml:shape');
				canvas.appendChild(shape);
			}

			shape.stroked = 'f';
			shape.coordsize = coordSize;
			shape.coordorigin = coordOrigin = (minX - offsetX) + ',' + minY;
			shape.path = (glyph.d ? 'm' + glyph.d + 'xe' : '') + 'm' + coordOrigin + stretch;
			shape.fillcolor = color;

			if (fill) shape.appendChild(fill.cloneNode(false));

			// it's important to not set top/left or IE8 will grind to a halt
			var sStyle = shape.style;
			sStyle.width = roundedShapeWidth;
			sStyle.height = roundedHeight;

			if (shadows) {
				// due to the limitations of the VML shadow element there
				// can only be two visible shadows. opacity is shared
				// for all shadows.
				var shadow1 = shadows[0], shadow2 = shadows[1];
				var color1 = Cufon.CSS.color(shadow1.color), color2;
				var shadow = document.createElement('cvml:shadow');
				shadow.on = 't';
				shadow.color = color1.color;
				shadow.offset = shadow1.offX + ',' + shadow1.offY;
				if (shadow2) {
					color2 = Cufon.CSS.color(shadow2.color);
					shadow.type = 'double';
					shadow.color2 = color2.color;
					shadow.offset2 = shadow2.offX + ',' + shadow2.offY;
				}
				shadow.opacity = color1.opacity || (color2 && color2.opacity) || 1;
				shape.appendChild(shadow);
			}

			offsetX += jumps[j++];
		}

		// addresses flickering issues on :hover

		var cover = shape.nextSibling, coverFill, vStyle;

		if (options.forceHitArea) {

			if (!cover) {
				cover = document.createElement('cvml:rect');
				cover.stroked = 'f';
				cover.className = 'cufon-vml-cover';
				coverFill = document.createElement('cvml:fill');
				coverFill.opacity = 0;
				cover.appendChild(coverFill);
				canvas.appendChild(cover);
			}

			vStyle = cover.style;

			vStyle.width = roundedShapeWidth;
			vStyle.height = roundedHeight;

		}
		else if (cover) canvas.removeChild(cover);

		wStyle.width = Math.max(Math.ceil(size.convert(width * stretchFactor)), 0);

		if (HAS_BROKEN_LINEHEIGHT) {

			var yAdjust = style.computedYAdjust;

			if (yAdjust === undefined) {
				var lineHeight = style.get('lineHeight');
				if (lineHeight == 'normal') lineHeight = '1em';
				else if (!isNaN(lineHeight)) lineHeight += 'em'; // no unit
				style.computedYAdjust = yAdjust = 0.5 * (getSizeInPixels(el, lineHeight) - parseFloat(wStyle.height));
			}

			if (yAdjust) {
				wStyle.marginTop = Math.ceil(yAdjust) + 'px';
				wStyle.marginBottom = yAdjust + 'px';
			}

		}

		return wrapper;

	};

})());

Cufon.registerEngine('canvas', (function() {

	// Safari 2 doesn't support .apply() on native methods

	var check = document.createElement('canvas');
	if (!check || !check.getContext || !check.getContext.apply) return;
	check = null;

	var HAS_INLINE_BLOCK = Cufon.CSS.supports('display', 'inline-block');

	// Firefox 2 w/ non-strict doctype (almost standards mode)
	var HAS_BROKEN_LINEHEIGHT = !HAS_INLINE_BLOCK && (document.compatMode == 'BackCompat' || /frameset|transitional/i.test(document.doctype.publicId));

	var styleSheet = document.createElement('style');
	styleSheet.type = 'text/css';
	styleSheet.appendChild(document.createTextNode((
		'cufon{text-indent:0;}' +
		'@media screen,projection{' +
			'cufon{display:inline;display:inline-block;position:relative;vertical-align:middle;' +
			(HAS_BROKEN_LINEHEIGHT
				? ''
				: 'font-size:1px;line-height:1px;') +
			'}cufon cufontext{display:-moz-inline-box;display:inline-block;width:0;height:0;text-align:left;text-indent:-10000in;}' +
			(HAS_INLINE_BLOCK
				? 'cufon canvas{position:relative;}'
				: 'cufon canvas{position:absolute;}') +
			'cufonshy.cufon-shy-disabled,.cufon-viewport-resizing cufonshy{display:none;}' +
			'cufonglue{white-space:nowrap;display:inline-block;}' +
			'.cufon-viewport-resizing cufonglue{white-space:normal;}' +
		'}' +
		'@media print{' +
			'cufon{padding:0;}' + // Firefox 2
			'cufon canvas{display:none;}' +
		'}'
	).replace(/;/g, '!important;')));
	document.getElementsByTagName('head')[0].appendChild(styleSheet);

	function generateFromVML(path, context) {
		var atX = 0, atY = 0;
		var code = [], re = /([mrvxe])([^a-z]*)/g, match;
		generate: for (var i = 0; match = re.exec(path); ++i) {
			var c = match[2].split(',');
			switch (match[1]) {
				case 'v':
					code[i] = { m: 'bezierCurveTo', a: [ atX + ~~c[0], atY + ~~c[1], atX + ~~c[2], atY + ~~c[3], atX += ~~c[4], atY += ~~c[5] ] };
					break;
				case 'r':
					code[i] = { m: 'lineTo', a: [ atX += ~~c[0], atY += ~~c[1] ] };
					break;
				case 'm':
					code[i] = { m: 'moveTo', a: [ atX = ~~c[0], atY = ~~c[1] ] };
					break;
				case 'x':
					code[i] = { m: 'closePath' };
					break;
				case 'e':
					break generate;
			}
			context[code[i].m].apply(context, code[i].a);
		}
		return code;
	}

	function interpret(code, context) {
		for (var i = 0, l = code.length; i < l; ++i) {
			var line = code[i];
			context[line.m].apply(context, line.a);
		}
	}

	return function(font, text, style, options, node, el) {

		var redraw = (text === null);

		if (redraw) text = node.getAttribute('alt');

		var viewBox = font.viewBox;

		var size = style.getSize('fontSize', font.baseSize);

		var expandTop = 0, expandRight = 0, expandBottom = 0, expandLeft = 0;
		var shadows = options.textShadow, shadowOffsets = [];
		if (shadows) {
			for (var i = shadows.length; i--;) {
				var shadow = shadows[i];
				var x = size.convertFrom(parseFloat(shadow.offX));
				var y = size.convertFrom(parseFloat(shadow.offY));
				shadowOffsets[i] = [ x, y ];
				if (y < expandTop) expandTop = y;
				if (x > expandRight) expandRight = x;
				if (y > expandBottom) expandBottom = y;
				if (x < expandLeft) expandLeft = x;
			}
		}

		var chars = Cufon.CSS.textTransform(text, style).split('');

		var jumps = font.spacing(chars,
			~~size.convertFrom(parseFloat(style.get('letterSpacing')) || 0),
			~~size.convertFrom(parseFloat(style.get('wordSpacing')) || 0)
		);

		if (!jumps.length) return null; // there's nothing to render

		var width = jumps.total;

		expandRight += viewBox.width - jumps[jumps.length - 1];
		expandLeft += viewBox.minX;

		var wrapper, canvas;

		if (redraw) {
			wrapper = node;
			canvas = node.firstChild;
		}
		else {
			wrapper = document.createElement('cufon');
			wrapper.className = 'cufon cufon-canvas';
			wrapper.setAttribute('alt', text);

			canvas = document.createElement('canvas');
			wrapper.appendChild(canvas);

			if (options.printable) {
				var print = document.createElement('cufontext');
				print.appendChild(document.createTextNode(text));
				wrapper.appendChild(print);
			}
		}

		var wStyle = wrapper.style;
		var cStyle = canvas.style;

		var height = size.convert(viewBox.height);
		var roundedHeight = Math.ceil(height);
		var roundingFactor = roundedHeight / height;
		var stretchFactor = roundingFactor * Cufon.CSS.fontStretch(style.get('fontStretch'));
		var stretchedWidth = width * stretchFactor;

		var canvasWidth = Math.ceil(size.convert(stretchedWidth + expandRight - expandLeft));
		var canvasHeight = Math.ceil(size.convert(viewBox.height - expandTop + expandBottom));

		canvas.width = canvasWidth;
		canvas.height = canvasHeight;

		// needed for WebKit and full page zoom
		cStyle.width = canvasWidth + 'px';
		cStyle.height = canvasHeight + 'px';

		// minY has no part in canvas.height
		expandTop += viewBox.minY;

		cStyle.top = Math.round(size.convert(expandTop - font.ascent)) + 'px';
		cStyle.left = Math.round(size.convert(expandLeft)) + 'px';

		var wrapperWidth = Math.max(Math.ceil(size.convert(stretchedWidth)), 0) + 'px';

		if (HAS_INLINE_BLOCK) {
			wStyle.width = wrapperWidth;
			wStyle.height = size.convert(font.height) + 'px';
		}
		else {
			wStyle.paddingLeft = wrapperWidth;
			wStyle.paddingBottom = (size.convert(font.height) - 1) + 'px';
		}

		var g = canvas.getContext('2d'), scale = height / viewBox.height;

		// proper horizontal scaling is performed later
		g.scale(scale, scale * roundingFactor);
		g.translate(-expandLeft, -expandTop);
		g.save();

		function renderText() {
			var glyphs = font.glyphs, glyph, i = -1, j = -1, chr;
			g.scale(stretchFactor, 1);
			while (chr = chars[++i]) {
				var glyph = glyphs[chars[i]] || font.missingGlyph;
				if (!glyph) continue;
				if (glyph.d) {
					g.beginPath();
					if (glyph.code) interpret(glyph.code, g);
					else glyph.code = generateFromVML('m' + glyph.d, g);
					g.fill();
				}
				g.translate(jumps[++j], 0);
			}
			g.restore();
		}

		if (shadows) {
			for (var i = shadows.length; i--;) {
				var shadow = shadows[i];
				g.save();
				g.fillStyle = shadow.color;
				g.translate.apply(g, shadowOffsets[i]);
				renderText();
			}
		}

		var gradient = options.textGradient;
		if (gradient) {
			var stops = gradient.stops, fill = g.createLinearGradient(0, viewBox.minY, 0, viewBox.maxY);
			for (var i = 0, l = stops.length; i < l; ++i) {
				fill.addColorStop.apply(fill, stops[i]);
			}
			g.fillStyle = fill;
		}
		else g.fillStyle = style.get('color');

		renderText();

		return wrapper;

	};

})());

/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * (c) 2007-2008 Typodermic. This font is freeware. Read attached text file for
 * details. Check out the rest of the Gnuolane family and the OpenType version at
 * Typodermic: http://www.typodermic.com
 * 
 * Trademark:
 * Gnuolane is a trademark of Typodermic
 * 
 * Description:
 * Gnuolane Free is identical to Gnuolane regular. If you find a version of
 * Gnuolane Regular that looks significantly heavier than Gnuolane Free, it's an
 * older version. Ask your font vendor for an update.
 * 
 * Manufacturer:
 * Ray Larabie
 * 
 * Designer:
 * Ray Larabie
 * 
 * Vendor URL:
 * http://www.typodermic.com
 */
Cufon.registerFont({"w":154,"face":{"font-family":"gnuolane","font-weight":400,"font-stretch":"normal","units-per-em":"360","panose-1":"2 11 5 6 4 0 0 2 0 4","ascent":"288","descent":"-72","x-height":"4","bbox":"-24 -350 269 79.3202","underline-thickness":"18","underline-position":"-18","unicode-range":"U+0020-U+2122"},"glyphs":{" ":{"w":76},"!":{"d":"57,-282r-7,198r-29,0r-7,-198r43,0xm52,0r-34,0r0,-47r34,0r0,47","w":70},"\"":{"d":"59,-280r29,0r-3,105r-22,0xm4,-280r29,0r-3,105r-22,0","w":92,"k":{"\u00c5":26,"\u00c4":26,"\u00c1":26,"t":-9,"T":-9,"J":28,"A":26}},"#":{"d":"167,-260r-19,66r22,0r0,23r-28,0r-17,61r31,0r0,24r-38,0r-19,69r-27,-7r19,-62r-36,0r-19,69r-27,-7v8,-22,12,-39,18,-62r-22,0r0,-24r28,0r17,-61r-30,0r0,-23r38,0r20,-73r26,7r-18,66r34,0r20,-73xm62,-110r34,0r17,-61r-34,0","w":176},"$":{"d":"120,-89v-2,34,-14,54,-45,58r0,31r-21,0r0,-31v-32,-4,-46,-22,-46,-60r29,-5v0,22,4,37,25,39v39,4,33,-51,11,-61v-27,-14,-59,-25,-58,-67v1,-28,11,-45,39,-48r0,-35r21,0r0,34v28,3,40,16,42,45r-26,5v-3,-14,-6,-24,-23,-23v-14,0,-23,6,-22,21v5,51,78,35,74,97","w":130},"%":{"d":"11,-202v0,-41,2,-74,43,-74v41,0,42,33,42,74v0,40,-1,74,-42,74v-41,0,-43,-34,-43,-74xm42,0r115,-272r24,0r-115,272r-24,0xm72,-178v0,-31,10,-76,-18,-76v-30,0,-19,44,-19,76v0,17,3,29,19,29v16,0,18,-12,18,-29xm126,-70v0,-41,2,-74,43,-74v41,0,43,33,43,74v0,40,-3,74,-43,74v-40,0,-43,-34,-43,-74xm188,-46v-3,-32,10,-76,-19,-76v-30,0,-16,44,-19,76v2,16,3,28,19,28v16,0,17,-13,19,-28","w":222},"&":{"d":"62,-158v-18,-34,-36,-115,25,-115v71,0,38,105,4,121v14,25,30,49,46,72v7,-20,10,-44,12,-67r29,6v-5,30,-9,61,-20,87r28,30r-21,27r-25,-28v-27,46,-131,40,-131,-32v0,-51,23,-79,53,-101xm42,-66v-5,52,63,53,80,17v-18,-25,-35,-54,-50,-82v-17,16,-27,34,-30,65xm87,-248v-31,2,-13,53,-6,72v10,-12,23,-28,23,-49v0,-14,-2,-24,-17,-23","w":186},"'":{"d":"4,-280r29,0r-3,105r-22,0","w":37,"k":{"\u00c5":26,"\u00c4":26,"\u00c1":26,"t":-9,"T":-9,"J":28,"A":26}},"(":{"d":"90,50v-110,-35,-101,-287,-12,-335r16,19v-73,50,-79,260,9,297","w":113},")":{"d":"24,-284v109,36,100,286,12,335r-16,-19v73,-50,77,-258,-9,-296","w":113},"*":{"d":"105,-268r-6,58r57,-23r9,27r-61,14r40,44r-27,19r-29,-49r-31,49r-26,-19r40,-43r-60,-16r10,-27r56,24r-6,-58r34,0","w":175},"+":{"d":"84,-122r-73,0r0,-23r73,0r0,-74r23,0r0,74r73,0r0,23r-73,0r0,73r-23,0r0,-73","w":190},",":{"d":"48,-47v1,44,2,63,-26,91r-10,-8v12,-12,19,-25,19,-38r-17,0r0,-45r34,0","w":58,"k":{"\u201d":18,"\u201c":18,"\u2019":18,"\u2018":18,"\u00f6":7,"\u00f4":7,"\u00e9":7,"\u00dc":7,"\u00db":7,"\u00d6":9,"\u00d4":9,"y":22,"w":22,"v":22,"t":9,"o":7,"e":7,"d":7,"c":7,"Y":28,"W":28,"V":28,"U":7,"T":22,"Q":9,"O":9,"C":9,"9":9,"8":9,"6":9,"1":22,"0":9,")":13,"'":18,"\"":18}},"-":{"d":"4,-94r3,-23r68,0r-3,23r-68,0","w":78,"k":{"\u00c5":13,"\u00c4":13,"\u00c1":13,"Z":13,"Y":15,"X":22,"W":15,"V":15,"T":22,"S":11,"J":41,"A":13}},".":{"d":"45,0r-34,0r0,-47r34,0r0,47","w":55,"k":{"\u201d":18,"\u201c":18,"\u2019":18,"\u2018":18,"\u00f6":7,"\u00f4":7,"\u00e9":7,"\u00dc":7,"\u00db":7,"\u00d6":9,"\u00d4":9,"y":22,"w":22,"v":22,"t":9,"o":7,"e":7,"d":7,"c":7,"Y":28,"W":28,"V":28,"U":7,"T":22,"Q":9,"O":9,"C":9,"9":9,"8":9,"6":9,"1":22,"0":9,")":13,"'":18,"\"":18}},"\/":{"d":"67,-268r22,0r-66,268r-22,0","w":90,"k":{"\u00fc":13,"\u00fb":13,"\u00f6":26,"\u00f4":26,"\u00f1":11,"\u00e9":26,"\u00e5":20,"\u00e4":20,"\u00e1":20,"\u00d6":13,"\u00d4":13,"\u00c5":31,"\u00c4":31,"\u00c1":31,"z":13,"x":11,"u":13,"s":19,"q":22,"o":26,"n":11,"m":11,"g":24,"e":26,"d":24,"c":26,"a":20,"S":7,"Q":13,"O":13,"J":44,"G":15,"C":13,"A":31,"9":13,"8":13,"6":13,"0":13}},"0":{"d":"11,-134v0,-76,-9,-139,68,-139v77,0,68,64,68,139v0,75,9,139,-68,139v-77,0,-68,-63,-68,-139xm110,-80v0,-62,22,-158,-31,-165v-55,6,-32,102,-32,165v0,31,1,56,32,56v30,0,31,-26,31,-56","w":158,"k":{"\u00c5":9,"\u00c4":9,"\u00c1":9,"Y":9,"X":9,"W":9,"V":9,"T":7,"A":9,"\/":15,".":6,",":6}},"1":{"d":"3,-233v28,-6,41,-17,53,-40r22,0r0,273r-35,0r0,-225v-6,9,-20,18,-35,19","w":89},"2":{"d":"96,-197v0,-30,-3,-48,-26,-48v-32,0,-24,34,-28,65r-33,-5v2,-53,7,-88,64,-88v47,0,57,29,57,76v0,75,-42,127,-78,170r83,0r-2,27r-122,0r0,-27v41,-41,85,-92,85,-170","w":143},"3":{"d":"13,-209v2,-42,12,-64,58,-64v47,0,60,26,58,74v-1,26,-6,51,-24,59v25,7,28,32,32,63v10,73,-64,105,-115,67v-11,-8,-12,-23,-14,-41r29,-10v3,22,7,37,33,37v31,0,31,-25,33,-56v2,-37,-14,-50,-53,-45r3,-28v44,7,44,-23,42,-65v-1,-17,-7,-27,-24,-27v-24,-1,-25,18,-28,39","w":145},"4":{"d":"5,-78r73,-190r43,0r0,185r15,0r-3,28r-12,0r0,55r-35,0r0,-55r-81,0r0,-23xm86,-83r0,-129r-51,129r51,0","w":137},"5":{"d":"99,-60v0,-35,11,-83,-26,-82v-13,0,-24,4,-32,12r-23,-12r8,-126r101,0r-3,30r-66,0r-5,75v8,-6,21,-9,38,-9v43,0,45,37,45,82v0,79,-45,117,-108,84v-12,-6,-17,-20,-24,-33r24,-18v7,18,15,33,38,33v24,0,33,-13,33,-36","w":145},"6":{"d":"111,-210v7,-40,-53,-48,-61,-12v-4,20,-6,47,-6,77v9,-17,29,-28,51,-29v47,-1,52,40,52,86v1,57,-11,93,-68,93v-67,0,-68,-63,-68,-130v-1,-86,2,-165,94,-145v24,5,33,23,34,50xm109,-60v0,-36,10,-85,-28,-85v-32,0,-36,41,-33,74v3,27,5,46,30,47v23,1,31,-15,31,-36","w":155,"k":{"\u00c5":9,"\u00c4":9,"\u00c1":9,"Y":9,"X":9,"W":9,"V":9,"T":7,"A":9,"\/":15,".":6,",":6}},"7":{"d":"20,0v5,-94,24,-180,62,-240r-76,0r3,-28r107,0r0,22v-40,56,-49,154,-54,246r-42,0","w":119,"k":{"4":28,".":24,",":24}},"8":{"d":"77,-273v72,0,77,114,27,129v30,11,41,30,41,74v0,50,-19,75,-68,75v-49,0,-68,-25,-68,-75v0,-41,9,-67,42,-74v-28,-6,-32,-29,-32,-65v0,-41,15,-64,58,-64xm76,-22v45,3,39,-82,15,-100v-27,-21,-51,13,-48,51v3,31,4,47,33,49xm79,-248v-38,0,-32,68,-13,84v3,2,7,5,12,7v20,-8,26,-23,26,-53v0,-25,-3,-38,-25,-38","w":153,"k":{"\u00c5":9,"\u00c4":9,"\u00c1":9,"Y":9,"X":9,"W":9,"V":9,"T":7,"A":9,"\/":15,".":6,",":6}},"9":{"d":"39,-63v-5,41,56,57,66,14v5,-22,7,-47,7,-79v-10,13,-29,26,-52,26v-48,0,-50,-40,-51,-85v-2,-55,12,-86,68,-86v66,0,70,57,68,123v-2,76,3,153,-68,155v-43,1,-63,-19,-66,-58xm45,-188v1,31,0,58,30,58v16,0,29,-17,34,-30v-3,-39,8,-84,-31,-84v-31,0,-34,24,-33,56","w":155,"k":{"\u00c5":9,"\u00c4":9,"\u00c1":9,"Y":9,"X":9,"W":9,"V":9,"T":7,"A":9,"\/":15,".":6,",":6}},":":{"d":"45,0r-34,0r0,-47r34,0r0,47xm45,-149r-34,0r0,-46r34,0r0,46","w":55},";":{"d":"46,-149r-34,0r0,-46r34,0r0,46xm46,-47v1,45,2,63,-27,91r-9,-8v12,-12,18,-25,18,-38r-16,0r0,-45r34,0","w":57},"<":{"d":"131,-43r-120,-78r0,-18r120,-80r0,27r-98,62r98,60r0,27","w":141},"=":{"d":"11,-89r0,-22r177,0r0,22r-177,0xm11,-163r0,-23r177,0r0,23r-177,0","w":199},">":{"d":"11,-70r97,-60r-97,-62r0,-27r120,80r0,18r-120,78r0,-27","w":141},"?":{"d":"45,-81v-21,-64,43,-85,46,-139v0,-23,-3,-40,-26,-39v-29,0,-27,31,-29,60r-32,-4v0,-52,10,-84,63,-84v47,0,59,23,59,66v0,65,-68,71,-52,140r-29,0xm76,0r-34,0r0,-47r34,0r0,47","w":132},"@":{"d":"70,-106v0,-37,-5,-68,35,-68v12,0,16,8,20,16v0,-7,1,-13,2,-18r13,0r0,95v1,10,4,24,14,24v27,-5,21,-40,22,-75v2,-67,1,-111,-71,-104v-95,-12,-66,102,-68,187v-1,59,25,77,88,77v33,0,52,-12,65,-29r12,21v-21,45,-144,48,-170,8v-35,-52,-31,-194,-7,-260v16,-43,138,-41,161,-5v17,26,13,61,13,108v0,48,-1,89,-42,93v-16,1,-23,-11,-26,-23v-4,15,-13,23,-26,23v-39,2,-35,-32,-35,-70xm122,-85v-1,-27,6,-65,-17,-69v-26,2,-11,42,-15,71v1,14,1,27,16,26v11,-1,17,-14,16,-28","w":212},"A":{"d":"98,-64r-50,0r-11,64r-34,0r54,-268r37,0r54,268r-39,0xm51,-93r44,0r-22,-117","w":151,"k":{"\u201d":24,"\u201c":24,"\u2019":24,"\u2018":24,"\u2014":9,"\u2013":9,"\u00fc":9,"\u00fb":9,"\u00f6":6,"\u00f4":6,"\u00e9":6,"\u00e5":4,"\u00e4":4,"\u00e1":4,"\u00dc":9,"\u00db":9,"\u00d6":9,"\u00d4":9,"y":18,"w":18,"v":18,"u":9,"q":4,"o":6,"e":6,"d":7,"c":6,"a":4,"Y":22,"W":22,"V":22,"U":9,"T":26,"S":4,"Q":9,"O":9,"G":9,"C":9,"9":9,"8":9,"6":9,"0":9,"-":9,"'":24,"\"":24}},"B":{"d":"150,-82v2,54,-11,82,-66,82r-70,0r0,-268v69,-1,135,-7,128,66v-3,29,-10,52,-35,58v31,5,42,28,43,62xm115,-57v0,-35,4,-74,-35,-71r-32,0r0,102v34,1,67,1,67,-31xm107,-199v5,-40,-20,-45,-59,-42r0,87v40,4,64,-5,59,-45","w":157,"k":{"\u00c5":11,"\u00c4":11,"\u00c1":11,"Y":11,"W":11,"V":11,"J":11,"A":11,"\/":13,".":6,",":6}},"C":{"d":"11,-134v0,-74,-3,-139,71,-139v63,0,69,35,69,94r-35,4v-3,-36,5,-73,-34,-70v-44,3,-34,62,-34,111v0,48,-10,107,34,110v38,3,31,-34,33,-70r36,3v-3,56,-7,96,-69,96v-74,0,-72,-65,-71,-139","w":159,"k":{"\u00c5":9,"\u00c4":9,"\u00c1":9,"Y":9,"X":9,"W":9,"V":9,"T":7,"A":9,"\/":15,".":6,",":6}},"D":{"d":"158,-134v0,77,0,139,-81,134r-63,0r0,-268r61,0v79,-4,83,57,83,134xm122,-134v2,-65,3,-118,-72,-107r0,211r28,0v51,0,43,-53,44,-104","w":169,"k":{"\u00c5":11,"\u00c4":11,"\u00c1":11,"Y":11,"W":11,"V":11,"J":11,"A":11,"\/":13,".":6,",":6}},"E":{"d":"117,-268r0,28r-67,0r0,84r57,0r-3,29r-54,0r0,100r69,0r0,27r-105,0r0,-268r103,0","w":127,"k":{"\u2014":13,"\u2013":13,"-":13}},"F":{"d":"125,-268r0,28r-75,0r0,89r61,0r-3,28r-58,0r0,123r-36,0r0,-268r111,0","w":128,"k":{"\u2014":11,"\u2013":11,"\u00fc":7,"\u00fb":7,"\u00f6":11,"\u00f4":11,"\u00e9":11,"\u00e5":11,"\u00e4":11,"\u00e1":11,"\u00c5":26,"\u00c4":26,"\u00c1":26,"y":7,"w":7,"v":7,"u":7,"s":6,"r":6,"o":11,"e":11,"c":11,"a":11,"T":-11,"J":44,"A":26,"\/":24,".":28,"-":11,",":28}},"G":{"d":"78,-24v40,2,40,-43,38,-85r-34,0r5,-29r62,0r0,138r-26,0r-3,-26v-8,19,-23,31,-50,31v-65,-2,-58,-74,-59,-141v0,-73,-1,-137,71,-137v58,0,67,30,67,84r-29,7v-2,-33,0,-65,-36,-62v-56,4,-36,93,-36,154v0,32,2,64,30,66","w":160,"k":{"Y":4,"W":4,"V":4}},"H":{"d":"50,-268r0,115r62,0r0,-115r36,0r0,268r-36,0r0,-125r-62,0r0,125r-36,0r0,-268r36,0","w":162},"I":{"d":"50,-268r0,268r-36,0r0,-268r36,0","w":64},"J":{"d":"31,-47v-1,28,51,33,51,2r1,-223r35,0r0,203v19,79,-97,95,-115,29","w":132,"k":{"\u00c5":7,"\u00c4":7,"\u00c1":7,"A":7,"\/":13,".":7,",":7}},"K":{"d":"77,-140r-27,46r0,94r-36,0r0,-268r36,0r0,119r54,-119r40,0r-47,88r54,180r-41,0","k":{"\u2014":20,"\u2013":20,"\u00fc":11,"\u00fb":11,"\u00f6":9,"\u00f4":9,"\u00e9":9,"\u00e5":2,"\u00e4":2,"\u00e1":2,"\u00dc":6,"\u00db":6,"\u00d6":11,"\u00d4":11,"u":11,"o":9,"e":9,"c":9,"a":2,"U":6,"Q":11,"O":11,"C":11,"9":11,"8":11,"6":11,"0":11,"-":20}},"L":{"d":"50,-268r0,241r55,0r0,27r-91,0r0,-268r36,0","w":110,"k":{"\u201d":18,"\u201c":18,"\u2019":18,"\u2018":18,"\u2014":24,"\u2013":24,"\u00d6":7,"\u00d4":7,"Y":20,"W":20,"V":20,"T":15,"Q":7,"O":7,"C":7,"9":7,"8":7,"6":7,"0":7,"-":24,"'":18,"\"":18}},"M":{"d":"40,-195r0,195r-27,0r0,-268r42,0r47,213r47,-213r40,0r0,268r-30,0r0,-195r-41,195r-34,0","w":201},"N":{"d":"14,-268r37,0r65,186r0,-186r31,0r0,268r-37,0r-66,-185r0,185r-30,0r0,-268","w":160},"O":{"d":"11,-134v0,-75,-1,-139,75,-139v75,0,72,64,72,139v0,76,3,139,-72,139v-76,0,-75,-64,-75,-139xm120,-83v0,-62,20,-155,-34,-162v-46,4,-38,60,-38,111v0,50,-9,110,38,110v30,0,34,-27,34,-59","w":169,"k":{"\u00c5":9,"\u00c4":9,"\u00c1":9,"Y":9,"X":9,"W":9,"V":9,"T":7,"A":9,"\/":15,".":6,",":6}},"P":{"d":"144,-195v0,62,-28,89,-94,85r0,110r-36,0r0,-268v73,-3,130,-2,130,73xm109,-193v0,-38,-18,-50,-59,-46r0,101v44,5,59,-14,59,-55","w":149,"k":{"\u2014":19,"\u2013":19,"\u00f6":2,"\u00f4":2,"\u00e9":2,"\u00e5":9,"\u00e4":9,"\u00e1":9,"\u00c5":20,"\u00c4":20,"\u00c1":20,"t":-9,"o":2,"g":9,"f":-6,"e":2,"c":2,"a":9,"J":48,"A":20,"\/":28,".":37,"-":19,",":37}},"Q":{"d":"12,-75v0,-87,-21,-198,74,-198v75,0,72,64,72,139v-1,64,4,127,-49,136v8,15,18,30,31,40r-25,19v-15,-13,-28,-36,-35,-57v-49,-2,-68,-31,-68,-79xm120,-83v0,-62,20,-155,-34,-162v-46,4,-38,60,-38,111v0,50,-9,110,38,110v30,0,34,-27,34,-59","w":169,"k":{"\u00c5":9,"\u00c4":9,"\u00c1":9,"Y":9,"X":9,"W":9,"V":9,"T":7,"A":9,"\/":15,".":6,",":6}},"R":{"d":"140,-199v-1,35,-4,66,-31,74r33,125r-40,0r-25,-120r-27,0r0,120r-36,0r0,-268r57,0v51,-3,71,20,69,69xm106,-198v3,-39,-16,-49,-56,-44r0,94r26,0v30,2,28,-22,30,-50","w":145,"k":{"\u2014":11,"\u2013":11,"-":11}},"S":{"d":"42,-143v-46,-30,-45,-130,32,-130v41,0,57,21,56,61r-28,4v-1,-21,-5,-37,-28,-37v-42,0,-33,65,-9,78v36,20,72,40,70,100v11,68,-76,95,-114,53v-13,-14,-12,-38,-15,-64r31,-7v1,31,0,60,31,61v47,2,34,-80,9,-96","w":143,"k":{"\u00c5":6,"\u00c4":6,"\u00c1":6,"g":9,"Y":11,"W":11,"V":11,"T":7,"A":6,"\/":11}},"T":{"d":"128,-268r0,28r-46,0r0,240r-35,0r0,-240r-45,0r0,-28r126,0","w":129,"k":{"\u2014":26,"\u2013":26,"\u00fc":19,"\u00fb":19,"\u00f6":22,"\u00f4":22,"\u00e9":22,"\u00e5":17,"\u00e4":17,"\u00e1":17,"\u00d6":7,"\u00d4":7,"\u00c5":22,"\u00c4":22,"\u00c1":22,"z":9,"y":11,"x":20,"w":11,"v":11,"u":19,"r":15,"o":22,"e":22,"c":22,"a":17,"T":-11,"Q":7,"O":7,"J":22,"C":7,"A":22,"9":7,"8":7,"6":7,"0":7,"\/":26,".":15,"-":26,",":15}},"U":{"d":"78,5v-51,0,-64,-30,-64,-82r0,-191r35,0r1,199v2,23,3,46,28,45v36,-2,29,-45,29,-83r0,-161r36,0r0,191v0,51,-12,82,-65,82","w":156,"k":{"\u00c5":9,"\u00c4":9,"\u00c1":9,"X":4,"A":9,"\/":13,".":4,",":4}},"V":{"d":"78,-62r36,-206r34,0r-54,268r-37,0r-54,-268r39,0","w":151,"k":{"\u2014":22,"\u2013":22,"\u00fc":7,"\u00fb":7,"\u00f6":15,"\u00f4":15,"\u00e9":15,"\u00e5":18,"\u00e4":18,"\u00e1":18,"\u00d6":11,"\u00d4":11,"\u00c5":22,"\u00c4":22,"\u00c1":22,"u":7,"s":13,"p":6,"o":15,"e":15,"c":15,"a":18,"S":9,"Q":11,"O":11,"J":31,"G":6,"C":11,"A":22,"9":11,"8":11,"6":11,"0":11,"\/":28,".":26,"-":22,",":26}},"W":{"d":"99,-268r37,0r30,213r27,-213r37,0r-45,268r-35,0r-32,-216r-32,216r-38,0r-45,-268r38,0r28,214","w":233,"k":{"\u2014":22,"\u2013":22,"\u00fc":7,"\u00fb":7,"\u00f6":15,"\u00f4":15,"\u00e9":15,"\u00e5":18,"\u00e4":18,"\u00e1":18,"\u00d6":11,"\u00d4":11,"\u00c5":22,"\u00c4":22,"\u00c1":22,"u":7,"s":13,"p":6,"o":15,"e":15,"c":15,"a":18,"S":9,"Q":11,"O":11,"J":31,"G":6,"C":11,"A":22,"9":11,"8":11,"6":11,"0":11,"\/":28,".":26,"-":22,",":26}},"X":{"d":"3,0r55,-140r-50,-128r36,0r34,89r32,-89r33,0r-49,125r57,143r-37,0r-39,-104r-37,104r-35,0","k":{"\u2014":20,"\u2013":20,"\u00f6":9,"\u00f4":9,"\u00e9":9,"\u00dc":4,"\u00db":4,"\u00d6":9,"\u00d4":9,"o":9,"e":9,"c":9,"U":4,"Q":9,"O":9,"C":9,"9":9,"8":9,"6":9,"0":9,"-":20}},"Y":{"d":"70,-150r34,-118r30,0r-47,155r0,113r-36,0r0,-113r-48,-155r35,0","w":137,"k":{"\u2014":22,"\u2013":22,"\u00fc":7,"\u00fb":7,"\u00f6":15,"\u00f4":15,"\u00e9":15,"\u00e5":18,"\u00e4":18,"\u00e1":18,"\u00d6":11,"\u00d4":11,"\u00c5":22,"\u00c4":22,"\u00c1":22,"u":7,"s":13,"p":6,"o":15,"e":15,"c":15,"a":18,"S":9,"Q":11,"O":11,"J":31,"G":6,"C":11,"A":22,"9":11,"8":11,"6":11,"0":11,"\/":28,".":26,"-":22,",":26}},"Z":{"d":"17,-268r100,0r0,23r-76,217r80,0r0,28r-116,0r0,-24r76,-216r-64,0r0,-28","w":126,"k":{"\u2014":35,"\u2013":35,"\u00f6":7,"\u00f4":7,"\u00e9":7,"o":7,"e":7,"c":7,"-":35}},"[":{"d":"11,-296r84,0r0,22r-56,0r0,306r56,0r0,23r-84,0r0,-351","w":106},"\\":{"d":"89,0r-22,0r-66,-268r22,0","w":90},"]":{"d":"95,55r-84,0r0,-22r56,0r0,-307r-56,0r0,-22r84,0r0,351","w":106},"^":{"d":"87,-227r-48,107r-28,0r68,-148r16,0r70,148r-31,0","w":174},"_":{"d":"153,45r-152,0r0,-20r152,0r0,20"},"`":{"d":"21,-277r59,46r-12,13r-65,-38","w":97},"a":{"d":"15,-140v2,-38,13,-59,54,-59v80,0,59,89,59,161v0,12,5,15,13,16r-3,22v-21,1,-33,-7,-36,-22v-10,16,-22,27,-49,26v-31,-1,-43,-21,-44,-53v-3,-59,29,-70,86,-69v-1,-26,4,-55,-26,-53v-22,2,-22,12,-25,34xm62,-21v35,0,34,-40,33,-77v-37,1,-53,7,-53,47v0,18,4,29,20,30","w":142,"k":{"y":9,"w":9,"v":9}},"b":{"d":"38,-25v-2,7,-2,21,-6,25r-18,0r0,-284r35,-6r0,117v10,-15,24,-26,48,-26v47,0,41,55,41,103v0,51,-1,101,-53,100v-27,0,-37,-12,-47,-29xm104,-62v0,-41,15,-110,-22,-110v-18,0,-30,13,-35,27v5,45,-17,120,30,122v22,0,27,-18,27,-39","w":148,"k":{"y":4,"w":4,"v":4,"\/":7,".":6,",":6}},"c":{"d":"11,-98v0,-69,22,-117,90,-97v22,7,28,29,28,60r-27,5v-4,-26,-2,-42,-26,-42v-44,0,-31,63,-31,106v0,24,5,42,28,43v26,1,27,-23,30,-46r27,3v0,42,-13,70,-57,70v-58,0,-62,-45,-62,-102","w":139,"k":{"y":11,"x":9,"w":11,"v":11,"\/":9,".":9,",":9}},"d":{"d":"66,-199v21,0,33,12,40,24r0,-109r33,-6r0,290r-28,0r-3,-28v-8,18,-20,32,-45,32v-50,0,-53,-46,-52,-96v0,-56,0,-107,55,-107xm106,-149v-5,-13,-17,-22,-33,-22v-42,0,-25,65,-27,109v-1,22,3,39,24,39v52,0,32,-76,36,-126","w":153},"e":{"d":"11,-97v0,-58,6,-102,64,-102v58,0,64,46,63,103r-95,0v1,35,0,73,35,73v26,1,29,-16,32,-39r28,4v-4,38,-19,62,-62,62v-58,0,-65,-44,-65,-101xm106,-117v16,-55,-54,-84,-61,-23v-1,7,-1,14,-1,23r62,0","w":147,"k":{"y":11,"x":9,"w":11,"v":11,"\/":9,".":9,",":9}},"f":{"d":"66,-262v-28,0,-16,38,-19,67r41,0r-3,24r-38,0r0,171r-34,0r0,-171r-15,0r3,-24r12,0v0,-48,-3,-97,46,-94v14,0,25,5,31,12r-6,24v-5,-6,-11,-9,-18,-9","w":89,"k":{"\u00f6":9,"\u00f4":9,"\u00e9":9,"t":-9,"q":6,"o":9,"g":7,"f":-9,"e":9,"c":9,"\/":11,".":15,",":15}},"g":{"d":"105,-185v34,29,22,128,-42,112v-14,6,-11,37,8,35v43,-4,62,15,63,54v1,56,-31,65,-87,63v-29,-1,-46,-18,-46,-45v0,-32,11,-44,40,-48v-28,-5,-28,-62,1,-67v-43,-21,-39,-123,27,-114v9,-1,15,1,21,3v4,-15,10,-28,19,-37r21,11v-11,6,-19,21,-25,33xm75,-6v-26,-1,-44,4,-44,30v0,25,17,31,42,31v25,-1,35,-8,35,-33v0,-24,-9,-28,-33,-28xm47,-135v0,26,1,41,22,41v22,0,23,-16,23,-41v0,-25,-1,-40,-23,-40v-22,0,-22,15,-22,40","w":135,"k":{"\u00e5":7,"\u00e4":7,"\u00e1":7,"g":-9,"a":7}},"h":{"d":"48,-170v17,-41,93,-40,93,23r0,147r-34,0r0,-148v0,-14,-9,-23,-23,-23v-21,1,-27,13,-36,30r0,141r-34,0r0,-284r34,-6r0,120","w":155,"k":{"y":6,"w":6,"v":6}},"i":{"d":"48,0r-34,0r0,-195r34,0r0,195xm48,-235r-34,0r0,-47r34,0r0,47","w":62},"j":{"d":"53,-235r-34,0r0,-47r34,0r0,47xm-18,43v28,24,37,-5,37,-39r0,-199r34,0r0,208v8,54,-37,85,-77,54","w":67},"k":{"d":"75,-107r-27,35r0,72r-34,0r0,-284r34,-6r0,178r48,-83r39,0r-39,56r44,139r-40,0","w":141,"k":{"\u00f6":6,"\u00f4":6,"\u00e9":6,"\u00e5":7,"\u00e4":7,"\u00e1":7,"s":4,"o":6,"e":6,"d":4,"c":6,"a":7}},"l":{"d":"14,0r0,-284r34,-6r0,290r-34,0","w":62},"m":{"d":"46,-167v10,-39,78,-43,84,-1v11,-17,18,-31,42,-31v32,0,43,21,43,52r0,147r-33,0r0,-143v-1,-17,-5,-29,-22,-28v-17,1,-19,12,-28,28r0,143r-33,0r0,-148v0,-15,-8,-23,-22,-23v-51,11,-21,114,-29,171r-34,0r0,-195r29,0v0,8,4,19,3,28","w":229,"k":{"y":4,"w":4,"v":4}},"n":{"d":"84,-171v-21,1,-27,13,-36,30r0,141r-34,0r0,-195r29,0v1,9,3,17,3,28v11,-18,25,-32,52,-32v31,0,43,21,43,52r0,147r-34,0r0,-148v0,-14,-9,-23,-23,-23","w":155,"k":{"y":4,"w":4,"v":4}},"o":{"d":"11,-97v0,-59,7,-102,66,-102v59,0,67,43,67,102v0,58,-7,101,-67,101v-60,0,-66,-43,-66,-101xm109,-64v0,-46,14,-107,-32,-107v-46,0,-32,61,-32,107v0,24,6,41,32,41v26,0,32,-17,32,-41","k":{"y":11,"x":9,"w":11,"v":11,"\/":9,".":9,",":9}},"p":{"d":"88,3v-19,-1,-34,-10,-40,-24r0,100r-34,0r0,-274r29,0v1,9,2,19,2,28v8,-17,21,-32,46,-32v50,-1,52,46,52,95v0,54,1,108,-55,107xm48,-46v3,10,17,23,32,22v41,-3,28,-65,28,-109v0,-21,-3,-39,-24,-39v-53,0,-32,76,-36,126","w":152,"k":{"x":9,"\/":9,".":4,",":4}},"q":{"d":"111,-170v0,-8,2,-19,5,-25r18,0r0,274r-35,0r0,-101v-8,15,-24,25,-48,25v-47,-1,-41,-55,-41,-102v0,-51,1,-101,53,-100v27,0,38,12,48,29xm43,-98v0,34,-7,75,24,75v17,0,29,-13,35,-27r0,-99v-5,-13,-15,-23,-30,-23v-34,0,-29,38,-29,74","w":148},"r":{"d":"96,-162v-73,-4,-41,98,-48,162r-34,0r0,-195r27,0v2,10,3,21,3,32v9,-18,28,-33,55,-32","w":100,"k":{"\u2014":11,"\u2013":11,"\u00f6":4,"\u00f4":4,"\u00e9":4,"y":-6,"w":-6,"v":-6,"t":-7,"o":4,"e":4,"c":4,"\/":15,".":22,"-":11,",":22}},"s":{"d":"14,-150v-7,-49,58,-62,90,-39v9,6,10,21,13,35r-27,5v-2,-16,-6,-23,-22,-23v-32,0,-25,44,-2,54v27,11,53,24,53,65v0,58,-65,73,-98,44v-10,-8,-13,-25,-13,-47r29,-4v0,20,4,38,24,38v22,1,28,-8,28,-28v-2,-54,-81,-37,-75,-100","w":128,"k":{"y":9,"w":9,"v":9,"\/":2,".":7,",":7}},"t":{"d":"99,-22v-14,35,-85,33,-85,-24r0,-125r-14,0r2,-24r12,0r0,-50r34,-6r0,56r49,0r-3,24r-46,0r0,121v-2,28,31,30,37,7","w":98,"k":{"t":-9,"f":-11}},"u":{"d":"69,-24v61,-5,27,-112,35,-171r34,0r0,195r-29,0r-3,-28v-9,19,-23,31,-49,31v-32,0,-42,-22,-43,-52r0,-146r34,0r0,148v-1,14,7,24,21,23","w":148},"v":{"d":"70,-53r29,-142r31,0r-48,195r-28,0r-51,-195r38,0","w":133,"k":{"\u00f6":9,"\u00f4":9,"\u00e9":9,"\u00e5":11,"\u00e4":11,"\u00e1":11,"s":9,"o":9,"e":9,"d":9,"c":9,"a":11,"\/":20,".":22,",":22}},"w":{"d":"81,-195r31,0r22,140r21,-140r31,0r-39,195r-27,0r-24,-144r-24,144r-31,0r-38,-195r35,0r21,140","w":189,"k":{"\u00f6":9,"\u00f4":9,"\u00e9":9,"\u00e5":11,"\u00e4":11,"\u00e1":11,"s":9,"o":9,"e":9,"d":9,"c":9,"a":11,"\/":20,".":22,",":22}},"x":{"d":"33,0r-30,0r42,-104r-36,-91r30,0r23,58r22,-58r28,0r-36,88r44,107r-32,0r-29,-74","w":123,"k":{"\u00f6":11,"\u00f4":11,"\u00e9":11,"\u00e5":7,"\u00e4":7,"\u00e1":7,"s":6,"q":7,"o":11,"e":11,"c":11,"a":7}},"y":{"d":"12,44v25,12,36,-17,42,-45r-51,-194r37,0r31,142r27,-142r32,0r-58,235v-6,29,-41,50,-74,33","w":133,"k":{"\u00f6":9,"\u00f4":9,"\u00e9":9,"\u00e5":11,"\u00e4":11,"\u00e1":11,"s":9,"o":9,"e":9,"d":9,"c":9,"a":11,"\/":20,".":22,",":22}},"z":{"d":"15,-195r90,0r0,20r-66,150r73,0r0,25r-107,0r0,-21r64,-149r-54,0r0,-25","w":116},"{":{"d":"39,-183v-3,-64,-5,-126,72,-113r0,22v-88,-20,-5,131,-77,149v38,11,34,59,32,107v-1,38,7,55,45,50r0,23v-46,4,-69,-13,-72,-56v-3,-43,20,-117,-35,-110r0,-26v32,4,36,-14,35,-46","w":122},"|":{"d":"11,-295r25,0r0,361r-25,0r0,-361","w":46},"}":{"d":"87,-124v-71,-16,18,-162,-76,-150r0,-22v44,-3,69,10,72,50v4,42,-22,116,35,109r0,26v-87,-8,29,186,-107,166r0,-23v90,19,5,-132,76,-156","w":122},"~":{"d":"58,-118v-20,0,-33,17,-47,33r0,-33v10,-11,24,-24,46,-24v35,0,52,21,85,21v23,0,34,-16,50,-33r0,33v-13,14,-26,24,-51,24v-33,0,-51,-21,-83,-21","w":202},"\u00a9":{"d":"11,-134v0,-90,43,-138,130,-138v88,0,128,47,128,138v0,89,-43,139,-128,139v-86,0,-130,-49,-130,-139xm246,-134v0,-75,-34,-121,-105,-121v-71,0,-108,45,-108,121v0,75,35,121,108,121v72,0,105,-46,105,-121xm181,-155v-1,-26,-14,-39,-42,-38v-33,1,-45,27,-45,61v0,35,13,60,45,60v25,0,41,-13,42,-38r20,2v-2,35,-23,52,-62,52v-44,0,-66,-25,-66,-76v0,-67,63,-96,111,-66v11,7,16,22,17,41","w":279},"\u00bb":{"d":"4,-50r40,-55r-40,-55r9,-10r55,65r-55,64xm52,-50r40,-55r-40,-55r9,-10r55,65r-55,64","w":119},"\u00c1":{"d":"122,-324r-64,38r-13,-14r59,-45xm98,-64r-50,0r-11,64r-34,0r54,-268r37,0r54,268r-39,0xm51,-93r44,0r-22,-117","w":151,"k":{"\u201d":24,"\u201c":24,"\u2019":24,"\u2018":24,"\u2014":9,"\u2013":9,"\u00fc":9,"\u00fb":9,"\u00f6":6,"\u00f4":6,"\u00e9":6,"\u00e5":4,"\u00e4":4,"\u00e1":4,"\u00dc":9,"\u00db":9,"\u00d6":9,"\u00d4":9,"y":18,"w":18,"v":18,"u":9,"q":4,"o":6,"e":6,"d":7,"c":6,"a":4,"Y":22,"W":22,"V":22,"U":9,"T":26,"S":4,"Q":9,"O":9,"G":9,"C":9,"9":9,"8":9,"6":9,"0":9,"-":9,"'":24,"\"":24}},"\u00c4":{"d":"61,-293r-30,0r0,-44r30,0r0,44xm120,-293r-30,0r0,-44r30,0r0,44xm98,-64r-50,0r-11,64r-34,0r54,-268r37,0r54,268r-39,0xm51,-93r44,0r-22,-117","w":151,"k":{"\u201d":24,"\u201c":24,"\u2019":24,"\u2018":24,"\u2014":9,"\u2013":9,"\u00fc":9,"\u00fb":9,"\u00f6":6,"\u00f4":6,"\u00e9":6,"\u00e5":4,"\u00e4":4,"\u00e1":4,"\u00dc":9,"\u00db":9,"\u00d6":9,"\u00d4":9,"y":18,"w":18,"v":18,"u":9,"q":4,"o":6,"e":6,"d":7,"c":6,"a":4,"Y":22,"W":22,"V":22,"U":9,"T":26,"S":4,"Q":9,"O":9,"G":9,"C":9,"9":9,"8":9,"6":9,"0":9,"-":9,"'":24,"\"":24}},"\u00c5":{"d":"111,-304v0,21,-11,31,-35,31v-24,0,-36,-10,-36,-31v0,-20,12,-31,36,-31v24,0,35,11,35,31xm97,-304v0,-12,-7,-19,-21,-19v-14,0,-22,7,-22,19v0,12,8,18,22,18v14,0,21,-6,21,-18xm98,-64r-50,0r-11,64r-34,0r54,-268r37,0r54,268r-39,0xm51,-93r44,0r-22,-117","w":151,"k":{"\u201d":24,"\u201c":24,"\u2019":24,"\u2018":24,"\u2014":9,"\u2013":9,"\u00fc":9,"\u00fb":9,"\u00f6":6,"\u00f4":6,"\u00e9":6,"\u00e5":4,"\u00e4":4,"\u00e1":4,"\u00dc":9,"\u00db":9,"\u00d6":9,"\u00d4":9,"y":18,"w":18,"v":18,"u":9,"q":4,"o":6,"e":6,"d":7,"c":6,"a":4,"Y":22,"W":22,"V":22,"U":9,"T":26,"S":4,"Q":9,"O":9,"G":9,"C":9,"9":9,"8":9,"6":9,"0":9,"-":9,"'":24,"\"":24}},"\u00c9":{"d":"109,-324r-64,38r-12,-14r58,-45xm117,-268r0,28r-67,0r0,84r57,0r-3,29r-54,0r0,100r69,0r0,27r-105,0r0,-268r103,0","w":127},"\u00cd":{"d":"79,-324r-64,38r-12,-14r58,-45xm50,-268r0,268r-36,0r0,-268r36,0","w":64},"\u00d1":{"d":"138,-335v-6,45,-55,29,-82,16v-9,1,-11,10,-14,19r-20,-9v4,-18,14,-29,32,-30v26,0,55,39,63,-3xm14,-268r37,0r65,186r0,-186r31,0r0,268r-37,0r-66,-185r0,185r-30,0r0,-268","w":160},"\u00d4":{"d":"45,-305r28,-45r23,0r28,46r-19,9r-21,-38r-21,39xm11,-134v0,-75,-1,-139,75,-139v75,0,72,64,72,139v0,76,3,139,-72,139v-76,0,-75,-64,-75,-139xm120,-83v0,-62,20,-155,-34,-162v-46,4,-38,60,-38,111v0,50,-9,110,38,110v30,0,34,-27,34,-59","w":169,"k":{"\u00c5":9,"\u00c4":9,"\u00c1":9,"Y":9,"X":9,"W":9,"V":9,"T":7,"A":9,"\/":15,".":6,",":6}},"\u00d6":{"d":"70,-293r-30,0r0,-44r30,0r0,44xm129,-293r-30,0r0,-44r30,0r0,44xm11,-134v0,-75,-1,-139,75,-139v75,0,72,64,72,139v0,76,3,139,-72,139v-76,0,-75,-64,-75,-139xm120,-83v0,-62,20,-155,-34,-162v-46,4,-38,60,-38,111v0,50,-9,110,38,110v30,0,34,-27,34,-59","w":169,"k":{"\u00c5":9,"\u00c4":9,"\u00c1":9,"Y":9,"X":9,"W":9,"V":9,"T":7,"A":9,"\/":15,".":6,",":6}},"\u00d7":{"d":"63,-134r-52,-52r16,-16r51,53r53,-53r16,16r-52,52r52,52r-16,16r-53,-52r-51,52r-16,-16","w":157},"\u00db":{"d":"39,-305r27,-45r23,0r28,46r-19,9r-21,-38r-21,39xm78,5v-51,0,-64,-30,-64,-82r0,-191r35,0r1,199v2,23,3,46,28,45v36,-2,29,-45,29,-83r0,-161r36,0r0,191v0,51,-12,82,-65,82","w":156,"k":{"\u00c5":9,"\u00c4":9,"\u00c1":9,"X":4,"A":9,"\/":13,".":4,",":4}},"\u00dc":{"d":"63,-293r-29,0r0,-44r29,0r0,44xm122,-293r-29,0r0,-44r29,0r0,44xm78,5v-51,0,-64,-30,-64,-82r0,-191r35,0r1,199v2,23,3,46,28,45v36,-2,29,-45,29,-83r0,-161r36,0r0,191v0,51,-12,82,-65,82","w":156,"k":{"\u00c5":9,"\u00c4":9,"\u00c1":9,"X":4,"A":9,"\/":13,".":4,",":4}},"\u00e1":{"d":"117,-251r-64,38r-12,-14r58,-45xm15,-140v2,-38,13,-59,54,-59v80,0,59,89,59,161v0,12,5,15,13,16r-3,22v-21,1,-33,-7,-36,-22v-10,16,-22,27,-49,26v-31,-1,-43,-21,-44,-53v-3,-59,29,-70,86,-69v-1,-26,4,-55,-26,-53v-22,2,-22,12,-25,34xm62,-21v35,0,34,-40,33,-77v-37,1,-53,7,-53,47v0,18,4,29,20,30","w":142,"k":{"y":9,"w":9,"v":9}},"\u00e4":{"d":"57,-221r-30,0r0,-43r30,0r0,43xm115,-221r-29,0r0,-43r29,0r0,43xm15,-140v2,-38,13,-59,54,-59v80,0,59,89,59,161v0,12,5,15,13,16r-3,22v-21,1,-33,-7,-36,-22v-10,16,-22,27,-49,26v-31,-1,-43,-21,-44,-53v-3,-59,29,-70,86,-69v-1,-26,4,-55,-26,-53v-22,2,-22,12,-25,34xm62,-21v35,0,34,-40,33,-77v-37,1,-53,7,-53,47v0,18,4,29,20,30","w":142,"k":{"y":9,"w":9,"v":9}},"\u00e5":{"d":"107,-240v0,21,-12,30,-36,30v-24,0,-36,-9,-36,-30v0,-20,12,-31,36,-31v24,0,36,11,36,31xm93,-240v0,-12,-8,-19,-22,-19v-14,0,-21,7,-21,19v0,12,7,18,21,18v14,0,22,-6,22,-18xm15,-140v2,-38,13,-59,54,-59v80,0,59,89,59,161v0,12,5,15,13,16r-3,22v-21,1,-33,-7,-36,-22v-10,16,-22,27,-49,26v-31,-1,-43,-21,-44,-53v-3,-59,29,-70,86,-69v-1,-26,4,-55,-26,-53v-22,2,-22,12,-25,34xm62,-21v35,0,34,-40,33,-77v-37,1,-53,7,-53,47v0,18,4,29,20,30","w":142,"k":{"y":9,"w":9,"v":9}},"\u00e9":{"d":"120,-251r-64,38r-12,-14r58,-45xm11,-97v0,-58,6,-102,64,-102v58,0,64,46,63,103r-95,0v1,35,0,73,35,73v26,1,29,-16,32,-39r28,4v-4,38,-19,62,-62,62v-58,0,-65,-44,-65,-101xm106,-117v16,-55,-54,-84,-61,-23v-1,7,-1,14,-1,23r62,0","w":147,"k":{"y":11,"x":9,"w":11,"v":11,"\/":9,".":9,",":9}},"\u00ed":{"d":"49,0r-35,0r0,-195r35,0r0,195xm78,-251r-64,38r-12,-14r58,-45","w":63},"\u00f1":{"d":"102,-230v-23,0,-55,-33,-63,3r-20,-10v4,-37,48,-31,71,-15v13,9,21,1,24,-17r21,7v-4,20,-14,32,-33,32xm84,-171v-21,1,-27,13,-36,30r0,141r-34,0r0,-195r29,0v1,9,3,17,3,28v11,-18,25,-32,52,-32v31,0,43,21,43,52r0,147r-34,0r0,-148v0,-14,-9,-23,-23,-23","w":155,"k":{"y":4,"w":4,"v":4}},"\u00f4":{"d":"38,-232r27,-46r23,0r28,47r-18,9r-22,-38r-21,38xm11,-97v0,-59,7,-102,66,-102v59,0,67,43,67,102v0,58,-7,101,-67,101v-60,0,-66,-43,-66,-101xm109,-64v0,-46,14,-107,-32,-107v-46,0,-32,61,-32,107v0,24,6,41,32,41v26,0,32,-17,32,-41","k":{"y":11,"x":9,"w":11,"v":11,"\/":9,".":9,",":9}},"\u00f6":{"d":"63,-221r-30,0r0,-43r30,0r0,43xm121,-221r-29,0r0,-43r29,0r0,43xm11,-97v0,-59,7,-102,66,-102v59,0,67,43,67,102v0,58,-7,101,-67,101v-60,0,-66,-43,-66,-101xm109,-64v0,-46,14,-107,-32,-107v-46,0,-32,61,-32,107v0,24,6,41,32,41v26,0,32,-17,32,-41","k":{"y":11,"x":9,"w":11,"v":11,"\/":9,".":9,",":9}},"\u00fb":{"d":"35,-232r27,-46r23,0r28,47r-18,9r-22,-38r-21,38xm69,-24v61,-5,27,-112,35,-171r34,0r0,195r-29,0r-3,-28v-9,19,-23,31,-49,31v-32,0,-42,-22,-43,-52r0,-146r34,0r0,148v-1,14,7,24,21,23","w":148},"\u00fc":{"d":"59,-221r-29,0r0,-43r29,0r0,43xm118,-221r-29,0r0,-43r29,0r0,43xm69,-24v61,-5,27,-112,35,-171r34,0r0,195r-29,0r-3,-28v-9,19,-23,31,-49,31v-32,0,-42,-22,-43,-52r0,-146r34,0r0,148v-1,14,7,24,21,23","w":148},"\u2013":{"d":"4,-94r3,-23r132,0r-2,23r-133,0","w":142,"k":{"\u00c5":13,"\u00c4":13,"\u00c1":13,"Z":13,"Y":15,"X":22,"W":15,"V":15,"T":22,"S":11,"J":41,"A":13}},"\u2014":{"d":"4,-94r3,-23r207,0r-3,23r-207,0","w":217,"k":{"\u00c5":13,"\u00c4":13,"\u00c1":13,"Z":13,"Y":15,"X":22,"W":15,"V":15,"T":22,"S":11,"J":41,"A":13}},"\u2018":{"d":"6,-195v-1,-45,-2,-63,27,-91r9,8v-12,12,-18,25,-18,38r17,0r0,45r-35,0","w":47,"k":{"\u00c5":26,"\u00c4":26,"\u00c1":26,"t":-9,"T":-9,"J":28,"A":26}},"\u2019":{"d":"41,-282v2,42,-2,70,-27,90r-9,-7v12,-12,18,-26,18,-39r-17,0r0,-44r35,0","w":47,"k":{"\u00c5":26,"\u00c4":26,"\u00c1":26,"t":-9,"T":-9,"J":28,"A":26}},"\u201c":{"d":"7,-195v-1,-44,-2,-63,26,-91r9,8v-12,12,-18,25,-18,38r17,0r0,45r-34,0xm59,-195v-1,-45,-2,-63,27,-91r9,8v-12,12,-18,24,-18,38r17,0r0,45r-35,0","w":99,"k":{"\u00c5":26,"\u00c4":26,"\u00c1":26,"t":-9,"T":-9,"J":28,"A":26}},"\u201d":{"d":"93,-282v1,44,3,63,-26,90r-10,-7v12,-12,19,-26,19,-39r-17,0r0,-44r34,0xm41,-282v2,42,-2,70,-27,90r-9,-7v12,-12,18,-26,18,-39r-17,0r0,-44r35,0","w":99,"k":{"\u00c5":26,"\u00c4":26,"\u00c1":26,"t":-9,"T":-9,"J":28,"A":26}},"\u2026":{"d":"45,0r-34,0r0,-47r34,0r0,47xm154,0r-33,0r0,-47r33,0r0,47xm265,0r-34,0r0,-47r34,0r0,47","w":275},"\u2122":{"d":"72,-276r0,18r-20,0r0,99r-21,0r0,-99r-20,0r0,-18r61,0xm100,-237r0,78r-17,0r0,-117r26,0r22,92r22,-92r26,0r0,117r-19,0r0,-77r-20,77r-19,0","w":189},"\u00a0":{"w":76}}});


