/*
Script: Core.js
	MooTools - My Object Oriented JavaScript Tools.

License:
	MIT-style license.

Copyright:
	Copyright (c) 2006-2008 [Valerio Proietti](http://mad4milk.net/).

Code & Documentation:
	[The MooTools production team](http://mootools.net/developers/).

Inspiration:
	- Class implementation inspired by [Base.js](http://dean.edwards.name/weblog/2006/03/base/) Copyright (c) 2006 Dean Edwards, [GNU Lesser General Public License](http://opensource.org/licenses/lgpl-license.php)
	- Some functionality inspired by [Prototype.js](http://prototypejs.org) Copyright (c) 2005-2007 Sam Stephenson, [MIT License](http://opensource.org/licenses/mit-license.php)
*/

var MooTools = {
	'version': '1.2.3',
	'build': '4980aa0fb74d2f6eb80bcd9f5b8e1fd6fbb8f607'
};

var Native = function(options){
	options = options || {};
	var name = options.name;
	var legacy = options.legacy;
	var protect = options.protect;
	var methods = options.implement;
	var generics = options.generics;
	var initialize = options.initialize;
	var afterImplement = options.afterImplement || function(){};
	var object = initialize || legacy;
	generics = generics !== false;

	object.constructor = Native;
	object.$family = {name: 'native'};
	if (legacy && initialize) object.prototype = legacy.prototype;
	object.prototype.constructor = object;

	if (name){
		var family = name.toLowerCase();
		object.prototype.$family = {name: family};
		Native.typize(object, family);
	}

	var add = function(obj, name, method, force){
		if (!protect || force || !obj.prototype[name]) obj.prototype[name] = method;
		if (generics) Native.genericize(obj, name, protect);
		afterImplement.call(obj, name, method);
		return obj;
	};

	object.alias = function(a1, a2, a3){
		if (typeof a1 == 'string'){
			var pa1 = this.prototype[a1];
			if ((a1 = pa1)) return add(this, a2, a1, a3);
		}
		for (var a in a1) this.alias(a, a1[a], a2);
		return this;
	};

	object.implement = function(a1, a2, a3){
		if (typeof a1 == 'string') return add(this, a1, a2, a3);
		for (var p in a1) add(this, p, a1[p], a2);
		return this;
	};

	if (methods) object.implement(methods);

	return object;
};

Native.genericize = function(object, property, check){
	if ((!check || !object[property]) && typeof object.prototype[property] == 'function') object[property] = function(){
		var args = Array.prototype.slice.call(arguments);
		return object.prototype[property].apply(args.shift(), args);
	};
};

Native.implement = function(objects, properties){
	for (var i = 0, l = objects.length; i < l; i++) objects[i].implement(properties);
};

Native.typize = function(object, family){
	if (!object.type) object.type = function(item){
		return ($type(item) === family);
	};
};

(function(){
	var natives = {'Array': Array, 'Date': Date, 'Function': Function, 'Number': Number, 'RegExp': RegExp, 'String': String};
	for (var n in natives) new Native({name: n, initialize: natives[n], protect: true});

	var types = {'boolean': Boolean, 'native': Native, 'object': Object};
	for (var t in types) Native.typize(types[t], t);

	var generics = {
		'Array': ["concat", "indexOf", "join", "lastIndexOf", "pop", "push", "reverse", "shift", "slice", "sort", "splice", "toString", "unshift", "valueOf"],
		'String': ["charAt", "charCodeAt", "concat", "indexOf", "lastIndexOf", "match", "replace", "search", "slice", "split", "substr", "substring", "toLowerCase", "toUpperCase", "valueOf"]
	};
	for (var g in generics){
		for (var i = generics[g].length; i--;) Native.genericize(natives[g], generics[g][i], true);
	}
})();

var Hash = new Native({

	name: 'Hash',

	initialize: function(object){
		if ($type(object) == 'hash') object = $unlink(object.getClean());
		for (var key in object) this[key] = object[key];
		return this;
	}

});

Hash.implement({

	forEach: function(fn, bind){
		for (var key in this){
			if (this.hasOwnProperty(key)) fn.call(bind, this[key], key, this);
		}
	},

	getClean: function(){
		var clean = {};
		for (var key in this){
			if (this.hasOwnProperty(key)) clean[key] = this[key];
		}
		return clean;
	},

	getLength: function(){
		var length = 0;
		for (var key in this){
			if (this.hasOwnProperty(key)) length++;
		}
		return length;
	}

});

Hash.alias('forEach', 'each');

Array.implement({

	forEach: function(fn, bind){
		for (var i = 0, l = this.length; i < l; i++) fn.call(bind, this[i], i, this);
	}

});

Array.alias('forEach', 'each');

function $A(iterable){
	if (iterable.item){
		var l = iterable.length, array = new Array(l);
		while (l--) array[l] = iterable[l];
		return array;
	}
	return Array.prototype.slice.call(iterable);
};

function $arguments(i){
	return function(){
		return arguments[i];
	};
};

function $chk(obj){
	return !!(obj || obj === 0);
};

function $clear(timer){
	clearTimeout(timer);
	clearInterval(timer);
	return null;
};

function $defined(obj){
	return (obj != undefined);
};

function $each(iterable, fn, bind){
	var type = $type(iterable);
	((type == 'arguments' || type == 'collection' || type == 'array') ? Array : Hash).each(iterable, fn, bind);
};

function $empty(){};

function $extend(original, extended){
	for (var key in (extended || {})) original[key] = extended[key];
	return original;
};

function $H(object){
	return new Hash(object);
};

function $lambda(value){
	return ($type(value) == 'function') ? value : function(){
		return value;
	};
};

function $merge(){
	var args = Array.slice(arguments);
	args.unshift({});
	return $mixin.apply(null, args);
};

function $mixin(mix){
	for (var i = 1, l = arguments.length; i < l; i++){
		var object = arguments[i];
		if ($type(object) != 'object') continue;
		for (var key in object){
			var op = object[key], mp = mix[key];
			mix[key] = (mp && $type(op) == 'object' && $type(mp) == 'object') ? $mixin(mp, op) : $unlink(op);
		}
	}
	return mix;
};

function $pick(){
	for (var i = 0, l = arguments.length; i < l; i++){
		if (arguments[i] != undefined) return arguments[i];
	}
	return null;
};

function $random(min, max){
	return Math.floor(Math.random() * (max - min + 1) + min);
};

function $splat(obj){
	var type = $type(obj);
	return (type) ? ((type != 'array' && type != 'arguments') ? [obj] : obj) : [];
};

var $time = Date.now || function(){
	return +new Date;
};

function $try(){
	for (var i = 0, l = arguments.length; i < l; i++){
		try {
			return arguments[i]();
		} catch(e){}
	}
	return null;
};

function $type(obj){
	if (obj == undefined) return false;
	if (obj.$family) return (obj.$family.name == 'number' && !isFinite(obj)) ? false : obj.$family.name;
	if (obj.nodeName){
		switch (obj.nodeType){
			case 1: return 'element';
			case 3: return (/\S/).test(obj.nodeValue) ? 'textnode' : 'whitespace';
		}
	} else if (typeof obj.length == 'number'){
		if (obj.callee) return 'arguments';
		else if (obj.item) return 'collection';
	}
	return typeof obj;
};

function $unlink(object){
	var unlinked;
	switch ($type(object)){
		case 'object':
			unlinked = {};
			for (var p in object) unlinked[p] = $unlink(object[p]);
		break;
		case 'hash':
			unlinked = new Hash(object);
		break;
		case 'array':
			unlinked = [];
			for (var i = 0, l = object.length; i < l; i++) unlinked[i] = $unlink(object[i]);
		break;
		default: return object;
	}
	return unlinked;
};


/*
Script: Browser.js
	The Browser Core. Contains Browser initialization, Window and Document, and the Browser Hash.

License:
	MIT-style license.
*/

var Browser = $merge({

	Engine: {name: 'unknown', version: 0},

	Platform: {name: (window.orientation != undefined) ? 'ipod' : (navigator.platform.match(/mac|win|linux/i) || ['other'])[0].toLowerCase()},

	Features: {xpath: !!(document.evaluate), air: !!(window.runtime), query: !!(document.querySelector)},

	Plugins: {},

	Engines: {

		presto: function(){
			return (!window.opera) ? false : ((arguments.callee.caller) ? 960 : ((document.getElementsByClassName) ? 950 : 925));
		},

		trident: function(){
			return (!window.ActiveXObject) ? false : ((window.XMLHttpRequest) ? 5 : 4);
		},

		webkit: function(){
			return (navigator.taintEnabled) ? false : ((Browser.Features.xpath) ? ((Browser.Features.query) ? 525 : 420) : 419);
		},

		gecko: function(){
			return (document.getBoxObjectFor == undefined) ? false : ((document.getElementsByClassName) ? 19 : 18);
		}

	}

}, Browser || {});

Browser.Platform[Browser.Platform.name] = true;

Browser.detect = function(){

	for (var engine in this.Engines){
		var version = this.Engines[engine]();
		if (version){
			this.Engine = {name: engine, version: version};
			this.Engine[engine] = this.Engine[engine + version] = true;
			break;
		}
	}

	return {name: engine, version: version};

};

Browser.detect();

Browser.Request = function(){
	return $try(function(){
		return new XMLHttpRequest();
	}, function(){
		return new ActiveXObject('MSXML2.XMLHTTP');
	});
};

Browser.Features.xhr = !!(Browser.Request());

Browser.Plugins.Flash = (function(){
	var version = ($try(function(){
		return navigator.plugins['Shockwave Flash'].description;
	}, function(){
		return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');
	}) || '0 r0').match(/\d+/g);
	return {version: parseInt(version[0] || 0 + '.' + version[1], 10) || 0, build: parseInt(version[2], 10) || 0};
})();

function $exec(text){
	if (!text) return text;
	if (window.execScript){
		window.execScript(text);
	} else {
		var script = document.createElement('script');
		script.setAttribute('type', 'text/javascript');
		script[(Browser.Engine.webkit && Browser.Engine.version < 420) ? 'innerText' : 'text'] = text;
		document.head.appendChild(script);
		document.head.removeChild(script);
	}
	return text;
};

Native.UID = 1;

var $uid = (Browser.Engine.trident) ? function(item){
	return (item.uid || (item.uid = [Native.UID++]))[0];
} : function(item){
	return item.uid || (item.uid = Native.UID++);
};

var Window = new Native({

	name: 'Window',

	legacy: (Browser.Engine.trident) ? null: window.Window,

	initialize: function(win){
		$uid(win);
		if (!win.Element){
			win.Element = $empty;
			if (Browser.Engine.webkit) win.document.createElement("iframe"); //fixes safari 2
			win.Element.prototype = (Browser.Engine.webkit) ? window["[[DOMElement.prototype]]"] : {};
		}
		win.document.window = win;
		return $extend(win, Window.Prototype);
	},

	afterImplement: function(property, value){
		window[property] = Window.Prototype[property] = value;
	}

});

Window.Prototype = {$family: {name: 'window'}};

new Window(window);

var Document = new Native({

	name: 'Document',

	legacy: (Browser.Engine.trident) ? null: window.Document,

	initialize: function(doc){
		$uid(doc);
		doc.head = doc.getElementsByTagName('head')[0];
		doc.html = doc.getElementsByTagName('html')[0];
		if (Browser.Engine.trident && Browser.Engine.version <= 4) $try(function(){
			doc.execCommand("BackgroundImageCache", false, true);
		});
		if (Browser.Engine.trident) doc.window.attachEvent('onunload', function() {
			doc.window.detachEvent('onunload', arguments.callee);
			doc.head = doc.html = doc.window = null;
		});
		return $extend(doc, Document.Prototype);
	},

	afterImplement: function(property, value){
		document[property] = Document.Prototype[property] = value;
	}

});

Document.Prototype = {$family: {name: 'document'}};

new Document(document);


/*
Script: Array.js
	Contains Array Prototypes like each, contains, and erase.

License:
	MIT-style license.
*/

Array.implement({

	every: function(fn, bind){
		for (var i = 0, l = this.length; i < l; i++){
			if (!fn.call(bind, this[i], i, this)) return false;
		}
		return true;
	},

	filter: function(fn, bind){
		var results = [];
		for (var i = 0, l = this.length; i < l; i++){
			if (fn.call(bind, this[i], i, this)) results.push(this[i]);
		}
		return results;
	},

	clean: function() {
		return this.filter($defined);
	},

	indexOf: function(item, from){
		var len = this.length;
		for (var i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++){
			if (this[i] === item) return i;
		}
		return -1;
	},

	map: function(fn, bind){
		var results = [];
		for (var i = 0, l = this.length; i < l; i++) results[i] = fn.call(bind, this[i], i, this);
		return results;
	},

	some: function(fn, bind){
		for (var i = 0, l = this.length; i < l; i++){
			if (fn.call(bind, this[i], i, this)) return true;
		}
		return false;
	},

	associate: function(keys){
		var obj = {}, length = Math.min(this.length, keys.length);
		for (var i = 0; i < length; i++) obj[keys[i]] = this[i];
		return obj;
	},

	link: function(object){
		var result = {};
		for (var i = 0, l = this.length; i < l; i++){
			for (var key in object){
				if (object[key](this[i])){
					result[key] = this[i];
					delete object[key];
					break;
				}
			}
		}
		return result;
	},

	contains: function(item, from){
		return this.indexOf(item, from) != -1;
	},

	extend: function(array){
		for (var i = 0, j = array.length; i < j; i++) this.push(array[i]);
		return this;
	},

	getLast: function(){
		return (this.length) ? this[this.length - 1] : null;
	},

	getRandom: function(){
		return (this.length) ? this[$random(0, this.length - 1)] : null;
	},

	include: function(item){
		if (!this.contains(item)) this.push(item);
		return this;
	},

	combine: function(array){
		for (var i = 0, l = array.length; i < l; i++) this.include(array[i]);
		return this;
	},

	erase: function(item){
		for (var i = this.length; i--; i){
			if (this[i] === item) this.splice(i, 1);
		}
		return this;
	},

	empty: function(){
		this.length = 0;
		return this;
	},

	flatten: function(){
		var array = [];
		for (var i = 0, l = this.length; i < l; i++){
			var type = $type(this[i]);
			if (!type) continue;
			array = array.concat((type == 'array' || type == 'collection' || type == 'arguments') ? Array.flatten(this[i]) : this[i]);
		}
		return array;
	},

	hexToRgb: function(array){
		if (this.length != 3) return null;
		var rgb = this.map(function(value){
			if (value.length == 1) value += value;
			return value.toInt(16);
		});
		return (array) ? rgb : 'rgb(' + rgb + ')';
	},

	rgbToHex: function(array){
		if (this.length < 3) return null;
		if (this.length == 4 && this[3] == 0 && !array) return 'transparent';
		var hex = [];
		for (var i = 0; i < 3; i++){
			var bit = (this[i] - 0).toString(16);
			hex.push((bit.length == 1) ? '0' + bit : bit);
		}
		return (array) ? hex : '#' + hex.join('');
	}

});


/*
Script: Function.js
	Contains Function Prototypes like create, bind, pass, and delay.

License:
	MIT-style license.
*/

Function.implement({

	extend: function(properties){
		for (var property in properties) this[property] = properties[property];
		return this;
	},

	create: function(options){
		var self = this;
		options = options || {};
		return function(event){
			var args = options.arguments;
			args = (args != undefined) ? $splat(args) : Array.slice(arguments, (options.event) ? 1 : 0);
			if (options.event) args = [event || window.event].extend(args);
			var returns = function(){
				return self.apply(options.bind || null, args);
			};
			if (options.delay) return setTimeout(returns, options.delay);
			if (options.periodical) return setInterval(returns, options.periodical);
			if (options.attempt) return $try(returns);
			return returns();
		};
	},

	run: function(args, bind){
		return this.apply(bind, $splat(args));
	},

	pass: function(args, bind){
		return this.create({bind: bind, arguments: args});
	},

	bind: function(bind, args){
		return this.create({bind: bind, arguments: args});
	},

	bindWithEvent: function(bind, args){
		return this.create({bind: bind, arguments: args, event: true});
	},

	attempt: function(args, bind){
		return this.create({bind: bind, arguments: args, attempt: true})();
	},

	delay: function(delay, bind, args){
		return this.create({bind: bind, arguments: args, delay: delay})();
	},

	periodical: function(periodical, bind, args){
		return this.create({bind: bind, arguments: args, periodical: periodical})();
	}

});


/*
Script: Number.js
	Contains Number Prototypes like limit, round, times, and ceil.

License:
	MIT-style license.
*/

Number.implement({

	limit: function(min, max){
		return Math.min(max, Math.max(min, this));
	},

	round: function(precision){
		precision = Math.pow(10, precision || 0);
		return Math.round(this * precision) / precision;
	},

	times: function(fn, bind){
		for (var i = 0; i < this; i++) fn.call(bind, i, this);
	},

	toFloat: function(){
		return parseFloat(this);
	},

	toInt: function(base){
		return parseInt(this, base || 10);
	}

});

Number.alias('times', 'each');

(function(math){
	var methods = {};
	math.each(function(name){
		if (!Number[name]) methods[name] = function(){
			return Math[name].apply(null, [this].concat($A(arguments)));
		};
	});
	Number.implement(methods);
})(['abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'exp', 'floor', 'log', 'max', 'min', 'pow', 'sin', 'sqrt', 'tan']);


/*
Script: String.js
	Contains String Prototypes like camelCase, capitalize, test, and toInt.

License:
	MIT-style license.
*/

String.implement({

	test: function(regex, params){
		return ((typeof regex == 'string') ? new RegExp(regex, params) : regex).test(this);
	},

	contains: function(string, separator){
		return (separator) ? (separator + this + separator).indexOf(separator + string + separator) > -1 : this.indexOf(string) > -1;
	},

	trim: function(){
		return this.replace(/^\s+|\s+$/g, '');
	},

	clean: function(){
		return this.replace(/\s+/g, ' ').trim();
	},

	camelCase: function(){
		return this.replace(/-\D/g, function(match){
			return match.charAt(1).toUpperCase();
		});
	},

	hyphenate: function(){
		return this.replace(/[A-Z]/g, function(match){
			return ('-' + match.charAt(0).toLowerCase());
		});
	},

	capitalize: function(){
		return this.replace(/\b[a-z]/g, function(match){
			return match.toUpperCase();
		});
	},

	escapeRegExp: function(){
		return this.replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1');
	},

	toInt: function(base){
		return parseInt(this, base || 10);
	},

	toFloat: function(){
		return parseFloat(this);
	},

	hexToRgb: function(array){
		var hex = this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
		return (hex) ? hex.slice(1).hexToRgb(array) : null;
	},

	rgbToHex: function(array){
		var rgb = this.match(/\d{1,3}/g);
		return (rgb) ? rgb.rgbToHex(array) : null;
	},

	stripScripts: function(option){
		var scripts = '';
		var text = this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function(){
			scripts += arguments[1] + '\n';
			return '';
		});
		if (option === true) $exec(scripts);
		else if ($type(option) == 'function') option(scripts, text);
		return text;
	},

	substitute: function(object, regexp){
		return this.replace(regexp || (/\\?\{([^{}]+)\}/g), function(match, name){
			if (match.charAt(0) == '\\') return match.slice(1);
			return (object[name] != undefined) ? object[name] : '';
		});
	}

});


/*
Script: Hash.js
	Contains Hash Prototypes. Provides a means for overcoming the JavaScript practical impossibility of extending native Objects.

License:
	MIT-style license.
*/

Hash.implement({

	has: Object.prototype.hasOwnProperty,

	keyOf: function(value){
		for (var key in this){
			if (this.hasOwnProperty(key) && this[key] === value) return key;
		}
		return null;
	},

	hasValue: function(value){
		return (Hash.keyOf(this, value) !== null);
	},

	extend: function(properties){
		Hash.each(properties || {}, function(value, key){
			Hash.set(this, key, value);
		}, this);
		return this;
	},

	combine: function(properties){
		Hash.each(properties || {}, function(value, key){
			Hash.include(this, key, value);
		}, this);
		return this;
	},

	erase: function(key){
		if (this.hasOwnProperty(key)) delete this[key];
		return this;
	},

	get: function(key){
		return (this.hasOwnProperty(key)) ? this[key] : null;
	},

	set: function(key, value){
		if (!this[key] || this.hasOwnProperty(key)) this[key] = value;
		return this;
	},

	empty: function(){
		Hash.each(this, function(value, key){
			delete this[key];
		}, this);
		return this;
	},

	include: function(key, value){
		if (this[key] == undefined) this[key] = value;
		return this;
	},

	map: function(fn, bind){
		var results = new Hash;
		Hash.each(this, function(value, key){
			results.set(key, fn.call(bind, value, key, this));
		}, this);
		return results;
	},

	filter: function(fn, bind){
		var results = new Hash;
		Hash.each(this, function(value, key){
			if (fn.call(bind, value, key, this)) results.set(key, value);
		}, this);
		return results;
	},

	every: function(fn, bind){
		for (var key in this){
			if (this.hasOwnProperty(key) && !fn.call(bind, this[key], key)) return false;
		}
		return true;
	},

	some: function(fn, bind){
		for (var key in this){
			if (this.hasOwnProperty(key) && fn.call(bind, this[key], key)) return true;
		}
		return false;
	},

	getKeys: function(){
		var keys = [];
		Hash.each(this, function(value, key){
			keys.push(key);
		});
		return keys;
	},

	getValues: function(){
		var values = [];
		Hash.each(this, function(value){
			values.push(value);
		});
		return values;
	},

	toQueryString: function(base){
		var queryString = [];
		Hash.each(this, function(value, key){
			if (base) key = base + '[' + key + ']';
			var result;
			switch ($type(value)){
				case 'object': result = Hash.toQueryString(value, key); break;
				case 'array':
					var qs = {};
					value.each(function(val, i){
						qs[i] = val;
					});
					result = Hash.toQueryString(qs, key);
				break;
				default: result = key + '=' + encodeURIComponent(value);
			}
			if (value != undefined) queryString.push(result);
		});

		return queryString.join('&');
	}

});

Hash.alias({keyOf: 'indexOf', hasValue: 'contains'});


/*
Script: Event.js
	Contains the Event Native, to make the event object completely crossbrowser.

License:
	MIT-style license.
*/

var Event = new Native({

	name: 'Event',

	initialize: function(event, win){
		win = win || window;
		var doc = win.document;
		event = event || win.event;
		if (event.$extended) return event;
		this.$extended = true;
		var type = event.type;
		var target = event.target || event.srcElement;
		while (target && target.nodeType == 3) target = target.parentNode;

		if (type.test(/key/)){
			var code = event.which || event.keyCode;
			var key = Event.Keys.keyOf(code);
			if (type == 'keydown'){
				var fKey = code - 111;
				if (fKey > 0 && fKey < 13) key = 'f' + fKey;
			}
			key = key || String.fromCharCode(code).toLowerCase();
		} else if (type.match(/(click|mouse|menu)/i)){
			doc = (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
			var page = {
				x: event.pageX || event.clientX + doc.scrollLeft,
				y: event.pageY || event.clientY + doc.scrollTop
			};
			var client = {
				x: (event.pageX) ? event.pageX - win.pageXOffset : event.clientX,
				y: (event.pageY) ? event.pageY - win.pageYOffset : event.clientY
			};
			if (type.match(/DOMMouseScroll|mousewheel/)){
				var wheel = (event.wheelDelta) ? event.wheelDelta / 120 : -(event.detail || 0) / 3;
			}
			var rightClick = (event.which == 3) || (event.button == 2);
			var related = null;
			if (type.match(/over|out/)){
				switch (type){
					case 'mouseover': related = event.relatedTarget || event.fromElement; break;
					case 'mouseout': related = event.relatedTarget || event.toElement;
				}
				if (!(function(){
					while (related && related.nodeType == 3) related = related.parentNode;
					return true;
				}).create({attempt: Browser.Engine.gecko})()) related = false;
			}
		}

		return $extend(this, {
			event: event,
			type: type,

			page: page,
			client: client,
			rightClick: rightClick,

			wheel: wheel,

			relatedTarget: related,
			target: target,

			code: code,
			key: key,

			shift: event.shiftKey,
			control: event.ctrlKey,
			alt: event.altKey,
			meta: event.metaKey
		});
	}

});

Event.Keys = new Hash({
	'enter': 13,
	'up': 38,
	'down': 40,
	'left': 37,
	'right': 39,
	'esc': 27,
	'space': 32,
	'backspace': 8,
	'tab': 9,
	'delete': 46
});

Event.implement({

	stop: function(){
		return this.stopPropagation().preventDefault();
	},

	stopPropagation: function(){
		if (this.event.stopPropagation) this.event.stopPropagation();
		else this.event.cancelBubble = true;
		return this;
	},

	preventDefault: function(){
		if (this.event.preventDefault) this.event.preventDefault();
		else this.event.returnValue = false;
		return this;
	}

});


/*
Script: Class.js
	Contains the Class Function for easily creating, extending, and implementing reusable Classes.

License:
	MIT-style license.
*/

function Class(params){

	if (params instanceof Function) params = {initialize: params};

	var newClass = function(){
		Object.reset(this);
		if (newClass._prototyping) return this;
		this._current = $empty;
		var value = (this.initialize) ? this.initialize.apply(this, arguments) : this;
		delete this._current; delete this.caller;
		return value;
	}.extend(this);

	newClass.implement(params);

	newClass.constructor = Class;
	newClass.prototype.constructor = newClass;

	return newClass;

};

Function.prototype.protect = function(){
	this._protected = true;
	return this;
};

Object.reset = function(object, key){

	if (key == null){
		for (var p in object) Object.reset(object, p);
		return object;
	}

	delete object[key];

	switch ($type(object[key])){
		case 'object':
			var F = function(){};
			F.prototype = object[key];
			var i = new F;
			object[key] = Object.reset(i);
		break;
		case 'array': object[key] = $unlink(object[key]); break;
	}

	return object;

};

new Native({name: 'Class', initialize: Class}).extend({

	instantiate: function(F){
		F._prototyping = true;
		var proto = new F;
		delete F._prototyping;
		return proto;
	},

	wrap: function(self, key, method){
		if (method._origin) method = method._origin;

		return function(){
			if (method._protected && this._current == null) throw new Error('The method "' + key + '" cannot be called.');
			var caller = this.caller, current = this._current;
			this.caller = current; this._current = arguments.callee;
			var result = method.apply(this, arguments);
			this._current = current; this.caller = caller;
			return result;
		}.extend({_owner: self, _origin: method, _name: key});

	}

});

Class.implement({

	implement: function(key, value){

		if ($type(key) == 'object'){
			for (var p in key) this.implement(p, key[p]);
			return this;
		}

		var mutator = Class.Mutators[key];

		if (mutator){
			value = mutator.call(this, value);
			if (value == null) return this;
		}

		var proto = this.prototype;

		switch ($type(value)){

			case 'function':
				if (value._hidden) return this;
				proto[key] = Class.wrap(this, key, value);
			break;

			case 'object':
				var previous = proto[key];
				if ($type(previous) == 'object') $mixin(previous, value);
				else proto[key] = $unlink(value);
			break;

			case 'array':
				proto[key] = $unlink(value);
			break;

			default: proto[key] = value;

		}

		return this;

	}

});

Class.Mutators = {

	Extends: function(parent){

		this.parent = parent;
		this.prototype = Class.instantiate(parent);

		this.implement('parent', function(){
			var name = this.caller._name, previous = this.caller._owner.parent.prototype[name];
			if (!previous) throw new Error('The method "' + name + '" has no parent.');
			return previous.apply(this, arguments);
		}.protect());

	},

	Implements: function(items){
		$splat(items).each(function(item){
			if (item instanceof Function) item = Class.instantiate(item);
			this.implement(item);
		}, this);

	}

};


/*
Script: Class.Extras.js
	Contains Utility Classes that can be implemented into your own Classes to ease the execution of many common tasks.

License:
	MIT-style license.
*/

var Chain = new Class({

	$chain: [],

	chain: function(){
		this.$chain.extend(Array.flatten(arguments));
		return this;
	},

	callChain: function(){
		return (this.$chain.length) ? this.$chain.shift().apply(this, arguments) : false;
	},

	clearChain: function(){
		this.$chain.empty();
		return this;
	}

});

var Events = new Class({

	$events: {},

	addEvent: function(type, fn, internal){
		type = Events.removeOn(type);
		if (fn != $empty){
			this.$events[type] = this.$events[type] || [];
			this.$events[type].include(fn);
			if (internal) fn.internal = true;
		}
		return this;
	},

	addEvents: function(events){
		for (var type in events) this.addEvent(type, events[type]);
		return this;
	},

	fireEvent: function(type, args, delay){
		type = Events.removeOn(type);
		if (!this.$events || !this.$events[type]) return this;
		this.$events[type].each(function(fn){
			fn.create({'bind': this, 'delay': delay, 'arguments': args})();
		}, this);
		return this;
	},

	removeEvent: function(type, fn){
		type = Events.removeOn(type);
		if (!this.$events[type]) return this;
		if (!fn.internal) this.$events[type].erase(fn);
		return this;
	},

	removeEvents: function(events){
		var type;
		if ($type(events) == 'object'){
			for (type in events) this.removeEvent(type, events[type]);
			return this;
		}
		if (events) events = Events.removeOn(events);
		for (type in this.$events){
			if (events && events != type) continue;
			var fns = this.$events[type];
			for (var i = fns.length; i--; i) this.removeEvent(type, fns[i]);
		}
		return this;
	}

});

Events.removeOn = function(string){
	return string.replace(/^on([A-Z])/, function(full, first) {
		return first.toLowerCase();
	});
};

var Options = new Class({

	setOptions: function(){
		this.options = $merge.run([this.options].extend(arguments));
		if (!this.addEvent) return this;
		for (var option in this.options){
			if ($type(this.options[option]) != 'function' || !(/^on[A-Z]/).test(option)) continue;
			this.addEvent(option, this.options[option]);
			delete this.options[option];
		}
		return this;
	}

});


/*
Script: Element.js
	One of the most important items in MooTools. Contains the dollar function, the dollars function, and an handful of cross-browser,
	time-saver methods to let you easily work with HTML Elements.

License:
	MIT-style license.
*/

var Element = new Native({

	name: 'Element',

	legacy: window.Element,

	initialize: function(tag, props){
		var konstructor = Element.Constructors.get(tag);
		if (konstructor) return konstructor(props);
		if (typeof tag == 'string') return document.newElement(tag, props);
		return document.id(tag).set(props);
	},

	afterImplement: function(key, value){
		Element.Prototype[key] = value;
		if (Array[key]) return;
		Elements.implement(key, function(){
			var items = [], elements = true;
			for (var i = 0, j = this.length; i < j; i++){
				var returns = this[i][key].apply(this[i], arguments);
				items.push(returns);
				if (elements) elements = ($type(returns) == 'element');
			}
			return (elements) ? new Elements(items) : items;
		});
	}

});

Element.Prototype = {$family: {name: 'element'}};

Element.Constructors = new Hash;

var IFrame = new Native({

	name: 'IFrame',

	generics: false,

	initialize: function(){
		var params = Array.link(arguments, {properties: Object.type, iframe: $defined});
		var props = params.properties || {};
		var iframe = document.id(params.iframe);
		var onload = props.onload || $empty;
		delete props.onload;
		props.id = props.name = $pick(props.id, props.name, iframe ? (iframe.id || iframe.name) : 'IFrame_' + $time());
		iframe = new Element(iframe || 'iframe', props);
		var onFrameLoad = function(){
			var host = $try(function(){
				return iframe.contentWindow.location.host;
			});
			if (!host || host == window.location.host){
				var win = new Window(iframe.contentWindow);
				new Document(iframe.contentWindow.document);
				$extend(win.Element.prototype, Element.Prototype);
			}
			onload.call(iframe.contentWindow, iframe.contentWindow.document);
		};
		var contentWindow = $try(function(){
			return iframe.contentWindow;
		});
		((contentWindow && contentWindow.document.body) || window.frames[props.id]) ? onFrameLoad() : iframe.addListener('load', onFrameLoad);
		return iframe;
	}

});

var Elements = new Native({

	initialize: function(elements, options){
		options = $extend({ddup: true, cash: true}, options);
		elements = elements || [];
		if (options.ddup || options.cash){
			var uniques = {}, returned = [];
			for (var i = 0, l = elements.length; i < l; i++){
				var el = document.id(elements[i], !options.cash);
				if (options.ddup){
					if (uniques[el.uid]) continue;
					uniques[el.uid] = true;
				}
				returned.push(el);
			}
			elements = returned;
		}
		return (options.cash) ? $extend(elements, this) : elements;
	}

});

Elements.implement({

	filter: function(filter, bind){
		if (!filter) return this;
		return new Elements(Array.filter(this, (typeof filter == 'string') ? function(item){
			return item.match(filter);
		} : filter, bind));
	}

});

Document.implement({

	newElement: function(tag, props){
		if (Browser.Engine.trident && props){
			['name', 'type', 'checked'].each(function(attribute){
				if (!props[attribute]) return;
				tag += ' ' + attribute + '="' + props[attribute] + '"';
				if (attribute != 'checked') delete props[attribute];
			});
			tag = '<' + tag + '>';
		}
		return document.id(this.createElement(tag)).set(props);
	},

	newTextNode: function(text){
		return this.createTextNode(text);
	},

	getDocument: function(){
		return this;
	},

	getWindow: function(){
		return this.window;
	},

	id: (function(){

		var types = {

			string: function(id, nocash, doc){
				id = doc.getElementById(id);
				return (id) ? types.element(id, nocash) : null;
			},

			element: function(el, nocash){
				$uid(el);
				if (!nocash && !el.$family && !(/^object|embed$/i).test(el.tagName)){
					var proto = Element.Prototype;
					for (var p in proto) el[p] = proto[p];
				};
				return el;
			},

			object: function(obj, nocash, doc){
				if (obj.toElement) return types.element(obj.toElement(doc), nocash);
				return null;
			}

		};

		types.textnode = types.whitespace = types.window = types.document = $arguments(0);

		return function(el, nocash, doc){
			if (el && el.$family && el.uid) return el;
			var type = $type(el);
			return (types[type]) ? types[type](el, nocash, doc || document) : null;
		};

	})()

});

if (window.$ == null) Window.implement({
	$: function(el, nc){
		return document.id(el, nc, this.document);
	}
});

Window.implement({

	$$: function(selector){
		if (arguments.length == 1 && typeof selector == 'string') return this.document.getElements(selector);
		var elements = [];
		var args = Array.flatten(arguments);
		for (var i = 0, l = args.length; i < l; i++){
			var item = args[i];
			switch ($type(item)){
				case 'element': elements.push(item); break;
				case 'string': elements.extend(this.document.getElements(item, true));
			}
		}
		return new Elements(elements);
	},

	getDocument: function(){
		return this.document;
	},

	getWindow: function(){
		return this;
	}

});

Native.implement([Element, Document], {

	getElement: function(selector, nocash){
		return document.id(this.getElements(selector, true)[0] || null, nocash);
	},

	getElements: function(tags, nocash){
		tags = tags.split(',');
		var elements = [];
		var ddup = (tags.length > 1);
		tags.each(function(tag){
			var partial = this.getElementsByTagName(tag.trim());
			(ddup) ? elements.extend(partial) : elements = partial;
		}, this);
		return new Elements(elements, {ddup: ddup, cash: !nocash});
	}

});

(function(){

var collected = {}, storage = {};
var props = {input: 'checked', option: 'selected', textarea: (Browser.Engine.webkit && Browser.Engine.version < 420) ? 'innerHTML' : 'value'};

var get = function(uid){
	return (storage[uid] || (storage[uid] = {}));
};

var clean = function(item, retain){
	if (!item) return;
	var uid = item.uid;
	if (Browser.Engine.trident){
		if (item.clearAttributes){
			var clone = retain && item.cloneNode(false);
			item.clearAttributes();
			if (clone) item.mergeAttributes(clone);
		} else if (item.removeEvents){
			item.removeEvents();
		}
		if ((/object/i).test(item.tagName)){
			for (var p in item){
				if (typeof item[p] == 'function') item[p] = $empty;
			}
			Element.dispose(item);
		}
	}
	if (!uid) return;
	collected[uid] = storage[uid] = null;
};

var purge = function(){
	Hash.each(collected, clean);
	if (Browser.Engine.trident) $A(document.getElementsByTagName('object')).each(clean);
	if (window.CollectGarbage) CollectGarbage();
	collected = storage = null;
};

var walk = function(element, walk, start, match, all, nocash){
	var el = element[start || walk];
	var elements = [];
	while (el){
		if (el.nodeType == 1 && (!match || Element.match(el, match))){
			if (!all) return document.id(el, nocash);
			elements.push(el);
		}
		el = el[walk];
	}
	return (all) ? new Elements(elements, {ddup: false, cash: !nocash}) : null;
};

var attributes = {
	'html': 'innerHTML',
	'class': 'className',
	'for': 'htmlFor',
	'defaultValue': 'defaultValue',
	'text': (Browser.Engine.trident || (Browser.Engine.webkit && Browser.Engine.version < 420)) ? 'innerText' : 'textContent'
};
var bools = ['compact', 'nowrap', 'ismap', 'declare', 'noshade', 'checked', 'disabled', 'readonly', 'multiple', 'selected', 'noresize', 'defer'];
var camels = ['value', 'type', 'defaultValue', 'accessKey', 'cellPadding', 'cellSpacing', 'colSpan', 'frameBorder', 'maxLength', 'readOnly', 'rowSpan', 'tabIndex', 'useMap'];

bools = bools.associate(bools);

Hash.extend(attributes, bools);
Hash.extend(attributes, camels.associate(camels.map(String.toLowerCase)));

var inserters = {

	before: function(context, element){
		if (element.parentNode) element.parentNode.insertBefore(context, element);
	},

	after: function(context, element){
		if (!element.parentNode) return;
		var next = element.nextSibling;
		(next) ? element.parentNode.insertBefore(context, next) : element.parentNode.appendChild(context);
	},

	bottom: function(context, element){
		element.appendChild(context);
	},

	top: function(context, element){
		var first = element.firstChild;
		(first) ? element.insertBefore(context, first) : element.appendChild(context);
	}

};

inserters.inside = inserters.bottom;

Hash.each(inserters, function(inserter, where){

	where = where.capitalize();

	Element.implement('inject' + where, function(el){
		inserter(this, document.id(el, true));
		return this;
	});

	Element.implement('grab' + where, function(el){
		inserter(document.id(el, true), this);
		return this;
	});

});

Element.implement({

	set: function(prop, value){
		switch ($type(prop)){
			case 'object':
				for (var p in prop) this.set(p, prop[p]);
				break;
			case 'string':
				var property = Element.Properties.get(prop);
				(property && property.set) ? property.set.apply(this, Array.slice(arguments, 1)) : this.setProperty(prop, value);
		}
		return this;
	},

	get: function(prop){
		var property = Element.Properties.get(prop);
		return (property && property.get) ? property.get.apply(this, Array.slice(arguments, 1)) : this.getProperty(prop);
	},

	erase: function(prop){
		var property = Element.Properties.get(prop);
		(property && property.erase) ? property.erase.apply(this) : this.removeProperty(prop);
		return this;
	},

	setProperty: function(attribute, value){
		var key = attributes[attribute];
		if (value == undefined) return this.removeProperty(attribute);
		if (key && bools[attribute]) value = !!value;
		(key) ? this[key] = value : this.setAttribute(attribute, '' + value);
		return this;
	},

	setProperties: function(attributes){
		for (var attribute in attributes) this.setProperty(attribute, attributes[attribute]);
		return this;
	},

	getProperty: function(attribute){
		var key = attributes[attribute];
		var value = (key) ? this[key] : this.getAttribute(attribute, 2);
		return (bools[attribute]) ? !!value : (key) ? value : value || null;
	},

	getProperties: function(){
		var args = $A(arguments);
		return args.map(this.getProperty, this).associate(args);
	},

	removeProperty: function(attribute){
		var key = attributes[attribute];
		(key) ? this[key] = (key && bools[attribute]) ? false : '' : this.removeAttribute(attribute);
		return this;
	},

	removeProperties: function(){
		Array.each(arguments, this.removeProperty, this);
		return this;
	},

	hasClass: function(className){
		return this.className.contains(className, ' ');
	},

	addClass: function(className){
		if (!this.hasClass(className)) this.className = (this.className + ' ' + className).clean();
		return this;
	},

	removeClass: function(className){
		this.className = this.className.replace(new RegExp('(^|\\s)' + className + '(?:\\s|$)'), '$1');
		return this;
	},

	toggleClass: function(className){
		return this.hasClass(className) ? this.removeClass(className) : this.addClass(className);
	},

	adopt: function(){
		Array.flatten(arguments).each(function(element){
			element = document.id(element, true);
			if (element) this.appendChild(element);
		}, this);
		return this;
	},

	appendText: function(text, where){
		return this.grab(this.getDocument().newTextNode(text), where);
	},

	grab: function(el, where){
		inserters[where || 'bottom'](document.id(el, true), this);
		return this;
	},

	inject: function(el, where){
		inserters[where || 'bottom'](this, document.id(el, true));
		return this;
	},

	replaces: function(el){
		el = document.id(el, true);
		el.parentNode.replaceChild(this, el);
		return this;
	},

	wraps: function(el, where){
		el = document.id(el, true);
		return this.replaces(el).grab(el, where);
	},

	getPrevious: function(match, nocash){
		return walk(this, 'previousSibling', null, match, false, nocash);
	},

	getAllPrevious: function(match, nocash){
		return walk(this, 'previousSibling', null, match, true, nocash);
	},

	getNext: function(match, nocash){
		return walk(this, 'nextSibling', null, match, false, nocash);
	},

	getAllNext: function(match, nocash){
		return walk(this, 'nextSibling', null, match, true, nocash);
	},

	getFirst: function(match, nocash){
		return walk(this, 'nextSibling', 'firstChild', match, false, nocash);
	},

	getLast: function(match, nocash){
		return walk(this, 'previousSibling', 'lastChild', match, false, nocash);
	},

	getParent: function(match, nocash){
		return walk(this, 'parentNode', null, match, false, nocash);
	},

	getParents: function(match, nocash){
		return walk(this, 'parentNode', null, match, true, nocash);
	},

	getSiblings: function(match, nocash) {
		return this.getParent().getChildren(match, nocash).erase(this);
	},

	getChildren: function(match, nocash){
		return walk(this, 'nextSibling', 'firstChild', match, true, nocash);
	},

	getWindow: function(){
		return this.ownerDocument.window;
	},

	getDocument: function(){
		return this.ownerDocument;
	},

	getElementById: function(id, nocash){
		var el = this.ownerDocument.getElementById(id);
		if (!el) return null;
		for (var parent = el.parentNode; parent != this; parent = parent.parentNode){
			if (!parent) return null;
		}
		return document.id(el, nocash);
	},

	getSelected: function(){
		return new Elements($A(this.options).filter(function(option){
			return option.selected;
		}));
	},

	getComputedStyle: function(property){
		if (this.currentStyle) return this.currentStyle[property.camelCase()];
		var computed = this.getDocument().defaultView.getComputedStyle(this, null);
		return (computed) ? computed.getPropertyValue([property.hyphenate()]) : null;
	},

	toQueryString: function(){
		var queryString = [];
		this.getElements('input, select, textarea', true).each(function(el){
			if (!el.name || el.disabled || el.type == 'submit' || el.type == 'reset' || el.type == 'file') return;
			var value = (el.tagName.toLowerCase() == 'select') ? Element.getSelected(el).map(function(opt){
				return opt.value;
			}) : ((el.type == 'radio' || el.type == 'checkbox') && !el.checked) ? null : el.value;
			$splat(value).each(function(val){
				if (typeof val != 'undefined') queryString.push(el.name + '=' + encodeURIComponent(val));
			});
		});
		return queryString.join('&');
	},

	clone: function(contents, keepid){
		contents = contents !== false;
		var clone = this.cloneNode(contents);
		var clean = function(node, element){
			if (!keepid) node.removeAttribute('id');
			if (Browser.Engine.trident){
				node.clearAttributes();
				node.mergeAttributes(element);
				node.removeAttribute('uid');
				if (node.options){
					var no = node.options, eo = element.options;
					for (var j = no.length; j--;) no[j].selected = eo[j].selected;
				}
			}
			var prop = props[element.tagName.toLowerCase()];
			if (prop && element[prop]) node[prop] = element[prop];
		};

		if (contents){
			var ce = clone.getElementsByTagName('*'), te = this.getElementsByTagName('*');
			for (var i = ce.length; i--;) clean(ce[i], te[i]);
		}

		clean(clone, this);
		return document.id(clone);
	},

	destroy: function(){
		Element.empty(this);
		Element.dispose(this);
		clean(this, true);
		return null;
	},

	empty: function(){
		$A(this.childNodes).each(function(node){
			Element.destroy(node);
		});
		return this;
	},

	dispose: function(){
		return (this.parentNode) ? this.parentNode.removeChild(this) : this;
	},

	hasChild: function(el){
		el = document.id(el, true);
		if (!el) return false;
		if (Browser.Engine.webkit && Browser.Engine.version < 420) return $A(this.getElementsByTagName(el.tagName)).contains(el);
		return (this.contains) ? (this != el && this.contains(el)) : !!(this.compareDocumentPosition(el) & 16);
	},

	match: function(tag){
		return (!tag || (tag == this) || (Element.get(this, 'tag') == tag));
	}

});

Native.implement([Element, Window, Document], {

	addListener: function(type, fn){
		if (type == 'unload'){
			var old = fn, self = this;
			fn = function(){
				self.removeListener('unload', fn);
				old();
			};
		} else {
			collected[this.uid] = this;
		}
		if (this.addEventListener) this.addEventListener(type, fn, false);
		else this.attachEvent('on' + type, fn);
		return this;
	},

	removeListener: function(type, fn){
		if (this.removeEventListener) this.removeEventListener(type, fn, false);
		else this.detachEvent('on' + type, fn);
		return this;
	},

	retrieve: function(property, dflt){
		var storage = get(this.uid), prop = storage[property];
		if (dflt != undefined && prop == undefined) prop = storage[property] = dflt;
		return $pick(prop);
	},

	store: function(property, value){
		var storage = get(this.uid);
		storage[property] = value;
		return this;
	},

	eliminate: function(property){
		var storage = get(this.uid);
		delete storage[property];
		return this;
	}

});

window.addListener('unload', purge);

})();

Element.Properties = new Hash;

Element.Properties.style = {

	set: function(style){
		this.style.cssText = style;
	},

	get: function(){
		return this.style.cssText;
	},

	erase: function(){
		this.style.cssText = '';
	}

};

Element.Properties.tag = {

	get: function(){
		return this.tagName.toLowerCase();
	}

};

Element.Properties.html = (function(){
	var wrapper = document.createElement('div');

	var translations = {
		table: [1, '<table>', '</table>'],
		select: [1, '<select>', '</select>'],
		tbody: [2, '<table><tbody>', '</tbody></table>'],
		tr: [3, '<table><tbody><tr>', '</tr></tbody></table>']
	};
	translations.thead = translations.tfoot = translations.tbody;

	var html = {
		set: function(){
			var html = Array.flatten(arguments).join('');
			var wrap = Browser.Engine.trident && translations[this.get('tag')];
			if (wrap){
				var first = wrapper;
				first.innerHTML = wrap[1] + html + wrap[2];
				for (var i = wrap[0]; i--;) first = first.firstChild;
				this.empty().adopt(first.childNodes);
			} else {
				this.innerHTML = html;
			}
		}
	};

	html.erase = html.set;

	return html;
})();

if (Browser.Engine.webkit && Browser.Engine.version < 420) Element.Properties.text = {
	get: function(){
		if (this.innerText) return this.innerText;
		var temp = this.ownerDocument.newElement('div', {html: this.innerHTML}).inject(this.ownerDocument.body);
		var text = temp.innerText;
		temp.destroy();
		return text;
	}
};


/*
Script: Element.Event.js
	Contains Element methods for dealing with events, and custom Events.

License:
	MIT-style license.
*/

Element.Properties.events = {set: function(events){
	this.addEvents(events);
}};

Native.implement([Element, Window, Document], {

	addEvent: function(type, fn){
		var events = this.retrieve('events', {});
		events[type] = events[type] || {'keys': [], 'values': []};
		if (events[type].keys.contains(fn)) return this;
		events[type].keys.push(fn);
		var realType = type, custom = Element.Events.get(type), condition = fn, self = this;
		if (custom){
			if (custom.onAdd) custom.onAdd.call(this, fn);
			if (custom.condition){
				condition = function(event){
					if (custom.condition.call(this, event)) return fn.call(this, event);
					return true;
				};
			}
			realType = custom.base || realType;
		}
		var defn = function(){
			return fn.call(self);
		};
		var nativeEvent = Element.NativeEvents[realType];
		if (nativeEvent){
			if (nativeEvent == 2){
				defn = function(event){
					event = new Event(event, self.getWindow());
					if (condition.call(self, event) === false) event.stop();
				};
			}
			this.addListener(realType, defn);
		}
		events[type].values.push(defn);
		return this;
	},

	removeEvent: function(type, fn){
		var events = this.retrieve('events');
		if (!events || !events[type]) return this;
		var pos = events[type].keys.indexOf(fn);
		if (pos == -1) return this;
		events[type].keys.splice(pos, 1);
		var value = events[type].values.splice(pos, 1)[0];
		var custom = Element.Events.get(type);
		if (custom){
			if (custom.onRemove) custom.onRemove.call(this, fn);
			type = custom.base || type;
		}
		return (Element.NativeEvents[type]) ? this.removeListener(type, value) : this;
	},

	addEvents: function(events){
		for (var event in events) this.addEvent(event, events[event]);
		return this;
	},

	removeEvents: function(events){
		var type;
		if ($type(events) == 'object'){
			for (type in events) this.removeEvent(type, events[type]);
			return this;
		}
		var attached = this.retrieve('events');
		if (!attached) return this;
		if (!events){
			for (type in attached) this.removeEvents(type);
			this.eliminate('events');
		} else if (attached[events]){
			while (attached[events].keys[0]) this.removeEvent(events, attached[events].keys[0]);
			attached[events] = null;
		}
		return this;
	},

	fireEvent: function(type, args, delay){
		var events = this.retrieve('events');
		if (!events || !events[type]) return this;
		events[type].keys.each(function(fn){
			fn.create({'bind': this, 'delay': delay, 'arguments': args})();
		}, this);
		return this;
	},

	cloneEvents: function(from, type){
		from = document.id(from);
		var fevents = from.retrieve('events');
		if (!fevents) return this;
		if (!type){
			for (var evType in fevents) this.cloneEvents(from, evType);
		} else if (fevents[type]){
			fevents[type].keys.each(function(fn){
				this.addEvent(type, fn);
			}, this);
		}
		return this;
	}

});

Element.NativeEvents = {
	click: 2, dblclick: 2, mouseup: 2, mousedown: 2, contextmenu: 2, //mouse buttons
	mousewheel: 2, DOMMouseScroll: 2, //mouse wheel
	mouseover: 2, mouseout: 2, mousemove: 2, selectstart: 2, selectend: 2, //mouse movement
	keydown: 2, keypress: 2, keyup: 2, //keyboard
	focus: 2, blur: 2, change: 2, reset: 2, select: 2, submit: 2, //form elements
	load: 1, unload: 1, beforeunload: 2, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window
	error: 1, abort: 1, scroll: 1 //misc
};

(function(){

var $check = function(event){
	var related = event.relatedTarget;
	if (related == undefined) return true;
	if (related === false) return false;
	return ($type(this) != 'document' && related != this && related.prefix != 'xul' && !this.hasChild(related));
};

Element.Events = new Hash({

	mouseenter: {
		base: 'mouseover',
		condition: $check
	},

	mouseleave: {
		base: 'mouseout',
		condition: $check
	},

	mousewheel: {
		base: (Browser.Engine.gecko) ? 'DOMMouseScroll' : 'mousewheel'
	}

});

})();


/*
Script: Element.Style.js
	Contains methods for interacting with the styles of Elements in a fashionable way.

License:
	MIT-style license.
*/

Element.Properties.styles = {set: function(styles){
	this.setStyles(styles);
}};

Element.Properties.opacity = {

	set: function(opacity, novisibility){
		if (!novisibility){
			if (opacity == 0){
				if (this.style.visibility != 'hidden') this.style.visibility = 'hidden';
			} else {
				if (this.style.visibility != 'visible') this.style.visibility = 'visible';
			}
		}
		if (!this.currentStyle || !this.currentStyle.hasLayout) this.style.zoom = 1;
		if (Browser.Engine.trident) this.style.filter = (opacity == 1) ? '' : 'alpha(opacity=' + opacity * 100 + ')';
		this.style.opacity = opacity;
		this.store('opacity', opacity);
	},

	get: function(){
		return this.retrieve('opacity', 1);
	}

};

Element.implement({

	setOpacity: function(value){
		return this.set('opacity', value, true);
	},

	getOpacity: function(){
		return this.get('opacity');
	},

	setStyle: function(property, value){
		switch (property){
			case 'opacity': return this.set('opacity', parseFloat(value));
			case 'float': property = (Browser.Engine.trident) ? 'styleFloat' : 'cssFloat';
		}
		property = property.camelCase();
		if ($type(value) != 'string'){
			var map = (Element.Styles.get(property) || '@').split(' ');
			value = $splat(value).map(function(val, i){
				if (!map[i]) return '';
				return ($type(val) == 'number') ? map[i].replace('@', Math.round(val)) : val;
			}).join(' ');
		} else if (value == String(Number(value))){
			value = Math.round(value);
		}
		this.style[property] = value;
		return this;
	},

	getStyle: function(property){
		switch (property){
			case 'opacity': return this.get('opacity');
			case 'float': property = (Browser.Engine.trident) ? 'styleFloat' : 'cssFloat';
		}
		property = property.camelCase();
		var result = this.style[property];
		if (!$chk(result)){
			result = [];
			for (var style in Element.ShortStyles){
				if (property != style) continue;
				for (var s in Element.ShortStyles[style]) result.push(this.getStyle(s));
				return result.join(' ');
			}
			result = this.getComputedStyle(property);
		}
		if (result){
			result = String(result);
			var color = result.match(/rgba?\([\d\s,]+\)/);
			if (color) result = result.replace(color[0], color[0].rgbToHex());
		}
		if (Browser.Engine.presto || (Browser.Engine.trident && !$chk(parseInt(result, 10)))){
			if (property.test(/^(height|width)$/)){
				var values = (property == 'width') ? ['left', 'right'] : ['top', 'bottom'], size = 0;
				values.each(function(value){
					size += this.getStyle('border-' + value + '-width').toInt() + this.getStyle('padding-' + value).toInt();
				}, this);
				return this['offset' + property.capitalize()] - size + 'px';
			}
			if ((Browser.Engine.presto) && String(result).test('px')) return result;
			if (property.test(/(border(.+)Width|margin|padding)/)) return '0px';
		}
		return result;
	},

	setStyles: function(styles){
		for (var style in styles) this.setStyle(style, styles[style]);
		return this;
	},

	getStyles: function(){
		var result = {};
		Array.flatten(arguments).each(function(key){
			result[key] = this.getStyle(key);
		}, this);
		return result;
	}

});

Element.Styles = new Hash({
	left: '@px', top: '@px', bottom: '@px', right: '@px',
	width: '@px', height: '@px', maxWidth: '@px', maxHeight: '@px', minWidth: '@px', minHeight: '@px',
	backgroundColor: 'rgb(@, @, @)', backgroundPosition: '@px @px', color: 'rgb(@, @, @)',
	fontSize: '@px', letterSpacing: '@px', lineHeight: '@px', clip: 'rect(@px @px @px @px)',
	margin: '@px @px @px @px', padding: '@px @px @px @px', border: '@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)',
	borderWidth: '@px @px @px @px', borderStyle: '@ @ @ @', borderColor: 'rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)',
	zIndex: '@', 'zoom': '@', fontWeight: '@', textIndent: '@px', opacity: '@'
});

Element.ShortStyles = {margin: {}, padding: {}, border: {}, borderWidth: {}, borderStyle: {}, borderColor: {}};

['Top', 'Right', 'Bottom', 'Left'].each(function(direction){
	var Short = Element.ShortStyles;
	var All = Element.Styles;
	['margin', 'padding'].each(function(style){
		var sd = style + direction;
		Short[style][sd] = All[sd] = '@px';
	});
	var bd = 'border' + direction;
	Short.border[bd] = All[bd] = '@px @ rgb(@, @, @)';
	var bdw = bd + 'Width', bds = bd + 'Style', bdc = bd + 'Color';
	Short[bd] = {};
	Short.borderWidth[bdw] = Short[bd][bdw] = All[bdw] = '@px';
	Short.borderStyle[bds] = Short[bd][bds] = All[bds] = '@';
	Short.borderColor[bdc] = Short[bd][bdc] = All[bdc] = 'rgb(@, @, @)';
});


/*
Script: Element.Dimensions.js
	Contains methods to work with size, scroll, or positioning of Elements and the window object.

License:
	MIT-style license.

Credits:
	- Element positioning based on the [qooxdoo](http://qooxdoo.org/) code and smart browser fixes, [LGPL License](http://www.gnu.org/licenses/lgpl.html).
	- Viewport dimensions based on [YUI](http://developer.yahoo.com/yui/) code, [BSD License](http://developer.yahoo.com/yui/license.html).
*/

(function(){

Element.implement({

	scrollTo: function(x, y){
		if (isBody(this)){
			this.getWindow().scrollTo(x, y);
		} else {
			this.scrollLeft = x;
			this.scrollTop = y;
		}
		return this;
	},

	getSize: function(){
		if (isBody(this)) return this.getWindow().getSize();
		return {x: this.offsetWidth, y: this.offsetHeight};
	},

	getScrollSize: function(){
		if (isBody(this)) return this.getWindow().getScrollSize();
		return {x: this.scrollWidth, y: this.scrollHeight};
	},

	getScroll: function(){
		if (isBody(this)) return this.getWindow().getScroll();
		return {x: this.scrollLeft, y: this.scrollTop};
	},

	getScrolls: function(){
		var element = this, position = {x: 0, y: 0};
		while (element && !isBody(element)){
			position.x += element.scrollLeft;
			position.y += element.scrollTop;
			element = element.parentNode;
		}
		return position;
	},

	getOffsetParent: function(){
		var element = this;
		if (isBody(element)) return null;
		if (!Browser.Engine.trident) return element.offsetParent;
		while ((element = element.parentNode) && !isBody(element)){
			if (styleString(element, 'position') != 'static') return element;
		}
		return null;
	},

	getOffsets: function(){
		if (this.getBoundingClientRect){
			var bound = this.getBoundingClientRect(),
			html = document.id(this.getDocument().documentElement),
			scroll = html.getScroll(),
			isFixed = (styleString(this, 'position') == 'fixed');
			return {
				x: parseInt(bound.left, 10) + ((isFixed) ? 0 : scroll.x) - html.clientLeft,
				y: parseInt(bound.top, 10) +  ((isFixed) ? 0 : scroll.y) - html.clientTop
			};
		}

		var element = this, position = {x: 0, y: 0};
		if (isBody(this)) return position;

		while (element && !isBody(element)){
			position.x += element.offsetLeft;
			position.y += element.offsetTop;

			if (Browser.Engine.gecko){
				if (!borderBox(element)){
					position.x += leftBorder(element);
					position.y += topBorder(element);
				}
				var parent = element.parentNode;
				if (parent && styleString(parent, 'overflow') != 'visible'){
					position.x += leftBorder(parent);
					position.y += topBorder(parent);
				}
			} else if (element != this && Browser.Engine.webkit){
				position.x += leftBorder(element);
				position.y += topBorder(element);
			}

			element = element.offsetParent;
		}
		if (Browser.Engine.gecko && !borderBox(this)){
			position.x -= leftBorder(this);
			position.y -= topBorder(this);
		}
		return position;
	},

	getPosition: function(relative){
		if (isBody(this)) return {x: 0, y: 0};
		var offset = this.getOffsets(), scroll = this.getScrolls();
		var position = {x: offset.x - scroll.x, y: offset.y - scroll.y};
		var relativePosition = (relative && (relative = document.id(relative))) ? relative.getPosition() : {x: 0, y: 0};
		return {x: position.x - relativePosition.x, y: position.y - relativePosition.y};
	},

	getCoordinates: function(element){
		if (isBody(this)) return this.getWindow().getCoordinates();
		var position = this.getPosition(element), size = this.getSize();
		var obj = {left: position.x, top: position.y, width: size.x, height: size.y};
		obj.right = obj.left + obj.width;
		obj.bottom = obj.top + obj.height;
		return obj;
	},

	computePosition: function(obj){
		return {left: obj.x - styleNumber(this, 'margin-left'), top: obj.y - styleNumber(this, 'margin-top')};
	},

	setPosition: function(obj){
		return this.setStyles(this.computePosition(obj));
	}

});


Native.implement([Document, Window], {

	getSize: function(){
		if (Browser.Engine.presto || Browser.Engine.webkit) {
			var win = this.getWindow();
			return {x: win.innerWidth, y: win.innerHeight};
		}
		var doc = getCompatElement(this);
		return {x: doc.clientWidth, y: doc.clientHeight};
	},

	getScroll: function(){
		var win = this.getWindow(), doc = getCompatElement(this);
		return {x: win.pageXOffset || doc.scrollLeft, y: win.pageYOffset || doc.scrollTop};
	},

	getScrollSize: function(){
		var doc = getCompatElement(this), min = this.getSize();
		return {x: Math.max(doc.scrollWidth, min.x), y: Math.max(doc.scrollHeight, min.y)};
	},

	getPosition: function(){
		return {x: 0, y: 0};
	},

	getCoordinates: function(){
		var size = this.getSize();
		return {top: 0, left: 0, bottom: size.y, right: size.x, height: size.y, width: size.x};
	}

});

// private methods

var styleString = Element.getComputedStyle;

function styleNumber(element, style){
	return styleString(element, style).toInt() || 0;
};

function borderBox(element){
	return styleString(element, '-moz-box-sizing') == 'border-box';
};

function topBorder(element){
	return styleNumber(element, 'border-top-width');
};

function leftBorder(element){
	return styleNumber(element, 'border-left-width');
};

function isBody(element){
	return (/^(?:body|html)$/i).test(element.tagName);
};

function getCompatElement(element){
	var doc = element.getDocument();
	return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
};

})();

//aliases
Element.alias('setPosition', 'position'); //compatability

Native.implement([Window, Document, Element], {

	getHeight: function(){
		return this.getSize().y;
	},

	getWidth: function(){
		return this.getSize().x;
	},

	getScrollTop: function(){
		return this.getScroll().y;
	},

	getScrollLeft: function(){
		return this.getScroll().x;
	},

	getScrollHeight: function(){
		return this.getScrollSize().y;
	},

	getScrollWidth: function(){
		return this.getScrollSize().x;
	},

	getTop: function(){
		return this.getPosition().y;
	},

	getLeft: function(){
		return this.getPosition().x;
	}

});


/*
Script: Selectors.js
	Adds advanced CSS Querying capabilities for targeting elements. Also includes pseudoselectors support.

License:
	MIT-style license.
*/

Native.implement([Document, Element], {

	getElements: function(expression, nocash){
		expression = expression.split(',');
		var items, local = {};
		for (var i = 0, l = expression.length; i < l; i++){
			var selector = expression[i], elements = Selectors.Utils.search(this, selector, local);
			if (i != 0 && elements.item) elements = $A(elements);
			items = (i == 0) ? elements : (items.item) ? $A(items).concat(elements) : items.concat(elements);
		}
		return new Elements(items, {ddup: (expression.length > 1), cash: !nocash});
	}

});

Element.implement({

	match: function(selector){
		if (!selector || (selector == this)) return true;
		var tagid = Selectors.Utils.parseTagAndID(selector);
		var tag = tagid[0], id = tagid[1];
		if (!Selectors.Filters.byID(this, id) || !Selectors.Filters.byTag(this, tag)) return false;
		var parsed = Selectors.Utils.parseSelector(selector);
		return (parsed) ? Selectors.Utils.filter(this, parsed, {}) : true;
	}

});

var Selectors = {Cache: {nth: {}, parsed: {}}};

Selectors.RegExps = {
	id: (/#([\w-]+)/),
	tag: (/^(\w+|\*)/),
	quick: (/^(\w+|\*)$/),
	splitter: (/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),
	combined: (/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)(["']?)([^\4]*?)\4)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)
};

Selectors.Utils = {

	chk: function(item, uniques){
		if (!uniques) return true;
		var uid = $uid(item);
		if (!uniques[uid]) return uniques[uid] = true;
		return false;
	},

	parseNthArgument: function(argument){
		if (Selectors.Cache.nth[argument]) return Selectors.Cache.nth[argument];
		var parsed = argument.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);
		if (!parsed) return false;
		var inta = parseInt(parsed[1], 10);
		var a = (inta || inta === 0) ? inta : 1;
		var special = parsed[2] || false;
		var b = parseInt(parsed[3], 10) || 0;
		if (a != 0){
			b--;
			while (b < 1) b += a;
			while (b >= a) b -= a;
		} else {
			a = b;
			special = 'index';
		}
		switch (special){
			case 'n': parsed = {a: a, b: b, special: 'n'}; break;
			case 'odd': parsed = {a: 2, b: 0, special: 'n'}; break;
			case 'even': parsed = {a: 2, b: 1, special: 'n'}; break;
			case 'first': parsed = {a: 0, special: 'index'}; break;
			case 'last': parsed = {special: 'last-child'}; break;
			case 'only': parsed = {special: 'only-child'}; break;
			default: parsed = {a: (a - 1), special: 'index'};
		}

		return Selectors.Cache.nth[argument] = parsed;
	},

	parseSelector: function(selector){
		if (Selectors.Cache.parsed[selector]) return Selectors.Cache.parsed[selector];
		var m, parsed = {classes: [], pseudos: [], attributes: []};
		while ((m = Selectors.RegExps.combined.exec(selector))){
			var cn = m[1], an = m[2], ao = m[3], av = m[5], pn = m[6], pa = m[7];
			if (cn){
				parsed.classes.push(cn);
			} else if (pn){
				var parser = Selectors.Pseudo.get(pn);
				if (parser) parsed.pseudos.push({parser: parser, argument: pa});
				else parsed.attributes.push({name: pn, operator: '=', value: pa});
			} else if (an){
				parsed.attributes.push({name: an, operator: ao, value: av});
			}
		}
		if (!parsed.classes.length) delete parsed.classes;
		if (!parsed.attributes.length) delete parsed.attributes;
		if (!parsed.pseudos.length) delete parsed.pseudos;
		if (!parsed.classes && !parsed.attributes && !parsed.pseudos) parsed = null;
		return Selectors.Cache.parsed[selector] = parsed;
	},

	parseTagAndID: function(selector){
		var tag = selector.match(Selectors.RegExps.tag);
		var id = selector.match(Selectors.RegExps.id);
		return [(tag) ? tag[1] : '*', (id) ? id[1] : false];
	},

	filter: function(item, parsed, local){
		var i;
		if (parsed.classes){
			for (i = parsed.classes.length; i--; i){
				var cn = parsed.classes[i];
				if (!Selectors.Filters.byClass(item, cn)) return false;
			}
		}
		if (parsed.attributes){
			for (i = parsed.attributes.length; i--; i){
				var att = parsed.attributes[i];
				if (!Selectors.Filters.byAttribute(item, att.name, att.operator, att.value)) return false;
			}
		}
		if (parsed.pseudos){
			for (i = parsed.pseudos.length; i--; i){
				var psd = parsed.pseudos[i];
				if (!Selectors.Filters.byPseudo(item, psd.parser, psd.argument, local)) return false;
			}
		}
		return true;
	},

	getByTagAndID: function(ctx, tag, id){
		if (id){
			var item = (ctx.getElementById) ? ctx.getElementById(id, true) : Element.getElementById(ctx, id, true);
			return (item && Selectors.Filters.byTag(item, tag)) ? [item] : [];
		} else {
			return ctx.getElementsByTagName(tag);
		}
	},

	search: function(self, expression, local){
		var splitters = [];

		var selectors = expression.trim().replace(Selectors.RegExps.splitter, function(m0, m1, m2){
			splitters.push(m1);
			return ':)' + m2;
		}).split(':)');

		var items, filtered, item;

		for (var i = 0, l = selectors.length; i < l; i++){

			var selector = selectors[i];

			if (i == 0 && Selectors.RegExps.quick.test(selector)){
				items = self.getElementsByTagName(selector);
				continue;
			}

			var splitter = splitters[i - 1];

			var tagid = Selectors.Utils.parseTagAndID(selector);
			var tag = tagid[0], id = tagid[1];

			if (i == 0){
				items = Selectors.Utils.getByTagAndID(self, tag, id);
			} else {
				var uniques = {}, found = [];
				for (var j = 0, k = items.length; j < k; j++) found = Selectors.Getters[splitter](found, items[j], tag, id, uniques);
				items = found;
			}

			var parsed = Selectors.Utils.parseSelector(selector);

			if (parsed){
				filtered = [];
				for (var m = 0, n = items.length; m < n; m++){
					item = items[m];
					if (Selectors.Utils.filter(item, parsed, local)) filtered.push(item);
				}
				items = filtered;
			}

		}

		return items;

	}

};

Selectors.Getters = {

	' ': function(found, self, tag, id, uniques){
		var items = Selectors.Utils.getByTagAndID(self, tag, id);
		for (var i = 0, l = items.length; i < l; i++){
			var item = items[i];
			if (Selectors.Utils.chk(item, uniques)) found.push(item);
		}
		return found;
	},

	'>': function(found, self, tag, id, uniques){
		var children = Selectors.Utils.getByTagAndID(self, tag, id);
		for (var i = 0, l = children.length; i < l; i++){
			var child = children[i];
			if (child.parentNode == self && Selectors.Utils.chk(child, uniques)) found.push(child);
		}
		return found;
	},

	'+': function(found, self, tag, id, uniques){
		while ((self = self.nextSibling)){
			if (self.nodeType == 1){
				if (Selectors.Utils.chk(self, uniques) && Selectors.Filters.byTag(self, tag) && Selectors.Filters.byID(self, id)) found.push(self);
				break;
			}
		}
		return found;
	},

	'~': function(found, self, tag, id, uniques){
		while ((self = self.nextSibling)){
			if (self.nodeType == 1){
				if (!Selectors.Utils.chk(self, uniques)) break;
				if (Selectors.Filters.byTag(self, tag) && Selectors.Filters.byID(self, id)) found.push(self);
			}
		}
		return found;
	}

};

Selectors.Filters = {

	byTag: function(self, tag){
		return (tag == '*' || (self.tagName && self.tagName.toLowerCase() == tag));
	},

	byID: function(self, id){
		return (!id || (self.id && self.id == id));
	},

	byClass: function(self, klass){
		return (self.className && self.className.contains(klass, ' '));
	},

	byPseudo: function(self, parser, argument, local){
		return parser.call(self, argument, local);
	},

	byAttribute: function(self, name, operator, value){
		var result = Element.prototype.getProperty.call(self, name);
		if (!result) return (operator == '!=');
		if (!operator || value == undefined) return true;
		switch (operator){
			case '=': return (result == value);
			case '*=': return (result.contains(value));
			case '^=': return (result.substr(0, value.length) == value);
			case '$=': return (result.substr(result.length - value.length) == value);
			case '!=': return (result != value);
			case '~=': return result.contains(value, ' ');
			case '|=': return result.contains(value, '-');
		}
		return false;
	}

};

Selectors.Pseudo = new Hash({

	// w3c pseudo selectors

	checked: function(){
		return this.checked;
	},

	empty: function(){
		return !(this.innerText || this.textContent || '').length;
	},

	not: function(selector){
		return !Element.match(this, selector);
	},

	contains: function(text){
		return (this.innerText || this.textContent || '').contains(text);
	},

	'first-child': function(){
		return Selectors.Pseudo.index.call(this, 0);
	},

	'last-child': function(){
		var element = this;
		while ((element = element.nextSibling)){
			if (element.nodeType == 1) return false;
		}
		return true;
	},

	'only-child': function(){
		var prev = this;
		while ((prev = prev.previousSibling)){
			if (prev.nodeType == 1) return false;
		}
		var next = this;
		while ((next = next.nextSibling)){
			if (next.nodeType == 1) return false;
		}
		return true;
	},

	'nth-child': function(argument, local){
		argument = (argument == undefined) ? 'n' : argument;
		var parsed = Selectors.Utils.parseNthArgument(argument);
		if (parsed.special != 'n') return Selectors.Pseudo[parsed.special].call(this, parsed.a, local);
		var count = 0;
		local.positions = local.positions || {};
		var uid = $uid(this);
		if (!local.positions[uid]){
			var self = this;
			while ((self = self.previousSibling)){
				if (self.nodeType != 1) continue;
				count ++;
				var position = local.positions[$uid(self)];
				if (position != undefined){
					count = position + count;
					break;
				}
			}
			local.positions[uid] = count;
		}
		return (local.positions[uid] % parsed.a == parsed.b);
	},

	// custom pseudo selectors

	index: function(index){
		var element = this, count = 0;
		while ((element = element.previousSibling)){
			if (element.nodeType == 1 && ++count > index) return false;
		}
		return (count == index);
	},

	even: function(argument, local){
		return Selectors.Pseudo['nth-child'].call(this, '2n+1', local);
	},

	odd: function(argument, local){
		return Selectors.Pseudo['nth-child'].call(this, '2n', local);
	},

	selected: function(){
		return this.selected;
	},

	enabled: function(){
		return (this.disabled === false);
	}

});


/*
Script: Domready.js
	Contains the domready custom event.

License:
	MIT-style license.
*/

Element.Events.domready = {

	onAdd: function(fn){
		if (Browser.loaded) fn.call(this);
	}

};

(function(){

	var domready = function(){
		if (Browser.loaded) return;
		Browser.loaded = true;
		window.fireEvent('domready');
		document.fireEvent('domready');
	};

	if (Browser.Engine.trident){
		var temp = document.createElement('div');
		(function(){
			($try(function(){
				temp.doScroll(); // Technique by Diego Perini
				return document.id(temp).inject(document.body).set('html', 'temp').dispose();
			})) ? domready() : arguments.callee.delay(50);
		})();
	} else if (Browser.Engine.webkit && Browser.Engine.version < 525){
		(function(){
			(['loaded', 'complete'].contains(document.readyState)) ? domready() : arguments.callee.delay(50);
		})();
	} else {
		window.addEvent('load', domready);
		document.addEvent('DOMContentLoaded', domready);
	}

})();


/*
Script: JSON.js
	JSON encoder and decoder.

License:
	MIT-style license.

See Also:
	<http://www.json.org/>
*/

var JSON = new Hash({

	$specialChars: {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'},

	$replaceChars: function(chr){
		return JSON.$specialChars[chr] || '\\u00' + Math.floor(chr.charCodeAt() / 16).toString(16) + (chr.charCodeAt() % 16).toString(16);
	},

	encode: function(obj){
		switch ($type(obj)){
			case 'string':
				return '"' + obj.replace(/[\x00-\x1f\\"]/g, JSON.$replaceChars) + '"';
			case 'array':
				return '[' + String(obj.map(JSON.encode).clean()) + ']';
			case 'object': case 'hash':
				var string = [];
				Hash.each(obj, function(value, key){
					var json = JSON.encode(value);
					if (json) string.push(JSON.encode(key) + ':' + json);
				});
				return '{' + string + '}';
			case 'number': case 'boolean': return String(obj);
			case false: return 'null';
		}
		return null;
	},

	decode: function(string, secure){
		if ($type(string) != 'string' || !string.length) return null;
		if (secure && !(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''))) return null;
		return eval('(' + string + ')');
	}

});

Native.implement([Hash, Array, String, Number], {

	toJSON: function(){
		return JSON.encode(this);
	}

});


/*
Script: Cookie.js
	Class for creating, loading, and saving browser Cookies.

License:
	MIT-style license.

Credits:
	Based on the functions by Peter-Paul Koch (http://quirksmode.org).
*/

var Cookie = new Class({

	Implements: Options,

	options: {
		path: false,
		domain: false,
		duration: false,
		secure: false,
		document: document
	},

	initialize: function(key, options){
		this.key = key;
		this.setOptions(options);
	},

	write: function(value){
		value = encodeURIComponent(value);
		if (this.options.domain) value += '; domain=' + this.options.domain;
		if (this.options.path) value += '; path=' + this.options.path;
		if (this.options.duration){
			var date = new Date();
			date.setTime(date.getTime() + this.options.duration * 24 * 60 * 60 * 1000);
			value += '; expires=' + date.toGMTString();
		}
		if (this.options.secure) value += '; secure';
		this.options.document.cookie = this.key + '=' + value;
		return this;
	},

	read: function(){
		var value = this.options.document.cookie.match('(?:^|;)\\s*' + this.key.escapeRegExp() + '=([^;]*)');
		return (value) ? decodeURIComponent(value[1]) : null;
	},

	dispose: function(){
		new Cookie(this.key, $merge(this.options, {duration: -1})).write('');
		return this;
	}

});

Cookie.write = function(key, value, options){
	return new Cookie(key, options).write(value);
};

Cookie.read = function(key){
	return new Cookie(key).read();
};

Cookie.dispose = function(key, options){
	return new Cookie(key, options).dispose();
};


/*
Script: Swiff.js
	Wrapper for embedding SWF movies. Supports (and fixes) External Interface Communication.

License:
	MIT-style license.

Credits:
	Flash detection & Internet Explorer + Flash Player 9 fix inspired by SWFObject.
*/

var Swiff = new Class({

	Implements: [Options],

	options: {
		id: null,
		height: 1,
		width: 1,
		container: null,
		properties: {},
		params: {
			quality: 'high',
			allowScriptAccess: 'always',
			wMode: 'transparent',
			swLiveConnect: true
		},
		callBacks: {},
		vars: {}
	},

	toElement: function(){
		return this.object;
	},

	initialize: function(path, options){
		this.instance = 'Swiff_' + $time();

		this.setOptions(options);
		options = this.options;
		var id = this.id = options.id || this.instance;
		var container = document.id(options.container);

		Swiff.CallBacks[this.instance] = {};

		var params = options.params, vars = options.vars, callBacks = options.callBacks;
		var properties = $extend({height: options.height, width: options.width}, options.properties);

		var self = this;

		for (var callBack in callBacks){
			Swiff.CallBacks[this.instance][callBack] = (function(option){
				return function(){
					return option.apply(self.object, arguments);
				};
			})(callBacks[callBack]);
			vars[callBack] = 'Swiff.CallBacks.' + this.instance + '.' + callBack;
		}

		params.flashVars = Hash.toQueryString(vars);
		if (Browser.Engine.trident){
			properties.classid = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
			params.movie = path;
		} else {
			properties.type = 'application/x-shockwave-flash';
			properties.data = path;
		}
		var build = '<object id="' + id + '"';
		for (var property in properties) build += ' ' + property + '="' + properties[property] + '"';
		build += '>';
		for (var param in params){
			if (params[param]) build += '<param name="' + param + '" value="' + params[param] + '" />';
		}
		build += '</object>';
		this.object = ((container) ? container.empty() : new Element('div')).set('html', build).firstChild;
	},

	replaces: function(element){
		element = document.id(element, true);
		element.parentNode.replaceChild(this.toElement(), element);
		return this;
	},

	inject: function(element){
		document.id(element, true).appendChild(this.toElement());
		return this;
	},

	remote: function(){
		return Swiff.remote.apply(Swiff, [this.toElement()].extend(arguments));
	}

});

Swiff.CallBacks = {};

Swiff.remote = function(obj, fn){
	var rs = obj.CallFunction('<invoke name="' + fn + '" returntype="javascript">' + __flash__argumentsToXML(arguments, 2) + '</invoke>');
	return eval(rs);
};


/*
Script: Fx.js
	Contains the basic animation logic to be extended by all other Fx Classes.

License:
	MIT-style license.
*/

var Fx = new Class({

	Implements: [Chain, Events, Options],

	options: {
		/*
		onStart: $empty,
		onCancel: $empty,
		onComplete: $empty,
		*/
		fps: 50,
		unit: false,
		duration: 500,
		link: 'ignore'
	},

	initialize: function(options){
		this.subject = this.subject || this;
		this.setOptions(options);
		this.options.duration = Fx.Durations[this.options.duration] || this.options.duration.toInt();
		var wait = this.options.wait;
		if (wait === false) this.options.link = 'cancel';
	},

	getTransition: function(){
		return function(p){
			return -(Math.cos(Math.PI * p) - 1) / 2;
		};
	},

	step: function(){
		var time = $time();
		if (time < this.time + this.options.duration){
			var delta = this.transition((time - this.time) / this.options.duration);
			this.set(this.compute(this.from, this.to, delta));
		} else {
			this.set(this.compute(this.from, this.to, 1));
			this.complete();
		}
	},

	set: function(now){
		return now;
	},

	compute: function(from, to, delta){
		return Fx.compute(from, to, delta);
	},

	check: function(){
		if (!this.timer) return true;
		switch (this.options.link){
			case 'cancel': this.cancel(); return true;
			case 'chain': this.chain(this.caller.bind(this, arguments)); return false;
		}
		return false;
	},

	start: function(from, to){
		if (!this.check(from, to)) return this;
		this.from = from;
		this.to = to;
		this.time = 0;
		this.transition = this.getTransition();
		this.startTimer();
		this.onStart();
		return this;
	},

	complete: function(){
		if (this.stopTimer()) this.onComplete();
		return this;
	},

	cancel: function(){
		if (this.stopTimer()) this.onCancel();
		return this;
	},

	onStart: function(){
		this.fireEvent('start', this.subject);
	},

	onComplete: function(){
		this.fireEvent('complete', this.subject);
		if (!this.callChain()) this.fireEvent('chainComplete', this.subject);
	},

	onCancel: function(){
		this.fireEvent('cancel', this.subject).clearChain();
	},

	pause: function(){
		this.stopTimer();
		return this;
	},

	resume: function(){
		this.startTimer();
		return this;
	},

	stopTimer: function(){
		if (!this.timer) return false;
		this.time = $time() - this.time;
		this.timer = $clear(this.timer);
		return true;
	},

	startTimer: function(){
		if (this.timer) return false;
		this.time = $time() - this.time;
		this.timer = this.step.periodical(Math.round(1000 / this.options.fps), this);
		return true;
	}

});

Fx.compute = function(from, to, delta){
	return (to - from) * delta + from;
};

Fx.Durations = {'short': 250, 'normal': 500, 'long': 1000};


/*
Script: Fx.CSS.js
	Contains the CSS animation logic. Used by Fx.Tween, Fx.Morph, Fx.Elements.

License:
	MIT-style license.
*/

Fx.CSS = new Class({

	Extends: Fx,

	//prepares the base from/to object

	prepare: function(element, property, values){
		values = $splat(values);
		var values1 = values[1];
		if (!$chk(values1)){
			values[1] = values[0];
			values[0] = element.getStyle(property);
		}
		var parsed = values.map(this.parse);
		return {from: parsed[0], to: parsed[1]};
	},

	//parses a value into an array

	parse: function(value){
		value = $lambda(value)();
		value = (typeof value == 'string') ? value.split(' ') : $splat(value);
		return value.map(function(val){
			val = String(val);
			var found = false;
			Fx.CSS.Parsers.each(function(parser, key){
				if (found) return;
				var parsed = parser.parse(val);
				if ($chk(parsed)) found = {value: parsed, parser: parser};
			});
			found = found || {value: val, parser: Fx.CSS.Parsers.String};
			return found;
		});
	},

	//computes by a from and to prepared objects, using their parsers.

	compute: function(from, to, delta){
		var computed = [];
		(Math.min(from.length, to.length)).times(function(i){
			computed.push({value: from[i].parser.compute(from[i].value, to[i].value, delta), parser: from[i].parser});
		});
		computed.$family = {name: 'fx:css:value'};
		return computed;
	},

	//serves the value as settable

	serve: function(value, unit){
		if ($type(value) != 'fx:css:value') value = this.parse(value);
		var returned = [];
		value.each(function(bit){
			returned = returned.concat(bit.parser.serve(bit.value, unit));
		});
		return returned;
	},

	//renders the change to an element

	render: function(element, property, value, unit){
		element.setStyle(property, this.serve(value, unit));
	},

	//searches inside the page css to find the values for a selector

	search: function(selector){
		if (Fx.CSS.Cache[selector]) return Fx.CSS.Cache[selector];
		var to = {};
		Array.each(document.styleSheets, function(sheet, j){
			var href = sheet.href;
			if (href && href.contains('://') && !href.contains(document.domain)) return;
			var rules = sheet.rules || sheet.cssRules;
			Array.each(rules, function(rule, i){
				if (!rule.style) return;
				var selectorText = (rule.selectorText) ? rule.selectorText.replace(/^\w+/, function(m){
					return m.toLowerCase();
				}) : null;
				if (!selectorText || !selectorText.test('^' + selector + '$')) return;
				Element.Styles.each(function(value, style){
					if (!rule.style[style] || Element.ShortStyles[style]) return;
					value = String(rule.style[style]);
					to[style] = (value.test(/^rgb/)) ? value.rgbToHex() : value;
				});
			});
		});
		return Fx.CSS.Cache[selector] = to;
	}

});

Fx.CSS.Cache = {};

Fx.CSS.Parsers = new Hash({

	Color: {
		parse: function(value){
			if (value.match(/^#[0-9a-f]{3,6}$/i)) return value.hexToRgb(true);
			return ((value = value.match(/(\d+),\s*(\d+),\s*(\d+)/))) ? [value[1], value[2], value[3]] : false;
		},
		compute: function(from, to, delta){
			return from.map(function(value, i){
				return Math.round(Fx.compute(from[i], to[i], delta));
			});
		},
		serve: function(value){
			return value.map(Number);
		}
	},

	Number: {
		parse: parseFloat,
		compute: Fx.compute,
		serve: function(value, unit){
			return (unit) ? value + unit : value;
		}
	},

	String: {
		parse: $lambda(false),
		compute: $arguments(1),
		serve: $arguments(0)
	}

});


/*
Script: Fx.Tween.js
	Formerly Fx.Style, effect to transition any CSS property for an element.

License:
	MIT-style license.
*/

Fx.Tween = new Class({

	Extends: Fx.CSS,

	initialize: function(element, options){
		this.element = this.subject = document.id(element);
		this.parent(options);
	},

	set: function(property, now){
		if (arguments.length == 1){
			now = property;
			property = this.property || this.options.property;
		}
		this.render(this.element, property, now, this.options.unit);
		return this;
	},

	start: function(property, from, to){
		if (!this.check(property, from, to)) return this;
		var args = Array.flatten(arguments);
		this.property = this.options.property || args.shift();
		var parsed = this.prepare(this.element, this.property, args);
		return this.parent(parsed.from, parsed.to);
	}

});

Element.Properties.tween = {

	set: function(options){
		var tween = this.retrieve('tween');
		if (tween) tween.cancel();
		return this.eliminate('tween').store('tween:options', $extend({link: 'cancel'}, options));
	},

	get: function(options){
		if (options || !this.retrieve('tween')){
			if (options || !this.retrieve('tween:options')) this.set('tween', options);
			this.store('tween', new Fx.Tween(this, this.retrieve('tween:options')));
		}
		return this.retrieve('tween');
	}

};

Element.implement({

	tween: function(property, from, to){
		this.get('tween').start(arguments);
		return this;
	},

	fade: function(how){
		var fade = this.get('tween'), o = 'opacity', toggle;
		how = $pick(how, 'toggle');
		switch (how){
			case 'in': fade.start(o, 1); break;
			case 'out': fade.start(o, 0); break;
			case 'show': fade.set(o, 1); break;
			case 'hide': fade.set(o, 0); break;
			case 'toggle':
				var flag = this.retrieve('fade:flag', this.get('opacity') == 1);
				fade.start(o, (flag) ? 0 : 1);
				this.store('fade:flag', !flag);
				toggle = true;
			break;
			default: fade.start(o, arguments);
		}
		if (!toggle) this.eliminate('fade:flag');
		return this;
	},

	highlight: function(start, end){
		if (!end){
			end = this.retrieve('highlight:original', this.getStyle('background-color'));
			end = (end == 'transparent') ? '#fff' : end;
		}
		var tween = this.get('tween');
		tween.start('background-color', start || '#ffff88', end).chain(function(){
			this.setStyle('background-color', this.retrieve('highlight:original'));
			tween.callChain();
		}.bind(this));
		return this;
	}

});


/*
Script: Fx.Morph.js
	Formerly Fx.Styles, effect to transition any number of CSS properties for an element using an object of rules, or CSS based selector rules.

License:
	MIT-style license.
*/

Fx.Morph = new Class({

	Extends: Fx.CSS,

	initialize: function(element, options){
		this.element = this.subject = document.id(element);
		this.parent(options);
	},

	set: function(now){
		if (typeof now == 'string') now = this.search(now);
		for (var p in now) this.render(this.element, p, now[p], this.options.unit);
		return this;
	},

	compute: function(from, to, delta){
		var now = {};
		for (var p in from) now[p] = this.parent(from[p], to[p], delta);
		return now;
	},

	start: function(properties){
		if (!this.check(properties)) return this;
		if (typeof properties == 'string') properties = this.search(properties);
		var from = {}, to = {};
		for (var p in properties){
			var parsed = this.prepare(this.element, p, properties[p]);
			from[p] = parsed.from;
			to[p] = parsed.to;
		}
		return this.parent(from, to);
	}

});

Element.Properties.morph = {

	set: function(options){
		var morph = this.retrieve('morph');
		if (morph) morph.cancel();
		return this.eliminate('morph').store('morph:options', $extend({link: 'cancel'}, options));
	},

	get: function(options){
		if (options || !this.retrieve('morph')){
			if (options || !this.retrieve('morph:options')) this.set('morph', options);
			this.store('morph', new Fx.Morph(this, this.retrieve('morph:options')));
		}
		return this.retrieve('morph');
	}

};

Element.implement({

	morph: function(props){
		this.get('morph').start(props);
		return this;
	}

});


/*
Script: Fx.Transitions.js
	Contains a set of advanced transitions to be used with any of the Fx Classes.

License:
	MIT-style license.

Credits:
	Easing Equations by Robert Penner, <http://www.robertpenner.com/easing/>, modified and optimized to be used with MooTools.
*/

Fx.implement({

	getTransition: function(){
		var trans = this.options.transition || Fx.Transitions.Sine.easeInOut;
		if (typeof trans == 'string'){
			var data = trans.split(':');
			trans = Fx.Transitions;
			trans = trans[data[0]] || trans[data[0].capitalize()];
			if (data[1]) trans = trans['ease' + data[1].capitalize() + (data[2] ? data[2].capitalize() : '')];
		}
		return trans;
	}

});

Fx.Transition = function(transition, params){
	params = $splat(params);
	return $extend(transition, {
		easeIn: function(pos){
			return transition(pos, params);
		},
		easeOut: function(pos){
			return 1 - transition(1 - pos, params);
		},
		easeInOut: function(pos){
			return (pos <= 0.5) ? transition(2 * pos, params) / 2 : (2 - transition(2 * (1 - pos), params)) / 2;
		}
	});
};

Fx.Transitions = new Hash({

	linear: $arguments(0)

});

Fx.Transitions.extend = function(transitions){
	for (var transition in transitions) Fx.Transitions[transition] = new Fx.Transition(transitions[transition]);
};

Fx.Transitions.extend({

	Pow: function(p, x){
		return Math.pow(p, x[0] || 6);
	},

	Expo: function(p){
		return Math.pow(2, 8 * (p - 1));
	},

	Circ: function(p){
		return 1 - Math.sin(Math.acos(p));
	},

	Sine: function(p){
		return 1 - Math.sin((1 - p) * Math.PI / 2);
	},

	Back: function(p, x){
		x = x[0] || 1.618;
		return Math.pow(p, 2) * ((x + 1) * p - x);
	},

	Bounce: function(p){
		var value;
		for (var a = 0, b = 1; 1; a += b, b /= 2){
			if (p >= (7 - 4 * a) / 11){
				value = b * b - Math.pow((11 - 6 * a - 11 * p) / 4, 2);
				break;
			}
		}
		return value;
	},

	Elastic: function(p, x){
		return Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * (x[0] || 1) / 3);
	}

});

['Quad', 'Cubic', 'Quart', 'Quint'].each(function(transition, i){
	Fx.Transitions[transition] = new Fx.Transition(function(p){
		return Math.pow(p, [i + 2]);
	});
});


/*
Script: Request.js
	Powerful all purpose Request Class. Uses XMLHTTPRequest.

License:
	MIT-style license.
*/

var Request = new Class({

	Implements: [Chain, Events, Options],

	options: {/*
		onRequest: $empty,
		onComplete: $empty,
		onCancel: $empty,
		onSuccess: $empty,
		onFailure: $empty,
		onException: $empty,*/
		url: '',
		data: '',
		headers: {
			'X-Requested-With': 'XMLHttpRequest',
			'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
		},
		async: true,
		format: false,
		method: 'post',
		link: 'ignore',
		isSuccess: null,
		emulation: true,
		urlEncoded: true,
		encoding: 'utf-8',
		evalScripts: false,
		evalResponse: false,
		noCache: false
	},

	initialize: function(options){
		this.xhr = new Browser.Request();
		this.setOptions(options);
		this.options.isSuccess = this.options.isSuccess || this.isSuccess;
		this.headers = new Hash(this.options.headers);
	},

	onStateChange: function(){
		if (this.xhr.readyState != 4 || !this.running) return;
		this.running = false;
		this.status = 0;
		$try(function(){
			this.status = this.xhr.status;
		}.bind(this));
		this.xhr.onreadystatechange = $empty;
		if (this.options.isSuccess.call(this, this.status)){
			this.response = {text: this.xhr.responseText, xml: this.xhr.responseXML};
			this.success(this.response.text, this.response.xml);
		} else {
			this.response = {text: null, xml: null};
			this.failure();
		}
	},

	isSuccess: function(){
		return ((this.status >= 200) && (this.status < 300));
	},

	processScripts: function(text){
		if (this.options.evalResponse || (/(ecma|java)script/).test(this.getHeader('Content-type'))) return $exec(text);
		return text.stripScripts(this.options.evalScripts);
	},

	success: function(text, xml){
		this.onSuccess(this.processScripts(text), xml);
	},

	onSuccess: function(){
		this.fireEvent('complete', arguments).fireEvent('success', arguments).callChain();
	},

	failure: function(){
		this.onFailure();
	},

	onFailure: function(){
		this.fireEvent('complete').fireEvent('failure', this.xhr);
	},

	setHeader: function(name, value){
		this.headers.set(name, value);
		return this;
	},

	getHeader: function(name){
		return $try(function(){
			return this.xhr.getResponseHeader(name);
		}.bind(this));
	},

	check: function(){
		if (!this.running) return true;
		switch (this.options.link){
			case 'cancel': this.cancel(); return true;
			case 'chain': this.chain(this.caller.bind(this, arguments)); return false;
		}
		return false;
	},

	send: function(options){
		if (!this.check(options)) return this;
		this.running = true;

		var type = $type(options);
		if (type == 'string' || type == 'element') options = {data: options};

		var old = this.options;
		options = $extend({data: old.data, url: old.url, method: old.method}, options);
		var data = options.data, url = options.url, method = options.method.toLowerCase();

		switch ($type(data)){
			case 'element': data = document.id(data).toQueryString(); break;
			case 'object': case 'hash': data = Hash.toQueryString(data);
		}

		if (this.options.format){
			var format = 'format=' + this.options.format;
			data = (data) ? format + '&' + data : format;
		}

		if (this.options.emulation && !['get', 'post'].contains(method)){
			var _method = '_method=' + method;
			data = (data) ? _method + '&' + data : _method;
			method = 'post';
		}

		if (this.options.urlEncoded && method == 'post'){
			var encoding = (this.options.encoding) ? '; charset=' + this.options.encoding : '';
			this.headers.set('Content-type', 'application/x-www-form-urlencoded' + encoding);
		}

		if (this.options.noCache){
			var noCache = 'noCache=' + new Date().getTime();
			data = (data) ? noCache + '&' + data : noCache;
		}

		var trimPosition = url.lastIndexOf('/');
		if (trimPosition > -1 && (trimPosition = url.indexOf('#')) > -1) url = url.substr(0, trimPosition);

		if (data && method == 'get'){
			url = url + (url.contains('?') ? '&' : '?') + data;
			data = null;
		}

		this.xhr.open(method.toUpperCase(), url, this.options.async);

		this.xhr.onreadystatechange = this.onStateChange.bind(this);

		this.headers.each(function(value, key){
			try {
				this.xhr.setRequestHeader(key, value);
			} catch (e){
				this.fireEvent('exception', [key, value]);
			}
		}, this);

		this.fireEvent('request');
		this.xhr.send(data);
		if (!this.options.async) this.onStateChange();
		return this;
	},

	cancel: function(){
		if (!this.running) return this;
		this.running = false;
		this.xhr.abort();
		this.xhr.onreadystatechange = $empty;
		this.xhr = new Browser.Request();
		this.fireEvent('cancel');
		return this;
	}

});

(function(){

var methods = {};
['get', 'post', 'put', 'delete', 'GET', 'POST', 'PUT', 'DELETE'].each(function(method){
	methods[method] = function(){
		var params = Array.link(arguments, {url: String.type, data: $defined});
		return this.send($extend(params, {method: method}));
	};
});

Request.implement(methods);

})();

Element.Properties.send = {

	set: function(options){
		var send = this.retrieve('send');
		if (send) send.cancel();
		return this.eliminate('send').store('send:options', $extend({
			data: this, link: 'cancel', method: this.get('method') || 'post', url: this.get('action')
		}, options));
	},

	get: function(options){
		if (options || !this.retrieve('send')){
			if (options || !this.retrieve('send:options')) this.set('send', options);
			this.store('send', new Request(this.retrieve('send:options')));
		}
		return this.retrieve('send');
	}

};

Element.implement({

	send: function(url){
		var sender = this.get('send');
		sender.send({data: this, url: url || sender.options.url});
		return this;
	}

});


/*
Script: Request.HTML.js
	Extends the basic Request Class with additional methods for interacting with HTML responses.

License:
	MIT-style license.
*/

Request.HTML = new Class({

	Extends: Request,

	options: {
		update: false,
		append: false,
		evalScripts: true,
		filter: false
	},

	processHTML: function(text){
		var match = text.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
		text = (match) ? match[1] : text;

		var container = new Element('div');

		return $try(function(){
			var root = '<root>' + text + '</root>', doc;
			if (Browser.Engine.trident){
				doc = new ActiveXObject('Microsoft.XMLDOM');
				doc.async = false;
				doc.loadXML(root);
			} else {
				doc = new DOMParser().parseFromString(root, 'text/xml');
			}
			root = doc.getElementsByTagName('root')[0];
			if (!root) return null;
			for (var i = 0, k = root.childNodes.length; i < k; i++){
				var child = Element.clone(root.childNodes[i], true, true);
				if (child) container.grab(child);
			}
			return container;
		}) || container.set('html', text);
	},

	success: function(text){
		var options = this.options, response = this.response;

		response.html = text.stripScripts(function(script){
			response.javascript = script;
		});

		var temp = this.processHTML(response.html);

		response.tree = temp.childNodes;
		response.elements = temp.getElements('*');

		if (options.filter) response.tree = response.elements.filter(options.filter);
		if (options.update) document.id(options.update).empty().set('html', response.html);
		else if (options.append) document.id(options.append).adopt(temp.getChildren());
		if (options.evalScripts) $exec(response.javascript);

		this.onSuccess(response.tree, response.elements, response.html, response.javascript);
	}

});

Element.Properties.load = {

	set: function(options){
		var load = this.retrieve('load');
		if (load) load.cancel();
		return this.eliminate('load').store('load:options', $extend({data: this, link: 'cancel', update: this, method: 'get'}, options));
	},

	get: function(options){
		if (options || ! this.retrieve('load')){
			if (options || !this.retrieve('load:options')) this.set('load', options);
			this.store('load', new Request.HTML(this.retrieve('load:options')));
		}
		return this.retrieve('load');
	}

};

Element.implement({

	load: function(){
		this.get('load').send(Array.link(arguments, {data: Object.type, url: String.type}));
		return this;
	}

});


/*
Script: Request.JSON.js
	Extends the basic Request Class with additional methods for sending and receiving JSON data.

License:
	MIT-style license.
*/

Request.JSON = new Class({

	Extends: Request,

	options: {
		secure: true
	},

	initialize: function(options){
		this.parent(options);
		this.headers.extend({'Accept': 'application/json', 'X-Request': 'JSON'});
	},

	success: function(text){
		this.response.json = JSON.decode(text, this.options.secure);
		this.onSuccess(this.response.json, text);
	}

});
MooTools.More = {
	'version': '1.2.3.1'
};

/*
Script: MooTools.Lang.js
	Provides methods for localization.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

(function(){

	var data = {
		language: 'en-US',
		languages: {
			'en-US': {}
		},
		cascades: ['en-US']
	};

	var cascaded;

	MooTools.lang = new Events();

	$extend(MooTools.lang, {

		setLanguage: function(lang){
			if (!data.languages[lang]) return this;
			data.language = lang;
			this.load();
			this.fireEvent('langChange', lang);
			return this;
		},

		load: function() {
			var langs = this.cascade(this.getCurrentLanguage());
			cascaded = {};
			$each(langs, function(set, setName){
				cascaded[setName] = this.lambda(set);
			}, this);
		},

		getCurrentLanguage: function(){
			return data.language;
		},

		addLanguage: function(lang){
			data.languages[lang] = data.languages[lang] || {};
			return this;
		},

		cascade: function(lang){
			var cascades = (data.languages[lang] || {}).cascades || [];
			cascades.combine(data.cascades);
			cascades.erase(lang).push(lang);
			var langs = cascades.map(function(lng){
				return data.languages[lng];
			}, this);
			return $merge.apply(this, langs);
		},

		lambda: function(set) {
			(set || {}).get = function(key, args){
				return $lambda(set[key]).apply(this, $splat(args));
			};
			return set;
		},

		get: function(set, key, args){
			if (cascaded && cascaded[set]) return (key ? cascaded[set].get(key, args) : cascaded[set]);
		},

		set: function(lang, set, members){
			this.addLanguage(lang);
			langData = data.languages[lang];
			if (!langData[set]) langData[set] = {};
			$extend(langData[set], members);
			if (lang == this.getCurrentLanguage()){
				this.load();
				this.fireEvent('langChange', lang);
			}
			return this;
		},

		list: function(){
			return Hash.getKeys(data.languages);
		}

	});

})();

/*
Script: Log.js
	Provides basic logging functionality for plugins to implement.

	License:
		MIT-style license.

	Authors:
		Guillermo Rauch
*/

var Log = new Class({

	log: function(){
		Log.logger.call(this, arguments);
	}

});

Log.logged = [];

Log.logger = function(){
	if(window.console && console.log) console.log.apply(console, arguments);
	else Log.logged.push(arguments);
};

/*
Script: Class.Refactor.js
	Extends a class onto itself with new property, preserving any items attached to the class's namespace.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

Class.refactor = function(original, refactors){

	$each(refactors, function(item, name){
		var origin = original.prototype[name];
		if (origin && (origin = origin._origin) && typeof item == 'function') original.implement(name, function(){
			var old = this.previous;
			this.previous = origin;
			var value = item.apply(this, arguments);
			this.previous = old;
			return value;
		}); else original.implement(name, item);
	});

	return original;

};

/*
Script: Class.Binds.js
	Automagically binds specified methods in a class to the instance of the class.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

Class.Mutators.Binds = function(binds){
    return binds;
};

Class.Mutators.initialize = function(initialize){
	return function(){
		$splat(this.Binds).each(function(name){
			var original = this[name];
			if (original) this[name] = original.bind(this);
		}, this);
		return initialize.apply(this, arguments);
	};
};

/*
Script: Class.Occlude.js
	Prevents a class from being applied to a DOM element twice.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

Class.Occlude = new Class({

	occlude: function(property, element){
		element = document.id(element || this.element);
		var instance = element.retrieve(property || this.property);
		if (instance && !$defined(this.occluded)){
			this.occluded = instance;
		} else {
			this.occluded = false;
			element.store(property || this.property, this);
		}
		return this.occluded;
	}

});

/*
Script: Chain.Wait.js
	Adds a method to inject pauses between chained events.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

(function(){

	var wait = {
		wait: function(duration){
			return this.chain(function(){
				this.callChain.delay($pick(duration, 500), this);
			}.bind(this));
		}
	};

	Chain.implement(wait);

	if (window.Fx){
		Fx.implement(wait);
		['Css', 'Tween', 'Elements'].each(function(cls){
			if (Fx[cls]) Fx[cls].implement(wait);
		});
	}

	try {
		Element.implement({
			chains: function(effects){
				$splat($pick(effects, ['tween', 'morph', 'reveal'])).each(function(effect){
					effect = this.get(effect);
					if (!effect) return;
					effect.setOptions({
						link:'chain'
					});
				}, this);
				return this;
			},
			pauseFx: function(duration, effect){
				this.chains(effect).get($pick(effect, 'tween')).wait(duration);
				return this;
			}
		});
	} catch(e){}

})();

/*
Script: Array.Extras.js
	Extends the Array native object to include useful methods to work with arrays.

	License:
		MIT-style license.

	Authors:
		Christoph Pojer

*/
Array.implement({

	min: function(){
		return Math.min.apply(null, this);
	},

	max: function(){
		return Math.max.apply(null, this);
	},

	average: function(){
		return this.length ? this.sum() / this.length : 0;
	},

	sum: function(){
		var result = 0, l = this.length;
		if (l){
			do {
				result += this[--l];
			} while (l);
		}
		return result;
	},

	unique: function(){
		return [].combine(this);
	}

});

/*
Script: Date.js
	Extends the Date native object to include methods useful in managing dates.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
		Nicholas Barthelemy - https://svn.nbarthelemy.com/date-js/
		Harald Kirshner - mail [at] digitarald.de; http://digitarald.de
		Scott Kyle - scott [at] appden.com; http://appden.com

*/

(function(){

if (!Date.now) Date.now = $time;

Date.Methods = {};

['Date', 'Day', 'FullYear', 'Hours', 'Milliseconds', 'Minutes', 'Month', 'Seconds', 'Time', 'TimezoneOffset',
	'Week', 'Timezone', 'GMTOffset', 'DayOfYear', 'LastMonth', 'LastDayOfMonth', 'UTCDate', 'UTCDay', 'UTCFullYear',
	'AMPM', 'Ordinal', 'UTCHours', 'UTCMilliseconds', 'UTCMinutes', 'UTCMonth', 'UTCSeconds'].each(function(method){
	Date.Methods[method.toLowerCase()] = method;
});

$each({
	ms: 'Milliseconds',
	year: 'FullYear',
	min: 'Minutes',
	mo: 'Month',
	sec: 'Seconds',
	hr: 'Hours'
}, function(value, key){
	Date.Methods[key] = value;
});

var zeroize = function(what, length){
	return new Array(length - what.toString().length + 1).join('0') + what;
};

Date.implement({

	set: function(prop, value){
		switch ($type(prop)){
			case 'object':
				for (var p in prop) this.set(p, prop[p]);
				break;
			case 'string':
				prop = prop.toLowerCase();
				var m = Date.Methods;
				if (m[prop]) this['set' + m[prop]](value);
		}
		return this;
	},

	get: function(prop){
		prop = prop.toLowerCase();
		var m = Date.Methods;
		if (m[prop]) return this['get' + m[prop]]();
		return null;
	},

	clone: function(){
		return new Date(this.get('time'));
	},

	increment: function(interval, times){
		interval = interval || 'day';
		times = $pick(times, 1);

		switch (interval){
			case 'year':
				return this.increment('month', times * 12);
			case 'month':
				var d = this.get('date');
				this.set('date', 1).set('mo', this.get('mo') + times);
				return this.set('date', d.min(this.get('lastdayofmonth')));
			case 'week':
				return this.increment('day', times * 7);
			case 'day':
				return this.set('date', this.get('date') + times);
		}

		if (!Date.units[interval]) throw new Error(interval + ' is not a supported interval');

		return this.set('time', this.get('time') + times * Date.units[interval]());
	},

	decrement: function(interval, times){
		return this.increment(interval, -1 * $pick(times, 1));
	},

	isLeapYear: function(){
		return Date.isLeapYear(this.get('year'));
	},

	clearTime: function(){
		return this.set({hr: 0, min: 0, sec: 0, ms: 0});
	},

	diff: function(d, resolution){
		resolution = resolution || 'day';
		if ($type(d) == 'string') d = Date.parse(d);

		switch (resolution){
			case 'year':
				return d.get('year') - this.get('year');
			case 'month':
				var months = (d.get('year') - this.get('year')) * 12;
				return months + d.get('mo') - this.get('mo');
			default:
				var diff = d.get('time') - this.get('time');
				if (Date.units[resolution]() > diff.abs()) return 0;
				return ((d.get('time') - this.get('time')) / Date.units[resolution]()).round();
		}

		return null;
	},

	getLastDayOfMonth: function(){
		return Date.daysInMonth(this.get('mo'), this.get('year'));
	},

	getDayOfYear: function(){
		return (Date.UTC(this.get('year'), this.get('mo'), this.get('date') + 1)
			- Date.UTC(this.get('year'), 0, 1)) / Date.units.day();
	},

	getWeek: function(){
		return (this.get('dayofyear') / 7).ceil();
	},

	getOrdinal: function(day){
		return Date.getMsg('ordinal', day || this.get('date'));
	},

	getTimezone: function(){
		return this.toString()
			.replace(/^.*? ([A-Z]{3}).[0-9]{4}.*$/, '$1')
			.replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/, '$1$2$3');
	},

	getGMTOffset: function(){
		var off = this.get('timezoneOffset');
		return ((off > 0) ? '-' : '+') + zeroize((off.abs() / 60).floor(), 2) + zeroize(off % 60, 2);
	},

	setAMPM: function(ampm){
		ampm = ampm.toUpperCase();
		var hr = this.get('hr');
		if (hr > 11 && ampm == 'AM') return this.decrement('hour', 12);
		else if (hr < 12 && ampm == 'PM') return this.increment('hour', 12);
		return this;
	},

	getAMPM: function(){
		return (this.get('hr') < 12) ? 'AM' : 'PM';
	},

	parse: function(str){
		this.set('time', Date.parse(str));
		return this;
	},

	isValid: function(date) {
		return !!(date || this).valueOf();
	},

	format: function(f){
		if (!this.isValid()) return 'invalid date';
		f = f || '%x %X';
		f = formats[f.toLowerCase()] || f; // replace short-hand with actual format
		var d = this;
		return f.replace(/%([a-z%])/gi,
			function($1, $2){
				switch ($2){
					case 'a': return Date.getMsg('days')[d.get('day')].substr(0, 3);
					case 'A': return Date.getMsg('days')[d.get('day')];
					case 'b': return Date.getMsg('months')[d.get('month')].substr(0, 3);
					case 'B': return Date.getMsg('months')[d.get('month')];
					case 'c': return d.toString();
					case 'd': return zeroize(d.get('date'), 2);
					case 'H': return zeroize(d.get('hr'), 2);
					case 'I': return ((d.get('hr') % 12) || 12);
					case 'j': return zeroize(d.get('dayofyear'), 3);
					case 'm': return zeroize((d.get('mo') + 1), 2);
					case 'M': return zeroize(d.get('min'), 2);
					case 'o': return d.get('ordinal');
					case 'p': return Date.getMsg(d.get('ampm'));
					case 'S': return zeroize(d.get('seconds'), 2);
					case 'U': return zeroize(d.get('week'), 2);
					case 'w': return d.get('day');
					case 'x': return d.format(Date.getMsg('shortDate'));
					case 'X': return d.format(Date.getMsg('shortTime'));
					case 'y': return d.get('year').toString().substr(2);
					case 'Y': return d.get('year');
					case 'T': return d.get('GMTOffset');
					case 'Z': return d.get('Timezone');
				}
				return $2;
			}
		);
	},

	toISOString: function(){
		return this.format('iso8601');
	}

});

Date.alias('diff', 'compare');
Date.alias('format', 'strftime');

var formats = {
	db: '%Y-%m-%d %H:%M:%S',
	compact: '%Y%m%dT%H%M%S',
	iso8601: '%Y-%m-%dT%H:%M:%S%T',
	rfc822: '%a, %d %b %Y %H:%M:%S %Z',
	'short': '%d %b %H:%M',
	'long': '%B %d, %Y %H:%M'
};

var nativeParse = Date.parse;

var parseWord = function(type, word, num){
	var ret = -1;
	var translated = Date.getMsg(type + 's');

	switch ($type(word)){
		case 'object':
			ret = translated[word.get(type)];
			break;
		case 'number':
			ret = translated[month - 1];
			if (!ret) throw new Error('Invalid ' + type + ' index: ' + index);
			break;
		case 'string':
			var match = translated.filter(function(name){
				return this.test(name);
			}, new RegExp('^' + word, 'i'));
			if (!match.length)    throw new Error('Invalid ' + type + ' string');
			if (match.length > 1) throw new Error('Ambiguous ' + type);
			ret = match[0];
	}

	return (num) ? translated.indexOf(ret) : ret;
};


Date.extend({

	getMsg: function(key, args) {
		return MooTools.lang.get('Date', key, args);
	},

	units: {
		ms: $lambda(1),
		second: $lambda(1000),
		minute: $lambda(60000),
		hour: $lambda(3600000),
		day: $lambda(86400000),
		week: $lambda(608400000),
		month: function(month, year){
			var d = new Date;
			return Date.daysInMonth($pick(month, d.get('mo')), $pick(year, d.get('year'))) * 86400000;
		},
		year: function(year){
			year = year || new Date().get('year');
			return Date.isLeapYear(year) ? 31622400000 : 31536000000;
		}
	},

	daysInMonth: function(month, year){
		return [31, Date.isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
	},

	isLeapYear: function(year){
		return new Date(year, 1, 29).get('date') == 29;
	},

	parse: function(from){
		var t = $type(from);
		if (t == 'number') return new Date(from);
		if (t != 'string') return from;
		from = from.clean();
		if (!from.length) return null;

		var parsed;
		Date.parsePatterns.some(function(pattern){
			var r = pattern.re.exec(from);
			return (r) ? (parsed = pattern.handler(r)) : false;
		});

		return parsed || new Date(nativeParse(from));
	},

	parseDay: function(day, num){
		return parseWord('day', day, num);
	},

	parseMonth: function(month, num){
		return parseWord('month', month, num);
	},

	parseUTC: function(value){
		var localDate = new Date(value);
		var utcSeconds = Date.UTC(localDate.get('year'),
		localDate.get('mo'),
		localDate.get('date'),
		localDate.get('hr'),
		localDate.get('min'),
		localDate.get('sec'));
		return new Date(utcSeconds);
	},

	orderIndex: function(unit){
		return Date.getMsg('dateOrder').indexOf(unit) + 1;
	},

	defineFormat: function(name, format){
		formats[name] = format;
	},

	defineFormats: function(formats){
		for (var name in formats) Date.defineFormat(name, formats[f]);
	},

	parsePatterns: [],

	defineParser: function(pattern){
		Date.parsePatterns.push( pattern.re && pattern.handler ? pattern : build(pattern) );
	},

	defineParsers: function(){
		Array.flatten(arguments).each(Date.defineParser);
	},

	define2DigitYearStart: function(year){
		yr_start = year % 100;
		yr_base = year - yr_start;
	}

});

var yr_base = 1900;
var yr_start = 70;

var replacers = function(key){
	switch(key){
		case 'x': // iso8601 covers yyyy-mm-dd, so just check if month is first
			return (Date.orderIndex('month') == 1) ? '%m[.-/]%d([.-/]%y)?' : '%d[.-/]%m([.-/]%y)?';
		case 'X':
			return '%H([.:]%M)?([.:]%S([.:]%s)?)?\\s?%p?\\s?%T?';
		case 'o':
			return '[^\\d\\s]*';
	}
	return null;
};

var keys = {
	a: /[a-z]{3,}/,
	d: /[0-2]?[0-9]|3[01]/,
	H: /[01]?[0-9]|2[0-3]/,
	I: /0?[1-9]|1[0-2]/,
	M: /[0-5]?\d/,
	s: /\d+/,
	p: /[ap]\.?m\.?/,
	y: /\d{2}|\d{4}/,
	Y: /\d{4}/,
	T: /Z|[+-]\d{2}(?::?\d{2})?/
};

keys.B = keys.b = keys.A = keys.a;
keys.m = keys.I;
keys.S = keys.M;

var lang;

var build = function(format){
	if (!lang) return {format: format}; // wait until language is set

	var parsed = [null];

	var re = (format.source || format) // allow format to be regex
	 .replace(/%([a-z])/gi,
		function($1, $2){
			return replacers($2) || $1;
		}
	).replace(/\((?!\?)/g, '(?:') // make all groups non-capturing
	 .replace(/ (?!\?|\*)/g, ',? ') // be forgiving with spaces and commas
	 .replace(/%([a-z%])/gi,
		function($1, $2){
			var p = keys[$2];
			if (!p) return $2;
			parsed.push($2);
			return '(' + p.source + ')';
		}
	);

	return {
		format: format,
		re: new RegExp('^' + re + '$', 'i'),
		handler: function(bits){
			var date = new Date().clearTime();
			for (var i = 1; i < parsed.length; i++)
				date = handle.call(date, parsed[i], bits[i]);
			return date;
		}
	};
};

var handle = function(key, value){
	if (!value){
		if (key == 'm' || key == 'd') value = 1;
		else return this;
	}

	switch(key){
		case 'a': case 'A': return this.set('day', Date.parseDay(value, true));
		case 'b': case 'B': return this.set('mo', Date.parseMonth(value, true));
		case 'd': return this.set('date', value);
		case 'H': case 'I': return this.set('hr', value);
		case 'm': return this.set('mo', value - 1);
		case 'M': return this.set('min', value);
		case 'p': return this.set('ampm', value.replace(/\./g, ''));
		case 'S': return this.set('sec', value);
		case 's': return this.set('ms', ('0.' + value) * 1000);
		case 'w': return this.set('day', value);
		case 'Y': return this.set('year', value);
		case 'y':
			value = +value;
			if (value < 100) value += yr_base + (value < yr_start ? 100 : 0);
			return this.set('year', value);
		case 'T':
			if (value == 'Z') value = '+00';
			var offset = value.match(/([+-])(\d{2}):?(\d{2})?/);
			offset = (offset[1] + '1') * (offset[2] * 60 + (+offset[3] || 0)) + this.getTimezoneOffset();
			return this.set('time', (this * 1) - offset * 60000);
	}

	return this;
};

Date.defineParsers(
	'%Y([-./]%m([-./]%d((T| )%X)?)?)?', // "1999-12-31", "1999-12-31 11:59pm", "1999-12-31 23:59:59", ISO8601
	'%Y%m%d(T%H(%M%S?)?)?', // "19991231", "19991231T1159", compact
	'%x( %X)?', // "12/31", "12.31.99", "12-31-1999", "12/31/2008 11:59 PM"
	'%d%o( %b( %Y)?)?( %X)?', // "31st", "31st December", "31 Dec 1999", "31 Dec 1999 11:59pm"
	'%b %d%o?( %Y)?( %X)?', // Same as above with month and day switched
	'%b %Y' // "December 1999"
);

MooTools.lang.addEvent('langChange', function(language){
	if (!MooTools.lang.get('Date')) return;

	lang = language;
	Date.parsePatterns.each(function(pattern, i){
		if (pattern.format) Date.parsePatterns[i] = build(pattern.format);
	});

}).fireEvent('langChange', MooTools.lang.getCurrentLanguage());

})();

/*
Script: Date.Extras.js
	Extends the Date native object to include extra methods (on top of those in Date.js).

	License:
		MIT-style license.

	Authors:
		Aaron Newton

*/

Date.implement({

	timeDiffInWords: function(relative_to){
		return Date.distanceOfTimeInWords(this, relative_to || new Date);
	}

});

Date.alias('timeDiffInWords', 'timeAgoInWords');

Date.extend({

	distanceOfTimeInWords: function(from, to){
		return Date.getTimePhrase(((to - from) / 1000).toInt());
	},

	getTimePhrase: function(delta){
		var suffix = (delta < 0) ? 'Until' : 'Ago';
		if (delta < 0) delta *= -1;

		var msg = (delta < 60) ? 'lessThanMinute' :
				  (delta < 120) ? 'minute' :
				  (delta < (45 * 60)) ? 'minutes' :
				  (delta < (90 * 60)) ? 'hour' :
				  (delta < (24 * 60 * 60)) ? 'hours' :
				  (delta < (48 * 60 * 60)) ? 'day' :
				  'days';

		switch(msg){
			case 'minutes': delta = (delta / 60).round(); break;
			case 'hours':   delta = (delta / 3600).round(); break;
			case 'days': 	delta = (delta / 86400).round();
		}

		return Date.getMsg(msg + suffix, delta).substitute({delta: delta});
	}

});


Date.defineParsers(

	{
		// "today", "tomorrow", "yesterday"
		re: /^tod|tom|yes/i,
		handler: function(bits){
			var d = new Date().clearTime();
			switch(bits[0]){
				case 'tom': return d.increment();
				case 'yes': return d.decrement();
				default: 	return d;
			}
		}
	},

	{
		// "next Wednesday", "last Thursday"
		re: /^(next|last) ([a-z]+)$/i,
		handler: function(bits){
			var d = new Date().clearTime();
			var day = d.getDay();
			var newDay = Date.parseDay(bits[2], true);
			var addDays = newDay - day;
			if (newDay <= day) addDays += 7;
			if (bits[1] == 'last') addDays -= 7;
			return d.set('date', d.getDate() + addDays);
		}
	}

);


/*
Script: Hash.Extras.js
	Extends the Hash native object to include getFromPath which allows a path notation to child elements.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

Hash.implement({

	getFromPath: function(notation){
		var source = this.getClean();
		notation.replace(/\[([^\]]+)\]|\.([^.[]+)|[^[.]+/g, function(match){
			if (!source) return null;
			var prop = arguments[2] || arguments[1] || arguments[0];
			source = (prop in source) ? source[prop] : null;
			return match;
		});
		return source;
	},

	cleanValues: function(method){
		method = method || $defined;
		this.each(function(v, k){
			if (!method(v)) this.erase(k);
		}, this);
		return this;
	},

	run: function(){
		var args = arguments;
		this.each(function(v, k){
			if ($type(v) == 'function') v.run(args);
		});
	}

});

/*
Script: String.Extras.js
	Extends the String native object to include methods useful in managing various kinds of strings (query strings, urls, html, etc).

	License:
		MIT-style license.

	Authors:
		Aaron Newton
		Guillermo Rauch

*/

(function(){

var special = ['À','à','Á','á','Â','â','Ã','ã','Ä','ä','Å','å','Ă','ă','Ą','ą','Ć','ć','Č','č','Ç','ç', 'Ď','ď','Đ','đ', 'È','è','É','é','Ê','ê','Ë','ë','Ě','ě','Ę','ę', 'Ğ','ğ','Ì','ì','Í','í','Î','î','Ï','ï', 'Ĺ','ĺ','Ľ','ľ','Ł','ł', 'Ñ','ñ','Ň','ň','Ń','ń','Ò','ò','Ó','ó','Ô','ô','Õ','õ','Ö','ö','Ø','ø','ő','Ř','ř','Ŕ','ŕ','Š','š','Ş','ş','Ś','ś', 'Ť','ť','Ť','ť','Ţ','ţ','Ù','ù','Ú','ú','Û','û','Ü','ü','Ů','ů', 'Ÿ','ÿ','ý','Ý','Ž','ž','Ź','ź','Ż','ż', 'Þ','þ','Ð','ð','ß','Œ','œ','Æ','æ','µ'];

var standard = ['A','a','A','a','A','a','A','a','Ae','ae','A','a','A','a','A','a','C','c','C','c','C','c','D','d','D','d', 'E','e','E','e','E','e','E','e','E','e','E','e','G','g','I','i','I','i','I','i','I','i','L','l','L','l','L','l', 'N','n','N','n','N','n', 'O','o','O','o','O','o','O','o','Oe','oe','O','o','o', 'R','r','R','r', 'S','s','S','s','S','s','T','t','T','t','T','t', 'U','u','U','u','U','u','Ue','ue','U','u','Y','y','Y','y','Z','z','Z','z','Z','z','TH','th','DH','dh','ss','OE','oe','AE','ae','u'];

var tidymap = {
	"[\xa0\u2002\u2003\u2009]": " ",
	"\xb7": "*",
	"[\u2018\u2019]": "'",
	"[\u201c\u201d]": '"',
	"\u2026": "...",
	"\u2013": "-",
	"\u2014": "--",
	"\uFFFD": "&raquo;"
};

String.implement({

	standardize: function(){
		var text = this;
		special.each(function(ch, i){
			text = text.replace(new RegExp(ch, 'g'), standard[i]);
		});
		return text;
	},

	repeat: function(times){
		return new Array(times + 1).join(this);
	},

	pad: function(length, str, dir){
		if (this.length >= length) return this;
		str = str || ' ';
		var pad = str.repeat(length - this.length).substr(0, length - this.length);
		if (!dir || dir == 'right') return this + pad;
		if (dir == 'left') return pad + this;
		return pad.substr(0, (pad.length / 2).floor()) + this + pad.substr(0, (pad.length / 2).ceil());
	},

	stripTags: function(){
		return this.replace(/<\/?[^>]+>/gi, '');
	},

	tidy: function(){
		var txt = this.toString();
		$each(tidymap, function(value, key){
			txt = txt.replace(new RegExp(key, 'g'), value);
		});
		return txt;
	}

});

})();

/*
Script: String.QueryString.js
	...

	License:
		MIT-style license.

	Authors:
		Sebastian Markbåge, Aaron Newton, Lennart Pilon, Valerio Proietti
*/

String.implement({

	parseQueryString: function(){
		var vars = this.split(/[&;]/), res = {};
		if (vars.length) vars.each(function(val){
			var index = val.indexOf('='),
				keys = index < 0 ? [''] : val.substr(0, index).match(/[^\]\[]+/g),
				value = decodeURIComponent(val.substr(index + 1)),
				obj = res;
			keys.each(function(key, i){
				var current = obj[key];
				if(i < keys.length - 1)
					obj = obj[key] = current || {};
				else if($type(current) == 'array')
					current.push(value);
				else
					obj[key] = $defined(current) ? [current, value] : value;
			});
		});
		return res;
	},

	cleanQueryString: function(method){
		return this.split('&').filter(function(val){
			var index = val.indexOf('='),
			key = index < 0 ? '' : val.substr(0, index),
			value = val.substr(index + 1);
			return method ? method.run([key, value]) : $chk(value);
		}).join('&');
	}

});

/*
Script: URI.js
	Provides methods useful in managing the window location and uris.

	License:
		MIT-style license.

	Authors:
		Sebastian Markb�ge, Aaron Newton
*/

var URI = new Class({

	Implements: Options,

	/*
	options: {
		base: false
	},
	*/

	regex: /^(?:(\w+):)?(?:\/\/(?:(?:([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)?(\.\.?$|(?:[^?#\/]*\/)*)([^?#]*)(?:\?([^#]*))?(?:#(.*))?/,
	parts: ['scheme', 'user', 'password', 'host', 'port', 'directory', 'file', 'query', 'fragment'],
	schemes: { http: 80, https: 443, ftp: 21, rtsp: 554, mms: 1755, file: 0 },

	initialize: function(uri, options){
		this.setOptions(options);
		var base = this.options.base || URI.base;
		uri = uri || base;
		if (uri && uri.parsed)
			this.parsed = $unlink(uri.parsed);
		else
			this.set('value', uri.href || uri.toString(), base ? new URI(base) : false);
	},

	parse: function(value, base){
		var bits = value.match(this.regex);
		if (!bits) return false;
		bits.shift();
		return this.merge(bits.associate(this.parts), base);
	},

	merge: function(bits, base){
		if ((!bits || !bits.scheme) && (!base || !base.scheme)) return false;
		if (base){
			this.parts.every(function(part){
				if (bits[part]) return false;
				bits[part] = base[part] || '';
				return true;
			});
		}
		bits.port = bits.port || this.schemes[bits.scheme.toLowerCase()];
		bits.directory = bits.directory ? this.parseDirectory(bits.directory, base ? base.directory : '') : '/';
		return bits;
	},

	parseDirectory: function(directory, baseDirectory) {
		directory = (directory.substr(0, 1) == '/' ? '' : (baseDirectory || '/')) + directory;
		if (!directory.test(URI.regs.directoryDot)) return directory;
		var result = [];
		directory.replace(URI.regs.endSlash, '').split('/').each(function(dir){
			if (dir == '..' && result.length > 0) result.pop();
			else if (dir != '.') result.push(dir);
		});
		return result.join('/') + '/';
	},

	combine: function(bits){
		return bits.value || bits.scheme + '://' +
			(bits.user ? bits.user + (bits.password ? ':' + bits.password : '') + '@' : '') +
			(bits.host || '') + (bits.port && bits.port != this.schemes[bits.scheme] ? ':' + bits.port : '') +
			(bits.directory || '/') + (bits.file || '') +
			(bits.query ? '?' + bits.query : '') +
			(bits.fragment ? '#' + bits.fragment : '');
	},

	set: function(part, value, base){
		if (part == 'value'){
			var scheme = value.match(URI.regs.scheme);
			if (scheme) scheme = scheme[1];
			if (scheme && !$defined(this.schemes[scheme.toLowerCase()])) this.parsed = { scheme: scheme, value: value };
			else this.parsed = this.parse(value, (base || this).parsed) || (scheme ? { scheme: scheme, value: value } : { value: value });
		} else if (part == 'data') {
			this.setData(value);
		} else {
			this.parsed[part] = value;
		}
		return this;
	},

	get: function(part, base){
		switch(part){
			case 'value': return this.combine(this.parsed, base ? base.parsed : false);
			case 'data' : return this.getData();
		}
		return this.parsed[part] || undefined;
	},

	go: function(){
		document.location.href = this.toString();
	},

	toURI: function(){
		return this;
	},

	getData: function(key, part){
		var qs = this.get(part || 'query');
		if (!$chk(qs)) return key ? null : {};
		var obj = qs.parseQueryString();
		return key ? obj[key] : obj;
	},

	setData: function(values, merge, part){
		if ($type(arguments[0]) == 'string'){
			values = this.getData();
			values[arguments[0]] = arguments[1];
		} else if (merge) {
			values = $merge(this.getData(), values);
		}
		return this.set(part || 'query', Hash.toQueryString(values));
	},

	clearData: function(part){
		return this.set(part || 'query', '');
	}

});

['toString', 'valueOf'].each(function(method){
	URI.prototype[method] = function(){
		return this.get('value');
	};
});


URI.regs = {
	endSlash: /\/$/,
	scheme: /^(\w+):/,
	directoryDot: /\.\/|\.$/
};

URI.base = new URI($$('base[href]').getLast(), { base: document.location });

String.implement({

	toURI: function(options){ return new URI(this, options); }

});

/*
Script: URI.Relative.js
	Extends the URI class to add methods for computing relative and absolute urls.

	License:
		MIT-style license.

	Authors:
		Sebastian Markbåge
*/

URI = Class.refactor(URI, {

	combine: function(bits, base){
		if (!base || bits.scheme != base.scheme || bits.host != base.host || bits.port != base.port)
			return this.previous.apply(this, arguments);
		var end = bits.file + (bits.query ? '?' + bits.query : '') + (bits.fragment ? '#' + bits.fragment : '');

		if (!base.directory) return (bits.directory || (bits.file ? '' : './')) + end;

		var baseDir = base.directory.split('/'),
			relDir = bits.directory.split('/'),
			path = '',
			offset;

		var i = 0;
		for(offset = 0; offset < baseDir.length && offset < relDir.length && baseDir[offset] == relDir[offset]; offset++);
		for(i = 0; i < baseDir.length - offset - 1; i++) path += '../';
		for(i = offset; i < relDir.length - 1; i++) path += relDir[i] + '/';

		return (path || (bits.file ? '' : './')) + end;
	},

	toAbsolute: function(base){
		base = new URI(base);
		if (base) base.set('directory', '').set('file', '');
		return this.toRelative(base);
	},

	toRelative: function(base){
		return this.get('value', new URI(base));
	}

});

/*
Script: Element.Forms.js
	Extends the Element native object to include methods useful in managing inputs.

	License:
		MIT-style license.

	Authors:
		Aaron Newton

*/

Element.implement({

	tidy: function(){
		this.set('value', this.get('value').tidy());
	},

	getTextInRange: function(start, end){
		return this.get('value').substring(start, end);
	},

	getSelectedText: function(){
		if (this.setSelectionRange) return this.getTextInRange(this.getSelectionStart(), this.getSelectionEnd());
		return document.selection.createRange().text;
	},

	getSelectedRange: function() {
		if ($defined(this.selectionStart)) return {start: this.selectionStart, end: this.selectionEnd};
		var pos = {start: 0, end: 0};
		var range = this.getDocument().selection.createRange();
		if (!range || range.parentElement() != this) return pos;
		var dup = range.duplicate();
		if (this.type == 'text') {
			pos.start = 0 - dup.moveStart('character', -100000);
			pos.end = pos.start + range.text.length;
		} else {
			var value = this.get('value');
			var offset = value.length - value.match(/[\n\r]*$/)[0].length;
			dup.moveToElementText(this);
			dup.setEndPoint('StartToEnd', range);
			pos.end = offset - dup.text.length;
			dup.setEndPoint('StartToStart', range);
			pos.start = offset - dup.text.length;
		}
		return pos;
	},

	getSelectionStart: function(){
		return this.getSelectedRange().start;
	},

	getSelectionEnd: function(){
		return this.getSelectedRange().end;
	},

	setCaretPosition: function(pos){
		if (pos == 'end') pos = this.get('value').length;
		this.selectRange(pos, pos);
		return this;
	},

	getCaretPosition: function(){
		return this.getSelectedRange().start;
	},

	selectRange: function(start, end){
		if (this.setSelectionRange) {
			this.focus();
			this.setSelectionRange(start, end);
		} else {
			var value = this.get('value');
			var diff = value.substr(start, end - start).replace(/\r/g, '').length;
			start = value.substr(0, start).replace(/\r/g, '').length;
			var range = this.createTextRange();
			range.collapse(true);
			range.moveEnd('character', start + diff);
			range.moveStart('character', start);
			range.select();
		}
		return this;
	},

	insertAtCursor: function(value, select){
		var pos = this.getSelectedRange();
		var text = this.get('value');
		this.set('value', text.substring(0, pos.start) + value + text.substring(pos.end, text.length));
		if ($pick(select, true)) this.selectRange(pos.start, pos.start + value.length);
		else this.setCaretPosition(pos.start + value.length);
		return this;
	},

	insertAroundCursor: function(options, select){
		options = $extend({
			before: '',
			defaultMiddle: '',
			after: ''
		}, options);
		var value = this.getSelectedText() || options.defaultMiddle;
		var pos = this.getSelectedRange();
		var text = this.get('value');
		if (pos.start == pos.end){
			this.set('value', text.substring(0, pos.start) + options.before + value + options.after + text.substring(pos.end, text.length));
			this.selectRange(pos.start + options.before.length, pos.end + options.before.length + value.length);
		} else {
			var current = text.substring(pos.start, pos.end);
			this.set('value', text.substring(0, pos.start) + options.before + current + options.after + text.substring(pos.end, text.length));
			var selStart = pos.start + options.before.length;
			if ($pick(select, true)) this.selectRange(selStart, selStart + current.length);
			else this.setCaretPosition(selStart + text.length);
		}
		return this;
	}

});

/*
Script: Element.Measure.js
	Extends the Element native object to include methods useful in measuring dimensions.

	Element.measure / .expose methods by Daniel Steigerwald
	License: MIT-style license.
	Copyright: Copyright (c) 2008 Daniel Steigerwald, daniel.steigerwald.cz

	License:
		MIT-style license.

	Authors:
		Aaron Newton

*/

Element.implement({

	measure: function(fn){
		var vis = function(el) {
			return !!(!el || el.offsetHeight || el.offsetWidth);
		};
		if (vis(this)) return fn.apply(this);
		var parent = this.getParent(),
			toMeasure = [],
			restorers = [];
		while (!vis(parent) && parent != document.body) {
			toMeasure.push(parent.expose());
			parent = parent.getParent();
		}
		var restore = this.expose();
		var result = fn.apply(this);
		restore();
		toMeasure.each(function(restore){
			restore();
		});
		return result;
	},

	expose: function(){
		if (this.getStyle('display') != 'none') return $empty;
		var before = this.style.cssText;
		this.setStyles({
			display: 'block',
			position: 'absolute',
			visibility: 'hidden'
		});
		return function(){
			this.style.cssText = before;
		}.bind(this);
	},

	getDimensions: function(options){
		options = $merge({computeSize: false},options);
		var dim = {};
		var getSize = function(el, options){
			return (options.computeSize)?el.getComputedSize(options):el.getSize();
		};
		if (this.getStyle('display') == 'none'){
			dim = this.measure(function(){
				return getSize(this, options);
			});
		} else {
			try { //safari sometimes crashes here, so catch it
				dim = getSize(this, options);
			}catch(e){}
		}
		return $chk(dim.x) ? $extend(dim, {width: dim.x, height: dim.y}) : $extend(dim, {x: dim.width, y: dim.height});
	},

	getComputedSize: function(options){
		options = $merge({
			styles: ['padding','border'],
			plains: {
				height: ['top','bottom'],
				width: ['left','right']
			},
			mode: 'both'
		}, options);
		var size = {width: 0,height: 0};
		switch (options.mode){
			case 'vertical':
				delete size.width;
				delete options.plains.width;
				break;
			case 'horizontal':
				delete size.height;
				delete options.plains.height;
				break;
		}
		var getStyles = [];
		//this function might be useful in other places; perhaps it should be outside this function?
		$each(options.plains, function(plain, key){
			plain.each(function(edge){
				options.styles.each(function(style){
					getStyles.push((style == 'border') ? style + '-' + edge + '-' + 'width' : style + '-' + edge);
				});
			});
		});
		var styles = {};
		getStyles.each(function(style){ styles[style] = this.getComputedStyle(style); }, this);
		var subtracted = [];
		$each(options.plains, function(plain, key){ //keys: width, height, plains: ['left', 'right'], ['top','bottom']
			var capitalized = key.capitalize();
			size['total' + capitalized] = 0;
			size['computed' + capitalized] = 0;
			plain.each(function(edge){ //top, left, right, bottom
				size['computed' + edge.capitalize()] = 0;
				getStyles.each(function(style, i){ //padding, border, etc.
					//'padding-left'.test('left') size['totalWidth'] = size['width'] + [padding-left]
					if (style.test(edge)){
						styles[style] = styles[style].toInt() || 0; //styles['padding-left'] = 5;
						size['total' + capitalized] = size['total' + capitalized] + styles[style];
						size['computed' + edge.capitalize()] = size['computed' + edge.capitalize()] + styles[style];
					}
					//if width != width (so, padding-left, for instance), then subtract that from the total
					if (style.test(edge) && key != style &&
						(style.test('border') || style.test('padding')) && !subtracted.contains(style)){
						subtracted.push(style);
						size['computed' + capitalized] = size['computed' + capitalized]-styles[style];
					}
				});
			});
		});

		['Width', 'Height'].each(function(value){
			var lower = value.toLowerCase();
			if(!$chk(size[lower])) return;

			size[lower] = size[lower] + this['offset' + value] + size['computed' + value];
			size['total' + value] = size[lower] + size['total' + value];
			delete size['computed' + value];
		}, this);

		return $extend(styles, size);
	}

});

/*
Script: Element.Pin.js
	Extends the Element native object to include the pin method useful for fixed positioning for elements.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

(function(){
	var supportsPositionFixed = false;
	window.addEvent('domready', function(){
		var test = new Element('div').setStyles({
			position: 'fixed',
			top: 0,
			right: 0
		}).inject(document.body);
		supportsPositionFixed = (test.offsetTop === 0);
		test.dispose();
	});

	Element.implement({

		pin: function(enable){
			if (this.getStyle('display') == 'none') return null;

			var p;
			if (enable !== false){
				p = this.getPosition();
				if (!this.retrieve('pinned')){
					var pos = {
						top: p.y - window.getScroll().y,
						left: p.x - window.getScroll().x
					};
					if (supportsPositionFixed){
						this.setStyle('position', 'fixed').setStyles(pos);
					} else {
						this.store('pinnedByJS', true);
						this.setStyles({
							position: 'absolute',
							top: p.y,
							left: p.x
						});
						this.store('scrollFixer', (function(){
							if (this.retrieve('pinned'))
								this.setStyles({
									top: pos.top.toInt() + window.getScroll().y,
									left: pos.left.toInt() + window.getScroll().x
								});
						}).bind(this));
						window.addEvent('scroll', this.retrieve('scrollFixer'));
					}
					this.store('pinned', true);
				}
			} else {
				var op;
				if (!Browser.Engine.trident){
					if (this.getParent().getComputedStyle('position') != 'static') op = this.getParent();
					else op = this.getParent().getOffsetParent();
				}
				p = this.getPosition(op);
				this.store('pinned', false);
				var reposition;
				if (supportsPositionFixed && !this.retrieve('pinnedByJS')){
					reposition = {
						top: p.y + window.getScroll().y,
						left: p.x + window.getScroll().x
					};
				} else {
					this.store('pinnedByJS', false);
					window.removeEvent('scroll', this.retrieve('scrollFixer'));
					reposition = {
						top: p.y,
						left: p.x
					};
				}
				this.setStyles($merge(reposition, {position: 'absolute'}));
			}
			return this.addClass('isPinned');
		},

		unpin: function(){
			return this.pin(false).removeClass('isPinned');
		},

		togglepin: function(){
			this.pin(!this.retrieve('pinned'));
		}

	});

})();

/*
Script: Element.Position.js
	Extends the Element native object to include methods useful positioning elements relative to others.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

(function(){

var original = Element.prototype.position;

Element.implement({

	position: function(options){
		//call original position if the options are x/y values
		if (options && ($defined(options.x) || $defined(options.y))) return original ? original.apply(this, arguments) : this;
		$each(options||{}, function(v, k){ if (!$defined(v)) delete options[k]; });
		options = $merge({
			relativeTo: document.body,
			position: {
				x: 'center', //left, center, right
				y: 'center' //top, center, bottom
			},
			edge: false,
			offset: {x: 0, y: 0},
			returnPos: false,
			relFixedPosition: false,
			ignoreMargins: false,
			allowNegative: false
		}, options);
		//compute the offset of the parent positioned element if this element is in one
		var parentOffset = {x: 0, y: 0};
		var parentPositioned = false;
		/* dollar around getOffsetParent should not be necessary, but as it does not return
		 * a mootools extended element in IE, an error occurs on the call to expose. See:
		 * http://mootools.lighthouseapp.com/projects/2706/tickets/333-element-getoffsetparent-inconsistency-between-ie-and-other-browsers */
		var offsetParent = this.measure(function(){
			return document.id(this.getOffsetParent());
		});
		if (offsetParent && offsetParent != this.getDocument().body){
			parentOffset = offsetParent.measure(function(){
				return this.getPosition();
			});
			parentPositioned = true;
			options.offset.x = options.offset.x - parentOffset.x;
			options.offset.y = options.offset.y - parentOffset.y;
		}
		//upperRight, bottomRight, centerRight, upperLeft, bottomLeft, centerLeft
		//topRight, topLeft, centerTop, centerBottom, center
		var fixValue = function(option){
			if ($type(option) != 'string') return option;
			option = option.toLowerCase();
			var val = {};
			if (option.test('left')) val.x = 'left';
			else if (option.test('right')) val.x = 'right';
			else val.x = 'center';
			if (option.test('upper') || option.test('top')) val.y = 'top';
			else if (option.test('bottom')) val.y = 'bottom';
			else val.y = 'center';
			return val;
		};
		options.edge = fixValue(options.edge);
		options.position = fixValue(options.position);
		if (!options.edge){
			if (options.position.x == 'center' && options.position.y == 'center') options.edge = {x:'center', y:'center'};
			else options.edge = {x:'left', y:'top'};
		}

		this.setStyle('position', 'absolute');
		var rel = document.id(options.relativeTo) || document.body;
		var calc = rel == document.body ? window.getScroll() : rel.getPosition();
		var top = calc.y;
		var left = calc.x;

		if (Browser.Engine.trident){
			var scrolls = rel.getScrolls();
			top += scrolls.y;
			left += scrolls.x;
		}

		var dim = this.getDimensions({computeSize: true, styles:['padding', 'border','margin']});
		if (options.ignoreMargins){
			options.offset.x = options.offset.x - dim['margin-left'];
			options.offset.y = options.offset.y - dim['margin-top'];
		}
		var pos = {};
		var prefY = options.offset.y;
		var prefX = options.offset.x;
		var winSize = window.getSize();
		switch(options.position.x){
			case 'left':
				pos.x = left + prefX;
				break;
			case 'right':
				pos.x = left + prefX + rel.offsetWidth;
				break;
			default: //center
				pos.x = left + ((rel == document.body ? winSize.x : rel.offsetWidth)/2) + prefX;
				break;
		}
		switch(options.position.y){
			case 'top':
				pos.y = top + prefY;
				break;
			case 'bottom':
				pos.y = top + prefY + rel.offsetHeight;
				break;
			default: //center
				pos.y = top + ((rel == document.body ? winSize.y : rel.offsetHeight)/2) + prefY;
				break;
		}

		if (options.edge){
			var edgeOffset = {};

			switch(options.edge.x){
				case 'left':
					edgeOffset.x = 0;
					break;
				case 'right':
					edgeOffset.x = -dim.x-dim.computedRight-dim.computedLeft;
					break;
				default: //center
					edgeOffset.x = -(dim.x/2);
					break;
			}
			switch(options.edge.y){
				case 'top':
					edgeOffset.y = 0;
					break;
				case 'bottom':
					edgeOffset.y = -dim.y-dim.computedTop-dim.computedBottom;
					break;
				default: //center
					edgeOffset.y = -(dim.y/2);
					break;
			}
			pos.x = pos.x + edgeOffset.x;
			pos.y = pos.y + edgeOffset.y;
		}
		pos = {
			left: ((pos.x >= 0 || parentPositioned || options.allowNegative) ? pos.x : 0).toInt(),
			top: ((pos.y >= 0 || parentPositioned || options.allowNegative) ? pos.y : 0).toInt()
		};
		if (rel.getStyle('position') == 'fixed' || options.relFixedPosition){
			var winScroll = window.getScroll();
			pos.top = pos.top.toInt() + winScroll.y;
			pos.left = pos.left.toInt() + winScroll.x;
		}

		if (options.returnPos) return pos;
		else this.setStyles(pos);
		return this;
	}

});

})();

/*
Script: Element.Shortcuts.js
	Extends the Element native object to include some shortcut methods.

	License:
		MIT-style license.

	Authors:
		Aaron Newton

*/

Element.implement({

	isDisplayed: function(){
		return this.getStyle('display') != 'none';
	},

	toggle: function(){
		return this[this.isDisplayed() ? 'hide' : 'show']();
	},

	hide: function(){
		var d;
		try {
			//IE fails here if the element is not in the dom
			if ('none' != this.getStyle('display')) d = this.getStyle('display');
		} catch(e){}

		return this.store('originalDisplay', d || 'block').setStyle('display', 'none');
	},

	show: function(display){
		return this.setStyle('display', display || this.retrieve('originalDisplay') || 'block');
	},

	swapClass: function(remove, add){
		return this.removeClass(remove).addClass(add);
	}

});


/*
Script: FormValidator.js
	A css-class based form validation system.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/
var InputValidator = new Class({

	Implements: [Options],

	options: {
		errorMsg: 'Validation failed.',
		test: function(field){return true;}
	},

	initialize: function(className, options){
		this.setOptions(options);
		this.className = className;
	},

	test: function(field, props){
		if (document.id(field)) return this.options.test(document.id(field), props||this.getProps(field));
		else return false;
	},

	getError: function(field, props){
		var err = this.options.errorMsg;
		if ($type(err) == 'function') err = err(document.id(field), props||this.getProps(field));
		return err;
	},

	getProps: function(field){
		if (!document.id(field)) return {};
		return field.get('validatorProps');
	}

});

Element.Properties.validatorProps = {

	set: function(props){
		return this.eliminate('validatorProps').store('validatorProps', props);
	},

	get: function(props){
		if (props) this.set(props);
		if (this.retrieve('validatorProps')) return this.retrieve('validatorProps');
		if (this.getProperty('validatorProps')){
			try {
				this.store('validatorProps', JSON.decode(this.getProperty('validatorProps')));
			}catch(e){
				return {};
			}
		} else {
			var vals = this.get('class').split(' ').filter(function(cls){
				return cls.test(':');
			});
			if (!vals.length){
				this.store('validatorProps', {});
			} else {
				props = {};
				vals.each(function(cls){
					var split = cls.split(':');
					if (split[1]) {
						try {
							props[split[0]] = JSON.decode(split[1]);
						} catch(e) {}
					}
				});
				this.store('validatorProps', props);
			}
		}
		return this.retrieve('validatorProps');
	}

};

var FormValidator = new Class({

	Implements:[Options, Events],

	Binds: ['onSubmit'],

	options: {/*
		onFormValidate: $empty(isValid, form, event),
		onElementValidate: $empty(isValid, field, className, warn),
		onElementPass: $empty(field),
		onElementFail: $empty(field, validatorsFailed) */
		fieldSelectors: 'input, select, textarea',
		ignoreHidden: true,
		useTitles: false,
		evaluateOnSubmit: true,
		evaluateFieldsOnBlur: true,
		evaluateFieldsOnChange: true,
		serial: true,
		stopOnFailure: true,
		warningPrefix: function(){
			return FormValidator.getMsg('warningPrefix') || 'Warning: ';
		},
		errorPrefix: function(){
			return FormValidator.getMsg('errorPrefix') || 'Error: ';
		}
	},

	initialize: function(form, options){
		this.setOptions(options);
		this.element = document.id(form);
		this.element.store('validator', this);
		this.warningPrefix = $lambda(this.options.warningPrefix)();
		this.errorPrefix = $lambda(this.options.errorPrefix)();
		if (this.options.evaluateOnSubmit) this.element.addEvent('submit', this.onSubmit);
		if (this.options.evaluateFieldsOnBlur || this.options.evaluateFieldsOnChange) this.watchFields(this.getFields());
	},

	toElement: function(){
		return this.element;
	},

	getFields: function(){
		return (this.fields = this.element.getElements(this.options.fieldSelectors));
	},

	watchFields: function(fields){
		fields.each(function(el){
			if (this.options.evaluateFieldsOnBlur)
				el.addEvent('blur', this.validationMonitor.pass([el, false], this));
			if (this.options.evaluateFieldsOnChange)
				el.addEvent('change', this.validationMonitor.pass([el, true], this));
		}, this);
	},

	validationMonitor: function(){
		$clear(this.timer);
		this.timer = this.validateField.delay(50, this, arguments);
	},

	onSubmit: function(event){
		if (!this.validate(event) && event) event.preventDefault();
		else this.reset();
	},

	reset: function(){
		this.getFields().each(this.resetField, this);
		return this;
	},

	validate: function(event){
		var result = this.getFields().map(function(field){
			return this.validateField(field, true);
		}, this).every(function(v){ return v;});
		this.fireEvent('formValidate', [result, this.element, event]);
		if (this.options.stopOnFailure && !result && event) event.preventDefault();
		return result;
	},

	validateField: function(field, force){
		if (this.paused) return true;
		field = document.id(field);
		var passed = !field.hasClass('validation-failed');
		var failed, warned;
		if (this.options.serial && !force){
			failed = this.element.getElement('.validation-failed');
			warned = this.element.getElement('.warning');
		}
		if (field && (!failed || force || field.hasClass('validation-failed') || (failed && !this.options.serial))){
			var validators = field.className.split(' ').some(function(cn){
				return this.getValidator(cn);
			}, this);
			var validatorsFailed = [];
			field.className.split(' ').each(function(className){
				if (className && !this.test(className, field)) validatorsFailed.include(className);
			}, this);
			passed = validatorsFailed.length === 0;
			if (validators && !field.hasClass('warnOnly')){
				if (passed){
					field.addClass('validation-passed').removeClass('validation-failed');
					this.fireEvent('elementPass', field);
				} else {
					field.addClass('validation-failed').removeClass('validation-passed');
					this.fireEvent('elementFail', [field, validatorsFailed]);
				}
			}
			if (!warned){
				var warnings = field.className.split(' ').some(function(cn){
					if (cn.test('^warn-') || field.hasClass('warnOnly'))
						return this.getValidator(cn.replace(/^warn-/,''));
					else return null;
				}, this);
				field.removeClass('warning');
				var warnResult = field.className.split(' ').map(function(cn){
					if (cn.test('^warn-') || field.hasClass('warnOnly'))
						return this.test(cn.replace(/^warn-/,''), field, true);
					else return null;
				}, this);
			}
		}
		return passed;
	},

	test: function(className, field, warn){
		var validator = this.getValidator(className);
		field = document.id(field);
		if (field.hasClass('ignoreValidation')) return true;
		warn = $pick(warn, false);
		if (field.hasClass('warnOnly')) warn = true;
		var isValid = validator ? validator.test(field) : true;
		if (validator && this.isVisible(field)) this.fireEvent('elementValidate', [isValid, field, className, warn]);
		if (warn) return true;
		return isValid;
	},

	isVisible : function(field){
		if (!this.options.ignoreHidden) return true;
		while(field != document.body){
			if (document.id(field).getStyle('display') == 'none') return false;
			field = field.getParent();
		}
		return true;
	},

	resetField: function(field){
		field = document.id(field);
		if (field){
			field.className.split(' ').each(function(className){
				if (className.test('^warn-')) className = className.replace(/^warn-/, '');
				field.removeClass('validation-failed');
				field.removeClass('warning');
				field.removeClass('validation-passed');
			}, this);
		}
		return this;
	},

	stop: function(){
		this.paused = true;
		return this;
	},

	start: function(){
		this.paused = false;
		return this;
	},

	ignoreField: function(field, warn){
		field = document.id(field);
		if (field){
			this.enforceField(field);
			if (warn) field.addClass('warnOnly');
			else field.addClass('ignoreValidation');
		}
		return this;
	},

	enforceField: function(field){
		field = document.id(field);
		if (field) field.removeClass('warnOnly').removeClass('ignoreValidation');
		return this;
	}

});

FormValidator.getMsg = function(key){
	return MooTools.lang.get('FormValidator', key);
};

FormValidator.adders = {

	validators:{},

	add : function(className, options){
		this.validators[className] = new InputValidator(className, options);
		//if this is a class (this method is used by instances of FormValidator and the FormValidator namespace)
		//extend these validators into it
		//this allows validators to be global and/or per instance
		if (!this.initialize){
			this.implement({
				validators: this.validators
			});
		}
	},

	addAllThese : function(validators){
		$A(validators).each(function(validator){
			this.add(validator[0], validator[1]);
		}, this);
	},

	getValidator: function(className){
		return this.validators[className.split(':')[0]];
	}

};

$extend(FormValidator, FormValidator.adders);

FormValidator.implement(FormValidator.adders);

FormValidator.add('IsEmpty', {

	errorMsg: false,
	test: function(element){
		if (element.type == 'select-one' || element.type == 'select')
			return !(element.selectedIndex >= 0 && element.options[element.selectedIndex].value != '');
		else
			return ((element.get('value') == null) || (element.get('value').length == 0));
	}

});

FormValidator.addAllThese([

	['required', {
		errorMsg: function(){
			return FormValidator.getMsg('required');
		},
		test: function(element){
			return !FormValidator.getValidator('IsEmpty').test(element);
		}
	}],

	['minLength', {
		errorMsg: function(element, props){
			if ($type(props.minLength))
				return FormValidator.getMsg('minLength').substitute({minLength:props.minLength,length:element.get('value').length });
			else return '';
		},
		test: function(element, props){
			if ($type(props.minLength)) return (element.get('value').length >= $pick(props.minLength, 0));
			else return true;
		}
	}],

	['maxLength', {
		errorMsg: function(element, props){
			//props is {maxLength:10}
			if ($type(props.maxLength))
				return FormValidator.getMsg('maxLength').substitute({maxLength:props.maxLength,length:element.get('value').length });
			else return '';
		},
		test: function(element, props){
			//if the value is <= than the maxLength value, element passes test
			return (element.get('value').length <= $pick(props.maxLength, 10000));
		}
	}],

	['validate-integer', {
		errorMsg: FormValidator.getMsg.pass('integer'),
		test: function(element){
			return FormValidator.getValidator('IsEmpty').test(element) || (/^(-?[1-9]\d*|0)$/).test(element.get('value'));
		}
	}],

	['validate-numeric', {
		errorMsg: FormValidator.getMsg.pass('numeric'),
		test: function(element){
			return FormValidator.getValidator('IsEmpty').test(element) ||
				(/^-?(?:0$0(?=\d*\.)|[1-9]|0)\d*(\.\d+)?$/).test(element.get('value'));
		}
	}],

	['validate-digits', {
		errorMsg: FormValidator.getMsg.pass('digits'),
		test: function(element){
			return FormValidator.getValidator('IsEmpty').test(element) || (/^[\d() .:\-\+#]+$/.test(element.get('value')));
		}
	}],

	['validate-alpha', {
		errorMsg: FormValidator.getMsg.pass('alpha'),
		test: function(element){
			return FormValidator.getValidator('IsEmpty').test(element) ||  (/^[a-zA-Z]+$/).test(element.get('value'));
		}
	}],

	['validate-alphanum', {
		errorMsg: FormValidator.getMsg.pass('alphanum'),
		test: function(element){
			return FormValidator.getValidator('IsEmpty').test(element) || !(/\W/).test(element.get('value'));
		}
	}],

	['validate-date', {
		errorMsg: function(element, props){
			if (Date.parse){
				var format = props.dateFormat || '%x';
				return FormValidator.getMsg('dateSuchAs').substitute({date: new Date().format(format)});
			} else {
				return FormValidator.getMsg('dateInFormatMDY');
			}
		},
		test: function(element, props){
			if (FormValidator.getValidator('IsEmpty').test(element)) return true;
			var d;
			if (Date.parse){
				var format = props.dateFormat || '%x';
				d = Date.parse(element.get('value'));
				var formatted = d.format(format);
				if (formatted != 'invalid date') element.set('value', formatted);
				return !isNaN(d);
			} else {
				var regex = /^(\d{2})\/(\d{2})\/(\d{4})$/;
				if (!regex.test(element.get('value'))) return false;
				d = new Date(element.get('value').replace(regex, '$1/$2/$3'));
				return (parseInt(RegExp.$1, 10) == (1 + d.getMonth())) &&
					(parseInt(RegExp.$2, 10) == d.getDate()) &&
					(parseInt(RegExp.$3, 10) == d.getFullYear());
			}
		}
	}],

	['validate-email', {
		errorMsg: FormValidator.getMsg.pass('email'),
		test: function(element){
			return FormValidator.getValidator('IsEmpty').test(element) || (/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i).test(element.get('value'));
		}
	}],

	['validate-url', {
		errorMsg: FormValidator.getMsg.pass('url'),
		test: function(element){
			return FormValidator.getValidator('IsEmpty').test(element) || (/^(https?|ftp|rmtp|mms):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i).test(element.get('value'));
		}
	}],

	['validate-currency-dollar', {
		errorMsg: FormValidator.getMsg.pass('currencyDollar'),
		test: function(element){
			// [$]1[##][,###]+[.##]
			// [$]1###+[.##]
			// [$]0.##
			// [$].##
			return FormValidator.getValidator('IsEmpty').test(element) ||  (/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/).test(element.get('value'));
		}
	}],

	['validate-one-required', {
		errorMsg: FormValidator.getMsg.pass('oneRequired'),
		test: function(element, props){
			var p = document.id(props['validate-one-required']) || element.parentNode;
			return p.getElements('input').some(function(el){
				if (['checkbox', 'radio'].contains(el.get('type'))) return el.get('checked');
				return el.get('value');
			});
		}
	}]

]);

Element.Properties.validator = {

	set: function(options){
		var validator = this.retrieve('validator');
		if (validator) validator.setOptions(options);
		return this.store('validator:options');
	},

	get: function(options){
		if (options || !this.retrieve('validator')){
			if (options || !this.retrieve('validator:options')) this.set('validator', options);
			this.store('validator', new FormValidator(this, this.retrieve('validator:options')));
		}
		return this.retrieve('validator');
	}

};

Element.implement({

	validate: function(options){
		this.set('validator', options);
		return this.get('validator', options).validate();
	}

});

/*
Script: FormValidator.Inline.js
	Extends FormValidator to add inline messages.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

FormValidator.Inline = new Class({

	Extends: FormValidator,

	options: {
		scrollToErrorsOnSubmit: true,
		scrollFxOptions: {
			transition: 'quad:out',
			offset: {
				y: -20
			}
		}
	},

	initialize: function(form, options){
		this.parent(form, options);
		this.addEvent('onElementValidate', function(isValid, field, className, warn){
			var validator = this.getValidator(className);
			if (!isValid && validator.getError(field)){
				if (warn) field.addClass('warning');
				var advice = this.makeAdvice(className, field, validator.getError(field), warn);
				this.insertAdvice(advice, field);
				this.showAdvice(className, field);
			} else {
				this.hideAdvice(className, field);
			}
		});
	},

	makeAdvice: function(className, field, error, warn){
		var errorMsg = (warn)?this.warningPrefix:this.errorPrefix;
			errorMsg += (this.options.useTitles) ? field.title || error:error;
		var cssClass = (warn) ? 'warning-advice' : 'validation-advice';
		var advice = this.getAdvice(className, field);
		if(advice) {
			advice = advice.clone(true, true).set('html', errorMsg).replaces(advice);
		} else {
			advice = new Element('div', {
				html: errorMsg,
				styles: { display: 'none' },
				id: 'advice-' + className + '-' + this.getFieldId(field)
			}).addClass(cssClass);
		}
		field.store('advice-' + className, advice);
		return advice;
	},

	getFieldId : function(field){
		return field.id ? field.id : field.id = 'input_' + field.name;
	},

	showAdvice: function(className, field){
		var advice = this.getAdvice(className, field);
		if (advice && !field.retrieve(this.getPropName(className))
				&& (advice.getStyle('display') == 'none'
				|| advice.getStyle('visiblity') == 'hidden'
				|| advice.getStyle('opacity') == 0)){
			field.store(this.getPropName(className), true);
			if (advice.reveal) advice.reveal();
			else advice.setStyle('display', 'block');
		}
	},

	hideAdvice: function(className, field){
		var advice = this.getAdvice(className, field);
		if (advice && field.retrieve(this.getPropName(className))){
			field.store(this.getPropName(className), false);
			//if Fx.Reveal.js is present, transition the advice out
			if (advice.dissolve) advice.dissolve();
			else advice.setStyle('display', 'none');
		}
	},

	getPropName: function(className){
		return 'advice' + className;
	},

	resetField: function(field){
		field = document.id(field);
		if (!field) return this;
		this.parent(field);
		field.className.split(' ').each(function(className){
			this.hideAdvice(className, field);
		}, this);
		return this;
	},

	getAllAdviceMessages: function(field, force){
		var advice = [];
		if (field.hasClass('ignoreValidation') && !force) return advice;
		var validators = field.className.split(' ').some(function(cn){
			var warner = cn.test('^warn-') || field.hasClass('warnOnly');
			if (warner) cn = cn.replace(/^warn-/, '');
			var validator = this.getValidator(cn);
			if (!validator) return;
			advice.push({
				message: validator.getError(field),
				warnOnly: warner,
				passed: validator.test(),
				validator: validator
			});
		}, this);
		return advice;
	},

	getAdvice: function(className, field){
		return field.retrieve('advice-' + className);
	},

	insertAdvice: function(advice, field){
		//Check for error position prop
		var props = field.get('validatorProps');
		//Build advice
		if (!props.msgPos || !document.id(props.msgPos)){
			if(field.type.toLowerCase() == 'radio') field.getParent().adopt(advice);
			else advice.inject(document.id(field), 'after');
		} else {
			document.id(props.msgPos).grab(advice);
		}
	},

	validateField: function(field, force){
		var result = this.parent(field, force);
		if (this.options.scrollToErrorsOnSubmit && !result){
			var failed = document.id(this).getElement('.validation-failed');
			var par = document.id(this).getParent();
			while (par != document.body && par.getScrollSize().y == par.getSize().y){
				par = par.getParent();
			}
			var fx = par.retrieve('fvScroller');
			if (!fx && window.Fx && Fx.Scroll){
				fx = new Fx.Scroll(par, this.options.scrollFxOptions);
				par.store('fvScroller', fx);
			}
			if (failed){
				if (fx) fx.toElement(failed);
				else par.scrollTo(par.getScroll().x, failed.getPosition(par).y - 20);
			}
		}
		return result;
	}

});


/*
Script: FormValidator.Extras.js
	Additional validators for the FormValidator class.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/
FormValidator.addAllThese([

	['validate-enforce-oncheck', {
		test: function(element, props){
			if (element.checked){
				var fv = element.getParent('form').retrieve('validator');
				if (!fv) return true;
				(props.toEnforce || document.id(props.enforceChildrenOf).getElements('input, select, textarea')).map(function(item){
					fv.enforceField(item);
				});
			}
			return true;
		}
	}],

	['validate-ignore-oncheck', {
		test: function(element, props){
			if (element.checked){
				var fv = element.getParent('form').retrieve('validator');
				if (!fv) return true;
				(props.toIgnore || document.id(props.ignoreChildrenOf).getElements('input, select, textarea')).each(function(item){
					fv.ignoreField(item);
					fv.resetField(item);
				});
			}
			return true;
		}
	}],

	['validate-nospace', {
		errorMsg: function(){
			return FormValidator.getMsg('noSpace');
		},
		test: function(element, props){
			return !element.get('value').test(/\s/);
		}
	}],

	['validate-toggle-oncheck', {
		test: function(element, props){
			var fv = element.getParent('form').retrieve('validator');
			if (!fv) return true;
			var eleArr = props.toToggle || document.id(props.toToggleChildrenOf).getElements('input, select, textarea');
			if (!element.checked){
				eleArr.each(function(item){
					fv.ignoreField(item);
					fv.resetField(item);
				});
			} else {
				eleArr.each(function(item){
					fv.enforceField(item);
				});
			}
			return true;
		}
	}],

	['validate-reqchk-bynode', {
		errorMsg: function(){
			return FormValidator.getMsg('reqChkByNode');
		},
		test: function(element, props){
			return (document.id(props.nodeId).getElements(props.selector || 'input[type=checkbox], input[type=radio]')).some(function(item){
				return item.checked;
			});
		}
	}],

	['validate-required-check', {
		errorMsg: function(element, props){
			return props.useTitle ? element.get('title') : FormValidator.getMsg('requiredChk');
		},
		test: function(element, props){
			return !!element.checked;
		}
	}],

	['validate-reqchk-byname', {
		errorMsg: function(element, props){
			return FormValidator.getMsg('reqChkByName').substitute({label: props.label || element.get('type')});
		},
		test: function(element, props){
			var grpName = props.groupName || element.get('name');
			var oneCheckedItem = $$(document.getElementsByName(grpName)).some(function(item, index){
				return item.checked;
			});
			var fv = element.getParent('form').retrieve('validator');
			if (oneCheckedItem && fv) fv.resetField(element);
			return oneCheckedItem;
		}
	}],

	['validate-match', {
		errorMsg: function(element, props){
			return FormValidator.getMsg('match').substitute({matchName: props.matchName || document.id(props.matchInput).get('name')});
		},
		test: function(element, props){
			var eleVal = element.get('value');
			var matchVal = document.id(props.matchInput) && document.id(props.matchInput).get('value');
			return eleVal && matchVal ? eleVal == matchVal : true;
		}
	}],

	['validate-after-date', {
		errorMsg: function(element, props){
			return FormValidator.getMsg('afterDate').substitute({
				label: props.afterLabel || (props.afterElement ? FormValidator.getMsg('startDate') : FormValidator.getMsg('currentDate'))
			});
		},
		test: function(element, props){
			var start = document.id(props.afterElement) ? Date.parse(document.id(props.afterElement).get('value')) : new Date();
			var end = Date.parse(element.get('value'));
			return end && start ? end >= start : true;
		}
	}],

	['validate-before-date', {
		errorMsg: function(element, props){
			return FormValidator.getMsg('beforeDate').substitute({
				label: props.beforeLabel || (props.beforeElement ? FormValidator.getMsg('endDate') : FormValidator.getMsg('currentDate'))
			});
		},
		test: function(element, props){
			var start = Date.parse(element.get('value'));
			var end = document.id(props.beforeElement) ? Date.parse(document.id(props.beforeElement).get('value')) : new Date();
			return end && start ? end >= start : true;
		}
	}],

	['validate-custom-required', {
		errorMsg: function(){
			return FormValidator.getMsg('required');
		},
		test: function(element, props){
			return element.get('value') != props.emptyValue;
		}
	}],

	['validate-same-month', {
		errorMsg: function(element, props){
			var startMo = document.id(props.sameMonthAs) && document.id(props.sameMonthAs).get('value');
			var eleVal = element.get('value');
			if (eleVal != '') return FormValidator.getMsg(startMo ? 'sameMonth' : 'startMonth');
		},
		test: function(element, props){
			var d1 = Date.parse(element.get('value'));
			var d2 = Date.parse(document.id(props.sameMonthAs) && document.id(props.sameMonthAs).get('value'));
			return d1 && d2 ? d1.format('%B') == d2.format('%B') : true;
		}
	}]

]);

/*
Script: OverText.js
	Shows text over an input that disappears when the user clicks into it. The text remains hidden if the user adds a value.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

var OverText = new Class({

	Implements: [Options, Events, Class.Occlude],

	Binds: ['reposition', 'assert', 'focus'],

	options: {/*
		textOverride: null,
		onFocus: $empty()
		onTextHide: $empty(textEl, inputEl),
		onTextShow: $empty(textEl, inputEl), */
		element: 'label',
		positionOptions: {
			position: 'upperLeft',
			edge: 'upperLeft',
			offset: {
				x: 4,
				y: 2
			}
		},
		poll: false,
		pollInterval: 250
	},

	property: 'OverText',

	initialize: function(element, options){
		this.element = document.id(element);
		if (this.occlude()) return this.occluded;
		this.setOptions(options);
		this.attach(this.element);
		OverText.instances.push(this);
		if (this.options.poll) this.poll();
		return this;
	},

	toElement: function(){
		return this.element;
	},

	attach: function(){
		var val = this.options.textOverride || this.element.get('alt') || this.element.get('title');
		if (!val) return;
		this.text = new Element(this.options.element, {
			'class': 'overTxtLabel',
			styles: {
				lineHeight: 'normal',
				position: 'absolute'
			},
			html: val,
			events: {
				click: this.hide.pass(true, this)
			}
		}).inject(this.element, 'after');
		if (this.options.element == 'label') this.text.set('for', this.element.get('id'));
		this.element.addEvents({
			focus: this.focus,
			blur: this.assert,
			change: this.assert
		}).store('OverTextDiv', this.text);
		window.addEvent('resize', this.reposition.bind(this));
		this.assert(true);
		this.reposition();
	},

	startPolling: function(){
		this.pollingPaused = false;
		return this.poll();
	},

	poll: function(stop){
		//start immediately
		//pause on focus
		//resumeon blur
		if (this.poller && !stop) return this;
		var test = function(){
			if (!this.pollingPaused) this.assert(true);
		}.bind(this);
		if (stop) $clear(this.poller);
		else this.poller = test.periodical(this.options.pollInterval, this);
		return this;
	},

	stopPolling: function(){
		this.pollingPaused = true;
		return this.poll(true);
	},

	focus: function(){
		if (!this.text.isDisplayed() || this.element.get('disabled')) return;
		this.hide();
	},

	hide: function(suppressFocus){
		if (this.text.isDisplayed() && !this.element.get('disabled')){
			this.text.hide();
			this.fireEvent('textHide', [this.text, this.element]);
			this.pollingPaused = true;
			try {
				if (!suppressFocus) this.element.fireEvent('focus').focus();
			} catch(e){} //IE barfs if you call focus on hidden elements
		}
		return this;
	},

	show: function(){
		if (!this.text.isDisplayed()){
			this.text.show();
			this.reposition();
			this.fireEvent('textShow', [this.text, this.element]);
			this.pollingPaused = false;
		}
		return this;
	},

	assert: function(suppressFocus){
		this[this.test() ? 'show' : 'hide'](suppressFocus);
	},

	test: function(){
		var v = this.element.get('value');
		return !v;
	},

	reposition: function(){
		this.assert(true);
		if (!this.element.getParent() || !this.element.offsetHeight) return this.stopPolling().hide();
		if (this.test()) this.text.position($merge(this.options.positionOptions, {relativeTo: this.element}));
		return this;
	}

});

OverText.instances = [];

OverText.update = function(){

	return OverText.instances.map(function(ot){
		if (ot.element && ot.text) return ot.reposition();
		return null; //the input or the text was destroyed
	});

};

if (window.Fx && Fx.Reveal) {
	Fx.Reveal.implement({
		hideInputs: Browser.Engine.trident ? 'select, input, textarea, object, embed, .overTxtLabel' : false
	});
}

/*
Script: Fx.Elements.js
	Effect to change any number of CSS properties of any number of Elements.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

Fx.Elements = new Class({

	Extends: Fx.CSS,

	initialize: function(elements, options){
		this.elements = this.subject = $$(elements);
		this.parent(options);
	},

	compute: function(from, to, delta){
		var now = {};
		for (var i in from){
			var iFrom = from[i], iTo = to[i], iNow = now[i] = {};
			for (var p in iFrom) iNow[p] = this.parent(iFrom[p], iTo[p], delta);
		}
		return now;
	},

	set: function(now){
		for (var i in now){
			var iNow = now[i];
			for (var p in iNow) this.render(this.elements[i], p, iNow[p], this.options.unit);
		}
		return this;
	},

	start: function(obj){
		if (!this.check(obj)) return this;
		var from = {}, to = {};
		for (var i in obj){
			var iProps = obj[i], iFrom = from[i] = {}, iTo = to[i] = {};
			for (var p in iProps){
				var parsed = this.prepare(this.elements[i], p, iProps[p]);
				iFrom[p] = parsed.from;
				iTo[p] = parsed.to;
			}
		}
		return this.parent(from, to);
	}

});

/*
Script: Fx.Accordion.js
	An Fx.Elements extension which allows you to easily create accordion type controls.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

var Accordion = Fx.Accordion = new Class({

	Extends: Fx.Elements,

	options: {/*
		onActive: $empty(toggler, section),
		onBackground: $empty(toggler, section),*/
		display: 0,
		show: false,
		height: true,
		width: false,
		opacity: true,
		fixedHeight: false,
		fixedWidth: false,
		wait: false,
		alwaysHide: false,
		trigger: 'click',
		initialDisplayFx: true
	},

	initialize: function(){
		var params = Array.link(arguments, {'container': Element.type, 'options': Object.type, 'togglers': $defined, 'elements': $defined});
		this.parent(params.elements, params.options);
		this.togglers = $$(params.togglers);
		this.container = document.id(params.container);
		this.previous = -1;
		if (this.options.alwaysHide) this.options.wait = true;
		if ($chk(this.options.show)){
			this.options.display = false;
			this.previous = this.options.show;
		}
		if (this.options.start){
			this.options.display = false;
			this.options.show = false;
		}
		this.effects = {};
		if (this.options.opacity) this.effects.opacity = 'fullOpacity';
		if (this.options.width) this.effects.width = this.options.fixedWidth ? 'fullWidth' : 'offsetWidth';
		if (this.options.height) this.effects.height = this.options.fixedHeight ? 'fullHeight' : 'scrollHeight';
		for (var i = 0, l = this.togglers.length; i < l; i++) this.addSection(this.togglers[i], this.elements[i]);
		this.elements.each(function(el, i){
			if (this.options.show === i){
				this.fireEvent('active', [this.togglers[i], el]);
			} else {
				for (var fx in this.effects) el.setStyle(fx, 0);
			}
		}, this);
		if ($chk(this.options.display)) this.display(this.options.display, this.options.initialDisplayFx);
	},

	addSection: function(toggler, element){
		toggler = document.id(toggler);
		element = document.id(element);
		var test = this.togglers.contains(toggler);
		this.togglers.include(toggler);
		this.elements.include(element);
		var idx = this.togglers.indexOf(toggler);
		toggler.addEvent(this.options.trigger, this.display.bind(this, idx));
		if (this.options.height) element.setStyles({'padding-top': 0, 'border-top': 'none', 'padding-bottom': 0, 'border-bottom': 'none'});
		if (this.options.width) element.setStyles({'padding-left': 0, 'border-left': 'none', 'padding-right': 0, 'border-right': 'none'});
		element.fullOpacity = 1;
		if (this.options.fixedWidth) element.fullWidth = this.options.fixedWidth;
		if (this.options.fixedHeight) element.fullHeight = this.options.fixedHeight;
		element.setStyle('overflow', 'hidden');
		if (!test){
			for (var fx in this.effects) element.setStyle(fx, 0);
		}
		return this;
	},

	display: function(index, useFx){
		useFx = $pick(useFx, true);
		index = ($type(index) == 'element') ? this.elements.indexOf(index) : index;
		if ((this.timer && this.options.wait) || (index === this.previous && !this.options.alwaysHide)) return this;
		this.previous = index;
		var obj = {};
		this.elements.each(function(el, i){
			obj[i] = {};
			var hide = (i != index) || (this.options.alwaysHide && (el.offsetHeight > 0));
			this.fireEvent(hide ? 'background' : 'active', [this.togglers[i], el]);
			for (var fx in this.effects) obj[i][fx] = hide ? 0 : el[this.effects[fx]];
		}, this);
		return useFx ? this.start(obj) : this.set(obj);
	}

});

/*
Script: Fx.Move.js
	Defines Fx.Move, a class that works with Element.Position.js to transition an element from one location to another.

	License:
		MIT-style license.

	Authors:
		Aaron Newton

*/

Fx.Move = new Class({

	Extends: Fx.Morph,

	options: {
		relativeTo: document.body,
		position: 'center',
		edge: false,
		offset: {x: 0, y: 0}
	},

	start: function(destination){
		return this.parent(this.element.position($merge(this.options, destination, {returnPos: true})));
	}

});

Element.Properties.move = {

	set: function(options){
		var morph = this.retrieve('move');
		if (morph) morph.cancel();
		return this.eliminate('move').store('move:options', $extend({link: 'cancel'}, options));
	},

	get: function(options){
		if (options || !this.retrieve('move')){
			if (options || !this.retrieve('move:options')) this.set('move', options);
			this.store('move', new Fx.Move(this, this.retrieve('move:options')));
		}
		return this.retrieve('move');
	}

};

Element.implement({

	move: function(options){
		this.get('move').start(options);
		return this;
	}

});


/*
Script: Fx.Reveal.js
	Defines Fx.Reveal, a class that shows and hides elements with a transition.

	License:
		MIT-style license.

	Authors:
		Aaron Newton

*/

Fx.Reveal = new Class({

	Extends: Fx.Morph,

	options: {/*
		onShow: $empty(thisElement),
		onHide: $empty(thisElement),
		onComplete: $empty(thisElement),
		heightOverride: null,
		widthOverride: null, */
		styles: ['padding', 'border', 'margin'],
		transitionOpacity: !Browser.Engine.trident4,
		mode: 'vertical',
		display: 'block',
		hideInputs: Browser.Engine.trident ? 'select, input, textarea, object, embed' : false
	},

	dissolve: function(){
		try {
			if (!this.hiding && !this.showing){
				if (this.element.getStyle('display') != 'none'){
					this.hiding = true;
					this.showing = false;
					this.hidden = true;
					var startStyles = this.element.getComputedSize({
						styles: this.options.styles,
						mode: this.options.mode
					});
					var setToAuto = (this.element.style.height === ''||this.element.style.height == 'auto');
					this.element.setStyle('display', 'block');
					if (this.options.transitionOpacity) startStyles.opacity = 1;
					var zero = {};
					$each(startStyles, function(style, name){
						zero[name] = [style, 0];
					}, this);
					var overflowBefore = this.element.getStyle('overflow');
					this.element.setStyle('overflow', 'hidden');
					var hideThese = this.options.hideInputs ? this.element.getElements(this.options.hideInputs) : null;
					this.$chain.unshift(function(){
						if (this.hidden){
							this.hiding = false;
							$each(startStyles, function(style, name){
								startStyles[name] = style;
							}, this);
							this.element.setStyles($merge({display: 'none', overflow: overflowBefore}, startStyles));
							if (setToAuto){
								if (['vertical', 'both'].contains(this.options.mode)) this.element.style.height = '';
								if (['width', 'both'].contains(this.options.mode)) this.element.style.width = '';
							}
							if (hideThese) hideThese.setStyle('visibility', 'visible');
						}
						this.fireEvent('hide', this.element);
						this.callChain();
					}.bind(this));
					if (hideThese) hideThese.setStyle('visibility', 'hidden');
					this.start(zero);
				} else {
					this.callChain.delay(10, this);
					this.fireEvent('complete', this.element);
					this.fireEvent('hide', this.element);
				}
			} else if (this.options.link == 'chain'){
				this.chain(this.dissolve.bind(this));
			} else if (this.options.link == 'cancel' && !this.hiding){
				this.cancel();
				this.dissolve();
			}
		} catch(e){
			this.hiding = false;
			this.element.setStyle('display', 'none');
			this.callChain.delay(10, this);
			this.fireEvent('complete', this.element);
			this.fireEvent('hide', this.element);
		}
		return this;
	},

	reveal: function(){
		try {
			if (!this.showing && !this.hiding){
				if (this.element.getStyle('display') == 'none' ||
					 this.element.getStyle('visiblity') == 'hidden' ||
					 this.element.getStyle('opacity') == 0){
					this.showing = true;
					this.hiding = false;
					this.hidden = false;
					var setToAuto, startStyles;
					//toggle display, but hide it
					this.element.measure(function(){
						setToAuto = (this.element.style.height === '' || this.element.style.height == 'auto');
						//create the styles for the opened/visible state
						startStyles = this.element.getComputedSize({
							styles: this.options.styles,
							mode: this.options.mode
						});
					}.bind(this));
					$each(startStyles, function(style, name){
						startStyles[name] = style;
					});
					//if we're overridding height/width
					if ($chk(this.options.heightOverride)) startStyles.height = this.options.heightOverride.toInt();
					if ($chk(this.options.widthOverride)) startStyles.width = this.options.widthOverride.toInt();
					if (this.options.transitionOpacity) {
						this.element.setStyle('opacity', 0);
						startStyles.opacity = 1;
					}
					//create the zero state for the beginning of the transition
					var zero = {
						height: 0,
						display: this.options.display
					};
					$each(startStyles, function(style, name){ zero[name] = 0; });
					var overflowBefore = this.element.getStyle('overflow');
					//set to zero
					this.element.setStyles($merge(zero, {overflow: 'hidden'}));
					//hide inputs
					var hideThese = this.options.hideInputs ? this.element.getElements(this.options.hideInputs) : null;
					if (hideThese) hideThese.setStyle('visibility', 'hidden');
					//start the effect
					this.start(startStyles);
					this.$chain.unshift(function(){
						this.element.setStyle('overflow', overflowBefore);
						if (!this.options.heightOverride && setToAuto){
							if (['vertical', 'both'].contains(this.options.mode)) this.element.style.height = '';
							if (['width', 'both'].contains(this.options.mode)) this.element.style.width = '';
						}
						if (!this.hidden) this.showing = false;
						if (hideThese) hideThese.setStyle('visibility', 'visible');
						this.callChain();
						this.fireEvent('show', this.element);
					}.bind(this));
				} else {
					this.callChain();
					this.fireEvent('complete', this.element);
					this.fireEvent('show', this.element);
				}
			} else if (this.options.link == 'chain'){
				this.chain(this.reveal.bind(this));
			} else if (this.options.link == 'cancel' && !this.showing){
				this.cancel();
				this.reveal();
			}
		} catch(e){
			this.element.setStyles({
				display: this.options.display,
				visiblity: 'visible',
				opacity: 1
			});
			this.showing = false;
			this.callChain.delay(10, this);
			this.fireEvent('complete', this.element);
			this.fireEvent('show', this.element);
		}
		return this;
	},

	toggle: function(){
		if (this.element.getStyle('display') == 'none' ||
			 this.element.getStyle('visiblity') == 'hidden' ||
			 this.element.getStyle('opacity') == 0){
			this.reveal();
		} else {
			this.dissolve();
		}
		return this;
	}

});

Element.Properties.reveal = {

	set: function(options){
		var reveal = this.retrieve('reveal');
		if (reveal) reveal.cancel();
		return this.eliminate('reveal').store('reveal:options', $extend({link: 'cancel'}, options));
	},

	get: function(options){
		if (options || !this.retrieve('reveal')){
			if (options || !this.retrieve('reveal:options')) this.set('reveal', options);
			this.store('reveal', new Fx.Reveal(this, this.retrieve('reveal:options')));
		}
		return this.retrieve('reveal');
	}

};

Element.Properties.dissolve = Element.Properties.reveal;

Element.implement({

	reveal: function(options){
		this.get('reveal', options).reveal();
		return this;
	},

	dissolve: function(options){
		this.get('reveal', options).dissolve();
		return this;
	},

	nix: function(){
		var params = Array.link(arguments, {destroy: Boolean.type, options: Object.type});
		this.get('reveal', params.options).dissolve().chain(function(){
			this[params.destroy ? 'destroy' : 'dispose']();
		}.bind(this));
		return this;
	},

	wink: function(){
		var params = Array.link(arguments, {duration: Number.type, options: Object.type});
		var reveal = this.get('reveal', params.options);
		reveal.reveal().chain(function(){
			(function(){
				reveal.dissolve();
			}).delay(params.duration || 2000);
		});
	}


});

/*
Script: Fx.Scroll.js
	Effect to smoothly scroll any element, including the window.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

Fx.Scroll = new Class({

	Extends: Fx,

	options: {
		offset: {x: 0, y: 0},
		wheelStops: true
	},

	initialize: function(element, options){
		this.element = this.subject = document.id(element);
		this.parent(options);
		var cancel = this.cancel.bind(this, false);

		if ($type(this.element) != 'element') this.element = document.id(this.element.getDocument().body);

		var stopper = this.element;

		if (this.options.wheelStops){
			this.addEvent('start', function(){
				stopper.addEvent('mousewheel', cancel);
			}, true);
			this.addEvent('complete', function(){
				stopper.removeEvent('mousewheel', cancel);
			}, true);
		}
	},

	set: function(){
		var now = Array.flatten(arguments);
		this.element.scrollTo(now[0], now[1]);
	},

	compute: function(from, to, delta){
		return [0, 1].map(function(i){
			return Fx.compute(from[i], to[i], delta);
		});
	},

	start: function(x, y){
		if (!this.check(x, y)) return this;
		var offsetSize = this.element.getSize(), scrollSize = this.element.getScrollSize();
		var scroll = this.element.getScroll(), values = {x: x, y: y};
		for (var z in values){
			var max = scrollSize[z] - offsetSize[z];
			if ($chk(values[z])) values[z] = ($type(values[z]) == 'number') ? values[z].limit(0, max) : max;
			else values[z] = scroll[z];
			values[z] += this.options.offset[z];
		}
		return this.parent([scroll.x, scroll.y], [values.x, values.y]);
	},

	toTop: function(){
		return this.start(false, 0);
	},

	toLeft: function(){
		return this.start(0, false);
	},

	toRight: function(){
		return this.start('right', false);
	},

	toBottom: function(){
		return this.start(false, 'bottom');
	},

	toElement: function(el){
		var position = document.id(el).getPosition(this.element);
		return this.start(position.x, position.y);
	},

	scrollIntoView: function(el, axes, offset){
		axes = axes ? $splat(axes) : ['x','y'];
		var to = {};
		el = document.id(el);
		var pos = el.getPosition(this.element);
		var size = el.getSize();
		var scroll = this.element.getScroll();
		var containerSize = this.element.getSize();
		var edge = {
			x: pos.x + size.x,
			y: pos.y + size.y
		};
		['x','y'].each(function(axis) {
			if (axes.contains(axis)) {
				if (edge[axis] > scroll[axis] + containerSize[axis]) to[axis] = edge[axis] - containerSize[axis];
				if (pos[axis] < scroll[axis]) to[axis] = pos[axis];
			}
			if (to[axis] == null) to[axis] = scroll[axis];
			if (offset && offset[axis]) to[axis] = to[axis] + offset[axis];
		}, this);
		if (to.x != scroll.x || to.y != scroll.y) this.start(to.x, to.y);
		return this;
	}

});


/*
Script: Fx.Slide.js
	Effect to slide an element in and out of view.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

Fx.Slide = new Class({

	Extends: Fx,

	options: {
		mode: 'vertical'
	},

	initialize: function(element, options){
		this.addEvent('complete', function(){
			this.open = (this.wrapper['offset' + this.layout.capitalize()] != 0);
			if (this.open && Browser.Engine.webkit419) this.element.dispose().inject(this.wrapper);
		}, true);
		this.element = this.subject = document.id(element);
		this.parent(options);
		var wrapper = this.element.retrieve('wrapper');
		this.wrapper = wrapper || new Element('div', {
			styles: $extend(this.element.getStyles('margin', 'position'), {overflow: 'hidden'})
		}).wraps(this.element);
		this.element.store('wrapper', this.wrapper).setStyle('margin', 0);
		this.now = [];
		this.open = true;
	},

	vertical: function(){
		this.margin = 'margin-top';
		this.layout = 'height';
		this.offset = this.element.offsetHeight;
	},

	horizontal: function(){
		this.margin = 'margin-left';
		this.layout = 'width';
		this.offset = this.element.offsetWidth;
	},

	set: function(now){
		this.element.setStyle(this.margin, now[0]);
		this.wrapper.setStyle(this.layout, now[1]);
		return this;
	},

	compute: function(from, to, delta){
		return [0, 1].map(function(i){
			return Fx.compute(from[i], to[i], delta);
		});
	},

	start: function(how, mode){
		if (!this.check(how, mode)) return this;
		this[mode || this.options.mode]();
		var margin = this.element.getStyle(this.margin).toInt();
		var layout = this.wrapper.getStyle(this.layout).toInt();
		var caseIn = [[margin, layout], [0, this.offset]];
		var caseOut = [[margin, layout], [-this.offset, 0]];
		var start;
		switch (how){
			case 'in': start = caseIn; break;
			case 'out': start = caseOut; break;
			case 'toggle': start = (layout == 0) ? caseIn : caseOut;
		}
		return this.parent(start[0], start[1]);
	},

	slideIn: function(mode){
		return this.start('in', mode);
	},

	slideOut: function(mode){
		return this.start('out', mode);
	},

	hide: function(mode){
		this[mode || this.options.mode]();
		this.open = false;
		return this.set([-this.offset, 0]);
	},

	show: function(mode){
		this[mode || this.options.mode]();
		this.open = true;
		return this.set([0, this.offset]);
	},

	toggle: function(mode){
		return this.start('toggle', mode);
	}

});

Element.Properties.slide = {

	set: function(options){
		var slide = this.retrieve('slide');
		if (slide) slide.cancel();
		return this.eliminate('slide').store('slide:options', $extend({link: 'cancel'}, options));
	},

	get: function(options){
		if (options || !this.retrieve('slide')){
			if (options || !this.retrieve('slide:options')) this.set('slide', options);
			this.store('slide', new Fx.Slide(this, this.retrieve('slide:options')));
		}
		return this.retrieve('slide');
	}

};

Element.implement({

	slide: function(how, mode){
		how = how || 'toggle';
		var slide = this.get('slide'), toggle;
		switch (how){
			case 'hide': slide.hide(mode); break;
			case 'show': slide.show(mode); break;
			case 'toggle':
				var flag = this.retrieve('slide:flag', slide.open);
				slide[flag ? 'slideOut' : 'slideIn'](mode);
				this.store('slide:flag', !flag);
				toggle = true;
			break;
			default: slide.start(how, mode);
		}
		if (!toggle) this.eliminate('slide:flag');
		return this;
	}

});


/*
Script: Fx.SmoothScroll.js
	Class for creating a smooth scrolling effect to all internal links on the page.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

var SmoothScroll = Fx.SmoothScroll = new Class({

	Extends: Fx.Scroll,

	initialize: function(options, context){
		context = context || document;
		this.doc = context.getDocument();
		var win = context.getWindow();
		this.parent(this.doc, options);
		this.links = this.options.links ? $$(this.options.links) : $$(this.doc.links);
		var location = win.location.href.match(/^[^#]*/)[0] + '#';
		this.links.each(function(link){
			if (link.href.indexOf(location) != 0) {return;}
			var anchor = link.href.substr(location.length);
			if (anchor) this.useLink(link, anchor);
		}, this);
		if (!Browser.Engine.webkit419) {
			this.addEvent('complete', function(){
				win.location.hash = this.anchor;
			}, true);
		}
	},

	useLink: function(link, anchor){
		var el;
		link.addEvent('click', function(event){
			if (el !== false && !el) el = document.id(anchor) || this.doc.getElement('a[name=' + anchor + ']');
			if (el) {
				event.preventDefault();
				this.anchor = anchor;
				this.toElement(el);
				link.blur();
			}
		}.bind(this));
	}

});

/*
Script: Fx.Sort.js
	Defines Fx.Sort, a class that reorders lists with a transition.

	License:
		MIT-style license.

	Authors:
		Aaron Newton

*/

Fx.Sort = new Class({

	Extends: Fx.Elements,

	options: {
		mode: 'vertical'
	},

	initialize: function(elements, options){
		this.parent(elements, options);
		this.elements.each(function(el){
			if (el.getStyle('position') == 'static') el.setStyle('position', 'relative');
		});
		this.setDefaultOrder();
	},

	setDefaultOrder: function(){
		this.currentOrder = this.elements.map(function(el, index){
			return index;
		});
	},

	sort: function(newOrder){
		if ($type(newOrder) != 'array') return false;
		var top = 0;
		var left = 0;
		var zero = {};
		var vert = this.options.mode == 'vertical';
		var current = this.elements.map(function(el, index){
			var size = el.getComputedSize({styles: ['border', 'padding', 'margin']});
			var val;
			if (vert){
				val = {
					top: top,
					margin: size['margin-top'],
					height: size.totalHeight
				};
				top += val.height - size['margin-top'];
			} else {
				val = {
					left: left,
					margin: size['margin-left'],
					width: size.totalWidth
				};
				left += val.width;
			}
			var plain = vert ? 'top' : 'left';
			zero[index] = {};
			var start = el.getStyle(plain).toInt();
			zero[index][plain] = start || 0;
			return val;
		}, this);
		this.set(zero);
		newOrder = newOrder.map(function(i){ return i.toInt(); });
		if (newOrder.length != this.elements.length){
			this.currentOrder.each(function(index){
				if (!newOrder.contains(index)) newOrder.push(index);
			});
			if (newOrder.length > this.elements.length)
				newOrder.splice(this.elements.length-1, newOrder.length - this.elements.length);
		}
		top = 0;
		left = 0;
		var margin = 0;
		var next = {};
		newOrder.each(function(item, index){
			var newPos = {};
			if (vert){
				newPos.top = top - current[item].top - margin;
				top += current[item].height;
			} else {
				newPos.left = left - current[item].left;
				left += current[item].width;
			}
			margin = margin + current[item].margin;
			next[item]=newPos;
		}, this);
		var mapped = {};
		$A(newOrder).sort().each(function(index){
			mapped[index] = next[index];
		});
		this.start(mapped);
		this.currentOrder = newOrder;
		return this;
	},

	rearrangeDOM: function(newOrder){
		newOrder = newOrder || this.currentOrder;
		var parent = this.elements[0].getParent();
		var rearranged = [];
		this.elements.setStyle('opacity', 0);
		//move each element and store the new default order
		newOrder.each(function(index){
			rearranged.push(this.elements[index].inject(parent).setStyles({
				top: 0,
				left: 0
			}));
		}, this);
		this.elements.setStyle('opacity', 1);
		this.elements = $$(rearranged);
		this.setDefaultOrder();
		return this;
	},

	getDefaultOrder: function(){
		return this.elements.map(function(el, index){
			return index;
		});
	},

	forward: function(){
		return this.sort(this.getDefaultOrder());
	},

	backward: function(){
		return this.sort(this.getDefaultOrder().reverse());
	},

	reverse: function(){
		return this.sort(this.currentOrder.reverse());
	},

	sortByElements: function(elements){
		return this.sort(elements.map(function(el){
			return this.elements.indexOf(el);
		}, this));
	},

	swap: function(one, two){
		if ($type(one) == 'element') one = this.elements.indexOf(one);
		if ($type(two) == 'element') two = this.elements.indexOf(two);

		var newOrder = $A(this.currentOrder);
		newOrder[this.currentOrder.indexOf(one)] = two;
		newOrder[this.currentOrder.indexOf(two)] = one;
		this.sort(newOrder);
	}

});

/*
Script: Drag.js
	The base Drag Class. Can be used to drag and resize Elements using mouse events.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
		Tom Occhinno
		Jan Kassens
*/

var Drag = new Class({

	Implements: [Events, Options],

	options: {/*
		onBeforeStart: $empty(thisElement),
		onStart: $empty(thisElement, event),
		onSnap: $empty(thisElement)
		onDrag: $empty(thisElement, event),
		onCancel: $empty(thisElement),
		onComplete: $empty(thisElement, event),*/
		snap: 6,
		unit: 'px',
		grid: false,
		style: true,
		limit: false,
		handle: false,
		invert: false,
		preventDefault: false,
		modifiers: {x: 'left', y: 'top'}
	},

	initialize: function(){
		var params = Array.link(arguments, {'options': Object.type, 'element': $defined});
		this.element = document.id(params.element);
		this.document = this.element.getDocument();
		this.setOptions(params.options || {});
		var htype = $type(this.options.handle);
		this.handles = ((htype == 'array' || htype == 'collection') ? $$(this.options.handle) : document.id(this.options.handle)) || this.element;
		this.mouse = {'now': {}, 'pos': {}};
		this.value = {'start': {}, 'now': {}};

		this.selection = (Browser.Engine.trident) ? 'selectstart' : 'mousedown';

		this.bound = {
			start: this.start.bind(this),
			check: this.check.bind(this),
			drag: this.drag.bind(this),
			stop: this.stop.bind(this),
			cancel: this.cancel.bind(this),
			eventStop: $lambda(false)
		};
		this.attach();
	},

	attach: function(){
		this.handles.addEvent('mousedown', this.bound.start);
		return this;
	},

	detach: function(){
		this.handles.removeEvent('mousedown', this.bound.start);
		return this;
	},

	start: function(event){
		if (this.options.preventDefault) event.preventDefault();
		this.mouse.start = event.page;
		this.fireEvent('beforeStart', this.element);
		var limit = this.options.limit;
		this.limit = {x: [], y: []};
		for (var z in this.options.modifiers){
			if (!this.options.modifiers[z]) continue;
			if (this.options.style) this.value.now[z] = this.element.getStyle(this.options.modifiers[z]).toInt();
			else this.value.now[z] = this.element[this.options.modifiers[z]];
			if (this.options.invert) this.value.now[z] *= -1;
			this.mouse.pos[z] = event.page[z] - this.value.now[z];
			if (limit && limit[z]){
				for (var i = 2; i--; i){
					if ($chk(limit[z][i])) this.limit[z][i] = $lambda(limit[z][i])();
				}
			}
		}
		if ($type(this.options.grid) == 'number') this.options.grid = {x: this.options.grid, y: this.options.grid};
		this.document.addEvents({mousemove: this.bound.check, mouseup: this.bound.cancel});
		this.document.addEvent(this.selection, this.bound.eventStop);
	},

	check: function(event){
		if (this.options.preventDefault) event.preventDefault();
		var distance = Math.round(Math.sqrt(Math.pow(event.page.x - this.mouse.start.x, 2) + Math.pow(event.page.y - this.mouse.start.y, 2)));
		if (distance > this.options.snap){
			this.cancel();
			this.document.addEvents({
				mousemove: this.bound.drag,
				mouseup: this.bound.stop
			});
			this.fireEvent('start', [this.element, event]).fireEvent('snap', this.element);
		}
	},

	drag: function(event){
		if (this.options.preventDefault) event.preventDefault();
		this.mouse.now = event.page;
		for (var z in this.options.modifiers){
			if (!this.options.modifiers[z]) continue;
			this.value.now[z] = this.mouse.now[z] - this.mouse.pos[z];
			if (this.options.invert) this.value.now[z] *= -1;
			if (this.options.limit && this.limit[z]){
				if ($chk(this.limit[z][1]) && (this.value.now[z] > this.limit[z][1])){
					this.value.now[z] = this.limit[z][1];
				} else if ($chk(this.limit[z][0]) && (this.value.now[z] < this.limit[z][0])){
					this.value.now[z] = this.limit[z][0];
				}
			}
			if (this.options.grid[z]) this.value.now[z] -= ((this.value.now[z] - (this.limit[z][0]||0)) % this.options.grid[z]);
			if (this.options.style) this.element.setStyle(this.options.modifiers[z], this.value.now[z] + this.options.unit);
			else this.element[this.options.modifiers[z]] = this.value.now[z];
		}
		this.fireEvent('drag', [this.element, event]);
	},

	cancel: function(event){
		this.document.removeEvent('mousemove', this.bound.check);
		this.document.removeEvent('mouseup', this.bound.cancel);
		if (event){
			this.document.removeEvent(this.selection, this.bound.eventStop);
			this.fireEvent('cancel', this.element);
		}
	},

	stop: function(event){
		this.document.removeEvent(this.selection, this.bound.eventStop);
		this.document.removeEvent('mousemove', this.bound.drag);
		this.document.removeEvent('mouseup', this.bound.stop);
		if (event) this.fireEvent('complete', [this.element, event]);
	}

});

Element.implement({

	makeResizable: function(options){
		var drag = new Drag(this, $merge({modifiers: {x: 'width', y: 'height'}}, options));
		this.store('resizer', drag);
		return drag.addEvent('drag', function(){
			this.fireEvent('resize', drag);
		}.bind(this));
	}

});


/*
Script: Drag.Move.js
	A Drag extension that provides support for the constraining of draggables to containers and droppables.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
		Tom Occhinno
		Jan Kassens*/

Drag.Move = new Class({

	Extends: Drag,

	options: {/*
		onEnter: $empty(thisElement, overed),
		onLeave: $empty(thisElement, overed),
		onDrop: $empty(thisElement, overed, event),*/
		droppables: [],
		container: false,
		precalculate: false,
		includeMargins: true,
		checkDroppables: true
	},

	initialize: function(element, options){
		this.parent(element, options);
		this.droppables = $$(this.options.droppables);
		this.container = document.id(this.options.container);
		if (this.container && $type(this.container) != 'element') this.container = document.id(this.container.getDocument().body);

		var position = this.element.getStyle('position');
		if (position=='static') position = 'absolute';
		if ([this.element.getStyle('left'), this.element.getStyle('top')].contains('auto')) this.element.position(this.element.getPosition(this.element.offsetParent));
		this.element.setStyle('position', position);

		this.addEvent('start', this.checkDroppables, true);

		this.overed = null;
	},

	start: function(event){
		if (this.container){
			var ccoo = this.container.getCoordinates(this.element.getOffsetParent()), cbs = {}, ems = {};

			['top', 'right', 'bottom', 'left'].each(function(pad){
				cbs[pad] = this.container.getStyle('border-' + pad).toInt();
				ems[pad] = this.element.getStyle('margin-' + pad).toInt();
			}, this);

			var width = this.element.offsetWidth + ems.left + ems.right;
			var height = this.element.offsetHeight + ems.top + ems.bottom;

			if (this.options.includeMargins) {
				$each(ems, function(value, key) {
					ems[key] = 0;
				});
			}
			if (this.container == this.element.getOffsetParent()) {
				this.options.limit = {
					x: [0 - ems.left, ccoo.right - cbs.left - cbs.right - width + ems.right],
					y: [0 - ems.top, ccoo.bottom - cbs.top - cbs.bottom - height + ems.bottom]
				};
			} else {
				this.options.limit = {
					x: [ccoo.left + cbs.left - ems.left, ccoo.right - cbs.right - width + ems.right],
					y: [ccoo.top + cbs.top - ems.top, ccoo.bottom - cbs.bottom - height + ems.bottom]
				};
			}

		}
		if (this.options.precalculate){
			this.positions = this.droppables.map(function(el) {
				return el.getCoordinates();
			});
		}
		this.parent(event);
	},

	checkAgainst: function(el, i){
		el = (this.positions) ? this.positions[i] : el.getCoordinates();
		var now = this.mouse.now;
		return (now.x > el.left && now.x < el.right && now.y < el.bottom && now.y > el.top);
	},

	checkDroppables: function(){
		var overed = this.droppables.filter(this.checkAgainst, this).getLast();
		if (this.overed != overed){
			if (this.overed) this.fireEvent('leave', [this.element, this.overed]);
			if (overed) this.fireEvent('enter', [this.element, overed]);
			this.overed = overed;
		}
	},

	drag: function(event){
		this.parent(event);
		if (this.options.checkDroppables && this.droppables.length) this.checkDroppables();
	},

	stop: function(event){
		this.checkDroppables();
		this.fireEvent('drop', [this.element, this.overed, event]);
		this.overed = null;
		return this.parent(event);
	}

});

Element.implement({

	makeDraggable: function(options){
		var drag = new Drag.Move(this, options);
		this.store('dragger', drag);
		return drag;
	}

});


/*
Script: Slider.js
	Class for creating horizontal and vertical slider controls.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

var Slider = new Class({

	Implements: [Events, Options],

	Binds: ['clickedElement', 'draggedKnob', 'scrolledElement'],

	options: {/*
		onTick: $empty(intPosition),
		onChange: $empty(intStep),
		onComplete: $empty(strStep),*/
		onTick: function(position){
			if (this.options.snap) position = this.toPosition(this.step);
			this.knob.setStyle(this.property, position);
		},
		snap: false,
		offset: 0,
		range: false,
		wheel: false,
		steps: 100,
		mode: 'horizontal'
	},

	initialize: function(element, knob, options){
		this.setOptions(options);
		this.element = document.id(element);
		this.knob = document.id(knob);
		this.previousChange = this.previousEnd = this.step = -1;
		var offset, limit = {}, modifiers = {'x': false, 'y': false};
		switch (this.options.mode){
			case 'vertical':
				this.axis = 'y';
				this.property = 'top';
				offset = 'offsetHeight';
				break;
			case 'horizontal':
				this.axis = 'x';
				this.property = 'left';
				offset = 'offsetWidth';
		}
		this.half = this.knob[offset] / 2;
		this.full = this.element[offset] - this.knob[offset] + (this.options.offset * 2);
		this.min = $chk(this.options.range[0]) ? this.options.range[0] : 0;
		this.max = $chk(this.options.range[1]) ? this.options.range[1] : this.options.steps;
		this.range = this.max - this.min;
		this.steps = this.options.steps || this.full;
		this.stepSize = Math.abs(this.range) / this.steps;
		this.stepWidth = this.stepSize * this.full / Math.abs(this.range) ;

		this.knob.setStyle('position', 'relative').setStyle(this.property, - this.options.offset);
		modifiers[this.axis] = this.property;
		limit[this.axis] = [- this.options.offset, this.full - this.options.offset];

		this.bound = {
			clickedElement: this.clickedElement.bind(this),
			scrolledElement: this.scrolledElement.bindWithEvent(this),
			draggedKnob: this.draggedKnob.bind(this)
		};

		var dragOptions = {
			snap: 0,
			limit: limit,
			modifiers: modifiers,
			onDrag: this.bound.draggedKnob,
			onStart: this.bound.draggedKnob,
			onBeforeStart: (function(){
				this.isDragging = true;
			}).bind(this),
			onComplete: function(){
				this.isDragging = false;
				this.draggedKnob();
				this.end();
			}.bind(this)
		};
		if (this.options.snap){
			dragOptions.grid = Math.ceil(this.stepWidth);
			dragOptions.limit[this.axis][1] = this.full;
		}

		this.drag = new Drag(this.knob, dragOptions);
		this.attach();
	},

	attach: function(){
		this.element.addEvent('mousedown', this.bound.clickedElement);
		if (this.options.wheel) this.element.addEvent('mousewheel', this.bound.scrolledElement);
		this.drag.attach();
		return this;
	},

	detach: function(){
		this.element.removeEvent('mousedown', this.bound.clickedElement);
		this.element.removeEvent('mousewheel', this.bound.scrolledElement);
		this.drag.detach();
		return this;
	},

	set: function(step){
		if (!((this.range > 0) ^ (step < this.min))) step = this.min;
		if (!((this.range > 0) ^ (step > this.max))) step = this.max;

		this.step = Math.round(step);
		this.checkStep();
		this.fireEvent('tick', this.toPosition(this.step));
		this.end();
		return this;
	},

	clickedElement: function(event){
		if (this.isDragging || event.target == this.knob) return;

		var dir = this.range < 0 ? -1 : 1;
		var position = event.page[this.axis] - this.element.getPosition()[this.axis] - this.half;
		position = position.limit(-this.options.offset, this.full -this.options.offset);

		this.step = Math.round(this.min + dir * this.toStep(position));
		this.checkStep();
		this.fireEvent('tick', position);
		this.end();
	},

	scrolledElement: function(event){
		var mode = (this.options.mode == 'horizontal') ? (event.wheel < 0) : (event.wheel > 0);
		this.set(mode ? this.step - this.stepSize : this.step + this.stepSize);
		event.stop();
	},

	draggedKnob: function(){
		var dir = this.range < 0 ? -1 : 1;
		var position = this.drag.value.now[this.axis];
		position = position.limit(-this.options.offset, this.full -this.options.offset);
		this.step = Math.round(this.min + dir * this.toStep(position));
		this.checkStep();
	},

	checkStep: function(){
		if (this.previousChange != this.step){
			this.previousChange = this.step;
			this.fireEvent('change', this.step);
		}
	},

	end: function(){
		if (this.previousEnd !== this.step){
			this.previousEnd = this.step;
			this.fireEvent('complete', this.step + '');
		}
	},

	toStep: function(position){
		var step = (position + this.options.offset) * this.stepSize / this.full * this.steps;
		return this.options.steps ? Math.round(step -= step % this.stepSize) : step;
	},

	toPosition: function(step){
		return (this.full * Math.abs(this.min - step)) / (this.steps * this.stepSize) - this.options.offset;
	}

});

/*
Script: Sortables.js
	Class for creating a drag and drop sorting interface for lists of items.

	License:
		MIT-style license.

	Authors:
		Tom Occhino
*/

var Sortables = new Class({

	Implements: [Events, Options],

	options: {/*
		onSort: $empty(element, clone),
		onStart: $empty(element, clone),
		onComplete: $empty(element),*/
		snap: 4,
		opacity: 1,
		clone: false,
		revert: false,
		handle: false,
		constrain: false
	},

	initialize: function(lists, options){
		this.setOptions(options);
		this.elements = [];
		this.lists = [];
		this.idle = true;

		this.addLists($$(document.id(lists) || lists));
		if (!this.options.clone) this.options.revert = false;
		if (this.options.revert) this.effect = new Fx.Morph(null, $merge({duration: 250, link: 'cancel'}, this.options.revert));
	},

	attach: function(){
		this.addLists(this.lists);
		return this;
	},

	detach: function(){
		this.lists = this.removeLists(this.lists);
		return this;
	},

	addItems: function(){
		Array.flatten(arguments).each(function(element){
			this.elements.push(element);
			var start = element.retrieve('sortables:start', this.start.bindWithEvent(this, element));
			(this.options.handle ? element.getElement(this.options.handle) || element : element).addEvent('mousedown', start);
		}, this);
		return this;
	},

	addLists: function(){
		Array.flatten(arguments).each(function(list){
			this.lists.push(list);
			this.addItems(list.getChildren());
		}, this);
		return this;
	},

	removeItems: function(){
		return $$(Array.flatten(arguments).map(function(element){
			this.elements.erase(element);
			var start = element.retrieve('sortables:start');
			(this.options.handle ? element.getElement(this.options.handle) || element : element).removeEvent('mousedown', start);

			return element;
		}, this));
	},

	removeLists: function(){
		return $$(Array.flatten(arguments).map(function(list){
			this.lists.erase(list);
			this.removeItems(list.getChildren());

			return list;
		}, this));
	},

	getClone: function(event, element){
		if (!this.options.clone) return new Element('div').inject(document.body);
		if ($type(this.options.clone) == 'function') return this.options.clone.call(this, event, element, this.list);
		return element.clone(true).setStyles({
			margin: '0px',
			position: 'absolute',
			visibility: 'hidden',
			'width': element.getStyle('width')
		}).inject(this.list).position(element.getPosition(element.getOffsetParent()));
	},

	getDroppables: function(){
		var droppables = this.list.getChildren();
		if (!this.options.constrain) droppables = this.lists.concat(droppables).erase(this.list);
		return droppables.erase(this.clone).erase(this.element);
	},

	insert: function(dragging, element){
		var where = 'inside';
		if (this.lists.contains(element)){
			this.list = element;
			this.drag.droppables = this.getDroppables();
		} else {
			where = this.element.getAllPrevious().contains(element) ? 'before' : 'after';
		}
		this.element.inject(element, where);
		this.fireEvent('sort', [this.element, this.clone]);
	},

	start: function(event, element){
		if (!this.idle) return;
		this.idle = false;
		this.element = element;
		this.opacity = element.get('opacity');
		this.list = element.getParent();
		this.clone = this.getClone(event, element);

		this.drag = new Drag.Move(this.clone, {
			snap: this.options.snap,
			container: this.options.constrain && this.element.getParent(),
			droppables: this.getDroppables(),
			onSnap: function(){
				event.stop();
				this.clone.setStyle('visibility', 'visible');
				this.element.set('opacity', this.options.opacity || 0);
				this.fireEvent('start', [this.element, this.clone]);
			}.bind(this),
			onEnter: this.insert.bind(this),
			onCancel: this.reset.bind(this),
			onComplete: this.end.bind(this)
		});

		this.clone.inject(this.element, 'before');
		this.drag.start(event);
	},

	end: function(){
		this.drag.detach();
		this.element.set('opacity', this.opacity);
		if (this.effect){
			var dim = this.element.getStyles('width', 'height');
			var pos = this.clone.computePosition(this.element.getPosition(this.clone.offsetParent));
			this.effect.element = this.clone;
			this.effect.start({
				top: pos.top,
				left: pos.left,
				width: dim.width,
				height: dim.height,
				opacity: 0.25
			}).chain(this.reset.bind(this));
		} else {
			this.reset();
		}
	},

	reset: function(){
		this.idle = true;
		this.clone.destroy();
		this.fireEvent('complete', this.element);
	},

	serialize: function(){
		var params = Array.link(arguments, {modifier: Function.type, index: $defined});
		var serial = this.lists.map(function(list){
			return list.getChildren().map(params.modifier || function(element){
				return element.get('id');
			}, this);
		}, this);

		var index = params.index;
		if (this.lists.length == 1) index = 0;
		return $chk(index) && index >= 0 && index < this.lists.length ? serial[index] : serial;
	}

});


/*
Script: Request.JSONP.js
	Defines Request.JSONP, a class for cross domain javascript via script injection.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
		Guillermo Rauch
*/

Request.JSONP = new Class({

	Implements: [Chain, Events, Options, Log],

	options: {/*
		onRetry: $empty(intRetries),
		onRequest: $empty(scriptElement),
		onComplete: $empty(data),
		onSuccess: $empty(data),
		onCancel: $empty(),*/
		url: '',
		data: {},
		retries: 0,
		timeout: 0,
		link: 'ignore',
		callbackKey: 'callback',
		injectScript: document.head
	},

	initialize: function(options){
		this.setOptions(options);
		this.running = false;
		this.requests = 0;
		this.triesRemaining = [];
	},

	check: function(){
		if (!this.running) return true;
		switch (this.options.link){
			case 'cancel': this.cancel(); return true;
			case 'chain': this.chain(this.caller.bind(this, arguments)); return false;
		}
		return false;
	},

	send: function(options){
		if (!$chk(arguments[1]) && !this.check(options)) return this;

		var type = $type(options), old = this.options, index = $chk(arguments[1]) ? arguments[1] : this.requests++;
		if (type == 'string' || type == 'element') options = {data: options};

		options = $extend({data: old.data, url: old.url}, options);

		if (!$chk(this.triesRemaining[index])) this.triesRemaining[index] = this.options.retries;
		var remaining = this.triesRemaining[index];

		(function(){
			var script = this.getScript(options);
			this.log('JSONP retrieving script with url: ' + script.get('src'));
			this.fireEvent('request', script);
			this.running = true;

			(function(){
				if (remaining){
					this.triesRemaining[index] = remaining - 1;
					if (script){
						script.destroy();
						this.send(options, index);
						this.fireEvent('retry', this.triesRemaining[index]);
					}
				} else if(script && this.options.timeout){
					script.destroy();
					this.cancel();
					this.fireEvent('failure');
				}
			}).delay(this.options.timeout, this);
		}).delay(Browser.Engine.trident ? 50 : 0, this);
		return this;
	},

	cancel: function(){
		if (!this.running) return this;
		this.running = false;
		this.fireEvent('cancel');
		return this;
	},

	getScript: function(options){
		var index = Request.JSONP.counter, data;
		Request.JSONP.counter++;

		switch ($type(options.data)){
			case 'element': data = document.id(options.data).toQueryString(); break;
			case 'object': case 'hash': data = Hash.toQueryString(options.data);
		}

		var src = options.url +
			 (options.url.test('\\?') ? '&' :'?') +
			 (options.callbackKey || this.options.callbackKey) +
			 '=Request.JSONP.request_map.request_'+ index +
			 (data ? '&' + data : '');
		if (src.length > 2083) this.log('JSONP '+ src +' will fail in Internet Explorer, which enforces a 2083 bytes length limit on URIs');

		var script = new Element('script', {type: 'text/javascript', src: src});
		Request.JSONP.request_map['request_' + index] = function(data){ this.success(data, script); }.bind(this);
		return script.inject(this.options.injectScript);
	},

	success: function(data, script){
		if (script) script.destroy();
		this.running = false;
		this.log('JSONP successfully retrieved: ', data);
		this.fireEvent('complete', [data]).fireEvent('success', [data]).callChain();
	}

});

Request.JSONP.counter = 0;
Request.JSONP.request_map = {};

/*
Script: Request.Queue.js
	Controls several instances of Request and its variants to run only one request at a time.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

Request.Queue = new Class({

	Implements: [Options, Events],

	Binds: ['attach', 'request', 'complete', 'cancel', 'success', 'failure', 'exception'],

	options: {/*
		onRequest: $empty(argsPassedToOnRequest),
		onSuccess: $empty(argsPassedToOnSuccess),
		onComplete: $empty(argsPassedToOnComplete),
		onCancel: $empty(argsPassedToOnCancel),
		onException: $empty(argsPassedToOnException),
		onFailure: $empty(argsPassedToOnFailure),*/
		stopOnFailure: true,
		autoAdvance: true,
		concurrent: 1,
		requests: {}
	},

	initialize: function(options){
		this.setOptions(options);
		this.requests = new Hash;
		this.addRequests(this.options.requests);
		this.queue = [];
		this.reqBinders = {};
	},

	addRequest: function(name, request){
		this.requests.set(name, request);
		this.attach(name, request);
		return this;
	},

	addRequests: function(obj){
		$each(obj, function(req, name){
			this.addRequest(name, req);
		}, this);
		return this;
	},

	getName: function(req){
		return this.requests.keyOf(req);
	},

	attach: function(name, req){
		if (req._groupSend) return this;
		['request', 'complete', 'cancel', 'success', 'failure', 'exception'].each(function(evt){
			if(!this.reqBinders[name]) this.reqBinders[name] = {};
			this.reqBinders[name][evt] = function(){
				this['on' + evt.capitalize()].apply(this, [name, req].extend(arguments));
			}.bind(this);
			req.addEvent(evt, this.reqBinders[name][evt]);
		}, this);
		req._groupSend = req.send;
		req.send = function(options){
			this.send(name, options);
			return req;
		}.bind(this);
		return this;
	},

	removeRequest: function(req){
		var name = $type(req) == 'object' ? this.getName(req) : req;
		if (!name && $type(name) != 'string') return this;
		req = this.requests.get(name);
		if (!req) return this;
		['request', 'complete', 'cancel', 'success', 'failure', 'exception'].each(function(evt){
			req.removeEvent(evt, this.reqBinders[name][evt]);
		}, this);
		req.send = req._groupSend;
		delete req._groupSend;
		return this;
	},

	getRunning: function(){
		return this.requests.filter(function(r){ return r.running; });
	},

	isRunning: function(){
		return !!this.getRunning().getKeys().length;
	},

	send: function(name, options){
		var q = function(){
			this.requests.get(name)._groupSend(options);
			this.queue.erase(q);
		}.bind(this);
		q.name = name;
		if (this.getRunning().getKeys().length >= this.options.concurrent || (this.error && this.options.stopOnFailure)) this.queue.push(q);
		else q();
		return this;
	},

	hasNext: function(name){
		return (!name) ? !!this.queue.length : !!this.queue.filter(function(q){ return q.name == name; }).length;
	},

	resume: function(){
		this.error = false;
		(this.options.concurrent - this.getRunning().getKeys().length).times(this.runNext, this);
		return this;
	},

	runNext: function(name){
		if (!this.queue.length) return this;
		if (!name){
			this.queue[0]();
		} else {
			var found;
			this.queue.each(function(q){
				if (!found && q.name == name){
					found = true;
					q();
				}
			});
		}
		return this;
	},

	runAll: function() {
		this.queue.each(function(q) {
			q();
		});
		return this;
	},

	clear: function(name){
		if (!name){
			this.queue.empty();
		} else {
			this.queue = this.queue.map(function(q){
				if (q.name != name) return q;
				else return false;
			}).filter(function(q){ return q; });
		}
		return this;
	},

	cancel: function(name){
		this.requests.get(name).cancel();
		return this;
	},

	onRequest: function(){
		this.fireEvent('request', arguments);
	},

	onComplete: function(){
		this.fireEvent('complete', arguments);
	},

	onCancel: function(){
		if (this.options.autoAdvance && !this.error) this.runNext();
		this.fireEvent('cancel', arguments);
	},

	onSuccess: function(){
		if (this.options.autoAdvance && !this.error) this.runNext();
		this.fireEvent('success', arguments);
	},

	onFailure: function(){
		this.error = true;
		if (!this.options.stopOnFailure && this.options.autoAdvance) this.runNext();
		this.fireEvent('failure', arguments);
	},

	onException: function(){
		this.error = true;
		if (!this.options.stopOnFailure && this.options.autoAdvance) this.runNext();
		this.fireEvent('exception', arguments);
	}

});


/*
Script: Request.Periodical.js
	Requests the same url at a time interval that increases when no data is returned from the requested server

	License:
		MIT-style license.

	Authors:
		Christoph Pojer

*/

Request.implement({

	options: {
		initialDelay: 5000,
		delay: 5000,
		limit: 60000
	},

	startTimer: function(data){
		var fn = (function(){
			if (!this.running) this.send({data: data});
		});
		this.timer = fn.delay(this.options.initialDelay, this);
		this.lastDelay = this.options.initialDelay;
		this.completeCheck = function(j){
			$clear(this.timer);
			if (j) this.lastDelay = this.options.delay;
			else this.lastDelay = (this.lastDelay+this.options.delay).min(this.options.limit);
			this.timer = fn.delay(this.lastDelay, this);
		};
		this.addEvent('complete', this.completeCheck);
		return this;
	},

	stopTimer: function(){
		$clear(this.timer);
		this.removeEvent('complete', this.completeCheck);
		return this;
	}

});

/*
Script: Assets.js
	Provides methods to dynamically load JavaScript, CSS, and Image files into the document.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

var Asset = {

	javascript: function(source, properties){
		properties = $extend({
			onload: $empty,
			document: document,
			check: $lambda(true)
		}, properties);

		var script = new Element('script', {src: source, type: 'text/javascript'});

		var load = properties.onload.bind(script), check = properties.check, doc = properties.document;
		delete properties.onload; delete properties.check; delete properties.document;

		script.addEvents({
			load: load,
			readystatechange: function(){
				if (['loaded', 'complete'].contains(this.readyState)) load();
			}
		}).set(properties);

		if (Browser.Engine.webkit419) var checker = (function(){
			if (!$try(check)) return;
			$clear(checker);
			load();
		}).periodical(50);

		return script.inject(doc.head);
	},

	css: function(source, properties){
		return new Element('link', $merge({
			rel: 'stylesheet', media: 'screen', type: 'text/css', href: source
		}, properties)).inject(document.head);
	},

	image: function(source, properties){
		properties = $merge({
			onload: $empty,
			onabort: $empty,
			onerror: $empty
		}, properties);
		var image = new Image();
		var element = document.id(image) || new Element('img');
		['load', 'abort', 'error'].each(function(name){
			var type = 'on' + name;
			var event = properties[type];
			delete properties[type];
			image[type] = function(){
				if (!image) return;
				if (!element.parentNode){
					element.width = image.width;
					element.height = image.height;
				}
				image = image.onload = image.onabort = image.onerror = null;
				event.delay(1, element, element);
				element.fireEvent(name, element, 1);
			};
		});
		image.src = element.src = source;
		if (image && image.complete) image.onload.delay(1);
		return element.set(properties);
	},

	images: function(sources, options){
		options = $merge({
			onComplete: $empty,
			onProgress: $empty,
			onError: $empty,
			properties: {}
		}, options);
		sources = $splat(sources);
		var images = [];
		var counter = 0;
		return new Elements(sources.map(function(source){
			return Asset.image(source, $extend(options.properties, {
				onload: function(){
					options.onProgress.call(this, counter, sources.indexOf(source));
					counter++;
					if (counter == sources.length) options.onComplete();
				},
				onerror: function(){
					options.onError.call(this, counter, sources.indexOf(source));
					counter++;
					if (counter == sources.length) options.onComplete();
				}
			}));
		}));
	}

};

/*
Script: Color.js
	Class for creating and manipulating colors in JavaScript. Supports HSB -> RGB Conversions and vice versa.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

var Color = new Native({

	initialize: function(color, type){
		if (arguments.length >= 3){
			type = 'rgb'; color = Array.slice(arguments, 0, 3);
		} else if (typeof color == 'string'){
			if (color.match(/rgb/)) color = color.rgbToHex().hexToRgb(true);
			else if (color.match(/hsb/)) color = color.hsbToRgb();
			else color = color.hexToRgb(true);
		}
		type = type || 'rgb';
		switch (type){
			case 'hsb':
				var old = color;
				color = color.hsbToRgb();
				color.hsb = old;
			break;
			case 'hex': color = color.hexToRgb(true); break;
		}
		color.rgb = color.slice(0, 3);
		color.hsb = color.hsb || color.rgbToHsb();
		color.hex = color.rgbToHex();
		return $extend(color, this);
	}

});

Color.implement({

	mix: function(){
		var colors = Array.slice(arguments);
		var alpha = ($type(colors.getLast()) == 'number') ? colors.pop() : 50;
		var rgb = this.slice();
		colors.each(function(color){
			color = new Color(color);
			for (var i = 0; i < 3; i++) rgb[i] = Math.round((rgb[i] / 100 * (100 - alpha)) + (color[i] / 100 * alpha));
		});
		return new Color(rgb, 'rgb');
	},

	invert: function(){
		return new Color(this.map(function(value){
			return 255 - value;
		}));
	},

	setHue: function(value){
		return new Color([value, this.hsb[1], this.hsb[2]], 'hsb');
	},

	setSaturation: function(percent){
		return new Color([this.hsb[0], percent, this.hsb[2]], 'hsb');
	},

	setBrightness: function(percent){
		return new Color([this.hsb[0], this.hsb[1], percent], 'hsb');
	}

});

var $RGB = function(r, g, b){
	return new Color([r, g, b], 'rgb');
};

var $HSB = function(h, s, b){
	return new Color([h, s, b], 'hsb');
};

var $HEX = function(hex){
	return new Color(hex, 'hex');
};

Array.implement({

	rgbToHsb: function(){
		var red = this[0], green = this[1], blue = this[2];
		var hue, saturation, brightness;
		var max = Math.max(red, green, blue), min = Math.min(red, green, blue);
		var delta = max - min;
		brightness = max / 255;
		saturation = (max != 0) ? delta / max : 0;
		if (saturation == 0){
			hue = 0;
		} else {
			var rr = (max - red) / delta;
			var gr = (max - green) / delta;
			var br = (max - blue) / delta;
			if (red == max) hue = br - gr;
			else if (green == max) hue = 2 + rr - br;
			else hue = 4 + gr - rr;
			hue /= 6;
			if (hue < 0) hue++;
		}
		return [Math.round(hue * 360), Math.round(saturation * 100), Math.round(brightness * 100)];
	},

	hsbToRgb: function(){
		var br = Math.round(this[2] / 100 * 255);
		if (this[1] == 0){
			return [br, br, br];
		} else {
			var hue = this[0] % 360;
			var f = hue % 60;
			var p = Math.round((this[2] * (100 - this[1])) / 10000 * 255);
			var q = Math.round((this[2] * (6000 - this[1] * f)) / 600000 * 255);
			var t = Math.round((this[2] * (6000 - this[1] * (60 - f))) / 600000 * 255);
			switch (Math.floor(hue / 60)){
				case 0: return [br, t, p];
				case 1: return [q, br, p];
				case 2: return [p, br, t];
				case 3: return [p, q, br];
				case 4: return [t, p, br];
				case 5: return [br, p, q];
			}
		}
		return false;
	}

});

String.implement({

	rgbToHsb: function(){
		var rgb = this.match(/\d{1,3}/g);
		return (rgb) ? rgb.rgbToHsb() : null;
	},

	hsbToRgb: function(){
		var hsb = this.match(/\d{1,3}/g);
		return (hsb) ? hsb.hsbToRgb() : null;
	}

});


/*
Script: Group.js
	Class for monitoring collections of events

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

var Group = new Class({

	initialize: function(){
		this.instances = Array.flatten(arguments);
		this.events = {};
		this.checker = {};
	},

	addEvent: function(type, fn){
		this.checker[type] = this.checker[type] || {};
		this.events[type] = this.events[type] || [];
		if (this.events[type].contains(fn)) return false;
		else this.events[type].push(fn);
		this.instances.each(function(instance, i){
			instance.addEvent(type, this.check.bind(this, [type, instance, i]));
		}, this);
		return this;
	},

	check: function(type, instance, i){
		this.checker[type][i] = true;
		var every = this.instances.every(function(current, j){
			return this.checker[type][j] || false;
		}, this);
		if (!every) return;
		this.checker[type] = {};
		this.events[type].each(function(event){
			event.call(this, this.instances, instance);
		}, this);
	}

});


/*
Script: Hash.Cookie.js
	Class for creating, reading, and deleting Cookies in JSON format.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
		Aaron Newton
*/

Hash.Cookie = new Class({

	Extends: Cookie,

	options: {
		autoSave: true
	},

	initialize: function(name, options){
		this.parent(name, options);
		this.load();
	},

	save: function(){
		var value = JSON.encode(this.hash);
		if (!value || value.length > 4096) return false; //cookie would be truncated!
		if (value == '{}') this.dispose();
		else this.write(value);
		return true;
	},

	load: function(){
		this.hash = new Hash(JSON.decode(this.read(), true));
		return this;
	}

});

Hash.each(Hash.prototype, function(method, name){
	if (typeof method == 'function') Hash.Cookie.implement(name, function(){
		var value = method.apply(this.hash, arguments);
		if (this.options.autoSave) this.save();
		return value;
	});
});

/*
Script: IframeShim.js
	Defines IframeShim, a class for obscuring select lists and flash objects in IE.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

var IframeShim = new Class({

	Implements: [Options, Events, Class.Occlude],

	options: {
		className: 'iframeShim',
		display: false,
		zIndex: null,
		margin: 0,
		offset: {x: 0, y: 0},
		browsers: (Browser.Engine.trident4 || (Browser.Engine.gecko && !Browser.Engine.gecko19 && Browser.Platform.mac))
	},

	property: 'IframeShim',

	initialize: function(element, options){
		this.element = document.id(element);
		if (this.occlude()) return this.occluded;
		this.setOptions(options);
		this.makeShim();
		return this;
	},

	makeShim: function(){
		if(this.options.browsers){
			var zIndex = this.element.getStyle('zIndex').toInt();

			if (!zIndex){
				zIndex = 1;
				var pos = this.element.getStyle('position');
				if (pos == 'static' || !pos) this.element.setStyle('position', 'relative');
				this.element.setStyle('zIndex', zIndex);
			}
			zIndex = ($chk(this.options.zIndex) && zIndex > this.options.zIndex) ? this.options.zIndex : zIndex - 1;
			if (zIndex < 0) zIndex = 1;
			this.shim = new Element('iframe', {
				src:'javascript:false;document.write("");',
				scrolling: 'no',
				frameborder: 0,
				styles: {
					zIndex: zIndex,
					position: 'absolute',
					border: 'none',
					filter: 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)'
				},
				'class': this.options.className
			}).store('IframeShim', this);
			var inject = (function(){
				this.shim.inject(this.element, 'after');
				this[this.options.display ? 'show' : 'hide']();
				this.fireEvent('inject');
			}).bind(this);
			if (Browser.Engine.trident && !IframeShim.ready) window.addEvent('load', inject);
			else inject();
		} else {
			this.position = this.hide = this.show = this.dispose = $lambda(this);
		}
	},

	position: function(){
		if (!IframeShim.ready) return this;
		var size = this.element.measure(function(){ return this.getSize(); });
		if ($type(this.options.margin)){
			size.x = size.x - (this.options.margin * 2);
			size.y = size.y - (this.options.margin * 2);
			this.options.offset.x += this.options.margin;
			this.options.offset.y += this.options.margin;
		}
		if (this.shim) {
			this.shim.set({width: size.x, height: size.y}).position({
				relativeTo: this.element,
				offset: this.options.offset
			});
		}
		return this;
	},

	hide: function(){
		if (this.shim) this.shim.setStyle('display', 'none');
		return this;
	},

	show: function(){
		if (this.shim) this.shim.setStyle('display', 'block');
		return this.position();
	},

	dispose: function(){
		if (this.shim) this.shim.dispose();
		return this;
	},

	destroy: function(){
		if (this.shim) this.shim.destroy();
		return this;
	}

});

window.addEvent('load', function(){
	IframeShim.ready = true;
});

/*
Script: Scroller.js
	Class which scrolls the contents of any Element (including the window) when the mouse reaches the Element's boundaries.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

var Scroller = new Class({

	Implements: [Events, Options],

	options: {
		area: 20,
		velocity: 1,
		onChange: function(x, y){
			this.element.scrollTo(x, y);
		},
		fps: 50
	},

	initialize: function(element, options){
		this.setOptions(options);
		this.element = document.id(element);
		this.listener = ($type(this.element) != 'element') ? document.id(this.element.getDocument().body) : this.element;
		this.timer = null;
		this.bound = {
			attach: this.attach.bind(this),
			detach: this.detach.bind(this),
			getCoords: this.getCoords.bind(this)
		};
	},

	start: function(){
		this.listener.addEvents({
			mouseenter: this.bound.attach,
			mouseleave: this.bound.detach
		});
	},

	stop: function(){
		this.listener.removeEvents({
			mouseenter: this.bound.attach,
			mouseleave: this.bound.detach
		});
		this.timer = $clear(this.timer);
	},

	attach: function(){
		this.listener.addEvent('mousemove', this.bound.getCoords);
	},

	detach: function(){
		this.listener.removeEvent('mousemove', this.bound.getCoords);
		this.timer = $clear(this.timer);
	},

	getCoords: function(event){
		this.page = (this.listener.get('tag') == 'body') ? event.client : event.page;
		if (!this.timer) this.timer = this.scroll.periodical(Math.round(1000 / this.options.fps), this);
	},

	scroll: function(){
		var size = this.element.getSize(),
			scroll = this.element.getScroll(),
			pos = this.element.getOffsets(),
			scrollSize = this.element.getScrollSize(),
			change = {x: 0, y: 0};
		for (var z in this.page){
			if (this.page[z] < (this.options.area + pos[z]) && scroll[z] != 0)
				change[z] = (this.page[z] - this.options.area - pos[z]) * this.options.velocity;
			else if (this.page[z] + this.options.area > (size[z] + pos[z]) && scroll[z] + size[z] != scrollSize[z])
				change[z] = (this.page[z] - size[z] + this.options.area - pos[z]) * this.options.velocity;
		}
		if (change.y || change.x) this.fireEvent('change', [scroll.x + change.x, scroll.y + change.y]);
	}

});

/*
Script: Tips.js
	Class for creating nice tips that follow the mouse cursor when hovering an element.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
		Christoph Pojer
*/

var Tips = new Class({

	Implements: [Events, Options],

	options: {
		onShow: function(tip){
			tip.setStyle('visibility', 'visible');
		},
		onHide: function(tip){
			tip.setStyle('visibility', 'hidden');
		},
		title: 'title',
		text: function(el){
			return el.get('rel') || el.get('href');
		},
		showDelay: 100,
		hideDelay: 100,
		className: null,
		offset: {x: 16, y: 16},
		fixed: false
	},

	initialize: function(){
		var params = Array.link(arguments, {options: Object.type, elements: $defined});
		if (params.options && params.options.offsets) params.options.offset = params.options.offsets;
		this.setOptions(params.options);
		this.container = new Element('div', {'class': 'tip'});
		this.tip = this.getTip();

		if (params.elements) this.attach(params.elements);
	},

	getTip: function(){
		return new Element('div', {
			'class': this.options.className,
			styles: {
				visibility: 'hidden',
				display: 'none',
				position: 'absolute',
				top: 0,
				left: 0
			}
		}).adopt(
			new Element('div', {'class': 'tip-top'}),
			this.container,
			new Element('div', {'class': 'tip-bottom'})
		).inject(document.body);
	},

	attach: function(elements){
		var read = function(option, element){
			if (option == null) return '';
			return $type(option) == 'function' ? option(element) : element.get(option);
		};
		$$(elements).each(function(element){
			var title = read(this.options.title, element);
			element.erase('title').store('tip:native', title).retrieve('tip:title', title);
			element.retrieve('tip:text', read(this.options.text, element));

			var events = ['enter', 'leave'];
			if (!this.options.fixed) events.push('move');

			events.each(function(value){
				element.addEvent('mouse' + value, element.retrieve('tip:' + value, this['element' + value.capitalize()].bindWithEvent(this, element)));
			}, this);
		}, this);

		return this;
	},

	detach: function(elements){
		$$(elements).each(function(element){
			['enter', 'leave', 'move'].each(function(value){
				element.removeEvent('mouse' + value, element.retrieve('tip:' + value) || $empty);
			});

			element.eliminate('tip:enter').eliminate('tip:leave').eliminate('tip:move');

			if ($type(this.options.title) == 'string' && this.options.title == 'title'){
				var original = element.retrieve('tip:native');
				if (original) element.set('title', original);
			}
		}, this);

		return this;
	},

	elementEnter: function(event, element){
		$A(this.container.childNodes).each(Element.dispose);

		['title', 'text'].each(function(value){
			var content = element.retrieve('tip:' + value);
			if (!content) return;

			this[value + 'Element'] = new Element('div', {'class': 'tip-' + value}).inject(this.container);
			this.fill(this[value + 'Element'], content);
		}, this);

		this.timer = $clear(this.timer);
		this.timer = this.show.delay(this.options.showDelay, this, element);
		this.tip.setStyle('display', 'block');
		this.position((!this.options.fixed) ? event : {page: element.getPosition()});
	},

	elementLeave: function(event, element){
		$clear(this.timer);
		this.tip.setStyle('display', 'none');
		this.timer = this.hide.delay(this.options.hideDelay, this, element);
	},

	elementMove: function(event){
		this.position(event);
	},

	position: function(event){
		var size = window.getSize(), scroll = window.getScroll(),
			tip = {x: this.tip.offsetWidth, y: this.tip.offsetHeight},
			props = {x: 'left', y: 'top'},
			obj = {};

		for (var z in props){
			obj[props[z]] = event.page[z] + this.options.offset[z];
			if ((obj[props[z]] + tip[z] - scroll[z]) > size[z]) obj[props[z]] = event.page[z] - this.options.offset[z] - tip[z];
		}

		this.tip.setStyles(obj);
	},

	fill: function(element, contents){
		if(typeof contents == 'string') element.set('html', contents);
		else element.adopt(contents);
	},

	show: function(el){
		this.fireEvent('show', [this.tip, el]);
	},

	hide: function(el){
		this.fireEvent('hide', [this.tip, el]);
	}

});

/*
Script: Date.English.US.js
	Date messages for US English.

	License:
		MIT-style license.

	Authors:
		Aaron Newton

*/

MooTools.lang.set('en-US', 'Date', {

	months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
	days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
	//culture's date order: MM/DD/YYYY
	dateOrder: ['month', 'date', 'year'],
	shortDate: '%m/%d/%Y',
	shortTime: '%I:%M%p',
	AM: 'AM',
	PM: 'PM',

	/* Date.Extras */
	ordinal: function(dayOfMonth){
		//1st, 2nd, 3rd, etc.
		return (dayOfMonth > 3 && dayOfMonth < 21) ? 'th' : ['th', 'st', 'nd', 'rd', 'th'][Math.min(dayOfMonth % 10, 4)];
	},

	lessThanMinuteAgo: 'less than a minute ago',
	minuteAgo: 'about a minute ago',
	minutesAgo: '{delta} minutes ago',
	hourAgo: 'about an hour ago',
	hoursAgo: 'about {delta} hours ago',
	dayAgo: '1 day ago',
	daysAgo: '{delta} days ago',
	lessThanMinuteUntil: 'less than a minute from now',
	minuteUntil: 'about a minute from now',
	minutesUntil: '{delta} minutes from now',
	hourUntil: 'about an hour from now',
	hoursUntil: 'about {delta} hours from now',
	dayUntil: '1 day from now',
	daysUntil: '{delta} days from now'

});

/*
Script: FormValidator.English.js
	Date messages for English.

	License:
		MIT-style license.

	Authors:
		Aaron Newton

*/

MooTools.lang.set('en-US', 'FormValidator', {

	required:'This field is required.',
	minLength:'Please enter at least {minLength} characters (you entered {length} characters).',
	maxLength:'Please enter no more than {maxLength} characters (you entered {length} characters).',
	integer:'Please enter an integer in this field. Numbers with decimals (e.g. 1.25) are not permitted.',
	numeric:'Please enter only numeric values in this field (i.e. "1" or "1.1" or "-1" or "-1.1").',
	digits:'Please use numbers and punctuation only in this field (for example, a phone number with dashes or dots is permitted).',
	alpha:'Please use letters only (a-z) with in this field. No spaces or other characters are allowed.',
	alphanum:'Please use only letters (a-z) or numbers (0-9) only in this field. No spaces or other characters are allowed.',
	dateSuchAs:'Please enter a valid date such as {date}',
	dateInFormatMDY:'Please enter a valid date such as MM/DD/YYYY (i.e. "12/31/1999")',
	email:'Please enter a valid email address. For example "fred@domain.com".',
	url:'Please enter a valid URL such as http://www.google.com.',
	currencyDollar:'Please enter a valid $ amount. For example $100.00 .',
	oneRequired:'Please enter something for at least one of these inputs.',
	errorPrefix: 'Error: ',
	warningPrefix: 'Warning: ',

	//FormValidator.Extras

	noSpace: 'There can be no spaces in this input.',
	reqChkByNode: 'No items are selected.',
	requiredChk: 'This field is required.',
	reqChkByName: 'Please select a {label}.',
	match: 'This field needs to match the {matchName} field',
	startDate: 'the start date',
	endDate: 'the end date',
	currendDate: 'the current date',
	afterDate: 'The date should be the same or after {label}.',
	beforeDate: 'The date should be the same or before {label}.',
	startMonth: 'Please select a start month',
	sameMonth: 'These two dates must be in the same month - you must change one or the other.'

});/*
Script: Clientcide.js
	The Clientcide namespace.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
var Clientcide = {
	version: '2.1.0',
	setAssetLocation: function(baseHref) {
		var clean = function(str){
			return str.replace(/\/\//g, '/');
		};
		if (window.StickyWin && StickyWin.UI) {
			StickyWin.UI.implement({
				options: {
					baseHref: clean(baseHref + '/stickyWinHTML/')
				}
			});
			if (StickyWin.Alert) {
				StickyWin.Alert.implement({
					options: {
						baseHref: baseHref + "/simple.error.popup"
					}
				});
			}
			if (StickyWin.UI.Pointy) {
				StickyWin.UI.Pointy.implement({
					options: {
						baseHref: clean(baseHref + '/PointyTip/')
					}
				});
			}
		}
		if (window.TagMaker) {
			TagMaker.implement({
			    options: {
			        baseHref: clean(baseHref + '/tips/')
			    }
			});
		}
		if (window.ProductPicker) {
			ProductPicker.implement({
			    options:{
			        baseHref: clean(baseHref + '/Picker')
			    }
			});
		}

		if (window.Autocompleter) {
			Autocompleter.Base.implement({
					options: {
						baseHref: clean(baseHref + '/autocompleter/')
					}
			});
		}

		if (window.Lightbox) {
			Lightbox.implement({
			    options: {
			        assetBaseUrl: clean(baseHref + '/slimbox/')
			    }
			});
		}

		if (window.Waiter) {
			Waiter.implement({
				options: {
					baseHref: clean(baseHref + '/waiter/')
				}
			});
		}
	},
	preLoadCss: function(){
		if (window.StickyWin && StickyWin.ui) StickyWin.ui();
		if (window.StickyWin && StickyWin.pointy) StickyWin.pointy();
		Clientcide.preloaded = true;
		return true;
	},
	preloaded: false
};
(function(){
	if (!window.addEvent) return;
	var preload = function(){
		if (window.dbug) dbug.log('preloading clientcide css');
		if (!Clientcide.preloaded) Clientcide.preLoadCss();
	};
	window.addEvent('domready', preload);
	window.addEvent('load', preload);
})();
setCNETAssetBaseHref = Clientcide.setAssetLocation;

/*
Script: dbug.js
	A wrapper for Firebug console.* statements.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
var dbug = {
	logged: [],
	timers: {},
	firebug: false,
	enabled: false,
	log: function() {
		dbug.logged.push(arguments);
	},
	nolog: function(msg) {
		dbug.logged.push(arguments);
	},
	time: function(name){
		dbug.timers[name] = new Date().getTime();
	},
	timeEnd: function(name){
		if (dbug.timers[name]) {
			var end = new Date().getTime() - dbug.timers[name];
			dbug.timers[name] = false;
			dbug.log('%s: %s', name, end);
		} else dbug.log('no such timer: %s', name);
	},
	enable: function(silent) {
		var con = window.firebug ? firebug.d.console.cmd : window.console;

		if((!!window.console && !!window.console.warn) || window.firebug) {
			try {
				dbug.enabled = true;
				dbug.log = function(){
						(con.debug || con.log).apply(con, arguments);
				};
				dbug.time = function(){
					con.time.apply(con, arguments);
				};
				dbug.timeEnd = function(){
					con.timeEnd.apply(con, arguments);
				};
				if(!silent) dbug.log('enabling dbug');
				for(var i=0;i<dbug.logged.length;i++){ dbug.log.apply(con, dbug.logged[i]); }
				dbug.logged=[];
			} catch(e) {
				dbug.enable.delay(400);
			}
		}
	},
	disable: function(){
		if(dbug.firebug) dbug.enabled = false;
		dbug.log = dbug.nolog;
		dbug.time = function(){};
		dbug.timeEnd = function(){};
	},
	cookie: function(set){
		var value = document.cookie.match('(?:^|;)\\s*jsdebug=([^;]*)');
		var debugCookie = value ? unescape(value[1]) : false;
		if((!$defined(set) && debugCookie != 'true') || ($defined(set) && set)) {
			dbug.enable();
			dbug.log('setting debugging cookie');
			var date = new Date();
			date.setTime(date.getTime()+(24*60*60*1000));
			document.cookie = 'jsdebug=true;expires='+date.toGMTString()+';path=/;';
		} else dbug.disableCookie();
	},
	disableCookie: function(){
		dbug.log('disabling debugging cookie');
		document.cookie = 'jsdebug=false;path=/;';
	}
};

(function(){
	var fb = !!window.console || !!window.firebug;
	var con = window.firebug ? window.firebug.d.console.cmd : window.console;
	var debugMethods = ['debug','info','warn','error','assert','dir','dirxml'];
	var otherMethods = ['trace','group','groupEnd','profile','profileEnd','count'];
	function set(methodList, defaultFunction) {
		for(var i = 0; i < methodList.length; i++){
			dbug[methodList[i]] = (fb && con[methodList[i]])?con[methodList[i]]:defaultFunction;
		}
	};
	set(debugMethods, dbug.log);
	set(otherMethods, function(){});
})();
if ((!!window.console && !!window.console.warn) || window.firebug){
	dbug.firebug = true;
	var value = document.cookie.match('(?:^|;)\\s*jsdebug=([^;]*)');
	var debugCookie = value ? unescape(value[1]) : false;
	if(window.location.href.indexOf("jsdebug=true")>0 || debugCookie=='true') dbug.enable();
	if(debugCookie=='true')dbug.log('debugging cookie enabled');
	if(window.location.href.indexOf("jsdebugCookie=true")>0){
		dbug.cookie();
		if(!dbug.enabled)dbug.enable();
	}
	if(window.location.href.indexOf("jsdebugCookie=false")>0)dbug.disableCookie();
}

/*
Script: ToElement.js
	Defines the toElement method for a class.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
Class.ToElement = new Class({
	toElement: function(){
		return this.element;
	}
});
var ToElement = Class.ToElement;

/*
Script: StyleWriter.js

Provides a simple method for injecting a css style element into the DOM if it's not already present.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/

var StyleWriter = new Class({
	createStyle: function(css, id) {
		window.addEvent('domready', function(){
			try {
				if (document.id(id) && id) return;
				var style = new Element('style', {id: id||''}).inject($$('head')[0]);
				if (Browser.Engine.trident) style.styleSheet.cssText = css;
				else style.set('text', css);
			}catch(e){dbug.log('error: %s',e);}
		}.bind(this));
	}
});

/*
Script: StickyWin.js

Creates a div within the page with the specified contents at the location relative to the element you specify; basically an in-page popup maker.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/

var StickyWin = new Class({
	Binds: ['destroy', 'hide', 'togglepin', 'esc'],
	Implements: [Options, Events, StyleWriter, Class.ToElement],
	options: {
//		onDisplay: $empty,
//		onClose: $empty,
//		onDestroy: $empty,
		closeClassName: 'closeSticky',
		pinClassName: 'pinSticky',
		content: '',
		zIndex: 10000,
		className: '',
//		id: ... set above in initialize function
/*  	these are the defaults for Element.position anyway
		************************************************
		edge: false, //see Element.position
		position: 'center', //center, corner == upperLeft, upperRight, bottomLeft, bottomRight
		offset: {x:0,y:0},
		relativeTo: document.body, */
		width: false,
		height: false,
		timeout: -1,
		allowMultipleByClass: false,
		allowMultiple: true,
		showNow: true,
		useIframeShim: true,
		iframeShimSelector: '',
		destroyOnClose: false,
		closeOnClickOut: false,
		closeOnEsc: false
	},

	css: '.SWclearfix:after {content: "."; display: block; height: 0; clear: both; visibility: hidden;}'+
		 '.SWclearfix {display: inline-table;} * html .SWclearfix {height: 1%;} .SWclearfix {display: block;}',

	initialize: function(options){
		this.options.inject = this.options.inject || {
			target: document.body,
			where: 'bottom'
		};
		this.setOptions(options);
		this.id = this.options.id || 'StickyWin_'+new Date().getTime();
		this.makeWindow();

		if (this.options.content) this.setContent(this.options.content);
		if (this.options.timeout > 0) {
			this.addEvent('onDisplay', function(){
				this.hide.delay(this.options.timeout, this)
			}.bind(this));
		}
		//add css for clearfix
		this.createStyle(this.css, 'StickyWinClearFix');
		if (this.options.closeOnClickOut || this.options.closeOnEsc) this.attach();
		if (this.options.destroyOnClose) this.addEvent('close', this.destroy);
		if (this.options.showNow) this.show();
	},
	attach: function(attach){
		var method = $pick(attach, true) ? 'addEvents' : 'removeEvents';
		var events = {};
		if (this.options.closeOnClickOut) events.click = this.esc;
		if (this.options.closeOnEsc) events.keyup = this.esc;
		document[method](events);
	},
	esc: function(e) {
		if (e.key == "esc") this.hide();
		if (e.type == "click" && this.element != e.target && !this.element.hasChild(e.target)) this.hide();
	},
	makeWindow: function(){
		this.destroyOthers();
		if (!document.id(this.id)) {
			this.win = new Element('div', {
				id:		this.id
			}).addClass(this.options.className).addClass('StickyWinInstance').addClass('SWclearfix').setStyles({
			 	display:'none',
				position:'absolute',
				zIndex:this.options.zIndex
			}).inject(this.options.inject.target, this.options.inject.where).store('StickyWin', this);
		} else this.win = document.id(this.id);
		this.element = this.win;
		if (this.options.width && $type(this.options.width.toInt())=="number") this.win.setStyle('width', this.options.width.toInt());
		if (this.options.height && $type(this.options.height.toInt())=="number") this.win.setStyle('height', this.options.height.toInt());
		return this;
	},
	show: function(suppressEvent){
		this.showWin();
		if (!suppressEvent) this.fireEvent('display');
		if (this.options.useIframeShim) this.showIframeShim();
		this.visible = true;
		return this;
	},
	showWin: function(){
		if (!this.positioned) this.position();
		this.win.show();
	},
	hide: function(suppressEvent){
		if ($type(suppressEvent) == "event" || !suppressEvent) this.fireEvent('close');
		this.hideWin();
		if (this.options.useIframeShim) this.hideIframeShim();
		this.visible = false;
		return this;
	},
	hideWin: function(){
		this.win.setStyle('display','none');
	},
	destroyOthers: function() {
		if (!this.options.allowMultipleByClass || !this.options.allowMultiple) {
			$$('div.StickyWinInstance').each(function(sw) {
				if (!this.options.allowMultiple || (!this.options.allowMultipleByClass && sw.hasClass(this.options.className)))
					sw.retrieve('StickyWin').destroy();
			}, this);
		}
	},
	setContent: function(html) {
		if (this.win.getChildren().length>0) this.win.empty();
		if ($type(html) == "string") this.win.set('html', html);
		else if (document.id(html)) this.win.adopt(html);
		this.win.getElements('.'+this.options.closeClassName).each(function(el){
			el.addEvent('click', this.hide);
		}, this);
		this.win.getElements('.'+this.options.pinClassName).each(function(el){
			el.addEvent('click', this.togglepin);
		}, this);
		return this;
	},
	position: function(options){
		this.positioned = true;
		this.setOptions(options);
		this.win.position({
			allowNegative: $pick(this.options.allowNegative, this.options.relativeTo != document.body),
			relativeTo: this.options.relativeTo,
			position: this.options.position,
			offset: this.options.offset,
			edge: this.options.edge
		});
		if (this.shim) this.shim.position();
		return this;
	},
	pin: function(pin) {
		if (!this.win.pin) {
			dbug.log('you must include element.pin.js!');
			return this;
		}
		this.pinned = $pick(pin, true);
		this.win.pin(pin);
		return this;
	},
	unpin: function(){
		return this.pin(false);
	},
	togglepin: function(){
		return this.pin(!this.pinned);
	},
	makeIframeShim: function(){
		if (!this.shim){
			var el = (this.options.iframeShimSelector)?this.win.getElement(this.options.iframeShimSelector):this.win;
			this.shim = new IframeShim(el, {
				display: false,
				name: 'StickyWinShim'
			});
		}
	},
	showIframeShim: function(){
		if (this.options.useIframeShim) {
			this.makeIframeShim();
			this.shim.show();
		}
	},
	hideIframeShim: function(){
		if (this.shim) this.shim.hide();
	},
	destroy: function(){
		if (this.win) this.win.destroy();
		if (this.options.useIframeShim && this.shim) this.shim.destroy();
		if (document.id('modalOverlay')) document.id('modalOverlay').destroy();
		this.fireEvent('destroy');
	}
});


/*
Script: StickyWin.ui.js

Creates an html holder for in-page popups using a default style.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
StickyWin.UI = new Class({
	Implements: [Options, Class.ToElement, StyleWriter],
	options: {
		width: 300,
		css: "div.DefaultStickyWin {font-family:verdana; font-size:11px; line-height: 13px;}"+
			"div.DefaultStickyWin div.top_ul{background:url({%baseHref%}full.png) top left no-repeat; height:30px; width:15px; float:left}"+
			"div.DefaultStickyWin div.top_ur{position:relative; left:0px !important; left:-4px; background:url({%baseHref%}full.png) top right !important; height:30px; margin:0px 0px 0px 15px !important; margin-right:-4px; padding:0px}"+
			"div.DefaultStickyWin h1.caption{clear: none !important; margin:0px !important; overflow: hidden; padding:0 !important; font-weight:bold; color:#555; font-size:14px !important; position:relative; top:8px !important; left:5px !important; float: left; height: 22px !important;}"+
			"div.DefaultStickyWin div.middle, div.DefaultStickyWin div.closeBody {background:url({%baseHref%}body.png) top left repeat-y; margin:0px 20px 0px 0px !important;	margin-bottom: -3px; position: relative;	top: 0px !important; top: -3px;}"+
			"div.DefaultStickyWin div.body{background:url({%baseHref%}body.png) top right repeat-y; padding:8px 30px 8px 0px !important; margin-left:5px !important; position:relative; right:-20px !important; z-index: 1;}"+
			"div.DefaultStickyWin div.bottom{clear:both;}"+
			"div.DefaultStickyWin div.bottom_ll{background:url({%baseHref%}full.png) bottom left no-repeat; width:15px; height:15px; float:left}"+
			"div.DefaultStickyWin div.bottom_lr{background:url({%baseHref%}full.png) bottom right; position:relative; left:0px !important; left:-4px; margin:0px 0px 0px 15px !important; margin-right:-4px; height:15px}"+
			"div.DefaultStickyWin div.closeButtons{text-align: center; background:url({%baseHref%}body.png) top right repeat-y; padding: 4px 30px 8px 0px; margin-left:5px; position:relative; right:-20px}"+
			"div.DefaultStickyWin a.button:hover{background:url({%baseHref%}big_button_over.gif) repeat-x}"+
			"div.DefaultStickyWin a.button {background:url({%baseHref%}big_button.gif) repeat-x; margin: 2px 8px 2px 8px; padding: 2px 12px; cursor:pointer; border: 1px solid #999 !important; text-decoration:none; color: #000 !important;}"+
			"div.DefaultStickyWin div.closeButton{width:13px; height:13px; background:url({%baseHref%}closebtn.gif) no-repeat; position: absolute; right: 0px; margin:10px 15px 0px 0px !important; cursor:pointer;top:0px}"+
			"div.DefaultStickyWin div.dragHandle {	width: 11px;	height: 25px;	position: relative;	top: 5px;	left: -3px;	cursor: move;	background: url({%baseHref%}drag_corner.gif); float: left;}",
		cornerHandle: false,
		cssClass: '',
		baseHref: 'http://www.cnet.com/html/rb/assets/global/stickyWinHTML/',
		buttons: [],
		cssId: 'defaultStickyWinStyle',
		cssClassName: 'DefaultStickyWin',
		closeButton: true
/*	These options are deprecated:
		closeTxt: false,
		onClose: $empty,
		confirmTxt: false,
		onConfirm: $empty	*/
	},
	initialize: function() {
		var args = this.getArgs(arguments);
		this.setOptions(args.options);
		this.legacy();
		var css = this.options.css.substitute({baseHref: this.options.baseHref}, /\\?\{%([^}]+)%\}/g);
		if (Browser.Engine.trident4) css = css.replace(/png/g, 'gif');
		this.createStyle(css, this.options.cssId);
		this.build();
		if (args.caption || args.body) this.setContent(args.caption, args.body);
	},
	getArgs: function(){
		return StickyWin.UI.getArgs.apply(this, arguments);
	},
	legacy: function(){
		var opt = this.options; //saving bytes
		//legacy support
		if (opt.confirmTxt) opt.buttons.push({text: opt.confirmTxt, onClick: opt.onConfirm || $empty});
		if (opt.closeTxt) opt.buttons.push({text: opt.closeTxt, onClick: opt.onClose || $empty});
	},
	build: function(){
		var opt = this.options;

		var container = new Element('div', {
			'class': opt.cssClassName
		});
		if (opt.width) container.setStyle('width', opt.width);
		this.element = container;
		this.element.store('StickyWinUI', this);
		if (opt.cssClass) container.addClass(opt.cssClass);


		var bodyDiv = new Element('div').addClass('body');
		this.body = bodyDiv;

		var top_ur = new Element('div').addClass('top_ur');
		this.top_ur = top_ur;
		this.top = new Element('div').addClass('top').adopt(
				new Element('div').addClass('top_ul')
			).adopt(top_ur);
		container.adopt(this.top);

		if (opt.cornerHandle) new Element('div').addClass('dragHandle').inject(top_ur, 'top');

		//body
		container.adopt(new Element('div').addClass('middle').adopt(bodyDiv));
		//close buttons
		if (opt.buttons.length > 0){
			var closeButtons = new Element('div').addClass('closeButtons');
			opt.buttons.each(function(button){
				if (button.properties && button.properties.className){
					button.properties['class'] = button.properties.className;
					delete button.properties.className;
				}
				var properties = $merge({'class': 'closeSticky'}, button.properties);
				new Element('a').addEvent('click', button.onClick || $empty)
					.appendText(button.text).inject(closeButtons).set(properties).addClass('button');
			});
			container.adopt(new Element('div').addClass('closeBody').adopt(closeButtons));
		}
		//footer
		container.adopt(
			new Element('div').addClass('bottom').adopt(
					new Element('div').addClass('bottom_ll')
				).adopt(
					new Element('div').addClass('bottom_lr')
			)
		);
		if (this.options.closeButton) container.adopt(new Element('div').addClass('closeButton').addClass('closeSticky'));
		return this;
	},
	makeCaption: function(caption) {
		if (!caption) return this.destroyCaption();
		this.caption = caption;
		var opt = this.options;
		var h1Caption = new Element('h1').addClass('caption');
		if (opt.width) h1Caption.setStyle('width', (opt.width-(opt.cornerHandle?55:40)-(opt.closeButton?10:0)));
		if (document.id(this.caption)) h1Caption.adopt(this.caption);
		else h1Caption.set('html', this.caption);
		this.top_ur.adopt(h1Caption);
		this.h1 = h1Caption;
		if (!this.options.cornerHandle) this.h1.addClass('dragHandle');
		return this;
	},
	destroyCaption: function(){
		if (this.h1) {
			this.h1.destroy();
			this.h1 = null;
		}
		return this;
	},
	setContent: function(){
		var args = this.getArgs.apply(this, arguments);
		var caption = args.caption;
		var body = args.body;
		if (this.h1) this.destroyCaption();
		this.makeCaption(caption);
		if (document.id(body)) this.body.empty().adopt(body);
		else this.body.set('html', body);
		return this;
	}
});
StickyWin.UI.getArgs = function(){
	var input = $type(arguments[0]) == "arguments"?arguments[0]:arguments;
	var cap = input[0], bod = input[1];
	var args = Array.link(input, {options: Object.type});
	if (input.length == 3 || (!args.options && input.length == 2)) {
		args.caption = cap;
		args.body = bod;
	} else if (($type(bod) == 'object' || !bod) && cap && $type(cap) != 'object'){
		args.body = cap;
	}
	return args;
};

StickyWin.ui = function(caption, body, options){
	return document.id(new StickyWin.UI(caption, body, options))
};


/*
Script: StickyWin.UI.Pointy.js

Creates an html holder for in-page popups using a default style - this one including a pointer in the specified direction.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
StickyWin.UI.Pointy = new Class({
	Extends: StickyWin.UI,
	options: {
		theme: 'dark',
		themes: {
			dark: {
				bgColor: '#333',
				fgColor: '#ddd',
				imgset: 'dark'
			},
			light: {
				bgColor: '#ccc',
				fgColor: '#333',
				imgset: 'light'
			}
		},
		css: "div.DefaultPointyTip {vertical-align: auto; position: relative;}"+
		"div.DefaultPointyTip * {text-align:left !important}"+
		"div.DefaultPointyTip .pointyWrapper div.body{background: {%bgColor%}; color: {%fgColor%}; left: 0px; right: 0px !important;padding:  0px 10px !important;margin-left: 0px !important;font-family: verdana;font-size: 11px;line-height: 13px;position: relative;}"+
		"div.DefaultPointyTip .pointyWrapper div.top {position: relative;height: 25px; overflow: visible;}"+
		"div.DefaultPointyTip .pointyWrapper div.top_ul{background: url({%baseHref%}{%imgset%}_back.png) top left no-repeat;width: 8px;height: 25px; position: absolute; left: 0px;}"+
		"div.DefaultPointyTip .pointyWrapper div.top_ur{background: url({%baseHref%}{%imgset%}_back.png) top right !important;margin: 0 0 0 8px !important;height: 25px;position: relative;left: 0px !important;padding: 0;}"+
		"div.DefaultPointyTip .pointyWrapper h1.caption{color: {%fgColor%};left: 0px !important;top: 4px !important;clear: none !important;overflow: hidden;font-weight: 700;font-size: 12px !important;position: relative;float: left;height: 22px !important;margin: 0 !important;padding: 0 !important;}"+
		"div.DefaultPointyTip .pointyWrapper div.middle, div.DefaultPointyTip .pointyWrapper div.closeBody{background:  {%bgColor%};margin: 0 0px 0 0 !important;position: relative;top: 0 !important;}"+
		"div.DefaultPointyTip .pointyWrapper div.bottom {clear: both; width: 100% !important; background: none; height: 6px} "+
		"div.DefaultPointyTip .pointyWrapper div.bottom_ll{font-size:1; background: url({%baseHref%}{%imgset%}_back.png) bottom left no-repeat;width: 6px;height: 6px;position: absolute; left: 0px;}"+
		"div.DefaultPointyTip .pointyWrapper div.bottom_lr{font-size:1; background: url({%baseHref%}{%imgset%}_back.png) bottom right;height: 6px;margin: 0 0 0 6px !important;position: relative;left: 0 !important;}"+
		"div.DefaultPointyTip .pointyWrapper div.noCaption{ height: 6px; overflow: hidden}"+
		"div.DefaultPointyTip .pointyWrapper div.closeButton{width:13px; height:13px; background:url({%baseHref%}{%imgset%}_x.png) no-repeat; position: absolute; right: 0px; margin:0px !important; cursor:pointer; z-index: 1; top: 4px;}"+
		"div.DefaultPointyTip .pointyWrapper div.pointyDivot {background: url({%divot%}) no-repeat;}",
		baseHref: 'http://github.com/anutron/clientcide/raw/master/Assets/PointyTip/',
		divot: '{%baseHref%}{%imgset%}_divot.png',
		divotSize: 22,
		direction: 12,
		cssId: 'defaultPointyTipStyle',
		cssClassName: 'DefaultPointyTip'
	},
	initialize: function() {
		var args = this.getArgs(arguments);
		this.setOptions(args.options);
		$extend(this.options, this.options.themes[this.options.theme]);
		this.options.divot = this.options.divot.substitute(this.options, /\\?\{%([^}]+)%\}/g);
		if (Browser.Engine.trident4) this.options.divot = this.options.divot.replace(/png/g, 'gif');
		this.options.css = this.options.css.substitute(this.options, /\\?\{%([^}]+)%\}/g);
		if (args.options && args.options.theme) {
			while (!this.id) {
				var id = $random(0, 999999999);
				if (!StickyWin.UI.Pointy[id]) {
					StickyWin.UI.Pointy[id] = this;
					this.id = id;
				}
			}
			this.options.css = this.options.css.replace(/div\.DefaultPointyTip/g, "div#pointy_"+this.id);
			this.options.cssId = "pointyTipStyle_" + this.id;
		}
		if ($type(this.options.direction) == 'string') {
			var map = {
				left: 9,
				right: 3,
				up: 12,
				down: 6
			};
			this.options.direction = map[this.options.direction];
		}

		this.parent(args.caption, args.body, this.options);
		if (this.id) document.id(this).set('id', "pointy_"+this.id);
	},
	build: function(){
		this.parent();
		var opt = this.options;
		this.pointyWrapper = new Element('div', {
			'class': 'pointyWrapper'
		}).inject(document.id(this));
		document.id(this).getChildren().each(function(el){
			if (el != this.pointyWrapper) this.pointyWrapper.grab(el);
		}, this);

		var w = opt.divotSize;
		var h = w;
		var left = (opt.width - opt.divotSize)/2;
		var orient = function(){
			switch(opt.direction) {
				case 12: case 1: case 11:
					return {
						height: h/2
					};
				case 5: case 6: case 7:
					return {
						height: h/2,
						backgroundPosition: '0 -'+h/2+'px'
					};
				case 8: case 9: case 10:
					return {
						width: w/2
					};
				case 2: case 3: case 4:
					return {
						width: w/2,
						backgroundPosition: '100%'
					};
			};
		};
		this.pointer = new Element('div', {
			styles: $extend({
				width: w,
				height: h,
				overflow: 'hidden'
			}, orient()),
			'class': 'pointyDivot pointy_'+opt.direction
		}).inject(this.pointyWrapper);
	},
	expose: function(){
		if (document.id(this).getStyle('display') != 'none' && document.id(document.body).hasChild(document.id(this))) return $empty;
		document.id(this).setStyles({
			visibility: 'hidden',
			position: 'absolute'
		});
		var dispose;
		if (!document.body.hasChild(document.id(this))) {
			document.id(this).inject(document.body);
			dispose = true;
		}
		return (function(){
			if (dispose) document.id(this).dispose();
			document.id(this).setStyles({
				visibility: 'visible',
				position: 'relative'
			});
		}).bind(this);
	},
	positionPointer: function(options){
		if (!this.pointer) return;
		var opt = options || this.options;
		var pos;
		var d = opt.direction;
		switch (d){
			case 12: case 1: case 11:
				pos = {
					edge: {x: 'center', y: 'bottom'},
					position: {
						x: d==12?'center':d==1?'right':'left',
						y: 'top'
					},
					offset: {
						x: (d==12?0:d==1?-1:1)*opt.divotSize,
						y: 1
					}
				};
				break;
			case 2: case 3: case 4:
				pos = {
					edge: {x: 'left', y: 'center'},
					position: {
						x: 'right',
						y: d==3?'center':d==2?'top':'bottom'
					},
					offset: {
						x: -1,
						y: (d==3?0:d==4?-1:1)*opt.divotSize
					}
				};
				break;
			case 5: case 6: case 7:
				pos = {
					edge: {x: 'center', y: 'top'},
					position: {
						x: d==6?'center':d==5?'right':'left',
						y: 'bottom'
					},
					offset: {
						x: (d==6?0:d==5?-1:1)*opt.divotSize,
						y: -1
					}
				};
				break;
			case 8: case 9: case 10:
				pos = {
					edge: {x: 'right', y: 'center'},
					position: {
						x: 'left',
						y: d==9?'center':d==10?'top':'bottom'
					},
					offset: {
						x: 1,
						y: (d==9?0:d==8?-1:1)*opt.divotSize
					}
				};
				break;
		};
		var putItBack = this.expose();
		this.pointer.position($extend({
			relativeTo: this.pointyWrapper
		}, pos, options));
		putItBack();
	},
	setContent: function(a1, a2){
		this.parent(a1, a2);
		this.top[this.h1?'removeClass':'addClass']('noCaption');
		if (Browser.Engine.trident4) document.id(this).getElements('.bottom_ll, .bottom_lr').setStyle('font-size', 1); //IE6 bullshit
		if (this.options.closeButton) this.body.setStyle('margin-right', 6);
		this.positionPointer();
		return this;
	},
	makeCaption: function(caption){
		this.parent(caption);
		if (this.options.width && this.h1) this.h1.setStyle('width', (this.options.width-(this.options.closeButton?25:15)));
	}
});

StickyWin.UI.pointy = function(caption, body, options){
	return document.id(new StickyWin.UI.Pointy(caption, body, options));
};
StickyWin.ui.pointy = StickyWin.UI.pointy;

/*
Script: StickyWin.PointyTip.js
	Positions a pointy tip relative to the element you specify.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
StickyWin.PointyTip = new Class({
	Extends: StickyWin,
	options: {
		point: "left",
		pointyOptions: {}
	},
	initialize: function(){
		var args = this.getArgs(arguments);
		this.setOptions(args.options);
		var popts = this.options.pointyOptions;
		var d = popts.direction;
		if (!d) {
			var map = {
				left: 9,
				right: 3,
				up: 12,
				down: 6
			};
			d = map[this.options.point];
			if (!d) d = this.options.point;
			popts.direction = d;
		}
		if (!popts.width) popts.width = this.options.width;
		this.pointy = new StickyWin.UI.Pointy(args.caption, args.body, popts);
		this.options.content = null;
		this.setOptions(args.options, this.getPositionSettings());
		this.parent(this.options);
		this.win.empty().adopt(document.id(this.pointy));
		this.attachHandlers(this.win);
		if (this.options.showNow) this.position();
	},
	getArgs: function(){
		return StickyWin.UI.getArgs.apply(this, arguments);
	},
	getPositionSettings: function(){
		var s = this.pointy.options.divotSize;
		var d = this.options.point;
		switch(d) {
			case "left": case 8: case 9: case 10:
				return {
					edge: {
						x: 'left',
						y: d==10?'top':d==8?'bottom':'center'
					},
					position: {x: 'right', y: 'center'},
					offset: {
						x: s
					}
				};
			case "right": case 2:  case 3: case 4:
				return {
					edge: {
						x: 'right',
						y: d==2?'top':d==4?'bottom':'center'
					},
					position: {x: 'left', y: 'center'},
					offset: {x: -s}
				};
			case "up": case 11: case 12: case 1:
				return {
					edge: {
						x: d==11?'left':d==1?'right':'center',
						y: 'top'
					},
					position: {	x: 'center', y: 'bottom' },
					offset: {
						y: s,
						x: d==11?-s:d==1?s:0
					}
				};
			case "down": case 5: case 6: case 7:
				return {
					edge: {
						x: d==7?'left':d==5?'right':'center',
						y: 'bottom'
					},
					position: {x: 'center', y: 'top'},
					offset: {
						y: -s,
						x: d==7?-s:d==5?s:0
					}
				};
		};
	},
	setContent: function() {
		var args = this.getArgs(arguments);
		this.pointy.setContent(args.caption, args.body);
		[this.pointy.h1, this.pointy.body].each(this.attachHandlers, this);
		if (this.visible) this.position();
		return this;
	},
	showWin: function(){
		this.parent();
		this.pointy.positionPointer();
	},
	position: function(options){
		this.parent(options);
		this.pointy.positionPointer();
	},
	attachHandlers: function(content) {
		if (!content) return;
		content.getElements('.'+this.options.closeClassName).addEvent('click', function(){ this.hide(); }.bind(this));
		content.getElements('.'+this.options.pinClassName).addEvent('click', function(){ this.togglepin(); }.bind(this));
	}
});

/*
Script: Waiter.js

Adds a semi-transparent overlay over a dom element with a spinnin ajax icon.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
var Waiter = new Class({
	Implements: [Options, Events, Chain, Class.Occlude],
	options: {
		baseHref: 'http://www.cnet.com/html/rb/assets/global/waiter/',
		containerProps: {
			styles: {
				position: 'absolute',
				'text-align': 'center'
			},
			'class':'waiterContainer'
		},
		containerPosition: {},
		msg: false,
		msgProps: {
			styles: {
				'text-align': 'center',
				fontWeight: 'bold'
			},
			'class':'waiterMsg'
		},
		img: {
			src: 'waiter.gif',
			styles: {
				width: 24,
				height: 24
			},
			'class':'waiterImg'
		},
		layer:{
			styles: {
				width: 0,
				height: 0,
				position: 'absolute',
				zIndex: 999,
				display: 'none',
				opacity: 0.9,
				background: '#fff'
			},
			'class': 'waitingDiv'
		},
		useIframeShim: true,
		fxOptions: {},
		injectWhere: null
//	iframeShimOptions: {},
//	onShow: $empty
//	onHide: $empty
	},
	property: 'Waiter',
	initialize: function(target, options){
		this.element = document.id(target)||document.id(document.body);
		if (this.occlude()) return this.occluded;
		this.setOptions(options);
		this.build();
		this.place(target);
	},
	build: function(){
		this.waiterContainer = new Element('div', this.options.containerProps);
		if (this.options.msg) {
			this.msgContainer = new Element('div', this.options.msgProps);
			this.waiterContainer.adopt(this.msgContainer);
			if (!document.id(this.options.msg)) this.msg = new Element('p').appendText(this.options.msg);
			else this.msg = document.id(this.options.msg);
			this.msgContainer.adopt(this.msg);
		}
		if (this.options.img) this.waiterImg = document.id(this.options.img.id) || new Element('img', $merge(this.options.img, {
			src: this.options.baseHref + this.options.img.src
		})).inject(this.waiterContainer);
		this.waiterOverlay = document.id(this.options.layer.id) || new Element('div').adopt(this.waiterContainer);
		this.waiterOverlay.set(this.options.layer);
		try {
			if (this.options.useIframeShim) this.shim = new IframeShim(this.waiterOverlay, this.options.iframeShimOptions);
		} catch(e) {
			dbug.log("Waiter attempting to use IframeShim but failed; did you include IframeShim? Error: ", e);
			this.options.useIframeShim = false;
		}
		this.waiterFx = this.waiterFx || new Fx.Elements($$(this.waiterContainer, this.waiterOverlay), this.options.fxOptions);
	},
	place: function(target, where){
		var where = where || this.options.injectWhere || target == document.body ? 'inside' : 'after';
		this.waiterOverlay.inject(target, where);
	},
	toggle: function(element, show) {
		//the element or the default
		element = document.id(element) || document.id(this.active) || document.id(this.element);
		this.place(element);
		if (!document.id(element)) return this;
		if (this.active && element != this.active) return this.stop(this.start.bind(this, element));
		//if it's not active or show is explicit
		//or show is not explicitly set to false
		//start the effect
		if ((!this.active || show) && show !== false) this.start(element);
		//else if it's active and show isn't explicitly set to true
		//stop the effect
		else if (this.active && !show) this.stop();
		return this;
	},
	reset: function(){
		this.waiterFx.cancel().set({
			0: { opacity:[0]},
			1: { opacity:[0]}
		});
	},
	start: function(element){
		this.reset();
		element = document.id(element) || document.id(this.element);
		this.place(element);
		var start = function() {
			var dim = element.getComputedSize();
			this.active = element;
			this.waiterOverlay.setStyles({
				width: this.options.layer.width||dim.totalWidth,
				height: this.options.layer.height||dim.totalHeight,
				display: 'block'
			}).position({
				relativeTo: element,
				position: 'upperLeft'
			});
			this.waiterContainer.position($merge({
				relativeTo: this.waiterOverlay
			}, this.options.containerPosition));
			if (this.options.useIframeShim) this.shim.show();
			this.waiterFx.start({
				0: { opacity:[1] },
				1: { opacity:[this.options.layer.styles.opacity]}
			}).chain(function(){
				if (this.active == element) this.fireEvent('onShow', element);
				this.callChain();
			}.bind(this));
		}.bind(this);

		if (this.active && this.active != element) this.stop(start);
		else start();

		return this;
	},
	stop: function(callback){
		if (!this.active) {
			if ($type(callback) == "function") callback.attempt();
			return this;
		}
		this.waiterFx.cancel();
		this.waiterFx.clearChain();
		//fade the waiter out
		this.waiterFx.start({
			0: { opacity:[0]},
			1: { opacity:[0]}
		}).chain(function(){
			this.active = null;
			this.waiterOverlay.hide();
			if (this.options.useIframeShim) this.shim.hide();
			this.fireEvent('onHide', this.active);
			this.callChain();
			this.clearChain();
			if ($type(callback) == "function") callback.attempt();
		}.bind(this));
		return this;
	}
});

if (window.Request) {
	Request = Class.refactor(Request, {
		options: {
			useWaiter: false,
			waiterOptions: {},
			waiterTarget: false
		},
		initialize: function(options){
			this._send = this.send;
			this.send = function(options){
				if (this.waiter) this.waiter.start().chain(this._send.bind(this, options));
				else this._send(options);
				return this;
			};
			this.previous(options);
			if (this.options.useWaiter && (document.id(this.options.update) || document.id(this.options.waiterTarget))) {
				this.waiter = new Waiter(this.options.waiterTarget || this.options.update, this.options.waiterOptions);
				['onComplete', 'onException', 'onCancel'].each(function(event){
					this.addEvent(event, this.waiter.stop.bind(this.waiter));
				}, this);
			}
		}
	});
}

Element.Properties.waiter = {

	set: function(options){
		var waiter = this.retrieve('waiter');
		return this.eliminate('waiter').store('waiter:options', options);
	},

	get: function(options){
		if (options || !this.retrieve('waiter')){
			if (options || !this.retrieve('waiter:options')) this.set('waiter', options);
			this.store('waiter', new Waiter(this, this.retrieve('waiter:options')));
		}
		return this.retrieve('waiter');
	}

};

Element.implement({

	wait: function(options){
		this.get('waiter', options).start();
		return this;
	},

	release: function(){
		var opt = Array.link(arguments, {options: Object.type, callback: Function.type});
		this.get('waiter', opt.options).stop(opt.callback);
		return this;
	}

});

/*
Script: MooScroller.js

Recreates the standard scrollbar behavior for elements with overflow but using DOM elements so that the scroll bar elements are completely styleable by css.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
var MooScroller = new Class({
	Implements: [Options, Events],
	options: {
		maxThumbSize: 10,
		mode: 'vertical',
		width: 0, //required only for mode: horizontal
		scrollSteps: 10,
		wheel: true,
		scrollLinks: {
			forward: 'scrollForward',
			back: 'scrollBack'
		},
		hideWhenNoOverflow: true
//		onScroll: $empty,
//		onPage: $empty
	},

	initialize: function(content, knob, options){
		this.setOptions(options);
		this.horz = (this.options.mode == "horizontal");

		this.content = document.id(content).setStyle('overflow', 'hidden');
		this.knob = document.id(knob);
		this.track = this.knob.getParent();
		this.setPositions();

		if (this.horz && this.options.width) {
			this.wrapper = new Element('div');
			this.content.getChildren().each(function(child){
				this.wrapper.adopt(child);
			}, this);
			this.wrapper.inject(this.content).setStyle('width', this.options.width);
		}


		this.bound = {
			'start': this.start.bind(this),
			'end': this.end.bind(this),
			'drag': this.drag.bind(this),
			'wheel': this.wheel.bind(this),
			'page': this.page.bind(this)
		};

		this.position = {};
		this.mouse = {};
		this.update();
		this.attach();

		var clearScroll = function (){
			$clear(this.scrolling);
		}.bind(this);
		['forward','back'].each(function(direction) {
			var lnk = document.id(this.options.scrollLinks[direction]);
			if (lnk) {
				lnk.addEvents({
					mousedown: function() {
						this.scrolling = this[direction].periodical(50, this);
					}.bind(this),
					mouseup: clearScroll.bind(this),
					click: clearScroll.bind(this)
				});
			}
		}, this);
		this.knob.addEvent('click', clearScroll.bind(this));
		window.addEvent('domready', function(){
			try {
				document.id(document.body).addEvent('mouseup', clearScroll.bind(this));
			}catch(e){}
		}.bind(this));
	},
	setPositions: function(){
		[this.track, this.knob].each(function(el){
			if (el.getStyle('position') == 'static') el.setStyle('position','relative');
		});

	},
	toElement: function(){
		return this.content;
	},
	update: function(){
		var plain = this.horz?'Width':'Height';
		this.contentSize = this.content['offset'+plain];
		this.contentScrollSize = this.content['scroll'+plain];
		this.trackSize = this.track['offset'+plain];

		this.contentRatio = this.contentSize / this.contentScrollSize;

		this.knobSize = (this.trackSize * this.contentRatio).limit(this.options.maxThumbSize, this.trackSize);

		if (this.options.hideWhenNoOverflow) {
			this.hidden = this.knobSize == this.trackSize;
			this.track.setStyle('opacity', this.hidden?0:1);
		}

		this.scrollRatio = this.contentScrollSize / this.trackSize;
		this.knob.setStyle(plain.toLowerCase(), this.knobSize);

		this.updateThumbFromContentScroll();
		this.updateContentFromThumbPosition();
	},

	updateContentFromThumbPosition: function(){
		this.content[this.horz?'scrollLeft':'scrollTop'] = this.position.now * this.scrollRatio;
	},

	updateThumbFromContentScroll: function(){
		this.position.now = (this.content[this.horz?'scrollLeft':'scrollTop'] / this.scrollRatio).limit(0, (this.trackSize - this.knobSize));
		this.knob.setStyle(this.horz?'left':'top', this.position.now);
	},

	attach: function(){
		this.knob.addEvent('mousedown', this.bound.start);
		if (this.options.scrollSteps) this.content.addEvent('mousewheel', this.bound.wheel);
		this.track.addEvent('mouseup', this.bound.page);
	},

	wheel: function(event){
		if (this.hidden) return;
		this.scroll(-(event.wheel * this.options.scrollSteps));
		this.updateThumbFromContentScroll();
		event.stop();
	},

	scroll: function(steps){
		steps = steps||this.options.scrollSteps;
		this.content[this.horz?'scrollLeft':'scrollTop'] += steps;
		this.updateThumbFromContentScroll();
		this.fireEvent('onScroll', steps);
	},
	forward: function(steps){
		this.scroll(steps);
	},
	back: function(steps){
		steps = steps||this.options.scrollSteps;
		this.scroll(-steps);
	},

	page: function(event){
		var axis = this.horz?'x':'y';
		var forward = (event.page[axis] > this.knob.getPosition()[axis]);
		this.scroll((forward?1:-1)*this.content['offset'+(this.horz?'Width':'Height')]);
		this.updateThumbFromContentScroll();
		this.fireEvent('onPage', forward);
		event.stop();
	},


	start: function(event){
		var axis = this.horz?'x':'y';
		this.mouse.start = event.page[axis];
		this.position.start = this.knob.getStyle(this.horz?'left':'top').toInt();
		document.addEvent('mousemove', this.bound.drag);
		document.addEvent('mouseup', this.bound.end);
		this.knob.addEvent('mouseup', this.bound.end);
		event.stop();
	},

	end: function(event){
		document.removeEvent('mousemove', this.bound.drag);
		document.removeEvent('mouseup', this.bound.end);
		this.knob.removeEvent('mouseup', this.bound.end);
		event.stop();
	},

	drag: function(event){
		var axis = this.horz?'x':'y';
		this.mouse.now = event.page[axis];
		this.position.now = (this.position.start + (this.mouse.now - this.mouse.start)).limit(0, (this.trackSize - this.knobSize));
		this.updateContentFromThumbPosition();
		this.updateThumbFromContentScroll();
		event.stop();
	}

});


/*
Script: DatePicker.js
	Allows the user to enter a date in many popuplar date formats or choose from a calendar.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
var DatePicker;
(function(){
	var DPglobal = function() {
		if (DatePicker.pickers) return;
		DatePicker.pickers = [];
		DatePicker.hideAll = function(){
			DatePicker.pickers.each(function(picker){
				picker.hide();
			});
		};
	};
 	DatePicker = new Class({
		Implements: [Options, Events, StyleWriter],
		options: {
			format: "%x",
			defaultCss: 'div.calendarHolder {height:177px;position: absolute;top: -21px !important;top: -27px;left: -3px;width: 100%;}'+
				'div.calendarHolder table.cal {margin-right: 15px !important;margin-right: 8px;width: 205px;}'+
				'div.calendarHolder td {text-align:center;}'+
				'div.calendarHolder tr.dayRow td {padding: 2px;width: 22px;cursor: pointer;}'+
				'div.calendarHolder table.datePicker * {font-size:11px;line-height:16px;}'+
				'div.calendarHolder table.datePicker {margin: 0;padding:0 5px;float: left;}'+
				'div.calendarHolder table.datePicker table.cal td {cursor:pointer;}'+
				'div.calendarHolder tr.dateNav {font-weight: bold;height:22px;margin-top:8px;}'+
				'div.calendarHolder tr.dayNames {height: 23px;}'+
				'div.calendarHolder tr.dayNames td {color:#666;font-weight:700;border-bottom:1px solid #ddd;}'+
				'div.calendarHolder table.datePicker tr.dayRow td:hover {background:#ccc;}'+
				'div.calendarHolder table.datePicker tr.dayRow td {margin: 1px;}'+
				'div.calendarHolder td.today {color:#bb0904;}'+
				'div.calendarHolder td.otherMonthDate {border:1px solid #fff;color:#ccc;background:#f3f3f3 !important;margin: 0px !important;}'+
				'div.calendarHolder td.selectedDate {border: 1px solid #20397b;background:#dcddef;margin: 0px !important;}'+
				'div.calendarHolder a.leftScroll, div.calendarHolder a.rightScroll {cursor: pointer; color: #000}'+
				'div.datePickerSW div.body {height: 160px !important;height: 149px;}'+
				'div.datePickerSW .clearfix:after {content: ".";display: block;height: 0;clear: both;visibility: hidden;}'+
				'div.datePickerSW .clearfix {display: inline-table;}'+
				'* html div.datePickerSW .clearfix {height: 1%;}'+
				'div.datePickerSW .clearfix {display: block;}',
			calendarId: false,
			stickyWinOptions: {
				draggable: true,
				dragOptions: {},
				position: "bottomLeft",
				offset: {x:10, y:10},
				fadeDuration: 400
			},
			stickyWinUiOptions: {},
			updateOnBlur: true,
			additionalShowLinks: [],
			showOnInputFocus: true,
			useDefaultCss: true,
			hideCalendarOnPick: true,
			weekStartOffset: 0,
			showMoreThanOne: true,
			stickyWinToUse: StickyWin
/*		onPick: $empty,
			onShow: $empty,
			onHide: $empty */
		},

		initialize: function(input, options){
			DPglobal(); //make sure controller is setup
			if (document.id(input)) this.inputs = $H({start: document.id(input)});
	    	this.today = new Date();
			this.setOptions(options);
			if (this.options.useDefaultCss) this.createStyle(this.options.defaultCss, 'datePickerStyle');
			if (!this.inputs) return;
			this.whens = this.whens || ['start'];
			if (!this.calendarId) this.calendarId = "popupCalendar" + new Date().getTime();
			this.setUpObservers();
			this.getCalendar();
			this.formValidatorInterface();
			DatePicker.pickers.push(this);
		},
		formValidatorInterface: function(){
			this.inputs.each(function(input){
				var props;
				if (input.get('validatorProps')) props = input.get('validatorProps');
				if (props && props.dateFormat) {
					dbug.log('using date format specified in validatorProps property of element to play nice with FormValidator');
					this.setOptions({ format: props.dateFormat });
				} else {
					if (!props) props = {};
					props.dateFormat = this.options.format;
					input.set('validatorProps', props);
				}
			}, this);
		},
		calWidth: 280,
		inputDates: {},
		selectedDates: {},
		setUpObservers: function(){
			this.inputs.each(function(input) {
				if (this.options.showOnInputFocus) input.addEvent('focus', this.show.bind(this));
				input.addEvent('blur', function(e){
					if (e) {
						this.selectedDates = this.getDates(null, true);
						this.fillCalendar(this.selectedDates.start);
						if (this.options.updateOnBlur) this.updateInput();
					}
				}.bind(this));
			}, this);
			this.options.additionalShowLinks.each(function(lnk){
				document.id(lnk).addEvent('click', this.show.bind(this))
			}, this);
		},
		getDates: function(dates, getFromInputs){
			var d = {};
			if (!getFromInputs) dates = dates||this.selectedDates;
			var getFromInput = function(when){
				var input = this.inputs.get(when);
				if (input) d[when] = this.validDate(input.get('value'));
			}.bind(this);
			this.whens.each(function(when) {
				switch($type(dates)){
					case "object":
						if (dates) d[when] = dates[when]?dates[when]:dates;
						if (!d[when] && !d[when].format) getFromInput(when);
						break;
					default:
						getFromInput(when);
						break;
				}
				if (!d[when]) d[when] = this.selectedDates[when]||new Date();
			}, this);
			return d;
		},
		updateInput: function(){
			var d = {};
			$each(this.getDates(), function(value, key){
				var input = this.inputs.get(key);
				if (!input) return;
				input.set('value', (value)?this.formatDate(value)||"":"");
			}, this);
			return this;
		},
		validDate: function(val) {
			if (!$chk(val)) return null;
			var date = Date.parse(val.trim());
			return isNaN(date)?null:date;
		},
		formatDate: function (date) {
			return date.format(this.options.format);
		},
		getCalendar: function() {
			if (!this.calendar) {
				var cal = new Element("table", {
					'id': this.options.calendarId || '',
					'border':'0',
					'cellpadding':'0',
					'cellspacing':'0',
					'class':'datePicker'
				});
				var tbody = new Element('tbody').inject(cal);
				var rows = [];
				(8).times(function(i){
					var row = new Element('tr').inject(tbody);
					(7).times(function(i){
						var td = new Element('td').inject(row).set('html', '&nbsp;');
					});
				});
				var rows = tbody.getElements('tr');
				rows[0].addClass('dateNav');
				rows[1].addClass('dayNames');
				(6).times(function(i){
					rows[i+2].addClass('dayRow');
				});
				this.rows = rows;
				var dayCells = rows[1].getElements('td');
				dayCells.each(function(cell, i){
					cell.firstChild.data = Date.getMsg('days')[(i + this.options.weekStartOffset) % 7].substring(0,3);
				}, this);
				[6,5,4,3].each(function(i){ rows[0].getElements('td')[i].dispose() });
				this.prevLnk = rows[0].getElement('td').setStyle('text-align', 'right');
				this.prevLnk.adopt(new Element('a').set('html', "&lt;").addClass('rightScroll'));
				this.month = rows[0].getElements('td')[1];
				this.month.set('colspan', 5);
				this.nextLnk = rows[0].getElements('td')[2].setStyle('text-align', 'left');
				this.nextLnk.adopt(new Element('a').set('html', '&gt;').addClass('leftScroll'));
				cal.addEvent('click', this.clickCalendar.bind(this));
				this.calendar = cal;
				this.container = new Element('div').adopt(cal).addClass('calendarHolder');
				this.content = StickyWin.ui('', this.container, $merge(this.options.stickyWinUiOptions, {
					cornerHandle: this.options.stickyWinOptions.draggable,
					width: this.calWidth
				}));
				var opts = $merge(this.options.stickyWinOptions, {
					content: this.content,
					className: 'datePickerSW',
					allowMultipleByClass: true,
					showNow: false,
					relativeTo: this.inputs.get('start')
				});
				this.stickyWin = new this.options.stickyWinToUse(opts);
				this.stickyWin.addEvent('onDisplay', this.positionClose.bind(this));
				this.container.setStyle('z-index', this.stickyWin.win.getStyle('z-index').toInt()+1);
			}
			return this.calendar;
		},
		positionClose: function(){
			if (this.closePositioned) return;
			var closer = this.content.getElement('div.closeButton');
			if (closer) {
				closer.inject(this.container, 'after').setStyle('z-index', this.stickyWin.win.getStyle('z-index').toInt()+2);
				(function(){
					this.content.setStyle('width', this.calendar.getSize().x + (this.options.time ? 240 : 40));
					closer.position({relativeTo: this.stickyWin.win.getElement('.top'), position: 'upperRight', edge: 'upperRight'});
				}).delay(3, this);
			}
			this.closePositioned = true;
		},
		hide: function(){
			this.stickyWin.hide();
			this.fireEvent('onHide');
			return this;
		},
		hideOthers: function(){
			DatePicker.pickers.each(function(picker){
				if (picker != this) picker.hide();
			});
			return this;
		},
		show: function(){
			this.selectedDates = {};
			var dates = this.getDates(null, true);
			this.whens.each(function(when){
				this.inputDates[when] = dates[when]?dates[when].clone():dates.start?dates.start.clone():this.today;
		    this.selectedDates[when] = !this.inputDates[when] || isNaN(this.inputDates[when])
						? this.today
						: this.inputDates[when].clone();
				this.getCalendar(when);
			}, this);
			this.fillCalendar(this.selectedDates.start);
			if (!this.options.showMoreThanOne) this.hideOthers();
			this.stickyWin.show();
			this.fireEvent('onShow');
			return this;
		},
		handleScroll: function(e){
			if (e.target.hasClass('rightScroll')||e.target.hasClass('leftScroll')) {
				var newRef = e.target.hasClass('rightScroll')
					?this.rows[2].getElement('td').refDate - Date.units.day()
					:this.rows[7].getElements('td')[6].refDate + Date.units.day();
				this.fillCalendar(new Date(newRef));
				return true;
			}
			return false;
		},
		setSelectedDates: function(e, newDate){
			this.selectedDates.start = newDate;
		},
		onPick: function(){
			this.updateSelectors();
			this.inputs.each(function(input) {
				input.fireEvent("change");
				input.fireEvent("blur");
			});
			this.fireEvent('onPick');
			if (this.options.hideCalendarOnPick) this.hide();
		},
		clickCalendar: function(e) {
			if (this.handleScroll(e)) return;
			if (!e.target.firstChild || !e.target.firstChild.data) return;
			var val = e.target.firstChild.data;
			if (e.target.refDate) {
				var newDate = new Date(e.target.refDate);
				this.setSelectedDates(e, newDate);
				this.updateInput();
				this.onPick();
			}
		},
		fillCalendar: function (date) {
			if ($type(date) == "string") date = new Date(date);
			var startDate = (date)?new Date(date.getTime()):new Date();
			var hours = startDate.get('hours');
			startDate.setDate(1);
			startDate.setTime((startDate.getTime() - (Date.units.day() * (startDate.getDay()))) +
			                  (Date.units.day() * this.options.weekStartOffset));
			var monthyr = new Element('span', {
				html: Date.getMsg('months')[date.getMonth()] + " " + date.getFullYear()
			});
			document.id(this.rows[0].getElements('td')[1]).empty().adopt(monthyr);
			var atDate = startDate.clone();
			this.rows.each(function(row, i){
				if (i < 2) return;
				row.getElements('td').each(function(td){
					atDate.set('hours', hours);
					td.firstChild.data = atDate.getDate();
					td.refDate = atDate.getTime();
					atDate.setTime(atDate.getTime() + Date.units.day());
				}, this);
			}, this);
			this.updateSelectors();
		},
		updateSelectors: function(){
			var atDate;
			var month = new Date(this.rows[5].getElement('td').refDate).getMonth();
			this.rows.each(function(row, i){
				if (i < 2) return;
				row.getElements('td').each(function(td){
					td.className = '';
					atDate = new Date(td.refDate);
					if (atDate.format("%x") == this.today.format("%x")) td.addClass('today');
					this.whens.each(function(when){
						var date = this.selectedDates[when];
						if (date && atDate.format("%x") == date.format("%x")) {
							td.addClass('selectedDate');
							this.fireEvent('selectedDateMatch', [td, when]);
						}
					}, this);
					this.fireEvent('rowDateEvaluated', [atDate, td]);
					if (atDate.getMonth() != month) td.addClass('otherMonthDate');
					atDate.setTime(atDate.getTime() + Date.units.day());
				}, this);
			}, this);
		}
	});
})();

/*
Script: DatePicker.Extras.js
	Extends DatePicker to allow for range selection and time entry.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
DatePicker = Class.refactor(DatePicker, {
	options:{
		extraCSS: 'a.finish {position: relative;height: 13px !important;top: -31px !important;left: 85px !important;top: -34px;left: 77px;height: 16px;display:block;float: left;padding: 1px 12px 3px !important;}'+
			'div.calendarHolder div.time {border: #999 1px solid;width: 55px;position: relative;left: 3px;height: 17px;}'+
			'div.calendarHolder td.timeTD {width: 140px;} div.calendarHolder td.label{width:35px; text-align:right}'+
			'div.calendarHolder div.time select {font-size: 10px !important; font-size: 15px;padding: 0px;left:60px;position:absolute;top:-1px !important; width: auto !important;}'+
			'div.calendarHolder div.time input {width: 16px !important;width: 12px;padding: 2px;height: 13px;border: none !important;border: 1px solid #fff;}'+
			'div.calendarHolder div.timeSub {clear:both;position: relative;width: 65px;}'+
			'div.calendarHolder div.timeSub span {text-align: center;color: #999;margin: 5px;}'+
			'div.calendarHolder span.seperator {position:relative;top:-3px;}'+
			'div.calendarHolder table.stamp {position:relative;top: 35px !important;top: 50px;left: 0px;}'+
			'div.calendarHolder table.stamp a {left:123px;position:relative;top:9px;}'+
			'div.calendarHolder table.stamp td {border: none !important;}'+
			'div.calendarHolder td.selected_end {border-width: 1px 1px 1px 0px !important;margin: 0px 0px 0px 1px !important;}'+
			'div.calendarHolder td.selected_start {border-width: 1px 0px 1px 1px !important;margin: 0px 1px 0px 0px !important;}'+
			'div.calendarHolder table.datePicker td.range {background: #dcddef;border: solid #20397b;border-width: 1px 0px;margin: 0px 1px !important;}',
		range: false,
		time: false
	},
	initialize: function(inputs, options){
		if (options && (options.range || options.time)) {
			options = $merge({
				hideCalendarOnPick: false
			}, options);
		}
		if (options && options.time && !options.format) {
			options.format = "%x %X";
		}
		this.setOptions(options);
		this.whens = (this.options.range)?['start', 'end']:['start'];
		if ($type(inputs) == 'object') {
			this.inputs = $H(inputs);
		} else if ($type(document.id(inputs)) == "element") {
			this.inputs = $H({'start': document.id(inputs)});
		} else if ($type(inputs) == "array"){
			inputs = $$(inputs);
			this.inputs = $H({});
			this.whens.each(function(when, i){
				this.inputs.set(when, inputs[i]);
			}, this);
		}
		if (this.options.time) this.calWidth = 460;
		this.previous(inputs, this.options);
		this.createStyle(this.options.extraCSS, 'datePickerPlusStyle');
		this.addEvent('rowDateEvaluated', function(atDate, td){
			if (this.options.range && this.selectedDates.start.diff(atDate, 'minute') > 0
					&& this.selectedDates.end.diff(atDate, 'minute') < 0) td.addClass('range');
		}.bind(this));
		this.addEvent('selectedDateMatch', function(td, when){
			if (this.options.range) td.addClass('selected_'+when);
		}.bind(this));
	},
	updateInput: function(){
		this.previous();
		if (this.options.time) this.updateView();
	},
	updateView: function() {
		this.whens.each(function(when){
			var stamp = this.stamps[when];
			var date = this.getDates()[when];
			stamp.date.set('html', date?date.format("%b. %d, %Y"):"");
			if (stamp.hr) {
				stamp.hr.set('value', date?date.format("%I"):"");
				stamp.min.set('value', date?date.format("%M"):"");
			}
		}, this);
	},
	stamps: {},
	setupWideView: function(){
		var timeStampMap = {
			hr: '%I',
			'min': '%M'
		};
		timeSetMap = {
			hr: 'setHours',
			'min':'setMinutes'
		};
		var dates = this.getDates();

		if (!this.options.range && !this.options.time) return;
		this.stamps.table = new Element('table', {
			'class':'stamp'
		}).inject(this.container);
		this.stamps.tbody = new Element('tbody').inject(this.stamps.table);
		this.whens.each(function(when){
			this.stamps[when] = {};
			var s = this.stamps[when]; //saving some bytes
			s.container = new Element('tr').addClass(when+'_stamp').inject(this.stamps.tbody);
			s.label = new Element('td').inject(s.container).addClass('label');
			if (this.whens.length == 1) {
				s.label.set('html', 'date:');
			} else {
				s.label.set('html', when=="start"?"from:":"to:");
			}
			s.date = new Element('td').inject(s.container);
			if (this.options.time) {
				currentWhen = dates[when]||new Date();
				s.time = new Element('tr').inject(this.stamps.tbody);
				new Element('td').inject(s.time);
				s.timeTD = new Element('td').inject(s.time);
				s.timeInputs = new Element('div').addClass('time clearfix').inject(s.timeTD);
				s.timeSub = new Element('div', {'class':'timeSub'}).inject(s.timeTD);
				['hr','min'].each(function(t, i){
					s[t] = new Element('input', {
						type: 'text',
						'class': t,
						name: t,
						events: {
							focus: function(){
								this.select();
							},
							change: function(){
								this.selectedDates[when][timeSetMap[t]](s[t].get('value'));
								this.selectedDates[when].setAMPM(s.ampm.get('value'));
								this.updateInput();
							}.bind(this)
						}
					}).inject(s.timeInputs);
					s[t].set('value', currentWhen.format(timeStampMap[t]));
					if (i < 1) s.timeInputs.adopt(new Element('span', {'class':'seperator'}).set('html', ":"));
					new Element('span', {
						'class': t
					}).set('html', t).inject(s.timeSub);
				}, this);
				s.ampm = new Element('select').inject(s.timeInputs);
				['AM','PM'].each(function(ampm){
					var opt = new Element('option', {
						value: ampm,
						text: ampm.toLowerCase()
					}).set('html', ampm).inject(s.ampm);
					if (ampm == currentWhen.format("%p")) opt.selected = true;
				});
				s.ampm.addEvent('change', function(){
					var date = this.getDates()[when];
					var ampm = s.ampm.get('value');
					if (ampm != date.format("%p")) {
						date.setAMPM(ampm);
						this.updateInput();
					}
				}.bind(this));
			}
		}, this);
		new Element('tr').inject(this.stamps.tbody).adopt(new Element('td', {colspan: 2}).adopt(new Element('a', {
			'class':'closeSticky button',
			events: {
				click: function(){
					this.hide();
				}.bind(this)
			}
		}).set('html', 'Ok')));
	},
	show: function(){
		this.previous();
		if (this.options.time) {
			if (!this.stamps.table) this.setupWideView();
			this.updateView();
		}
	},
	startSet: false,
	onPick: function(){
		if ((this.options.range && this.selectedDates.start && this.selectedDates.end) || !this.options.range) {
			this.previous();
		}
	},
	setSelectedDates: function(e, newDate) {
		if (this.options.range) {
			if (this.selectedDates.start && this.startSet) {
				if (this.selectedDates.start.getTime() > newDate.getTime()){
					this.selectedDates.end = new Date(this.selectedDates.start);
					this.selectedDates.start = newDate;
				} else {
					this.selectedDates.end = newDate;
				}
				this.startSet = false;
			} else {
				this.selectedDates.start = newDate;
				if (this.selectedDates.end && this.selectedDates.start.getTime() > this.selectedDates.end.getTime())
					this.selectedDates.end = new Date(newDate);
				this.startSet = true;
			}
		} else {
			this.previous(e, newDate);
		}
		if (this.options.time) {
			this.whens.each(function(when){
				var hr = this.stamps[when].hr.get('value').toInt();
				if (this.stamps[when].ampm.get('value') == "PM" && hr < 12) hr += 12;
				this.selectedDates[when].setHours(hr);
				this.selectedDates[when].setMinutes(this.stamps[when]['min'].get('value')||"0");
				this.selectedDates[when].setAMPM(this.stamps[when].ampm.get('value')||"AM");
			}, this);
		}
	}
});

FormValidator.Tips = new Class({
	Extends: FormValidator.Inline,
	options: {
		pointyTipOptions: {
			point: "left",
			width: 250
		}
//		tipCaption: ''
	},
	showAdvice: function(className, field){
		var advice = this.getAdvice(field);
		if (advice && !advice.visible){
			advice.show();
			advice.position();
			advice.pointy.positionPointer();
		}
	},
	hideAdvice: function(className, field){
		var advice = this.getAdvice(field);
		if (advice && advice.visible) advice.show();
	},
	getAdvice: function(className, field) {
		var params = Array.link(arguments, {field: Element.type});
		return params.field.retrieve('PointyTip');
	},
	advices: [],
	makeAdvice: function(className, field, error, warn){
		if (!error && !warn) return;
		var advice = field.retrieve('PointyTip');
		if (!advice){
			var cssClass = warn?'warning-advice':'validation-advice';
			var msg = new Element('ul', {
				styles: {
					margin: 0,
					padding: 0,
					listStyle: 'none'
				}
			});
			var li = this.makeAdviceItem(className, field);
			if (li) msg.adopt(li);
			field.store('validationMsgs', msg);
			advice = new StickyWin.PointyTip(this.options.tipCaption, msg, $merge(this.options.pointyTipOptions, {
				showNow: false,
				relativeTo: field,
				inject: {
					target: this.element
				}
			}));
			this.advices.push(advice);
			advice.msgs = {};
			field.store('PointyTip', advice);
			document.id(advice).addClass(cssClass).set('id', 'advice-'+className+'-'+this.getFieldId(field));
		}
		field.store('advice-'+className, advice);
		this.appendAdvice(className, field, error, warn);
		advice.pointy.positionPointer();
		return advice;
	},
	validateField: function(field, force){
		var advice = this.getAdvice(field);
		var anyVis = this.advices.some(function(a){ return a.visible; });
		if (anyVis && this.options.serial) {
			if (advice && advice.visible) {
				var passed = this.parent(field, force);
				if (!field.hasClass('validation-failed')) advice.hide();
			}
			return passed;
		}
		var msgs = field.retrieve('validationMsgs');
		if (msgs) msgs.getChildren().hide();
		if (field.hasClass('validation-failed') || field.hasClass('warning')) if (advice) advice.show();
		if (this.options.serial) {
			var fields = this.element.getElements('.validation-failed, .warning');
			if (fields.length) {
				fields.each(function(f, i) {
					var adv = this.getAdvice(f);
					if (adv) adv.hide();
				}, this);
			}
		}
		return this.parent(field, force);
	},
	makeAdviceItem: function(className, field, error, warn){
		if (!error && !warn) return;
		var advice = this.getAdvice(field);
		var errorMsg = this.makeAdviceMsg(field, error, warn);
		if (advice && advice.msgs[className]) return advice.msgs[className].set('html', errorMsg);
		return new Element('li', {
			html: errorMsg,
			style: {
				display: 'none'
			}
		});
	},
	makeAdviceMsg: function(field, error, warn){
		var errorMsg = (warn)?this.warningPrefix:this.errorPrefix;
			errorMsg += (this.options.useTitles) ? field.title || error:error;
		return errorMsg;
	},
	appendAdvice: function(className, field, error, warn) {
		var advice = this.getAdvice(field);
		if (advice.msgs[className]) return advice.msgs[className].set('html', this.makeAdviceMsg(field, error, warn)).show();
		var li = this.makeAdviceItem(className, field, error, warn);
		if (!li) return;
		li.inject(field.retrieve('validationMsgs')).show();
		advice.msgs[className] = li;
	},
	insertAdvice: function(advice, field){
		//Check for error position prop
		var props = field.get('validatorProps');
		//Build advice
		if (!props.msgPos || !document.id(props.msgPos)) {
			switch (field.type.toLowerCase()) {
				case 'radio':
					var p = field.getParent().adopt(advice);
					break;
				default:
					document.id(advice).inject(document.id(field), 'after');
			};
		} else {
			document.id(props.msgPos).grab(advice);
		}
		advice.position();
	}
});

/*
Script: InputFocus.js
	Adds a focused css class to inputs when they have focus.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
var InputFocus = new Class({
	Implements: [Options, Class.Occlude, Class.ToElement],
	Binds: ['focus', 'blur'],
	options: {
		focusedClass: 'focused',
		hideOutline: false
	},
	initialize: function(input, options) {
		this.element = document.id(input);
		if (this.occlude('focuser')) return this.occluded;
		this.setOptions(options);
		this.element.addEvents({
			focus: this.focus,
			blur: this.blur
		});
	},
	focus: function(){
		if (this.options.hideOutline) {
			(function(){
				if (Browser.Engine.trident) document.id(this).set('hideFocus', true);
				else document.id(this).setStyle('outline', '0');
			}).delay(500, this);
		}
		document.id(this).addClass(this.options.focusedClass);
	},
	blur: function(){
		document.id(this).removeClass(this.options.focusedClass);
	}
});

/**
 * Autocompleter
 *
 * @version		1.1.1
 *
 * @todo: Caching, no-result handling!
 *
 *
 * @license		MIT-style license
 * @author		Harald Kirschner <mail [at] digitarald.de>
 * @copyright	Author
 */
var Autocompleter = {};

var OverlayFix = IframeShim;

Autocompleter.Base = new Class({

	Implements: [Options, Events],

	options: {
		minLength: 1,
		markQuery: true,
		width: 'inherit',
		maxChoices: 10,
//		injectChoice: null,
//		customChoices: null,
		className: 'autocompleter-choices',
		zIndex: 42,
		delay: 400,
		observerOptions: {},
		fxOptions: {},
//		onSelection: $empty,
//		onShow: $empty,
//		onHide: $empty,
//		onBlur: $empty,
//		onFocus: $empty,

		autoSubmit: false,
		overflow: false,
		overflowMargin: 25,
		selectFirst: false,
		filter: null,
		filterCase: false,
		filterSubset: false,
		forceSelect: false,
		selectMode: true,
		choicesMatch: null,

		multiple: false,
		separator: ', ',
		autoTrim: true,
		allowDupes: false,

		cache: true,
		relative: false
	},

	initialize: function(element, options) {
		this.element = document.id(element);
		this.setOptions(options);
		this.options.separatorSplit = new RegExp("\s*["+this.options.separator.trim()+"]\s*/");
		this.build();
		this.observer = new Observer(this.element, this.prefetch.bind(this), $merge({
			'delay': this.options.delay
		}, this.options.observerOptions));
		this.queryValue = null;
		if (this.options.filter) this.filter = this.options.filter.bind(this);
		var mode = this.options.selectMode;
		this.typeAhead = (mode == 'type-ahead');
		this.selectMode = (mode === true) ? 'selection' : mode;
		this.cached = [];
	},

	/**
	 * build - Initialize DOM
	 *
	 * Builds the html structure for choices and appends the events to the element.
	 * Override this function to modify the html generation.
	 */
	build: function() {
		if (document.id(this.options.customChoices)) {
			this.choices = this.options.customChoices;
		} else {
			this.choices = new Element('ul', {
				'class': this.options.className,
				'styles': {
					'zIndex': this.options.zIndex
				}
			}).inject(document.body);
			this.relative = false;
			if (this.options.relative || this.element.getOffsetParent() != document.body) {
				this.choices.inject(this.element, 'after');
				this.relative = this.element.getOffsetParent();
			}
			this.fix = new OverlayFix(this.choices);
		}
		if (!this.options.separator.test(this.options.separatorSplit)) {
			this.options.separatorSplit = this.options.separator;
		}
		this.fx = (!this.options.fxOptions) ? null : new Fx.Tween(this.choices, $merge({
			'property': 'opacity',
			'link': 'cancel',
			'duration': 200
		}, this.options.fxOptions)).addEvent('onStart', Chain.prototype.clearChain).set(0);
		this.element.setProperty('autocomplete', 'off')
			.addEvent((Browser.Engine.trident || Browser.Engine.webkit) ? 'keydown' : 'keypress', this.onCommand.bind(this))
			.addEvent('click', this.onCommand.bind(this, [false]))
			.addEvent('focus', this.toggleFocus.create({bind: this, arguments: true, delay: 100}));
			//.addEvent('blur', this.toggleFocus.create({bind: this, arguments: false, delay: 100}));
		document.addEvent('click', function(e){
			if (e.target != this.choices) this.toggleFocus(false);
		}.bind(this));
	},

	destroy: function() {
		if (this.fix) this.fix.dispose();
		this.choices = this.selected = this.choices.destroy();
	},

	toggleFocus: function(state) {
		this.focussed = state;
		if (!state) this.hideChoices(true);
		this.fireEvent((state) ? 'onFocus' : 'onBlur', [this.element]);
	},

	onCommand: function(e) {
		if (!e && this.focussed) return this.prefetch();
		if (e && e.key && !e.shift) {
			switch (e.key) {
				case 'enter':
					if (this.element.value != this.opted) return true;
					if (this.selected && this.visible) {
						this.choiceSelect(this.selected);
						return !!(this.options.autoSubmit);
					}
					break;
				case 'up': case 'down':
					if (!this.prefetch() && this.queryValue !== null) {
						var up = (e.key == 'up');
						this.choiceOver((this.selected || this.choices)[
							(this.selected) ? ((up) ? 'getPrevious' : 'getNext') : ((up) ? 'getLast' : 'getFirst')
						](this.options.choicesMatch), true);
					}
					return false;
				case 'esc': case 'tab':
					this.hideChoices(true);
					break;
			}
		}
		return true;
	},

	setSelection: function(finish) {
		var input = this.selected.inputValue, value = input;
		var start = this.queryValue.length, end = input.length;
		if (input.substr(0, start).toLowerCase() != this.queryValue.toLowerCase()) start = 0;
		if (this.options.multiple) {
			var split = this.options.separatorSplit;
			value = this.element.value;
			start += this.queryIndex;
			end += this.queryIndex;
			var old = value.substr(this.queryIndex).split(split, 1)[0];
			value = value.substr(0, this.queryIndex) + input + value.substr(this.queryIndex + old.length);
			if (finish) {
				var space = /[^\s,]+/;
				var tokens = value.split(this.options.separatorSplit).filter(space.test, space);
				if (!this.options.allowDupes) tokens = [].combine(tokens);
				var sep = this.options.separator;
				value = tokens.join(sep) + sep;
				end = value.length;
			}
		}
		this.observer.setValue(value);
		this.opted = value;
		if (finish || this.selectMode == 'pick') start = end;
		this.element.selectRange(start, end);
		this.fireEvent('onSelection', [this.element, this.selected, value, input]);
	},

	showChoices: function() {
		var match = this.options.choicesMatch, first = this.choices.getFirst(match);
		this.selected = this.selectedValue = null;
		if (this.fix) {
			var pos = this.element.getCoordinates(this.relative), width = this.options.width || 'auto';
			this.choices.setStyles({
				'left': pos.left,
				'top': pos.bottom,
				'width': (width === true || width == 'inherit') ? pos.width : width
			});
		}
		if (!first) return;
		if (!this.visible) {
			this.visible = true;
			this.choices.setStyle('display', '');
			if (this.fx) this.fx.start(1);
			this.fireEvent('onShow', [this.element, this.choices]);
		}
		if (this.options.selectFirst || this.typeAhead || first.inputValue == this.queryValue) this.choiceOver(first, this.typeAhead);
		var items = this.choices.getChildren(match), max = this.options.maxChoices;
		var styles = {'overflowY': 'hidden', 'height': ''};
		this.overflown = false;
		if (items.length > max) {
			var item = items[max - 1];
			styles.overflowY = 'scroll';
			styles.height = item.getCoordinates(this.choices).bottom;
			this.overflown = true;
		};
		this.choices.setStyles(styles);
		this.fix.show();
	},

	hideChoices: function(clear) {
		if (clear) {
			var value = this.element.value;
			if (this.options.forceSelect) value = this.opted;
			if (this.options.autoTrim) {
				value = value.split(this.options.separatorSplit).filter($arguments(0)).join(this.options.separator);
			}
			this.observer.setValue(value);
		}
		if (!this.visible) return;
		this.visible = false;
		this.observer.clear();
		var hide = function(){
			this.choices.setStyle('display', 'none');
			this.fix.hide();
		}.bind(this);
		if (this.fx) this.fx.start(0).chain(hide);
		else hide();
		this.fireEvent('onHide', [this.element, this.choices]);
	},

	prefetch: function() {
		var value = this.element.value, query = value;
		if (this.options.multiple) {
			var split = this.options.separatorSplit;
			var values = value.split(split);
			var index = this.element.getCaretPosition();
			var toIndex = value.substr(0, index).split(split);
			var last = toIndex.length - 1;
			index -= toIndex[last].length;
			query = values[last];
		}
		if (query.length < this.options.minLength) {
			this.hideChoices();
		} else {
			if (query === this.queryValue || (this.visible && query == this.selectedValue)) {
				if (this.visible) return false;
				this.showChoices();
			} else {
				this.queryValue = query;
				this.queryIndex = index;
				if (!this.fetchCached()) this.query();
			}
		}
		return true;
	},

	fetchCached: function() {
		return false;
		if (!this.options.cache
			|| !this.cached
			|| !this.cached.length
			|| this.cached.length >= this.options.maxChoices
			|| this.queryValue) return false;
		this.update(this.filter(this.cached));
		return true;
	},

	update: function(tokens) {
		this.choices.empty();
		this.cached = tokens;
		if (!tokens || !tokens.length) {
			this.hideChoices();
		} else {
			if (this.options.maxChoices < tokens.length && !this.options.overflow) tokens.length = this.options.maxChoices;
			tokens.each(this.options.injectChoice || function(token){
				var choice = new Element('li', {'html': this.markQueryValue(token)});
				choice.inputValue = token;
				this.addChoiceEvents(choice).inject(this.choices);
			}, this);
			this.showChoices();
		}
	},

	choiceOver: function(choice, selection) {
		if (!choice || choice == this.selected) return;
		if (this.selected) this.selected.removeClass('autocompleter-selected');
		this.selected = choice.addClass('autocompleter-selected');
		this.fireEvent('onSelect', [this.element, this.selected, selection]);
		if (!selection) return;
		this.selectedValue = this.selected.inputValue;
		if (this.overflown) {
			var coords = this.selected.getCoordinates(this.choices), margin = this.options.overflowMargin,
				top = this.choices.scrollTop, height = this.choices.offsetHeight, bottom = top + height;
			if (coords.top - margin < top && top) this.choices.scrollTop = Math.max(coords.top - margin, 0);
			else if (coords.bottom + margin > bottom) this.choices.scrollTop = Math.min(coords.bottom - height + margin, bottom);
		}
		if (this.selectMode) this.setSelection();
	},

	choiceSelect: function(choice) {
		if (choice) this.choiceOver(choice);
		this.setSelection(true);
		this.queryValue = false;
		this.hideChoices();
	},

	filter: function(tokens) {
		return (tokens || this.tokens).filter(function(token) {
			return this.test(token);
		}, new RegExp(((this.options.filterSubset) ? '' : '^') + this.queryValue.escapeRegExp(), (this.options.filterCase) ? '' : 'i'));
	},

	/**
	 * markQueryValue
	 *
	 * Marks the queried word in the given string with <span class="autocompleter-queried">*</span>
	 * Call this i.e. from your custom parseChoices, same for addChoiceEvents
	 *
	 * @param		{String} Text
	 * @return		{String} Text
	 */
	markQueryValue: function(str) {
		return (!this.options.markQuery || !this.queryValue) ? str
			: str.replace(new RegExp('(' + ((this.options.filterSubset) ? '' : '^') + this.queryValue.escapeRegExp() + ')', (this.options.filterCase) ? '' : 'i'), '<span class="autocompleter-queried">$1</span>');
	},

	/**
	 * addChoiceEvents
	 *
	 * Appends the needed event handlers for a choice-entry to the given element.
	 *
	 * @param		{Element} Choice entry
	 * @return		{Element} Choice entry
	 */
	addChoiceEvents: function(el) {
		return el.addEvents({
			'mouseover': this.choiceOver.bind(this, [el]),
			'click': this.choiceSelect.bind(this, [el])
		});
	}
});


/**
 * Autocompleter.Local
 *
 * @version		1.1.1
 *
 * @todo: Caching, no-result handling!
 *
 *
 * @license		MIT-style license
 * @author		Harald Kirschner <mail [at] digitarald.de>
 * @copyright	Author
 */
Autocompleter.Local = new Class({

	Extends: Autocompleter.Base,

	options: {
		minLength: 0,
		delay: 200
	},

	initialize: function(element, tokens, options) {
		this.parent(element, options);
		this.tokens = tokens;
	},

	query: function() {
		this.update(this.filter());
	}

});


/**
 * Autocompleter.Remote
 *
 * @version		1.1.1
 *
 * @todo: Caching, no-result handling!
 *
 *
 * @license		MIT-style license
 * @author		Harald Kirschner <mail [at] digitarald.de>
 * @copyright	Author
 */

Autocompleter.Ajax = {};

Autocompleter.Ajax.Base = new Class({

	Extends: Autocompleter.Base,

	options: {
		postVar: 'value',
		postData: {},
		ajaxOptions: {},
		onRequest: $empty,
		onComplete: $empty
	},

	initialize: function(element, options) {
		this.parent(element, options);
		var indicator = document.id(this.options.indicator);
		if (indicator) {
			this.addEvents({
				'onRequest': indicator.show.bind(indicator),
				'onComplete': indicator.hide.bind(indicator)
			}, true);
		}
	},

	query: function(){
		var data = $unlink(this.options.postData);
		data[this.options.postVar] = this.queryValue;
		this.fireEvent('onRequest', [this.element, this.request, data, this.queryValue]);
		this.request.send({'data': data});
	},

	/**
	 * queryResponse - abstract
	 *
	 * Inherated classes have to extend this function and use this.parent(resp)
	 *
	 * @param		{String} Response
	 */
	queryResponse: function() {
		this.fireEvent('onComplete', [this.element, this.request, this.response]);
	}

});

Autocompleter.Ajax.Json = new Class({

	Extends: Autocompleter.Ajax.Base,

	initialize: function(el, url, options) {
		this.parent(el, options);
		this.request = new Request.JSON($merge({
			'url': url,
			'link': 'cancel'
		}, this.options.ajaxOptions)).addEvent('onComplete', this.queryResponse.bind(this));
	},

	queryResponse: function(response) {
		this.parent();
		this.update(response);
	}

});

Autocompleter.Ajax.Xhtml = new Class({

	Extends: Autocompleter.Ajax.Base,

	initialize: function(el, url, options) {
		this.parent(el, options);
		this.request = new Request.HTML($merge({
			'url': url,
			'link': 'cancel',
			'update': this.choices
		}, this.options.ajaxOptions)).addEvent('onComplete', this.queryResponse.bind(this));
	},

	queryResponse: function(tree, elements) {
		this.parent();
		if (!elements || !elements.length) {
			this.hideChoices();
		} else {
			this.choices.getChildren(this.options.choicesMatch).each(this.options.injectChoice || function(choice) {
				var value = choice.innerHTML;
				choice.inputValue = value;
				this.addChoiceEvents(choice.set('html', this.markQueryValue(value)));
			}, this);
			this.showChoices();
		}

	}

});


/*
Script: Autocompleter.JSONP.js
	Implements Request.JSONP support for the Autocompleter class.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/

Autocompleter.JSONP = new Class({

	Extends: Autocompleter.Ajax.Json,

	options: {
		postVar: 'query',
		jsonpOptions: {},
//		onRequest: $empty,
//		onComplete: $empty,
//		filterResponse: $empty
		minLength: 1
	},

	initialize: function(el, url, options) {
		this.url = url;
		this.setOptions(options);
		this.parent(el, options);
	},

	query: function(){
		var data = $unlink(this.options.jsonpOptions.data||{});
		data[this.options.postVar] = this.queryValue;
		this.jsonp = new Request.JSONP($merge({url: this.url, data: data},	this.options.jsonpOptions));
		this.jsonp.addEvent('onComplete', this.queryResponse.bind(this));
		this.fireEvent('onRequest', [this.element, this.jsonp, data, this.queryValue]);
		this.jsonp.send();
	},

	queryResponse: function(response) {
		this.parent();
		var data = (this.options.filter)?this.options.filter.run([response], this):response;
		this.update(data);
	}

});
Autocompleter.JsonP = Autocompleter.JSONP;

/**
 * Observer - Observe formelements for changes
 *
 * @version		1.0rc3
 *
 * @license		MIT-style license
 * @author		Harald Kirschner <mail [at] digitarald.de>
 * @copyright	Author
 */
var Observer = new Class({

	Implements: [Options, Events],

	options: {
		periodical: false,
		delay: 1000
	},

	initialize: function(el, onFired, options){
		this.setOptions(options);
		this.addEvent('onFired', onFired);
		this.element = document.id(el) || $$(el);
		/* Clientcide change */
		this.boundChange = this.changed.bind(this);
		this.resume();
	},

	changed: function() {
		var value = this.element.get('value');
		if ($equals(this.value, value)) return;
		this.clear();
		this.value = value;
		this.timeout = this.onFired.delay(this.options.delay, this);
	},

	setValue: function(value) {
		this.value = value;
		this.element.set('value', value);
		return this.clear();
	},

	onFired: function() {
		this.fireEvent('onFired', [this.value, this.element]);
	},

	clear: function() {
		$clear(this.timeout || null);
		return this;
	},
	/* Clientcide change */
	pause: function(){
		$clear(this.timeout);
		$clear(this.timer);
		this.element.removeEvent('keyup', this.boundChange);
		return this;
	},
	resume: function(){
		this.value = this.element.get('value');
		if (this.options.periodical) this.timer = this.changed.periodical(this.options.periodical, this);
		else this.element.addEvent('keyup', this.boundChange);
		return this;
	}

});

var $equals = function(obj1, obj2) {
	return (obj1 == obj2 || JSON.encode(obj1) == JSON.encode(obj2));
};

/*
Script: AutoCompleter.Clientcide.js
	Adds Clientcide css assets to autocompleter automatically.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
(function(){
	Autocompleter.Base = Class.refactor(Autocompleter.Base, {
		options: {
			baseHref: 'http://www.cnet.com/html/rb/assets/global/autocompleter/'
		},
		initialize: function(a1,a2,a3) {
			this.previous(a1,a2,a3);
			this.writeStyle();
		},
		writeStyle: function(){
			window.addEvent('domready', function(){
				if (document.id('AutocompleterCss')) return;
				new Element('link', {
					rel: 'stylesheet',
					media: 'screen',
					type: 'text/css',
					href: this.options.baseHref+'Autocompleter.css',
					id: 'AutocompleterCss'
				}).inject(document.head);
			}.bind(this));
		}
	});
})();
if (window._JSON) {
	JSON.stringify = _JSON.stringify;
	JSON.parse = _JSON.parse;
}

String.implement({
	startsWith: function(s) {
		return this.substr(0,s.length)==s;
	},
	replaceAll: function(searchValue, replaceValue, regExOptions) {
		return this.replace(new RegExp(searchValue, $pick(regExOptions,"gi")), replaceValue);
	},
	gsub: function(search, replace) {
		return this.split(search).join(replace);
	},
	urlEncode: function() {
		if (this.indexOf("%") > -1) return this;
		else return escape(this);
	},
	htmlEntitiesEncode: function() {
		var enc = this.toString();
		enc = enc.gsub("&","&amp;");
		enc = enc.gsub("<","&lt;");
		enc = enc.gsub(">","&gt;");
		return enc;
	},
	injectHTML: function(inside) {
		var container = new Element("DIV", {"html": this.toString()});
		var children = container.getChildren();
		children.each(function(child) { child.inject(inside); });
		container.dispose();
		return children;
	},
	toClipboard: function() {
		try {
			document.execCommand('Copy', this.toString());
		} catch(e) {
			try {
				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
			} catch(e) {
				if (Browser.Engine.gecko)
					alert("Browser security settings doesn't allow this action to be taken.\n\nSet the 'signed.applets.codebase_principal_support' property in the 'about:config' page to true/1 if you want to enable this feature.");
				return this;
			}
			try {
				clip = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard);
			} catch(e) {
				return this;
			}
			try {
				transf = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
			} catch(e) {
				return this;
			}
			transf.addDataFlavor("text/unicode");
			suppstr = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
			suppstr.data = this.toString();
			transf.setTransferData("text/unicode",suppstr,this.length*2);
			try {
				clipi = Components.interfaces.nsIClipboard;
			} catch(e) {
				return this;
			}
			clip.setData(transf,null,clipi.kGlobalClipboard);
		}
		return this;
	}
});

Element.tDataRegExp = new RegExp("_\\|JS:(.*)\\|_");

Element.implement({
	searchAttachedData: function() {
		this.getElements("[title]").each( function(elem) {
			elem.storeAttachedData();
		} );
	},

	// Cerca dati json inclusi nel parametro title e ne fa lo store in "tData". I dati json devono essere racchiusi tra "_|JS:" e "|_"
	storeAttachedData: function() {
		var t = this.get("title");
		var matches = Element.tDataRegExp.exec(t);
		try {
			var data = JSON.decode(matches[1]);
			this.store("tData", data);
			this.set("title", t.gsub(matches[0],""));
		} catch(e) {
			dbug.log(e);
		}
	},

	isVisible: function(recursive) {
		if (recursive && this.getParent()) {
			var parent=this.getParent();
			var element=this;
			var result=true;

			while (parent && !element.isBody() && result) {
				var visible = ((element.getStyle('display') != 'none') && (element.getStyle('visibility') != 'hidden') && (element.getStyle('opacity') != 0));
				if (!visible) result=false;
				element=element.getParent();
				parent=element.getParent();
			}

			return result;
		} else {
			return this.getStyle('display') != 'none';
		}
	},

	inlineEdit: function(options) {
		return new InlineEdit(this, options);
	},

	hide: function() {
		var d;
		try {
			d = this.getStyle('display');
			if (d=='none') d = '';
		} catch(e){}
		this.store('originalDisplay', d||'');
		this.setStyle('display','none');
		return this;
	},

	show: function(display) {
		original = this.retrieve('originalDisplay')?this.retrieve('originalDisplay'):this.get('originalDisplay');
		this.setStyle('display',(display || original || ''));
		return this;
	},

	getCells: function() {
		if ($defined(this.cells))
			return this.cells;
		else
			return this.getElements("td");
	},

	getSiblings: function() {
		return this.getAllPrevious().extend(this.getAllNext());
	},

	toQueryString: function(){
		var queryString = [];
		this.getElements('input, select, textarea', true).each(function(el){
			if (!el.name || el.disabled || el.type == 'submit' || el.type == 'reset' || el.type == 'file') return;
			var value = el.value;
			if (el.tagName.toLowerCase() == 'select') {
				value = Element.getSelected(el).map(function(opt){
					return opt.value;
				});
			} else if ((el.type == 'radio' || el.type == 'checkbox') && !el.checked) {
				value = el.type == 'checkbox' ? '' : null;
			}
			$splat(value).each(function(val){
				if (typeof val != 'undefined') queryString.push(el.name + '=' + encodeURIComponent(val));
			});
		});
		return queryString.join('&');
	},

	toHash: function(){
		var hash = {};
		this.getElements('input[name][type!=submit], select[name], textarea[name]').each(function(el){
			if (el.disabled) return;
			var value = (el.tagName.toLowerCase() == 'select') ? Element.getSelected(el).map(function(opt){
				return opt.value;
			}) : ((el.type == 'radio' || el.type == 'checkbox') && !el.checked) ? null : el.value;
			hash[el.name] = value;
		});
		return hash;
	},

	cloneWithEvents: function(contents, keepid, type) {
		return this.clone(contents, keepid).cloneEvents(this, type);
	},

	isBody: function() {
		return (/^(?:body|html)$/i).test(this.tagName);
	},

	fxBlindDown: function(options) {
		options = $merge({
			direction: 'auto'
		}, options);

		if (!this.fullHeight) this.fullHeight = this.getDimensions().y;

		if (options.direction == 'auto')
			options.direction = this.getHeight() == 0 ? 'down' : 'up';

		var dim;
		if (options.direction == 'down')
			dim = [0, this.fullHeight];
		else
			dim = [this.fullHeight, 0];

		return this.setStyles({height: dim[0]+"px", overflow: 'hidden'}).show().tween('height', dim);
	},

	highlightOpacity: function() {
		var fx = this.retrieve("highlightOpacityFx");
		if (!fx) {
			fx = new Fx.Morph(this, {
				link: "cancel",
				duration:500
			});
			fx.addEvent("onChainComplete", function() {
				this.start({
					'opacity':1
				});
			}.bind(fx));
			this.store("highlightOpacityFx", fx);
		}
		fx.start({
			'opacity':0
		});
		return this;
	},
	blinkFx: function(index){
		(function(){
			if (this.hasClass('blinked')){
				this.removeClass('blinked');
			} else {
				this.addClass('blinked');
			}
			index--;
			if (index>0)
				this.blinkFx(index);
		}).delay(150,this);
	},
	getFxFadedShowHide: function() {
		var fx = this.retrieve("fxFadedShowHide");
		if (!fx) {
			fx = new Fx.Morph(this, {
				link: "cancel"
			}).addEvent("onChainComplete", function() {
				if (this.getStyle("opacity") == 0) {
					this.hide();
				} else {
					this.setStyle("height","");
				}
			}.bind(this));
			this.store("fxFadedShowHide", fx);
		}
		return fx;
	},
	fxFadedHide: function() {
		if (this.isVisible()) {
			this.store("fxFadedShowHide-Height", this.getSize().y);
			this.getFxFadedShowHide().start({
				opacity: 0,
				height: 0
			});
		}
		return this;
	},
	fxFadedShow: function() {
		if (!this.isVisible()) {
			var h = $pick( this.retrieve("fxFadedShowHide-Height"), 0 );
			this.store("fxFadedShowHide-Height", 0);
			var morph = {opacity:1};
			if (h>0)
				morph.height = h;
			this.setStyles({
				display: '',
				opacity: 0
			}).getFxFadedShowHide().start(morph);
		}
		return this;
	}
});

if (typeof(StickyWin) != 'undefined') {
	//Fix per aggiungere scrolls al posizionamento delle finestre
	StickyWin.implement({
		position: function(options){
			this.positioned = true;
			this.setOptions(options);

			//FIX
			if (this.options.relativeTo != document.body) {
				if (!this.originalOffset) this.originalOffset = this.options.offset;
				var scrolls = this.options.relativeTo.getScrolls();
				this.options.offset.x = this.originalOffset.x + scrolls.x;
				this.options.offset.y = this.originalOffset.y + scrolls.y -5; // offset di 10px inspiegabile
			}

			this.win.position({
				allowNegative: $pick(this.options.allowNegative, this.options.relativeTo != document.body),
				relativeTo: this.options.relativeTo,
				position: this.options.position,
				offset: this.options.offset,
				edge: this.options.edge
			});
			if (this.shim) this.shim.position();
			return this;
		}
	});
}
Number.format_regex = /(\d+)(\d{3})/;
Number.implement({
	format: function(precision, decimal_point, thousands_sep) {
		decimal_point = $pick(decimal_point, ".");
		thousands_sep = $pick(thousands_sep, "");

		var x = this.toFloat().round(precision).toString().split("."), x1, x2;
		x1 = x[0];
		if (precision > 0) {
			if (x.length > 1) {
				if (x[1].length < precision)
					x[1] += "0".repeat( precision-x[1].length )
				x2 = x.length > 1 ? decimal_point + x[1] : "";
			} else {
				x2 = decimal_point+"0".repeat(precision);
			}
		} else {
			x2 = "";
		}
		if (thousands_sep != "") {
			while (Number.format_regex.test(x1)) {
				x1 = x1.replace(Number.format_regex, "$1" + thousands_sep + "$2");
			}
		}
		return x1 + x2;
	},

	humanize: function(precision, options) {
		options = $merge({startUnit: "", machineK: false, unitType: ""}, options);

		precision = $pick(precision, 0);
		num = this.toFloat();

		var units = ["","K","M","G","T","P"];
		var unitX = units.indexOf(options.startUnit);
		var divisor = options.machineK ? 1024 : 1000;

		while (num>=divisor && unitX<units.length) {
			unitX++;
			num /= divisor;
		}
		return num.localized()+units[unitX]+options.unitType;
	},

	localized: function (monetary) {
		var n = "", num = this.toFloat(), sign, sign_posn, sep_by_space, cs_precedes;
		if (num>=0) {
			sign = localeconv['positive_sign'];
			sign_posn = localeconv['p_sign_posn'];
			sep_by_space = localeconv['p_sep_by_space'];
			cs_precedes = localeconv['p_cs_precedes'];
		} else {
			sign = localeconv['negative_sign'];
			sign_posn = localeconv['n_sign_posn'];
			sep_by_space = localeconv['n_sep_by_space'];
			cs_precedes = localeconv['n_cs_precedes'];
		}

		if (monetary) {
			var symbol = localeconv['currency_symbol'];
			//-€ -#- €-
			//012345678
			var a = new Array(9);

			switch(sign_posn) {
				case 1: a[3] = sign; break;
				case 2: a[5] = sign; break;
				case 3: symbol = sign+symbol; break;
				case 4: symbol += sign; break;
				default: n += " [error sign_posn="+sign_posn+"&nbsp;!]";
			}

			if (cs_precedes) {
				a[1] = symbol;
				if (sep_by_space) a[2] = " ";
			} else {
				if (sep_by_space) a[6] = " ";
				a[7] = symbol;
			}
			a[4] = Math.abs(num).format(localeconv['frac_digits'], localeconv['mon_decimal_point'], localeconv['mon_thousands_sep']);
			n = a.join("");
		} else {
			n = Math.abs(num).format(localeconv['frac_digits'], localeconv['decimal_point'], localeconv['thousands_sep']);
			switch(sign_posn) {
				case 0: n = "("+n+")"; break;
				case 2: case 4: n += sign; break;
				case 1: case 3: n = sign+n; break;
				default: n += " [error sign_posn="+sign_posn+"&nbsp;!]";
			}
		}

		return n;
	}
});

Window.implement({
	getMedia: function() {
		var el = new Element("DIV", {"class": "no_print", styles: {"height":"0","width":"0"}}).inject(this.document.documentElement);
		var media = (el.getStyle("display") == "none") ? "print" : "screen";
		el.dispose();
		return media;
	}
});

Element.Events.valuechange = {
	base: "keyup",
	condition: function(event) {
		if ($pick( event.target.retrieve("last_value"), "") != event.target.value) {
			event.target.store("last_value", event.target.value);
			return true;
		} else return false;
	}
}

if (typeof(Sortables) != 'undefined') {
	Sortables.implement({
		getClone: function(element){
			if (!this.options.clone) return new Element('div').inject(document.body);
			if ($type(this.options.clone) == 'function') return this.options.clone.call(this, event, element, this.list);
			return element.clone(true).setStyles({
				'margin': '0px',
				'position': 'absolute',
				'display': 'none',
				'width': element.getStyle('width')
			}).inject(this.list).position(element.getPosition(element.offsetParent));
		},

		serialize: function() {
			var serial = [];
			this.list.getChildren().each(function(el, i){
				serial.push( "ids[]="+el.id.replace(/\D+/,"") );
			}, this);
			return serial.join("&");
		}
	});
}

Tips.implement({
	position: function(event){
		var size = window.getSize(), scroll = window.getScroll();
		var tip = {x: this.tip.offsetWidth, y: this.tip.offsetHeight};

		var alignOffsets = {x:0,y:0};
		if ($pick(this.options.alignment, 'right') == 'left')
			alignOffsets.x = -this.tip.getSize().x;
		if ($pick(this.options.verticalAlignment, 'bottom') == 'top')
			alignOffsets.y = -this.tip.getSize().y;

		var props = {x: 'left', y: 'top'};
		for (var z in props){
			var pos = event.page[z] + this.options.offsets[z] + alignOffsets[z];
			this.tip.setStyle(props[z], pos);
		}
	}
});

if (!document.getElementsByClassName) {
	Native.implement([Document, Element], {
		getElementsByClassName: function(className) {
			return this.getElements("."+className);
		}
	});
}

// http://blog.kassens.net/outerclick-event
(function(){
	var events;
	var check = function(e){
		var target = $(e.target);
		var parents = target.getParents();
		events.each(function(item){
			var element = item.element;
			if (element != target && !parents.contains(element))
				item.fn.call(element, e);
		});
	};
	Element.Events.outerClick = {
		onAdd: function(fn){
			if(!events) {
				window.addEvent('click', check);
				events = [];
			}
			events.push({element: this, fn: fn});
		},
		onRemove: function(fn){
			events = events.filter(function(item){
				return item.element != this || item.fn != fn;
			}, this);
			if (!events.length) {
				window.removeEvent('click', check);
				events = null;
			}
		}
	};
})();


var InlineEdit = new Class({Implements: [Options, Events],
	options: {
		type: "input"
	},
	initialize: function(element,options){
		this.setOptions(options);
		if (element.get("tag") != this.options.type.toLowerCase()){
			this.element = element;
			this.oldContent = this.element.get("html");
			var content = this.oldContent.trim().replace(new RegExp("<br />", "gi"), "\n");
			this.inputBox = new Element(this.options.type, { value: content }).setStyles({
				margin: 0,
				backgroundColor: "transparent",
				//width: this.element.getSize().x,
				width: "99.5%",
				fontSize: "1em",
				borderWidth: 0
			});
			if (!this.inputBox.get("value")) this.inputBox.set("html", content);
			this.setAllStyles();
			this.element.set("html", "");
			this.inputBox.inject(this.element);
			this.inputBox.focus.delay(300, this.inputBox);
			this.inputBox.addEvent("change",this.onSave.bind(this));
			this.inputBox.addEvent("blur",this.onSave.bind(this));
			this.inputBox.addEvent("keyup",this.onKeyUp.bindWithEvent(this));
		}
	},
	onKeyUp: function(e){
		if("enter" == e.key) this.onSave();
	},
	onSave: function(){
		this.inputBox.removeEvents();
		this.newContent = this.inputBox.get("value").trim().replace(new RegExp("\n", "gi"), "<br />");
		this.element.set("html", this.newContent);
		this.fireEvent("onComplete", [this.element, this.oldContent, this.newContent]);
	},
	setAllStyles: function() {
		["text-align", "font", "font-family", "font-weight", "line-height", "letter-spacing", "color"].each(function (property) {
			if (this.element.getStyle(property)) this.inputBox.setStyle(property, this.element.getStyle(property));
		}.bind(this));
	}
});

var InlineSelect = new Class({Implements: [Options, Events],
	value: 0,

	initialize: function(options) {
		this.setOptions(options);
		if (!this.options.element || !this.options.url) return null;
		this.build();
	},

	build: function() {
		this.element = $(this.options.element).addEvent("click", this.onClick.bind(this));
		document.documentElement.addEvent("click", this.documentClick.bindWithEvent(this));
		this.request = new Request({
			url: this.options.url,
			onSuccess: this.fillOptions.bind(this),
			onFailure: function() {
				onAjaxFailure();
				this.waiter.stop();
			}.bind(this)
		});

		this.optionsContainer = new Element("DIV", {
			"class": "inlineSelect"
		}).hide().inject(this.element, "after");
		if (this.options.className)
			this.optionsContainer.addClass(this.options.className);
		this.waiter = new Waiter(this.element);
	},

	onClick: function() {
		if (this.optionsContainer.isVisible())
			this.hideOptions();
		else
			this.showOptions();
	},

	documentClick: function(e) {
		e = new Event(e);
		if (e.target != this.element && !e.target.getParents().contains(this.element))
			this.hideOptions();
	},

	showOptions: function() {
		this.optionsContainer.set("html","").show();
		this.waiter.start();
		this.request.send(this.options.requestOptions);
	},

	hideOptions: function() {
		this.optionsContainer.hide();
		this.waiter.stop();
		this.request.cancel();
	},

	fillOptions: function(response) {
		var options = JSON.decode(response);
		options.each(function(option) {
			var optionDiv = new Element("DIV", {
				"class": "option",
				"html": option.text
			}).store("value", option.value).inject(this.optionsContainer);

			optionDiv.addEvent("click", this.onOptionClick.bind(this, [optionDiv]));
		}, this);
		if (tooltips) tooltips.init(this.optionsContainer);
		this.waiter.stop();
	},

	onOptionClick: function(option) {
		this.value = option.retrieve("value");
		this.fireEvent("change", [option]);
	}
});

var InlineSelectStatic = new Class({Implements: [Options, Events],
	value: 0,

	initialize: function(options) {
		this.setOptions(options);
		if (!this.options.element) return null;
		this.build();
	},

	build: function() {
		this.element = $(this.options.element).addEvent("click", this.elementClick.bind(this));
		document.documentElement.addEvent("click", this.documentClick.bindWithEvent(this));

		this.optionsContainer = new Element("DIV", {
			"class": "inlineSelect"
		}).hide().inject(this.element, "after");
		if (this.options.className)
			this.optionsContainer.addClass(this.options.className);
	},

	elementClick: function() {
		if (this.optionsContainer.isVisible())
			this.hideOptions();
		else
			this.showOptions();
	},

	documentClick: function(e) {
		e = new Event(e);
		if (e.target != this.element && !e.target.getParents().contains(this.element))
			this.hideOptions();
	},

	showOptions: function() {
		this.optionsContainer.set("html","").show();
		this.fillOptions( this.element.retrieve("inlineSelectData") );
	},

	hideOptions: function() {
		this.optionsContainer.hide();
	},

	fillOptions: function(options) {
		options = $pick(options, []);
		options.each(function(option) {
			var optionDiv = new Element("DIV", {
				"class": "option",
				"html": option
			}).inject(this.optionsContainer);

			optionDiv.addEvent("click", this.onOptionClick.bindWithEvent(this, [optionDiv]));
		}, this);
		if (tooltips) tooltips.init(this.optionsContainer);
	},

	onOptionClick: function(e, option) {
		e = new Event(e);
		e.stop();
		this.hideOptions();
		this.value = option.get("html");
		this.fireEvent("change", [option]);
	}
});

/*FormValidator.implement({
	watchFields: function(){
		this.getFields().each(function(el){
				el.addEvent('focus', function(){
					el.addClass('validation-passed').removeClass('validation-failed');
					if ($defined(el.getParent().getElement('.validation-advice')))
						this.hideAdvice('required',el);
				}.bind(this));
				el.addEvent('blur', this.validateField.pass([el, false], this));
			if (this.options.evaluateFieldsOnChange)
				el.addEvent('change', this.validateField.pass([el, true], this));
		}, this);
	}
});*/
FormValidator.implement({
	validate: function(event){
		var result = this.getFields().map(function(field){
			return field.isVisible(true) ? this.validateField(field, true) : true;
		}, this).every(function(v){ return v;});
		this.fireEvent('formValidate', [result, this.element, event]);
		if (this.options.stopOnFailure && !result && event) event.preventDefault();
		return result;
	}
});

//dbug.enable(true);

MooTools.lang.set('it-IT', 'Date', {

	months: ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'],
	days: ['Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'],
	dateOrder: ['date', 'month', 'year'],
	shortDate: '%d/%m/%Y',
	shortTime: '%H:%M',
	AM: 'AM',
	PM: 'PM',
	ordinal: $lambda(''),

	lessThanMinuteAgo: 'meno di un minuto fa',
	minuteAgo: 'circa un minuto fa',
	minutesAgo: '{delta} minuti fa',
	hourAgo: 'circa un\'ora fa',
	hoursAgo: 'circa {delta} ore fa',
	dayAgo: '1 giorno fa',
	daysAgo: '{delta} giorni fa',
	lessThanMinuteUntil: 'menu di un minuto da ora',
	minuteUntil: 'circa un minuto da ora',
	minutesUntil: '{delta} minuti da ora',
	hourUntil: 'circa un\'ora da ora',
	hoursUntil: 'circa {delta} ore da ora',
	dayUntil: '1 giorno da ora',
	daysUntil: '{delta} giorni da ora'

});
MooTools.lang.setLanguage("it-IT");

Clientcide.setAssetLocation("/images/clientcide");
/*
 * Smoothbox v20080623 by Boris Popoff (http://gueschla.com)
 * To be used with mootools 1.2
 *
 * Based on Cody Lindley's Thickbox, MIT License
 *
 * Licensed under the MIT License:
 *   http://www.opensource.org/licenses/mit-license.php
 */

// on page load call TB_init
window.addEvent('domready', TB_init);

// prevent javascript error before the content has loaded
TB_WIDTH = 0;
TB_HEIGHT = 0;
var TB_doneOnce = 0;

// add smoothbox to href elements that have a class of .smoothbox
function TB_init(){
    $$("a.smoothbox").each(function(el){
        el.onclick = TB_bind
    });
}

function TB_bind(event){
    var event = new Event(event);
    // stop default behaviour
    event.preventDefault();
    // remove click border
    this.blur();
    // get caption: either title or name attribute
    var caption = this.title || this.name || "";
    // get rel attribute for image groups
    var group = this.rel || false;
    // display the box for the elements href
    TB_show(caption, this.href, group);
    this.onclick = TB_bind;
    return false;
}

// called when the user clicks on a smoothbox link
function TB_show(caption, url, rel){

    // create iframe, overlay and box if non-existent

    if (!$("TB_overlay")) {
        new Element('iframe').setProperty('id', 'TB_HideSelect').injectInside(document.body);
        $('TB_HideSelect').setOpacity(0);
        new Element('div').setProperty('id', 'TB_overlay').injectInside(document.body);
        $('TB_overlay').setOpacity(0);
        TB_overlaySize();
        new Element('div').setProperty('id', 'TB_load').injectInside(document.body);
        $('TB_load').innerHTML = "<img src='loading.gif' />";
        TB_load_position();

        $('TB_overlay').set('tween', {
            duration: 400
        });
        $('TB_overlay').tween('opacity', 0, 0.6);

    }

    if (!$("TB_load")) {
        new Element('div').setProperty('id', 'TB_load').injectInside(document.body);
        $('TB_load').innerHTML = "<img src='loading.gif' />";
        TB_load_position();
    }

    if (!$("TB_window")) {
        new Element('div').setProperty('id', 'TB_window').injectInside(document.body);
        $('TB_window').setOpacity(0);
    }

    $("TB_overlay").onclick = TB_remove;
    window.onscroll = TB_position;

    // check if a query string is involved
    var baseURL = url.match(/(.+)?/)[1] || url;

    // regex to check if a href refers to an image
    var imageURL = /\.(jpe?g|png|gif|bmp)/gi;

    // check for images
    if (baseURL.match(imageURL)) {
        var dummy = {
            caption: "",
            url: "",
            html: ""
        };

        var prev = dummy, next = dummy, imageCount = "";

        // if an image group is given
        if (rel) {
            function getInfo(image, id, label){
                return {
                    caption: image.title,
                    url: image.href,
                    html: "<span id='TB_" + id + "'>&nbsp;&nbsp;<a href='#'>" + label + "</a></span>"
                }
            }

            // find the anchors that point to the group
            var imageGroup = [];
            $$("a.smoothbox").each(function(el){
                if (el.rel == rel) {
                    imageGroup[imageGroup.length] = el;
                }
            })

            var foundSelf = false;

            // loop through the anchors, looking for ourself, saving information about previous and next image
            for (var i = 0; i < imageGroup.length; i++) {
                var image = imageGroup[i];
                var urlTypeTemp = image.href.match(imageURL);

                // look for ourself
                if (image.href == url) {
                    foundSelf = true;
                    imageCount = "Image " + (i + 1) + " of " + (imageGroup.length);
                }
                else {
                    // when we found ourself, the current is the next image
                    if (foundSelf) {
                        next = getInfo(image, "next", "Next &gt;");
                        // stop searching
                        break;
                    }
                    else {
                        // didn't find ourself yet, so this may be the one before ourself
                        prev = getInfo(image, "prev", "&lt; Prev");
                    }
                }
            }
        }

        imgPreloader = new Image();
        imgPreloader.onload = function(){
            imgPreloader.onload = null;

            // Resizing large images
            var x = window.getWidth() - 150;
            var y = window.getHeight() - 150;
            var imageWidth = imgPreloader.width;
            var imageHeight = imgPreloader.height;
            if (imageWidth > x) {
                imageHeight = imageHeight * (x / imageWidth);
                imageWidth = x;
                if (imageHeight > y) {
                    imageWidth = imageWidth * (y / imageHeight);
                    imageHeight = y;
                }
            }
            else
                if (imageHeight > y) {
                    imageWidth = imageWidth * (y / imageHeight);
                    imageHeight = y;
                    if (imageWidth > x) {
                        imageHeight = imageHeight * (x / imageWidth);
                        imageWidth = x;
                    }
                }
            // End Resizing

            // TODO don't use globals
            TB_WIDTH = imageWidth + 30;
            TB_HEIGHT = imageHeight + 60;

            // TODO empty window content instead
            $("TB_window").innerHTML += "<a href='' id='TB_ImageOff' title='Close'><img id='TB_Image' src='" + url + "' width='" + imageWidth + "' height='" + imageHeight + "' alt='" + caption + "'/></a>" + "<div id='TB_caption'>" + caption + "<div id='TB_secondLine'>" + imageCount + prev.html + next.html + "</div></div><div id='TB_closeWindow'><a href='#' id='TB_closeWindowButton' title='Close'>close</a></div>";

            $("TB_closeWindowButton").onclick = TB_remove;

            function buildClickHandler(image){
                return function(){
                    $("TB_window").dispose();
                    new Element('div').setProperty('id', 'TB_window').injectInside(document.body);

                    TB_show(image.caption, image.url, rel);
                    return false;
                };
            }
            var goPrev = buildClickHandler(prev);
            var goNext = buildClickHandler(next);
            if ($('TB_prev')) {
                $("TB_prev").onclick = goPrev;
            }

            if ($('TB_next')) {
                $("TB_next").onclick = goNext;
            }

            document.onkeydown = function(event){
                var event = new Event(event);
                switch (event.code) {
                    case 27:
                        TB_remove();
                        break;
                    case 190:
                        if ($('TB_next')) {
                            document.onkeydown = null;
                            goNext();
                        }
                        break;
                    case 188:
                        if ($('TB_prev')) {
                            document.onkeydown = null;
                            goPrev();
                        }
                        break;
                }
            }

            // TODO don't remove loader etc., just hide and show later
            $("TB_ImageOff").onclick = TB_remove;
            TB_position();
            TB_showWindow();
        }
        imgPreloader.src = url;

    }
    else { //code to show html pages
        var queryString = url.match(/\?(.+)/)[1];
        var params = TB_parseQuery(queryString);

        TB_WIDTH = (params['width'] * 1) + 30;
        TB_HEIGHT = (params['height'] * 1) + 40;

        var ajaxContentW = TB_WIDTH - 30, ajaxContentH = TB_HEIGHT - 45;

        if (url.indexOf('TB_iframe') != -1) {
            urlNoQuery = url.split('TB_');
            $("TB_window").innerHTML += "<div id='TB_title'><div id='TB_ajaxWindowTitle'>" + caption + "</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton' title='Close'>close</a></div></div><iframe frameborder='0' hspace='0' src='" + urlNoQuery[0] + "' id='TB_iframeContent' name='TB_iframeContent' style='width:" + (ajaxContentW + 29) + "px;height:" + (ajaxContentH + 17) + "px;' onload='TB_showWindow()'> </iframe>";
        }
        else {
            $("TB_window").innerHTML += "<div id='TB_title'><div id='TB_ajaxWindowTitle'>" + caption + "</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton'>close</a></div></div><div id='TB_ajaxContent' style='width:" + ajaxContentW + "px;height:" + ajaxContentH + "px;'></div>";
        }

        $("TB_closeWindowButton").onclick = TB_remove;

        if (url.indexOf('TB_inline') != -1) {
            $("TB_ajaxContent").innerHTML = ($(params['inlineId']).innerHTML);
            TB_position();
            TB_showWindow();
        }
        else
            if (url.indexOf('TB_iframe') != -1) {
                TB_position();
                if (frames['TB_iframeContent'] == undefined) {//be nice to safari
                    $(document).keyup(function(e){
                        var key = e.keyCode;
                        if (key == 27) {
                            TB_remove()
                        }
                    });
                    TB_showWindow();
                }
            }
            else {
                var handlerFunc = function(){
                    TB_position();
                    TB_showWindow();
                };

				new Request.HTML({
                    method: 'get',
                    update: $("TB_ajaxContent"),
                    onComplete: handlerFunc
                }).get(url);
            }
    }

    window.onresize = function(){
        TB_position();
        TB_load_position();
        TB_overlaySize();
    }

    document.onkeyup = function(event){
        var event = new Event(event);
        if (event.code == 27) { // close
            TB_remove();
        }
    }

}

//helper functions below

function TB_showWindow(){
    //$("TB_load").dispose();
    //$("TB_window").setStyles({display:"block",opacity:'0'});

    if (TB_doneOnce == 0) {
        TB_doneOnce = 1;

        $('TB_window').set('tween', {
            duration: 250,
            onComplete: function(){
                if ($('TB_load')) {
                    $('TB_load').dispose();
                }
            }
        });
        $('TB_window').tween('opacity', 0, 1);

    }
    else {
        $('TB_window').setStyle('opacity', 1);
        if ($('TB_load')) {
            $('TB_load').dispose();
        }
    }
}

function TB_remove(){
    $("TB_overlay").onclick = null;
    document.onkeyup = null;
    document.onkeydown = null;

    if ($('TB_imageOff'))
        $("TB_imageOff").onclick = null;
    if ($('TB_closeWindowButton'))
        $("TB_closeWindowButton").onclick = null;
    if ($('TB_prev')) {
        $("TB_prev").onclick = null;
    }
    if ($('TB_next')) {
        $("TB_next").onclick = null;
    }


    $('TB_window').set('tween', {
        duration: 250,
        onComplete: function(){
            $('TB_window').dispose();
        }
    });
    $('TB_window').tween('opacity', 1, 0);



    $('TB_overlay').set('tween', {
        duration: 400,
        onComplete: function(){
            $('TB_overlay').dispose();
        }
    });
    $('TB_overlay').tween('opacity', 0.6, 0);

    window.onscroll = null;
    window.onresize = null;

    $('TB_HideSelect').dispose();
    TB_init();
    TB_doneOnce = 0;
    return false;
}

function TB_position(){
    $('TB_window').set('morph', {
        duration: 75
    });
    $('TB_window').morph({
		width: TB_WIDTH + 'px',
		left: (window.getScrollLeft() + (window.getWidth() - TB_WIDTH) / 2) + 'px',
		top: (window.getScrollTop() + (window.getHeight() - TB_HEIGHT) / 2) + 'px'
	});
}

function TB_overlaySize(){
    // we have to set this to 0px before so we can reduce the size / width of the overflow onresize
    $("TB_overlay").setStyles({
        "height": '0px',
        "width": '0px'
    });
    $("TB_HideSelect").setStyles({
        "height": '0px',
        "width": '0px'
    });
    $("TB_overlay").setStyles({
        "height": window.getScrollHeight() + 'px',
        "width": window.getScrollWidth() + 'px'
    });
    $("TB_HideSelect").setStyles({
        "height": window.getScrollHeight() + 'px',
        "width": window.getScrollWidth() + 'px'
    });
}

function TB_load_position(){
    if ($("TB_load")) {
        $("TB_load").setStyles({
            left: (window.getScrollLeft() + (window.getWidth() - 56) / 2) + 'px',
            top: (window.getScrollTop() + ((window.getHeight() - 20) / 2)) + 'px',
            display: "block"
        });
    }
}

function TB_parseQuery(query){
    // return empty object
    if (!query)
        return {};
    var params = {};

    // parse query
    var pairs = query.split(/[;&]/);
    for (var i = 0; i < pairs.length; i++) {
        var pair = pairs[i].split('=');
        if (!pair || pair.length != 2)
            continue;
        // unescape both key and value, replace "+" with spaces in value
        params[unescape(pair[0])] = unescape(pair[1]).replace(/\+/g, ' ');
    }
    return params;
}
window.jsTemplates = {};
var overtext=new Array();

var AdvancedFormValidator = new Class({
	Extends: FormValidator,

	makeAdvice: function(className, field, error, warn){
		var advice = this.parent(className, field, error, warn);

		if (["text", "password"].contains(field.get("type")) || field.get("tag") == "select") {
			advice.reveal = null;
			advice.addClass("validation-overfield");
			advice.setStyle("width", field.getSize().x-2);
		}

		advice.addEvent("click", function() {
			this.resetField(field);
			field.focus();
		}.bind(this));

		return advice;
	},

	insertAdvice: function(advice, field){
		if (field.hasClass("datePicker")) {
			advice.inject( field.getNext(), 'after' );
		} else {
			this.parent(advice, field);
		}
	}
});
/**Link esterni, apre una nuova pagina*/
function NewPage() {
	$$('a').each(function(a){
		var href=a.get('href');
		if (( ((href.indexOf('http://')==0)||(href.indexOf('https://')==0))&&(href.indexOf('ristorantegrillo')==-1))||(a.get( "rel" ) == "external")) {
			a.target = "_blank";
		}
	});
}
function initLoad(){
	NewPage();
	$$("input[type=text][title]").each( function(element) {
		new OverText(element);
		var label = element.getNext(".overTxtLabel");
		label.addClass(element.get("name")).set("for", element.get("name"));
		label.addEvent("click", function() { element.focus(); });
	} );
	$$("textarea[title]").each( function(element) {
		new OverText(element);
		var label = element.getNext(".overTxtLabel");
		label.addClass(element.get("name")).set("for", element.get("name"));
		label.addEvent("click", function() { element.focus(); });
	} );
}
function initElementsDom() {
	window.scroller = new Fx.Scroll(window);
	window.smoothScroll = new Fx.SmoothScroll();
	$$('.waiter').each(function(elemW){
		elemW.store("waiter", new Waiter(elemW));
	});
	$$("form").each(function(elem) {
		//Security token
		var secToken = elem.getElement(".security");
		if (secToken && secToken.get("tag")=="input")
			new Request({
				url: "/antibotkey.ajax",
				data: {name: secToken.get("name")},
				onSuccess: function(key) {
					secToken.set("value", key);
				}
			}).send();

		//Validator
		elem.store("validator", new AdvancedFormValidator(elem, {
			warningPrefix: "",
			errorPrefix: ""
		}));
		if (elem.hasClass("target-blank")) elem.target = "_blank";
		if (elem.hasClass("waiter")) elem.store("waiter", new Waiter(elem));
		elem.addEvent("submit", function(e) {
			e = new Event(e);
			if (this.retrieve("validator").validate()) {
				var waiter = this.retrieve("waiter");
				if (waiter) waiter.start();
				return true;
			} else {
				e.stop();
				return false;
			}
		}.bindWithEvent(elem));
	});
}
window.addEvent('load', initLoad);
window.addEvent('domready', initElementsDom);
/*
 * Copyright (c) 2009 Simo Kinnunen.
 * Licensed under the MIT license.
 *
 * @version 1.08
 */
var Cufon=(function(){var m=function(){return m.replace.apply(null,arguments)};var x=m.DOM={ready:(function(){var C=false,E={loaded:1,complete:1};var B=[],D=function(){if(C){return}C=true;for(var F;F=B.shift();F()){}};if(document.addEventListener){document.addEventListener("DOMContentLoaded",D,false);window.addEventListener("pageshow",D,false)}if(!window.opera&&document.readyState){(function(){E[document.readyState]?D():setTimeout(arguments.callee,10)})()}if(document.readyState&&document.createStyleSheet){(function(){try{document.body.doScroll("left");D()}catch(F){setTimeout(arguments.callee,1)}})()}q(window,"load",D);return function(F){if(!arguments.length){D()}else{C?F():B.push(F)}}})(),root:function(){return document.documentElement||document.body}};var n=m.CSS={Size:function(C,B){this.value=parseFloat(C);this.unit=String(C).match(/[a-z%]*$/)[0]||"px";this.convert=function(D){return D/B*this.value};this.convertFrom=function(D){return D/this.value*B};this.toString=function(){return this.value+this.unit}},addClass:function(C,B){var D=C.className;C.className=D+(D&&" ")+B;return C},color:j(function(C){var B={};B.color=C.replace(/^rgba\((.*?),\s*([\d.]+)\)/,function(E,D,F){B.opacity=parseFloat(F);return"rgb("+D+")"});return B}),fontStretch:j(function(B){if(typeof B=="number"){return B}if(/%$/.test(B)){return parseFloat(B)/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}[B]||1}),getStyle:function(C){var B=document.defaultView;if(B&&B.getComputedStyle){return new a(B.getComputedStyle(C,null))}if(C.currentStyle){return new a(C.currentStyle)}return new a(C.style)},gradient:j(function(F){var G={id:F,type:F.match(/^-([a-z]+)-gradient\(/)[1],stops:[]},C=F.substr(F.indexOf("(")).match(/([\d.]+=)?(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)/ig);for(var E=0,B=C.length,D;E<B;++E){D=C[E].split("=",2).reverse();G.stops.push([D[1]||E/(B-1),D[0]])}return G}),quotedList:j(function(E){var D=[],C=/\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g,B;while(B=C.exec(E)){D.push(B[3]||B[1])}return D}),recognizesMedia:j(function(G){var E=document.createElement("style"),D,C,B;E.type="text/css";E.media=G;try{E.appendChild(document.createTextNode("/**/"))}catch(F){}C=g("head")[0];C.insertBefore(E,C.firstChild);D=(E.sheet||E.styleSheet);B=D&&!D.disabled;C.removeChild(E);return B}),removeClass:function(D,C){var B=RegExp("(?:^|\\s+)"+C+"(?=\\s|$)","g");D.className=D.className.replace(B,"");return D},supports:function(D,C){var B=document.createElement("span").style;if(B[D]===undefined){return false}B[D]=C;return B[D]===C},textAlign:function(E,D,B,C){if(D.get("textAlign")=="right"){if(B>0){E=" "+E}}else{if(B<C-1){E+=" "}}return E},textShadow:j(function(F){if(F=="none"){return null}var E=[],G={},B,C=0;var D=/(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)|(-?[\d.]+[a-z%]*)|,/ig;while(B=D.exec(F)){if(B[0]==","){E.push(G);G={};C=0}else{if(B[1]){G.color=B[1]}else{G[["offX","offY","blur"][C++]]=B[2]}}}E.push(G);return E}),textTransform:(function(){var B={uppercase:function(C){return C.toUpperCase()},lowercase:function(C){return C.toLowerCase()},capitalize:function(C){return C.replace(/\b./g,function(D){return D.toUpperCase()})}};return function(E,D){var C=B[D.get("textTransform")];return C?C(E):E}})(),whiteSpace:(function(){var D={inline:1,"inline-block":1,"run-in":1};var C=/^\s+/,B=/\s+$/;return function(H,F,G,E){if(E){if(E.nodeName.toLowerCase()=="br"){H=H.replace(C,"")}}if(D[F.get("display")]){return H}if(!G.previousSibling){H=H.replace(C,"")}if(!G.nextSibling){H=H.replace(B,"")}return H}})()};n.ready=(function(){var B=!n.recognizesMedia("all"),E=false;var D=[],H=function(){B=true;for(var K;K=D.shift();K()){}};var I=g("link"),J=g("style");function C(K){return K.disabled||G(K.sheet,K.media||"screen")}function G(M,P){if(!n.recognizesMedia(P||"all")){return true}if(!M||M.disabled){return false}try{var Q=M.cssRules,O;if(Q){search:for(var L=0,K=Q.length;O=Q[L],L<K;++L){switch(O.type){case 2:break;case 3:if(!G(O.styleSheet,O.media.mediaText)){return false}break;default:break search}}}}catch(N){}return true}function F(){if(document.createStyleSheet){return true}var L,K;for(K=0;L=I[K];++K){if(L.rel.toLowerCase()=="stylesheet"&&!C(L)){return false}}for(K=0;L=J[K];++K){if(!C(L)){return false}}return true}x.ready(function(){if(!E){E=n.getStyle(document.body).isUsable()}if(B||(E&&F())){H()}else{setTimeout(arguments.callee,10)}});return function(K){if(B){K()}else{D.push(K)}}})();function s(D){var C=this.face=D.face,B={"\u0020":1,"\u00a0":1,"\u3000":1};this.glyphs=D.glyphs;this.w=D.w;this.baseSize=parseInt(C["units-per-em"],10);this.family=C["font-family"].toLowerCase();this.weight=C["font-weight"];this.style=C["font-style"]||"normal";this.viewBox=(function(){var F=C.bbox.split(/\s+/);var E={minX:parseInt(F[0],10),minY:parseInt(F[1],10),maxX:parseInt(F[2],10),maxY:parseInt(F[3],10)};E.width=E.maxX-E.minX;E.height=E.maxY-E.minY;E.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")};return E})();this.ascent=-parseInt(C.ascent,10);this.descent=-parseInt(C.descent,10);this.height=-this.ascent+this.descent;this.spacing=function(L,N,E){var O=this.glyphs,M,K,G,P=[],F=0,J=-1,I=-1,H;while(H=L[++J]){M=O[H]||this.missingGlyph;if(!M){continue}if(K){F-=G=K[H]||0;P[I-1]-=G}F+=P[++I]=~~(M.w||this.w)+N+(B[H]?E:0);K=M.k}P.total=F;return P}}function f(){var C={},B={oblique:"italic",italic:"oblique"};this.add=function(D){(C[D.style]||(C[D.style]={}))[D.weight]=D};this.get=function(H,I){var G=C[H]||C[B[H]]||C.normal||C.italic||C.oblique;if(!G){return null}I={normal:400,bold:700}[I]||parseInt(I,10);if(G[I]){return G[I]}var E={1:1,99:0}[I%100],K=[],F,D;if(E===undefined){E=I>400}if(I==500){I=400}for(var J in G){if(!k(G,J)){continue}J=parseInt(J,10);if(!F||J<F){F=J}if(!D||J>D){D=J}K.push(J)}if(I<F){I=F}if(I>D){I=D}K.sort(function(M,L){return(E?(M>=I&&L>=I)?M<L:M>L:(M<=I&&L<=I)?M>L:M<L)?-1:1});return G[K[0]]}}function r(){function D(F,G){if(F.contains){return F.contains(G)}return F.compareDocumentPosition(G)&16}function B(G){var F=G.relatedTarget;if(!F||D(this,F)){return}C(this,G.type=="mouseover")}function E(F){C(this,F.type=="mouseenter")}function C(F,G){setTimeout(function(){var H=d.get(F).options;m.replace(F,G?h(H,H.hover):H,true)},10)}this.attach=function(F){if(F.onmouseenter===undefined){q(F,"mouseover",B);q(F,"mouseout",B)}else{q(F,"mouseenter",E);q(F,"mouseleave",E)}}}function u(){var C=[],D={};function B(H){var E=[],G;for(var F=0;G=H[F];++F){E[F]=C[D[G]]}return E}this.add=function(F,E){D[F]=C.push(E)-1};this.repeat=function(){var E=arguments.length?B(arguments):C,F;for(var G=0;F=E[G++];){m.replace(F[0],F[1],true)}}}function A(){var D={},B=0;function C(E){return E.cufid||(E.cufid=++B)}this.get=function(E){var F=C(E);return D[F]||(D[F]={})}}function a(B){var D={},C={};this.extend=function(E){for(var F in E){if(k(E,F)){D[F]=E[F]}}return this};this.get=function(E){return D[E]!=undefined?D[E]:B[E]};this.getSize=function(F,E){return C[F]||(C[F]=new n.Size(this.get(F),E))};this.isUsable=function(){return !!B}}function q(C,B,D){if(C.addEventListener){C.addEventListener(B,D,false)}else{if(C.attachEvent){C.attachEvent("on"+B,function(){return D.call(C,window.event)})}}}function v(C,B){var D=d.get(C);if(D.options){return C}if(B.hover&&B.hoverables[C.nodeName.toLowerCase()]){b.attach(C)}D.options=B;return C}function j(B){var C={};return function(D){if(!k(C,D)){C[D]=B.apply(null,arguments)}return C[D]}}function c(F,E){var B=n.quotedList(E.get("fontFamily").toLowerCase()),D;for(var C=0;D=B[C];++C){if(i[D]){return i[D].get(E.get("fontStyle"),E.get("fontWeight"))}}return null}function g(B){return document.getElementsByTagName(B)}function k(C,B){return C.hasOwnProperty(B)}function h(){var C={},B,F;for(var E=0,D=arguments.length;B=arguments[E],E<D;++E){for(F in B){if(k(B,F)){C[F]=B[F]}}}return C}function o(E,M,C,N,F,D){var K=document.createDocumentFragment(),H;if(M===""){return K}var L=N.separate;var I=M.split(p[L]),B=(L=="words");if(B&&t){if(/^\s/.test(M)){I.unshift("")}if(/\s$/.test(M)){I.push("")}}for(var J=0,G=I.length;J<G;++J){H=z[N.engine](E,B?n.textAlign(I[J],C,J,G):I[J],C,N,F,D,J<G-1);if(H){K.appendChild(H)}}return K}function l(D,M){var C=D.nodeName.toLowerCase();if(M.ignore[C]){return}var E=!M.textless[C];var B=n.getStyle(v(D,M)).extend(M);var F=c(D,B),G,K,I,H,L,J;if(!F){return}for(G=D.firstChild;G;G=I){K=G.nodeType;I=G.nextSibling;if(E&&K==3){if(H){H.appendData(G.data);D.removeChild(G)}else{H=G}if(I){continue}}if(H){D.replaceChild(o(F,n.whiteSpace(H.data,B,H,J),B,M,G,D),H);H=null}if(K==1){if(G.firstChild){if(G.nodeName.toLowerCase()=="cufon"){z[M.engine](F,null,B,M,G,D)}else{arguments.callee(G,M)}}J=G}}}var t=" ".split(/\s+/).length==0;var d=new A();var b=new r();var y=new u();var e=false;var z={},i={},w={autoDetect:false,engine:null,forceHitArea:false,hover:false,hoverables:{a:true},ignore:{applet:1,canvas:1,col:1,colgroup:1,head:1,iframe:1,map:1,optgroup:1,option:1,script:1,select:1,style:1,textarea:1,title:1,pre:1},printable:true,selector:(window.Sizzle||(window.jQuery&&function(B){return jQuery(B)})||(window.dojo&&dojo.query)||(window.Ext&&Ext.query)||(window.YAHOO&&YAHOO.util&&YAHOO.util.Selector&&YAHOO.util.Selector.query)||(window.$$&&function(B){return $$(B)})||(window.$&&function(B){return $(B)})||(document.querySelectorAll&&function(B){return document.querySelectorAll(B)})||g),separate:"words",textless:{dl:1,html:1,ol:1,table:1,tbody:1,thead:1,tfoot:1,tr:1,ul:1},textShadow:"none"};var p={words:/\s/.test("\u00a0")?/[^\S\u00a0]+/:/\s+/,characters:"",none:/^/};m.now=function(){x.ready();return m};m.refresh=function(){y.repeat.apply(y,arguments);return m};m.registerEngine=function(C,B){if(!B){return m}z[C]=B;return m.set("engine",C)};m.registerFont=function(D){if(!D){return m}var B=new s(D),C=B.family;if(!i[C]){i[C]=new f()}i[C].add(B);return m.set("fontFamily",'"'+C+'"')};m.replace=function(D,C,B){C=h(w,C);if(!C.engine){return m}if(!e){n.addClass(x.root(),"cufon-active cufon-loading");n.ready(function(){n.addClass(n.removeClass(x.root(),"cufon-loading"),"cufon-ready")});e=true}if(C.hover){C.forceHitArea=true}if(C.autoDetect){delete C.fontFamily}if(typeof C.textShadow=="string"){C.textShadow=n.textShadow(C.textShadow)}if(typeof C.color=="string"&&/^-/.test(C.color)){C.textGradient=n.gradient(C.color)}else{delete C.textGradient}if(!B){y.add(D,arguments)}if(D.nodeType||typeof D=="string"){D=[D]}n.ready(function(){for(var F=0,E=D.length;F<E;++F){var G=D[F];if(typeof G=="string"){m.replace(C.selector(G),C,true)}else{l(G,C)}}});return m};m.set=function(B,C){w[B]=C;return m};return m})();Cufon.registerEngine("canvas",(function(){var b=document.createElement("canvas");if(!b||!b.getContext||!b.getContext.apply){return}b=null;var a=Cufon.CSS.supports("display","inline-block");var e=!a&&(document.compatMode=="BackCompat"||/frameset|transitional/i.test(document.doctype.publicId));var f=document.createElement("style");f.type="text/css";f.appendChild(document.createTextNode(("cufon{text-indent:0;}@media screen,projection{cufon{display:inline;display:inline-block;position:relative;vertical-align:middle;"+(e?"":"font-size:1px;line-height:1px;")+"}cufon cufontext{display:-moz-inline-box;display:inline-block;width:0;height:0;overflow:hidden;text-indent:-10000in;}"+(a?"cufon canvas{position:relative;}":"cufon canvas{position:absolute;}")+"}@media print{cufon{padding:0;}cufon canvas{display:none;}}").replace(/;/g,"!important;")));document.getElementsByTagName("head")[0].appendChild(f);function d(p,h){var n=0,m=0;var g=[],o=/([mrvxe])([^a-z]*)/g,k;generate:for(var j=0;k=o.exec(p);++j){var l=k[2].split(",");switch(k[1]){case"v":g[j]={m:"bezierCurveTo",a:[n+~~l[0],m+~~l[1],n+~~l[2],m+~~l[3],n+=~~l[4],m+=~~l[5]]};break;case"r":g[j]={m:"lineTo",a:[n+=~~l[0],m+=~~l[1]]};break;case"m":g[j]={m:"moveTo",a:[n=~~l[0],m=~~l[1]]};break;case"x":g[j]={m:"closePath"};break;case"e":break generate}h[g[j].m].apply(h,g[j].a)}return g}function c(m,k){for(var j=0,h=m.length;j<h;++j){var g=m[j];k[g.m].apply(k,g.a)}}return function(V,w,P,t,C,W){var k=(w===null);if(k){w=C.getAttribute("alt")}var A=V.viewBox;var m=P.getSize("fontSize",V.baseSize);var B=0,O=0,N=0,u=0;var z=t.textShadow,L=[];if(z){for(var U=z.length;U--;){var F=z[U];var K=m.convertFrom(parseFloat(F.offX));var I=m.convertFrom(parseFloat(F.offY));L[U]=[K,I];if(I<B){B=I}if(K>O){O=K}if(I>N){N=I}if(K<u){u=K}}}var Z=Cufon.CSS.textTransform(w,P).split("");var E=V.spacing(Z,~~m.convertFrom(parseFloat(P.get("letterSpacing"))||0),~~m.convertFrom(parseFloat(P.get("wordSpacing"))||0));if(!E.length){return null}var h=E.total;O+=A.width-E[E.length-1];u+=A.minX;var s,n;if(k){s=C;n=C.firstChild}else{s=document.createElement("cufon");s.className="cufon cufon-canvas";s.setAttribute("alt",w);n=document.createElement("canvas");s.appendChild(n);if(t.printable){var S=document.createElement("cufontext");S.appendChild(document.createTextNode(w));s.appendChild(S)}}var aa=s.style;var H=n.style;var j=m.convert(A.height);var Y=Math.ceil(j);var M=Y/j;var G=M*Cufon.CSS.fontStretch(P.get("fontStretch"));var J=h*G;var Q=Math.ceil(m.convert(J+O-u));var o=Math.ceil(m.convert(A.height-B+N));n.width=Q;n.height=o;H.width=Q+"px";H.height=o+"px";B+=A.minY;H.top=Math.round(m.convert(B-V.ascent))+"px";H.left=Math.round(m.convert(u))+"px";var r=Math.max(Math.ceil(m.convert(J)),0)+"px";if(a){aa.width=r;aa.height=m.convert(V.height)+"px"}else{aa.paddingLeft=r;aa.paddingBottom=(m.convert(V.height)-1)+"px"}var X=n.getContext("2d"),D=j/A.height;X.scale(D,D*M);X.translate(-u,-B);X.save();function T(){var x=V.glyphs,ab,l=-1,g=-1,y;X.scale(G,1);while(y=Z[++l]){var ab=x[Z[l]]||V.missingGlyph;if(!ab){continue}if(ab.d){X.beginPath();if(ab.code){c(ab.code,X)}else{ab.code=d("m"+ab.d,X)}X.fill()}X.translate(E[++g],0)}X.restore()}if(z){for(var U=z.length;U--;){var F=z[U];X.save();X.fillStyle=F.color;X.translate.apply(X,L[U]);T()}}var q=t.textGradient;if(q){var v=q.stops,p=X.createLinearGradient(0,A.minY,0,A.maxY);for(var U=0,R=v.length;U<R;++U){p.addColorStop.apply(p,v[U])}X.fillStyle=p}else{X.fillStyle=P.get("color")}T();return s}})());Cufon.registerEngine("vml",(function(){var e=document.namespaces;if(!e){return}e.add("cvml","urn:schemas-microsoft-com:vml");e=null;var b=document.createElement("cvml:shape");b.style.behavior="url(#default#VML)";if(!b.coordsize){return}b=null;var h=(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:'+(h?"middle":"text-bottom")+";}cufon cufontext{position:absolute;left:-10000in;font-size:1px;}a cufon{cursor:pointer}}@media print{cufon cufoncanvas{display:none;}}</style>").replace(/;/g,"!important;"));function c(i,j){return a(i,/(?:em|ex|%)$|^[a-z-]+$/i.test(j)?"1em":j)}function a(l,m){if(m==="0"){return 0}if(/px$/i.test(m)){return parseFloat(m)}var k=l.style.left,j=l.runtimeStyle.left;l.runtimeStyle.left=l.currentStyle.left;l.style.left=m.replace("%","em");var i=l.style.pixelLeft;l.style.left=k;l.runtimeStyle.left=j;return i}function f(l,k,j,n){var i="computed"+n,m=k[i];if(isNaN(m)){m=k.get(n);k[i]=m=(m=="normal")?0:~~j.convertFrom(a(l,m))}return m}var g={};function d(p){var q=p.id;if(!g[q]){var n=p.stops,o=document.createElement("cvml:fill"),i=[];o.type="gradient";o.angle=180;o.focus="0";o.method="sigma";o.color=n[0][1];for(var m=1,l=n.length-1;m<l;++m){i.push(n[m][0]*100+"% "+n[m][1])}o.colors=i.join(",");o.color2=n[l][1];g[q]=o}return g[q]}return function(ac,G,Y,C,K,ad,W){var n=(G===null);if(n){G=K.alt}var I=ac.viewBox;var p=Y.computedFontSize||(Y.computedFontSize=new Cufon.CSS.Size(c(ad,Y.get("fontSize"))+"px",ac.baseSize));var y,q;if(n){y=K;q=K.firstChild}else{y=document.createElement("cufon");y.className="cufon cufon-vml";y.alt=G;q=document.createElement("cufoncanvas");y.appendChild(q);if(C.printable){var Z=document.createElement("cufontext");Z.appendChild(document.createTextNode(G));y.appendChild(Z)}if(!W){y.appendChild(document.createElement("cvml:shape"))}}var ai=y.style;var R=q.style;var l=p.convert(I.height),af=Math.ceil(l);var V=af/l;var P=V*Cufon.CSS.fontStretch(Y.get("fontStretch"));var U=I.minX,T=I.minY;R.height=af;R.top=Math.round(p.convert(T-ac.ascent));R.left=Math.round(p.convert(U));ai.height=p.convert(ac.height)+"px";var F=Y.get("color");var ag=Cufon.CSS.textTransform(G,Y).split("");var L=ac.spacing(ag,f(ad,Y,p,"letterSpacing"),f(ad,Y,p,"wordSpacing"));if(!L.length){return null}var k=L.total;var x=-U+k+(I.width-L[L.length-1]);var ah=p.convert(x*P),X=Math.round(ah);var O=x+","+I.height,m;var J="r"+O+"ns";var u=C.textGradient&&d(C.textGradient);var o=ac.glyphs,S=0;var H=C.textShadow;var ab=-1,aa=0,w;while(w=ag[++ab]){var D=o[ag[ab]]||ac.missingGlyph,v;if(!D){continue}if(n){v=q.childNodes[aa];while(v.firstChild){v.removeChild(v.firstChild)}}else{v=document.createElement("cvml:shape");q.appendChild(v)}v.stroked="f";v.coordsize=O;v.coordorigin=m=(U-S)+","+T;v.path=(D.d?"m"+D.d+"xe":"")+"m"+m+J;v.fillcolor=F;if(u){v.appendChild(u.cloneNode(false))}var ae=v.style;ae.width=X;ae.height=af;if(H){var s=H[0],r=H[1];var B=Cufon.CSS.color(s.color),z;var N=document.createElement("cvml:shadow");N.on="t";N.color=B.color;N.offset=s.offX+","+s.offY;if(r){z=Cufon.CSS.color(r.color);N.type="double";N.color2=z.color;N.offset2=r.offX+","+r.offY}N.opacity=B.opacity||(z&&z.opacity)||1;v.appendChild(N)}S+=L[aa++]}var M=v.nextSibling,t,A;if(C.forceHitArea){if(!M){M=document.createElement("cvml:rect");M.stroked="f";M.className="cufon-vml-cover";t=document.createElement("cvml:fill");t.opacity=0;M.appendChild(t);q.appendChild(M)}A=M.style;A.width=X;A.height=af}else{if(M){q.removeChild(M)}}ai.width=Math.max(Math.ceil(p.convert(k*P)),0);if(h){var Q=Y.computedYAdjust;if(Q===undefined){var E=Y.get("lineHeight");if(E=="normal"){E="1em"}else{if(!isNaN(E)){E+="em"}}Y.computedYAdjust=Q=0.5*(a(ad,E)-parseFloat(ai.height))}if(Q){ai.marginTop=Math.ceil(Q)+"px";ai.marginBottom=Q+"px"}}return y}})());
/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * 2006 Dziedzic Lukasz published by FSI Fonts und Software GmbH
 */
Cufon.registerFont({"w":232,"face":{"font-family":"Clan","font-weight":500,"font-stretch":"normal","units-per-em":"360","panose-1":"2 0 6 3 0 0 0 0 0 0","ascent":"288","descent":"-72","x-height":"4","bbox":"-46 -329.019 375 68","underline-thickness":"14.04","underline-position":"-29.16","stemh":"27","stemv":"33","unicode-range":"U+0020-U+FB02"},"glyphs":{" ":{"w":101},"\u00d0":{"d":"249,-136v0,98,-39,136,-118,136r-98,0r0,-125r-23,0r0,-31r23,0r0,-114r97,0v84,0,119,40,119,134xm197,-136v0,-93,-39,-90,-114,-88r0,68r33,0r0,31r-33,0r0,80v76,1,114,8,114,-91","w":267},"\u00f0":{"d":"229,-117v0,83,-36,117,-108,117r-91,0r0,-105r-25,0r0,-33r25,0r0,-96r91,0v77,0,108,37,108,117xm181,-118v0,-79,-39,-76,-105,-74r0,54r42,0r0,33r-42,0r0,64v67,1,105,6,105,-77","w":242},"\u0141":{"d":"91,-46r118,0r-1,46r-167,0r0,-103r-26,12r-4,-41r30,-13r0,-125r50,0r0,105r70,-31r5,42r-75,32r0,76","w":216},"\u0142":{"d":"82,-42r109,0r-1,42r-154,0r0,-94r-26,11r-2,-38r28,-12r0,-101r46,0r0,83r68,-29r3,40r-71,29r0,69","w":198},"\u0160":{"d":"194,-79v0,86,-116,103,-178,64r7,-44v34,24,122,35,123,-17v0,-51,-128,-29,-128,-119v0,-44,28,-80,93,-80v27,0,54,6,74,15r-6,43v-34,-17,-113,-21,-113,19v0,49,128,27,128,119xm136,-286r-49,0r-39,-43r41,0r23,28r23,-28r40,0","w":206},"\u0161":{"d":"180,-69v0,74,-109,90,-164,55r6,-40v30,20,113,32,113,-12v0,-42,-117,-22,-117,-102v0,-38,25,-70,85,-70v24,0,50,5,69,13r-6,39v-32,-14,-104,-18,-104,16v0,41,118,19,118,101xm121,-248r-41,0r-36,-47r35,0r21,31r22,-31r35,0","w":192},"\u00dd":{"d":"5,-270r56,0r65,136r62,-136r54,0r-93,181r0,89r-50,0r0,-89xm125,-329r59,0r-48,43r-37,0","w":246},"\u00fd":{"d":"5,-234r53,0r59,120r57,-120r51,0r-85,157r0,77r-48,0r0,-77xm123,-295r56,0r-51,47r-38,0","w":229},"\u00de":{"d":"224,-137v0,69,-57,94,-144,87r0,50r-50,0r0,-270r50,0r0,44v86,-5,144,14,144,89xm173,-137v0,-50,-43,-48,-93,-47r0,93v48,0,93,6,93,-46","w":237},"\u00fe":{"d":"206,-118v0,61,-54,82,-132,76r0,42r-47,0r0,-234r47,0r0,37v78,-5,132,13,132,79xm158,-118v5,-44,-42,-41,-85,-40r0,79v42,0,90,6,85,-39","w":220},"\u017d":{"d":"205,0r-190,0r0,-33r130,-191r-127,0r2,-46r185,0r0,37r-127,187r128,0xm138,-286r-49,0r-39,-43r41,0r22,28r23,-28r41,0","w":222},"\u017e":{"d":"191,0r-176,0r0,-30r118,-162r-115,0r2,-42r171,0r0,35r-116,157r117,0xm125,-248r-40,0r-36,-47r35,0r21,31r21,-31r36,0","w":207},"\u00bd":{"d":"229,-270r33,0r-180,270r-33,0xm297,-101v0,29,-28,46,-62,73r62,0r-1,28r-103,0r0,-22v39,-34,69,-55,69,-76v-1,-26,-47,-20,-63,-5r-8,-26v30,-25,106,-19,106,28xm105,-270r0,142r-33,0r0,-103r-30,17r-2,-27v21,-10,31,-32,65,-29","w":318},"\u00bc":{"d":"104,-270r0,142r-33,0r0,-103r-29,17r-3,-27v22,-10,31,-32,65,-29xm294,-27r-14,0r0,27r-31,0r0,-27r-73,0r-2,-19r66,-96r40,0r0,88r16,0xm250,-54v0,-19,4,-42,1,-59r-40,59r39,0xm234,-270r33,0r-180,270r-33,0","w":318},"\u00b9":{"d":"79,-320r0,143r-33,0r0,-103r-29,16r-3,-27v21,-10,31,-32,65,-29","w":100},"\u00be":{"d":"287,-27r-15,0r0,27r-31,0r0,-27r-73,0r-2,-19r66,-96r40,0r0,88r16,0xm242,-54v0,-19,4,-42,1,-59r-40,59r39,0xm233,-270r33,0r-181,270r-32,0xm129,-171v0,47,-76,56,-108,33r7,-25v18,11,69,18,69,-9v0,-12,-9,-18,-42,-18r0,-23v32,0,40,-6,40,-17v0,-23,-53,-17,-66,-2r-8,-25v27,-24,105,-20,105,24v0,16,-11,24,-22,31v16,5,25,14,25,31","w":318},"\u00b3":{"d":"120,-220v0,45,-76,55,-108,32r7,-25v18,13,69,19,69,-9v0,-12,-9,-18,-42,-18r0,-22v32,0,40,-7,40,-18v0,-22,-52,-15,-66,-2r-8,-24v27,-24,105,-19,105,24v0,16,-11,24,-22,31v16,5,25,14,25,31","w":131},"\u00b2":{"d":"119,-279v0,29,-27,47,-61,74r61,0r-1,28r-103,0r0,-22v39,-34,69,-56,69,-77v-1,-25,-47,-18,-63,-4r-8,-26v29,-24,106,-20,106,27","w":131},"\u00a6":{"d":"34,-134r0,-157r35,0r0,157r-35,0xm34,60r0,-157r35,0r0,157r-35,0","w":102},"\u2212":{"d":"189,-100r-162,0r0,-43r162,0r0,43","w":216},"\u00d7":{"d":"185,-69r-27,28r-50,-49r-50,49r-27,-28r51,-50r-51,-50r26,-29r51,50r51,-50r26,29r-50,50","w":216},"!":{"d":"69,-67r-33,0r-7,-167r46,0xm78,-18v0,14,-8,22,-25,22v-17,0,-25,-6,-25,-22v0,-14,8,-23,25,-23v17,0,25,9,25,23","w":104},"\"":{"d":"88,-276r45,0r-8,93r-30,0xm19,-276r45,0r-9,93r-29,0","w":147},"#":{"d":"16,-108r39,0r9,-54r-47,0r0,-36r52,0r11,-72r37,0r-11,72r35,0r11,-72r36,0r-11,72r36,0r0,36r-41,0r-9,54r49,0r1,37r-54,0r-11,71r-36,0r11,-71r-36,0r-11,71r-36,0r11,-71r-35,0r0,-37xm101,-162r-9,54r36,0r9,-54r-36,0","w":229},"$":{"d":"101,30r-25,-3r2,-23v-23,-3,-45,-8,-60,-17v2,-15,2,-28,5,-45v18,10,40,18,61,21r9,-81v-37,-13,-76,-31,-76,-79v0,-49,33,-76,96,-77r3,-24r28,3r-3,22v17,2,34,6,44,11r-4,42v-14,-5,-30,-8,-46,-10r-9,71v36,13,72,31,72,81v0,56,-29,82,-94,83xm160,-71v0,-19,-18,-28,-41,-37r-9,72v35,-1,50,-12,50,-35xm59,-200v0,17,18,25,40,33r8,-64v-34,1,-48,13,-48,31","w":214},"%":{"d":"122,-211v0,43,-18,63,-54,63v-37,0,-54,-21,-54,-63v0,-44,16,-63,54,-63v35,0,54,17,54,63xm91,-211v0,-26,-8,-34,-23,-34v-16,0,-23,7,-23,34v0,27,7,33,23,33v15,0,23,-6,23,-33xm187,-260r26,21r-143,231r-27,-21xm247,-59v0,43,-18,63,-54,63v-37,0,-54,-21,-54,-63v0,-44,16,-64,54,-64v36,0,54,18,54,64xm216,-59v0,-26,-7,-34,-23,-34v-15,0,-22,7,-22,34v0,26,7,32,22,32v16,0,23,-6,23,-32","w":261},"&":{"d":"235,-36r-15,39v-17,-8,-35,-18,-53,-30v-20,19,-46,31,-78,31v-95,0,-83,-106,-28,-134v-32,-46,-28,-105,46,-107v38,0,65,18,65,45v0,30,-31,49,-59,68v14,15,31,30,50,44v9,-14,15,-30,18,-44r36,0v-2,17,-9,42,-24,65v14,9,28,17,42,23xm63,-64v-1,38,54,34,74,14v-20,-16,-39,-34,-54,-52v-12,11,-20,23,-20,38xm106,-204v-30,1,-28,33,-13,54v20,-12,35,-23,35,-37v0,-12,-9,-17,-22,-17","w":237},"'":{"d":"17,-276r45,0r-9,93r-30,0","w":78},"(":{"d":"88,-285r35,3v-64,89,-63,238,0,327r-35,3v-75,-80,-76,-252,0,-333","w":124},")":{"d":"1,-282r35,-3v76,81,77,253,0,333r-35,-3v64,-89,65,-238,0,-327","w":124},"*":{"d":"56,-283r22,0r3,38r37,-9r7,23r-36,14r22,33r-17,14r-27,-31r-28,31r-17,-13r22,-34r-37,-14r8,-23r38,9","w":132},"+":{"d":"192,-100r-65,0r0,63r-40,0r0,-63r-63,0r0,-43r63,0r0,-63r40,0r0,63r65,0r0,43","w":216},",":{"d":"46,-49v53,6,16,72,-2,100r-17,-3r10,-44v-24,-7,-25,-57,9,-53","w":92},"-":{"d":"22,-140r99,0r0,34r-99,0r0,-34","w":142},".":{"d":"75,-23v0,17,-9,27,-28,27v-19,0,-28,-8,-28,-27v0,-18,9,-27,28,-27v19,0,28,9,28,27","w":93},"\/":{"d":"123,-284r40,0r-124,328r-38,0","w":162},"0":{"d":"215,-134v0,98,-30,138,-99,138v-70,0,-98,-40,-98,-138v0,-102,28,-139,98,-139v69,0,99,37,99,139xm167,-135v0,-79,-16,-95,-51,-95v-35,0,-51,17,-51,95v0,80,16,96,51,96v35,0,51,-16,51,-96"},"1":{"d":"62,0r0,-36r43,0r0,-174r-53,33r-5,-42r79,-51r29,0r0,234r42,0r0,36r-135,0"},"2":{"d":"206,-196v1,53,-48,95,-113,152r114,0r-1,44r-177,0r0,-33v67,-65,127,-114,127,-158v0,-51,-90,-44,-116,-13r-12,-40v22,-17,52,-29,88,-29v60,0,90,31,90,77"},"3":{"d":"210,-81v0,51,-31,84,-102,84v-35,0,-62,-9,-82,-21r10,-39v36,26,127,30,127,-26v0,-27,-18,-40,-78,-40r0,-36v57,0,73,-15,73,-39v0,-47,-95,-36,-119,-8r-12,-38v44,-46,176,-38,176,43v0,30,-17,46,-40,59v30,9,47,29,47,61"},"4":{"d":"217,-54r-29,0r0,54r-45,0r0,-54r-121,0r-5,-32r113,-184r58,0r0,174r31,0xm145,-96r2,-130r-77,130r75,0"},"5":{"d":"208,-93v0,60,-30,96,-97,96v-32,0,-59,-7,-82,-21r9,-39v38,27,128,32,122,-32v7,-53,-77,-45,-111,-30r-17,-19r11,-132r151,0r1,44r-114,0r-5,61v64,-18,132,2,132,72"},"6":{"d":"212,-94v0,66,-34,97,-94,97v-64,0,-99,-35,-99,-131v0,-123,76,-167,178,-135r-4,42v-60,-21,-130,-4,-126,66v53,-38,145,-19,145,61xm165,-95v0,-51,-73,-50,-97,-21v1,58,15,77,50,77v31,0,47,-17,47,-56"},"7":{"d":"213,-270r0,42r-107,228r-55,0r115,-223r-145,0r2,-47r190,0"},"8":{"d":"117,3v-106,0,-128,-105,-57,-145v-18,-12,-31,-30,-31,-61v0,-44,27,-70,88,-70v96,0,110,93,53,131v24,11,43,29,43,65v0,53,-32,80,-96,80xm167,-74v0,-31,-34,-38,-67,-49v-20,10,-35,24,-35,46v0,28,16,41,53,41v30,0,49,-11,49,-38xm73,-201v0,27,27,36,57,45v43,-16,45,-78,-14,-78v-29,0,-43,11,-43,33"},"9":{"d":"211,-147v0,138,-78,172,-177,138r7,-41v59,26,130,9,123,-71v-16,12,-36,17,-59,17v-59,0,-86,-32,-86,-81v0,-54,29,-88,93,-88v63,0,99,41,99,126xm164,-163v-1,-51,-21,-68,-53,-68v-31,0,-46,14,-46,44v0,52,77,56,99,24"},":":{"d":"75,-177v0,17,-9,27,-28,27v-19,0,-28,-8,-28,-27v0,-18,9,-28,28,-28v19,0,28,10,28,28xm75,-23v0,17,-9,27,-28,27v-19,0,-28,-8,-28,-27v0,-18,9,-27,28,-27v19,0,28,9,28,27","w":93},";":{"d":"76,-177v0,17,-9,27,-28,27v-19,0,-27,-8,-27,-27v0,-18,8,-28,27,-28v19,0,28,10,28,28xm47,-49v55,6,16,72,-2,100r-17,-3r10,-44v-23,-7,-24,-57,9,-53","w":95},"<":{"d":"184,-166r-97,46r97,46r0,45r-152,-79r0,-24r152,-81r0,47","w":216},"=":{"d":"189,-136r-162,0r0,-36r162,0r0,36xm189,-66r-162,0r0,-36r162,0r0,36","w":216},">":{"d":"32,-29r0,-45r97,-46r-97,-46r0,-47r152,81r0,24","w":216},"?":{"d":"160,-178v0,35,-22,59,-58,76r-2,35r-33,0r-3,-52v32,-16,51,-30,51,-52v-1,-39,-70,-28,-88,-7r-16,-34v36,-38,149,-35,149,34xm108,-18v0,14,-7,22,-24,22v-17,0,-25,-6,-25,-22v0,-14,8,-23,25,-23v17,0,24,9,24,23","w":174},"@":{"d":"82,-104v0,-67,61,-137,113,-91r5,-12r25,1r-17,109v0,15,6,27,23,27v24,0,43,-24,43,-77v0,-64,-37,-112,-107,-112v-83,0,-124,61,-124,136v0,78,39,136,125,136v56,0,89,-21,106,-36r11,24v-25,21,-63,39,-117,39v-96,0,-152,-62,-152,-163v0,-87,53,-163,152,-163v82,0,132,58,132,139v0,77,-34,108,-73,108v-22,0,-37,-9,-44,-26v-30,41,-101,36,-101,-39xm143,-73v33,-1,35,-60,41,-93v-32,-32,-65,16,-64,61v0,20,8,32,23,32","w":316},"A":{"d":"201,0r-18,-58r-108,0r-18,58r-53,0r96,-270r59,0r97,270r-55,0xm130,-234r-42,134r82,0","w":260},"B":{"d":"229,-78v0,48,-26,78,-91,78r-108,0r0,-270r105,0v57,0,84,24,84,68v0,31,-14,50,-36,59v30,8,46,30,46,65xm180,-82v0,-48,-57,-37,-102,-38r0,78v46,-2,102,14,102,-40xm172,-193v0,-46,-54,-32,-94,-34r0,70v42,-1,94,10,94,-36","w":248},"C":{"d":"203,-263r-5,44v-14,-5,-34,-10,-55,-10v-53,0,-72,22,-72,92v0,102,61,110,127,86r6,41v-18,9,-43,15,-66,15v-81,0,-120,-45,-120,-142v0,-118,86,-161,185,-126","w":216},"D":{"d":"246,-136v0,98,-39,136,-118,136r-98,0r0,-270r97,0v84,0,119,40,119,134xm194,-136v0,-93,-39,-90,-114,-88r0,179v76,1,114,8,114,-91","w":264},"E":{"d":"80,-44r129,0r-1,44r-178,0r0,-270r173,0r0,45r-123,0r0,65r105,0r0,41r-105,0r0,75","w":223},"F":{"d":"203,-224r-123,0r0,69r103,0r0,44r-103,0r0,111r-50,0r0,-270r172,0","w":213},"G":{"d":"223,-144r0,134v-20,9,-50,15,-79,15v-89,0,-126,-45,-126,-139v0,-96,39,-141,127,-141v26,0,53,5,73,13r-5,44v-19,-8,-42,-12,-65,-12v-57,0,-77,22,-77,95v0,91,41,103,108,89r0,-98r44,0","w":243},"H":{"d":"239,0r-50,0r0,-116r-109,0r0,116r-50,0r0,-270r50,0r0,108r109,0r0,-108r50,0r0,270","w":268},"I":{"d":"34,0r0,-270r51,0r0,270r-51,0","w":118},"J":{"d":"168,-270r0,175v8,93,-88,119,-156,87r3,-43v37,21,102,15,102,-45r0,-174r51,0","w":198},"K":{"d":"249,0r-60,0r-76,-118r-33,0r0,118r-50,0r0,-270r50,0r0,110r34,0r73,-110r58,0r-87,128","w":256},"L":{"d":"80,-46r118,0r-1,46r-167,0r0,-270r50,0r0,224","w":205},"M":{"d":"30,-270r55,0r81,199r80,-199r55,0r0,270r-45,0r-1,-185r-74,185r-33,0r-75,-185r1,185r-44,0r0,-270","w":330},"N":{"d":"241,0r-35,0r-132,-189r0,189r-44,0r0,-270r43,0r124,182r0,-182r44,0r0,270","w":270},"O":{"d":"249,-135v0,99,-33,140,-115,140v-82,0,-116,-43,-116,-140v0,-97,33,-139,116,-139v82,0,115,42,115,139xm198,-135v0,-75,-17,-94,-64,-94v-46,0,-63,19,-63,94v0,75,17,94,63,94v46,0,64,-20,64,-94","w":268},"P":{"d":"224,-181v0,72,-59,94,-144,87r0,94r-50,0r0,-270r93,0v71,0,101,28,101,89xm172,-181v0,-53,-43,-48,-92,-47r0,93v48,-1,92,9,92,-46","w":236},"Q":{"d":"249,-135v1,81,-23,122,-74,136r54,39r-59,15r-43,-50v-76,-3,-109,-46,-109,-140v0,-97,33,-139,116,-139v82,0,115,42,115,139xm198,-135v0,-75,-17,-94,-64,-94v-46,0,-63,19,-63,94v0,75,17,94,63,94v46,0,64,-20,64,-94","w":268},"R":{"d":"219,-189v0,40,-17,65,-48,73r66,116r-58,0r-53,-106r-46,0r0,106r-50,0r0,-270r95,0v63,0,94,26,94,81xm168,-187v0,-49,-44,-41,-88,-41r0,83v44,0,88,8,88,-42","w":241},"S":{"d":"194,-79v0,86,-116,103,-178,64r7,-44v34,24,122,35,123,-17v0,-51,-128,-29,-128,-119v0,-44,28,-80,93,-80v27,0,54,6,74,15r-6,43v-34,-17,-113,-21,-113,19v0,49,128,27,128,119","w":206},"T":{"d":"207,-224r-76,0r0,224r-50,0r0,-224r-76,0r1,-46r200,0","w":212},"U":{"d":"238,-270r0,173v0,69,-37,102,-106,102v-69,0,-106,-33,-106,-102r0,-173r49,0r0,173v0,39,18,56,57,56v39,0,56,-17,56,-56r0,-173r50,0","w":263},"V":{"d":"197,-270r51,0r-94,270r-56,0r-93,-270r54,0r69,222","w":252},"W":{"d":"158,-270r54,0r51,221r43,-221r50,0r-64,270r-61,0r-47,-221r-47,221r-60,0r-64,-270r51,0r45,222","w":368},"X":{"d":"240,-270r-78,129r82,141r-57,0r-61,-112r-58,112r-58,0r80,-140r-78,-130r60,0r56,101r55,-101r57,0","w":253},"Y":{"d":"5,-270r56,0r65,136r62,-136r54,0r-93,181r0,89r-50,0r0,-89","w":246},"Z":{"d":"205,0r-190,0r0,-33r130,-191r-127,0r2,-46r185,0r0,37r-127,187r128,0","w":222},"[":{"d":"31,47r0,-331r90,0r0,33r-49,0r0,265r49,0r0,33r-90,0","w":122},"\\":{"d":"-1,-284r37,0r107,328r-37,0","w":136},"]":{"d":"92,-284r0,331r-91,0r0,-33r49,0r0,-265r-49,0r0,-33r91,0","w":122},"^":{"d":"174,-167r-58,-88r-58,88r-37,0r79,-122r32,0r79,122r-37,0"},"_":{"d":"7,15r138,0r0,29r-138,0r0,-29","w":151},"`":{"d":"103,-248r-34,0r-44,-47r52,0","w":144},"a":{"d":"185,0r-16,-49r-99,0r-17,49r-49,0r89,-234r54,0r90,234r-52,0xm121,-198v-14,35,-25,75,-38,111r73,0","w":241},"b":{"d":"211,-68v0,42,-25,68,-84,68r-100,0r0,-234v74,-1,175,-12,175,60v0,28,-16,42,-33,51v27,7,42,25,42,55xm165,-71v0,-41,-54,-31,-93,-32r0,65v40,-3,93,13,93,-33xm157,-166v0,-39,-50,-26,-85,-28r0,58v36,-2,85,10,85,-30","w":224},"c":{"d":"184,-227r-5,40v-13,-5,-32,-9,-51,-9v-49,0,-66,20,-66,78v0,87,60,91,118,71r5,38v-17,8,-40,13,-62,13v-74,0,-109,-39,-109,-122v0,-102,83,-141,170,-109","w":198},"d":{"d":"226,-117v0,83,-36,117,-108,117r-91,0r0,-234r91,0v77,0,108,37,108,117xm178,-118v0,-79,-39,-76,-105,-74r0,151v67,1,105,6,105,-77","w":239},"e":{"d":"73,-41r120,0r-1,41r-165,0r0,-234r160,0r1,42r-115,0r0,53r98,0r0,37r-98,0r0,61","w":206},"f":{"d":"188,-192r-114,0r0,57r98,0r0,40r-98,0r0,95r-47,0r0,-234r160,0","w":199},"g":{"d":"202,-124r0,115v-18,8,-46,13,-73,13v-82,0,-115,-40,-115,-120v0,-82,35,-122,116,-122v23,0,49,5,67,12r-4,40v-60,-20,-131,-22,-131,69v0,77,39,88,99,76r0,-83r41,0","w":221},"h":{"d":"220,0r-46,0r0,-99r-100,0r0,99r-47,0r0,-234r47,0r0,93r100,0r0,-93r46,0r0,234","w":247},"i":{"d":"31,0r0,-234r47,0r0,234r-47,0","w":109},"j":{"d":"140,-234r0,153v5,81,-70,100,-129,74r3,-39v31,18,79,14,79,-35r0,-153r47,0","w":163},"k":{"d":"230,0r-57,0r-69,-101r-31,0r0,101r-46,0r0,-234r46,0r0,95r33,0r66,-95r54,0r-79,111","w":236},"l":{"d":"74,-42r108,0r-1,42r-154,0r0,-234r47,0r0,192","w":190},"m":{"d":"27,-234r51,0r75,172r73,-172r51,0r0,234r-42,0r-1,-164r-67,164r-31,0r-68,-161r1,161r-42,0r0,-234","w":304},"n":{"d":"222,0r-37,0r-117,-165r1,165r-42,0r0,-234r40,0r114,160r0,-160r41,0r0,234","w":249},"o":{"d":"227,-117v0,83,-31,121,-107,121v-76,0,-106,-39,-106,-121v0,-82,30,-120,106,-120v76,0,107,38,107,120xm178,-117v0,-62,-15,-79,-58,-79v-43,0,-58,17,-58,79v0,62,16,80,59,80v42,0,57,-19,57,-80","w":240},"p":{"d":"206,-155v0,63,-56,82,-132,76r0,79r-47,0r0,-234r87,0v64,0,92,26,92,79xm158,-156v5,-46,-43,-39,-85,-39r0,79v42,-1,90,9,85,-40","w":218},"q":{"d":"229,-117v1,67,-21,103,-64,117r47,37r-54,8r-42,-41v-71,-2,-100,-41,-100,-121v0,-82,30,-120,106,-120v76,0,107,38,107,120xm180,-117v0,-62,-15,-79,-58,-79v-43,0,-58,17,-58,79v0,62,16,80,59,80v42,0,57,-19,57,-80","w":244},"r":{"d":"202,-163v0,34,-16,57,-44,64r61,99r-56,0r-47,-90r-42,0r0,90r-47,0r0,-234v81,-1,175,-10,175,71xm154,-161v5,-41,-42,-34,-80,-34r0,70v39,0,85,7,80,-36","w":226},"s":{"d":"180,-69v0,74,-109,90,-164,55r6,-40v30,20,113,32,113,-12v0,-42,-117,-22,-117,-102v0,-38,25,-70,85,-70v24,0,50,5,69,13r-6,39v-32,-14,-104,-18,-104,16v0,41,118,19,118,101","w":192},"t":{"d":"191,-192r-70,0r0,192r-47,0r0,-192r-69,0r0,-42r185,0","w":195},"u":{"d":"220,-234r0,147v0,62,-35,91,-98,91v-64,0,-98,-29,-98,-91r0,-147r47,0r0,147v0,34,15,49,51,49v36,0,52,-15,52,-49r0,-147r46,0","w":244},"v":{"d":"181,-234r49,0r-87,234r-51,0r-87,-234r52,0r62,192","w":235},"w":{"d":"147,-234r50,0r47,192r39,-192r46,0r-59,234r-56,0r-43,-189r-43,189r-56,0r-59,-234r48,0r39,194r2,0","w":342},"x":{"d":"223,-234r-72,112r75,122r-53,0r-55,-95r-53,95r-55,0r74,-121r-72,-113r56,0r50,85r51,-85r54,0","w":236},"y":{"d":"5,-234r53,0r59,120r57,-120r51,0r-85,157r0,77r-48,0r0,-77","w":229},"z":{"d":"191,0r-176,0r0,-30r118,-162r-115,0r2,-42r171,0r0,35r-116,157r117,0","w":207},"{":{"d":"135,-251v-92,-5,-5,111,-61,132v33,15,18,65,17,102v-1,21,16,32,44,29r0,35v-58,2,-86,-18,-86,-58v0,-37,23,-90,-18,-98r0,-20v41,-8,18,-62,18,-99v0,-40,27,-60,86,-58r0,35","w":136},"|":{"d":"34,64r0,-355r35,0r0,355r-35,0","w":102},"}":{"d":"1,12v94,5,4,-111,62,-132v-58,-19,31,-137,-62,-131r0,-35v58,-2,86,18,86,58v0,38,-23,91,19,99r0,20v-42,7,-19,61,-19,98v0,40,-27,60,-86,58r0,-35","w":136},"~":{"d":"56,-217r-26,0v3,-41,19,-62,49,-62v37,1,80,49,97,4r26,0v-3,41,-20,62,-49,62v-37,-1,-79,-49,-97,-4"},"\u00c4":{"d":"201,0r-18,-58r-108,0r-18,58r-53,0r96,-270r59,0r97,270r-55,0xm130,-234r-42,134r82,0xm115,-306v0,13,-6,19,-20,19v-14,0,-21,-5,-21,-19v0,-13,7,-20,21,-20v14,0,20,7,20,20xm185,-306v0,13,-6,19,-20,19v-13,0,-20,-5,-20,-19v0,-13,7,-20,20,-20v14,0,20,7,20,20","w":260},"\u00c5":{"d":"98,-264v-21,-20,-12,-59,31,-59v43,0,52,37,32,58r95,265r-55,0r-18,-58r-108,0r-18,58r-53,0xm130,-234r-42,134r82,0xm112,-288v0,8,4,13,18,13v13,0,17,-4,17,-13v0,-8,-4,-13,-17,-13v-14,0,-18,5,-18,13","w":260},"\u00c7":{"d":"98,68r22,-64v-69,-6,-102,-51,-102,-141v0,-118,86,-161,185,-126r-5,44v-14,-5,-34,-10,-55,-10v-53,0,-72,22,-72,92v0,102,61,110,127,86r6,41v-14,7,-34,12,-53,14r-12,64r-41,0","w":216},"\u00c9":{"d":"80,-44r129,0r-1,44r-178,0r0,-270r173,0r0,45r-123,0r0,65r105,0r0,41r-105,0r0,75xm120,-329r59,0r-48,43r-37,0","w":223},"\u00d1":{"d":"241,0r-35,0r-132,-189r0,189r-44,0r0,-270r43,0r124,182r0,-182r44,0r0,270xm100,-288r-21,0v1,-24,13,-41,34,-41v30,-1,50,37,62,5r20,0v-1,24,-13,41,-34,41v-28,0,-49,-37,-61,-5","w":270},"\u00d6":{"d":"249,-135v0,99,-33,140,-115,140v-82,0,-116,-43,-116,-140v0,-97,33,-139,116,-139v82,0,115,42,115,139xm198,-135v0,-75,-17,-94,-64,-94v-46,0,-63,19,-63,94v0,75,17,94,63,94v46,0,64,-20,64,-94xm120,-306v0,13,-7,19,-21,19v-14,0,-20,-5,-20,-19v0,-13,6,-20,20,-20v14,0,21,7,21,20xm190,-306v0,13,-6,19,-20,19v-13,0,-21,-5,-21,-19v0,-13,8,-20,21,-20v14,0,20,7,20,20","w":268},"\u00dc":{"d":"238,-270r0,173v0,69,-37,102,-106,102v-69,0,-106,-33,-106,-102r0,-173r49,0r0,173v0,39,18,56,57,56v39,0,56,-17,56,-56r0,-173r50,0xm117,-306v0,13,-7,19,-21,19v-14,0,-20,-5,-20,-19v0,-13,6,-20,20,-20v14,0,21,7,21,20xm187,-306v0,13,-6,19,-20,19v-13,0,-20,-5,-20,-19v0,-13,7,-20,20,-20v14,0,20,7,20,20","w":263},"\u00e1":{"d":"185,0r-16,-49r-99,0r-17,49r-49,0r89,-234r54,0r90,234r-52,0xm121,-198v-14,35,-25,75,-38,111r73,0xm127,-295r56,0r-51,47r-38,0","w":241},"\u00e0":{"d":"185,0r-16,-49r-99,0r-17,49r-49,0r89,-234r54,0r90,234r-52,0xm121,-198v-14,35,-25,75,-38,111r73,0xm148,-248r-34,0r-44,-47r52,0","w":241},"\u00e2":{"d":"185,0r-16,-49r-99,0r-17,49r-49,0r89,-234r54,0r90,234r-52,0xm121,-198v-14,35,-25,75,-38,111r73,0xm99,-295r40,0r37,47r-35,0r-21,-30r-22,30r-35,0","w":241},"\u00e4":{"d":"185,0r-16,-49r-99,0r-17,49r-49,0r89,-234r54,0r90,234r-52,0xm121,-198v-14,35,-25,75,-38,111r73,0xm108,-274v0,12,-7,19,-20,19v-13,0,-19,-6,-19,-19v0,-12,6,-18,19,-18v13,0,20,6,20,18xm171,-274v0,12,-6,19,-20,19v-13,0,-19,-6,-19,-19v0,-12,6,-18,19,-18v14,0,20,6,20,18","w":241},"\u00e3":{"d":"185,0r-16,-49r-99,0r-17,49r-49,0r89,-234r54,0r90,234r-52,0xm121,-198v-14,35,-25,75,-38,111r73,0xm85,-260r-22,0v2,-21,15,-37,35,-37v28,0,46,35,59,4r21,0v-1,22,-14,37,-34,37v-28,0,-47,-35,-59,-4","w":241},"\u00e5":{"d":"91,-229v-25,-18,-17,-65,29,-60v44,-4,56,41,29,59r88,230r-52,0r-16,-49r-99,0r-17,49r-49,0xm121,-198v-14,35,-25,75,-38,111r73,0xm101,-257v0,8,6,14,20,14v13,0,19,-5,19,-14v0,-8,-5,-13,-19,-13v-14,0,-20,5,-20,13","w":241},"\u00e7":{"d":"78,68r22,-65v-58,-8,-86,-47,-86,-121v0,-102,83,-141,170,-109r-5,40v-13,-5,-32,-9,-51,-9v-49,0,-66,20,-66,78v0,87,60,91,118,71r5,38v-15,7,-35,12,-54,13r-11,64r-42,0","w":198},"\u00e9":{"d":"73,-41r120,0r-1,41r-165,0r0,-234r160,0r1,42r-115,0r0,53r98,0r0,37r-98,0r0,61xm119,-295r56,0r-52,47r-37,0","w":206},"\u00e8":{"d":"73,-41r120,0r-1,41r-165,0r0,-234r160,0r1,42r-115,0r0,53r98,0r0,37r-98,0r0,61xm140,-248r-35,0r-43,-47r52,0","w":206},"\u00ea":{"d":"73,-41r120,0r-1,41r-165,0r0,-234r160,0r1,42r-115,0r0,53r98,0r0,37r-98,0r0,61xm91,-295r40,0r37,47r-36,0r-21,-30r-21,30r-35,0","w":206},"\u00eb":{"d":"73,-41r120,0r-1,41r-165,0r0,-234r160,0r1,42r-115,0r0,53r98,0r0,37r-98,0r0,61xm99,-274v0,12,-6,19,-19,19v-13,0,-20,-6,-20,-19v0,-12,7,-18,20,-18v13,0,19,6,19,18xm163,-274v0,12,-6,19,-20,19v-13,0,-20,-6,-20,-19v0,-12,7,-18,20,-18v14,0,20,6,20,18","w":206},"\u00ed":{"d":"31,0r0,-234r47,0r0,234r-47,0xm62,-295r55,0r-51,47r-38,0","w":109},"\u00ec":{"d":"31,0r0,-234r47,0r0,234r-47,0xm82,-248r-34,0r-43,-47r52,0","w":109},"\u00ee":{"d":"31,0r0,-234r47,0r0,234r-47,0xm33,-295r40,0r37,47r-35,0r-21,-30r-22,30r-35,0","w":109},"\u00ef":{"d":"31,0r0,-234r47,0r0,234r-47,0xm42,-274v0,12,-7,19,-20,19v-13,0,-19,-6,-19,-19v0,-12,6,-18,19,-18v13,0,20,6,20,18xm105,-274v0,12,-6,19,-20,19v-13,0,-19,-6,-19,-19v0,-12,6,-18,19,-18v14,0,20,6,20,18","w":109},"\u00f1":{"d":"222,0r-37,0r-117,-165r1,165r-42,0r0,-234r40,0r114,160r0,-160r41,0r0,234xm88,-260r-21,0v2,-21,14,-37,34,-37v29,0,46,35,60,4r21,0v-1,22,-14,37,-34,37v-28,0,-47,-35,-60,-4","w":249},"\u00f3":{"d":"227,-117v0,83,-31,121,-107,121v-76,0,-106,-39,-106,-121v0,-82,30,-120,106,-120v76,0,107,38,107,120xm178,-117v0,-62,-15,-79,-58,-79v-43,0,-58,17,-58,79v0,62,16,80,59,80v42,0,57,-19,57,-80xm128,-295r56,0r-52,47r-37,0","w":240},"\u00f2":{"d":"227,-117v0,83,-31,121,-107,121v-76,0,-106,-39,-106,-121v0,-82,30,-120,106,-120v76,0,107,38,107,120xm178,-117v0,-62,-15,-79,-58,-79v-43,0,-58,17,-58,79v0,62,16,80,59,80v42,0,57,-19,57,-80xm149,-248r-35,0r-43,-47r52,0","w":240},"\u00f4":{"d":"227,-117v0,83,-31,121,-107,121v-76,0,-106,-39,-106,-121v0,-82,30,-120,106,-120v76,0,107,38,107,120xm178,-117v0,-62,-15,-79,-58,-79v-43,0,-58,17,-58,79v0,62,16,80,59,80v42,0,57,-19,57,-80xm100,-295r40,0r36,47r-35,0r-21,-30r-21,30r-35,0","w":240},"\u00f6":{"d":"227,-117v0,83,-31,121,-107,121v-76,0,-106,-39,-106,-121v0,-82,30,-120,106,-120v76,0,107,38,107,120xm178,-117v0,-62,-15,-79,-58,-79v-43,0,-58,17,-58,79v0,62,16,80,59,80v42,0,57,-19,57,-80xm108,-274v0,12,-6,19,-19,19v-13,0,-20,-6,-20,-19v0,-12,7,-18,20,-18v13,0,19,6,19,18xm171,-274v0,12,-5,19,-19,19v-13,0,-20,-6,-20,-19v0,-12,7,-18,20,-18v14,0,19,6,19,18","w":240},"\u00f5":{"d":"227,-117v0,83,-31,121,-107,121v-76,0,-106,-39,-106,-121v0,-82,30,-120,106,-120v76,0,107,38,107,120xm178,-117v0,-62,-15,-79,-58,-79v-43,0,-58,17,-58,79v0,62,16,80,59,80v42,0,57,-19,57,-80xm85,-260r-21,0v2,-21,14,-37,34,-37v28,0,46,35,59,4r22,0v-1,22,-15,37,-35,37v-28,0,-46,-35,-59,-4","w":240},"\u00fa":{"d":"220,-234r0,147v0,62,-35,91,-98,91v-64,0,-98,-29,-98,-91r0,-147r47,0r0,147v0,34,15,49,51,49v36,0,52,-15,52,-49r0,-147r46,0xm130,-295r55,0r-51,47r-38,0","w":244},"\u00f9":{"d":"220,-234r0,147v0,62,-35,91,-98,91v-64,0,-98,-29,-98,-91r0,-147r47,0r0,147v0,34,15,49,51,49v36,0,52,-15,52,-49r0,-147r46,0xm150,-248r-34,0r-43,-47r52,0","w":244},"\u00fb":{"d":"220,-234r0,147v0,62,-35,91,-98,91v-64,0,-98,-29,-98,-91r0,-147r47,0r0,147v0,34,15,49,51,49v36,0,52,-15,52,-49r0,-147r46,0xm102,-295r39,0r37,47r-35,0r-21,-30r-22,30r-34,0","w":244},"\u00fc":{"d":"220,-234r0,147v0,62,-35,91,-98,91v-64,0,-98,-29,-98,-91r0,-147r47,0r0,147v0,34,15,49,51,49v36,0,52,-15,52,-49r0,-147r46,0xm110,-274v0,12,-7,19,-20,19v-13,0,-19,-6,-19,-19v0,-12,6,-18,19,-18v13,0,20,6,20,18xm173,-274v0,12,-6,19,-20,19v-13,0,-19,-6,-19,-19v0,-12,6,-18,19,-18v14,0,20,6,20,18","w":244},"\u2020":{"d":"13,-219r57,3r-4,-68r45,0r-3,68r57,-3r0,44r-57,-3r3,231r-45,0r4,-231r-57,3r0,-44","w":178},"\u00b0":{"d":"14,-245v0,-27,22,-49,49,-49v27,0,48,22,48,49v0,27,-21,50,-48,50v-27,0,-49,-23,-49,-50xm35,-245v0,15,13,26,28,26v15,0,27,-11,27,-26v0,-15,-12,-26,-27,-26v-16,0,-28,11,-28,26","w":125},"\u00a2":{"d":"165,-210r-3,40v-50,-18,-98,-8,-98,61v0,75,51,84,100,63r3,37v-10,7,-25,12,-42,13r-3,45r-36,0r3,-46v-48,-8,-73,-44,-73,-112v0,-67,25,-105,82,-110r3,-44r36,0r-3,45v12,1,22,4,31,8","w":181},"\u00a3":{"d":"23,-115r-2,-38r18,0v-21,-66,-2,-119,95,-121v28,0,50,5,68,12r-6,43v-34,-19,-124,-14,-115,30v0,13,3,24,7,36r92,0r0,38r-83,0v6,32,-2,62,-24,74v40,-6,98,-9,142,-1v0,1,-2,43,-3,45v-66,-8,-123,-8,-193,-1r-2,-44v30,-7,39,-39,32,-73r-26,0","w":227},"\u00a7":{"d":"19,-122v0,-20,10,-40,32,-53v-51,-36,-24,-107,57,-107v23,0,53,6,71,16r-4,35v-29,-16,-103,-26,-103,10v0,36,119,36,119,113v0,21,-11,41,-33,54v52,35,25,106,-56,106v-23,0,-52,-6,-70,-16r3,-35v29,16,103,26,103,-9v0,-36,-119,-37,-119,-114xm123,-75v53,-26,7,-63,-37,-79v-51,26,-6,62,37,79","w":203},"\u2022":{"d":"20,-116v0,-36,18,-54,53,-54v36,0,53,18,53,54v0,37,-17,54,-53,54v-35,0,-53,-17,-53,-54","w":147},"\u00b6":{"d":"107,56r-40,0r0,-227v-31,-1,-54,-18,-54,-51v0,-27,20,-48,56,-48r162,0r-2,38r-27,0r0,288r-41,0r0,-288r-54,0r0,288","w":245},"\u00df":{"d":"203,-142r-78,77r-77,-77r77,-78xm199,-142r-74,-74r-18,18r18,19r-37,37r19,18r37,-37r18,19r-37,37r19,18","w":252},"\u00ae":{"d":"13,-233v0,-37,30,-68,67,-68v37,0,67,31,67,68v0,37,-30,67,-67,67v-37,0,-67,-30,-67,-67xm26,-233v0,29,24,54,54,54v30,0,54,-25,54,-54v0,-30,-24,-54,-54,-54v-30,0,-54,24,-54,54xm84,-271v34,-3,39,34,17,44r14,29r-20,0r-12,-27r-13,0r0,27r-19,0r0,-73r33,0xm95,-246v1,-10,-14,-9,-25,-9r0,17v10,0,26,2,25,-8","w":159},"\u00a9":{"d":"18,-136v0,-78,64,-141,142,-141v78,0,141,63,141,141v0,78,-63,141,-141,141v-78,0,-142,-63,-142,-141xm42,-136v0,63,52,117,118,117v66,0,118,-53,118,-117v0,-63,-52,-116,-118,-116v-66,0,-118,53,-118,116xm219,-209r-3,33v-38,-22,-106,-5,-100,40v-6,49,68,63,103,39v2,10,3,21,4,32v-53,49,-153,10,-153,-71v0,-48,34,-92,92,-92v24,0,44,9,57,19","w":319},"\u2122":{"d":"230,-173r-24,0v-1,-23,3,-50,0,-71r-27,71r-20,0v-10,-23,-17,-49,-28,-70r0,70r-23,0r0,-102r34,0v10,23,17,49,28,70r27,-70r33,0r0,102xm95,-250r-29,0r0,77r-28,0r0,-77r-29,0r0,-25r86,0r0,25","w":244},"\u00b4":{"d":"81,-295r56,0r-51,47r-38,0","w":144},"\u00a8":{"d":"61,-274v0,12,-7,19,-20,19v-13,0,-19,-6,-19,-19v0,-12,6,-18,19,-18v13,0,20,6,20,18xm124,-274v0,12,-6,19,-20,19v-13,0,-19,-6,-19,-19v0,-12,6,-18,19,-18v14,0,20,6,20,18","w":144},"\u00c6":{"d":"363,-225r-126,0r5,65r101,0r0,41r-98,0r6,75r116,0r-1,44r-162,0r-4,-58r-101,0r-29,58r-59,0r147,-270r204,0xm187,-237r-68,137r78,0","w":381},"\u00d8":{"d":"39,6r-24,-23r21,-26v-12,-22,-18,-53,-18,-92v0,-97,33,-139,116,-139v35,0,62,7,80,24r20,-25r24,23r-24,29v10,22,16,51,16,88v0,99,-33,140,-116,140v-33,0,-59,-7,-77,-22xm71,-135v0,21,1,37,4,51r108,-127v-10,-13,-26,-18,-49,-18v-46,0,-63,19,-63,94xm198,-135v-1,-19,0,-36,-4,-48r-107,126v10,12,25,16,47,16v46,0,64,-20,64,-94","w":268},"\u00b1":{"d":"198,-121r-62,0r0,55r-41,0r0,-55r-61,0r0,-40r61,0r0,-59r41,0r0,59r62,0r0,40xm197,-17r-163,0r0,-35r163,0r0,35"},"\u00a5":{"d":"55,-127r36,0r-74,-143r56,0r58,145r55,-145r55,0r-71,143r37,0r0,26r-49,0r0,17r49,0r0,26r-49,0r0,58r-55,0r0,-58r-48,0r0,-26r48,0r0,-17r-48,0r0,-26","w":258},"\u03bc":{"d":"163,-16v-22,26,-79,28,-97,-7v1,27,3,52,5,76r-45,4r0,-274r46,0r0,141v0,24,17,38,43,38v24,0,41,-12,41,-34r0,-145r46,0r0,216r-33,3","w":225},"\u00aa":{"d":"108,-127v-2,-5,-1,-13,-4,-16v-29,33,-90,21,-90,-37v0,-42,47,-61,86,-46v10,-43,-45,-40,-73,-27r-3,-32v48,-22,114,-15,114,54r0,104r-30,0xm73,-158v24,-1,29,-17,26,-41v-15,-8,-54,-5,-48,19v0,17,9,22,22,22","w":155},"\u00ba":{"d":"156,-211v0,62,-22,86,-71,86v-49,0,-70,-24,-70,-86v0,-62,22,-85,70,-85v49,0,71,23,71,85xm55,-211v0,42,8,53,30,53v22,0,31,-11,31,-53v0,-42,-9,-51,-31,-51v-22,0,-30,9,-30,51","w":170},"\u00e6":{"d":"328,-193r-115,0r4,54r93,0r0,37r-90,0r5,61r107,0r-1,41r-150,0r-4,-49r-92,0r-27,49r-55,0r136,-234r188,0xm166,-200v-22,34,-40,77,-61,113r69,0","w":345},"\u00f8":{"d":"35,6r-21,-20r17,-22v-12,-19,-17,-46,-17,-81v0,-82,31,-120,107,-120v30,0,52,6,69,18r18,-21r21,20r-19,23v12,19,17,46,17,80v0,83,-30,121,-106,121v-30,0,-53,-5,-70,-18xm62,-117v1,19,0,37,6,47r95,-112v-9,-10,-22,-14,-42,-14v-43,0,-59,17,-59,79xm179,-117v-1,-19,0,-35,-5,-46r-96,112v9,10,23,14,43,14v42,0,58,-19,58,-80","w":240},"\u00bf":{"d":"14,-30v0,-40,24,-67,63,-88r2,-42r36,0r3,60v-34,19,-57,37,-57,63v1,46,79,32,98,8r17,38v-39,42,-162,38,-162,-39xm70,-216v0,-15,8,-24,27,-24v18,0,27,6,27,24v0,16,-9,25,-27,25v-19,0,-27,-9,-27,-25","w":186},"\u00a1":{"d":"36,-160r37,0r6,193r-49,0xm27,-216v0,-15,8,-24,27,-24v18,0,27,7,27,24v0,16,-9,25,-27,25v-19,0,-27,-9,-27,-25","w":108},"\u00ac":{"d":"158,-102r-121,0r0,-41r158,0r0,96r-37,0r0,-55"},"\u0192":{"d":"40,54r-45,0r50,-235r-22,0r7,-35r23,0v0,-51,52,-80,107,-63r-9,31v-29,-10,-53,3,-52,32r47,0r-7,35r-48,0","w":150},"\u00ab":{"d":"203,-156r-63,40r63,39r0,37r-109,-74r0,-4r109,-74r0,36xm117,-156r-63,40r63,39r0,37r-108,-74r0,-4r108,-74r0,36","w":230},"\u00bb":{"d":"108,-40r0,-37r63,-39r-63,-40r0,-36r109,74r0,4xm23,-40r0,-37r63,-39r-63,-40r0,-36r109,74r0,4","w":230},"\u2026":{"d":"233,-23v0,17,-9,27,-28,27v-19,0,-28,-8,-28,-27v0,-18,9,-27,28,-27v19,0,28,9,28,27xm155,-23v0,17,-9,27,-28,27v-19,0,-27,-8,-27,-27v0,-18,8,-27,27,-27v19,0,28,9,28,27xm75,-23v0,17,-9,27,-28,27v-19,0,-28,-8,-28,-27v0,-18,9,-27,28,-27v19,0,28,9,28,27","w":252},"\u00a0":{"w":101},"\u00c0":{"d":"201,0r-18,-58r-108,0r-18,58r-53,0r96,-270r59,0r97,270r-55,0xm130,-234r-42,134r82,0xm154,-287r-37,0r-45,-42r56,0","w":260},"\u00c3":{"d":"201,0r-18,-58r-108,0r-18,58r-53,0r96,-270r59,0r97,270r-55,0xm130,-234r-42,134r82,0xm93,-288r-21,0v1,-24,13,-41,34,-41v30,-1,50,37,62,5r20,0v-1,24,-14,41,-35,41v-28,0,-48,-37,-60,-5","w":260},"\u00d5":{"d":"249,-135v0,99,-33,140,-115,140v-82,0,-116,-43,-116,-140v0,-97,33,-139,116,-139v82,0,115,42,115,139xm198,-135v0,-75,-17,-94,-64,-94v-46,0,-63,19,-63,94v0,75,17,94,63,94v46,0,64,-20,64,-94xm98,-288r-22,0v1,-24,14,-41,35,-41v30,-1,50,37,62,5r20,0v-1,24,-14,41,-35,41v-28,0,-48,-37,-60,-5","w":268},"\u0152":{"d":"374,0r-173,0v-1,-8,2,-20,-1,-26v-16,22,-42,31,-75,31v-72,0,-107,-43,-107,-140v0,-97,33,-139,107,-139v33,-1,57,10,76,28r0,-24r168,0r1,45r-124,0r0,65r105,0r0,41r-105,0r0,75r129,0xm197,-135v0,-75,-16,-94,-63,-94v-46,0,-63,19,-63,94v0,75,17,94,63,94v46,0,63,-20,63,-94","w":389},"\u0153":{"d":"338,0r-159,0r0,-23v-15,19,-39,27,-68,27v-66,0,-97,-38,-97,-121v0,-83,30,-120,97,-120v29,0,53,7,68,24r0,-21r153,0r1,42r-112,0r0,53r95,0r0,37r-95,0r0,61r117,0r0,41xm176,-117v0,-62,-15,-78,-57,-78v-42,0,-57,16,-57,78v0,62,15,80,57,80v42,0,57,-19,57,-80","w":351},"\u2013":{"d":"22,-140r145,0r0,34r-145,0r0,-34","w":188},"\u2014":{"d":"22,-140r209,0r0,34r-209,0r0,-34","w":252},"\u201c":{"d":"117,-195v-54,-6,-15,-72,2,-101r17,4r-10,44v24,7,25,57,-9,53xm44,-195v-54,-6,-15,-72,2,-101r17,4r-9,44v24,8,24,57,-10,53","w":160},"\u201d":{"d":"44,-282v54,6,15,73,-3,101r-16,-4r9,-44v-24,-8,-24,-57,10,-53xm116,-282v55,6,16,72,-2,101r-16,-4r9,-44v-23,-7,-24,-56,9,-53","w":160},"\u2018":{"d":"44,-195v-54,-6,-15,-72,2,-101r17,4r-9,44v24,8,24,57,-10,53","w":87},"\u2019":{"d":"44,-282v54,6,15,73,-3,101r-16,-4r9,-44v-24,-8,-24,-57,10,-53","w":87},"\u00f7":{"d":"137,-186v0,16,-10,24,-29,24v-19,0,-30,-6,-30,-24v0,-16,11,-24,30,-24v19,0,29,8,29,24xm137,-57v0,16,-10,24,-29,24v-19,0,-30,-6,-30,-24v0,-16,11,-24,30,-24v19,0,29,8,29,24xm194,-100r-172,0r0,-43r172,0r0,43","w":216},"\u00ff":{"d":"5,-234r53,0r59,120r57,-120r51,0r-85,157r0,77r-48,0r0,-77xm104,-274v0,12,-7,19,-20,19v-13,0,-19,-6,-19,-19v0,-12,6,-18,19,-18v13,0,20,6,20,18xm167,-274v0,12,-6,19,-20,19v-13,0,-19,-6,-19,-19v0,-12,6,-18,19,-18v14,0,20,6,20,18","w":229},"\u0178":{"d":"5,-270r56,0r65,136r62,-136r54,0r-93,181r0,89r-50,0r0,-89xm109,-306v0,13,-6,19,-20,19v-14,0,-20,-5,-20,-19v0,-13,6,-20,20,-20v14,0,20,7,20,20xm180,-306v0,13,-7,19,-21,19v-13,0,-20,-5,-20,-19v0,-13,7,-20,20,-20v14,0,21,7,21,20","w":246},"\u2044":{"d":"134,-270r33,0r-180,270r-33,0","w":107},"\u20ac":{"d":"174,-125r-6,26r-81,0v6,68,74,75,125,49r4,37v-17,10,-41,16,-68,16v-65,0,-99,-33,-108,-102r-31,0r0,-26r28,0r0,-18r-28,0r0,-27r31,0v5,-88,93,-122,172,-90r-9,39v-50,-19,-111,-5,-116,51r100,0r-6,27r-96,0r0,18r89,0","w":230},"\u2039":{"d":"122,-156r-63,40r63,39r0,37r-108,-74r0,-4r108,-74r0,36","w":143},"\u203a":{"d":"21,-40r0,-37r63,-39r-63,-40r0,-36r109,74r0,4","w":143},"\ufb01":{"d":"203,-142r-78,77r-77,-77r77,-78xm199,-142r-74,-74r-18,18r18,19r-37,37r19,18r37,-37r18,19r-37,37r19,18","w":252},"\ufb02":{"d":"203,-142r-78,77r-77,-77r77,-78xm199,-142r-74,-74r-18,18r18,19r-37,37r19,18r37,-37r18,19r-37,37r19,18","w":252},"\u2021":{"d":"165,-58r0,44r-57,-4r3,71r-45,0r4,-71r-57,4r0,-44r57,3r0,-124r-57,4r0,-44r57,3r-4,-68r45,0r-3,68r57,-3r0,44r-57,-4r0,124","w":178},"\u00b7":{"d":"80,-124v0,17,-9,27,-28,27v-19,0,-28,-8,-28,-27v0,-18,9,-28,28,-28v19,0,28,10,28,28","w":104},"\u201a":{"d":"44,-49v54,6,15,72,-3,100r-16,-3r9,-44v-24,-8,-24,-57,10,-53","w":87},"\u201e":{"d":"44,-49v54,6,15,72,-3,100r-16,-3r9,-44v-24,-8,-24,-57,10,-53xm116,-49v55,6,16,72,-2,100r-16,-3r9,-44v-23,-7,-24,-57,9,-53","w":160},"\u2030":{"d":"122,-211v0,43,-18,63,-54,63v-37,0,-54,-21,-54,-63v0,-44,16,-63,54,-63v35,0,54,17,54,63xm91,-211v0,-26,-8,-34,-23,-34v-16,0,-23,7,-23,34v0,27,7,33,23,33v15,0,23,-6,23,-33xm187,-260r27,21r-144,231r-27,-21xm247,-59v0,43,-18,63,-54,63v-37,0,-54,-21,-54,-63v0,-44,16,-64,54,-64v36,0,54,18,54,64xm217,-59v0,-26,-8,-34,-24,-34v-15,0,-23,7,-23,34v0,26,8,32,23,32v16,0,24,-6,24,-32xm365,-59v0,43,-18,63,-54,63v-37,0,-54,-21,-54,-63v0,-44,16,-64,54,-64v36,0,54,18,54,64xm334,-59v0,-26,-8,-34,-23,-34v-16,0,-23,7,-23,34v0,26,8,32,23,32v16,0,23,-6,23,-32","w":378},"\u00c2":{"d":"201,0r-18,-58r-108,0r-18,58r-53,0r96,-270r59,0r97,270r-55,0xm130,-234r-42,134r82,0xm105,-329r49,0r40,43r-42,0r-22,-26r-23,26r-41,0","w":260},"\u00ca":{"d":"80,-44r129,0r-1,44r-178,0r0,-270r173,0r0,45r-123,0r0,65r105,0r0,41r-105,0r0,75xm94,-329r49,0r40,43r-41,0r-23,-26r-23,26r-40,0","w":223},"\u00c1":{"d":"201,0r-18,-58r-108,0r-18,58r-53,0r96,-270r59,0r97,270r-55,0xm130,-234r-42,134r82,0xm130,-329r60,0r-49,43r-37,0","w":260},"\u00cb":{"d":"80,-44r129,0r-1,44r-178,0r0,-270r173,0r0,45r-123,0r0,65r105,0r0,41r-105,0r0,75xm104,-306v0,13,-6,19,-20,19v-14,0,-20,-5,-20,-19v0,-13,6,-20,20,-20v14,0,20,7,20,20xm175,-306v0,13,-7,19,-21,19v-13,0,-20,-5,-20,-19v0,-13,7,-20,20,-20v14,0,21,7,21,20","w":223},"\u00c8":{"d":"80,-44r129,0r-1,44r-178,0r0,-270r173,0r0,45r-123,0r0,65r105,0r0,41r-105,0r0,75xm144,-287r-37,0r-45,-42r56,0","w":223},"\u00cd":{"d":"34,0r0,-270r51,0r0,270r-51,0xm60,-329r60,0r-49,43r-37,0","w":118},"\u00ce":{"d":"34,0r0,-270r51,0r0,270r-51,0xm35,-329r49,0r39,43r-41,0r-23,-26r-22,26r-41,0","w":118},"\u00cf":{"d":"34,0r0,-270r51,0r0,270r-51,0xm45,-306v0,13,-7,19,-21,19v-14,0,-20,-5,-20,-19v0,-13,6,-20,20,-20v14,0,21,7,21,20xm115,-306v0,13,-6,19,-20,19v-13,0,-20,-5,-20,-19v0,-13,7,-20,20,-20v14,0,20,7,20,20","w":118},"\u00cc":{"d":"34,0r0,-270r51,0r0,270r-51,0xm84,-287r-37,0r-45,-42r56,0","w":118},"\u00d3":{"d":"249,-135v0,99,-33,140,-115,140v-82,0,-116,-43,-116,-140v0,-97,33,-139,116,-139v82,0,115,42,115,139xm198,-135v0,-75,-17,-94,-64,-94v-46,0,-63,19,-63,94v0,75,17,94,63,94v46,0,64,-20,64,-94xm135,-329r59,0r-48,43r-37,0","w":268},"\u00d4":{"d":"249,-135v0,99,-33,140,-115,140v-82,0,-116,-43,-116,-140v0,-97,33,-139,116,-139v82,0,115,42,115,139xm198,-135v0,-75,-17,-94,-64,-94v-46,0,-63,19,-63,94v0,75,17,94,63,94v46,0,64,-20,64,-94xm109,-329r49,0r40,43r-41,0r-23,-26r-22,26r-41,0","w":268},"\u00d2":{"d":"249,-135v0,99,-33,140,-115,140v-82,0,-116,-43,-116,-140v0,-97,33,-139,116,-139v82,0,115,42,115,139xm198,-135v0,-75,-17,-94,-64,-94v-46,0,-63,19,-63,94v0,75,17,94,63,94v46,0,64,-20,64,-94xm165,-287r-38,0r-45,-42r56,0","w":268},"\u00da":{"d":"238,-270r0,173v0,69,-37,102,-106,102v-69,0,-106,-33,-106,-102r0,-173r49,0r0,173v0,39,18,56,57,56v39,0,56,-17,56,-56r0,-173r50,0xm132,-329r60,0r-49,43r-37,0","w":263},"\u00db":{"d":"238,-270r0,173v0,69,-37,102,-106,102v-69,0,-106,-33,-106,-102r0,-173r49,0r0,173v0,39,18,56,57,56v39,0,56,-17,56,-56r0,-173r50,0xm107,-329r49,0r40,43r-42,0r-22,-26r-23,26r-41,0","w":263},"\u00d9":{"d":"238,-270r0,173v0,69,-37,102,-106,102v-69,0,-106,-33,-106,-102r0,-173r49,0r0,173v0,39,18,56,57,56v39,0,56,-17,56,-56r0,-173r50,0xm157,-287r-38,0r-44,-42r55,0","w":263},"\u0131":{"d":"31,0r0,-234r47,0r0,234r-47,0","w":109},"\u02c6":{"d":"52,-295r40,0r37,47r-35,0r-22,-30r-21,30r-35,0","w":144},"\u02dc":{"d":"37,-260r-21,0v2,-21,14,-37,34,-37v29,0,46,35,60,4r21,0v-1,22,-14,37,-34,37v-28,0,-47,-35,-60,-4","w":144},"\u00af":{"d":"127,-282r0,26r-108,0r0,-26r108,0","w":144},"\u02d8":{"d":"95,-295r31,0v0,31,-16,48,-54,48v-39,0,-54,-18,-54,-48r31,0v0,19,9,26,23,26v13,0,23,-8,23,-26","w":144},"\u02d9":{"d":"98,-272v0,13,-8,19,-25,19v-17,0,-25,-5,-25,-19v0,-13,8,-19,25,-19v17,0,25,6,25,19","w":144},"\u02da":{"d":"30,-267v0,-20,13,-33,43,-33v29,0,43,14,43,33v0,22,-13,32,-43,32v-28,0,-43,-9,-43,-32xm54,-267v0,8,5,13,19,13v13,0,20,-4,20,-13v0,-8,-6,-14,-20,-14v-14,0,-19,6,-19,14","w":144},"\u00b8":{"d":"41,68r25,-71r30,-1r-13,72r-42,0","w":144},"\u02dd":{"d":"53,-295r46,0r-40,47r-29,0xm117,-295r46,0r-43,47r-33,0","w":144},"\u02db":{"d":"50,36v-2,-27,33,-53,58,-36v-25,-1,-35,39,-3,38v8,0,13,-1,19,-4r4,25v-24,15,-83,8,-78,-23","w":144},"\u02c7":{"d":"93,-248r-40,0r-36,-47r34,0r22,31r21,-31r36,0","w":144},"\u00a4":{"d":"47,-98v-11,-20,-10,-49,2,-68r-25,-25r24,-26r26,27v19,-12,47,-12,66,0r26,-27r24,26r-25,26v12,18,12,47,2,67r23,23r-24,27r-23,-24v-20,13,-52,13,-72,0r-23,24r-24,-26xm69,-131v0,20,17,35,38,35v21,0,37,-15,37,-35v0,-20,-16,-36,-37,-36v-21,0,-38,16,-38,36","w":213}}});
/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * 2006 Dziedzic Lukasz published by FSI Fonts und Software GmbH
 */
Cufon.registerFont({"w":145,"face":{"font-family":"Clan","font-weight":700,"font-stretch":"normal","units-per-em":"360","panose-1":"2 0 8 3 0 0 0 0 0 0","ascent":"288","descent":"-72","x-height":"5","bbox":"-46 -330 375 68","underline-thickness":"14.04","underline-position":"-29.16","stemh":"31","stemv":"39","unicode-range":"U+0020-U+FB02"},"glyphs":{" ":{"w":95},"\u00d0":{"d":"252,-136v0,98,-41,136,-121,136r-102,0r0,-122r-21,0r0,-36r21,0r0,-112r101,0v86,0,122,41,122,134xm188,-136v0,-84,-31,-82,-98,-80r0,58r30,0r0,36r-30,0r0,68v67,0,98,8,98,-82","w":267},"\u00f0":{"d":"176,-263r-25,16v35,34,61,80,61,126v0,90,-33,125,-99,125v-59,0,-100,-24,-100,-106v0,-84,66,-109,130,-87v-9,-13,-18,-24,-30,-35r-32,19r-20,-21r27,-17r-31,-19r39,-25v10,5,21,11,31,19r31,-19xm71,-99v0,46,14,57,40,57v29,0,43,-19,43,-66v0,-31,-14,-42,-42,-42v-30,0,-41,13,-41,51","w":225},"\u0141":{"d":"99,-55r112,0r-2,55r-171,0r0,-100r-25,10r-4,-48r29,-12r0,-120r61,0r0,96r66,-27r5,50r-71,28r0,68","w":217},"\u0142":{"d":"11,-114r-1,-48r28,-13r0,-105r57,-3r0,85r30,-15r0,46r-30,16r0,151r-57,0r0,-127","w":134},"\u0160":{"d":"198,-81v0,87,-119,106,-184,66r8,-52v24,13,48,19,75,19v30,0,42,-10,42,-29v0,-42,-124,-25,-124,-115v0,-46,30,-83,98,-83v26,0,55,5,76,14r-8,51v-32,-13,-109,-20,-108,15v0,42,125,23,125,114xm142,-285r-59,0r-38,-44r49,0r19,22r19,-22r48,0","w":208},"\u0161":{"d":"167,-68v0,44,-24,72,-83,72v-26,0,-50,-5,-68,-15r6,-46v18,10,43,16,62,16v22,0,32,-9,32,-22v0,-35,-102,-15,-102,-91v0,-62,89,-84,145,-56r-5,46v-18,-8,-42,-11,-58,-11v-18,0,-28,7,-28,18v0,33,99,14,99,89xm118,-236r-49,0r-35,-52r41,0r19,31r18,-31r42,0","w":178},"\u00dd":{"d":"2,-270r69,0r57,129r55,-129r66,0r-92,184r0,86r-62,0r0,-86xm122,-329r71,0r-50,44r-44,0","w":251},"\u00fd":{"d":"42,14v24,9,50,7,58,-19r-94,-213r63,0r58,160r43,-160r59,0r-75,216v-20,57,-61,72,-116,56xm111,-288r64,0r-43,52r-42,0","w":235},"\u00de":{"d":"228,-136v0,68,-54,96,-142,90r0,46r-60,0r0,-270r60,0r0,41v87,-5,142,18,142,93xm165,-136v0,-45,-36,-43,-79,-42r0,83v42,0,79,6,79,-41","w":239},"\u00fe":{"d":"216,-109v0,103,-69,137,-136,96r0,68r-56,0r0,-335r56,-3r1,82v60,-44,135,-22,135,92xm158,-110v0,-74,-49,-73,-78,-45r0,94v28,31,78,31,78,-49","w":228},"\u017d":{"d":"207,0r-194,0r0,-40r121,-175r-119,0r2,-55r190,0r0,44r-118,172r119,0xm144,-285r-60,0r-37,-44r48,0r19,22r19,-22r49,0","w":222},"\u017e":{"d":"177,-179r-97,133r100,0r-1,46r-164,0r0,-39r97,-133r-94,0r2,-46r157,0r0,39xm123,-236r-49,0r-35,-52r41,0r19,31r18,-31r42,0","w":193},"\u00bd":{"d":"227,-270r39,0r-179,270r-39,0xm303,-100v0,27,-25,43,-57,68r57,0r-1,32r-107,0r0,-25v39,-33,67,-52,67,-71v0,-22,-45,-16,-60,-3r-9,-30v30,-25,110,-20,110,29xm107,-270r0,142r-39,0r0,-97r-28,15r-4,-31v23,-11,34,-33,71,-29","w":321},"\u00bc":{"d":"106,-270r0,142r-39,0r0,-97r-28,15r-4,-31v23,-11,34,-33,71,-29xm303,-25r-14,0r0,25r-36,0r0,-25r-73,0r-3,-22r65,-95r47,0r0,86r15,0xm254,-56v0,-17,4,-37,2,-52r-35,52r33,0xm233,-270r39,0r-179,270r-39,0","w":321},"\u00b9":{"d":"83,-319r0,143r-39,0r0,-98r-29,16r-3,-31v23,-11,33,-34,71,-30","w":102},"\u00be":{"d":"291,-25r-14,0r0,25r-36,0r0,-25r-73,0r-3,-22r65,-95r47,0r0,86r15,0xm242,-56v0,-17,4,-37,2,-52v-10,17,-28,35,-34,52r32,0xm230,-270r40,0r-179,270r-40,0xm131,-171v0,47,-79,55,-112,33r8,-29v17,10,67,19,67,-5v0,-10,-7,-16,-40,-16r0,-26v31,0,38,-6,38,-15v-4,-18,-52,-12,-64,0r-9,-28v29,-25,109,-19,109,26v0,15,-9,22,-20,30v15,5,23,14,23,30","w":321},"\u00b3":{"d":"124,-219v0,47,-78,54,-112,33r8,-29v18,10,64,19,66,-6v0,-10,-6,-15,-39,-15r0,-26v31,0,38,-6,38,-15v-4,-19,-51,-12,-64,0r-9,-28v29,-24,109,-20,109,25v0,15,-10,23,-21,31v15,5,24,14,24,30","w":134},"\u00b2":{"d":"123,-276v2,28,-28,42,-58,68r57,0r0,32r-108,0r0,-25v39,-34,68,-53,68,-72v0,-22,-46,-15,-61,-2r-9,-30v30,-25,118,-19,111,29","w":134},"\u00a6":{"d":"31,-134r0,-157r43,0r0,157r-43,0xm31,59r0,-155r43,0r0,155r-43,0","w":104},"\u2212":{"d":"192,-95r-167,0r0,-52r167,0r0,52","w":216},"\u00d7":{"d":"189,-71r-33,35r-48,-48r-48,48r-32,-35r48,-47r-49,-48r33,-35r49,49r48,-48r32,34r-49,48","w":216},"!":{"d":"76,-78r-43,0r-9,-192r61,0xm87,-24v0,17,-10,28,-32,28v-22,0,-31,-8,-31,-28v0,-18,9,-28,31,-28v22,0,32,10,32,28","w":109},"\"":{"d":"90,-276r54,0r-10,99r-36,0xm17,-276r54,0r-10,99r-36,0","w":154},"#":{"d":"13,-109r37,0r8,-50r-44,0r0,-43r50,0r10,-68r45,0r-11,68r31,0r10,-68r44,0r-10,68r31,0r0,43r-37,0r-8,50r45,0r0,43r-52,0r-9,66r-44,0r10,-66r-31,0r-10,66r-45,0r10,-66r-30,0r0,-43xm103,-159r-9,50r31,0r8,-50r-30,0","w":227},"$":{"d":"100,29r-30,-3r3,-23v-22,-3,-44,-8,-58,-16v3,-18,4,-33,7,-52v17,9,38,17,58,20r10,-67v-37,-13,-76,-33,-76,-83v0,-50,34,-78,99,-79r3,-23r33,2r-3,23v15,2,30,6,40,10r-4,50v-13,-4,-29,-7,-44,-9r-9,60v35,12,70,31,70,81v0,57,-29,84,-95,85xm153,-72v0,-14,-14,-22,-33,-30r-9,59v30,-1,42,-11,42,-29xm66,-197v0,13,14,20,32,26r7,-52v-28,1,-39,12,-39,26","w":213},"%":{"d":"123,-211v0,42,-19,64,-56,64v-39,0,-56,-22,-56,-64v0,-44,17,-62,56,-62v37,0,56,17,56,62xm86,-211v0,-22,-6,-28,-19,-28v-13,0,-18,5,-18,28v0,22,5,28,18,28v13,0,19,-5,19,-28xm188,-257r32,25r-147,222r-32,-25xm255,-59v0,42,-20,63,-57,63v-39,0,-55,-21,-55,-63v0,-44,16,-64,56,-64v37,0,56,19,56,64xm217,-59v0,-22,-5,-28,-18,-28v-13,0,-19,6,-19,28v0,22,6,27,19,27v13,0,18,-5,18,-27","w":265},"&":{"d":"256,-48r-20,51v-18,-8,-38,-20,-57,-33v-23,20,-51,35,-87,35v-59,0,-82,-37,-82,-76v0,-36,23,-60,48,-79v-39,-55,-34,-124,55,-124v44,0,75,22,75,55v0,33,-31,55,-62,76v14,15,30,31,48,45v8,-15,14,-31,18,-46r47,0v-2,19,-11,47,-27,73v14,9,29,17,44,23xm68,-76v0,36,50,34,72,16v-19,-17,-38,-34,-54,-52v-11,11,-18,22,-18,36xm112,-232v-30,1,-30,33,-13,55v19,-12,33,-23,33,-37v0,-12,-8,-18,-20,-18","w":258},"'":{"d":"14,-276r54,0r-10,99r-36,0","w":82},"(":{"d":"86,-284r42,4v-61,91,-61,234,-1,325r-41,4v-76,-80,-77,-253,0,-333","w":128},")":{"d":"1,-280r42,-4v77,80,76,253,0,333r-42,-4v62,-90,61,-234,0,-325","w":128},"*":{"d":"55,-282r26,0r4,37r36,-9r9,27r-35,15r21,32r-20,16r-27,-29r-28,29r-21,-15r21,-33r-35,-15r9,-27r36,9","w":135},"+":{"d":"194,-95r-62,0r0,60r-49,0r0,-60r-61,0r0,-52r61,0r0,-60r49,0r0,60r62,0r0,52","w":216},",":{"d":"47,-57v60,6,22,78,-1,109r-20,-5r10,-43v-27,-9,-28,-65,11,-61","w":95},"-":{"d":"19,-143r103,0r0,40r-103,0r0,-40","w":140},".":{"d":"81,-27v0,19,-9,31,-32,31v-23,0,-33,-8,-33,-31v0,-20,10,-31,33,-31v23,0,32,11,32,31","w":96},"\/":{"d":"120,-282r48,0r-123,326r-47,0","w":165},"0":{"d":"216,-134v0,97,-31,138,-101,138v-71,0,-100,-41,-100,-138v0,-102,30,-139,101,-139v70,0,100,37,100,139xm158,-135v0,-74,-13,-86,-42,-86v-30,0,-43,13,-43,86v0,76,13,88,43,88v29,0,42,-14,42,-88","w":230},"1":{"d":"59,0r0,-42r40,0r0,-156r-50,28r-6,-49r80,-51r36,0r0,228r39,0r0,42r-139,0","w":230},"2":{"d":"208,-194v1,50,-45,89,-104,142r103,0r-1,52r-179,0r0,-39v65,-64,120,-109,120,-149v0,-46,-82,-35,-108,-9r-14,-48v22,-17,53,-28,90,-28v62,0,93,32,93,79","w":230},"3":{"d":"211,-81v0,51,-33,84,-105,84v-34,0,-62,-8,-82,-20r12,-47v32,23,118,30,117,-19v0,-22,-14,-36,-71,-36r0,-42v54,0,68,-12,68,-33v0,-43,-91,-30,-113,-5r-13,-46v49,-45,181,-36,181,46v0,27,-13,47,-37,58v28,10,43,29,43,60","w":230},"4":{"d":"219,-51r-27,0r0,51r-54,0r0,-51r-120,0r-5,-38r109,-181r70,0r0,169r28,0xm140,-101r3,-115r-66,115r63,0","w":230},"5":{"d":"210,-93v0,60,-30,96,-100,96v-31,0,-60,-6,-83,-20r10,-47v33,22,115,33,115,-24v0,-45,-70,-38,-102,-26r-20,-22r11,-134r154,0r2,52r-110,0r-3,50v65,-15,126,9,126,75","w":230},"6":{"d":"214,-95v0,67,-36,98,-96,98v-66,0,-102,-36,-102,-132v0,-121,80,-167,182,-134r-4,50v-52,-19,-123,-6,-119,52v55,-33,139,-11,139,66xm156,-96v0,-44,-60,-42,-80,-18v1,52,12,68,42,68v25,0,38,-15,38,-50","w":230},"7":{"d":"214,-270r0,50r-101,220r-67,0r110,-213r-138,0r2,-57r194,0","w":230},"8":{"d":"116,3v-104,0,-131,-100,-63,-144v-48,-40,-34,-132,63,-132v96,0,114,87,60,130v22,12,39,29,39,64v0,54,-33,82,-99,82xm158,-75v0,-26,-28,-33,-58,-43v-37,15,-42,75,17,75v24,0,41,-9,41,-32xm80,-198v0,23,23,30,50,38v31,-16,35,-66,-14,-66v-24,0,-36,9,-36,28","w":230},"9":{"d":"213,-146v0,137,-83,171,-182,137r8,-49v52,22,120,15,117,-56v-57,35,-140,3,-140,-69v0,-55,30,-90,96,-90v64,0,101,41,101,127xm155,-165v0,-45,-17,-59,-44,-59v-25,0,-39,12,-39,39v0,45,66,48,83,20","w":230},":":{"d":"81,-174v0,19,-9,31,-32,31v-23,0,-33,-8,-33,-31v0,-20,10,-31,33,-31v23,0,32,11,32,31xm81,-27v0,19,-9,31,-32,31v-23,0,-33,-8,-33,-31v0,-20,10,-31,33,-31v23,0,32,11,32,31","w":96},";":{"d":"81,-174v0,19,-9,31,-32,31v-23,0,-32,-8,-32,-31v0,-20,9,-31,32,-31v23,0,32,11,32,31xm49,-57v60,6,22,78,-1,109r-20,-5r9,-43v-26,-9,-27,-65,12,-61","w":97},"<":{"d":"186,-160r-88,41r88,42r0,53r-155,-81r0,-28r154,-83","w":216},"=":{"d":"190,-133r-163,0r0,-43r163,0r0,43xm190,-59r-163,0r0,-44r163,0r0,44","w":216},">":{"d":"31,-24r0,-53v29,-15,63,-25,89,-43v-31,-12,-60,-26,-89,-40r0,-56r155,83r0,28","w":216},"?":{"d":"172,-205v0,40,-23,66,-61,86r-2,40r-44,0r-3,-61v32,-17,53,-33,53,-56v-1,-40,-71,-27,-88,-6r-20,-45v18,-15,49,-27,82,-27v56,0,83,27,83,69xm118,-24v0,17,-9,28,-31,28v-22,0,-31,-8,-31,-28v0,-18,9,-28,31,-28v22,0,31,10,31,28","w":182},"@":{"d":"80,-105v0,-70,62,-138,115,-93r6,-13r30,3r-17,110v0,13,5,25,21,25v23,0,40,-21,40,-74v0,-62,-34,-109,-104,-109v-84,0,-125,59,-125,132v0,77,39,134,125,134v56,0,91,-22,108,-36r13,28v-24,20,-66,39,-121,39v-98,0,-157,-61,-157,-165v0,-88,55,-164,157,-164v84,0,136,59,136,141v0,79,-38,110,-77,110v-22,0,-38,-9,-46,-25v-32,41,-104,34,-104,-43xm145,-77v31,0,31,-56,36,-88v-3,-6,-8,-9,-16,-9v-23,0,-39,34,-39,69v0,18,6,28,19,28","w":321},"A":{"d":"194,0r-15,-53r-98,0r-15,53r-64,0r93,-270r73,0r94,270r-68,0xm132,-224v-14,38,-23,81,-36,121r69,0","w":264},"B":{"d":"233,-78v0,49,-28,78,-96,78r-111,0r0,-270r109,0v95,-10,114,96,53,128v30,8,45,30,45,64xm172,-83v5,-42,-50,-30,-88,-32r0,65v39,-3,92,14,88,-33xm166,-190v0,-39,-47,-27,-82,-29r0,59v35,-2,82,11,82,-30","w":248},"C":{"d":"203,-264r-6,53v-14,-5,-33,-9,-53,-9v-49,0,-65,20,-65,84v0,96,58,97,119,77r6,49v-18,9,-43,15,-67,15v-82,0,-122,-46,-122,-142v0,-116,87,-161,188,-127","w":214},"D":{"d":"248,-136v0,98,-41,136,-121,136r-101,0r0,-270r101,0v86,0,121,41,121,134xm184,-136v0,-84,-31,-82,-98,-80r0,162v67,0,98,8,98,-82","w":263},"E":{"d":"86,-53r125,0r-2,53r-183,0r0,-270r178,0r1,54r-119,0r0,53r100,0r0,49r-100,0r0,61","w":222},"F":{"d":"205,-215r-119,0r0,58r99,0r-1,52r-98,0r0,105r-60,0r0,-270r178,0","w":213},"G":{"d":"225,-145r0,135v-20,9,-51,15,-81,15v-92,0,-129,-47,-129,-140v0,-94,40,-140,131,-140v26,0,53,5,74,13r-5,52v-19,-7,-44,-11,-66,-11v-53,0,-70,19,-70,86v0,81,33,94,92,82r0,-92r54,0","w":243},"H":{"d":"241,0r-60,0r0,-111r-95,0r0,111r-60,0r0,-270r60,0r0,105r95,0r0,-105r60,0r0,270","w":267},"I":{"d":"30,0r0,-270r61,0r0,270r-61,0","w":120},"J":{"d":"172,-270r0,171v8,97,-86,121,-160,93r3,-52v35,20,96,12,96,-42r0,-170r61,0","w":198},"K":{"d":"255,0r-74,0r-66,-114r-29,0r0,114r-60,0r0,-270r60,0r0,107r30,0r65,-107r69,0r-80,128","w":259},"L":{"d":"87,-55r111,0r-1,55r-171,0r0,-270r61,0r0,215","w":204},"M":{"d":"26,-270r67,0r73,185r73,-185r67,0r0,270r-55,0r0,-167r-66,167r-40,0r-65,-167v-3,49,0,112,-1,167r-53,0r0,-270","w":331},"N":{"d":"243,0r-42,0r-122,-171r1,171r-54,0r0,-270r51,0r113,163r0,-163r53,0r0,270","w":268},"O":{"d":"253,-135v0,98,-33,140,-118,140v-83,0,-120,-44,-120,-140v0,-96,36,-139,120,-139v85,0,118,43,118,139xm190,-135v0,-68,-14,-85,-55,-85v-41,0,-56,17,-56,85v0,68,15,86,56,86v41,0,55,-18,55,-86","w":269},"P":{"d":"228,-177v0,69,-56,96,-142,89r0,88r-60,0r0,-270r96,0v75,0,106,30,106,93xm165,-178v0,-47,-37,-41,-79,-41r0,83v42,0,79,7,79,-42","w":239},"Q":{"d":"253,-135v1,77,-22,118,-70,134r50,38r-68,18r-38,-50v-78,-3,-112,-47,-112,-140v0,-96,36,-139,120,-139v85,0,118,43,118,139xm190,-135v0,-68,-14,-85,-55,-85v-41,0,-56,17,-56,85v0,68,15,86,56,86v41,0,55,-18,55,-86","w":269},"R":{"d":"225,-186v0,38,-16,64,-45,73r63,113r-71,0r-47,-101r-39,0r0,101r-60,0r0,-270r99,0v67,0,100,26,100,84xm162,-184v4,-43,-38,-36,-76,-36r0,74v39,0,80,7,76,-38","w":244},"S":{"d":"198,-81v0,87,-119,106,-184,66r8,-52v24,13,48,19,75,19v30,0,42,-10,42,-29v0,-42,-124,-25,-124,-115v0,-46,30,-83,98,-83v26,0,55,5,76,14r-8,51v-32,-13,-109,-20,-108,15v0,42,125,23,125,114","w":208},"T":{"d":"211,-215r-73,0r0,215r-61,0r0,-215r-73,0r2,-55r203,0","w":214},"U":{"d":"239,-270r0,174v0,68,-36,101,-108,101v-71,0,-109,-33,-109,-101r0,-174r60,0r0,173v0,33,15,47,49,47v34,0,48,-14,48,-47r0,-173r60,0","w":261},"V":{"d":"190,-270r63,0r-91,270r-68,0r-92,-270r67,0r61,211","w":255},"W":{"d":"155,-270r66,0r44,210r39,-210r60,0r-64,270r-72,0r-42,-210r-41,210r-72,0r-64,-270r63,0r40,212","w":372},"X":{"d":"246,-270r-75,129r78,141r-68,0r-53,-103r-51,103r-70,0r77,-140r-75,-130r72,0r49,93v14,-32,31,-62,47,-93r69,0","w":256},"Y":{"d":"2,-270r69,0r57,129r55,-129r66,0r-92,184r0,86r-62,0r0,-86","w":251},"Z":{"d":"207,0r-194,0r0,-40r121,-175r-119,0r2,-55r190,0r0,44r-118,172r119,0","w":222},"[":{"d":"28,47r0,-330r98,0r0,40r-48,0r0,252r48,0r0,38r-98,0","w":126},"\\":{"d":"-5,-282r46,0r106,326r-46,0","w":135},"]":{"d":"99,-283r0,330r-98,0r0,-38r47,0r0,-252r-47,0r0,-40r98,0","w":126},"^":{"d":"168,-167r-52,-81r-53,81r-44,0r77,-122r39,0r77,122r-44,0","w":230},"_":{"d":"5,14r140,0r0,34r-140,0r0,-34","w":149},"`":{"d":"113,-236r-42,0r-43,-52r64,0"},"a":{"d":"146,0v-2,-7,-1,-16,-5,-21v-37,44,-127,31,-127,-48v0,-55,64,-81,120,-62v12,-57,-67,-48,-102,-32r-5,-45v22,-9,47,-14,75,-14v118,0,81,122,87,222r-43,0xm97,-41v32,-1,42,-20,37,-53v-20,-8,-76,-6,-68,25v0,21,13,28,31,28","w":209},"b":{"d":"216,-110v0,110,-85,140,-147,92r-7,18r-38,0r0,-280r56,-3v1,26,-3,56,0,80v64,-43,136,-14,136,93xm158,-109v0,-79,-48,-75,-78,-46r0,96v28,29,78,33,78,-50","w":228},"c":{"d":"165,-212r-3,47v-46,-16,-91,-8,-91,56v0,67,46,75,92,57r4,44v-74,32,-154,0,-154,-101v0,-95,71,-133,152,-103","w":177},"d":{"d":"204,0r-43,0v-3,-6,-1,-16,-7,-19v-13,15,-32,23,-58,23v-56,0,-83,-36,-83,-114v0,-99,71,-139,136,-93r0,-77r55,-3r0,283xm149,-59r0,-97v-29,-29,-79,-24,-79,48v0,51,10,67,42,67v21,0,32,-9,37,-18","w":227},"e":{"d":"121,4v-75,0,-108,-40,-108,-116v0,-69,30,-110,96,-110v65,0,99,52,88,128r-127,0v-1,60,71,56,116,39r7,45v-18,8,-44,14,-72,14xm69,-131r79,0v-1,-32,-16,-45,-39,-45v-27,0,-37,13,-40,45","w":210},"f":{"d":"91,0r-56,0r0,-177r-27,0r0,-41r27,0v-10,-54,50,-79,110,-65r-3,36v-26,-5,-59,-1,-51,29r47,0r0,41r-47,0r0,177"},"g":{"d":"183,-177v19,67,-34,98,-107,87v-12,6,-11,21,6,21v58,0,123,7,123,58v0,44,-29,70,-100,70v-83,0,-110,-48,-72,-92v-23,-17,-22,-57,10,-70v-45,-37,-28,-119,60,-119v19,0,39,3,54,12r37,-12r12,27xm155,-3v1,-22,-58,-16,-82,-20v-19,20,-8,40,31,40v41,0,51,-8,51,-20xm103,-180v-22,0,-29,8,-29,27v0,21,11,27,28,27v23,0,30,-7,30,-27v0,-20,-8,-27,-29,-27","w":211},"h":{"d":"208,0r-56,0r0,-139v6,-41,-57,-41,-72,-17r0,156r-56,0r0,-280r56,-3v1,26,-3,55,0,79v54,-40,128,-13,128,65r0,139","w":227},"i":{"d":"86,0r-57,0r0,-217r57,-2r0,219xm89,-265v0,16,-9,23,-31,23v-22,0,-32,-5,-32,-23v0,-15,10,-24,32,-24v22,0,31,8,31,24","w":114},"j":{"d":"86,-219r0,217v0,59,-47,69,-92,56r2,-39v17,5,34,2,34,-18r0,-214xm89,-266v0,16,-10,24,-32,24v-22,0,-31,-6,-31,-24v0,-15,9,-24,31,-24v22,0,32,9,32,24","w":114},"k":{"d":"80,-283r0,144r28,0r46,-79r62,0r-60,99r62,119r-63,0r-47,-94r-28,0r0,94r-56,0r0,-280","w":222},"l":{"d":"83,0r-56,0r0,-280r56,-3r0,283","w":109},"m":{"d":"319,0r-55,0r0,-139v0,-23,-12,-34,-33,-34v-19,0,-32,11,-32,32r0,141r-56,0r0,-141v2,-40,-51,-39,-65,-15r0,156r-56,0r0,-217r41,-3r9,21v29,-31,92,-32,113,6v41,-53,134,-32,134,53r0,140","w":339},"n":{"d":"206,0r-56,0r0,-139v4,-43,-55,-41,-72,-17r0,156r-56,0r0,-217r41,-3r8,19v50,-42,135,-21,135,62r0,139","w":226},"o":{"d":"212,-108v0,80,-30,113,-99,113v-69,0,-100,-33,-100,-113v0,-80,31,-114,100,-114v69,0,99,34,99,114xm71,-108v0,54,11,67,42,67v31,0,41,-14,41,-67v0,-53,-10,-68,-41,-68v-31,0,-42,15,-42,68","w":224},"p":{"d":"215,-109v0,77,-34,113,-85,113v-20,1,-37,-5,-52,-18r1,69r-57,0r0,-272r40,-2r10,19v62,-46,143,-24,143,91xm157,-110v0,-73,-49,-74,-78,-45r0,94v27,32,78,30,78,-49","w":226},"q":{"d":"204,55r-56,1v-1,-22,3,-48,0,-68v-64,37,-135,6,-135,-96v0,-108,87,-142,149,-90r6,-20r36,0r0,273xm112,-44v58,0,29,-66,36,-112v-27,-27,-77,-26,-77,48v0,49,11,64,41,64","w":227},"r":{"d":"78,0r-56,0r0,-217r45,-2v3,11,2,26,6,36v18,-33,46,-45,84,-36r-4,56v-39,-13,-76,8,-75,54r0,109","w":164},"s":{"d":"167,-68v0,44,-24,72,-83,72v-26,0,-50,-5,-68,-15r6,-46v18,10,43,16,62,16v22,0,32,-9,32,-22v0,-35,-102,-15,-102,-91v0,-62,89,-84,145,-56r-5,46v-18,-8,-42,-11,-58,-11v-18,0,-28,7,-28,18v0,33,99,14,99,89","w":178},"t":{"d":"137,-176r-49,0r0,111v-2,24,23,27,43,22r4,40v-47,19,-103,-3,-103,-60r0,-113r-24,0r0,-42r27,0r9,-49r44,-4r0,53r49,0r0,42"},"u":{"d":"204,-218r0,141v0,53,-30,81,-92,81v-62,0,-92,-29,-92,-81r0,-141r56,0r0,140v0,22,12,33,36,33v24,0,36,-11,36,-33r0,-140r56,0","w":223},"v":{"d":"168,-218r61,0r-79,218r-65,0r-79,-218r61,0r51,168","w":234},"w":{"d":"132,-218r58,0r36,171r29,-171r55,0r-49,218r-69,0r-30,-159r-31,159r-68,0r-52,-218r56,0r32,171","w":320},"x":{"d":"152,0r-42,-84r-41,84r-61,0r65,-110r-64,-108r65,0r40,81r39,-81r62,0r-61,106r63,112r-65,0","w":224},"y":{"d":"42,14v24,9,50,7,58,-19r-94,-213r63,0r58,160r43,-160r59,0r-75,216v-20,57,-61,72,-116,56","w":235},"z":{"d":"177,-179r-97,133r100,0r-1,46r-164,0r0,-39r97,-133r-94,0r2,-46r157,0r0,39","w":193},"{":{"d":"138,-243v-88,-6,-6,105,-59,125v52,20,-28,130,59,124r0,42v-63,2,-93,-20,-93,-63v0,-35,19,-84,-17,-92r0,-23v36,-8,17,-57,17,-92v0,-43,29,-65,93,-63r0,42","w":138},"|":{"d":"31,64r0,-355r43,0r0,355r-43,0","w":104},"}":{"d":"1,6v88,6,6,-104,59,-124v-52,-21,28,-131,-59,-125r0,-42v63,-2,93,20,93,63v0,35,-19,84,17,92r0,23v-36,8,-17,57,-17,92v0,43,-29,65,-93,63r0,-42","w":138},"~":{"d":"58,-212r-32,0v2,-45,19,-69,52,-69v35,0,80,49,95,5r32,0v-2,46,-22,69,-53,69v-37,-1,-77,-49,-94,-5","w":230},"\u00c4":{"d":"194,0r-15,-53r-98,0r-15,53r-64,0r93,-270r73,0r94,270r-68,0xm132,-224v-14,38,-23,81,-36,121r69,0xm119,-307v0,14,-7,22,-23,22v-16,0,-24,-6,-24,-22v0,-15,8,-23,24,-23v16,0,23,8,23,23xm190,-307v0,14,-7,22,-23,22v-16,0,-23,-6,-23,-22v0,-15,7,-23,23,-23v16,0,23,8,23,23","w":264},"\u00c5":{"d":"93,-263v-18,-25,-11,-62,37,-62v46,0,56,32,40,60r92,265r-68,0r-15,-53r-98,0r-15,53r-64,0xm132,-224v-14,38,-23,81,-36,121r69,0xm113,-287v0,8,3,12,18,12v13,0,18,-4,18,-12v0,-8,-4,-13,-18,-13v-15,0,-18,5,-18,13","w":264},"\u00c7":{"d":"93,68r23,-64v-67,-8,-101,-53,-101,-141v0,-116,87,-161,188,-127r-6,53v-14,-5,-33,-9,-53,-9v-49,0,-65,20,-65,84v0,96,58,97,119,77r6,49v-13,6,-32,12,-50,14r-11,64r-50,0","w":214},"\u00c9":{"d":"86,-53r125,0r-2,53r-183,0r0,-270r178,0r1,54r-119,0r0,53r100,0r0,49r-100,0r0,61xm113,-329r71,0r-50,44r-45,0","w":222},"\u00d1":{"d":"243,0r-42,0r-122,-171r1,171r-54,0r0,-270r51,0r113,163r0,-163r53,0r0,270xm99,-286r-25,-1v1,-26,14,-43,37,-43v24,0,39,15,51,15v6,0,11,-3,12,-11r24,1v-1,26,-16,43,-38,43v-31,1,-48,-31,-61,-4","w":268},"\u00d6":{"d":"253,-135v0,98,-33,140,-118,140v-83,0,-120,-44,-120,-140v0,-96,36,-139,120,-139v85,0,118,43,118,139xm190,-135v0,-68,-14,-85,-55,-85v-41,0,-56,17,-56,85v0,68,15,86,56,86v41,0,55,-18,55,-86xm123,-307v0,14,-7,22,-23,22v-16,0,-24,-6,-24,-22v0,-15,8,-23,24,-23v16,0,23,8,23,23xm194,-307v0,14,-7,22,-23,22v-16,0,-23,-6,-23,-22v0,-15,7,-23,23,-23v16,0,23,8,23,23","w":269},"\u00dc":{"d":"239,-270r0,174v0,68,-36,101,-108,101v-71,0,-109,-33,-109,-101r0,-174r60,0r0,173v0,33,15,47,49,47v34,0,48,-14,48,-47r0,-173r60,0xm119,-307v0,14,-7,22,-23,22v-16,0,-24,-6,-24,-22v0,-15,8,-23,24,-23v16,0,23,8,23,23xm190,-307v0,14,-7,22,-23,22v-16,0,-23,-6,-23,-22v0,-15,7,-23,23,-23v16,0,23,8,23,23","w":261},"\u00e1":{"d":"146,0v-2,-7,-1,-16,-5,-21v-37,44,-127,31,-127,-48v0,-55,64,-81,120,-62v12,-57,-67,-48,-102,-32r-5,-45v22,-9,47,-14,75,-14v118,0,81,122,87,222r-43,0xm97,-41v32,-1,42,-20,37,-53v-20,-8,-76,-6,-68,25v0,21,13,28,31,28xm95,-288r64,0r-43,52r-42,0","w":209},"\u00e0":{"d":"146,0v-2,-7,-1,-16,-5,-21v-37,44,-127,31,-127,-48v0,-55,64,-81,120,-62v12,-57,-67,-48,-102,-32r-5,-45v22,-9,47,-14,75,-14v118,0,81,122,87,222r-43,0xm97,-41v32,-1,42,-20,37,-53v-20,-8,-76,-6,-68,25v0,21,13,28,31,28xm130,-236r-42,0r-43,-52r64,0","w":209},"\u00e2":{"d":"146,0v-2,-7,-1,-16,-5,-21v-37,44,-127,31,-127,-48v0,-55,64,-81,120,-62v12,-57,-67,-48,-102,-32r-5,-45v22,-9,47,-14,75,-14v118,0,81,122,87,222r-43,0xm97,-41v32,-1,42,-20,37,-53v-20,-8,-76,-6,-68,25v0,21,13,28,31,28xm79,-288r48,0r36,52r-41,0r-19,-30r-18,30r-41,0","w":209},"\u00e4":{"d":"146,0v-2,-7,-1,-16,-5,-21v-37,44,-127,31,-127,-48v0,-55,64,-81,120,-62v12,-57,-67,-48,-102,-32r-5,-45v22,-9,47,-14,75,-14v118,0,81,122,87,222r-43,0xm97,-41v32,-1,42,-20,37,-53v-20,-8,-76,-6,-68,25v0,21,13,28,31,28xm96,-266v0,15,-7,24,-24,24v-16,0,-23,-7,-23,-24v0,-15,7,-23,23,-23v17,0,24,8,24,23xm161,-266v0,15,-6,24,-23,24v-16,0,-24,-7,-24,-24v0,-15,8,-23,24,-23v17,0,23,8,23,23","w":209},"\u00e3":{"d":"146,0v-2,-7,-1,-16,-5,-21v-37,44,-127,31,-127,-48v0,-55,64,-81,120,-62v12,-57,-67,-48,-102,-32r-5,-45v22,-9,47,-14,75,-14v118,0,81,122,87,222r-43,0xm97,-41v32,-1,42,-20,37,-53v-20,-8,-76,-6,-68,25v0,21,13,28,31,28xm69,-240r-26,-1v1,-28,15,-48,37,-48v30,-1,50,40,61,4r26,0v-1,29,-16,48,-38,48v-31,0,-49,-39,-60,-3","w":209},"\u00e5":{"d":"146,0v-2,-7,-1,-16,-5,-21v-37,44,-127,31,-127,-48v0,-55,64,-81,120,-62v12,-57,-67,-48,-102,-32r-5,-45v22,-9,47,-14,75,-14v118,0,81,122,87,222r-43,0xm97,-41v32,-1,42,-20,37,-53v-20,-8,-76,-6,-68,25v0,21,13,28,31,28xm59,-267v0,-20,13,-33,45,-33v31,0,45,14,45,33v0,22,-13,32,-45,32v-30,0,-45,-9,-45,-32xm86,-267v0,7,4,11,19,11v13,0,18,-4,18,-11v0,-7,-4,-11,-18,-11v-14,0,-19,4,-19,11","w":209},"\u00e7":{"d":"67,68r23,-65v-50,-8,-77,-45,-77,-112v0,-95,71,-133,152,-103r-3,47v-46,-16,-91,-8,-91,56v0,67,46,75,92,57r4,44v-10,6,-23,10,-39,11r-12,65r-49,0","w":177},"\u00e9":{"d":"121,4v-75,0,-108,-40,-108,-116v0,-69,30,-110,96,-110v65,0,99,52,88,128r-127,0v-1,60,71,56,116,39r7,45v-18,8,-44,14,-72,14xm69,-131r79,0v-1,-32,-16,-45,-39,-45v-27,0,-37,13,-40,45xm101,-288r64,0r-43,52r-42,0","w":210},"\u00e8":{"d":"121,4v-75,0,-108,-40,-108,-116v0,-69,30,-110,96,-110v65,0,99,52,88,128r-127,0v-1,60,71,56,116,39r7,45v-18,8,-44,14,-72,14xm69,-131r79,0v-1,-32,-16,-45,-39,-45v-27,0,-37,13,-40,45xm136,-236r-42,0r-44,-52r64,0","w":210},"\u00ea":{"d":"121,4v-75,0,-108,-40,-108,-116v0,-69,30,-110,96,-110v65,0,99,52,88,128r-127,0v-1,60,71,56,116,39r7,45v-18,8,-44,14,-72,14xm69,-131r79,0v-1,-32,-16,-45,-39,-45v-27,0,-37,13,-40,45xm84,-288r49,0r36,52r-42,0r-18,-30r-19,30r-41,0","w":210},"\u00eb":{"d":"121,4v-75,0,-108,-40,-108,-116v0,-69,30,-110,96,-110v65,0,99,52,88,128r-127,0v-1,60,71,56,116,39r7,45v-18,8,-44,14,-72,14xm69,-131r79,0v-1,-32,-16,-45,-39,-45v-27,0,-37,13,-40,45xm96,-266v0,15,-6,24,-23,24v-16,0,-24,-7,-24,-24v0,-15,8,-23,24,-23v17,0,23,8,23,23xm162,-266v0,15,-6,24,-23,24v-16,0,-24,-7,-24,-24v0,-15,8,-23,24,-23v17,0,23,8,23,23","w":210},"\u00ed":{"d":"86,0r-57,0r0,-217r57,-2r0,219xm50,-288r64,0r-43,52r-42,0","w":114},"\u00ec":{"d":"86,0r-57,0r0,-217r57,-2r0,219xm85,-236r-42,0r-43,-52r64,0","w":114},"\u00ee":{"d":"86,0r-57,0r0,-217r57,-2r0,219xm34,-288r48,0r36,52r-41,0r-19,-30r-18,30r-41,0","w":114},"\u00ef":{"d":"86,0r-57,0r0,-217r57,-2r0,219xm50,-266v0,15,-7,24,-24,24v-16,0,-23,-7,-23,-24v0,-15,7,-23,23,-23v17,0,24,8,24,23xm116,-266v0,15,-7,24,-24,24v-16,0,-24,-7,-24,-24v0,-15,8,-23,24,-23v17,0,24,8,24,23","w":114},"\u00f1":{"d":"206,0r-56,0r0,-139v4,-43,-55,-41,-72,-17r0,156r-56,0r0,-217r41,-3r8,19v50,-42,135,-21,135,62r0,139xm81,-240r-26,-1v1,-28,15,-48,37,-48v30,0,49,39,61,4r26,0v-1,29,-16,48,-38,48v-31,0,-49,-39,-60,-3","w":226},"\u00f3":{"d":"212,-108v0,80,-30,113,-99,113v-69,0,-100,-33,-100,-113v0,-80,31,-114,100,-114v69,0,99,34,99,114xm71,-108v0,54,11,67,42,67v31,0,41,-14,41,-67v0,-53,-10,-68,-41,-68v-31,0,-42,15,-42,68xm105,-288r64,0r-43,52r-42,0","w":224},"\u00f2":{"d":"212,-108v0,80,-30,113,-99,113v-69,0,-100,-33,-100,-113v0,-80,31,-114,100,-114v69,0,99,34,99,114xm71,-108v0,54,11,67,42,67v31,0,41,-14,41,-67v0,-53,-10,-68,-41,-68v-31,0,-42,15,-42,68xm140,-236r-42,0r-44,-52r64,0","w":224},"\u00f4":{"d":"212,-108v0,80,-30,113,-99,113v-69,0,-100,-33,-100,-113v0,-80,31,-114,100,-114v69,0,99,34,99,114xm71,-108v0,54,11,67,42,67v31,0,41,-14,41,-67v0,-53,-10,-68,-41,-68v-31,0,-42,15,-42,68xm88,-288r48,0r36,52r-41,0r-19,-30r-18,30r-41,0","w":224},"\u00f6":{"d":"212,-108v0,80,-30,113,-99,113v-69,0,-100,-33,-100,-113v0,-80,31,-114,100,-114v69,0,99,34,99,114xm71,-108v0,54,11,67,42,67v31,0,41,-14,41,-67v0,-53,-10,-68,-41,-68v-31,0,-42,15,-42,68xm103,-266v0,15,-6,24,-23,24v-16,0,-24,-7,-24,-24v0,-15,8,-23,24,-23v17,0,23,8,23,23xm169,-266v0,15,-7,24,-24,24v-16,0,-23,-7,-23,-24v0,-15,7,-23,23,-23v17,0,24,8,24,23","w":224},"\u00f5":{"d":"212,-108v0,80,-30,113,-99,113v-69,0,-100,-33,-100,-113v0,-80,31,-114,100,-114v69,0,99,34,99,114xm71,-108v0,54,11,67,42,67v31,0,41,-14,41,-67v0,-53,-10,-68,-41,-68v-31,0,-42,15,-42,68xm78,-240r-26,-1v1,-28,15,-48,37,-48v30,-1,50,40,61,4r26,0v-1,29,-16,48,-38,48v-31,0,-49,-39,-60,-3","w":224},"\u00fa":{"d":"204,-218r0,141v0,53,-30,81,-92,81v-62,0,-91,-29,-91,-81r0,-141r55,0r0,140v0,22,12,33,36,33v24,0,36,-11,36,-33r0,-140r56,0xm104,-288r64,0r-43,52r-42,0","w":223},"\u00f9":{"d":"204,-218r0,141v0,53,-30,81,-92,81v-62,0,-91,-29,-91,-81r0,-141r55,0r0,140v0,22,12,33,36,33v24,0,36,-11,36,-33r0,-140r56,0xm140,-236r-42,0r-44,-52r64,0","w":223},"\u00fb":{"d":"204,-218r0,141v0,53,-30,81,-92,81v-62,0,-91,-29,-91,-81r0,-141r55,0r0,140v0,22,12,33,36,33v24,0,36,-11,36,-33r0,-140r56,0xm88,-288r48,0r36,52r-41,0r-19,-30r-18,30r-41,0","w":223},"\u00fc":{"d":"204,-218r0,141v0,53,-30,81,-92,81v-62,0,-91,-29,-91,-81r0,-141r55,0r0,140v0,22,12,33,36,33v24,0,36,-11,36,-33r0,-140r56,0xm103,-266v0,15,-7,24,-24,24v-16,0,-23,-7,-23,-24v0,-15,7,-23,23,-23v17,0,24,8,24,23xm168,-266v0,15,-6,24,-23,24v-16,0,-24,-7,-24,-24v0,-15,8,-23,24,-23v17,0,23,8,23,23","w":223},"\u2020":{"d":"11,-221r54,4r-5,-66r56,0r-4,66r54,-4r0,52r-54,-4r4,226r-56,0r5,-226r-54,4r0,-52","w":177},"\u00b0":{"d":"12,-243v0,-28,22,-51,50,-51v28,0,50,22,50,51v0,28,-22,51,-50,51v-28,0,-50,-23,-50,-51xm37,-243v0,14,11,24,25,24v14,0,25,-10,25,-24v0,-14,-11,-25,-25,-25v-15,0,-25,11,-25,25","w":123},"\u00a2":{"d":"166,-212r-3,47v-46,-16,-91,-8,-91,56v0,66,46,75,93,57r3,44v-10,6,-23,10,-39,11r-3,43r-43,0r3,-44v-47,-9,-72,-46,-72,-111v0,-66,25,-105,82,-112r3,-42r43,0r-3,43v10,2,19,5,27,8","w":181},"\u00a3":{"d":"19,-111r-2,-45r17,0v-20,-66,3,-116,101,-119v28,0,49,6,67,12r-7,51v-32,-15,-114,-13,-106,26v0,11,2,20,5,30r90,0r0,45r-79,0v4,28,-4,50,-23,61v38,-5,91,-8,132,-1v0,1,-2,52,-3,54v-66,-7,-123,-8,-194,-1r-3,-53v27,-6,39,-31,32,-60r-27,0","w":225},"\u00a7":{"d":"16,-118v0,-20,9,-41,30,-54v-50,-39,-18,-108,63,-108v23,0,53,4,72,14r-4,42v-23,-9,-44,-13,-65,-13v-21,0,-32,7,-32,19v0,31,113,31,113,108v0,20,-9,41,-30,54v51,39,19,108,-63,108v-23,0,-52,-5,-71,-15r4,-42v22,9,43,13,64,13v21,0,33,-6,33,-18v0,-31,-114,-31,-114,-108xm122,-80v39,-25,4,-53,-34,-68v-41,24,-4,53,34,68","w":204},"\u2022":{"d":"17,-116v0,-39,18,-58,56,-58v38,0,58,19,58,58v0,39,-20,58,-58,58v-38,0,-56,-19,-56,-58","w":149},"\u00b6":{"d":"114,58r-48,0r0,-225v-32,-1,-56,-18,-56,-53v0,-29,21,-50,58,-50r171,0r-2,45r-27,0r0,283r-49,0r0,-283r-47,0r0,283","w":252},"\u00df":{"d":"24,0r0,-176v0,-65,32,-99,93,-99v47,0,77,28,77,62v0,31,-33,46,-33,58v0,14,65,25,65,82v0,66,-79,93,-136,65r3,-47v19,12,76,16,76,-16v0,-33,-68,-42,-68,-77v0,-26,39,-43,39,-63v0,-10,-9,-17,-25,-17v-24,0,-35,13,-35,47r0,181r-56,0","w":236},"\u00ae":{"d":"10,-230v0,-39,31,-71,70,-71v37,0,68,32,68,71v0,38,-31,69,-68,69v-39,0,-70,-31,-70,-69xm26,-231v0,29,24,54,54,54v30,0,53,-25,53,-54v0,-30,-23,-53,-53,-53v-30,0,-54,23,-54,53xm82,-269v35,-3,41,32,20,45r13,29r-24,0v-6,-9,-2,-28,-20,-26r0,26r-23,0r0,-74r34,0xm92,-243v1,-9,-12,-7,-21,-7r0,15v9,0,22,1,21,-8","w":158},"\u00a9":{"d":"16,-136v0,-78,63,-141,141,-141v78,0,141,63,141,141v0,78,-63,141,-141,141v-78,0,-141,-63,-141,-141xm44,-136v0,61,50,112,113,112v63,0,113,-50,113,-112v0,-60,-50,-111,-113,-111v-63,0,-113,51,-113,111xm218,-207r-4,39v-33,-20,-96,-8,-91,32v-6,43,63,52,93,32v2,13,4,25,5,38v-13,12,-37,24,-62,24v-54,0,-92,-42,-92,-94v0,-48,34,-91,92,-91v25,0,46,9,59,20","w":313},"\u2122":{"d":"237,-170r-29,0v-1,-21,3,-47,0,-66r-24,66r-23,0r-25,-65r0,65r-28,0r0,-103r41,0v9,21,15,45,25,65r23,-65r40,0r0,103xm96,-244r-27,0r0,74r-34,0r0,-74r-28,0r0,-29r89,0r0,29","w":249},"\u00b4":{"d":"72,-288r64,0r-43,52r-42,0"},"\u00a8":{"d":"64,-266v0,15,-7,24,-24,24v-16,0,-23,-7,-23,-24v0,-15,7,-23,23,-23v17,0,24,8,24,23xm130,-266v0,15,-7,24,-24,24v-16,0,-24,-7,-24,-24v0,-15,8,-23,24,-23v17,0,24,8,24,23"},"\u00c6":{"d":"366,-216r-119,0r4,53r95,0r0,49r-92,0r3,61r114,0r-2,53r-170,0r-3,-53r-93,0r-25,53r-71,0r145,-270r213,0xm187,-229r-60,126r66,0","w":383},"\u00d8":{"d":"41,6r-29,-26r20,-25v-12,-22,-17,-52,-17,-90v0,-96,35,-139,120,-139v34,0,59,7,78,22r19,-23r28,27r-22,27v10,22,15,50,15,86v0,98,-34,140,-118,140v-33,0,-58,-6,-77,-20xm79,-135v1,15,0,30,3,40v30,-38,63,-73,94,-110v-9,-11,-22,-15,-42,-15v-41,0,-55,17,-55,85xm190,-135v-1,-14,1,-28,-2,-36r-94,108v9,10,23,14,41,14v41,0,55,-18,55,-86","w":269},"\u00b1":{"d":"199,-120r-59,0r0,54r-50,0r0,-54r-58,0r0,-47r58,0r0,-55r50,0r0,55r59,0r0,47xm198,-12r-166,0r0,-42r166,0r0,42","w":230},"\u00a5":{"d":"49,-131r33,0r-69,-139r68,0r50,141v14,-49,31,-94,47,-141r67,0r-68,139r35,0r0,31r-49,0r0,15r49,0r0,30r-49,0r0,55r-67,0r0,-55r-47,0r0,-30r47,0r0,-15r-47,0r0,-31","w":258},"\u03bc":{"d":"159,-14v-21,26,-73,19,-88,-6v1,26,2,51,5,74r-54,4r0,-276r56,0r0,140v0,20,15,32,37,32v21,0,35,-10,35,-30r0,-142r56,0r0,217r-40,3","w":226},"\u00aa":{"d":"108,-121v-2,-5,-1,-12,-5,-15v-30,32,-91,20,-91,-40v0,-43,45,-66,86,-50v8,-40,-48,-33,-73,-21r-3,-39v52,-22,123,-15,123,59r0,106r-37,0xm75,-158v20,0,26,-14,23,-36v-14,-5,-42,-6,-42,17v0,14,7,19,19,19","w":159},"\u00ba":{"d":"162,-208v0,64,-22,89,-74,89v-51,0,-75,-25,-75,-89v0,-64,24,-89,75,-89v52,0,74,25,74,89xm62,-208v0,40,7,49,26,49v19,0,26,-9,26,-49v0,-41,-7,-49,-26,-49v-19,0,-26,8,-26,49","w":175},"\u00e6":{"d":"27,-208v38,-17,117,-23,139,9v56,-47,157,-22,149,78v0,8,0,19,-1,27r-128,0v-1,61,73,56,117,38r6,46v-41,21,-133,18,-152,-18v-34,50,-152,44,-143,-40v-6,-55,65,-81,120,-62v13,-58,-67,-49,-102,-33xm97,-40v31,0,41,-20,37,-53v-19,-9,-76,-7,-68,24v0,21,13,29,31,29xm185,-131r79,0v-1,-32,-16,-45,-39,-45v-27,0,-37,13,-40,45","w":327},"\u00f8":{"d":"35,5r-24,-22r16,-19v-10,-18,-14,-41,-14,-72v0,-80,31,-114,100,-114v26,0,46,4,61,14r13,-16r23,21r-14,18v11,18,16,44,16,77v0,80,-30,113,-99,113v-28,0,-49,-5,-65,-16xm113,-41v39,10,45,-48,40,-96r-74,82v7,11,18,14,34,14xm113,-176v-38,0,-47,40,-42,90r72,-79v-7,-8,-16,-11,-30,-11","w":224},"\u00bf":{"d":"10,-32v0,-40,23,-66,61,-86r2,-40r44,0r3,60v-31,17,-53,33,-53,57v0,39,71,27,89,6r19,45v-41,41,-165,35,-165,-42xm64,-213v0,-17,9,-29,31,-29v22,0,32,9,32,29v0,18,-10,28,-32,28v-22,0,-31,-10,-31,-28","w":176},"\u00a1":{"d":"32,-158r45,0r7,206r-59,0xm22,-210v0,-17,10,-27,32,-27v22,0,31,7,31,27v0,18,-9,29,-31,29v-22,0,-32,-11,-32,-29","w":108},"\u00ac":{"d":"151,-98r-116,0r0,-48r161,0r0,102r-45,0r0,-54","w":230},"\u0192":{"d":"47,55r-56,0r50,-230r-22,0r9,-43r22,0v1,-50,57,-79,115,-62r-11,36v-25,-8,-50,0,-48,26r44,0r-9,43r-44,0","w":153},"\u00ab":{"d":"212,-152r-58,37r58,36r0,43r-113,-77r0,-4r113,-78r0,43xm121,-152r-58,37r58,36r0,43r-113,-77r0,-4r113,-78r0,43","w":234},"\u00bb":{"d":"111,-36r0,-43r57,-36r-57,-37r0,-43r113,78r0,4xm20,-36r0,-43r57,-36r-57,-37r0,-43r112,78r0,4","w":234},"\u2026":{"d":"249,-27v0,19,-9,31,-32,31v-23,0,-32,-8,-32,-31v0,-20,9,-31,32,-31v23,0,32,11,32,31xm166,-27v0,19,-9,31,-32,31v-23,0,-32,-8,-32,-31v0,-20,9,-31,32,-31v23,0,32,11,32,31xm81,-27v0,19,-9,31,-32,31v-23,0,-33,-8,-33,-31v0,-20,10,-31,33,-31v23,0,32,11,32,31","w":266},"\u00a0":{"w":95},"\u00c0":{"d":"194,0r-15,-53r-98,0r-15,53r-64,0r93,-270r73,0r94,270r-68,0xm132,-224v-14,38,-23,81,-36,121r69,0xm160,-286r-46,0r-46,-43r67,0","w":264},"\u00c3":{"d":"194,0r-15,-53r-98,0r-15,53r-64,0r93,-270r73,0r94,270r-68,0xm132,-224v-14,38,-23,81,-36,121r69,0xm95,-286r-26,-1v1,-26,15,-43,38,-43v24,0,39,15,51,15v6,0,10,-3,11,-11r25,1v-1,26,-16,43,-38,43v-31,1,-48,-31,-61,-4","w":264},"\u00d5":{"d":"253,-135v0,98,-33,140,-118,140v-83,0,-120,-44,-120,-140v0,-96,36,-139,120,-139v85,0,118,43,118,139xm190,-135v0,-68,-14,-85,-55,-85v-41,0,-56,17,-56,85v0,68,15,86,56,86v41,0,55,-18,55,-86xm99,-286r-26,-1v1,-26,15,-43,38,-43v24,0,39,15,51,15v6,0,10,-3,11,-11r25,1v-1,26,-16,43,-38,43v-31,1,-48,-31,-61,-4","w":269},"\u0152":{"d":"372,0r-178,0r0,-22v-16,18,-40,27,-71,27v-72,0,-108,-44,-108,-140v0,-96,36,-139,109,-139v28,0,55,11,70,23r0,-19r172,0r2,54r-119,0r0,53r99,0r0,49r-99,0r0,61r124,0xm189,-135v0,-68,-13,-85,-54,-85v-41,0,-56,17,-56,85v0,68,15,86,56,86v41,0,54,-18,54,-86","w":385},"\u0153":{"d":"335,-10v-42,20,-128,21,-149,-17v-14,22,-39,32,-77,32v-65,0,-95,-33,-95,-113v0,-80,31,-114,95,-114v37,0,61,10,75,29v14,-19,36,-29,69,-29v63,0,96,50,87,128r-127,0v-1,60,73,56,116,38xm71,-108v0,54,12,67,43,67v31,0,41,-14,41,-67v0,-53,-10,-68,-41,-68v-31,0,-43,15,-43,68xm212,-131r78,0v-1,-32,-15,-45,-38,-45v-27,0,-38,13,-40,45","w":353},"\u2013":{"d":"19,-143r148,0r0,40r-148,0r0,-40","w":185},"\u2014":{"d":"19,-143r214,0r0,40r-214,0r0,-40","w":250},"\u201c":{"d":"46,-186v-60,-6,-22,-79,1,-110r20,5r-9,44v26,10,26,65,-12,61xm125,-187v-59,-6,-23,-78,0,-109r20,5r-9,44v27,8,28,64,-11,60","w":169},"\u201d":{"d":"45,-281v60,6,22,78,-1,109r-20,-5r9,-43v-26,-9,-27,-65,12,-61xm123,-281v60,6,23,78,0,109r-20,-5r9,-43v-26,-9,-28,-65,11,-61","w":169},"\u2018":{"d":"46,-186v-60,-6,-22,-79,1,-110r20,5r-9,44v26,10,26,65,-12,61","w":91},"\u2019":{"d":"45,-282v60,6,22,79,-1,110r-20,-5r9,-44v-27,-9,-26,-65,12,-61","w":91},"\u00f7":{"d":"143,-189v0,18,-12,27,-35,27v-22,0,-34,-6,-34,-27v0,-18,12,-28,34,-28v23,0,35,10,35,28xm143,-52v0,18,-12,27,-35,27v-22,0,-34,-6,-34,-27v0,-18,12,-28,34,-28v23,0,35,10,35,28xm196,-95r-175,0r0,-52r175,0r0,52","w":216},"\u00ff":{"d":"42,14v24,9,50,7,58,-19r-94,-213r63,0r58,160r43,-160r59,0r-75,216v-20,57,-61,72,-116,56xm109,-266v0,15,-7,24,-24,24v-16,0,-23,-7,-23,-24v0,-15,7,-23,23,-23v17,0,24,8,24,23xm174,-266v0,15,-6,24,-23,24v-16,0,-24,-7,-24,-24v0,-15,8,-23,24,-23v17,0,23,8,23,23","w":235},"\u0178":{"d":"2,-270r69,0r57,129r55,-129r66,0r-92,184r0,86r-62,0r0,-86xm114,-307v0,14,-7,22,-23,22v-16,0,-23,-6,-23,-22v0,-15,7,-23,23,-23v16,0,23,8,23,23xm186,-307v0,14,-7,22,-23,22v-16,0,-24,-6,-24,-22v0,-15,8,-23,24,-23v16,0,23,8,23,23","w":251},"\u2044":{"d":"132,-270r40,0r-179,270r-39,0","w":110},"\u20ac":{"d":"173,-125r-7,29r-71,0v8,57,67,61,112,41r4,43v-17,9,-40,15,-66,15v-63,0,-98,-32,-108,-99r-29,0r0,-29r26,0r0,-16r-26,0r0,-31r28,0v7,-84,95,-120,173,-89r-11,47v-43,-17,-96,-4,-102,42r89,0r-6,31r-87,0r0,16r81,0","w":223},"\u2039":{"d":"124,-152r-58,37r58,36r0,43r-113,-77r0,-4r113,-78r0,43","w":141},"\u203a":{"d":"18,-36r0,-43r58,-36r-58,-37r0,-43r113,78r0,4","w":141},"\ufb01":{"d":"91,-177r0,177r-56,0r0,-177r-27,0r0,-41r27,0v-10,-53,47,-78,107,-66r-2,37v-25,-5,-56,0,-49,29r135,0r0,218r-56,0r0,-177r-79,0xm230,-266v0,16,-10,24,-32,24v-22,0,-31,-6,-31,-24v0,-15,9,-24,31,-24v22,0,32,9,32,24","w":255},"\ufb02":{"d":"217,0r-56,0r0,-248v-31,-6,-79,-5,-70,30r35,0r0,41r-35,0r0,177r-56,0r0,-177r-27,0r0,-41r27,0v-2,-44,19,-70,96,-70v32,0,54,5,86,6r0,282","w":244},"\u2021":{"d":"166,-63r0,52r-54,-4r4,68r-56,0r5,-68r-54,4r0,-52r55,3r-1,-113r-54,4r0,-52r54,4r-5,-66r56,0r-4,66r54,-4r0,52r-54,-4r0,113","w":177},"\u00b7":{"d":"85,-125v0,19,-9,32,-32,32v-23,0,-32,-9,-32,-32v0,-20,9,-31,32,-31v23,0,32,11,32,31","w":106},"\u201a":{"d":"45,-57v60,6,22,78,-1,109r-20,-5r9,-43v-26,-9,-27,-65,12,-61","w":91},"\u201e":{"d":"123,-57v60,6,23,78,0,109r-20,-5r9,-43v-26,-9,-28,-65,11,-61xm45,-57v60,6,22,78,-1,109r-20,-5r9,-43v-26,-9,-27,-65,12,-61","w":169},"\u2030":{"d":"123,-211v0,42,-19,64,-56,64v-39,0,-56,-22,-56,-64v0,-44,16,-62,56,-62v37,0,56,17,56,62xm86,-211v0,-22,-6,-28,-19,-28v-13,0,-19,5,-19,28v0,22,6,28,19,28v13,0,19,-5,19,-28xm188,-257r32,25r-146,222r-33,-25xm255,-59v0,42,-20,63,-57,63v-39,0,-55,-21,-55,-63v0,-44,16,-64,56,-64v37,0,56,19,56,64xm218,-59v0,-22,-6,-28,-19,-28v-13,0,-19,6,-19,28v0,22,6,27,19,27v13,0,19,-5,19,-27xm375,-59v0,42,-19,63,-56,63v-39,0,-56,-21,-56,-63v0,-44,17,-64,56,-64v37,0,56,19,56,64xm338,-59v0,-22,-6,-28,-19,-28v-13,0,-19,6,-19,28v0,22,6,27,19,27v13,0,19,-5,19,-27","w":386},"\u00c2":{"d":"194,0r-15,-53r-98,0r-15,53r-64,0r93,-270r73,0r94,270r-68,0xm132,-224v-14,38,-23,81,-36,121r69,0xm101,-329r60,0r38,44r-49,0r-19,-21r-19,21r-48,0","w":264},"\u00ca":{"d":"86,-53r125,0r-2,53r-183,0r0,-270r178,0r1,54r-119,0r0,53r100,0r0,49r-100,0r0,61xm87,-329r60,0r38,44r-49,0r-19,-21r-18,21r-49,0","w":222},"\u00c1":{"d":"194,0r-15,-53r-98,0r-15,53r-64,0r93,-270r73,0r94,270r-68,0xm132,-224v-14,38,-23,81,-36,121r69,0xm126,-329r72,0r-50,44r-45,0","w":264},"\u00cb":{"d":"86,-53r125,0r-2,53r-183,0r0,-270r178,0r1,54r-119,0r0,53r100,0r0,49r-100,0r0,61xm105,-307v0,14,-7,22,-23,22v-16,0,-23,-6,-23,-22v0,-15,7,-23,23,-23v16,0,23,8,23,23xm177,-307v0,14,-7,22,-23,22v-16,0,-24,-6,-24,-22v0,-15,8,-23,24,-23v16,0,23,8,23,23","w":222},"\u00c8":{"d":"86,-53r125,0r-2,53r-183,0r0,-270r178,0r1,54r-119,0r0,53r100,0r0,49r-100,0r0,61xm147,-286r-46,0r-46,-43r66,0","w":222},"\u00cd":{"d":"30,0r0,-270r61,0r0,270r-61,0xm55,-329r72,0r-50,44r-45,0","w":120},"\u00ce":{"d":"30,0r0,-270r61,0r0,270r-61,0xm30,-329r60,0r38,44r-49,0r-19,-21r-19,21r-48,0","w":120},"\u00cf":{"d":"30,0r0,-270r61,0r0,270r-61,0xm48,-307v0,14,-7,22,-23,22v-16,0,-24,-6,-24,-22v0,-15,8,-23,24,-23v16,0,23,8,23,23xm120,-307v0,14,-8,22,-24,22v-16,0,-23,-6,-23,-22v0,-15,7,-23,23,-23v16,0,24,8,24,23","w":120},"\u00cc":{"d":"30,0r0,-270r61,0r0,270r-61,0xm89,-286r-45,0r-47,-43r67,0","w":120},"\u00d3":{"d":"253,-135v0,98,-33,140,-118,140v-83,0,-120,-44,-120,-140v0,-96,36,-139,120,-139v85,0,118,43,118,139xm190,-135v0,-68,-14,-85,-55,-85v-41,0,-56,17,-56,85v0,68,15,86,56,86v41,0,55,-18,55,-86xm130,-329r71,0r-50,44r-44,0","w":269},"\u00d4":{"d":"253,-135v0,98,-33,140,-118,140v-83,0,-120,-44,-120,-140v0,-96,36,-139,120,-139v85,0,118,43,118,139xm190,-135v0,-68,-14,-85,-55,-85v-41,0,-56,17,-56,85v0,68,15,86,56,86v41,0,55,-18,55,-86xm105,-329r59,0r39,44r-49,0r-19,-21r-19,21r-48,0","w":269},"\u00d2":{"d":"253,-135v0,98,-33,140,-118,140v-83,0,-120,-44,-120,-140v0,-96,36,-139,120,-139v85,0,118,43,118,139xm190,-135v0,-68,-14,-85,-55,-85v-41,0,-56,17,-56,85v0,68,15,86,56,86v41,0,55,-18,55,-86xm168,-286r-46,0r-46,-43r67,0","w":269},"\u00da":{"d":"239,-270r0,174v0,68,-36,101,-108,101v-71,0,-109,-33,-109,-101r0,-174r60,0r0,173v0,33,15,47,49,47v34,0,48,-14,48,-47r0,-173r60,0xm126,-329r72,0r-50,44r-45,0","w":261},"\u00db":{"d":"239,-270r0,174v0,68,-36,101,-108,101v-71,0,-109,-33,-109,-101r0,-174r60,0r0,173v0,33,15,47,49,47v34,0,48,-14,48,-47r0,-173r60,0xm101,-329r59,0r39,44r-49,0r-19,-21r-19,21r-48,0","w":261},"\u00d9":{"d":"239,-270r0,174v0,68,-36,101,-108,101v-71,0,-109,-33,-109,-101r0,-174r60,0r0,173v0,33,15,47,49,47v34,0,48,-14,48,-47r0,-173r60,0xm160,-286r-46,0r-46,-43r67,0","w":261},"\u0131":{"d":"86,0r-57,0r0,-217r57,-2r0,219","w":114},"\u02c6":{"d":"49,-288r48,0r36,52r-41,0r-19,-30r-18,30r-42,0"},"\u02dc":{"d":"39,-240r-25,-1v1,-28,15,-48,37,-48v30,0,49,39,61,4r25,0v-1,29,-15,48,-37,48v-31,0,-49,-39,-61,-3"},"\u00af":{"d":"131,-281r0,35r-115,0r0,-35r115,0"},"\u02d8":{"d":"92,-288r38,0v0,35,-17,55,-57,55v-42,0,-58,-20,-58,-55r38,0v0,19,8,26,20,26v11,0,19,-6,19,-26"},"\u02d9":{"d":"105,-266v0,16,-10,24,-32,24v-22,0,-32,-6,-32,-24v0,-15,10,-24,32,-24v22,0,32,9,32,24"},"\u02da":{"d":"28,-267v0,-20,13,-33,45,-33v31,0,46,14,46,33v0,22,-14,32,-46,32v-30,0,-45,-9,-45,-32xm55,-267v0,7,4,11,19,11v13,0,19,-4,19,-11v0,-7,-5,-11,-19,-11v-14,0,-19,4,-19,11"},"\u00b8":{"d":"38,68r26,-73r37,0r-13,73r-50,0"},"\u02dd":{"d":"42,-288r57,0r-39,52r-36,0xm113,-288r57,0r-43,52r-41,0"},"\u02db":{"d":"133,59v-24,16,-89,10,-82,-24v-2,-28,34,-53,61,-35v-21,5,-29,33,-1,34v7,0,13,-1,18,-4"},"\u02c7":{"d":"98,-236r-49,0r-35,-52r41,0r18,31r18,-31r43,0"},"\u00a4":{"d":"45,-100v-9,-20,-8,-47,2,-65r-25,-26r29,-31r26,27v18,-9,45,-10,63,0r27,-27r29,31r-25,26v10,19,10,46,1,65r24,24r-29,31r-23,-24v-19,13,-50,13,-70,1r-23,23r-29,-31xm75,-132v0,18,15,33,34,33v19,0,34,-15,34,-33v0,-18,-15,-33,-34,-33v-19,0,-34,15,-34,33","w":218}}});
/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * 2006 Lukasz Dziedzic published by FSI Fonts und Software GmbH
 */
Cufon.registerFont({"w":141,"face":{"font-family":"ClanThin","font-weight":100,"font-stretch":"normal","units-per-em":"360","panose-1":"2 0 2 3 0 0 0 0 0 0","ascent":"288","descent":"-72","x-height":"5","bbox":"-44 -330.03 383 69","underline-thickness":"14.04","underline-position":"-29.16","stemh":"9","stemv":"11","unicode-range":"U+0020-U+FB02"},"glyphs":{" ":{"w":121},"\u00d0":{"d":"241,-136v0,99,-34,136,-110,136r-85,0r0,-138r-30,0r0,-9r30,0r0,-123r84,0v78,0,111,37,111,134xm229,-136v0,-128,-63,-127,-171,-123r0,112r46,0r0,9r-46,0r0,127v108,3,171,7,171,-125","w":269},"\u00f0":{"d":"153,-288r-29,26v39,36,71,88,71,143v0,89,-30,123,-85,123v-59,0,-87,-26,-87,-108v0,-73,22,-107,85,-107v30,-1,48,12,64,28v-12,-27,-29,-52,-54,-73r-30,28r-6,-4r31,-29v-11,-9,-24,-17,-37,-25r5,-6v13,6,26,16,38,26r28,-27xm34,-104v0,78,27,99,76,99v49,0,74,-33,74,-113v0,-53,-25,-83,-75,-83v-54,0,-75,27,-75,97","w":217},"\u0141":{"d":"62,-11r141,0r0,11r-152,0r0,-114r-31,15r-1,-10r32,-16r0,-145r11,0r0,139r86,-45r1,10r-87,46r0,109","w":214},"\u0142":{"d":"21,-149r-1,-10r35,-20r0,-110r11,-1r0,107r37,-23r0,10r-37,23r0,173r-11,0r-1,-169","w":123},"\u0160":{"d":"181,-72v0,82,-109,94,-158,55r3,-10v46,36,144,28,144,-45v0,-84,-144,-46,-144,-135v0,-65,96,-83,147,-52r-3,9v-20,-9,-40,-14,-64,-14v-48,0,-68,27,-68,57v0,78,143,41,143,135xm114,-289r-12,0r-44,-41r14,0r36,34r37,-34r14,0","w":201},"\u0161":{"d":"155,-56v0,64,-94,76,-131,39r3,-10v30,34,118,29,118,-28v0,-65,-119,-39,-119,-107v0,-53,78,-64,121,-40r-2,10v-37,-22,-108,-16,-108,29v0,60,118,32,118,107xm97,-241r-11,0r-39,-51r11,0r33,44r34,-44r11,0","w":175},"\u00dd":{"d":"13,-270r15,0r89,160r87,-160r14,0r-96,172r0,98r-12,0r0,-98xm135,-330r20,0r-43,41r-11,0","w":231},"\u00fd":{"d":"44,38v32,17,55,4,69,-33r-95,-215r14,0r86,202v27,-63,49,-136,75,-202r13,0r-83,222v-18,44,-44,49,-81,35xm126,-292r17,0r-39,51r-10,0","w":223},"\u00de":{"d":"210,-140v9,77,-72,81,-154,77r0,63r-11,0r0,-270r11,0r0,54v80,-3,163,-1,154,76xm198,-141v0,-71,-71,-67,-142,-65r0,133v72,2,142,6,142,-68","w":229},"\u00fe":{"d":"202,-105v0,82,-30,109,-82,109v-27,0,-53,-9,-68,-31v-2,22,1,52,0,78r-11,0r0,-340r11,-1r0,107v53,-53,150,-47,150,78xm191,-105v0,-119,-94,-120,-139,-65r0,130v10,18,32,35,65,35v44,0,74,-21,74,-100","w":225},"\u017d":{"d":"197,0r-175,0r0,-8r162,-252r-157,0r1,-10r170,0r0,9r-161,251r161,0xm117,-289r-12,0r-45,-41v30,-1,33,23,51,34r36,-34r14,0","w":221},"\u017e":{"d":"169,-203r-127,194r128,0r0,9r-141,0r0,-7r127,-194r-123,0r1,-9r135,0r0,7xm107,-241r-11,0r-39,-51r11,0r34,44r33,-44r11,0","w":196},"\u00bd":{"d":"238,-270r11,0r-184,270r-11,0xm98,-271r0,143r-11,0r0,-128r-34,25r-1,-11v16,-9,24,-26,46,-29xm274,-107v0,33,-34,61,-74,98r75,0r0,9r-90,0r0,-8v38,-36,77,-68,77,-98v0,-34,-56,-36,-73,-14r-3,-8v22,-24,88,-22,88,21","w":309},"\u00bc":{"d":"240,-270r10,0r-183,270r-11,0xm98,-271r0,143r-11,0r0,-128r-34,25r-1,-11v16,-9,24,-26,46,-29xm266,-34r-19,0r0,34r-9,0r0,-34r-75,0r-1,-6r72,-102r13,0r0,100r19,0r0,8xm238,-42r0,-91r-64,91r64,0","w":309},"\u00b9":{"d":"65,-326r0,143r-11,0r0,-127r-33,24r-2,-10v16,-9,24,-27,46,-30","w":92},"\u00be":{"d":"241,-270r11,0r-184,270r-11,0xm120,-171v0,44,-62,57,-93,33r4,-8v23,19,78,13,78,-24v0,-22,-14,-30,-49,-30r0,-9v58,7,59,-56,11,-54v-16,0,-29,5,-39,14r-3,-7v19,-23,87,-24,87,18v0,21,-14,28,-29,34v21,3,33,12,33,33xm270,-34r-18,0r0,34r-10,0r0,-34r-74,0r-1,-6r72,-102r13,0r0,100r19,0xm242,-42r1,-91v-20,30,-48,61,-64,91r63,0","w":309},"\u00b3":{"d":"110,-225v0,44,-62,56,-92,32r3,-8v23,20,79,13,79,-24v0,-22,-14,-30,-49,-30r0,-9v57,7,58,-56,11,-54v-16,0,-29,5,-39,14r-4,-7v19,-22,88,-24,88,18v0,21,-15,28,-30,34v21,3,33,13,33,34","w":119},"\u00b2":{"d":"105,-290v0,33,-33,61,-73,98r75,0r0,9r-90,0r0,-7v38,-36,77,-69,77,-99v0,-34,-56,-36,-73,-14r-3,-8v22,-24,87,-22,87,21","w":119},"\u00a6":{"d":"44,-135r0,-160r9,0r0,160r-9,0xm44,63r0,-164r9,0r0,164r-9,0","w":97},"\u2212":{"d":"181,-118r-149,0r0,-11r149,0r0,11","w":213},"\u00d7":{"d":"172,-64r-7,6r-58,-58r-58,58r-8,-6r59,-59r-58,-58r7,-7r58,58r58,-58r7,7r-58,58","w":213},"!":{"d":"57,-65r-7,0r-2,-205r12,0xm66,-7v0,8,-4,11,-12,11v-7,0,-12,-3,-12,-11v0,-7,5,-11,12,-11v8,0,12,4,12,11","w":109},"\"":{"d":"81,-279r15,0r-5,73r-7,0xm26,-279r15,0r-5,73r-8,0","w":122},"#":{"d":"26,-102r50,0r12,-72r-61,0r0,-9r62,0r12,-87r9,0r-12,87r52,0r12,-87r9,0r-13,87r50,0r0,9r-51,0r-11,72r62,0r0,9r-63,0r-13,93r-9,0r13,-93r-52,0r-13,93r-8,0r12,-93r-49,0r0,-9xm96,-174r-11,72r53,0r11,-72r-53,0","w":235},"$":{"d":"103,31r-8,0r1,-27v-27,-1,-53,-8,-70,-19r2,-12v19,12,42,21,69,22r8,-134v-39,-14,-79,-27,-79,-70v0,-41,33,-64,87,-65r1,-24r9,0r-1,24v26,1,48,8,59,14r-2,11v-18,-8,-36,-14,-58,-15r-7,116v40,14,80,31,80,80v0,50,-29,72,-89,73xm184,-68v0,-40,-35,-54,-71,-67r-8,130v52,0,79,-21,79,-63xm37,-209v0,35,32,47,68,59r7,-114v-51,0,-75,24,-75,55","w":219},"%":{"d":"117,-213v0,46,-15,63,-46,63v-32,0,-48,-18,-48,-63v0,-45,14,-63,48,-63v31,0,46,16,46,63xm107,-213v0,-43,-11,-56,-36,-56v-26,0,-38,13,-38,56v0,43,12,55,38,55v25,0,36,-12,36,-55xm182,-272r8,3r-133,269r-8,-3xm222,-60v0,46,-15,62,-46,62v-32,0,-47,-17,-47,-62v0,-45,13,-64,47,-64v31,0,46,17,46,64xm212,-60v0,-43,-11,-56,-36,-56v-26,0,-38,13,-38,56v0,43,12,54,38,54v25,0,36,-12,36,-54","w":245},"&":{"d":"158,-233v0,43,-38,60,-65,83v20,30,48,61,78,91v15,-23,25,-50,28,-73r10,0v-2,21,-12,53,-30,81v19,17,38,34,56,47r-4,8v-19,-13,-39,-29,-58,-47v-19,26,-46,47,-82,47v-48,0,-67,-30,-67,-66v0,-41,27,-68,55,-91v-16,-25,-25,-48,-25,-66v0,-31,17,-55,55,-55v34,0,49,17,49,41xm93,-5v29,0,53,-19,72,-45v-31,-29,-59,-63,-80,-94v-26,21,-50,46,-50,82v0,35,25,57,58,57xm87,-159v26,-23,61,-35,61,-74v0,-20,-13,-33,-39,-33v-54,0,-55,67,-22,107","w":240},"'":{"d":"26,-279r15,0r-5,73r-8,0","w":66},"(":{"d":"96,-290r13,1v-77,83,-76,252,-1,334r-12,0v-33,-40,-56,-99,-56,-167v0,-71,22,-122,56,-168","w":109},")":{"d":"1,-289r13,-1v73,79,71,257,0,335r-13,0v73,-82,77,-250,0,-334","w":109},"*":{"d":"57,-288r9,0r0,44r41,-12r3,7r-42,12r28,36r-7,6r-27,-38r-29,38r-6,-6r28,-36r-42,-12r2,-7r42,12r0,-44","w":122},"+":{"d":"183,-119r-72,0r0,72r-11,0r0,-72r-70,0r0,-9r70,0r0,-74r11,0r0,74r72,0r0,9","w":213},",":{"d":"42,-19v29,8,-1,44,-7,69r-4,-1r9,-46v-6,0,-10,-5,-10,-10v0,-7,4,-12,12,-12","w":84},"-":{"d":"32,-126r88,0r0,8r-88,0r0,-8","w":151},".":{"d":"54,-8v0,8,-4,12,-12,12v-8,0,-12,-4,-12,-12v0,-8,4,-11,12,-11v8,0,12,3,12,11","w":84},"\/":{"d":"136,-290r9,0r-124,338r-10,0","w":150},"0":{"d":"211,-136v0,104,-27,140,-92,140v-66,0,-93,-36,-93,-140v0,-103,27,-138,93,-138v65,0,92,35,92,138xm199,-136v0,-101,-25,-128,-80,-128v-56,0,-82,27,-82,128v0,101,26,130,82,130v55,0,80,-28,80,-130","w":236},"1":{"d":"72,0r0,-10r57,0r0,-246r-67,48r-2,-10r74,-53r6,0r0,261r54,0r0,10r-122,0","w":236},"2":{"d":"201,-204v0,63,-66,121,-149,194r152,0r0,10r-169,0r0,-8v74,-68,155,-133,155,-195v0,-32,-21,-60,-73,-60v-28,0,-57,13,-75,30r-4,-9v40,-47,163,-42,163,38","w":236},"3":{"d":"206,-80v0,49,-28,83,-92,83v-38,0,-62,-11,-80,-23r3,-10v21,15,45,24,77,24v57,0,81,-33,81,-75v0,-45,-30,-61,-100,-61r0,-9v65,0,93,-21,93,-59v1,-67,-113,-65,-146,-24r-5,-8v32,-44,161,-45,161,31v0,42,-29,55,-60,64v44,6,68,25,68,67","w":236},"4":{"d":"213,-68r-40,0r0,68r-11,0r0,-68r-130,0r-1,-7r127,-195r15,0r0,193r40,0r0,9xm163,-77r0,-185r-118,185r118,0","w":236},"5":{"d":"201,-91v0,63,-30,94,-88,94v-32,0,-55,-9,-74,-23r3,-10v51,42,158,31,148,-60v11,-80,-100,-80,-145,-50r-6,-4r11,-126r140,0r0,10r-132,0r-9,109v58,-33,152,-21,152,60","w":236},"6":{"d":"205,-91v0,60,-28,94,-87,94v-58,0,-88,-32,-88,-128v0,-131,65,-170,162,-137r-2,10v-85,-31,-155,6,-149,119v44,-54,164,-50,164,42xm194,-91v0,-87,-116,-82,-153,-31v1,83,24,116,78,116v50,0,75,-30,75,-85","w":236},"7":{"d":"211,-270r0,9r-127,261r-14,0r130,-260r-169,0r1,-10r179,0","w":236},"8":{"d":"29,-69v-1,-40,31,-61,65,-76v-30,-10,-54,-26,-54,-63v0,-40,22,-65,79,-65v53,0,78,21,78,65v0,32,-21,53,-55,68v35,10,66,26,66,70v0,49,-31,73,-89,73v-62,0,-90,-23,-90,-72xm197,-70v0,-50,-49,-58,-92,-71v-36,14,-65,35,-65,72v0,41,21,63,79,63v48,0,78,-20,78,-64xm50,-208v0,44,40,53,80,64v41,-15,57,-34,57,-63v0,-37,-21,-57,-68,-57v-47,0,-69,20,-69,56","w":236},"9":{"d":"205,-152v0,140,-61,177,-157,143r1,-9v88,32,147,-2,146,-130v-46,54,-166,37,-166,-47v0,-48,26,-78,84,-78v58,0,92,39,92,121xm194,-158v-1,-74,-32,-106,-81,-106v-49,0,-73,25,-73,69v0,77,115,90,154,37","w":236},":":{"d":"54,-190v0,8,-4,11,-12,11v-8,0,-12,-3,-12,-11v0,-8,4,-12,12,-12v8,0,12,4,12,12xm54,-8v0,8,-4,12,-12,12v-8,0,-12,-4,-12,-12v0,-8,4,-11,12,-11v8,0,12,3,12,11","w":84},";":{"d":"56,-190v0,8,-4,11,-12,11v-8,0,-12,-3,-12,-11v0,-8,4,-12,12,-12v8,0,12,4,12,12xm42,-19v29,8,-1,44,-7,69r-4,-1r9,-46v-6,0,-10,-5,-10,-10v0,-7,4,-12,12,-12","w":86},"<":{"d":"179,-191r-129,68r129,64r0,11r-145,-73r0,-5r145,-76r0,11","w":213},"=":{"d":"185,-147r-157,0r0,-10r157,0r0,10xm185,-91r-157,0r0,-9r157,0r0,9","w":213},">":{"d":"34,-48r0,-11r129,-65r-129,-67r0,-11r145,76r0,5","w":213},"?":{"d":"165,-215v0,41,-26,67,-70,93r-1,57r-9,0r-1,-61v44,-29,70,-52,70,-89v1,-71,-101,-58,-131,-20r-5,-7v30,-44,147,-50,147,27xm103,-7v0,8,-4,11,-12,11v-8,0,-13,-3,-13,-11v0,-7,5,-11,13,-11v8,0,12,4,12,11","w":186},"@":{"d":"215,-49v-20,1,-31,-13,-36,-33v-20,46,-90,48,-90,-21v0,-49,31,-93,70,-93v15,-1,26,7,34,17v3,-6,1,-17,12,-14r-17,104v0,19,10,31,29,31v30,0,50,-30,50,-87v0,-72,-39,-125,-110,-125v-81,0,-125,71,-125,149v0,81,39,148,125,148v55,0,84,-19,100,-36r4,8v-24,21,-55,36,-104,36v-90,0,-134,-67,-134,-156v0,-83,45,-158,134,-158v74,0,119,55,119,134v0,65,-25,96,-61,96xm134,-58v45,-1,48,-69,56,-112v-35,-47,-90,10,-90,67v0,31,14,45,34,45","w":299},"A":{"d":"222,0r-30,-78r-138,0r-30,78r-13,0r106,-270r14,0r105,270r-14,0xm125,-260v-25,53,-44,115,-67,171r131,0","w":246},"B":{"d":"216,-75v0,48,-20,75,-76,75r-95,0r0,-270v74,1,159,-16,159,65v0,39,-21,55,-43,62v33,6,55,25,55,68xm204,-75v0,-74,-78,-62,-148,-62r0,127v72,-2,148,18,148,-65xm193,-203v0,-70,-73,-56,-137,-57r0,113v64,-1,137,13,137,-56","w":245},"C":{"d":"202,-260r-3,10v-80,-33,-159,-11,-159,112v0,130,77,152,160,117r3,9v-15,9,-40,17,-64,17v-77,0,-111,-43,-111,-143v0,-126,84,-158,174,-122","w":221},"D":{"d":"239,-136v0,99,-34,136,-110,136r-84,0r0,-270r84,0v78,0,110,37,110,134xm227,-136v0,-127,-62,-127,-170,-123r0,248v108,3,170,7,170,-125","w":267},"E":{"d":"56,-10r149,0r-1,10r-159,0r0,-270r153,0r0,10r-142,0r0,113r124,0r0,9r-124,0r0,128","w":226},"F":{"d":"198,-259r-141,0r0,112r119,0r0,11r-119,0r0,136r-12,0r0,-270r153,0r0,11","w":214},"G":{"d":"219,-141r0,129v-19,10,-46,17,-76,17v-78,0,-115,-38,-115,-139v0,-135,88,-160,183,-126r-2,10v-86,-31,-169,-17,-169,116v0,124,80,147,168,115r0,-122r11,0","w":246},"H":{"d":"231,0r-12,0r0,-137r-162,0r0,137r-12,0r0,-270r12,0r0,123r162,0r0,-123r12,0r0,270","w":275},"I":{"d":"50,0r0,-270r12,0r0,270r-12,0","w":111},"J":{"d":"153,-270r0,189v10,79,-87,108,-138,67r3,-10v43,38,123,19,123,-57r0,-189r12,0","w":197},"K":{"d":"232,0r-17,0r-109,-137r-49,0r0,137r-12,0r0,-270r12,0r0,122r48,0r104,-122r17,0r-108,127","w":246},"L":{"d":"56,-11r141,0r0,11r-152,0r0,-270r11,0r0,259","w":208},"M":{"d":"45,-270r15,0r104,256r103,-256r15,0r0,270r-10,0r1,-255r-104,255r-11,0r-103,-252r0,252r-10,0r0,-270","w":326},"N":{"d":"232,0r-9,0r-168,-256r1,256r-11,0r0,-270r14,0r163,251r0,-251r10,0r0,270","w":276},"O":{"d":"236,-135v0,102,-28,140,-104,140v-76,0,-104,-38,-104,-140v0,-102,28,-139,104,-139v76,0,104,37,104,139xm224,-135v0,-100,-26,-129,-92,-129v-66,0,-92,29,-92,129v0,99,26,129,92,129v66,0,92,-30,92,-129","w":264},"P":{"d":"210,-194v0,81,-73,80,-153,77r0,117r-12,0r0,-270v81,-1,165,-11,165,76xm198,-194v0,-76,-70,-67,-141,-66r0,133v71,0,141,12,141,-67","w":230},"Q":{"d":"236,-135v0,98,-25,137,-95,139r70,48r-22,4r-64,-52v-71,-3,-97,-41,-97,-139v0,-102,28,-139,104,-139v76,0,104,37,104,139xm224,-135v0,-100,-26,-129,-92,-129v-66,0,-92,29,-92,129v0,99,26,129,92,129v66,0,92,-30,92,-129","w":264},"R":{"d":"201,-201v0,46,-22,67,-62,70r79,131r-15,0r-77,-129r-69,0r0,129r-12,0r0,-270v75,-1,156,-11,156,69xm189,-201v0,-71,-67,-59,-132,-59r0,121v66,1,132,10,132,-62","w":231},"S":{"d":"181,-72v0,82,-109,94,-158,55r3,-10v46,36,144,28,144,-45v0,-84,-144,-46,-144,-135v0,-65,96,-83,147,-52r-3,9v-20,-9,-40,-14,-64,-14v-48,0,-68,27,-68,57v0,78,143,41,143,135","w":201},"T":{"d":"197,-259r-89,0r0,259r-12,0r0,-259r-88,0r0,-11r189,0r0,11","w":204},"U":{"d":"231,-270r0,172v0,74,-37,103,-97,103v-60,0,-96,-29,-96,-103r0,-172r12,0r0,172v0,64,28,92,84,92v56,0,85,-29,85,-92r0,-172r12,0","w":268},"V":{"d":"216,-270r13,0r-100,270r-15,0r-101,-270r14,0r95,258","w":242},"W":{"d":"170,-270r15,0r69,259r62,-259r12,0r-67,270r-16,0r-69,-258r-67,258r-16,0r-67,-270r12,0r62,260r2,0","w":353},"X":{"d":"217,-270r-86,130r94,140r-15,0r-88,-132r-86,132r-15,0r92,-140r-89,-130r16,0r82,122r81,-122r14,0","w":245},"Y":{"d":"13,-270r15,0r89,160r87,-160r14,0r-96,172r0,98r-12,0r0,-98","w":231},"Z":{"d":"197,0r-175,0r0,-8r162,-252r-157,0r1,-10r170,0r0,9r-161,251r161,0","w":221},"[":{"d":"40,45r0,-335r67,0r0,10r-56,0r0,316r56,0r0,9r-67,0","w":108},"\\":{"d":"12,-290r9,0r111,338r-9,0"},"]":{"d":"68,-290r0,335r-67,0r0,-9r57,0r0,-316r-57,0r0,-10r67,0","w":108},"^":{"d":"197,-166r-79,-113r-77,113r-12,0r85,-124r9,0r85,124r-11,0","w":236},"_":{"d":"14,19r133,0r0,9r-133,0r0,-9","w":159},"`":{"d":"91,-241r-10,0r-34,-51r17,0"},"a":{"d":"162,0v-2,-11,2,-27,-3,-35v-21,50,-139,59,-133,-26v-10,-62,83,-74,133,-51v4,-57,-6,-93,-59,-93v-21,0,-42,4,-60,14r-2,-10v54,-25,132,-24,132,59r0,142r-8,0xm93,-6v57,0,74,-37,66,-97v-6,-4,-27,-11,-56,-11v-46,0,-66,20,-66,53v0,42,24,55,56,55","w":203},"b":{"d":"202,-105v0,81,-29,109,-82,109v-30,1,-54,-13,-70,-32r-3,28r-7,0r0,-289r11,-1r0,107v52,-55,151,-45,151,78xm191,-105v0,-78,-27,-99,-72,-99v-29,0,-54,13,-68,34r0,130v10,18,35,35,69,35v42,0,71,-21,71,-100","w":225},"c":{"d":"160,-201r-2,10v-61,-30,-124,-10,-124,82v0,104,65,124,126,87r2,10v-66,38,-139,13,-139,-97v0,-97,67,-122,137,-92","w":181},"d":{"d":"185,0r-8,0v-1,-9,0,-21,-3,-28v-13,21,-37,32,-69,32v-60,0,-82,-34,-82,-109v0,-73,23,-108,82,-108v29,0,55,15,70,30r-1,-105r11,-2r0,290xm174,-40r0,-130v-12,-21,-37,-34,-67,-34v-53,0,-73,31,-73,100v0,71,19,100,73,100v40,0,59,-21,67,-36","w":223},"e":{"d":"113,4v-65,0,-90,-34,-90,-118v0,-66,28,-100,81,-100v46,0,83,34,78,102r-148,0v-7,111,71,126,139,90r1,9v-18,11,-37,17,-61,17xm34,-120r138,0v-1,-62,-29,-84,-68,-84v-47,0,-68,29,-70,84","w":204},"f":{"d":"63,0r-10,0r0,-202r-37,0r0,-8r37,0v-9,-58,37,-87,93,-72r-1,8v-48,-14,-90,9,-82,64r64,0r0,8r-64,0r0,202","w":145},"g":{"d":"54,-49v-29,-6,-29,-49,5,-54v-15,-8,-26,-24,-26,-51v0,-62,78,-74,119,-44r33,-17r3,5r-30,20v22,42,10,103,-58,96v-10,0,-21,-2,-31,-5v-32,4,-38,38,-4,42v47,4,132,12,120,53v0,35,-19,58,-82,58v-82,0,-97,-67,-49,-103xm174,-3v10,-35,-70,-40,-110,-44v-45,30,-35,92,38,92v57,0,72,-20,72,-48xm100,-204v-42,0,-56,18,-56,51v0,41,24,50,56,50v44,0,58,-18,58,-50v0,-38,-18,-51,-58,-51","w":200},"h":{"d":"189,0r-11,0v-9,-82,33,-207,-62,-204v-29,0,-55,15,-65,34r0,170r-11,0r0,-288r11,-2r0,107v30,-48,138,-42,138,38r0,145","w":222},"i":{"d":"60,0r-11,0r0,-210r11,-1r0,211xm67,-273v0,8,-5,11,-12,11v-8,0,-12,-2,-12,-11v0,-7,4,-12,12,-12v7,0,12,4,12,12","w":109},"j":{"d":"59,-211r0,220v1,41,-28,52,-59,41r1,-9v24,10,47,2,47,-32r0,-219xm66,-274v0,9,-4,12,-12,12v-8,0,-13,-3,-13,-12v0,-7,5,-12,13,-12v8,0,12,5,12,12","w":108},"k":{"d":"51,-290r0,171r36,0r86,-92r14,0r-91,97r96,114r-15,0r-90,-109r-36,0r0,109r-11,0r0,-289","w":201},"l":{"d":"58,0r-10,0r0,-289r10,-1r0,290","w":105},"m":{"d":"292,0r-10,0r0,-146v0,-40,-23,-57,-58,-57v-27,0,-53,17,-53,51r0,152r-11,0r0,-152v0,-69,-88,-61,-111,-18r0,170r-11,0r0,-210r8,-1v2,9,0,21,3,28v22,-42,107,-38,117,9v8,-25,31,-39,60,-39v39,0,66,21,66,67r0,146","w":325},"n":{"d":"187,0r-11,0v-8,-81,32,-204,-63,-204v-23,0,-51,12,-64,34r0,170r-11,0r0,-210r8,-1v2,9,0,21,3,28v33,-47,138,-41,138,38r0,145","w":220},"o":{"d":"194,-105v0,79,-25,110,-85,110v-60,0,-86,-31,-86,-110v0,-78,27,-108,86,-108v60,0,85,30,85,108xm34,-105v0,71,21,100,75,100v53,0,74,-29,74,-100v0,-71,-21,-99,-74,-99v-54,0,-75,28,-75,99","w":217},"p":{"d":"200,-105v0,82,-32,109,-84,109v-28,1,-50,-10,-67,-31r0,78r-10,0r0,-261r7,0v2,8,0,20,4,26v14,-19,39,-30,69,-30v51,0,81,26,81,109xm189,-105v0,-119,-95,-119,-140,-65r0,130v10,18,33,35,66,35v42,0,74,-21,74,-100","w":222},"q":{"d":"184,51r-11,0v-1,-26,3,-55,0,-79v-51,56,-150,42,-150,-77v0,-80,30,-109,84,-109v29,-1,52,13,68,33r2,-29r7,0r0,261xm173,-47r0,-121v-8,-19,-35,-36,-66,-36v-51,0,-73,27,-73,99v0,74,25,99,73,99v40,0,66,-23,66,-41","w":222},"r":{"d":"49,0r-11,0r0,-209r9,-1v1,19,-2,43,1,60v12,-42,43,-71,91,-61r-1,10v-53,-11,-89,28,-89,93r0,108","w":154},"s":{"d":"155,-56v0,64,-94,76,-131,39r3,-10v30,34,118,29,118,-28v0,-65,-119,-39,-119,-107v0,-53,78,-64,121,-40r-2,10v-37,-22,-108,-16,-108,29v0,60,118,32,118,107","w":175},"t":{"d":"121,-202r-58,0r0,156v-1,37,26,45,55,37v7,12,-9,12,-20,12v-30,0,-46,-14,-46,-48r0,-157r-36,0r0,-8r36,0r2,-59r9,-1r0,60r58,0r0,8","w":137},"u":{"d":"183,-210v-7,92,33,214,-75,214v-108,0,-68,-122,-75,-214r11,0v8,83,-34,205,64,205v97,0,56,-122,64,-205r11,0","w":216},"v":{"d":"193,-210r13,0r-87,210r-14,0r-87,-210r13,0r82,200","w":224},"w":{"d":"148,-210r13,0r58,202r51,-202r11,0r-55,210r-15,0r-57,-200r-58,200r-13,0r-57,-210r12,0r52,201","w":307},"x":{"d":"172,0r-68,-100r-69,100r-14,0r75,-107r-73,-103r14,0r67,96r66,-96r14,0r-72,103r75,107r-15,0","w":208},"y":{"d":"44,38v32,17,55,4,69,-33r-95,-215r14,0r86,202v27,-63,49,-136,75,-202r13,0r-83,222v-18,44,-44,49,-81,35","w":223},"z":{"d":"169,-203r-127,194r128,0r0,9r-141,0r0,-7r127,-194r-123,0r1,-9r135,0r0,7","w":196},"{":{"d":"76,-250v0,48,25,109,-18,127v45,16,18,80,18,126v0,24,17,33,50,31r0,10v-40,2,-62,-11,-62,-40v0,-48,32,-116,-24,-124r0,-7v88,-10,-47,-174,86,-163r0,9v-32,-2,-50,7,-50,31","w":127},"|":{"d":"44,64r0,-359r9,0r0,359r-9,0","w":97},"}":{"d":"51,3v0,-48,-25,-109,19,-127v-45,-15,-19,-79,-19,-126v0,-24,-17,-33,-50,-31r0,-9v39,-2,61,10,61,39v0,47,-32,117,25,124r0,7v-88,9,45,173,-86,164r0,-10v32,2,50,-7,50,-31","w":127},"~":{"d":"51,-239r-9,0v5,-23,18,-35,40,-35v36,0,85,57,104,4r8,0v-6,23,-19,34,-40,34v-36,0,-84,-55,-103,-3","w":236},"\u00c4":{"d":"222,0r-30,-78r-138,0r-30,78r-13,0r106,-270r14,0r105,270r-14,0xm125,-260v-25,53,-44,115,-67,171r131,0xm100,-303v0,7,-3,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v6,0,9,3,9,10xm166,-303v0,7,-3,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v6,0,9,3,9,10","w":246},"\u00c5":{"d":"117,-269v-27,-5,-20,-43,7,-43v29,0,31,37,7,43r105,269r-14,0r-30,-78r-138,0r-30,78r-13,0xm125,-260v-25,53,-44,115,-67,171r131,0xm108,-290v0,9,6,15,16,15v10,0,16,-6,16,-15v0,-9,-6,-15,-16,-15v-10,0,-16,6,-16,15","w":246},"\u00c7":{"d":"114,69r19,-64v-73,-2,-105,-45,-105,-143v0,-126,84,-158,174,-122r-3,10v-80,-33,-159,-11,-159,112v0,130,77,152,160,117r3,9v-15,9,-39,16,-62,17r-14,64r-13,0","w":221},"\u00c9":{"d":"56,-10r149,0r-1,10r-159,0r0,-270r153,0r0,10r-142,0r0,113r124,0r0,9r-124,0r0,128xm143,-330r20,0r-43,41r-11,0","w":226},"\u00d1":{"d":"232,0r-9,0r-168,-256r1,256r-11,0r0,-270r14,0r163,251r0,-251r10,0r0,270xm103,-293r-7,0v3,-18,11,-32,25,-32v25,0,49,60,60,6r7,0v-3,18,-11,32,-25,32v-17,0,-29,-29,-43,-29v-9,0,-14,9,-17,23","w":276},"\u00d6":{"d":"236,-135v0,102,-28,140,-104,140v-76,0,-104,-38,-104,-140v0,-102,28,-139,104,-139v76,0,104,37,104,139xm224,-135v0,-100,-26,-129,-92,-129v-66,0,-92,29,-92,129v0,99,26,129,92,129v66,0,92,-30,92,-129xm108,-303v0,7,-3,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v6,0,9,3,9,10xm175,-303v0,7,-3,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v6,0,9,3,9,10","w":264},"\u00dc":{"d":"231,-270r0,172v0,74,-37,103,-97,103v-60,0,-96,-29,-96,-103r0,-172r12,0r0,172v0,64,28,92,84,92v56,0,85,-29,85,-92r0,-172r12,0xm110,-303v0,7,-3,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v6,0,9,3,9,10xm176,-303v0,7,-3,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v6,0,9,3,9,10","w":268},"\u00e1":{"d":"162,0v-2,-11,2,-27,-3,-35v-21,50,-139,59,-133,-26v-10,-62,83,-74,133,-51v4,-57,-6,-93,-59,-93v-21,0,-42,4,-60,14r-2,-10v54,-25,132,-24,132,59r0,142r-8,0xm93,-6v57,0,74,-37,66,-97v-6,-4,-27,-11,-56,-11v-46,0,-66,20,-66,53v0,42,24,55,56,55xm117,-292r17,0r-39,51r-10,0","w":203},"\u00e0":{"d":"162,0v-2,-11,2,-27,-3,-35v-21,50,-139,59,-133,-26v-10,-62,83,-74,133,-51v4,-57,-6,-93,-59,-93v-21,0,-42,4,-60,14r-2,-10v54,-25,132,-24,132,59r0,142r-8,0xm93,-6v57,0,74,-37,66,-97v-6,-4,-27,-11,-56,-11v-46,0,-66,20,-66,53v0,42,24,55,56,55xm111,-241r-10,0r-35,-51r17,0","w":203},"\u00e2":{"d":"162,0v-2,-11,2,-27,-3,-35v-21,50,-139,59,-133,-26v-10,-62,83,-74,133,-51v4,-57,-6,-93,-59,-93v-21,0,-42,4,-60,14r-2,-10v54,-25,132,-24,132,59r0,142r-8,0xm93,-6v57,0,74,-37,66,-97v-6,-4,-27,-11,-56,-11v-46,0,-66,20,-66,53v0,42,24,55,56,55xm95,-292r11,0r39,51r-11,0r-34,-44r-33,44r-11,0","w":203},"\u00e4":{"d":"162,0v-2,-11,2,-27,-3,-35v-21,50,-139,59,-133,-26v-10,-62,83,-74,133,-51v4,-57,-6,-93,-59,-93v-21,0,-42,4,-60,14r-2,-10v54,-25,132,-24,132,59r0,142r-8,0xm93,-6v57,0,74,-37,66,-97v-6,-4,-27,-11,-56,-11v-46,0,-66,20,-66,53v0,42,24,55,56,55xm87,-275v0,7,-3,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v6,0,9,4,9,10xm136,-275v0,7,-3,10,-8,10v-6,0,-10,-3,-10,-10v0,-6,4,-10,10,-10v5,0,8,4,8,10","w":203},"\u00e3":{"d":"162,0v-2,-11,2,-27,-3,-35v-21,50,-139,59,-133,-26v-10,-62,83,-74,133,-51v4,-57,-6,-93,-59,-93v-21,0,-42,4,-60,14r-2,-10v54,-25,132,-24,132,59r0,142r-8,0xm93,-6v57,0,74,-37,66,-97v-6,-4,-27,-11,-56,-11v-46,0,-66,20,-66,53v0,42,24,55,56,55xm60,-251r-7,-1v3,-22,12,-35,25,-35v19,0,30,31,45,31v8,0,14,-10,18,-27r7,1v-3,22,-13,35,-26,35v-19,0,-29,-31,-44,-31v-8,0,-14,11,-18,27","w":203},"\u00e5":{"d":"162,0v-2,-11,2,-27,-3,-35v-21,50,-139,59,-133,-26v-10,-62,83,-74,133,-51v4,-57,-6,-93,-59,-93v-21,0,-42,4,-60,14r-2,-10v54,-25,132,-24,132,59r0,142r-8,0xm93,-6v57,0,74,-37,66,-97v-6,-4,-27,-11,-56,-11v-46,0,-66,20,-66,53v0,42,24,55,56,55xm75,-269v0,-15,11,-25,27,-25v16,0,27,11,27,25v0,14,-11,25,-27,25v-16,0,-27,-11,-27,-25xm82,-269v0,11,7,19,20,19v12,0,20,-8,20,-19v0,-11,-8,-18,-20,-18v-13,0,-20,7,-20,18","w":203},"\u00e7":{"d":"81,69r19,-64v-52,-3,-77,-35,-77,-114v0,-97,67,-122,137,-92r-2,10v-61,-30,-124,-10,-124,82v0,104,65,124,126,87r2,10v-13,9,-32,16,-53,17r-14,64r-14,0","w":181},"\u00e9":{"d":"113,4v-65,0,-90,-34,-90,-118v0,-66,28,-100,81,-100v46,0,83,34,78,102r-148,0v-7,111,71,126,139,90r1,9v-18,11,-37,17,-61,17xm34,-120r138,0v-1,-62,-29,-84,-68,-84v-47,0,-68,29,-70,84xm120,-292r18,0r-39,51r-10,0","w":204},"\u00e8":{"d":"113,4v-65,0,-90,-34,-90,-118v0,-66,28,-100,81,-100v46,0,83,34,78,102r-148,0v-7,111,71,126,139,90r1,9v-18,11,-37,17,-61,17xm34,-120r138,0v-1,-62,-29,-84,-68,-84v-47,0,-68,29,-70,84xm114,-241r-10,0r-34,-51r17,0","w":204},"\u00ea":{"d":"113,4v-65,0,-90,-34,-90,-118v0,-66,28,-100,81,-100v46,0,83,34,78,102r-148,0v-7,111,71,126,139,90r1,9v-18,11,-37,17,-61,17xm34,-120r138,0v-1,-62,-29,-84,-68,-84v-47,0,-68,29,-70,84xm98,-292r11,0r40,51r-11,0r-34,-44r-33,44r-11,0","w":204},"\u00eb":{"d":"113,4v-65,0,-90,-34,-90,-118v0,-66,28,-100,81,-100v46,0,83,34,78,102r-148,0v-7,111,71,126,139,90r1,9v-18,11,-37,17,-61,17xm34,-120r138,0v-1,-62,-29,-84,-68,-84v-47,0,-68,29,-70,84xm86,-275v0,7,-3,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v6,0,9,4,9,10xm136,-275v0,7,-4,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v5,0,9,4,9,10","w":204},"\u00ed":{"d":"60,0r-11,0r0,-210r11,-1r0,211xm70,-292r17,0r-38,51r-10,0","w":109},"\u00ec":{"d":"60,0r-11,0r0,-210r11,-1r0,211xm64,-241r-10,0r-34,-51r17,0","w":109},"\u00ee":{"d":"60,0r-11,0r0,-210r11,-1r0,211xm48,-292r11,0r39,51r-11,0r-34,-44r-33,44r-11,0","w":109},"\u00ef":{"d":"60,0r-11,0r0,-210r11,-1r0,211xm40,-275v0,7,-3,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v6,0,9,4,9,10xm90,-275v0,7,-4,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v5,0,9,4,9,10","w":109},"\u00f1":{"d":"187,0r-11,0v-8,-81,32,-204,-63,-204v-23,0,-51,12,-64,34r0,170r-11,0r0,-210r8,-1v2,9,0,21,3,28v33,-47,138,-41,138,38r0,145xm70,-251r-7,-1v3,-22,12,-35,25,-35v19,0,30,31,45,31v8,0,14,-10,18,-27r7,1v-3,22,-13,35,-26,35v-19,0,-29,-31,-44,-31v-8,0,-14,11,-18,27","w":220},"\u00f3":{"d":"194,-105v0,79,-25,110,-85,110v-60,0,-86,-31,-86,-110v0,-78,27,-108,86,-108v60,0,85,30,85,108xm34,-105v0,71,21,100,75,100v53,0,74,-29,74,-100v0,-71,-21,-99,-74,-99v-54,0,-75,28,-75,99xm126,-292r17,0r-38,51r-10,0","w":217},"\u00f2":{"d":"194,-105v0,79,-25,110,-85,110v-60,0,-86,-31,-86,-110v0,-78,27,-108,86,-108v60,0,85,30,85,108xm34,-105v0,71,21,100,75,100v53,0,74,-29,74,-100v0,-71,-21,-99,-74,-99v-54,0,-75,28,-75,99xm120,-241r-10,0r-34,-51r17,0","w":217},"\u00f4":{"d":"194,-105v0,79,-25,110,-85,110v-60,0,-86,-31,-86,-110v0,-78,27,-108,86,-108v60,0,85,30,85,108xm34,-105v0,71,21,100,75,100v53,0,74,-29,74,-100v0,-71,-21,-99,-74,-99v-54,0,-75,28,-75,99xm104,-292r11,0r39,51r-11,0r-34,-44r-33,44r-11,0","w":217},"\u00f6":{"d":"194,-105v0,79,-25,110,-85,110v-60,0,-86,-31,-86,-110v0,-78,27,-108,86,-108v60,0,85,30,85,108xm34,-105v0,71,21,100,75,100v53,0,74,-29,74,-100v0,-71,-21,-99,-74,-99v-54,0,-75,28,-75,99xm93,-275v0,7,-3,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v6,0,9,4,9,10xm143,-275v0,7,-4,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v5,0,9,4,9,10","w":217},"\u00f5":{"d":"194,-105v0,79,-25,110,-85,110v-60,0,-86,-31,-86,-110v0,-78,27,-108,86,-108v60,0,85,30,85,108xm34,-105v0,71,21,100,75,100v53,0,74,-29,74,-100v0,-71,-21,-99,-74,-99v-54,0,-75,28,-75,99xm69,-251r-7,-1v3,-22,12,-35,25,-35v19,0,30,31,45,31v8,0,14,-10,18,-27r7,1v-3,22,-13,35,-26,35v-19,0,-29,-31,-44,-31v-8,0,-14,11,-18,27","w":217},"\u00fa":{"d":"183,-210v-7,92,33,214,-75,214v-108,0,-68,-122,-75,-214r11,0v8,83,-34,205,64,205v97,0,56,-122,64,-205r11,0xm125,-292r17,0r-38,51r-10,0","w":216},"\u00f9":{"d":"183,-210v-7,92,33,214,-75,214v-108,0,-68,-122,-75,-214r11,0v8,83,-34,205,64,205v97,0,56,-122,64,-205r11,0xm119,-241r-10,0r-34,-51r16,0","w":216},"\u00fb":{"d":"183,-210v-7,92,33,214,-75,214v-108,0,-68,-122,-75,-214r11,0v8,83,-34,205,64,205v97,0,56,-122,64,-205r11,0xm103,-292r11,0r39,51r-11,0r-34,-44r-33,44r-11,0","w":216},"\u00fc":{"d":"183,-210v-7,92,33,214,-75,214v-108,0,-68,-122,-75,-214r11,0v8,83,-34,205,64,205v97,0,56,-122,64,-205r11,0xm92,-275v0,7,-3,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v6,0,9,4,9,10xm142,-275v0,7,-4,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v5,0,9,4,9,10","w":216},"\u2020":{"d":"22,-211r64,1r-1,-79r11,0r-1,79r67,-1r0,10r-67,-1r1,253r-11,0r1,-253r-64,1r0,-10","w":183},"\u00b0":{"d":"23,-251v0,-23,18,-43,42,-43v23,0,42,20,42,43v0,22,-19,42,-42,42v-23,0,-42,-20,-42,-42xm31,-251v0,18,15,34,34,34v18,0,34,-15,34,-34v0,-19,-16,-35,-34,-35v-20,0,-34,17,-34,35","w":129},"\u00a2":{"d":"161,-201r-2,10v-61,-30,-124,-10,-124,82v0,104,65,124,126,87r1,10v-12,9,-31,16,-51,17r-2,54r-10,0r2,-55v-52,-2,-77,-34,-77,-113v0,-71,25,-103,81,-104r3,-51r10,0r-3,51v17,1,33,6,46,12","w":182},"\u00a3":{"d":"36,-132r-1,-9r20,0v-20,-65,-16,-132,77,-132v26,0,51,7,69,17r-3,9v-15,-9,-40,-16,-65,-16v-83,0,-84,60,-67,122r102,0r0,9r-100,0v13,43,7,106,-23,124v49,-7,119,-6,172,0v0,1,0,9,-1,10v-66,-8,-122,-8,-190,0r0,-9v40,-16,42,-80,32,-125r-22,0","w":235},"\u00a7":{"d":"30,-135v0,-20,10,-42,42,-52v-59,-25,-45,-100,34,-100v23,0,48,6,65,19r-3,9v-33,-29,-122,-26,-122,23v0,55,136,58,136,136v0,21,-12,42,-43,52v59,26,45,100,-34,100v-23,0,-48,-6,-65,-19r3,-9v33,29,122,26,122,-23v0,-55,-135,-59,-135,-136xm171,-99v0,-44,-55,-61,-89,-82v-30,9,-42,25,-42,46v0,44,58,63,89,82v28,-8,42,-25,42,-46","w":199},"\u2022":{"d":"31,-116v0,-26,13,-40,40,-40v27,0,39,14,39,40v0,27,-12,40,-39,40v-27,0,-40,-13,-40,-40","w":143},"\u00b6":{"d":"82,51r-11,0r0,-240v-29,0,-48,-15,-48,-41v2,-63,117,-34,179,-40r0,10r-28,0r0,311r-11,0r0,-311r-82,0","w":225},"\u00df":{"d":"40,0r0,-187v0,-56,29,-88,76,-88v30,0,52,17,52,40v0,43,-62,65,-62,83v0,24,94,33,94,95v0,61,-91,76,-136,43r2,-10v36,31,123,23,123,-33v0,-57,-94,-61,-94,-93v0,-27,63,-45,63,-84v0,-18,-17,-31,-42,-31v-42,0,-65,28,-65,77r0,188r-11,0","w":219},"\u00ae":{"d":"23,-242v0,-33,26,-60,59,-60v33,0,60,27,60,60v0,32,-27,59,-60,59v-33,0,-59,-27,-59,-59xm28,-242v0,30,25,54,55,54v29,0,53,-24,53,-54v0,-30,-24,-54,-53,-54v-30,0,-55,24,-55,54xm88,-279v31,-2,31,34,8,39r19,32r-9,0r-18,-31r-22,0r0,31r-8,0r0,-71r30,0xm105,-259v0,-17,-22,-14,-39,-14r0,27v16,0,39,4,39,-13","w":164},"\u00a9":{"d":"28,-137v0,-78,63,-141,141,-141v78,0,142,63,142,141v0,78,-64,142,-142,142v-78,0,-141,-64,-141,-142xm36,-138v0,72,58,135,133,135v74,0,134,-60,134,-135v0,-73,-60,-132,-134,-132v-75,0,-133,59,-133,132xm225,-215r-2,8v-57,-32,-138,3,-131,70v-7,71,84,106,137,68v1,3,2,5,2,8v-57,44,-150,6,-150,-76v0,-49,32,-92,92,-92v21,0,42,7,52,14","w":338},"\u2122":{"d":"204,-186r-6,0r0,-87r-38,87r-6,0r-40,-87r1,87r-7,0r0,-95r10,0r39,86r38,-86r9,0r0,95xm90,-274r-33,0r0,88r-7,0r0,-88r-33,0r0,-7r73,0r0,7","w":227},"\u00b4":{"d":"93,-292r17,0r-39,51r-10,0"},"\u00a8":{"d":"55,-275v0,7,-3,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v6,0,9,4,9,10xm105,-275v0,7,-4,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v5,0,9,4,9,10"},"\u00c6":{"d":"352,-260r-155,0r15,113r118,0r0,9r-117,0r18,128r124,0r-1,10r-134,0r-10,-78r-126,0r-44,78r-16,0r156,-270r171,0xm186,-259r-96,170r118,0","w":376},"\u00d8":{"d":"31,4r-7,-7r23,-31v-13,-22,-19,-55,-19,-101v0,-102,28,-139,104,-139v40,0,67,10,83,34r27,-33r7,6r-29,36v12,22,16,53,16,96v0,102,-27,140,-104,140v-37,0,-62,-10,-79,-31xm55,-44r151,-188v-14,-23,-39,-32,-74,-32v-66,0,-92,29,-92,129v0,41,5,71,15,91xm224,-135v0,-39,-4,-67,-13,-87r-149,187r-2,0v15,21,39,29,72,29v66,0,92,-30,92,-129","w":264},"\u00b1":{"d":"195,-127r-72,0r0,65r-11,0r0,-65r-70,0r0,-11r70,0r0,-71r11,0r0,71r72,0r0,11xm194,-36r-152,0r0,-9r152,0r0,9","w":236},"\u00a5":{"d":"75,-112v16,-1,35,2,49,-1r-92,-157r14,0r86,152r84,-152r14,0r-89,158r45,0r0,9r-48,0r0,22r48,0r0,10r-48,0r0,71r-12,0r0,-71r-51,0r0,-10r51,0r0,-22r-51,0r0,-9","w":262},"\u03bc":{"d":"177,-27v-23,41,-107,45,-129,-6v1,30,1,58,2,84r-12,1r0,-262r11,0r0,145v0,39,28,61,66,61v35,0,61,-19,61,-53r0,-153r11,0r0,210r-8,1","w":220},"\u00aa":{"d":"108,-151v-1,-7,1,-16,-2,-21v-18,33,-83,34,-83,-20v0,-41,51,-51,84,-34v2,-35,-3,-59,-36,-59v-14,0,-27,3,-39,9r-1,-9v35,-16,85,-15,85,39r0,95r-8,0xm67,-158v36,0,44,-24,40,-61v-19,-13,-84,-8,-74,27v0,26,15,34,34,34"},"\u00ba":{"d":"131,-221v0,53,-15,73,-54,73v-38,0,-56,-20,-56,-73v0,-53,18,-73,56,-73v39,0,54,20,54,73xm32,-221v0,46,13,64,45,64v32,0,45,-18,45,-64v0,-47,-13,-64,-45,-64v-32,0,-45,17,-45,64","w":152},"\u00e6":{"d":"38,-200v43,-21,124,-25,128,32v12,-31,39,-46,72,-46v46,-1,80,32,78,102r-148,0v-6,111,71,126,139,90r1,9v-47,31,-132,21,-144,-35v-8,31,-35,52,-73,52v-39,0,-65,-17,-65,-64v0,-63,85,-74,133,-50v4,-57,-5,-94,-59,-94v-21,0,-42,4,-60,14xm93,-5v54,-2,72,-39,66,-97v-6,-4,-27,-11,-56,-11v-46,0,-67,20,-67,53v0,42,25,55,57,55xm168,-120r138,0v-1,-62,-30,-84,-68,-84v-46,0,-68,29,-70,84","w":338},"\u00f8":{"d":"41,-24v-8,5,-15,27,-23,16r18,-24v-9,-17,-13,-41,-13,-73v0,-78,27,-108,86,-108v28,0,48,6,62,21v7,-6,12,-26,21,-15r-15,22v12,18,17,43,17,80v0,79,-25,110,-85,110v-32,0,-54,-9,-68,-29xm183,-105v0,-32,-4,-55,-13,-71r-122,142v12,20,31,29,61,29v53,0,74,-29,74,-100xm34,-105v0,27,3,48,10,63r121,-141v-12,-15,-30,-21,-56,-21v-54,0,-75,28,-75,99","w":217},"\u00bf":{"d":"22,-23v0,-41,26,-68,70,-94r1,-57r9,0r1,62v-44,29,-70,52,-70,89v-1,71,102,56,132,20r5,7v-17,19,-45,33,-79,33v-46,0,-69,-21,-69,-60xm85,-231v0,-8,3,-11,11,-11v8,0,13,3,13,11v0,7,-5,11,-13,11v-8,0,-11,-4,-11,-11","w":176},"\u00a1":{"d":"51,-176r8,0r2,225r-13,0xm42,-233v0,-7,4,-10,12,-10v8,0,12,3,12,10v0,8,-4,11,-12,11v-8,0,-12,-3,-12,-11","w":109},"\u00ac":{"d":"180,-118r-134,0r0,-11r144,0r0,69r-10,0r0,-58","w":236},"\u0192":{"d":"16,51r-11,0r55,-253r-23,0v-1,-12,15,-7,25,-8v3,-47,34,-84,83,-64v-1,14,-15,1,-25,3v-32,-2,-45,29,-47,61r58,0r-2,8r-58,0","w":140},"\u00ab":{"d":"172,-171r-82,51r82,51r0,10v-31,-22,-67,-38,-96,-62r96,-60r0,10xm108,-171r-83,51r83,51r0,10v-31,-22,-67,-38,-96,-62r96,-60r0,10","w":214},"\u00bb":{"d":"98,-59r0,-10r83,-51r-83,-51r0,-10v31,22,68,38,97,62xm33,-59r0,-10r83,-51r-83,-51r0,-10v31,22,68,38,97,62","w":214},"\u2026":{"d":"173,-8v0,8,-4,12,-12,12v-8,0,-12,-4,-12,-12v0,-8,4,-11,12,-11v8,0,12,3,12,11xm116,-8v0,8,-4,12,-12,12v-8,0,-12,-4,-12,-12v0,-8,4,-11,12,-11v8,0,12,3,12,11xm54,-8v0,8,-4,12,-12,12v-8,0,-12,-4,-12,-12v0,-8,4,-11,12,-11v8,0,12,3,12,11","w":203},"\u00a0":{"w":121},"\u00c0":{"d":"222,0r-30,-78r-138,0r-30,78r-13,0r106,-270r14,0r105,270r-14,0xm125,-260v-25,53,-44,115,-67,171r131,0xm137,-290r-11,0r-40,-40r18,0","w":246},"\u00c3":{"d":"222,0r-30,-78r-138,0r-30,78r-13,0r106,-270r14,0r105,270r-14,0xm125,-260v-25,53,-44,115,-67,171r131,0xm85,-293r-7,0v3,-18,11,-32,25,-32v25,0,49,60,60,6r7,0v-3,18,-11,32,-25,32v-17,0,-29,-29,-43,-29v-9,0,-14,9,-17,23","w":246},"\u00d5":{"d":"236,-135v0,102,-28,140,-104,140v-76,0,-104,-38,-104,-140v0,-102,28,-139,104,-139v76,0,104,37,104,139xm224,-135v0,-100,-26,-129,-92,-129v-66,0,-92,29,-92,129v0,99,26,129,92,129v66,0,92,-30,92,-129xm93,-293r-6,0v3,-18,10,-32,24,-32v18,0,29,30,43,30v8,0,15,-7,18,-24r6,0v-3,18,-11,32,-25,32v-17,0,-28,-29,-42,-29v-9,0,-15,9,-18,23","w":264},"\u0152":{"d":"382,0r-159,0v-1,-18,3,-39,0,-55v-13,41,-44,60,-92,60v-75,0,-103,-38,-103,-140v0,-102,28,-139,103,-139v50,-1,79,18,93,57r-1,-53r152,0r1,10r-142,0r0,113r124,0r0,9r-124,0r0,128r149,0xm223,-135v0,-100,-25,-129,-91,-129v-66,0,-92,29,-92,129v0,99,26,129,92,129v66,0,91,-30,91,-129","w":403},"\u0153":{"d":"338,-13v-53,33,-139,20,-146,-47v-9,48,-36,65,-79,65v-59,0,-86,-31,-86,-110v0,-78,27,-108,86,-108v44,0,70,18,80,57v9,-40,35,-58,74,-58v46,0,83,34,78,102r-147,0v-6,111,70,125,138,90xm38,-105v0,71,21,100,75,100v53,0,74,-29,74,-100v0,-71,-21,-99,-74,-99v-54,0,-75,28,-75,99xm198,-120r137,0v0,-62,-30,-84,-68,-84v-46,0,-68,29,-69,84","w":367},"\u2013":{"d":"32,-126r134,0r0,8r-134,0r0,-8","w":197},"\u2014":{"d":"32,-126r195,0r0,8r-195,0r0,-8","w":258},"\u201c":{"d":"39,-228v-31,-5,0,-43,6,-69r5,1r-10,45v12,1,14,25,-1,23xm91,-228v-30,-8,2,-44,8,-69r4,1r-10,45v14,1,13,24,-2,23","w":129},"\u201d":{"d":"38,-289v30,5,-1,43,-7,68r-4,0r9,-46v-14,-1,-13,-25,2,-22xm91,-289v30,5,-1,43,-7,68r-4,0r9,-46v-14,-1,-13,-25,2,-22","w":129},"\u2018":{"d":"39,-228v-31,-5,0,-43,6,-69r5,1r-10,45v12,1,14,25,-1,23","w":75},"\u2019":{"d":"38,-289v30,5,-1,43,-7,68r-4,0r9,-46v-14,-1,-13,-25,2,-22","w":75},"\u00f7":{"d":"117,-172v0,7,-4,10,-11,10v-7,0,-11,-2,-11,-10v0,-6,4,-10,11,-10v7,0,11,4,11,10xm117,-74v0,7,-4,10,-11,10v-7,0,-11,-2,-11,-10v0,-6,4,-10,11,-10v7,0,11,4,11,10xm187,-118r-161,0r0,-11r161,0r0,11","w":213},"\u00ff":{"d":"44,38v32,17,55,4,69,-33r-95,-215r14,0r86,202v27,-63,49,-136,75,-202r13,0r-83,222v-18,44,-44,49,-81,35xm96,-275v0,7,-3,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v6,0,9,4,9,10xm146,-275v0,7,-4,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v5,0,9,4,9,10","w":223},"\u0178":{"d":"13,-270r15,0r89,160r87,-160r14,0r-96,172r0,98r-12,0r0,-98xm92,-303v0,7,-3,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v6,0,9,3,9,10xm158,-303v0,7,-3,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v6,0,9,3,9,10","w":231},"\u2044":{"d":"140,-270r10,0r-183,270r-11,0","w":96},"\u20ac":{"d":"177,-122r-2,10r-115,0v1,110,98,126,171,82r2,10v-19,14,-48,23,-76,23v-72,0,-103,-37,-108,-115r-34,0r0,-10r34,0r0,-29r-34,0r0,-10r34,0v-2,-102,95,-134,176,-97r-3,9v-75,-35,-162,-5,-162,88r132,0r-3,10r-130,0r1,29r117,0","w":254},"\u2039":{"d":"118,-171r-82,51r82,51r0,10v-31,-22,-67,-38,-96,-62r96,-60r0,10","w":149},"\u203a":{"d":"32,-59r0,-10r82,-51r-82,-51r0,-10v31,22,67,38,96,62","w":149},"\ufb01":{"d":"63,0r-10,0r0,-202r-37,0r0,-8r37,0v-7,-57,32,-86,91,-73r-1,8v-48,-12,-88,12,-80,65r133,0r0,210r-11,0r0,-202r-122,0r0,202xm203,-274v0,9,-4,12,-12,12v-8,0,-12,-3,-12,-12v0,-7,4,-12,12,-12v8,0,12,5,12,12","w":245},"\ufb02":{"d":"188,0r-11,0r0,-277v-60,-9,-127,2,-114,67r56,0r0,8r-56,0r0,202r-10,0r0,-202r-37,0r0,-8r37,0v-2,-51,16,-76,81,-78v24,0,37,3,54,4r0,284","w":235},"\u2021":{"d":"162,-36r0,9r-67,0r1,78r-11,0r1,-78r-64,0r0,-9r64,0r0,-166r-64,1r0,-10r64,1r-1,-79r11,0r-1,79r67,-1r0,10r-67,-1r0,166r67,0","w":183},"\u00b7":{"d":"61,-123v0,8,-4,11,-12,11v-8,0,-12,-3,-12,-11v0,-8,4,-12,12,-12v8,0,12,4,12,12","w":97},"\u201a":{"d":"38,-19v29,8,-1,44,-7,69r-4,-1r9,-46v-6,0,-10,-5,-10,-10v0,-7,4,-12,12,-12","w":75},"\u201e":{"d":"91,-19v29,8,-1,44,-7,69r-4,-1r9,-46v-6,0,-10,-5,-10,-10v0,-7,4,-12,12,-12xm38,-19v29,8,-1,44,-7,69r-4,-1r9,-46v-6,0,-10,-5,-10,-10v0,-7,4,-12,12,-12","w":129},"\u2030":{"d":"117,-213v0,46,-15,63,-46,63v-32,0,-48,-18,-48,-63v0,-45,14,-63,48,-63v31,0,46,16,46,63xm108,-213v0,-43,-12,-56,-37,-56v-26,0,-39,13,-39,56v0,43,13,55,39,55v25,0,37,-12,37,-55xm182,-272r10,3r-134,269r-9,-3xm222,-60v0,46,-15,62,-46,62v-32,0,-47,-17,-47,-62v0,-45,12,-64,47,-64v31,0,46,17,46,64xm213,-60v0,-43,-12,-56,-37,-56v-26,0,-38,13,-38,56v0,43,12,54,38,54v25,0,37,-12,37,-54xm330,-60v0,46,-15,62,-47,62v-32,0,-47,-17,-47,-62v0,-45,13,-64,47,-64v31,0,47,17,47,64xm321,-60v0,-43,-12,-56,-38,-56v-25,0,-38,13,-38,56v0,43,13,54,38,54v26,0,38,-12,38,-54","w":353},"\u00c2":{"d":"222,0r-30,-78r-138,0r-30,78r-13,0r106,-270r14,0r105,270r-14,0xm125,-260v-25,53,-44,115,-67,171r131,0xm118,-330r12,0r45,41v-30,2,-33,-23,-51,-33v-17,10,-21,35,-50,33","w":246},"\u00ca":{"d":"56,-10r149,0r-1,10r-159,0r0,-270r153,0r0,10r-142,0r0,113r124,0r0,9r-124,0r0,128xm119,-330r11,0r46,41v-30,2,-33,-23,-51,-33r-36,33r-14,0","w":226},"\u00c1":{"d":"222,0r-30,-78r-138,0r-30,78r-13,0r106,-270r14,0r105,270r-14,0xm125,-260v-25,53,-44,115,-67,171r131,0xm142,-330r20,0r-43,41r-11,0","w":246},"\u00cb":{"d":"56,-10r149,0r-1,10r-159,0r0,-270r153,0r0,10r-142,0r0,113r124,0r0,9r-124,0r0,128xm100,-303v0,7,-3,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v6,0,9,3,9,10xm167,-303v0,7,-3,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v6,0,9,3,9,10","w":226},"\u00c8":{"d":"56,-10r149,0r-1,10r-159,0r0,-270r153,0r0,10r-142,0r0,113r124,0r0,9r-124,0r0,128xm137,-290r-10,0r-41,-40r18,0","w":226},"\u00cd":{"d":"50,0r0,-270r12,0r0,270r-12,0xm74,-330r20,0r-43,41r-11,0","w":111},"\u00ce":{"d":"50,0r0,-270r12,0r0,270r-12,0xm50,-330r12,0r45,41v-30,2,-33,-23,-51,-33v-17,10,-21,35,-50,33","w":111},"\u00cf":{"d":"50,0r0,-270r12,0r0,270r-12,0xm32,-303v0,7,-3,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v6,0,9,3,9,10xm98,-303v0,7,-3,10,-9,10v-6,0,-9,-3,-9,-10v0,-6,3,-10,9,-10v6,0,9,3,9,10","w":111},"\u00cc":{"d":"50,0r0,-270r12,0r0,270r-12,0xm69,-290r-11,0r-40,-40r18,0","w":111},"\u00d3":{"d":"236,-135v0,102,-28,140,-104,140v-76,0,-104,-38,-104,-140v0,-102,28,-139,104,-139v76,0,104,37,104,139xm224,-135v0,-100,-26,-129,-92,-129v-66,0,-92,29,-92,129v0,99,26,129,92,129v66,0,92,-30,92,-129xm151,-330r20,0r-43,41r-11,0","w":264},"\u00d4":{"d":"236,-135v0,102,-28,140,-104,140v-76,0,-104,-38,-104,-140v0,-102,28,-139,104,-139v76,0,104,37,104,139xm224,-135v0,-100,-26,-129,-92,-129v-66,0,-92,29,-92,129v0,99,26,129,92,129v66,0,92,-30,92,-129xm127,-330r11,0r46,41v-30,1,-34,-23,-52,-33v-17,10,-21,35,-50,33","w":264},"\u00d2":{"d":"236,-135v0,102,-28,140,-104,140v-76,0,-104,-38,-104,-140v0,-102,28,-139,104,-139v76,0,104,37,104,139xm224,-135v0,-100,-26,-129,-92,-129v-66,0,-92,29,-92,129v0,99,26,129,92,129v66,0,92,-30,92,-129xm153,-290r-10,0r-41,-40r18,0","w":264},"\u00da":{"d":"231,-270r0,172v0,74,-37,103,-97,103v-60,0,-96,-29,-96,-103r0,-172r12,0r0,172v0,64,28,92,84,92v56,0,85,-29,85,-92r0,-172r12,0xm152,-330r20,0r-43,41r-11,0","w":268},"\u00db":{"d":"231,-270r0,172v0,74,-37,103,-97,103v-60,0,-96,-29,-96,-103r0,-172r12,0r0,172v0,64,28,92,84,92v56,0,85,-29,85,-92r0,-172r12,0xm128,-330r12,0r45,41v-30,2,-33,-23,-51,-33v-17,10,-21,35,-50,33","w":268},"\u00d9":{"d":"231,-270r0,172v0,74,-37,103,-97,103v-60,0,-96,-29,-96,-103r0,-172r12,0r0,172v0,64,28,92,84,92v56,0,85,-29,85,-92r0,-172r12,0xm147,-290r-11,0r-40,-40r18,0","w":268},"\u0131":{"d":"60,0r-11,0r0,-210r11,-1r0,211","w":109},"\u02c6":{"d":"65,-292r11,0r39,51r-11,0r-34,-44r-33,44r-11,0"},"\u02dc":{"d":"32,-251r-7,-1v3,-22,12,-35,25,-35v19,0,30,31,45,31v8,0,14,-10,18,-27r7,1v-3,22,-12,35,-25,35v-19,0,-30,-31,-45,-31v-8,0,-14,11,-18,27"},"\u00af":{"d":"116,-274r0,9r-88,0r0,-9r88,0"},"\u02d8":{"d":"105,-292r10,0v0,32,-15,54,-44,54v-29,0,-45,-19,-45,-54r10,0v0,30,15,45,35,45v20,0,34,-15,34,-45"},"\u02d9":{"d":"82,-274v0,9,-4,12,-12,12v-8,0,-12,-3,-12,-12v0,-7,4,-12,12,-12v8,0,12,5,12,12"},"\u02da":{"d":"43,-269v0,-15,12,-25,28,-25v16,0,27,11,27,25v0,14,-11,25,-27,25v-16,0,-28,-11,-28,-25xm51,-269v0,11,7,19,20,19v12,0,20,-8,20,-19v0,-11,-8,-18,-20,-18v-13,0,-20,7,-20,18"},"\u00b8":{"d":"53,69r20,-67r8,0r-14,67r-14,0"},"\u02dd":{"d":"78,-292r16,0r-39,51r-9,0xm122,-292r16,0r-39,51r-10,0"},"\u02db":{"d":"112,55v-19,15,-66,7,-60,-19v0,-15,11,-31,30,-39r5,3v-17,8,-25,22,-25,36v0,22,34,24,49,12"},"\u02c7":{"d":"76,-241r-11,0r-39,-51r11,0r34,44r33,-44r11,0"},"\u00a4":{"d":"55,-91v-18,-20,-19,-55,0,-75r-24,-24r7,-7r24,24v20,-19,55,-18,75,0r25,-24r6,7r-24,24v17,19,17,55,0,74r24,24r-7,6r-23,-23v-20,18,-57,19,-77,0r-23,24r-7,-7xm50,-129v0,27,22,48,49,48v28,0,49,-21,49,-48v0,-27,-21,-49,-49,-49v-27,0,-49,22,-49,49","w":199}}});
/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * 2006 Dziedzic Lukasz published by FSI Fonts und Software GmbH
 */
Cufon.registerFont({"w":232,"face":{"font-family":"ClanMedium","font-weight":500,"font-stretch":"normal","units-per-em":"360","panose-1":"2 0 6 3 0 0 0 0 0 0","ascent":"288","descent":"-72","x-height":"5","bbox":"-46 -329.019 375 68","underline-thickness":"14.04","underline-position":"-29.16","stemh":"27","stemv":"33","unicode-range":"U+0020-U+FB02"},"glyphs":{" ":{"w":101},"\u00d0":{"d":"249,-136v0,98,-39,136,-118,136r-98,0r0,-125r-23,0r0,-31r23,0r0,-114r97,0v84,0,119,40,119,134xm197,-136v0,-93,-39,-90,-114,-88r0,68r33,0r0,31r-33,0r0,80v76,1,114,8,114,-91","w":267},"\u00f0":{"d":"171,-268r-26,17v36,35,63,83,63,131v0,89,-32,124,-96,124v-59,0,-97,-24,-97,-106v0,-89,71,-115,134,-87v-9,-15,-21,-28,-35,-41r-32,20r-16,-18r28,-19v-10,-7,-21,-13,-32,-19r31,-22v11,5,21,12,32,20r30,-20xm62,-100v0,53,18,65,49,65v33,0,50,-21,50,-75v0,-36,-17,-51,-50,-51v-35,0,-49,17,-49,61","w":223},"\u0141":{"d":"91,-46r118,0r-1,46r-167,0r0,-103r-26,12r-4,-41r30,-13r0,-125r50,0r0,105r70,-31r5,42r-75,32r0,76","w":216},"\u0142":{"d":"13,-121r0,-40r29,-15r0,-106r46,-2r0,89r32,-17r0,40r-32,16r0,156r-46,0r0,-136","w":131},"\u0160":{"d":"194,-79v0,86,-116,103,-178,64r7,-44v34,24,122,35,123,-17v0,-51,-128,-29,-128,-119v0,-44,28,-80,93,-80v27,0,54,6,74,15r-6,43v-34,-17,-113,-21,-113,19v0,49,128,27,128,119xm136,-286r-49,0r-39,-43r41,0r23,28r23,-28r40,0","w":206},"\u0161":{"d":"165,-66v0,69,-96,87,-147,54r5,-39v26,19,98,29,99,-11v0,-41,-105,-19,-105,-94v0,-61,87,-79,139,-52r-4,38v-29,-13,-91,-21,-91,12v0,38,104,17,104,92xm113,-237r-40,0r-36,-52r34,0r22,34r21,-34r36,0","w":178},"\u00dd":{"d":"5,-270r56,0r65,136r62,-136r54,0r-93,181r0,89r-50,0r0,-89xm125,-329r59,0r-48,43r-37,0","w":246},"\u00fd":{"d":"43,19v26,11,50,5,60,-22r-94,-214r52,0r65,172r49,-172r49,0r-77,218v-19,54,-58,68,-108,51xm114,-289r54,0r-42,52r-35,0"},"\u00de":{"d":"224,-137v0,69,-57,94,-144,87r0,50r-50,0r0,-270r50,0r0,44v86,-5,144,14,144,89xm173,-137v0,-50,-43,-48,-93,-47r0,93v48,0,93,6,93,-46","w":237},"\u00fe":{"d":"213,-109v0,107,-73,137,-140,94r1,69r-46,0r0,-336r46,-2r0,87v60,-46,139,-28,139,88xm165,-109v0,-83,-59,-83,-91,-49r0,101v30,35,91,36,91,-52","w":227},"\u017d":{"d":"205,0r-190,0r0,-33r130,-191r-127,0r2,-46r185,0r0,37r-127,187r128,0xm138,-286r-49,0r-39,-43r41,0r22,28r23,-28r41,0","w":222},"\u017e":{"d":"175,-184r-86,122v-5,8,-16,16,-17,23r106,0r-2,39r-158,0r0,-33r104,-144r-101,0r2,-40r152,0r0,33xm119,-237r-40,0r-36,-52r34,0r22,34r22,-34r35,0","w":194},"\u00bd":{"d":"229,-270r33,0r-180,270r-33,0xm297,-101v0,29,-28,46,-62,73r62,0r-1,28r-103,0r0,-22v39,-34,69,-55,69,-76v-1,-26,-47,-20,-63,-5r-8,-26v30,-25,106,-19,106,28xm105,-270r0,142r-33,0r0,-103r-30,17r-2,-27v21,-10,31,-32,65,-29","w":318},"\u00bc":{"d":"104,-270r0,142r-33,0r0,-103r-29,17r-3,-27v22,-10,31,-32,65,-29xm294,-27r-14,0r0,27r-31,0r0,-27r-73,0r-2,-19r66,-96r40,0r0,88r16,0xm250,-54v0,-19,4,-42,1,-59r-40,59r39,0xm234,-270r33,0r-180,270r-33,0","w":318},"\u00b9":{"d":"79,-320r0,143r-33,0r0,-103r-29,16r-3,-27v21,-10,31,-32,65,-29","w":100},"\u00be":{"d":"287,-27r-15,0r0,27r-31,0r0,-27r-73,0r-2,-19r66,-96r40,0r0,88r16,0xm242,-54v0,-19,4,-42,1,-59r-40,59r39,0xm233,-270r33,0r-181,270r-32,0xm129,-171v0,47,-76,56,-108,33r7,-25v18,11,69,18,69,-9v0,-12,-9,-18,-42,-18r0,-23v32,0,40,-6,40,-17v0,-23,-53,-17,-66,-2r-8,-25v27,-24,105,-20,105,24v0,16,-11,24,-22,31v16,5,25,14,25,31","w":318},"\u00b3":{"d":"120,-220v0,45,-76,55,-108,32r7,-25v18,13,69,19,69,-9v0,-12,-9,-18,-42,-18r0,-22v32,0,40,-7,40,-18v0,-22,-52,-15,-66,-2r-8,-24v27,-24,105,-19,105,24v0,16,-11,24,-22,31v16,5,25,14,25,31","w":131},"\u00b2":{"d":"119,-279v0,29,-27,47,-61,74r61,0r-1,28r-103,0r0,-22v39,-34,69,-56,69,-77v-1,-25,-47,-18,-63,-4r-8,-26v29,-24,106,-20,106,27","w":131},"\u00a6":{"d":"34,-134r0,-157r35,0r0,157r-35,0xm34,60r0,-157r35,0r0,157r-35,0","w":102},"\u2212":{"d":"189,-100r-162,0r0,-43r162,0r0,43","w":216},"\u00d7":{"d":"185,-69r-27,28r-50,-49r-50,49r-27,-28r51,-50r-51,-50r26,-29r51,50r51,-50r26,29r-50,50","w":216},"!":{"d":"72,-76r-35,0r-7,-194r49,0xm82,-21v0,15,-8,25,-27,25v-18,0,-27,-7,-27,-25v0,-16,9,-24,27,-24v19,0,27,8,27,24","w":109},"\"":{"d":"88,-276r45,0r-8,93r-30,0xm19,-276r45,0r-9,93r-29,0","w":147},"#":{"d":"16,-108r39,0r9,-54r-47,0r0,-36r52,0r11,-72r37,0r-11,72r35,0r11,-72r36,0r-11,72r36,0r0,36r-41,0r-9,54r49,0r1,37r-54,0r-11,71r-36,0r11,-71r-36,0r-11,71r-36,0r11,-71r-35,0r0,-37xm101,-162r-9,54r36,0r9,-54r-36,0","w":229},"$":{"d":"101,30r-25,-3r2,-23v-23,-3,-45,-8,-60,-17v2,-15,2,-28,5,-45v18,10,40,18,61,21r9,-81v-37,-13,-76,-31,-76,-79v0,-49,33,-76,96,-77r3,-24r28,3r-3,22v17,2,34,6,44,11r-4,42v-14,-5,-30,-8,-46,-10r-9,71v36,13,72,31,72,81v0,56,-29,82,-94,83xm160,-71v0,-19,-18,-28,-41,-37r-9,72v35,-1,50,-12,50,-35xm59,-200v0,17,18,25,40,33r8,-64v-34,1,-48,13,-48,31","w":214},"%":{"d":"122,-211v0,43,-18,63,-54,63v-37,0,-54,-21,-54,-63v0,-44,16,-63,54,-63v35,0,54,17,54,63xm91,-211v0,-26,-8,-34,-23,-34v-16,0,-23,7,-23,34v0,27,7,33,23,33v15,0,23,-6,23,-33xm187,-260r26,21r-143,231r-27,-21xm247,-59v0,43,-18,63,-54,63v-37,0,-54,-21,-54,-63v0,-44,16,-64,54,-64v36,0,54,18,54,64xm216,-59v0,-26,-7,-34,-23,-34v-15,0,-22,7,-22,34v0,26,7,32,22,32v16,0,23,-6,23,-32","w":261},"&":{"d":"251,-39r-16,42v-18,-9,-38,-21,-57,-35v-22,22,-51,37,-87,37v-57,0,-77,-36,-77,-74v0,-37,23,-61,49,-81v-37,-53,-36,-124,49,-124v41,0,69,21,69,52v0,33,-32,56,-63,78v15,18,34,37,55,54v10,-17,16,-34,20,-51r40,0v-2,20,-11,48,-28,75v15,10,31,19,46,27xm61,-73v0,44,62,40,85,15v-22,-19,-43,-40,-60,-61v-15,13,-25,28,-25,46xm111,-238v-36,1,-35,39,-15,64v22,-15,40,-27,40,-44v0,-14,-11,-20,-25,-20","w":254},"'":{"d":"17,-276r45,0r-9,93r-30,0","w":78},"(":{"d":"88,-285r35,3v-64,89,-63,238,0,327r-35,3v-75,-80,-76,-252,0,-333","w":124},")":{"d":"1,-282r35,-3v76,81,77,253,0,333r-35,-3v64,-89,65,-238,0,-327","w":124},"*":{"d":"56,-283r22,0r3,38r37,-9r7,23r-36,14r22,33r-17,14r-27,-31r-28,31r-17,-13r22,-34r-37,-14r8,-23r38,9","w":132},"+":{"d":"192,-100r-65,0r0,63r-40,0r0,-63r-63,0r0,-43r63,0r0,-63r40,0r0,63r65,0r0,43","w":216},",":{"d":"46,-49v53,6,16,72,-2,100r-17,-3r10,-44v-24,-7,-25,-57,9,-53","w":92},"-":{"d":"22,-140r99,0r0,34r-99,0r0,-34","w":142},".":{"d":"75,-23v0,17,-9,27,-28,27v-19,0,-28,-8,-28,-27v0,-18,9,-27,28,-27v19,0,28,9,28,27","w":93},"\/":{"d":"123,-284r40,0r-124,328r-38,0","w":162},"0":{"d":"215,-134v0,98,-30,138,-99,138v-70,0,-98,-40,-98,-138v0,-102,28,-139,98,-139v69,0,99,37,99,139xm167,-135v0,-79,-16,-95,-51,-95v-35,0,-51,17,-51,95v0,80,16,96,51,96v35,0,51,-16,51,-96"},"1":{"d":"62,0r0,-36r43,0r0,-174r-53,33r-5,-42r79,-51r29,0r0,234r42,0r0,36r-135,0"},"2":{"d":"206,-196v1,53,-48,95,-113,152r114,0r-1,44r-177,0r0,-33v67,-65,127,-114,127,-158v0,-51,-90,-44,-116,-13r-12,-40v22,-17,52,-29,88,-29v60,0,90,31,90,77"},"3":{"d":"210,-81v0,51,-31,84,-102,84v-35,0,-62,-9,-82,-21r10,-39v36,26,127,30,127,-26v0,-27,-18,-40,-78,-40r0,-36v57,0,73,-15,73,-39v0,-47,-95,-36,-119,-8r-12,-38v44,-46,176,-38,176,43v0,30,-17,46,-40,59v30,9,47,29,47,61"},"4":{"d":"217,-54r-29,0r0,54r-45,0r0,-54r-121,0r-5,-32r113,-184r58,0r0,174r31,0xm145,-96r2,-130r-77,130r75,0"},"5":{"d":"208,-93v0,60,-30,96,-97,96v-32,0,-59,-7,-82,-21r9,-39v38,27,128,32,122,-32v7,-53,-77,-45,-111,-30r-17,-19r11,-132r151,0r1,44r-114,0r-5,61v64,-18,132,2,132,72"},"6":{"d":"212,-94v0,66,-34,97,-94,97v-64,0,-99,-35,-99,-131v0,-123,76,-167,178,-135r-4,42v-60,-21,-130,-4,-126,66v53,-38,145,-19,145,61xm165,-95v0,-51,-73,-50,-97,-21v1,58,15,77,50,77v31,0,47,-17,47,-56"},"7":{"d":"213,-270r0,42r-107,228r-55,0r115,-223r-145,0r2,-47r190,0"},"8":{"d":"117,3v-106,0,-128,-105,-57,-145v-18,-12,-31,-30,-31,-61v0,-44,27,-70,88,-70v96,0,110,93,53,131v24,11,43,29,43,65v0,53,-32,80,-96,80xm167,-74v0,-31,-34,-38,-67,-49v-20,10,-35,24,-35,46v0,28,16,41,53,41v30,0,49,-11,49,-38xm73,-201v0,27,27,36,57,45v43,-16,45,-78,-14,-78v-29,0,-43,11,-43,33"},"9":{"d":"211,-147v0,138,-78,172,-177,138r7,-41v59,26,130,9,123,-71v-16,12,-36,17,-59,17v-59,0,-86,-32,-86,-81v0,-54,29,-88,93,-88v63,0,99,41,99,126xm164,-163v-1,-51,-21,-68,-53,-68v-31,0,-46,14,-46,44v0,52,77,56,99,24"},":":{"d":"75,-177v0,17,-9,27,-28,27v-19,0,-28,-8,-28,-27v0,-18,9,-28,28,-28v19,0,28,10,28,28xm75,-23v0,17,-9,27,-28,27v-19,0,-28,-8,-28,-27v0,-18,9,-27,28,-27v19,0,28,9,28,27","w":93},";":{"d":"76,-177v0,17,-9,27,-28,27v-19,0,-27,-8,-27,-27v0,-18,8,-28,27,-28v19,0,28,10,28,28xm47,-49v55,6,16,72,-2,100r-17,-3r10,-44v-23,-7,-24,-57,9,-53","w":95},"<":{"d":"184,-166r-97,46r97,46r0,45r-152,-79r0,-24r152,-81r0,47","w":216},"=":{"d":"189,-136r-162,0r0,-36r162,0r0,36xm189,-66r-162,0r0,-36r162,0r0,36","w":216},">":{"d":"32,-29r0,-45r97,-46r-97,-46r0,-47r152,81r0,24","w":216},"?":{"d":"171,-207v0,41,-24,66,-63,87r-2,44r-36,0r-3,-61v35,-20,57,-37,57,-63v-1,-45,-78,-32,-98,-9r-17,-37v39,-43,162,-38,162,39xm115,-21v0,15,-8,25,-27,25v-19,0,-27,-7,-27,-25v0,-16,8,-24,27,-24v19,0,27,8,27,24","w":183},"@":{"d":"82,-104v0,-67,61,-137,113,-91r5,-12r25,1r-17,109v0,15,6,27,23,27v24,0,43,-24,43,-77v0,-64,-37,-112,-107,-112v-83,0,-124,61,-124,136v0,78,39,136,125,136v56,0,89,-21,106,-36r11,24v-25,21,-63,39,-117,39v-96,0,-152,-62,-152,-163v0,-87,53,-163,152,-163v82,0,132,58,132,139v0,77,-34,108,-73,108v-22,0,-37,-9,-44,-26v-30,41,-101,36,-101,-39xm143,-73v33,-1,35,-60,41,-93v-32,-32,-65,16,-64,61v0,20,8,32,23,32","w":316},"A":{"d":"201,0r-18,-58r-108,0r-18,58r-53,0r96,-270r59,0r97,270r-55,0xm130,-234r-42,134r82,0","w":260},"B":{"d":"229,-78v0,48,-26,78,-91,78r-108,0r0,-270r105,0v57,0,84,24,84,68v0,31,-14,50,-36,59v30,8,46,30,46,65xm180,-82v0,-48,-57,-37,-102,-38r0,78v46,-2,102,14,102,-40xm172,-193v0,-46,-54,-32,-94,-34r0,70v42,-1,94,10,94,-36","w":248},"C":{"d":"203,-263r-5,44v-14,-5,-34,-10,-55,-10v-53,0,-72,22,-72,92v0,102,61,110,127,86r6,41v-18,9,-43,15,-66,15v-81,0,-120,-45,-120,-142v0,-118,86,-161,185,-126","w":216},"D":{"d":"246,-136v0,98,-39,136,-118,136r-98,0r0,-270r97,0v84,0,119,40,119,134xm194,-136v0,-93,-39,-90,-114,-88r0,179v76,1,114,8,114,-91","w":264},"E":{"d":"80,-44r129,0r-1,44r-178,0r0,-270r173,0r0,45r-123,0r0,65r105,0r0,41r-105,0r0,75","w":223},"F":{"d":"203,-224r-123,0r0,69r103,0r0,44r-103,0r0,111r-50,0r0,-270r172,0","w":213},"G":{"d":"223,-144r0,134v-20,9,-50,15,-79,15v-89,0,-126,-45,-126,-139v0,-96,39,-141,127,-141v26,0,53,5,73,13r-5,44v-19,-8,-42,-12,-65,-12v-57,0,-77,22,-77,95v0,91,41,103,108,89r0,-98r44,0","w":243},"H":{"d":"239,0r-50,0r0,-116r-109,0r0,116r-50,0r0,-270r50,0r0,108r109,0r0,-108r50,0r0,270","w":268},"I":{"d":"34,0r0,-270r51,0r0,270r-51,0","w":118},"J":{"d":"168,-270r0,175v8,93,-88,119,-156,87r3,-43v37,21,102,15,102,-45r0,-174r51,0","w":198},"K":{"d":"249,0r-60,0r-76,-118r-33,0r0,118r-50,0r0,-270r50,0r0,110r34,0r73,-110r58,0r-87,128","w":256},"L":{"d":"80,-46r118,0r-1,46r-167,0r0,-270r50,0r0,224","w":205},"M":{"d":"30,-270r55,0r81,199r80,-199r55,0r0,270r-45,0r-1,-185r-74,185r-33,0r-75,-185r1,185r-44,0r0,-270","w":330},"N":{"d":"241,0r-35,0r-132,-189r0,189r-44,0r0,-270r43,0r124,182r0,-182r44,0r0,270","w":270},"O":{"d":"249,-135v0,99,-33,140,-115,140v-82,0,-116,-43,-116,-140v0,-97,33,-139,116,-139v82,0,115,42,115,139xm198,-135v0,-75,-17,-94,-64,-94v-46,0,-63,19,-63,94v0,75,17,94,63,94v46,0,64,-20,64,-94","w":268},"P":{"d":"224,-181v0,72,-59,94,-144,87r0,94r-50,0r0,-270r93,0v71,0,101,28,101,89xm172,-181v0,-53,-43,-48,-92,-47r0,93v48,-1,92,9,92,-46","w":236},"Q":{"d":"249,-135v1,81,-23,122,-74,136r54,39r-59,15r-43,-50v-76,-3,-109,-46,-109,-140v0,-97,33,-139,116,-139v82,0,115,42,115,139xm198,-135v0,-75,-17,-94,-64,-94v-46,0,-63,19,-63,94v0,75,17,94,63,94v46,0,64,-20,64,-94","w":268},"R":{"d":"219,-189v0,40,-17,65,-48,73r66,116r-58,0r-53,-106r-46,0r0,106r-50,0r0,-270r95,0v63,0,94,26,94,81xm168,-187v0,-49,-44,-41,-88,-41r0,83v44,0,88,8,88,-42","w":241},"S":{"d":"194,-79v0,86,-116,103,-178,64r7,-44v34,24,122,35,123,-17v0,-51,-128,-29,-128,-119v0,-44,28,-80,93,-80v27,0,54,6,74,15r-6,43v-34,-17,-113,-21,-113,19v0,49,128,27,128,119","w":206},"T":{"d":"207,-224r-76,0r0,224r-50,0r0,-224r-76,0r1,-46r200,0","w":212},"U":{"d":"238,-270r0,173v0,69,-37,102,-106,102v-69,0,-106,-33,-106,-102r0,-173r49,0r0,173v0,39,18,56,57,56v39,0,56,-17,56,-56r0,-173r50,0","w":263},"V":{"d":"197,-270r51,0r-94,270r-56,0r-93,-270r54,0r69,222","w":252},"W":{"d":"158,-270r54,0r51,221r43,-221r50,0r-64,270r-61,0r-47,-221r-47,221r-60,0r-64,-270r51,0r45,222","w":368},"X":{"d":"240,-270r-78,129r82,141r-57,0r-61,-112r-58,112r-58,0r80,-140r-78,-130r60,0r56,101r55,-101r57,0","w":253},"Y":{"d":"5,-270r56,0r65,136r62,-136r54,0r-93,181r0,89r-50,0r0,-89","w":246},"Z":{"d":"205,0r-190,0r0,-33r130,-191r-127,0r2,-46r185,0r0,37r-127,187r128,0","w":222},"[":{"d":"31,47r0,-331r90,0r0,33r-49,0r0,265r49,0r0,33r-90,0","w":122},"\\":{"d":"-1,-284r37,0r107,328r-37,0","w":136},"]":{"d":"92,-284r0,331r-91,0r0,-33r49,0r0,-265r-49,0r0,-33r91,0","w":122},"^":{"d":"174,-167r-58,-88r-58,88r-37,0r79,-122r32,0r79,122r-37,0"},"_":{"d":"7,15r138,0r0,29r-138,0r0,-29","w":151},"`":{"d":"109,-237r-36,0r-41,-52r54,0","w":144},"a":{"d":"150,0v-2,-7,-1,-17,-5,-23v-35,45,-135,35,-128,-44v-6,-57,67,-80,122,-60v14,-65,-63,-62,-105,-42r-4,-38v21,-9,45,-14,72,-14v113,0,77,124,83,221r-35,0xm96,-33v37,-2,48,-24,43,-62v-20,-12,-89,-9,-79,27v0,25,15,35,36,35","w":207},"b":{"d":"213,-109v0,112,-88,138,-148,89r-6,20r-31,0r0,-282r45,-2r1,85v61,-46,139,-20,139,90xm166,-108v0,-88,-60,-83,-93,-50r0,103v31,35,93,38,93,-53","w":227},"c":{"d":"164,-210r-3,40v-50,-18,-99,-8,-99,61v0,74,51,85,100,63r4,37v-13,8,-33,14,-56,14v-63,0,-95,-37,-95,-114v0,-95,70,-130,149,-101","w":178},"d":{"d":"200,0r-35,0v-3,-7,-3,-16,-7,-21v-13,16,-32,25,-60,25v-57,0,-83,-36,-83,-113v0,-102,77,-140,140,-90r-1,-83r46,-2r0,284xm154,-55r0,-104v-8,-12,-23,-20,-43,-20v-36,0,-49,19,-49,72v0,55,12,73,49,73v25,0,37,-11,43,-21","w":227},"e":{"d":"120,4v-73,0,-105,-38,-105,-116v0,-69,30,-108,93,-108v60,0,94,46,86,122r-132,0v-3,70,72,70,121,49r6,38v-18,9,-42,15,-69,15xm61,-129r92,0v-1,-38,-18,-52,-45,-52v-31,0,-45,15,-47,52","w":209},"f":{"d":"85,0r-46,0r0,-182r-29,0r0,-35r29,0v-10,-54,49,-81,106,-65r-2,30v-29,-8,-66,0,-58,35r50,0r0,35r-50,0r0,182","w":145},"g":{"d":"177,-180v25,65,-32,103,-103,88v-16,6,-17,23,4,25v54,2,123,7,123,57v0,42,-28,68,-97,68v-81,0,-108,-53,-67,-94v-25,-16,-22,-55,10,-67v-45,-34,-31,-117,55,-117v19,0,39,2,54,12r36,-13r10,23xm159,-3v0,-26,-61,-21,-88,-25v-25,22,-15,51,32,51v45,0,56,-11,56,-26xm103,-185v-26,0,-36,10,-36,32v0,25,15,31,35,31v28,0,36,-9,36,-31v0,-23,-10,-32,-35,-32","w":208},"h":{"d":"204,0r-46,0r0,-140v6,-47,-68,-48,-85,-19r0,159r-45,0r0,-282r45,-2r1,85v48,-45,130,-19,130,59r0,140","w":226},"i":{"d":"80,0r-47,0r0,-215r47,-3r0,218xm84,-267v0,14,-8,21,-27,21v-18,0,-27,-5,-27,-21v0,-14,9,-22,27,-22v19,0,27,8,27,22","w":113},"j":{"d":"80,-218r0,218v1,56,-42,65,-85,54r2,-33v19,5,37,2,37,-22r0,-214xm84,-267v0,14,-8,21,-27,21v-19,0,-28,-5,-28,-21v0,-14,9,-22,28,-22v19,0,27,8,27,22","w":113},"k":{"d":"73,-284r0,149r31,0r54,-82r52,0r-66,99r68,118r-53,0r-55,-97r-31,0r0,97r-45,0r0,-282","w":217},"l":{"d":"77,0r-46,0r0,-282r46,-2r0,284","w":109},"m":{"d":"313,0r-46,0r0,-141v0,-26,-14,-38,-38,-38v-21,0,-36,12,-36,36r0,143r-46,0r0,-143v2,-46,-58,-44,-75,-16r0,159r-46,0r0,-216r33,-2r8,22v28,-33,95,-33,113,7v37,-54,133,-38,133,48r0,141","w":336},"n":{"d":"202,0r-46,0r0,-140v4,-48,-64,-48,-84,-19r0,159r-46,0r0,-216r33,-2r7,21v47,-45,136,-26,136,57r0,140","w":225},"o":{"d":"208,-108v0,80,-29,113,-96,113v-67,0,-97,-33,-97,-113v0,-80,30,-113,97,-113v67,0,96,33,96,113xm62,-108v0,57,14,75,50,75v36,0,49,-18,49,-75v0,-57,-13,-74,-49,-74v-36,0,-50,17,-50,74","w":223},"p":{"d":"211,-109v0,78,-33,113,-84,113v-22,1,-40,-6,-55,-20r0,70r-46,0r0,-269r32,-2r9,20v61,-46,144,-28,144,88xm164,-109v0,-83,-59,-83,-92,-49r0,101v30,36,92,36,92,-52","w":226},"q":{"d":"199,54r-45,1r0,-70v-63,41,-139,13,-139,-93v0,-109,89,-139,150,-87r5,-21r29,0r0,270xm111,-36v67,0,37,-69,43,-122v-6,-11,-22,-20,-43,-20v-35,0,-49,15,-49,70v0,54,15,72,49,72","w":226},"r":{"d":"72,0r-46,0r0,-215r37,-2v2,13,1,29,5,40v16,-35,46,-50,85,-40r-3,46v-44,-12,-78,12,-78,62r0,109","w":162},"s":{"d":"165,-66v0,69,-96,87,-147,54r5,-39v26,19,98,29,99,-11v0,-41,-105,-19,-105,-94v0,-61,87,-79,139,-52r-4,38v-29,-13,-91,-21,-91,12v0,38,104,17,104,92","w":178},"t":{"d":"133,-181r-51,0r0,120v-2,26,24,30,47,25r2,34v-45,17,-94,-4,-94,-58r0,-121r-27,0r0,-36r28,0r8,-50r36,-4r0,54r51,0r0,36","w":143},"u":{"d":"199,-217r0,143v0,51,-29,78,-88,78v-59,0,-88,-28,-88,-78r0,-143r46,0r0,142v0,25,13,38,42,38v28,0,42,-13,42,-38r0,-142r46,0","w":222},"v":{"d":"174,-217r50,0r-81,217r-54,0r-80,-217r50,0r58,176"},"w":{"d":"136,-217r48,0r41,180r33,-180r45,0r-50,217r-57,0r-36,-168r-37,168r-56,0r-53,-217r46,0r37,180","w":317},"x":{"d":"157,0r-49,-89r-46,89r-51,0r67,-109r-66,-108r54,0r46,86r45,-86r51,0r-64,106r66,111r-53,0","w":221},"y":{"d":"43,19v26,11,50,5,60,-22r-94,-214r52,0r65,172r49,-172r49,0r-77,218v-19,54,-58,68,-108,51"},"z":{"d":"175,-184r-86,122v-5,8,-16,16,-17,23r106,0r-2,39r-158,0r0,-33r104,-144r-101,0r2,-40r152,0r0,33","w":194},"{":{"d":"135,-251v-92,-5,-5,111,-61,132v33,15,18,65,17,102v-1,21,16,32,44,29r0,35v-58,2,-86,-18,-86,-58v0,-37,23,-90,-18,-98r0,-20v41,-8,18,-62,18,-99v0,-40,27,-60,86,-58r0,35","w":136},"|":{"d":"34,64r0,-355r35,0r0,355r-35,0","w":102},"}":{"d":"1,12v94,5,4,-111,62,-132v-58,-19,31,-137,-62,-131r0,-35v58,-2,86,18,86,58v0,38,-23,91,19,99r0,20v-42,7,-19,61,-19,98v0,40,-27,60,-86,58r0,-35","w":136},"~":{"d":"56,-217r-26,0v3,-41,19,-62,49,-62v37,1,80,49,97,4r26,0v-3,41,-20,62,-49,62v-37,-1,-79,-49,-97,-4"},"\u00c4":{"d":"201,0r-18,-58r-108,0r-18,58r-53,0r96,-270r59,0r97,270r-55,0xm130,-234r-42,134r82,0xm115,-306v0,13,-6,19,-20,19v-14,0,-21,-5,-21,-19v0,-13,7,-20,21,-20v14,0,20,7,20,20xm185,-306v0,13,-6,19,-20,19v-13,0,-20,-5,-20,-19v0,-13,7,-20,20,-20v14,0,20,7,20,20","w":260},"\u00c5":{"d":"98,-264v-21,-20,-12,-59,31,-59v43,0,52,37,32,58r95,265r-55,0r-18,-58r-108,0r-18,58r-53,0xm130,-234r-42,134r82,0xm112,-288v0,8,4,13,18,13v13,0,17,-4,17,-13v0,-8,-4,-13,-17,-13v-14,0,-18,5,-18,13","w":260},"\u00c7":{"d":"98,68r22,-64v-69,-6,-102,-51,-102,-141v0,-118,86,-161,185,-126r-5,44v-14,-5,-34,-10,-55,-10v-53,0,-72,22,-72,92v0,102,61,110,127,86r6,41v-14,7,-34,12,-53,14r-12,64r-41,0","w":216},"\u00c9":{"d":"80,-44r129,0r-1,44r-178,0r0,-270r173,0r0,45r-123,0r0,65r105,0r0,41r-105,0r0,75xm120,-329r59,0r-48,43r-37,0","w":223},"\u00d1":{"d":"241,0r-35,0r-132,-189r0,189r-44,0r0,-270r43,0r124,182r0,-182r44,0r0,270xm100,-288r-21,0v1,-24,13,-41,34,-41v30,-1,50,37,62,5r20,0v-1,24,-13,41,-34,41v-28,0,-49,-37,-61,-5","w":270},"\u00d6":{"d":"249,-135v0,99,-33,140,-115,140v-82,0,-116,-43,-116,-140v0,-97,33,-139,116,-139v82,0,115,42,115,139xm198,-135v0,-75,-17,-94,-64,-94v-46,0,-63,19,-63,94v0,75,17,94,63,94v46,0,64,-20,64,-94xm120,-306v0,13,-7,19,-21,19v-14,0,-20,-5,-20,-19v0,-13,6,-20,20,-20v14,0,21,7,21,20xm190,-306v0,13,-6,19,-20,19v-13,0,-21,-5,-21,-19v0,-13,8,-20,21,-20v14,0,20,7,20,20","w":268},"\u00dc":{"d":"238,-270r0,173v0,69,-37,102,-106,102v-69,0,-106,-33,-106,-102r0,-173r49,0r0,173v0,39,18,56,57,56v39,0,56,-17,56,-56r0,-173r50,0xm117,-306v0,13,-7,19,-21,19v-14,0,-20,-5,-20,-19v0,-13,6,-20,20,-20v14,0,21,7,21,20xm187,-306v0,13,-6,19,-20,19v-13,0,-20,-5,-20,-19v0,-13,7,-20,20,-20v14,0,20,7,20,20","w":263},"\u00e1":{"d":"150,0v-2,-7,-1,-17,-5,-23v-35,45,-135,35,-128,-44v-6,-57,67,-80,122,-60v14,-65,-63,-62,-105,-42r-4,-38v21,-9,45,-14,72,-14v113,0,77,124,83,221r-35,0xm96,-33v37,-2,48,-24,43,-62v-20,-12,-89,-9,-79,27v0,25,15,35,36,35xm100,-289r54,0r-42,52r-35,0","w":207},"\u00e0":{"d":"150,0v-2,-7,-1,-17,-5,-23v-35,45,-135,35,-128,-44v-6,-57,67,-80,122,-60v14,-65,-63,-62,-105,-42r-4,-38v21,-9,45,-14,72,-14v113,0,77,124,83,221r-35,0xm96,-33v37,-2,48,-24,43,-62v-20,-12,-89,-9,-79,27v0,25,15,35,36,35xm126,-237r-35,0r-41,-52r53,0","w":207},"\u00e2":{"d":"150,0v-2,-7,-1,-17,-5,-23v-35,45,-135,35,-128,-44v-6,-57,67,-80,122,-60v14,-65,-63,-62,-105,-42r-4,-38v21,-9,45,-14,72,-14v113,0,77,124,83,221r-35,0xm96,-33v37,-2,48,-24,43,-62v-20,-12,-89,-9,-79,27v0,25,15,35,36,35xm82,-289r41,0r36,52r-34,0r-22,-33r-22,33r-35,0","w":207},"\u00e4":{"d":"150,0v-2,-7,-1,-17,-5,-23v-35,45,-135,35,-128,-44v-6,-57,67,-80,122,-60v14,-65,-63,-62,-105,-42r-4,-38v21,-9,45,-14,72,-14v113,0,77,124,83,221r-35,0xm96,-33v37,-2,48,-24,43,-62v-20,-12,-89,-9,-79,27v0,25,15,35,36,35xm94,-267v0,14,-7,20,-21,20v-14,0,-20,-5,-20,-20v0,-14,6,-21,20,-21v14,0,21,7,21,21xm156,-267v0,14,-6,20,-20,20v-14,0,-21,-5,-21,-20v0,-14,7,-21,21,-21v14,0,20,7,20,21","w":207},"\u00e3":{"d":"150,0v-2,-7,-1,-17,-5,-23v-35,45,-135,35,-128,-44v-6,-57,67,-80,122,-60v14,-65,-63,-62,-105,-42r-4,-38v21,-9,45,-14,72,-14v113,0,77,124,83,221r-35,0xm96,-33v37,-2,48,-24,43,-62v-20,-12,-89,-9,-79,27v0,25,15,35,36,35xm67,-243r-22,0v2,-27,15,-46,35,-46v30,1,48,45,61,4r21,1v-1,27,-15,45,-34,45v-30,-1,-48,-43,-61,-4","w":207},"\u00e5":{"d":"150,0v-2,-7,-1,-17,-5,-23v-35,45,-135,35,-128,-44v-6,-57,67,-80,122,-60v14,-65,-63,-62,-105,-42r-4,-38v21,-9,45,-14,72,-14v113,0,77,124,83,221r-35,0xm96,-33v37,-2,48,-24,43,-62v-20,-12,-89,-9,-79,27v0,25,15,35,36,35xm62,-267v0,-19,12,-31,41,-31v28,0,42,13,42,31v0,20,-14,30,-42,30v-27,0,-41,-9,-41,-30xm85,-267v0,8,5,12,19,12v13,0,19,-4,19,-12v0,-8,-6,-13,-19,-13v-14,0,-19,5,-19,13","w":207},"\u00e7":{"d":"70,68r22,-64v-51,-6,-77,-44,-77,-113v0,-95,70,-130,149,-101r-3,40v-50,-18,-99,-8,-99,61v0,74,51,85,100,63r4,37v-10,7,-26,12,-43,13r-11,64r-42,0","w":178},"\u00e9":{"d":"120,4v-73,0,-105,-38,-105,-116v0,-69,30,-108,93,-108v60,0,94,46,86,122r-132,0v-3,70,72,70,121,49r6,38v-18,9,-42,15,-69,15xm61,-129r92,0v-1,-38,-18,-52,-45,-52v-31,0,-45,15,-47,52xm105,-289r53,0r-42,52r-35,0","w":209},"\u00e8":{"d":"120,4v-73,0,-105,-38,-105,-116v0,-69,30,-108,93,-108v60,0,94,46,86,122r-132,0v-3,70,72,70,121,49r6,38v-18,9,-42,15,-69,15xm61,-129r92,0v-1,-38,-18,-52,-45,-52v-31,0,-45,15,-47,52xm131,-237r-35,0r-41,-52r53,0","w":209},"\u00ea":{"d":"120,4v-73,0,-105,-38,-105,-116v0,-69,30,-108,93,-108v60,0,94,46,86,122r-132,0v-3,70,72,70,121,49r6,38v-18,9,-42,15,-69,15xm61,-129r92,0v-1,-38,-18,-52,-45,-52v-31,0,-45,15,-47,52xm87,-289r40,0r37,52r-35,0r-21,-33r-22,33r-35,0","w":209},"\u00eb":{"d":"120,4v-73,0,-105,-38,-105,-116v0,-69,30,-108,93,-108v60,0,94,46,86,122r-132,0v-3,70,72,70,121,49r6,38v-18,9,-42,15,-69,15xm61,-129r92,0v-1,-38,-18,-52,-45,-52v-31,0,-45,15,-47,52xm94,-267v0,14,-6,20,-20,20v-14,0,-20,-5,-20,-20v0,-14,6,-21,20,-21v14,0,20,7,20,21xm156,-267v0,14,-6,20,-20,20v-14,0,-20,-5,-20,-20v0,-14,6,-21,20,-21v14,0,20,7,20,21","w":209},"\u00ed":{"d":"80,0r-47,0r0,-215r47,-3r0,218xm55,-289r53,0r-42,52r-35,0","w":113},"\u00ec":{"d":"80,0r-47,0r0,-215r47,-3r0,218xm81,-237r-36,0r-41,-52r54,0","w":113},"\u00ee":{"d":"80,0r-47,0r0,-215r47,-3r0,218xm37,-289r40,0r37,52r-35,0r-22,-33r-22,33r-34,0","w":113},"\u00ef":{"d":"80,0r-47,0r0,-215r47,-3r0,218xm48,-267v0,14,-7,20,-21,20v-14,0,-20,-5,-20,-20v0,-14,6,-21,20,-21v14,0,21,7,21,21xm110,-267v0,14,-6,20,-20,20v-14,0,-21,-5,-21,-20v0,-14,7,-21,21,-21v14,0,20,7,20,21","w":113},"\u00f1":{"d":"202,0r-46,0r0,-140v4,-48,-64,-48,-84,-19r0,159r-46,0r0,-216r33,-2r7,21v47,-45,136,-26,136,57r0,140xm78,-243r-21,0v2,-27,14,-46,34,-46v30,1,50,45,62,4r21,1v-1,27,-16,45,-35,45v-30,-1,-48,-43,-61,-4","w":225},"\u00f3":{"d":"208,-108v0,80,-29,113,-96,113v-67,0,-97,-33,-97,-113v0,-80,30,-113,97,-113v67,0,96,33,96,113xm62,-108v0,57,14,75,50,75v36,0,49,-18,49,-75v0,-57,-13,-74,-49,-74v-36,0,-50,17,-50,74xm109,-289r54,0r-42,52r-35,0","w":223},"\u00f2":{"d":"208,-108v0,80,-29,113,-96,113v-67,0,-97,-33,-97,-113v0,-80,30,-113,97,-113v67,0,96,33,96,113xm62,-108v0,57,14,75,50,75v36,0,49,-18,49,-75v0,-57,-13,-74,-49,-74v-36,0,-50,17,-50,74xm135,-237r-35,0r-41,-52r53,0","w":223},"\u00f4":{"d":"208,-108v0,80,-29,113,-96,113v-67,0,-97,-33,-97,-113v0,-80,30,-113,97,-113v67,0,96,33,96,113xm62,-108v0,57,14,75,50,75v36,0,49,-18,49,-75v0,-57,-13,-74,-49,-74v-36,0,-50,17,-50,74xm91,-289r41,0r36,52r-34,0r-22,-33r-22,33r-35,0","w":223},"\u00f6":{"d":"208,-108v0,80,-29,113,-96,113v-67,0,-97,-33,-97,-113v0,-80,30,-113,97,-113v67,0,96,33,96,113xm62,-108v0,57,14,75,50,75v36,0,49,-18,49,-75v0,-57,-13,-74,-49,-74v-36,0,-50,17,-50,74xm101,-267v0,14,-6,20,-20,20v-14,0,-21,-5,-21,-20v0,-14,7,-21,21,-21v14,0,20,7,20,21xm163,-267v0,14,-6,20,-20,20v-14,0,-21,-5,-21,-20v0,-14,7,-21,21,-21v14,0,20,7,20,21","w":223},"\u00f5":{"d":"208,-108v0,80,-29,113,-96,113v-67,0,-97,-33,-97,-113v0,-80,30,-113,97,-113v67,0,96,33,96,113xm62,-108v0,57,14,75,50,75v36,0,49,-18,49,-75v0,-57,-13,-74,-49,-74v-36,0,-50,17,-50,74xm76,-243r-22,0v2,-27,15,-46,35,-46v30,1,48,45,61,4r21,1v-1,27,-15,45,-34,45v-30,-1,-48,-43,-61,-4","w":223},"\u00fa":{"d":"199,-217r0,143v0,51,-29,78,-88,78v-59,0,-88,-28,-88,-78r0,-143r46,0r0,142v0,25,13,38,42,38v28,0,42,-13,42,-38r0,-142r46,0xm109,-289r53,0r-42,52r-35,0","w":222},"\u00f9":{"d":"199,-217r0,143v0,51,-29,78,-88,78v-59,0,-88,-28,-88,-78r0,-143r46,0r0,142v0,25,13,38,42,38v28,0,42,-13,42,-38r0,-142r46,0xm135,-237r-35,0r-41,-52r53,0","w":222},"\u00fb":{"d":"199,-217r0,143v0,51,-29,78,-88,78v-59,0,-88,-28,-88,-78r0,-143r46,0r0,142v0,25,13,38,42,38v28,0,42,-13,42,-38r0,-142r46,0xm91,-289r40,0r37,52r-35,0r-21,-33r-22,33r-35,0","w":222},"\u00fc":{"d":"199,-217r0,143v0,51,-29,78,-88,78v-59,0,-88,-28,-88,-78r0,-143r46,0r0,142v0,25,13,38,42,38v28,0,42,-13,42,-38r0,-142r46,0xm100,-267v0,14,-6,20,-20,20v-14,0,-20,-5,-20,-20v0,-14,6,-21,20,-21v14,0,20,7,20,21xm162,-267v0,14,-6,20,-20,20v-14,0,-20,-5,-20,-20v0,-14,6,-21,20,-21v14,0,20,7,20,21","w":222},"\u2020":{"d":"13,-219r57,3r-4,-68r45,0r-3,68r57,-3r0,44r-57,-3r3,231r-45,0r4,-231r-57,3r0,-44","w":178},"\u00b0":{"d":"14,-245v0,-27,22,-49,49,-49v27,0,48,22,48,49v0,27,-21,50,-48,50v-27,0,-49,-23,-49,-50xm35,-245v0,15,13,26,28,26v15,0,27,-11,27,-26v0,-15,-12,-26,-27,-26v-16,0,-28,11,-28,26","w":125},"\u00a2":{"d":"165,-210r-3,40v-50,-18,-98,-8,-98,61v0,75,51,84,100,63r3,37v-10,7,-25,12,-42,13r-3,45r-36,0r3,-46v-48,-8,-73,-44,-73,-112v0,-67,25,-105,82,-110r3,-44r36,0r-3,45v12,1,22,4,31,8","w":181},"\u00a3":{"d":"23,-115r-2,-38r18,0v-21,-66,-2,-119,95,-121v28,0,50,5,68,12r-6,43v-34,-19,-124,-14,-115,30v0,13,3,24,7,36r92,0r0,38r-83,0v6,32,-2,62,-24,74v40,-6,98,-9,142,-1v0,1,-2,43,-3,45v-66,-8,-123,-8,-193,-1r-2,-44v30,-7,39,-39,32,-73r-26,0","w":227},"\u00a7":{"d":"19,-122v0,-20,10,-40,32,-53v-51,-36,-24,-107,57,-107v23,0,53,6,71,16r-4,35v-29,-16,-103,-26,-103,10v0,36,119,36,119,113v0,21,-11,41,-33,54v52,35,25,106,-56,106v-23,0,-52,-6,-70,-16r3,-35v29,16,103,26,103,-9v0,-36,-119,-37,-119,-114xm123,-75v53,-26,7,-63,-37,-79v-51,26,-6,62,37,79","w":203},"\u2022":{"d":"20,-116v0,-36,18,-54,53,-54v36,0,53,18,53,54v0,37,-17,54,-53,54v-35,0,-53,-17,-53,-54","w":147},"\u00b6":{"d":"107,56r-40,0r0,-227v-31,-1,-54,-18,-54,-51v0,-27,20,-48,56,-48r162,0r-2,38r-27,0r0,288r-41,0r0,-288r-54,0r0,288","w":245},"\u00df":{"d":"28,0r0,-178v0,-63,30,-97,88,-97v43,0,72,26,72,58v0,33,-39,49,-39,63v0,16,71,27,71,85v0,65,-81,89,-136,60r3,-40v23,16,87,18,87,-19v0,-38,-75,-46,-75,-81v0,-26,45,-43,45,-67v0,-12,-11,-20,-29,-20v-28,0,-42,16,-42,53r0,183r-45,0"},"\u00ae":{"d":"13,-233v0,-37,30,-68,67,-68v37,0,67,31,67,68v0,37,-30,67,-67,67v-37,0,-67,-30,-67,-67xm26,-233v0,29,24,54,54,54v30,0,54,-25,54,-54v0,-30,-24,-54,-54,-54v-30,0,-54,24,-54,54xm84,-271v34,-3,39,34,17,44r14,29r-20,0r-12,-27r-13,0r0,27r-19,0r0,-73r33,0xm95,-246v1,-10,-14,-9,-25,-9r0,17v10,0,26,2,25,-8","w":159},"\u00a9":{"d":"18,-136v0,-78,64,-141,142,-141v78,0,141,63,141,141v0,78,-63,141,-141,141v-78,0,-142,-63,-142,-141xm42,-136v0,63,52,117,118,117v66,0,118,-53,118,-117v0,-63,-52,-116,-118,-116v-66,0,-118,53,-118,116xm219,-209r-3,33v-38,-22,-106,-5,-100,40v-6,49,68,63,103,39v2,10,3,21,4,32v-53,49,-153,10,-153,-71v0,-48,34,-92,92,-92v24,0,44,9,57,19","w":319},"\u2122":{"d":"230,-173r-24,0v-1,-23,3,-50,0,-71r-27,71r-20,0v-10,-23,-17,-49,-28,-70r0,70r-23,0r0,-102r34,0v10,23,17,49,28,70r27,-70r33,0r0,102xm95,-250r-29,0r0,77r-28,0r0,-77r-29,0r0,-25r86,0r0,25","w":244},"\u00b4":{"d":"77,-289r53,0r-42,52r-35,0","w":144},"\u00a8":{"d":"62,-267v0,14,-6,20,-20,20v-14,0,-20,-5,-20,-20v0,-14,6,-21,20,-21v14,0,20,7,20,21xm124,-267v0,14,-6,20,-20,20v-14,0,-20,-5,-20,-20v0,-14,6,-21,20,-21v14,0,20,7,20,21","w":144},"\u00c6":{"d":"363,-225r-126,0r5,65r101,0r0,41r-98,0r6,75r116,0r-1,44r-162,0r-4,-58r-101,0r-29,58r-59,0r147,-270r204,0xm187,-237r-68,137r78,0","w":381},"\u00d8":{"d":"39,6r-24,-23r21,-26v-12,-22,-18,-53,-18,-92v0,-97,33,-139,116,-139v35,0,62,7,80,24r20,-25r24,23r-24,29v10,22,16,51,16,88v0,99,-33,140,-116,140v-33,0,-59,-7,-77,-22xm71,-135v0,21,1,37,4,51r108,-127v-10,-13,-26,-18,-49,-18v-46,0,-63,19,-63,94xm198,-135v-1,-19,0,-36,-4,-48r-107,126v10,12,25,16,47,16v46,0,64,-20,64,-94","w":268},"\u00b1":{"d":"198,-121r-62,0r0,55r-41,0r0,-55r-61,0r0,-40r61,0r0,-59r41,0r0,59r62,0r0,40xm197,-17r-163,0r0,-35r163,0r0,35"},"\u00a5":{"d":"55,-127r36,0r-74,-143r56,0r58,145r55,-145r55,0r-71,143r37,0r0,26r-49,0r0,17r49,0r0,26r-49,0r0,58r-55,0r0,-58r-48,0r0,-26r48,0r0,-17r-48,0r0,-26","w":258},"\u03bc":{"d":"163,-16v-22,26,-79,28,-97,-7v1,27,3,52,5,76r-45,4r0,-274r46,0r0,141v0,24,17,38,43,38v24,0,41,-12,41,-34r0,-145r46,0r0,216r-33,3","w":225},"\u00aa":{"d":"108,-127v-2,-5,-1,-13,-4,-16v-29,33,-90,21,-90,-37v0,-42,47,-61,86,-46v10,-43,-45,-40,-73,-27r-3,-32v48,-22,114,-15,114,54r0,104r-30,0xm73,-158v24,-1,29,-17,26,-41v-15,-8,-54,-5,-48,19v0,17,9,22,22,22","w":155},"\u00ba":{"d":"156,-211v0,62,-22,86,-71,86v-49,0,-70,-24,-70,-86v0,-62,22,-85,70,-85v49,0,71,23,71,85xm55,-211v0,42,8,53,30,53v22,0,31,-11,31,-53v0,-42,-9,-51,-31,-51v-22,0,-30,9,-30,51","w":170},"\u00e6":{"d":"30,-206v39,-18,117,-24,136,12v59,-58,170,-17,148,96r-131,0v-4,71,71,69,120,49r6,38v-42,23,-133,20,-151,-20v-30,53,-150,48,-141,-36v-7,-57,68,-78,122,-59v15,-66,-63,-63,-105,-42xm96,-33v35,0,48,-24,43,-62v-21,-11,-90,-8,-80,28v0,25,16,34,37,34xm182,-129r91,0v-1,-38,-19,-52,-45,-52v-31,0,-44,15,-46,52","w":329},"\u00f8":{"d":"32,4r-19,-19r15,-20v-9,-18,-13,-42,-13,-73v0,-109,85,-134,158,-97r13,-17r20,19r-14,18v11,18,16,43,16,77v0,80,-29,113,-96,113v-28,0,-50,-5,-66,-18xm161,-108v-1,-15,0,-30,-4,-38r-85,95v8,13,21,18,40,18v35,0,49,-18,49,-75xm112,-182v-47,-10,-55,53,-48,107r84,-93v-8,-10,-19,-14,-36,-14","w":223},"\u00bf":{"d":"13,-30v0,-40,24,-67,63,-88r2,-44r36,0r2,62v-35,19,-56,37,-56,63v1,46,77,31,97,8r17,38v-39,41,-161,38,-161,-39xm69,-217v0,-15,7,-25,26,-25v19,0,27,7,27,25v0,16,-8,25,-27,25v-19,0,-26,-9,-26,-25","w":176},"\u00a1":{"d":"36,-161r37,0r6,209r-49,0xm27,-214v0,-15,8,-25,27,-25v18,0,27,8,27,25v0,16,-9,25,-27,25v-19,0,-27,-9,-27,-25","w":108},"\u00ac":{"d":"158,-102r-121,0r0,-41r158,0r0,96r-37,0r0,-55"},"\u0192":{"d":"40,54r-45,0r50,-235r-22,0r7,-35r23,0v0,-51,52,-80,107,-63r-9,31v-29,-10,-53,3,-52,32r47,0r-7,35r-48,0","w":150},"\u00ab":{"d":"203,-156r-63,40r63,39r0,37r-109,-74r0,-4r109,-74r0,36xm117,-156r-63,40r63,39r0,37r-108,-74r0,-4r108,-74r0,36","w":230},"\u00bb":{"d":"108,-40r0,-37r63,-39r-63,-40r0,-36r109,74r0,4xm23,-40r0,-37r63,-39r-63,-40r0,-36r109,74r0,4","w":230},"\u2026":{"d":"233,-23v0,17,-9,27,-28,27v-19,0,-28,-8,-28,-27v0,-18,9,-27,28,-27v19,0,28,9,28,27xm155,-23v0,17,-9,27,-28,27v-19,0,-27,-8,-27,-27v0,-18,8,-27,27,-27v19,0,28,9,28,27xm75,-23v0,17,-9,27,-28,27v-19,0,-28,-8,-28,-27v0,-18,9,-27,28,-27v19,0,28,9,28,27","w":252},"\u00a0":{"w":101},"\u00c0":{"d":"201,0r-18,-58r-108,0r-18,58r-53,0r96,-270r59,0r97,270r-55,0xm130,-234r-42,134r82,0xm154,-287r-37,0r-45,-42r56,0","w":260},"\u00c3":{"d":"201,0r-18,-58r-108,0r-18,58r-53,0r96,-270r59,0r97,270r-55,0xm130,-234r-42,134r82,0xm93,-288r-21,0v1,-24,13,-41,34,-41v30,-1,50,37,62,5r20,0v-1,24,-14,41,-35,41v-28,0,-48,-37,-60,-5","w":260},"\u00d5":{"d":"249,-135v0,99,-33,140,-115,140v-82,0,-116,-43,-116,-140v0,-97,33,-139,116,-139v82,0,115,42,115,139xm198,-135v0,-75,-17,-94,-64,-94v-46,0,-63,19,-63,94v0,75,17,94,63,94v46,0,64,-20,64,-94xm98,-288r-22,0v1,-24,14,-41,35,-41v30,-1,50,37,62,5r20,0v-1,24,-14,41,-35,41v-28,0,-48,-37,-60,-5","w":268},"\u0152":{"d":"374,0r-173,0v-1,-8,2,-20,-1,-26v-16,22,-42,31,-75,31v-72,0,-107,-43,-107,-140v0,-97,33,-139,107,-139v33,-1,57,10,76,28r0,-24r168,0r1,45r-124,0r0,65r105,0r0,41r-105,0r0,75r129,0xm197,-135v0,-75,-16,-94,-63,-94v-46,0,-63,19,-63,94v0,75,17,94,63,94v46,0,63,-20,63,-94","w":389},"\u0153":{"d":"336,-11v-43,23,-130,22,-149,-20v-14,25,-38,36,-77,36v-64,0,-93,-33,-93,-113v0,-80,30,-113,93,-113v38,0,62,11,76,33v14,-21,36,-32,70,-32v59,0,93,46,85,122r-131,0v-4,71,71,69,120,49xm64,-108v0,57,14,75,50,75v36,0,48,-18,48,-75v0,-57,-12,-74,-48,-74v-36,0,-50,17,-50,74xm209,-129r91,0v-1,-38,-19,-52,-45,-52v-31,0,-44,15,-46,52","w":356},"\u2013":{"d":"22,-140r145,0r0,34r-145,0r0,-34","w":188},"\u2014":{"d":"22,-140r209,0r0,34r-209,0r0,-34","w":252},"\u201c":{"d":"117,-195v-54,-6,-15,-72,2,-101r17,4r-10,44v24,7,25,57,-9,53xm44,-195v-54,-6,-15,-72,2,-101r17,4r-9,44v24,8,24,57,-10,53","w":160},"\u201d":{"d":"44,-282v54,6,15,73,-3,101r-16,-4r9,-44v-24,-8,-24,-57,10,-53xm116,-282v55,6,16,72,-2,101r-16,-4r9,-44v-23,-7,-24,-56,9,-53","w":160},"\u2018":{"d":"44,-195v-54,-6,-15,-72,2,-101r17,4r-9,44v24,8,24,57,-10,53","w":87},"\u2019":{"d":"44,-282v54,6,15,73,-3,101r-16,-4r9,-44v-24,-8,-24,-57,10,-53","w":87},"\u00f7":{"d":"137,-186v0,16,-10,24,-29,24v-19,0,-30,-6,-30,-24v0,-16,11,-24,30,-24v19,0,29,8,29,24xm137,-57v0,16,-10,24,-29,24v-19,0,-30,-6,-30,-24v0,-16,11,-24,30,-24v19,0,29,8,29,24xm194,-100r-172,0r0,-43r172,0r0,43","w":216},"\u00ff":{"d":"43,19v26,11,50,5,60,-22r-94,-214r52,0r65,172r49,-172r49,0r-77,218v-19,54,-58,68,-108,51xm106,-267v0,14,-6,20,-20,20v-14,0,-20,-5,-20,-20v0,-14,6,-21,20,-21v14,0,20,7,20,21xm168,-267v0,14,-6,20,-20,20v-14,0,-21,-5,-21,-20v0,-14,7,-21,21,-21v14,0,20,7,20,21"},"\u0178":{"d":"5,-270r56,0r65,136r62,-136r54,0r-93,181r0,89r-50,0r0,-89xm109,-306v0,13,-6,19,-20,19v-14,0,-20,-5,-20,-19v0,-13,6,-20,20,-20v14,0,20,7,20,20xm180,-306v0,13,-7,19,-21,19v-13,0,-20,-5,-20,-19v0,-13,7,-20,20,-20v14,0,21,7,21,20","w":246},"\u2044":{"d":"134,-270r33,0r-180,270r-33,0","w":107},"\u20ac":{"d":"174,-125r-6,26r-81,0v6,68,74,75,125,49r4,37v-17,10,-41,16,-68,16v-65,0,-99,-33,-108,-102r-31,0r0,-26r28,0r0,-18r-28,0r0,-27r31,0v5,-88,93,-122,172,-90r-9,39v-50,-19,-111,-5,-116,51r100,0r-6,27r-96,0r0,18r89,0","w":230},"\u2039":{"d":"122,-156r-63,40r63,39r0,37r-108,-74r0,-4r108,-74r0,36","w":143},"\u203a":{"d":"21,-40r0,-37r63,-39r-63,-40r0,-36r109,74r0,4","w":143},"\ufb01":{"d":"85,-182r0,182r-46,0r0,-182r-29,0r0,-35r29,0v-10,-53,46,-80,103,-66r-1,31v-29,-8,-64,2,-56,35r135,0r0,217r-47,0r0,-182r-88,0xm224,-267v0,14,-8,21,-27,21v-18,0,-28,-5,-28,-21v0,-14,10,-22,28,-22v19,0,27,8,27,22","w":253},"\ufb02":{"d":"211,0r-46,0r0,-253v-37,-6,-90,-5,-80,36r40,0r0,35r-40,0r0,182r-46,0r0,-182r-29,0r0,-35r29,0v-2,-45,18,-71,93,-71v30,0,50,5,79,6r0,282","w":242},"\u2021":{"d":"165,-58r0,44r-57,-4r3,71r-45,0r4,-71r-57,4r0,-44r57,3r0,-124r-57,4r0,-44r57,3r-4,-68r45,0r-3,68r57,-3r0,44r-57,-4r0,124","w":178},"\u00b7":{"d":"80,-124v0,17,-9,27,-28,27v-19,0,-28,-8,-28,-27v0,-18,9,-28,28,-28v19,0,28,10,28,28","w":104},"\u201a":{"d":"44,-49v54,6,15,72,-3,100r-16,-3r9,-44v-24,-8,-24,-57,10,-53","w":87},"\u201e":{"d":"44,-49v54,6,15,72,-3,100r-16,-3r9,-44v-24,-8,-24,-57,10,-53xm116,-49v55,6,16,72,-2,100r-16,-3r9,-44v-23,-7,-24,-57,9,-53","w":160},"\u2030":{"d":"122,-211v0,43,-18,63,-54,63v-37,0,-54,-21,-54,-63v0,-44,16,-63,54,-63v35,0,54,17,54,63xm91,-211v0,-26,-8,-34,-23,-34v-16,0,-23,7,-23,34v0,27,7,33,23,33v15,0,23,-6,23,-33xm187,-260r27,21r-144,231r-27,-21xm247,-59v0,43,-18,63,-54,63v-37,0,-54,-21,-54,-63v0,-44,16,-64,54,-64v36,0,54,18,54,64xm217,-59v0,-26,-8,-34,-24,-34v-15,0,-23,7,-23,34v0,26,8,32,23,32v16,0,24,-6,24,-32xm365,-59v0,43,-18,63,-54,63v-37,0,-54,-21,-54,-63v0,-44,16,-64,54,-64v36,0,54,18,54,64xm334,-59v0,-26,-8,-34,-23,-34v-16,0,-23,7,-23,34v0,26,8,32,23,32v16,0,23,-6,23,-32","w":378},"\u00c2":{"d":"201,0r-18,-58r-108,0r-18,58r-53,0r96,-270r59,0r97,270r-55,0xm130,-234r-42,134r82,0xm105,-329r49,0r40,43r-42,0r-22,-26r-23,26r-41,0","w":260},"\u00ca":{"d":"80,-44r129,0r-1,44r-178,0r0,-270r173,0r0,45r-123,0r0,65r105,0r0,41r-105,0r0,75xm94,-329r49,0r40,43r-41,0r-23,-26r-23,26r-40,0","w":223},"\u00c1":{"d":"201,0r-18,-58r-108,0r-18,58r-53,0r96,-270r59,0r97,270r-55,0xm130,-234r-42,134r82,0xm130,-329r60,0r-49,43r-37,0","w":260},"\u00cb":{"d":"80,-44r129,0r-1,44r-178,0r0,-270r173,0r0,45r-123,0r0,65r105,0r0,41r-105,0r0,75xm104,-306v0,13,-6,19,-20,19v-14,0,-20,-5,-20,-19v0,-13,6,-20,20,-20v14,0,20,7,20,20xm175,-306v0,13,-7,19,-21,19v-13,0,-20,-5,-20,-19v0,-13,7,-20,20,-20v14,0,21,7,21,20","w":223},"\u00c8":{"d":"80,-44r129,0r-1,44r-178,0r0,-270r173,0r0,45r-123,0r0,65r105,0r0,41r-105,0r0,75xm144,-287r-37,0r-45,-42r56,0","w":223},"\u00cd":{"d":"34,0r0,-270r51,0r0,270r-51,0xm60,-329r60,0r-49,43r-37,0","w":118},"\u00ce":{"d":"34,0r0,-270r51,0r0,270r-51,0xm35,-329r49,0r39,43r-41,0r-23,-26r-22,26r-41,0","w":118},"\u00cf":{"d":"34,0r0,-270r51,0r0,270r-51,0xm45,-306v0,13,-7,19,-21,19v-14,0,-20,-5,-20,-19v0,-13,6,-20,20,-20v14,0,21,7,21,20xm115,-306v0,13,-6,19,-20,19v-13,0,-20,-5,-20,-19v0,-13,7,-20,20,-20v14,0,20,7,20,20","w":118},"\u00cc":{"d":"34,0r0,-270r51,0r0,270r-51,0xm84,-287r-37,0r-45,-42r56,0","w":118},"\u00d3":{"d":"249,-135v0,99,-33,140,-115,140v-82,0,-116,-43,-116,-140v0,-97,33,-139,116,-139v82,0,115,42,115,139xm198,-135v0,-75,-17,-94,-64,-94v-46,0,-63,19,-63,94v0,75,17,94,63,94v46,0,64,-20,64,-94xm135,-329r59,0r-48,43r-37,0","w":268},"\u00d4":{"d":"249,-135v0,99,-33,140,-115,140v-82,0,-116,-43,-116,-140v0,-97,33,-139,116,-139v82,0,115,42,115,139xm198,-135v0,-75,-17,-94,-64,-94v-46,0,-63,19,-63,94v0,75,17,94,63,94v46,0,64,-20,64,-94xm109,-329r49,0r40,43r-41,0r-23,-26r-22,26r-41,0","w":268},"\u00d2":{"d":"249,-135v0,99,-33,140,-115,140v-82,0,-116,-43,-116,-140v0,-97,33,-139,116,-139v82,0,115,42,115,139xm198,-135v0,-75,-17,-94,-64,-94v-46,0,-63,19,-63,94v0,75,17,94,63,94v46,0,64,-20,64,-94xm165,-287r-38,0r-45,-42r56,0","w":268},"\u00da":{"d":"238,-270r0,173v0,69,-37,102,-106,102v-69,0,-106,-33,-106,-102r0,-173r49,0r0,173v0,39,18,56,57,56v39,0,56,-17,56,-56r0,-173r50,0xm132,-329r60,0r-49,43r-37,0","w":263},"\u00db":{"d":"238,-270r0,173v0,69,-37,102,-106,102v-69,0,-106,-33,-106,-102r0,-173r49,0r0,173v0,39,18,56,57,56v39,0,56,-17,56,-56r0,-173r50,0xm107,-329r49,0r40,43r-42,0r-22,-26r-23,26r-41,0","w":263},"\u00d9":{"d":"238,-270r0,173v0,69,-37,102,-106,102v-69,0,-106,-33,-106,-102r0,-173r49,0r0,173v0,39,18,56,57,56v39,0,56,-17,56,-56r0,-173r50,0xm157,-287r-38,0r-44,-42r55,0","w":263},"\u0131":{"d":"80,0r-47,0r0,-215r47,-3r0,218","w":113},"\u02c6":{"d":"52,-289r41,0r36,52r-35,0r-21,-33r-22,33r-35,0","w":144},"\u02dc":{"d":"38,-243r-22,0v2,-27,15,-46,35,-46v30,1,48,45,61,4r21,1v-1,27,-15,45,-34,45v-29,0,-49,-43,-61,-4","w":144},"\u00af":{"d":"128,-279r0,29r-109,0r0,-29r109,0","w":144},"\u02d8":{"d":"95,-289r32,0v0,35,-17,55,-55,55v-39,0,-54,-20,-54,-55r31,0v0,22,9,30,23,30v13,0,23,-8,23,-30","w":144},"\u02d9":{"d":"100,-267v0,14,-9,21,-28,21v-18,0,-27,-5,-27,-21v0,-14,9,-22,27,-22v19,0,28,8,28,22","w":144},"\u02da":{"d":"32,-267v0,-19,12,-31,41,-31v28,0,41,13,41,31v0,20,-13,30,-41,30v-27,0,-41,-9,-41,-30xm54,-267v0,8,5,12,19,12v13,0,19,-4,19,-12v0,-8,-6,-13,-19,-13v-14,0,-19,5,-19,13","w":144},"\u00b8":{"d":"41,68r25,-71r30,-1r-13,72r-42,0","w":144},"\u02dd":{"d":"50,-289r48,0r-39,52r-30,0xm115,-289r48,0r-42,52r-34,0","w":144},"\u02db":{"d":"128,58v-24,17,-83,9,-77,-23v-2,-26,30,-51,56,-35v-22,6,-33,37,-2,38v8,0,14,-2,20,-5","w":144},"\u02c7":{"d":"93,-237r-40,0r-36,-52r34,0r22,34r21,-34r36,0","w":144},"\u00a4":{"d":"47,-98v-11,-20,-10,-49,2,-68r-25,-25r24,-26r26,27v19,-12,47,-12,66,0r26,-27r24,26r-25,26v12,18,12,47,2,67r23,23r-24,27r-23,-24v-20,13,-52,13,-72,0r-23,24r-24,-26xm69,-131v0,20,17,35,38,35v21,0,37,-15,37,-35v0,-20,-16,-36,-37,-36v-21,0,-38,16,-38,36","w":213}}});
/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * 2006 Dziedzic Lukasz published by FSI Fonts und Software GmbH
 */
Cufon.registerFont({"w":233,"face":{"font-family":"ClanNews","font-weight":400,"font-stretch":"normal","units-per-em":"360","panose-1":"2 0 5 3 0 0 0 0 0 0","ascent":"288","descent":"-72","x-height":"5","bbox":"-45 -330 378 69","underline-thickness":"14.04","underline-position":"-29.16","stemh":"21","stemv":"34","unicode-range":"U+0020-U+FB02"},"glyphs":{" ":{"w":108},"\u00d0":{"d":"246,-136v0,98,-37,136,-115,136r-94,0r0,-129r-25,0r0,-24r25,0r0,-117r93,0v82,0,116,39,116,134xm208,-136v0,-105,-48,-101,-134,-99r0,82r38,0r0,24r-38,0r0,95v86,1,134,8,134,-102","w":268},"\u00f0":{"d":"165,-274r-27,19v37,35,66,85,66,135v0,89,-30,124,-93,124v-58,0,-93,-25,-93,-107v0,-93,75,-121,139,-85v-10,-19,-24,-36,-41,-51r-32,23r-13,-13r29,-22v-11,-8,-22,-16,-34,-22r23,-17v11,6,23,14,34,23r29,-22xm53,-102v0,61,21,76,58,76v39,0,58,-25,58,-87v0,-41,-19,-61,-58,-61v-41,0,-58,19,-58,72","w":221},"\u0141":{"d":"81,-35r126,0r-1,35r-162,0r0,-107r-27,13r-3,-30r30,-14r0,-132r37,0r0,116r76,-36r3,32r-79,36r0,87","w":216},"\u0142":{"d":"16,-130r-1,-30r31,-17r0,-107r34,-2r0,94r34,-18r0,30r-34,18r0,162r-34,0r0,-147","w":128},"\u0160":{"d":"190,-77v0,84,-112,101,-172,62r6,-34v37,28,130,34,130,-26v0,-61,-133,-34,-133,-124v0,-42,26,-75,88,-75v26,0,53,5,72,14r-5,32v-37,-20,-120,-19,-120,27v0,59,134,31,134,124xm129,-287r-37,0r-41,-42r33,0r27,28r27,-28r32,0","w":204},"\u0161":{"d":"162,-63v0,68,-96,84,-142,49r4,-29v27,25,106,30,106,-17v0,-49,-110,-26,-110,-98v0,-58,84,-74,133,-48r-3,29v-32,-16,-97,-21,-97,17v0,46,109,22,109,97xm108,-238r-31,0r-37,-52r27,0r26,38r25,-38r27,0","w":177},"\u00dd":{"d":"8,-270r42,0r72,145r71,-145r41,0r-94,179r0,91r-37,0r0,-91xm128,-329r46,0r-47,42r-28,0","w":241},"\u00fd":{"d":"43,25v27,13,54,7,63,-25r-94,-215r39,0r73,183r57,-183r37,0r-79,219v-19,51,-53,64,-99,47xm118,-290r41,0r-41,52r-26,0","w":229},"\u00de":{"d":"219,-138v0,73,-62,90,-147,84r0,54r-37,0r0,-270r37,0r0,47v84,-5,147,8,147,85xm181,-138v6,-57,-53,-54,-109,-53r0,106v56,0,115,6,109,-53","w":234},"\u00fe":{"d":"209,-108v0,79,-32,112,-83,112v-23,0,-45,-11,-60,-22r1,71r-35,0r0,-337r35,-2r0,93v58,-48,142,-33,142,85xm174,-108v0,-94,-70,-95,-107,-54r0,111v33,42,107,41,107,-57","w":226},"\u017d":{"d":"202,0r-185,0r0,-25r141,-210r-137,0r2,-35r180,0r0,28r-139,208r139,0xm130,-287r-36,0r-41,-42r32,0r27,28r28,-28r31,0","w":222},"\u017e":{"d":"173,-190r-111,160r113,0r-1,30r-152,0r0,-24r112,-161r-108,0r1,-30r146,0r0,25xm115,-238r-30,0r-37,-52r27,0r25,38r26,-38r27,0","w":195},"\u00bd":{"d":"289,-103v0,30,-29,51,-65,81r66,0r-1,22r-98,0r0,-17v38,-35,71,-60,71,-83v1,-28,-49,-25,-66,-8r-6,-21v27,-24,99,-20,99,26xm233,-270r25,0r-182,270r-25,0xm102,-270r0,142r-26,0r0,-110r-30,18r-2,-21v20,-9,28,-30,58,-29","w":315},"\u00bc":{"d":"102,-270r0,142r-26,0r0,-110r-30,18r-2,-21v20,-9,28,-30,58,-29xm285,-29r-16,0r0,29r-24,0r0,-29r-73,0r-2,-15r68,-98r31,0r0,92r17,0xm246,-50r1,-70v-14,23,-36,47,-46,70r45,0xm236,-270r25,0r-181,270r-25,0","w":315},"\u00b9":{"d":"74,-322r0,143r-26,0r0,-110r-30,18r-2,-21v20,-10,27,-31,58,-30","w":97},"\u00be":{"d":"282,-29r-16,0r0,29r-25,0r0,-29r-73,0r-1,-15r67,-98r32,0r0,92r17,0xm242,-50v0,-23,3,-49,1,-70r-46,70r45,0xm236,-270r25,0r-181,270r-26,0xm126,-171v0,46,-72,56,-103,33r7,-20v19,15,73,17,71,-14v0,-15,-10,-21,-44,-21r0,-19v32,0,41,-7,41,-21v-1,-26,-54,-19,-67,-4r-7,-20v25,-24,99,-20,99,23v0,17,-10,26,-24,31v17,5,27,14,27,32","w":315},"\u00b3":{"d":"115,-222v0,46,-72,55,-103,33r6,-20v20,15,74,17,72,-14v0,-15,-10,-21,-44,-21r0,-19v32,0,41,-8,41,-21v-2,-26,-54,-18,-68,-4r-6,-20v25,-24,99,-20,99,23v0,17,-12,24,-24,31v17,4,27,14,27,32","w":127},"\u00b2":{"d":"114,-282v0,30,-29,51,-65,81r66,0r-1,22r-98,0r0,-17v38,-35,71,-60,71,-84v0,-28,-50,-24,-66,-7r-6,-21v27,-25,99,-19,99,26","w":127},"\u00a6":{"d":"37,-134r0,-158r27,0r0,158r-27,0xm37,61r0,-159r27,0r0,159r-27,0","w":101},"\u2212":{"d":"186,-106r-158,0r0,-32r158,0r0,32","w":214},"\u00d7":{"d":"180,-68r-19,22r-53,-53r-53,53r-20,-22r53,-52r-53,-53r19,-22r54,53r53,-53r20,22r-54,53","w":214},"!":{"d":"67,-72r-26,0r-5,-198r37,0xm77,-16v0,13,-7,20,-22,20v-15,0,-22,-6,-22,-20v0,-13,7,-21,22,-21v15,0,22,8,22,21","w":109},"\"":{"d":"86,-277r35,0r-7,87r-23,0xm21,-277r35,0r-7,87r-23,0","w":138},"#":{"d":"20,-105r43,0r10,-61r-53,0r0,-27r56,0r11,-77r27,0r-11,77r41,0r12,-77r26,0r-11,77r40,0r0,27r-44,0r-9,61r53,0r0,27r-57,0r-11,78r-27,0r11,-78r-41,0r-11,78r-27,0r11,-78r-39,0r0,-27xm99,-166r-9,61r41,0r10,-61r-42,0","w":231},"$":{"d":"102,30r-20,-2r2,-24v-24,-2,-48,-9,-63,-18v1,-12,2,-21,4,-34v18,11,39,18,62,21r11,-97v-38,-14,-78,-30,-78,-77v0,-46,34,-72,93,-73r2,-24r22,2r-3,23v20,2,38,7,49,12r-2,32v-15,-6,-32,-10,-50,-11r-9,85v37,13,75,30,75,80v0,54,-30,79,-93,80xm168,-70v0,-25,-23,-37,-51,-47r-9,91v41,0,60,-15,60,-44xm52,-203v0,22,22,32,49,41r8,-80v-40,0,-57,17,-57,39","w":216},"%":{"d":"120,-212v0,44,-17,63,-51,63v-36,0,-52,-19,-52,-63v0,-44,15,-62,52,-62v34,0,51,16,51,62xm96,-212v0,-32,-8,-40,-27,-40v-19,0,-28,8,-28,40v0,32,9,40,28,40v19,0,27,-8,27,-40xm185,-264r21,15r-140,244r-21,-16xm239,-60v0,44,-18,63,-52,63v-36,0,-51,-19,-51,-63v0,-44,15,-63,52,-63v34,0,51,17,51,63xm215,-60v0,-32,-8,-40,-27,-40v-19,0,-29,8,-29,40v0,31,9,40,28,40v19,0,28,-9,28,-40","w":255},"&":{"d":"246,-28r-12,31v-19,-10,-39,-23,-58,-38v-21,23,-49,40,-85,40v-54,0,-74,-35,-74,-72v0,-38,24,-63,51,-84v-37,-51,-37,-123,43,-123v39,0,63,19,63,48v0,34,-34,57,-65,80v17,22,39,45,63,66v12,-19,19,-40,23,-58r30,-1v-2,20,-12,51,-29,78v17,13,33,24,50,33xm52,-69v1,54,76,49,101,14v-26,-22,-49,-48,-68,-72v-19,16,-33,35,-33,58xm110,-247v-40,1,-42,49,-17,78v25,-17,47,-33,47,-54v0,-15,-12,-24,-30,-24","w":249},"'":{"d":"20,-277r34,0r-6,87r-23,0","w":74},"(":{"d":"91,-287r27,3v-69,87,-68,243,0,329r-27,3v-75,-80,-75,-256,0,-335","w":119},")":{"d":"1,-284r28,-3v75,80,73,255,0,335r-28,-3v67,-86,69,-242,0,-329","w":119},"*":{"d":"57,-285r17,0r2,41r38,-11r6,18r-38,13r24,35r-13,11r-28,-33r-28,33r-14,-11r25,-35r-39,-13r6,-18r39,11","w":129},"+":{"d":"189,-106r-67,0r0,66r-31,0r0,-66r-65,0r0,-32r65,0r0,-67r31,0r0,67r67,0r0,32","w":214},",":{"d":"45,-40v45,6,11,62,-4,91r-13,-3r10,-44v-20,-6,-20,-48,7,-44","w":90},"-":{"d":"25,-135r96,0r0,25r-96,0r0,-25","w":145},".":{"d":"68,-18v0,14,-8,22,-23,22v-15,0,-22,-6,-22,-22v0,-14,7,-22,22,-22v15,0,23,8,23,22","w":90},"\/":{"d":"127,-286r30,0r-124,331r-29,0","w":158},"0":{"d":"213,-135v0,100,-29,139,-96,139v-68,0,-96,-39,-96,-139v0,-103,28,-138,96,-138v68,0,96,35,96,138xm178,-135v0,-86,-19,-106,-61,-106v-42,0,-62,20,-62,106v0,87,20,107,62,107v42,0,61,-21,61,-107"},"1":{"d":"65,0r0,-27r48,0r0,-197r-58,37r-4,-32r78,-52r21,0r0,244r47,0r0,27r-132,0"},"2":{"d":"204,-199v0,56,-53,104,-124,166r126,0r-1,33r-174,0r0,-25v69,-66,137,-120,137,-170v0,-25,-17,-45,-58,-45v-26,0,-50,12,-69,27r-10,-30v45,-47,173,-40,173,44"},"3":{"d":"209,-81v0,50,-31,84,-99,84v-36,0,-62,-9,-81,-21r7,-30v39,31,138,29,138,-34v0,-32,-22,-47,-86,-47r0,-27v59,0,80,-17,80,-46v0,-54,-102,-45,-128,-13r-10,-29v41,-44,171,-40,171,40v0,32,-17,51,-44,60v33,9,52,28,52,63"},"4":{"d":"216,-59r-33,0r0,59r-33,0r0,-59r-125,0r-3,-23r117,-188r44,0r0,180r34,0xm151,-90r2,-149r-91,149r89,0"},"5":{"d":"206,-92v0,61,-31,95,-95,95v-32,0,-57,-7,-78,-21r7,-31v41,32,138,33,131,-40v8,-62,-84,-58,-123,-37r-14,-14r11,-130r147,0r2,33r-121,0r-6,75v64,-21,139,-3,139,70"},"6":{"d":"210,-93v0,64,-33,96,-92,96v-62,0,-95,-34,-95,-130v0,-126,73,-169,172,-135r-3,31v-68,-25,-139,-1,-134,83v50,-43,152,-29,152,55xm175,-93v0,-64,-88,-62,-116,-25v1,66,18,90,59,90v37,0,57,-21,57,-65"},"7":{"d":"212,-270r0,31r-114,239r-40,0r119,-235r-153,0r2,-35r186,0"},"8":{"d":"117,3v-109,0,-123,-114,-47,-145v-20,-13,-38,-29,-37,-62v0,-43,24,-69,84,-69v97,0,108,99,45,132v27,10,50,27,50,66v0,52,-33,78,-95,78xm177,-72v0,-37,-38,-45,-75,-57v-26,12,-45,27,-45,54v0,32,17,49,61,49v36,0,59,-14,59,-46xm66,-203v0,32,31,41,65,51v53,-18,55,-91,-14,-91v-35,0,-51,13,-51,40"},"9":{"d":"209,-148v0,138,-72,173,-170,139r5,-31v69,29,133,9,131,-90v-18,15,-40,22,-66,22v-60,0,-87,-31,-87,-80v0,-52,28,-85,90,-85v61,0,97,41,97,125xm174,-161v-1,-58,-25,-81,-62,-81v-37,0,-56,17,-56,52v0,61,89,68,118,29"},":":{"d":"68,-182v0,14,-8,23,-23,23v-15,0,-22,-7,-22,-23v0,-14,7,-22,22,-22v15,0,23,8,23,22xm68,-18v0,14,-8,22,-23,22v-15,0,-22,-6,-22,-22v0,-14,7,-22,22,-22v15,0,23,8,23,22","w":90},";":{"d":"69,-182v0,14,-7,23,-22,23v-15,0,-23,-7,-23,-23v0,-14,8,-22,23,-22v15,0,22,8,22,22xm45,-40v46,6,11,62,-4,91r-12,-3r10,-44v-20,-6,-21,-47,6,-44","w":92},"<":{"d":"183,-174r-109,53r109,52r0,34r-151,-77r0,-18r151,-80r0,36","w":214},"=":{"d":"187,-139r-160,0r0,-28r160,0r0,28xm187,-73r-160,0r0,-29r160,0r0,29","w":214},">":{"d":"32,-35r0,-34r108,-53r-108,-52r1,-36r150,80r0,18","w":214},"?":{"d":"169,-210v0,41,-25,68,-66,90r-1,48r-27,0r-2,-62v38,-23,61,-41,61,-71v-1,-54,-86,-41,-109,-12r-13,-28v36,-42,157,-43,157,35xm111,-16v0,13,-7,20,-22,20v-15,0,-22,-6,-22,-20v0,-13,7,-21,22,-21v15,0,22,8,22,21","w":184},"@":{"d":"223,-42v-22,1,-36,-12,-42,-29v-26,44,-96,40,-96,-33v0,-66,59,-130,109,-86r5,-13r20,2r-17,106v0,16,6,29,24,29v26,0,45,-25,45,-80v0,-67,-36,-117,-107,-117v-83,0,-124,64,-124,140v0,79,39,140,124,140v56,0,88,-19,105,-35r8,19v-24,21,-61,37,-113,37v-94,0,-146,-63,-146,-161v0,-86,50,-161,146,-161v79,0,128,57,128,138v0,73,-31,104,-69,104xm139,-68v38,-1,40,-62,47,-99v-33,-37,-74,13,-73,63v0,24,10,36,26,36","w":310},"A":{"d":"208,0r-22,-64r-118,0r-22,64r-40,0r100,-270r44,0r99,270r-41,0xm129,-243v-20,44,-33,99,-51,147r98,0","w":255},"B":{"d":"225,-77v0,48,-25,77,-87,77r-103,0r0,-270v79,0,179,-14,179,67v0,34,-18,51,-38,61v31,7,49,27,49,65xm188,-80v0,-56,-65,-44,-117,-45r0,93v54,-2,117,15,117,-48xm179,-196v0,-54,-59,-41,-108,-42r0,84v48,-1,108,11,108,-42","w":246},"C":{"d":"203,-262r-5,33v-69,-24,-138,-15,-138,91v0,112,67,125,139,96r5,31v-17,9,-42,16,-66,16v-80,0,-116,-45,-116,-143v0,-121,87,-160,181,-124","w":218},"D":{"d":"244,-136v0,98,-38,136,-116,136r-93,0r0,-270r92,0v82,0,117,39,117,134xm205,-136v0,-104,-47,-101,-133,-99r0,201v86,1,133,7,133,-102","w":265},"E":{"d":"72,-33r136,0r-1,33r-172,0r0,-270r166,0r1,34r-130,0r0,80r111,0r0,31r-111,0r0,92","w":224},"F":{"d":"202,-235r-130,0r0,83r109,0r-1,32r-108,0r0,120r-37,0r0,-270r166,0","w":213},"G":{"d":"222,-143r0,133v-19,9,-49,15,-79,15v-85,0,-121,-43,-121,-139v0,-98,37,-141,122,-141v25,0,53,6,72,14r-4,33v-74,-26,-152,-22,-152,93v0,101,53,117,129,98r0,-106r33,0","w":244},"H":{"d":"236,0r-37,0r0,-123r-127,0r0,123r-37,0r0,-270r37,0r0,113r127,0r0,-113r37,0r0,270","w":271},"I":{"d":"39,0r0,-270r38,0r0,270r-38,0","w":116},"J":{"d":"163,-270r0,179v8,89,-87,116,-150,81r3,-32v40,26,110,15,110,-49r0,-179r37,0","w":198},"K":{"d":"244,0r-46,0r-87,-125r-39,0r0,125r-37,0r0,-270r37,0r0,114r40,0r82,-114r44,0r-93,128","w":253},"L":{"d":"72,-35r126,0r-1,35r-162,0r0,-270r37,0r0,235","w":206},"M":{"d":"35,-270r42,0r89,218r87,-218r41,0r0,270r-33,0r0,-208r-84,208r-26,0r-83,-207r0,207r-33,0r0,-270","w":329},"N":{"d":"238,0r-26,0r-144,-210r0,210r-33,0r0,-270r33,0r138,204r-1,-204r33,0r0,270","w":272},"O":{"d":"245,-135v0,99,-30,140,-111,140v-80,0,-112,-41,-112,-140v0,-99,32,-139,112,-139v81,0,111,40,111,139xm207,-135v0,-83,-20,-105,-73,-105v-53,0,-74,22,-74,105v0,82,21,105,74,105v53,0,73,-23,73,-105","w":266},"P":{"d":"219,-185v0,75,-64,90,-147,84r0,101r-37,0r0,-270r90,0v66,0,94,26,94,85xm181,-185v0,-61,-53,-53,-109,-53r0,106v55,-1,109,10,109,-53","w":234},"Q":{"d":"245,-135v1,87,-25,126,-81,138r59,41r-46,11r-51,-50v-75,-3,-104,-44,-104,-140v0,-99,32,-139,112,-139v81,0,111,40,111,139xm207,-135v0,-83,-20,-105,-73,-105v-53,0,-74,22,-74,105v0,82,21,105,74,105v53,0,73,-23,73,-105","w":266},"R":{"d":"213,-193v0,41,-19,66,-53,72r71,121r-44,0r-61,-114r-54,0r0,114r-37,0r0,-270r91,0v59,0,87,25,87,77xm175,-192v0,-56,-53,-46,-103,-46r0,95v52,0,103,9,103,-49","w":238},"S":{"d":"190,-77v0,84,-112,101,-172,62r6,-34v37,28,130,34,130,-26v0,-61,-133,-34,-133,-124v0,-42,26,-75,88,-75v26,0,53,5,72,14r-5,32v-37,-20,-120,-19,-120,27v0,59,134,31,134,124","w":204},"T":{"d":"204,-235r-81,0r0,235r-37,0r0,-235r-80,0r1,-35r196,0","w":209},"U":{"d":"235,-270r0,173v0,71,-37,102,-103,102v-66,0,-102,-31,-102,-102r0,-173r36,0r0,172v0,47,21,68,66,68v45,0,66,-21,66,-68r0,-172r37,0","w":264},"V":{"d":"203,-270r39,0r-96,270r-42,0r-96,-270r41,0r77,235","w":249},"W":{"d":"162,-270r41,0r57,234r50,-234r36,0r-65,270r-45,0r-53,-234r-2,0r-53,234r-45,0r-66,-270r39,0r51,235","w":363},"X":{"d":"232,-270r-80,129r86,141r-43,0r-70,-119r-68,119r-43,0r84,-140r-82,-130r45,0r65,109r64,-109r42,0","w":250},"Y":{"d":"8,-270r42,0r72,145r71,-145r41,0r-94,179r0,91r-37,0r0,-91","w":241},"Z":{"d":"202,0r-185,0r0,-25r141,-210r-137,0r2,-35r180,0r0,28r-139,208r139,0","w":222},"[":{"d":"34,46r0,-332r82,0r0,26r-51,0r0,281r52,0r0,25r-83,0","w":117},"\\":{"d":"3,-286r28,0r109,331r-28,0","w":138},"]":{"d":"84,-286r0,332r-83,0r0,-25r52,0r0,-281r-52,0r0,-26r83,0","w":117},"^":{"d":"182,-167r-65,-96r-64,96r-29,0r81,-122r24,0r81,122r-28,0"},"_":{"d":"10,16r136,0r0,23r-136,0r0,-23","w":154},"`":{"d":"103,-238r-27,0r-39,-52r41,0","w":143},"a":{"d":"154,0v-2,-9,-2,-20,-5,-27v-31,46,-136,42,-129,-39v-8,-58,74,-78,126,-56v3,-43,-5,-67,-50,-67v-23,0,-41,4,-60,13r-3,-29v21,-9,43,-14,69,-14v111,0,71,126,78,219r-26,0xm95,-25v44,0,57,-27,51,-73v-5,-3,-21,-8,-43,-8v-36,0,-51,14,-51,40v0,31,18,41,43,41","w":206},"b":{"d":"209,-108v0,81,-32,112,-86,112v-28,0,-50,-15,-63,-26r-5,22r-23,0r0,-284r34,-3r0,93v59,-50,143,-28,143,86xm175,-107v0,-98,-72,-97,-109,-55r0,111v33,41,109,46,109,-56","w":226},"c":{"d":"162,-207r-2,30v-54,-21,-107,-7,-107,68v0,83,56,98,109,71r2,28v-69,37,-146,6,-146,-99v0,-95,69,-128,144,-98","w":179},"d":{"d":"195,0r-26,0v-2,-7,-1,-18,-6,-23v-13,18,-34,27,-63,27v-58,0,-82,-35,-82,-112v0,-109,85,-135,144,-87r-1,-89r34,-2r0,286xm161,-50r0,-112v-9,-15,-28,-25,-51,-25v-42,0,-57,23,-57,81v0,60,13,82,56,82v30,0,46,-14,52,-26","w":225},"e":{"d":"117,4v-71,0,-99,-37,-99,-117v0,-67,29,-105,88,-105v56,0,91,42,84,115r-137,0v-5,85,71,87,127,63r4,28v-18,10,-41,16,-67,16xm52,-126r107,0v-1,-45,-21,-63,-52,-63v-36,0,-53,21,-55,63","w":208},"f":{"d":"78,0r-34,0r0,-188r-32,0r0,-27r32,0v-9,-55,45,-84,101,-67r-2,23v-36,-9,-73,3,-65,44r55,0r0,27r-55,0r0,188","w":145},"g":{"d":"171,-184v27,65,-27,107,-99,90v-21,5,-25,28,2,30v51,3,131,9,121,56v0,39,-24,65,-91,65v-81,0,-105,-57,-62,-97v-26,-14,-23,-54,9,-63v-44,-31,-33,-115,51,-115v19,0,37,3,52,13r36,-14r7,17xm164,-3v7,-29,-65,-27,-96,-31v-31,25,-20,64,35,64v49,0,61,-14,61,-33xm102,-191v-31,0,-43,12,-43,38v0,30,18,37,42,37v33,0,43,-12,43,-37v0,-28,-12,-38,-42,-38","w":206},"h":{"d":"199,0r-34,0r0,-142v7,-55,-81,-56,-99,-20r0,162r-34,0r0,-284r34,-2r0,91v44,-46,133,-25,133,53r0,142","w":225},"i":{"d":"73,0r-34,0r0,-213r34,-2r0,215xm78,-269v0,13,-7,18,-22,18v-15,0,-22,-4,-22,-18v0,-12,7,-18,22,-18v15,0,22,6,22,18","w":112},"j":{"d":"73,-215r0,218v1,52,-37,61,-76,50r2,-26v20,7,41,2,40,-25r0,-215xm77,-270v0,13,-7,19,-22,19v-15,0,-22,-5,-22,-19v0,-12,7,-18,22,-18v15,0,22,6,22,18","w":111},"k":{"d":"66,-286r0,156r33,0r63,-85r40,0r-73,98r76,117r-40,0r-66,-101r-33,0r0,101r-34,0r0,-284","w":212},"l":{"d":"71,0r-34,0r0,-284r34,-2r0,286","w":107},"m":{"d":"306,0r-34,0r0,-143v0,-30,-16,-43,-44,-43v-23,0,-43,13,-43,40r0,146r-34,0r0,-146v2,-53,-69,-49,-87,-17r0,163r-34,0r0,-214r24,-2v3,7,2,19,8,23v26,-36,97,-32,114,8v31,-56,130,-41,130,42r0,143","w":332},"n":{"d":"197,0r-34,0r0,-142v5,-57,-77,-55,-99,-21r0,163r-34,0r0,-214r24,-2v3,7,3,17,7,23v42,-46,136,-31,136,51r0,142","w":223},"o":{"d":"203,-107v0,80,-28,112,-92,112v-65,0,-93,-32,-93,-112v0,-80,29,-111,93,-111v65,0,92,31,92,111xm53,-107v0,62,16,83,58,83v41,0,57,-22,57,-83v0,-62,-16,-82,-57,-82v-42,0,-58,20,-58,82","w":221},"p":{"d":"207,-108v0,79,-33,112,-84,112v-24,1,-43,-7,-59,-23r1,72r-35,0r0,-266r24,-2r8,22v58,-48,145,-33,145,85xm172,-108v0,-94,-71,-95,-107,-54r0,111v32,42,107,41,107,-57","w":225},"q":{"d":"194,53r-34,1v-1,-24,3,-51,0,-73v-59,46,-142,22,-142,-88v0,-77,29,-111,85,-111v28,-1,49,10,65,27r4,-24r22,0r0,268xm160,-55r0,-106v-7,-14,-27,-25,-51,-25v-40,0,-56,18,-56,79v0,60,17,80,56,80v30,0,51,-15,51,-28","w":225},"r":{"d":"64,0r-34,0r0,-213r27,-2v2,15,0,33,4,46v16,-37,46,-57,87,-46r-2,35v-46,-13,-82,17,-82,71r0,109","w":160},"s":{"d":"162,-63v0,68,-96,84,-142,49r4,-29v27,25,106,30,106,-17v0,-49,-110,-26,-110,-98v0,-58,84,-74,133,-48r-3,29v-32,-16,-97,-21,-97,17v0,46,109,22,109,97","w":177},"t":{"d":"129,-188r-53,0r0,132v-2,29,26,36,49,28r2,26v-39,17,-85,-3,-85,-53r0,-133r-30,0r0,-27r31,0r6,-53r27,-3r0,56r53,0r0,27","w":141},"u":{"d":"193,-215v-6,98,33,219,-83,219v-56,0,-83,-28,-83,-75r0,-144r33,0r0,144v0,29,17,44,50,44v32,0,49,-15,49,-44r0,-144r34,0","w":219},"v":{"d":"180,-215r38,0r-83,215r-40,0r-83,-215r38,0r64,185v24,-57,43,-124,66,-185","w":229},"w":{"d":"140,-215r36,0r47,189r39,-189r34,0r-52,215r-43,0r-43,-180r-44,180r-41,0r-55,-215r35,0r42,188","w":313},"x":{"d":"162,0r-55,-93r-54,93r-39,0r70,-109r-68,-106r40,0r53,90r52,-90r39,0r-66,105r68,110r-40,0","w":216},"y":{"d":"43,25v27,13,54,7,63,-25r-94,-215r39,0r73,183r57,-183r37,0r-79,219v-19,51,-53,64,-99,47","w":229},"z":{"d":"173,-190r-111,160r113,0r-1,30r-152,0r0,-24r112,-161r-108,0r1,-30r146,0r0,25","w":195},"{":{"d":"86,-231v2,41,18,94,-17,111v36,14,17,70,17,109v0,22,17,32,46,30r0,27v-51,2,-78,-16,-78,-52v0,-42,27,-98,-20,-107r0,-16v47,-7,20,-67,20,-106v0,-36,26,-54,78,-52r0,27v-28,-2,-47,7,-46,29","w":133},"|":{"d":"37,64r0,-356r27,0r0,356r-27,0","w":101},"}":{"d":"1,19v101,4,2,-119,63,-140v-37,-15,-16,-71,-16,-110v0,-22,-18,-31,-47,-29r0,-27v51,-2,77,16,77,52v0,40,-26,99,21,106r0,16v-46,8,-21,65,-21,107v0,36,-25,54,-77,52r0,-27","w":133},"~":{"d":"54,-224r-20,0v4,-35,18,-54,46,-54v36,0,81,53,99,5r21,0v-4,36,-20,53,-47,53v-36,0,-82,-53,-99,-4"},"\u00c4":{"d":"208,0r-22,-64r-118,0r-22,64r-40,0r100,-270r44,0r99,270r-41,0xm129,-243v-20,44,-33,99,-51,147r98,0xm110,-305v0,11,-6,16,-17,16v-11,0,-16,-4,-16,-16v0,-11,5,-17,16,-17v11,0,17,6,17,17xm179,-305v0,11,-6,16,-17,16v-11,0,-16,-4,-16,-16v0,-11,5,-17,16,-17v11,0,17,6,17,17","w":255},"\u00c5":{"d":"104,-265v-23,-14,-16,-54,23,-54v38,0,46,37,24,54r98,265r-41,0r-22,-64r-118,0r-22,64r-40,0xm129,-243v-20,44,-33,99,-51,147r98,0xm110,-289v0,8,4,14,17,14v12,0,18,-5,18,-14v0,-8,-6,-13,-18,-13v-12,0,-17,5,-17,13","w":255},"\u00c7":{"d":"103,69r21,-65v-70,-5,-102,-49,-102,-142v0,-121,87,-160,181,-124r-5,33v-69,-24,-138,-15,-138,91v0,112,67,125,139,96r5,31v-15,8,-35,14,-56,16r-12,64r-33,0","w":218},"\u00c9":{"d":"72,-33r136,0r-1,33r-172,0r0,-270r166,0r1,34r-130,0r0,80r111,0r0,31r-111,0r0,92xm127,-329r47,0r-47,42r-28,0","w":224},"\u00d1":{"d":"238,0r-26,0r-144,-210r0,210r-33,0r0,-270r33,0r138,204r-1,-204r33,0r0,270xm101,-289r-16,0v2,-22,13,-39,31,-39v28,0,49,46,61,5r16,0v-2,23,-13,39,-31,39v-28,-1,-49,-44,-61,-5","w":272},"\u00d6":{"d":"245,-135v0,99,-30,140,-111,140v-80,0,-112,-41,-112,-140v0,-99,32,-139,112,-139v81,0,111,40,111,139xm207,-135v0,-83,-20,-105,-73,-105v-53,0,-74,22,-74,105v0,82,21,105,74,105v53,0,73,-23,73,-105xm116,-305v0,11,-6,16,-17,16v-11,0,-16,-4,-16,-16v0,-11,5,-17,16,-17v11,0,17,6,17,17xm185,-305v0,11,-6,16,-17,16v-11,0,-16,-4,-16,-16v0,-11,5,-17,16,-17v11,0,17,6,17,17","w":266},"\u00dc":{"d":"235,-270r0,173v0,71,-37,102,-103,102v-66,0,-102,-31,-102,-102r0,-173r36,0r0,172v0,47,21,68,66,68v45,0,66,-21,66,-68r0,-172r37,0xm114,-305v0,11,-5,16,-16,16v-11,0,-17,-4,-17,-16v0,-11,6,-17,17,-17v11,0,16,6,16,17xm184,-305v0,11,-6,16,-17,16v-11,0,-17,-4,-17,-16v0,-11,6,-17,17,-17v11,0,17,6,17,17","w":264},"\u00e1":{"d":"154,0v-2,-9,-2,-20,-5,-27v-31,46,-136,42,-129,-39v-8,-58,74,-78,126,-56v3,-43,-5,-67,-50,-67v-23,0,-41,4,-60,13r-3,-29v21,-9,43,-14,69,-14v111,0,71,126,78,219r-26,0xm95,-25v44,0,57,-27,51,-73v-5,-3,-21,-8,-43,-8v-36,0,-51,14,-51,40v0,31,18,41,43,41xm105,-290r42,0r-41,52r-26,0","w":206},"\u00e0":{"d":"154,0v-2,-9,-2,-20,-5,-27v-31,46,-136,42,-129,-39v-8,-58,74,-78,126,-56v3,-43,-5,-67,-50,-67v-23,0,-41,4,-60,13r-3,-29v21,-9,43,-14,69,-14v111,0,71,126,78,219r-26,0xm95,-25v44,0,57,-27,51,-73v-5,-3,-21,-8,-43,-8v-36,0,-51,14,-51,40v0,31,18,41,43,41xm121,-238r-26,0r-40,-52r41,0","w":206},"\u00e2":{"d":"154,0v-2,-9,-2,-20,-5,-27v-31,46,-136,42,-129,-39v-8,-58,74,-78,126,-56v3,-43,-5,-67,-50,-67v-23,0,-41,4,-60,13r-3,-29v21,-9,43,-14,69,-14v111,0,71,126,78,219r-26,0xm95,-25v44,0,57,-27,51,-73v-5,-3,-21,-8,-43,-8v-36,0,-51,14,-51,40v0,31,18,41,43,41xm86,-290r31,0r37,52r-26,0r-26,-37r-26,37r-27,0","w":206},"\u00e4":{"d":"154,0v-2,-9,-2,-20,-5,-27v-31,46,-136,42,-129,-39v-8,-58,74,-78,126,-56v3,-43,-5,-67,-50,-67v-23,0,-41,4,-60,13r-3,-29v21,-9,43,-14,69,-14v111,0,71,126,78,219r-26,0xm95,-25v44,0,57,-27,51,-73v-5,-3,-21,-8,-43,-8v-36,0,-51,14,-51,40v0,31,18,41,43,41xm91,-270v0,12,-4,17,-16,17v-11,0,-17,-5,-17,-17v0,-11,6,-17,17,-17v12,0,16,5,16,17xm149,-270v0,12,-5,17,-16,17v-11,0,-17,-5,-17,-17v0,-11,6,-17,17,-17v11,0,16,5,16,17","w":206},"\u00e3":{"d":"154,0v-2,-9,-2,-20,-5,-27v-31,46,-136,42,-129,-39v-8,-58,74,-78,126,-56v3,-43,-5,-67,-50,-67v-23,0,-41,4,-60,13r-3,-29v21,-9,43,-14,69,-14v111,0,71,126,78,219r-26,0xm95,-25v44,0,57,-27,51,-73v-5,-3,-21,-8,-43,-8v-36,0,-51,14,-51,40v0,31,18,41,43,41xm64,-246r-16,0v2,-25,13,-42,31,-42v29,0,50,49,62,4r16,0v-2,26,-13,42,-31,42v-28,0,-49,-47,-62,-4","w":206},"\u00e5":{"d":"154,0v-2,-9,-2,-20,-5,-27v-31,46,-136,42,-129,-39v-8,-58,74,-78,126,-56v3,-43,-5,-67,-50,-67v-23,0,-41,4,-60,13r-3,-29v21,-9,43,-14,69,-14v111,0,71,126,78,219r-26,0xm95,-25v44,0,57,-27,51,-73v-5,-3,-21,-8,-43,-8v-36,0,-51,14,-51,40v0,31,18,41,43,41xm67,-268v0,-18,12,-29,36,-29v24,0,37,12,37,29v0,18,-13,29,-37,29v-23,0,-36,-10,-36,-29xm84,-268v0,9,6,15,19,15v13,0,20,-6,20,-15v0,-9,-7,-15,-20,-15v-13,0,-19,6,-19,15","w":206},"\u00e7":{"d":"74,69r21,-65v-51,-5,-77,-41,-77,-113v0,-95,69,-128,144,-98r-2,30v-54,-21,-107,-7,-107,68v0,83,56,98,109,71r2,28v-11,8,-27,13,-46,14r-12,65r-32,0","w":179},"\u00e9":{"d":"117,4v-71,0,-99,-37,-99,-117v0,-67,29,-105,88,-105v56,0,91,42,84,115r-137,0v-5,85,71,87,127,63r4,28v-18,10,-41,16,-67,16xm52,-126r107,0v-1,-45,-21,-63,-52,-63v-36,0,-53,21,-55,63xm110,-290r42,0r-41,52r-27,0","w":208},"\u00e8":{"d":"117,4v-71,0,-99,-37,-99,-117v0,-67,29,-105,88,-105v56,0,91,42,84,115r-137,0v-5,85,71,87,127,63r4,28v-18,10,-41,16,-67,16xm52,-126r107,0v-1,-45,-21,-63,-52,-63v-36,0,-53,21,-55,63xm126,-238r-27,0r-39,-52r41,0","w":208},"\u00ea":{"d":"117,4v-71,0,-99,-37,-99,-117v0,-67,29,-105,88,-105v56,0,91,42,84,115r-137,0v-5,85,71,87,127,63r4,28v-18,10,-41,16,-67,16xm52,-126r107,0v-1,-45,-21,-63,-52,-63v-36,0,-53,21,-55,63xm91,-290r30,0r38,52r-27,0r-25,-37r-26,37r-27,0","w":208},"\u00eb":{"d":"117,4v-71,0,-99,-37,-99,-117v0,-67,29,-105,88,-105v56,0,91,42,84,115r-137,0v-5,85,71,87,127,63r4,28v-18,10,-41,16,-67,16xm52,-126r107,0v-1,-45,-21,-63,-52,-63v-36,0,-53,21,-55,63xm91,-270v0,12,-4,17,-16,17v-11,0,-16,-5,-16,-17v0,-11,5,-17,16,-17v12,0,16,5,16,17xm149,-270v0,12,-5,17,-16,17v-11,0,-17,-5,-17,-17v0,-11,6,-17,17,-17v11,0,16,5,16,17","w":208},"\u00ed":{"d":"73,0r-34,0r0,-213r34,-2r0,215xm60,-290r41,0r-41,52r-26,0","w":112},"\u00ec":{"d":"73,0r-34,0r0,-213r34,-2r0,215xm75,-238r-26,0r-40,-52r41,0","w":112},"\u00ee":{"d":"73,0r-34,0r0,-213r34,-2r0,215xm41,-290r30,0r38,52r-27,0r-26,-37r-26,37r-26,0","w":112},"\u00ef":{"d":"73,0r-34,0r0,-213r34,-2r0,215xm45,-270v0,12,-5,17,-17,17v-11,0,-16,-5,-16,-17v0,-11,5,-17,16,-17v12,0,17,5,17,17xm103,-270v0,12,-5,17,-16,17v-11,0,-17,-5,-17,-17v0,-11,6,-17,17,-17v11,0,16,5,16,17","w":112},"\u00f1":{"d":"197,0r-34,0r0,-142v5,-57,-77,-55,-99,-21r0,163r-34,0r0,-214r24,-2v3,7,3,17,7,23v42,-46,136,-31,136,51r0,142xm76,-246r-17,0v2,-25,13,-42,31,-42v29,0,50,49,62,4r16,0v-2,26,-13,42,-31,42v-28,0,-49,-47,-61,-4","w":223},"\u00f3":{"d":"203,-107v0,80,-28,112,-92,112v-65,0,-93,-32,-93,-112v0,-80,29,-111,93,-111v65,0,92,31,92,111xm53,-107v0,62,16,83,58,83v41,0,57,-22,57,-83v0,-62,-16,-82,-57,-82v-42,0,-58,20,-58,82xm115,-290r41,0r-41,52r-26,0","w":221},"\u00f2":{"d":"203,-107v0,80,-28,112,-92,112v-65,0,-93,-32,-93,-112v0,-80,29,-111,93,-111v65,0,92,31,92,111xm53,-107v0,62,16,83,58,83v41,0,57,-22,57,-83v0,-62,-16,-82,-57,-82v-42,0,-58,20,-58,82xm130,-238r-26,0r-40,-52r41,0","w":221},"\u00f4":{"d":"203,-107v0,80,-28,112,-92,112v-65,0,-93,-32,-93,-112v0,-80,29,-111,93,-111v65,0,92,31,92,111xm53,-107v0,62,16,83,58,83v41,0,57,-22,57,-83v0,-62,-16,-82,-57,-82v-42,0,-58,20,-58,82xm96,-290r30,0r38,52r-27,0r-26,-37r-26,37r-26,0","w":221},"\u00f6":{"d":"203,-107v0,80,-28,112,-92,112v-65,0,-93,-32,-93,-112v0,-80,29,-111,93,-111v65,0,92,31,92,111xm53,-107v0,62,16,83,58,83v41,0,57,-22,57,-83v0,-62,-16,-82,-57,-82v-42,0,-58,20,-58,82xm98,-270v0,12,-5,17,-17,17v-11,0,-16,-5,-16,-17v0,-11,5,-17,16,-17v12,0,17,5,17,17xm156,-270v0,12,-5,17,-16,17v-11,0,-17,-5,-17,-17v0,-11,6,-17,17,-17v11,0,16,5,16,17","w":221},"\u00f5":{"d":"203,-107v0,80,-28,112,-92,112v-65,0,-93,-32,-93,-112v0,-80,29,-111,93,-111v65,0,92,31,92,111xm53,-107v0,62,16,83,58,83v41,0,57,-22,57,-83v0,-62,-16,-82,-57,-82v-42,0,-58,20,-58,82xm74,-246r-17,0v2,-25,14,-42,32,-42v29,0,49,49,61,4r17,0v-2,26,-14,42,-32,42v-28,0,-49,-47,-61,-4","w":221},"\u00fa":{"d":"193,-215v-6,98,33,219,-83,219v-56,0,-83,-28,-83,-75r0,-144r33,0r0,144v0,29,17,44,50,44v32,0,49,-15,49,-44r0,-144r34,0xm114,-290r42,0r-41,52r-26,0","w":219},"\u00f9":{"d":"193,-215v-6,98,33,219,-83,219v-56,0,-83,-28,-83,-75r0,-144r33,0r0,144v0,29,17,44,50,44v32,0,49,-15,49,-44r0,-144r34,0xm130,-238r-27,0r-39,-52r41,0","w":219},"\u00fb":{"d":"193,-215v-6,98,33,219,-83,219v-56,0,-83,-28,-83,-75r0,-144r33,0r0,144v0,29,17,44,50,44v32,0,49,-15,49,-44r0,-144r34,0xm95,-290r30,0r38,52r-27,0r-25,-37r-26,37r-27,0","w":219},"\u00fc":{"d":"193,-215v-6,98,33,219,-83,219v-56,0,-83,-28,-83,-75r0,-144r33,0r0,144v0,29,17,44,50,44v32,0,49,-15,49,-44r0,-144r34,0xm98,-270v0,12,-5,17,-17,17v-11,0,-16,-5,-16,-17v0,-11,5,-17,16,-17v12,0,17,5,17,17xm156,-270v0,12,-6,17,-17,17v-11,0,-17,-5,-17,-17v0,-11,6,-17,17,-17v11,0,17,5,17,17","w":219},"\u2020":{"d":"16,-216r59,2r-3,-71r34,0r-2,71r60,-2r0,32r-60,-2r2,238r-34,0r3,-238r-59,2r0,-32","w":180},"\u00b0":{"d":"17,-247v0,-26,20,-47,46,-47v26,0,47,21,47,47v0,26,-21,47,-47,47v-26,0,-46,-21,-46,-47xm34,-247v0,16,12,29,29,29v17,0,30,-13,30,-29v0,-17,-13,-29,-30,-29v-17,0,-29,13,-29,29","w":126},"\u00a2":{"d":"163,-207r-2,30v-54,-21,-107,-7,-107,68v0,83,56,98,109,71r2,28v-11,7,-27,12,-45,14r-2,48r-27,0r2,-48v-49,-6,-74,-42,-74,-113v0,-68,24,-104,81,-108r3,-46r28,0r-4,46v13,2,26,6,36,10","w":181},"\u00a3":{"d":"27,-121r-1,-28r19,0v-22,-66,-6,-124,89,-125v27,0,50,6,68,14r-5,32v-37,-21,-134,-14,-124,35v0,15,4,29,8,44r95,0r0,28r-89,0v8,36,1,77,-24,90v41,-5,106,-8,152,-1v0,1,-1,33,-2,34v-67,-7,-122,-7,-191,0r-2,-33v33,-10,40,-52,32,-90r-25,0","w":230},"\u00a7":{"d":"23,-126v0,-20,10,-41,34,-53v-53,-33,-30,-104,50,-104v23,0,51,5,69,16r-4,27v-30,-21,-109,-26,-109,14v0,42,125,44,125,121v0,21,-11,41,-35,53v54,33,29,104,-50,104v-23,0,-50,-6,-68,-17r3,-27v30,20,109,27,109,-13v0,-42,-124,-44,-124,-121xm126,-68v64,-30,9,-77,-42,-95v-63,30,-7,77,42,95","w":202},"\u2022":{"d":"24,-116v0,-33,15,-49,48,-49v32,0,49,16,49,49v0,34,-17,50,-49,50v-33,0,-48,-17,-48,-50","w":146},"\u00b6":{"d":"98,55r-30,0r0,-232v-31,-1,-52,-17,-52,-48v0,-26,19,-45,54,-45r151,0r-1,29r-28,0r0,296r-30,0r0,-296r-64,0r0,296","w":239},"\u00df":{"d":"32,0r0,-181v0,-61,30,-94,84,-94v39,0,65,23,65,52v0,36,-47,55,-47,70v0,19,79,28,79,87v0,65,-84,86,-136,55r3,-30v27,20,99,19,99,-23v0,-45,-81,-51,-81,-85v0,-27,51,-44,51,-73v0,-13,-13,-23,-34,-23v-33,0,-49,20,-49,61r0,184r-34,0","w":228},"\u00ae":{"d":"17,-236v0,-36,28,-65,64,-65v35,0,64,29,64,65v0,36,-29,65,-64,65v-36,0,-64,-29,-64,-65xm27,-236v0,30,24,54,54,54v29,0,54,-24,54,-54v0,-30,-25,-54,-54,-54v-30,0,-54,24,-54,54xm85,-274v34,-2,36,34,14,43r16,30r-16,0r-14,-28r-17,0r0,28r-15,0r0,-73r32,0xm98,-251v1,-12,-18,-10,-30,-10r0,21v13,0,32,2,30,-11","w":161},"\u00a9":{"d":"22,-136v0,-78,63,-142,141,-142v78,0,141,64,141,142v0,78,-63,141,-141,141v-78,0,-141,-63,-141,-141xm40,-137v0,66,54,123,123,123v69,0,124,-55,124,-123v0,-66,-55,-121,-124,-121v-69,0,-123,55,-123,121xm221,-211r-3,25v-44,-26,-116,-3,-110,50v-6,55,72,77,114,48v1,8,3,16,4,24v-54,48,-153,9,-153,-72v0,-49,34,-92,93,-92v23,0,43,8,55,17","w":325},"\u2122":{"d":"221,-177r-18,0v-1,-25,3,-53,0,-76r-31,76r-15,0r-32,-77r1,77r-18,0r0,-100r26,0r32,75r30,-75r25,0r0,100xm93,-258r-30,0r0,81r-21,0r0,-81r-30,0r0,-19r81,0r0,19","w":238},"\u00b4":{"d":"82,-290r41,0r-41,52r-26,0","w":143},"\u00a8":{"d":"60,-270v0,12,-5,17,-17,17v-11,0,-16,-5,-16,-17v0,-11,5,-17,16,-17v12,0,17,5,17,17xm118,-270v0,12,-5,17,-16,17v-11,0,-17,-5,-17,-17v0,-11,6,-17,17,-17v11,0,16,5,16,17","w":143},"\u00c6":{"d":"359,-236r-136,0r8,80r107,0r0,31r-104,0r9,92r120,0r-1,33r-152,0r-7,-65r-110,0r-34,65r-44,0r151,-270r192,0xm187,-245r-78,149r91,0","w":379},"\u00d8":{"d":"36,5r-18,-17r22,-28v-13,-22,-18,-54,-18,-95v0,-99,31,-139,112,-139v37,0,63,9,81,27r22,-27r18,17r-25,32v11,22,15,51,15,90v0,99,-30,140,-111,140v-35,0,-61,-7,-79,-24xm60,-135v1,28,0,51,8,65r123,-147v-12,-17,-30,-23,-57,-23v-53,0,-74,22,-74,105xm207,-135v-1,-26,-1,-48,-7,-62r-122,147v12,15,30,20,56,20v53,0,73,-23,73,-105","w":266},"\u00b1":{"d":"197,-123r-66,0r0,59r-30,0r0,-59r-64,0r0,-30r64,0r0,-64r30,0r0,64r66,0r0,30xm196,-23r-159,0r0,-27r159,0r0,27"},"\u00a5":{"d":"62,-123r39,0r-79,-147r42,0r67,148r66,-148r41,0r-78,147r39,0r0,21r-48,0r0,19r49,0r0,21r-49,0r0,62r-40,0r0,-62r-49,0r0,-21r49,0r0,-19r-49,0r0,-21","w":259},"\u03bc":{"d":"167,-19v-24,30,-88,33,-107,-8v-3,25,3,56,4,80r-34,2r0,-270r34,0r0,143v0,28,21,45,51,45v27,0,48,-14,48,-40r0,-148r34,0r0,214r-25,2","w":223},"\u00aa":{"d":"108,-135v-1,-5,0,-13,-3,-17v-26,34,-88,25,-88,-32v0,-42,48,-58,85,-42v11,-48,-41,-50,-73,-34r-3,-25v44,-20,105,-17,105,49r0,101r-23,0xm71,-158v28,-1,34,-19,31,-48v-17,-8,-65,-5,-57,22v0,20,11,26,26,26","w":151},"\u00ba":{"d":"147,-214v0,59,-20,82,-65,82v-45,0,-65,-23,-65,-82v0,-59,20,-82,65,-82v46,0,65,23,65,82xm47,-214v0,43,9,56,35,56v25,0,36,-13,36,-56v0,-44,-11,-56,-36,-56v-26,0,-35,12,-35,56","w":164},"\u00e6":{"d":"33,-204v39,-18,119,-24,133,16v53,-61,166,-28,149,85r-138,0v-4,85,72,87,128,62r4,29v-44,27,-132,20,-149,-24v-25,57,-147,58,-140,-29v-8,-58,75,-78,126,-56v3,-44,-5,-68,-50,-68v-23,0,-41,4,-60,13xm95,-24v41,-1,56,-29,51,-73v-5,-3,-21,-8,-43,-8v-36,0,-52,14,-52,40v0,31,19,41,44,41xm177,-126r107,0v-1,-45,-22,-63,-53,-63v-36,0,-52,21,-54,63","w":332},"\u00f8":{"d":"29,2r-15,-15r17,-21v-9,-18,-13,-42,-13,-73v0,-80,29,-111,93,-111v27,0,46,5,61,17r14,-18r15,15r-15,19v12,18,17,43,17,78v0,80,-27,112,-92,112v-30,0,-52,-7,-67,-22xm168,-107v-1,-21,-1,-38,-6,-50r-98,112v9,15,24,21,47,21v41,0,57,-22,57,-83xm53,-107v1,17,-1,34,4,43r96,-109v-9,-12,-23,-16,-42,-16v-42,0,-58,20,-58,82","w":221},"\u00bf":{"d":"16,-28v0,-41,24,-67,65,-89r2,-48r27,0r2,61v-38,23,-61,41,-61,71v0,54,86,40,109,12r12,28v-36,42,-156,43,-156,-35xm74,-221v0,-13,7,-21,22,-21v15,0,22,7,22,21v0,13,-7,20,-22,20v-15,0,-22,-7,-22,-20","w":176},"\u00a1":{"d":"41,-166r27,0r5,214r-37,0xm32,-220v0,-13,7,-20,22,-20v15,0,22,6,22,20v0,13,-7,20,-22,20v-15,0,-22,-7,-22,-20","w":108},"\u00ac":{"d":"165,-107r-125,0r0,-31r154,0r0,87r-29,0r0,-56"},"\u0192":{"d":"32,53r-34,0r52,-240r-22,0r5,-28r23,0v0,-51,46,-78,99,-63r-7,24v-32,-11,-59,6,-58,39r51,0r-6,28r-51,0","w":147},"\u00ab":{"d":"193,-161r-70,44r70,43r0,28r-105,-70r0,-3r105,-70r0,28xm114,-161r-69,44r69,43r0,28r-104,-70r0,-3r104,-70r0,28","w":225},"\u00bb":{"d":"105,-46r0,-28r69,-43r-69,-44r0,-28r105,70r0,3xm27,-46r0,-28r69,-43r-69,-44r0,-28r104,70r0,3","w":225},"\u2026":{"d":"212,-18v0,14,-7,22,-22,22v-15,0,-22,-6,-22,-22v0,-14,7,-22,22,-22v15,0,22,8,22,22xm142,-18v0,14,-7,22,-22,22v-15,0,-23,-6,-23,-22v0,-14,8,-22,23,-22v15,0,22,8,22,22xm68,-18v0,14,-8,22,-23,22v-15,0,-22,-6,-22,-22v0,-14,7,-22,22,-22v15,0,23,8,23,22","w":235},"\u00a0":{"w":108},"\u00c0":{"d":"208,0r-22,-64r-118,0r-22,64r-40,0r100,-270r44,0r99,270r-41,0xm129,-243v-20,44,-33,99,-51,147r98,0xm149,-288r-29,0r-43,-42r43,0","w":255},"\u00c3":{"d":"208,0r-22,-64r-118,0r-22,64r-40,0r100,-270r44,0r99,270r-41,0xm129,-243v-20,44,-33,99,-51,147r98,0xm90,-289r-16,0v2,-22,13,-39,31,-39v29,1,49,45,62,5r15,0v-2,23,-13,39,-31,39v-28,-1,-49,-44,-61,-5","w":255},"\u00d5":{"d":"245,-135v0,99,-30,140,-111,140v-80,0,-112,-41,-112,-140v0,-99,32,-139,112,-139v81,0,111,40,111,139xm207,-135v0,-83,-20,-105,-73,-105v-53,0,-74,22,-74,105v0,82,21,105,74,105v53,0,73,-23,73,-105xm96,-289r-16,0v2,-22,13,-39,31,-39v29,1,49,45,62,5r15,0v-2,23,-13,39,-31,39v-29,-2,-48,-44,-61,-5","w":266},"\u0152":{"d":"377,0r-169,0v-1,-10,2,-25,-1,-33v-15,26,-43,38,-80,38v-73,0,-105,-41,-105,-140v0,-99,31,-139,105,-139v37,-1,64,13,81,35r0,-31r163,0r1,34r-130,0r0,80r111,0r0,31r-111,0r0,92r136,0xm206,-135v0,-83,-19,-105,-72,-105v-53,0,-74,22,-74,105v0,82,21,106,74,106v53,0,72,-24,72,-106","w":394},"\u0153":{"d":"337,-12v-45,26,-132,22,-148,-26v-13,31,-39,43,-78,43v-62,0,-91,-32,-91,-112v0,-80,29,-111,91,-111v40,-1,64,14,78,39v12,-26,36,-39,71,-39v55,0,89,42,82,115r-136,0v-6,85,71,88,126,62xm55,-107v0,62,17,83,59,83v41,0,57,-22,57,-83v0,-62,-16,-82,-58,-82v-42,0,-58,20,-58,82xm205,-126r107,0v0,-45,-23,-63,-53,-63v-36,0,-52,21,-54,63","w":360},"\u2013":{"d":"25,-135r141,0r0,25r-141,0r0,-25","w":191},"\u2014":{"d":"25,-135r205,0r0,25r-205,0r0,-25","w":254},"\u201c":{"d":"42,-206v-46,-6,-10,-61,4,-90r13,3r-10,44v21,6,20,47,-7,43xm108,-206v-45,-6,-10,-61,4,-90r13,3r-10,44v21,6,20,47,-7,43","w":150},"\u201d":{"d":"42,-285v45,6,11,62,-4,91r-12,-3r9,-45v-21,-6,-20,-47,7,-43xm108,-285v45,6,11,62,-4,91r-13,-3r10,-45v-21,-6,-20,-47,7,-43","w":149},"\u2018":{"d":"42,-206v-46,-6,-10,-61,4,-90r13,3r-10,44v21,6,20,47,-7,43","w":83},"\u2019":{"d":"42,-285v45,6,11,62,-4,91r-12,-4r9,-44v-21,-6,-20,-47,7,-43","w":83},"\u00f7":{"d":"130,-181v0,13,-8,19,-23,19v-15,0,-23,-4,-23,-19v0,-13,8,-20,23,-20v15,0,23,7,23,20xm130,-62v0,13,-8,19,-23,19v-15,0,-23,-4,-23,-19v0,-13,8,-20,23,-20v15,0,23,7,23,20xm192,-106r-169,0r0,-32r169,0r0,32","w":214},"\u00ff":{"d":"43,25v27,13,54,7,63,-25r-94,-215r39,0r73,183r57,-183r37,0r-79,219v-19,51,-53,64,-99,47xm103,-270v0,12,-5,17,-17,17v-11,0,-16,-5,-16,-17v0,-11,5,-17,16,-17v12,0,17,5,17,17xm161,-270v0,12,-6,17,-17,17v-11,0,-17,-5,-17,-17v0,-11,6,-17,17,-17v11,0,17,5,17,17","w":229},"\u0178":{"d":"8,-270r42,0r72,145r71,-145r41,0r-94,179r0,91r-37,0r0,-91xm104,-305v0,11,-6,16,-17,16v-11,0,-16,-4,-16,-16v0,-11,5,-17,16,-17v11,0,17,6,17,17xm173,-305v0,11,-6,16,-17,16v-11,0,-16,-4,-16,-16v0,-11,5,-17,16,-17v11,0,17,6,17,17","w":241},"\u2044":{"d":"136,-270r25,0r-181,270r-25,0","w":103},"\u20ac":{"d":"175,-124r-5,21r-92,0v4,82,82,90,141,60r2,28v-18,12,-43,18,-70,18v-67,0,-101,-34,-109,-106r-31,0r1,-21r29,0r0,-22r-29,0r-1,-21r31,0v4,-92,95,-126,175,-92r-7,29v-58,-24,-129,-6,-132,63r111,0r-5,21r-108,0r0,22r99,0","w":238},"\u2039":{"d":"121,-161r-70,44r70,43r0,28r-104,-70r0,-3r104,-70r0,28","w":145},"\u203a":{"d":"25,-46r0,-28r69,-43r-69,-44r0,-28r105,70r0,3","w":145},"\ufb01":{"d":"78,-188r0,188r-34,0r0,-188r-32,0r0,-27r32,0v-9,-54,43,-83,99,-68r-1,23v-37,-7,-71,5,-64,45r134,0r0,215r-35,0r0,-188r-99,0xm217,-270v0,13,-7,19,-22,19v-15,0,-23,-5,-23,-19v0,-12,8,-18,23,-18v15,0,22,6,22,18","w":250},"\ufb02":{"d":"203,0r-34,0r0,-261v-44,-7,-103,-4,-91,46r45,0r0,27r-45,0r0,188r-34,0r0,-188r-32,0r0,-27r32,0v-2,-47,17,-70,89,-73v28,0,45,4,70,5r0,283","w":240},"\u2021":{"d":"164,-51r0,33r-61,-3r3,73r-34,0r3,-73r-59,3r0,-33r60,2r-1,-137r-59,2r0,-32r59,2r-3,-71r34,0r-2,71r60,-2r0,32r-60,-2r0,137","w":180},"\u00b7":{"d":"73,-124v0,14,-7,22,-22,22v-15,0,-22,-6,-22,-22v0,-14,7,-22,22,-22v15,0,22,8,22,22","w":101},"\u201a":{"d":"42,-40v45,6,11,62,-4,91r-12,-3r9,-44v-20,-6,-20,-48,7,-44","w":83},"\u201e":{"d":"108,-40v45,6,11,62,-4,91r-13,-3r10,-44v-20,-6,-20,-48,7,-44xm42,-40v45,6,11,62,-4,91r-12,-3r9,-44v-20,-6,-20,-48,7,-44","w":150},"\u2030":{"d":"120,-212v0,44,-17,63,-51,63v-36,0,-52,-19,-52,-63v0,-44,15,-62,52,-62v34,0,51,16,51,62xm97,-212v0,-32,-9,-40,-28,-40v-19,0,-29,8,-29,40v0,32,10,40,29,40v19,0,28,-8,28,-40xm185,-264r21,15r-140,244r-21,-16xm239,-60v0,44,-18,63,-52,63v-36,0,-51,-19,-51,-63v0,-44,15,-63,52,-63v34,0,51,17,51,63xm216,-60v0,-32,-9,-40,-28,-40v-19,0,-29,8,-29,40v0,31,9,40,28,40v19,0,29,-9,29,-40xm353,-60v0,44,-17,63,-52,63v-35,0,-51,-19,-51,-63v0,-44,15,-63,52,-63v34,0,51,17,51,63xm330,-60v0,-32,-9,-40,-28,-40v-19,0,-29,8,-29,40v0,31,9,40,28,40v19,0,29,-9,29,-40","w":370},"\u00c2":{"d":"208,0r-22,-64r-118,0r-22,64r-40,0r100,-270r44,0r99,270r-41,0xm129,-243v-20,44,-33,99,-51,147r98,0xm109,-329r37,0r42,42r-33,0r-27,-27r-27,27r-32,0","w":255},"\u00ca":{"d":"72,-33r136,0r-1,33r-172,0r0,-270r166,0r1,34r-130,0r0,80r111,0r0,31r-111,0r0,92xm103,-329r36,0r42,42r-33,0r-27,-27r-27,27r-32,0","w":224},"\u00c1":{"d":"208,0r-22,-64r-118,0r-22,64r-40,0r100,-270r44,0r99,270r-41,0xm129,-243v-20,44,-33,99,-51,147r98,0xm134,-329r46,0r-46,42r-29,0","w":255},"\u00cb":{"d":"72,-33r136,0r-1,33r-172,0r0,-270r166,0r1,34r-130,0r0,80r111,0r0,31r-111,0r0,92xm103,-305v0,11,-6,16,-17,16v-11,0,-16,-4,-16,-16v0,-11,5,-17,16,-17v11,0,17,6,17,17xm172,-305v0,11,-5,16,-16,16v-11,0,-17,-4,-17,-16v0,-11,6,-17,17,-17v11,0,16,6,16,17","w":224},"\u00c8":{"d":"72,-33r136,0r-1,33r-172,0r0,-270r166,0r1,34r-130,0r0,80r111,0r0,31r-111,0r0,92xm142,-288r-29,0r-43,-42r43,0","w":224},"\u00cd":{"d":"39,0r0,-270r38,0r0,270r-38,0xm64,-329r47,0r-47,42r-28,0","w":116},"\u00ce":{"d":"39,0r0,-270r38,0r0,270r-38,0xm40,-329r36,0r42,42r-32,0r-28,-27r-27,27r-31,0","w":116},"\u00cf":{"d":"39,0r0,-270r38,0r0,270r-38,0xm40,-305v0,11,-5,16,-16,16v-11,0,-17,-4,-17,-16v0,-11,6,-17,17,-17v11,0,16,6,16,17xm109,-305v0,11,-5,16,-16,16v-11,0,-17,-4,-17,-16v0,-11,6,-17,17,-17v11,0,16,6,16,17","w":116},"\u00cc":{"d":"39,0r0,-270r38,0r0,270r-38,0xm79,-288r-28,0r-43,-42r42,0","w":116},"\u00d3":{"d":"245,-135v0,99,-30,140,-111,140v-80,0,-112,-41,-112,-140v0,-99,32,-139,112,-139v81,0,111,40,111,139xm207,-135v0,-83,-20,-105,-73,-105v-53,0,-74,22,-74,105v0,82,21,105,74,105v53,0,73,-23,73,-105xm140,-329r46,0r-46,42r-28,0","w":266},"\u00d4":{"d":"245,-135v0,99,-30,140,-111,140v-80,0,-112,-41,-112,-140v0,-99,32,-139,112,-139v81,0,111,40,111,139xm207,-135v0,-83,-20,-105,-73,-105v-53,0,-74,22,-74,105v0,82,21,105,74,105v53,0,73,-23,73,-105xm116,-329r36,0r42,42r-33,0r-27,-27r-27,27r-32,0","w":266},"\u00d2":{"d":"245,-135v0,99,-30,140,-111,140v-80,0,-112,-41,-112,-140v0,-99,32,-139,112,-139v81,0,111,40,111,139xm207,-135v0,-83,-20,-105,-73,-105v-53,0,-74,22,-74,105v0,82,21,105,74,105v53,0,73,-23,73,-105xm161,-288r-29,0r-43,-42r43,0","w":266},"\u00da":{"d":"235,-270r0,173v0,71,-37,102,-103,102v-66,0,-102,-31,-102,-102r0,-173r36,0r0,172v0,47,21,68,66,68v45,0,66,-21,66,-68r0,-172r37,0xm139,-329r46,0r-47,42r-28,0","w":264},"\u00db":{"d":"235,-270r0,173v0,71,-37,102,-103,102v-66,0,-102,-31,-102,-102r0,-173r36,0r0,172v0,47,21,68,66,68v45,0,66,-21,66,-68r0,-172r37,0xm114,-329r36,0r42,42r-32,0r-28,-27r-27,27r-31,0","w":264},"\u00d9":{"d":"235,-270r0,173v0,71,-37,102,-103,102v-66,0,-102,-31,-102,-102r0,-173r36,0r0,172v0,47,21,68,66,68v45,0,66,-21,66,-68r0,-172r37,0xm153,-288r-28,0r-43,-42r43,0","w":264},"\u0131":{"d":"73,0r-34,0r0,-213r34,-2r0,215","w":112},"\u02c6":{"d":"57,-290r30,0r38,52r-27,0r-26,-37r-26,37r-27,0","w":143},"\u02dc":{"d":"36,-246r-17,0v2,-25,14,-42,32,-42v29,0,49,49,61,4r17,0v-2,26,-14,42,-32,42v-28,0,-49,-47,-61,-4","w":143},"\u00af":{"d":"123,-278r0,23r-101,0r0,-23r101,0","w":143},"\u02d8":{"d":"98,-290r25,0v0,34,-16,55,-51,55v-36,0,-51,-20,-51,-55r24,0v0,24,11,35,27,35v15,0,26,-11,26,-35","w":143},"\u02d9":{"d":"94,-270v0,13,-7,19,-22,19v-15,0,-23,-5,-23,-19v0,-12,8,-18,23,-18v15,0,22,6,22,18","w":143},"\u02da":{"d":"36,-268v0,-18,12,-29,36,-29v24,0,37,12,37,29v0,18,-13,29,-37,29v-23,0,-36,-10,-36,-29xm53,-268v0,9,6,15,19,15v13,0,20,-6,20,-15v0,-9,-7,-15,-20,-15v-13,0,-19,6,-19,15","w":143},"\u00b8":{"d":"45,69r23,-71r23,0r-13,71r-33,0","w":143},"\u02dd":{"d":"60,-290r36,0r-38,52r-23,0xm117,-290r37,0r-41,52r-26,0","w":143},"\u02db":{"d":"123,57v-21,16,-78,9,-72,-21v-2,-21,26,-51,49,-36v-15,6,-22,16,-22,28v0,18,30,19,42,11","w":143},"\u02c7":{"d":"87,-238r-30,0r-37,-52r26,0r26,38r26,-38r27,0","w":143},"\u00a4":{"d":"49,-95v-13,-20,-11,-52,1,-71r-23,-24r18,-20r24,25v19,-13,51,-14,70,0r26,-25r18,20r-25,24v12,19,14,50,1,70r24,24r-19,19r-23,-23v-19,14,-54,15,-73,0r-23,24r-19,-20xm63,-131v0,22,18,40,41,40v23,0,41,-18,41,-40v0,-22,-18,-40,-41,-40v-23,0,-41,18,-41,40","w":209}}});
