/*  Prototype JavaScript framework, version 1.6.0.3
 *  (c) 2005-2008 Sam Stephenson
 *
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *  For details, see the Prototype web site: http://www.prototypejs.org/
 *
 *--------------------------------------------------------------------------*/

var Prototype = {
  Version: '1.6.0.3',

  Browser: {
    IE:     !!(window.attachEvent &&
      navigator.userAgent.indexOf('Opera') === -1),
    Opera:  navigator.userAgent.indexOf('Opera') > -1,
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 &&
      navigator.userAgent.indexOf('KHTML') === -1,
    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
  },

  BrowserFeatures: {
    XPath: !!document.evaluate,
    SelectorsAPI: !!document.querySelector,
    ElementExtensions: !!window.HTMLElement,
    SpecificElementExtensions:
      document.createElement('div')['__proto__'] &&
      document.createElement('div')['__proto__'] !==
        document.createElement('form')['__proto__']
  },

  ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,

  emptyFunction: function() { },
  K: function(x) { return x }
};

if (Prototype.Browser.MobileSafari)
  Prototype.BrowserFeatures.SpecificElementExtensions = false;


/* Based on Alex Arnell's inheritance implementation. */
var Class = {
  create: function() {
    var parent = null, properties = $A(arguments);
    if (Object.isFunction(properties[0]))
      parent = properties.shift();

    function klass() {
      this.initialize.apply(this, arguments);
    }

    Object.extend(klass, Class.Methods);
    klass.superclass = parent;
    klass.subclasses = [];

    if (parent) {
      var subclass = function() { };
      subclass.prototype = parent.prototype;
      klass.prototype = new subclass;
      parent.subclasses.push(klass);
    }

    for (var i = 0; i < properties.length; i++)
      klass.addMethods(properties[i]);

    if (!klass.prototype.initialize)
      klass.prototype.initialize = Prototype.emptyFunction;

    klass.prototype.constructor = klass;

    return klass;
  }
};

Class.Methods = {
  addMethods: function(source) {
    var ancestor   = this.superclass && this.superclass.prototype;
    var properties = Object.keys(source);

    if (!Object.keys({ toString: true }).length)
      properties.push("toString", "valueOf");

    for (var i = 0, length = properties.length; i < length; i++) {
      var property = properties[i], value = source[property];
      if (ancestor && Object.isFunction(value) &&
          value.argumentNames().first() == "$super") {
        var method = value;
        value = (function(m) {
          return function() { return ancestor[m].apply(this, arguments) };
        })(property).wrap(method);

        value.valueOf = method.valueOf.bind(method);
        value.toString = method.toString.bind(method);
      }
      this.prototype[property] = value;
    }

    return this;
  }
};

var Abstract = { };

Object.extend = function(destination, source) {
  for (var property in source)
    destination[property] = source[property];
  return destination;
};

Object.extend(Object, {
  inspect: function(object) {
    try {
      if (Object.isUndefined(object)) return 'undefined';
      if (object === null) return 'null';
      return object.inspect ? object.inspect() : String(object);
    } catch (e) {
      if (e instanceof RangeError) return '...';
      throw e;
    }
  },

  toJSON: function(object) {
    var type = typeof object;
    switch (type) {
      case 'undefined':
      case 'function':
      case 'unknown': return;
      case 'boolean': return object.toString();
    }

    if (object === null) return 'null';
    if (object.toJSON) return object.toJSON();
    if (Object.isElement(object)) return;

    var results = [];
    for (var property in object) {
      var value = Object.toJSON(object[property]);
      if (!Object.isUndefined(value))
        results.push(property.toJSON() + ': ' + value);
    }

    return '{' + results.join(', ') + '}';
  },

  toQueryString: function(object) {
    return $H(object).toQueryString();
  },

  toHTML: function(object) {
    return object && object.toHTML ? object.toHTML() : String.interpret(object);
  },

  keys: function(object) {
    var keys = [];
    for (var property in object)
      keys.push(property);
    return keys;
  },

  values: function(object) {
    var values = [];
    for (var property in object)
      values.push(object[property]);
    return values;
  },

  clone: function(object) {
    return Object.extend({ }, object);
  },

  isElement: function(object) {
    return !!(object && object.nodeType == 1);
  },

  isArray: function(object) {
    return object != null && typeof object == "object" &&
      'splice' in object && 'join' in object;
  },

  isHash: function(object) {
    return object instanceof Hash;
  },

  isFunction: function(object) {
    return typeof object == "function";
  },

  isString: function(object) {
    return typeof object == "string";
  },

  isNumber: function(object) {
    return typeof object == "number";
  },

  isUndefined: function(object) {
    return typeof object == "undefined";
  }
});

Object.extend(Function.prototype, {
  argumentNames: function() {
    var names = this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1]
      .replace(/\s+/g, '').split(',');
    return names.length == 1 && !names[0] ? [] : names;
  },

  bind: function() {
    if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
    var __method = this, args = $A(arguments), object = args.shift();
    return function() {
      return __method.apply(object, args.concat($A(arguments)));
    }
  },

  bindAsEventListener: function() {
    var __method = this, args = $A(arguments), object = args.shift();
    return function(event) {
      return __method.apply(object, [event || window.event].concat(args));
    }
  },

  curry: function() {
    if (!arguments.length) return this;
    var __method = this, args = $A(arguments);
    return function() {
      return __method.apply(this, args.concat($A(arguments)));
    }
  },

  delay: function() {
    var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
    return window.setTimeout(function() {
      return __method.apply(__method, args);
    }, timeout);
  },

  defer: function() {
    var args = [0.01].concat($A(arguments));
    return this.delay.apply(this, args);
  },

  wrap: function(wrapper) {
    var __method = this;
    return function() {
      return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
    }
  },

  methodize: function() {
    if (this._methodized) return this._methodized;
    var __method = this;
    return this._methodized = function() {
      return __method.apply(null, [this].concat($A(arguments)));
    };
  }
});

Date.prototype.toJSON = function() {
  return '"' + this.getUTCFullYear() + '-' +
    (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
    this.getUTCDate().toPaddedString(2) + 'T' +
    this.getUTCHours().toPaddedString(2) + ':' +
    this.getUTCMinutes().toPaddedString(2) + ':' +
    this.getUTCSeconds().toPaddedString(2) + 'Z"';
};

var Try = {
  these: function() {
    var returnValue;

    for (var i = 0, length = arguments.length; i < length; i++) {
      var lambda = arguments[i];
      try {
        returnValue = lambda();
        break;
      } catch (e) { }
    }

    return returnValue;
  }
};

RegExp.prototype.match = RegExp.prototype.test;

RegExp.escape = function(str) {
  return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
};

/*--------------------------------------------------------------------------*/

var PeriodicalExecuter = Class.create({
  initialize: function(callback, frequency) {
    this.callback = callback;
    this.frequency = frequency;
    this.currentlyExecuting = false;

    this.registerCallback();
  },

  registerCallback: function() {
    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
  },

  execute: function() {
    this.callback(this);
  },

  stop: function() {
    if (!this.timer) return;
    clearInterval(this.timer);
    this.timer = null;
  },

  onTimerEvent: function() {
    if (!this.currentlyExecuting) {
      try {
        this.currentlyExecuting = true;
        this.execute();
      } finally {
        this.currentlyExecuting = false;
      }
    }
  }
});
Object.extend(String, {
  interpret: function(value) {
    return value == null ? '' : String(value);
  },
  specialChar: {
    '\b': '\\b',
    '\t': '\\t',
    '\n': '\\n',
    '\f': '\\f',
    '\r': '\\r',
    '\\': '\\\\'
  }
});

Object.extend(String.prototype, {
  gsub: function(pattern, replacement) {
    var result = '', source = this, match;
    replacement = arguments.callee.prepareReplacement(replacement);

    while (source.length > 0) {
      if (match = source.match(pattern)) {
        result += source.slice(0, match.index);
        result += String.interpret(replacement(match));
        source  = source.slice(match.index + match[0].length);
      } else {
        result += source, source = '';
      }
    }
    return result;
  },

  sub: function(pattern, replacement, count) {
    replacement = this.gsub.prepareReplacement(replacement);
    count = Object.isUndefined(count) ? 1 : count;

    return this.gsub(pattern, function(match) {
      if (--count < 0) return match[0];
      return replacement(match);
    });
  },

  scan: function(pattern, iterator) {
    this.gsub(pattern, iterator);
    return String(this);
  },

  truncate: function(length, truncation) {
    length = length || 30;
    truncation = Object.isUndefined(truncation) ? '...' : truncation;
    return this.length > length ?
      this.slice(0, length - truncation.length) + truncation : String(this);
  },

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

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

  stripScripts: function() {
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
  },

  extractScripts: function() {
    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
    return (this.match(matchAll) || []).map(function(scriptTag) {
      return (scriptTag.match(matchOne) || ['', ''])[1];
    });
  },

  evalScripts: function() {
    return this.extractScripts().map(function(script) { return eval(script) });
  },

  escapeHTML: function() {
    var self = arguments.callee;
    self.text.data = this;
    return self.div.innerHTML;
  },

  unescapeHTML: function() {
    var div = new Element('div');
    div.innerHTML = this.stripTags();
    return div.childNodes[0] ? (div.childNodes.length > 1 ?
      $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
      div.childNodes[0].nodeValue) : '';
  },

  toQueryParams: function(separator) {
    var match = this.strip().match(/([^?#]*)(#.*)?$/);
    if (!match) return { };

    return match[1].split(separator || '&').inject({ }, function(hash, pair) {
      if ((pair = pair.split('='))[0]) {
        var key = decodeURIComponent(pair.shift());
        var value = pair.length > 1 ? pair.join('=') : pair[0];
        if (value != undefined) value = decodeURIComponent(value);

        if (key in hash) {
          if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
          hash[key].push(value);
        }
        else hash[key] = value;
      }
      return hash;
    });
  },

  toArray: function() {
    return this.split('');
  },

  succ: function() {
    return this.slice(0, this.length - 1) +
      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
  },

  times: function(count) {
    return count < 1 ? '' : new Array(count + 1).join(this);
  },

  camelize: function() {
    var parts = this.split('-'), len = parts.length;
    if (len == 1) return parts[0];

    var camelized = this.charAt(0) == '-'
      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
      : parts[0];

    for (var i = 1; i < len; i++)
      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);

    return camelized;
  },

  capitalize: function() {
    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
  },

  underscore: function() {
    return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
  },

  dasherize: function() {
    return this.gsub(/_/,'-');
  },

  inspect: function(useDoubleQuotes) {
    var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
      var character = String.specialChar[match[0]];
      return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
    });
    if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
    return "'" + escapedString.replace(/'/g, '\\\'') + "'";
  },

  toJSON: function() {
    return this.inspect(true);
  },

  unfilterJSON: function(filter) {
    return this.sub(filter || Prototype.JSONFilter, '#{1}');
  },

  isJSON: function() {
    var str = this;
    if (str.blank()) return false;
    str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
  },

  evalJSON: function(sanitize) {
    var json = this.unfilterJSON();
    try {
      if (!sanitize || json.isJSON()) return eval('(' + json + ')');
    } catch (e) { }
    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
  },

  include: function(pattern) {
    return this.indexOf(pattern) > -1;
  },

  startsWith: function(pattern) {
    return this.indexOf(pattern) === 0;
  },

  endsWith: function(pattern) {
    var d = this.length - pattern.length;
    return d >= 0 && this.lastIndexOf(pattern) === d;
  },

  empty: function() {
    return this == '';
  },

  blank: function() {
    return /^\s*$/.test(this);
  },

  interpolate: function(object, pattern) {
    return new Template(this, pattern).evaluate(object);
  }
});

if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
  escapeHTML: function() {
    return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
  },
  unescapeHTML: function() {
    return this.stripTags().replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
  }
});

String.prototype.gsub.prepareReplacement = function(replacement) {
  if (Object.isFunction(replacement)) return replacement;
  var template = new Template(replacement);
  return function(match) { return template.evaluate(match) };
};

String.prototype.parseQuery = String.prototype.toQueryParams;

Object.extend(String.prototype.escapeHTML, {
  div:  document.createElement('div'),
  text: document.createTextNode('')
});

String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text);

var Template = Class.create({
  initialize: function(template, pattern) {
    this.template = template.toString();
    this.pattern = pattern || Template.Pattern;
  },

  evaluate: function(object) {
    if (Object.isFunction(object.toTemplateReplacements))
      object = object.toTemplateReplacements();

    return this.template.gsub(this.pattern, function(match) {
      if (object == null) return '';

      var before = match[1] || '';
      if (before == '\\') return match[2];

      var ctx = object, expr = match[3];
      var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
      match = pattern.exec(expr);
      if (match == null) return before;

      while (match != null) {
        var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
        ctx = ctx[comp];
        if (null == ctx || '' == match[3]) break;
        expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
        match = pattern.exec(expr);
      }

      return before + String.interpret(ctx);
    });
  }
});
Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;

var $break = { };

var Enumerable = {
  each: function(iterator, context) {
    var index = 0;
    try {
      this._each(function(value) {
        iterator.call(context, value, index++);
      });
    } catch (e) {
      if (e != $break) throw e;
    }
    return this;
  },

  eachSlice: function(number, iterator, context) {
    var index = -number, slices = [], array = this.toArray();
    if (number < 1) return array;
    while ((index += number) < array.length)
      slices.push(array.slice(index, index+number));
    return slices.collect(iterator, context);
  },

  all: function(iterator, context) {
    iterator = iterator || Prototype.K;
    var result = true;
    this.each(function(value, index) {
      result = result && !!iterator.call(context, value, index);
      if (!result) throw $break;
    });
    return result;
  },

  any: function(iterator, context) {
    iterator = iterator || Prototype.K;
    var result = false;
    this.each(function(value, index) {
      if (result = !!iterator.call(context, value, index))
        throw $break;
    });
    return result;
  },

  collect: function(iterator, context) {
    iterator = iterator || Prototype.K;
    var results = [];
    this.each(function(value, index) {
      results.push(iterator.call(context, value, index));
    });
    return results;
  },

  detect: function(iterator, context) {
    var result;
    this.each(function(value, index) {
      if (iterator.call(context, value, index)) {
        result = value;
        throw $break;
      }
    });
    return result;
  },

  findAll: function(iterator, context) {
    var results = [];
    this.each(function(value, index) {
      if (iterator.call(context, value, index))
        results.push(value);
    });
    return results;
  },

  grep: function(filter, iterator, context) {
    iterator = iterator || Prototype.K;
    var results = [];

    if (Object.isString(filter))
      filter = new RegExp(filter);

    this.each(function(value, index) {
      if (filter.match(value))
        results.push(iterator.call(context, value, index));
    });
    return results;
  },

  include: function(object) {
    if (Object.isFunction(this.indexOf))
      if (this.indexOf(object) != -1) return true;

    var found = false;
    this.each(function(value) {
      if (value == object) {
        found = true;
        throw $break;
      }
    });
    return found;
  },

  inGroupsOf: function(number, fillWith) {
    fillWith = Object.isUndefined(fillWith) ? null : fillWith;
    return this.eachSlice(number, function(slice) {
      while(slice.length < number) slice.push(fillWith);
      return slice;
    });
  },

  inject: function(memo, iterator, context) {
    this.each(function(value, index) {
      memo = iterator.call(context, memo, value, index);
    });
    return memo;
  },

  invoke: function(method) {
    var args = $A(arguments).slice(1);
    return this.map(function(value) {
      return value[method].apply(value, args);
    });
  },

  max: function(iterator, context) {
    iterator = iterator || Prototype.K;
    var result;
    this.each(function(value, index) {
      value = iterator.call(context, value, index);
      if (result == null || value >= result)
        result = value;
    });
    return result;
  },

  min: function(iterator, context) {
    iterator = iterator || Prototype.K;
    var result;
    this.each(function(value, index) {
      value = iterator.call(context, value, index);
      if (result == null || value < result)
        result = value;
    });
    return result;
  },

  partition: function(iterator, context) {
    iterator = iterator || Prototype.K;
    var trues = [], falses = [];
    this.each(function(value, index) {
      (iterator.call(context, value, index) ?
        trues : falses).push(value);
    });
    return [trues, falses];
  },

  pluck: function(property) {
    var results = [];
    this.each(function(value) {
      results.push(value[property]);
    });
    return results;
  },

  reject: function(iterator, context) {
    var results = [];
    this.each(function(value, index) {
      if (!iterator.call(context, value, index))
        results.push(value);
    });
    return results;
  },

  sortBy: function(iterator, context) {
    return this.map(function(value, index) {
      return {
        value: value,
        criteria: iterator.call(context, value, index)
      };
    }).sort(function(left, right) {
      var a = left.criteria, b = right.criteria;
      return a < b ? -1 : a > b ? 1 : 0;
    }).pluck('value');
  },

  toArray: function() {
    return this.map();
  },

  zip: function() {
    var iterator = Prototype.K, args = $A(arguments);
    if (Object.isFunction(args.last()))
      iterator = args.pop();

    var collections = [this].concat(args).map($A);
    return this.map(function(value, index) {
      return iterator(collections.pluck(index));
    });
  },

  size: function() {
    return this.toArray().length;
  },

  inspect: function() {
    return '#<Enumerable:' + this.toArray().inspect() + '>';
  }
};

Object.extend(Enumerable, {
  map:     Enumerable.collect,
  find:    Enumerable.detect,
  select:  Enumerable.findAll,
  filter:  Enumerable.findAll,
  member:  Enumerable.include,
  entries: Enumerable.toArray,
  every:   Enumerable.all,
  some:    Enumerable.any
});
function $A(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) return iterable.toArray();
  var length = iterable.length || 0, results = new Array(length);
  while (length--) results[length] = iterable[length];
  return results;
}

if (Prototype.Browser.WebKit) {
  $A = function(iterable) {
    if (!iterable) return [];
    // In Safari, only use the `toArray` method if it's not a NodeList.
    // A NodeList is a function, has an function `item` property, and a numeric
    // `length` property. Adapted from Google Doctype.
    if (!(typeof iterable === 'function' && typeof iterable.length ===
        'number' && typeof iterable.item === 'function') && iterable.toArray)
      return iterable.toArray();
    var length = iterable.length || 0, results = new Array(length);
    while (length--) results[length] = iterable[length];
    return results;
  };
}

Array.from = $A;

Object.extend(Array.prototype, Enumerable);

if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;

Object.extend(Array.prototype, {
  _each: function(iterator) {
    for (var i = 0, length = this.length; i < length; i++)
      iterator(this[i]);
  },

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

  first: function() {
    return this[0];
  },

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

  compact: function() {
    return this.select(function(value) {
      return value != null;
    });
  },

  flatten: function() {
    return this.inject([], function(array, value) {
      return array.concat(Object.isArray(value) ?
        value.flatten() : [value]);
    });
  },

  without: function() {
    var values = $A(arguments);
    return this.select(function(value) {
      return !values.include(value);
    });
  },

  reverse: function(inline) {
    return (inline !== false ? this : this.toArray())._reverse();
  },

  reduce: function() {
    return this.length > 1 ? this : this[0];
  },

  uniq: function(sorted) {
    return this.inject([], function(array, value, index) {
      if (0 == index || (sorted ? array.last() != value : !array.include(value)))
        array.push(value);
      return array;
    });
  },

  intersect: function(array) {
    return this.uniq().findAll(function(item) {
      return array.detect(function(value) { return item === value });
    });
  },

  clone: function() {
    return [].concat(this);
  },

  size: function() {
    return this.length;
  },

  inspect: function() {
    return '[' + this.map(Object.inspect).join(', ') + ']';
  },

  toJSON: function() {
    var results = [];
    this.each(function(object) {
      var value = Object.toJSON(object);
      if (!Object.isUndefined(value)) results.push(value);
    });
    return '[' + results.join(', ') + ']';
  }
});

// use native browser JS 1.6 implementation if available
if (Object.isFunction(Array.prototype.forEach))
  Array.prototype._each = Array.prototype.forEach;

if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
  i || (i = 0);
  var length = this.length;
  if (i < 0) i = length + i;
  for (; i < length; i++)
    if (this[i] === item) return i;
  return -1;
};

if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
  i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
  var n = this.slice(0, i).reverse().indexOf(item);
  return (n < 0) ? n : i - n - 1;
};

Array.prototype.toArray = Array.prototype.clone;

function $w(string) {
  if (!Object.isString(string)) return [];
  string = string.strip();
  return string ? string.split(/\s+/) : [];
}

if (Prototype.Browser.Opera){
  Array.prototype.concat = function() {
    var array = [];
    for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
    for (var i = 0, length = arguments.length; i < length; i++) {
      if (Object.isArray(arguments[i])) {
        for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
          array.push(arguments[i][j]);
      } else {
        array.push(arguments[i]);
      }
    }
    return array;
  };
}
Object.extend(Number.prototype, {
  toColorPart: function() {
    return this.toPaddedString(2, 16);
  },

  succ: function() {
    return this + 1;
  },

  times: function(iterator, context) {
    $R(0, this, true).each(iterator, context);
    return this;
  },

  toPaddedString: function(length, radix) {
    var string = this.toString(radix || 10);
    return '0'.times(length - string.length) + string;
  },

  toJSON: function() {
    return isFinite(this) ? this.toString() : 'null';
  }
});

$w('abs round ceil floor').each(function(method){
  Number.prototype[method] = Math[method].methodize();
});
function $H(object) {
  return new Hash(object);
};

var Hash = Class.create(Enumerable, (function() {

  function toQueryPair(key, value) {
    if (Object.isUndefined(value)) return key;
    return key + '=' + encodeURIComponent(String.interpret(value));
  }

  return {
    initialize: function(object) {
      this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
    },

    _each: function(iterator) {
      for (var key in this._object) {
        var value = this._object[key], pair = [key, value];
        pair.key = key;
        pair.value = value;
        iterator(pair);
      }
    },

    set: function(key, value) {
      return this._object[key] = value;
    },

    get: function(key) {
      // simulating poorly supported hasOwnProperty
      if (this._object[key] !== Object.prototype[key])
        return this._object[key];
    },

    unset: function(key) {
      var value = this._object[key];
      delete this._object[key];
      return value;
    },

    toObject: function() {
      return Object.clone(this._object);
    },

    keys: function() {
      return this.pluck('key');
    },

    values: function() {
      return this.pluck('value');
    },

    index: function(value) {
      var match = this.detect(function(pair) {
        return pair.value === value;
      });
      return match && match.key;
    },

    merge: function(object) {
      return this.clone().update(object);
    },

    update: function(object) {
      return new Hash(object).inject(this, function(result, pair) {
        result.set(pair.key, pair.value);
        return result;
      });
    },

    toQueryString: function() {
      return this.inject([], function(results, pair) {
        var key = encodeURIComponent(pair.key), values = pair.value;

        if (values && typeof values == 'object') {
          if (Object.isArray(values))
            return results.concat(values.map(toQueryPair.curry(key)));
        } else results.push(toQueryPair(key, values));
        return results;
      }).join('&');
    },

    inspect: function() {
      return '#<Hash:{' + this.map(function(pair) {
        return pair.map(Object.inspect).join(': ');
      }).join(', ') + '}>';
    },

    toJSON: function() {
      return Object.toJSON(this.toObject());
    },

    clone: function() {
      return new Hash(this);
    }
  }
})());

Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
Hash.from = $H;
var ObjectRange = Class.create(Enumerable, {
  initialize: function(start, end, exclusive) {
    this.start = start;
    this.end = end;
    this.exclusive = exclusive;
  },

  _each: function(iterator) {
    var value = this.start;
    while (this.include(value)) {
      iterator(value);
      value = value.succ();
    }
  },

  include: function(value) {
    if (value < this.start)
      return false;
    if (this.exclusive)
      return value < this.end;
    return value <= this.end;
  }
});

var $R = function(start, end, exclusive) {
  return new ObjectRange(start, end, exclusive);
};

var Ajax = {
  getTransport: function() {
    return Try.these(
      function() {return new XMLHttpRequest()},
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
    ) || false;
  },

  activeRequestCount: 0
};

Ajax.Responders = {
  responders: [],

  _each: function(iterator) {
    this.responders._each(iterator);
  },

  register: function(responder) {
    if (!this.include(responder))
      this.responders.push(responder);
  },

  unregister: function(responder) {
    this.responders = this.responders.without(responder);
  },

  dispatch: function(callback, request, transport, json) {
    this.each(function(responder) {
      if (Object.isFunction(responder[callback])) {
        try {
          responder[callback].apply(responder, [request, transport, json]);
        } catch (e) { }
      }
    });
  }
};

Object.extend(Ajax.Responders, Enumerable);

Ajax.Responders.register({
  onCreate:   function() { Ajax.activeRequestCount++ },
  onComplete: function() { Ajax.activeRequestCount-- }
});

Ajax.Base = Class.create({
  initialize: function(options) {
    this.options = {
      method:       'post',
      asynchronous: true,
      contentType:  'application/x-www-form-urlencoded',
      encoding:     'UTF-8',
      parameters:   '',
      evalJSON:     true,
      evalJS:       true
    };
    Object.extend(this.options, options || { });

    this.options.method = this.options.method.toLowerCase();

    if (Object.isString(this.options.parameters))
      this.options.parameters = this.options.parameters.toQueryParams();
    else if (Object.isHash(this.options.parameters))
      this.options.parameters = this.options.parameters.toObject();
  }
});

Ajax.Request = Class.create(Ajax.Base, {
  _complete: false,

  initialize: function($super, url, options) {
    $super(options);
    this.transport = Ajax.getTransport();
    this.request(url);
  },

  request: function(url) {
    this.url = url;
    this.method = this.options.method;
    var params = Object.clone(this.options.parameters);

    if (!['get', 'post'].include(this.method)) {
      // simulate other verbs over post
      params['_method'] = this.method;
      this.method = 'post';
    }

    this.parameters = params;

    if (params = Object.toQueryString(params)) {
      // when GET, append parameters to URL
      if (this.method == 'get')
        this.url += (this.url.include('?') ? '&' : '?') + params;
      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
        params += '&_=';
    }

    try {
      var response = new Ajax.Response(this);
      if (this.options.onCreate) this.options.onCreate(response);
      Ajax.Responders.dispatch('onCreate', this, response);

      this.transport.open(this.method.toUpperCase(), this.url,
        this.options.asynchronous);

      if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);

      this.transport.onreadystatechange = this.onStateChange.bind(this);
      this.setRequestHeaders();

      this.body = this.method == 'post' ? (this.options.postBody || params) : null;
      this.transport.send(this.body);

      /* Force Firefox to handle ready state 4 for synchronous requests */
      if (!this.options.asynchronous && this.transport.overrideMimeType)
        this.onStateChange();

    }
    catch (e) {
      this.dispatchException(e);
    }
  },

  onStateChange: function() {
    var readyState = this.transport.readyState;
    if (readyState > 1 && !((readyState == 4) && this._complete))
      this.respondToReadyState(this.transport.readyState);
  },

  setRequestHeaders: function() {
    var headers = {
      'X-Requested-With': 'XMLHttpRequest',
      'X-Prototype-Version': Prototype.Version,
      'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
    };

    if (this.method == 'post') {
      headers['Content-type'] = this.options.contentType +
        (this.options.encoding ? '; charset=' + this.options.encoding : '');

      /* Force "Connection: close" for older Mozilla browsers to work
       * around a bug where XMLHttpRequest sends an incorrect
       * Content-length header. See Mozilla Bugzilla #246651.
       */
      if (this.transport.overrideMimeType &&
          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
            headers['Connection'] = 'close';
    }

    // user-defined headers
    if (typeof this.options.requestHeaders == 'object') {
      var extras = this.options.requestHeaders;

      if (Object.isFunction(extras.push))
        for (var i = 0, length = extras.length; i < length; i += 2)
          headers[extras[i]] = extras[i+1];
      else
        $H(extras).each(function(pair) { headers[pair.key] = pair.value });
    }

    for (var name in headers)
      this.transport.setRequestHeader(name, headers[name]);
  },

  success: function() {
    var status = this.getStatus();
    return !status || (status >= 200 && status < 300);
  },

  getStatus: function() {
    try {
      return this.transport.status || 0;
    } catch (e) { return 0 }
  },

  respondToReadyState: function(readyState) {
    var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);

    if (state == 'Complete') {
      try {
        this._complete = true;
        (this.options['on' + response.status]
         || this.options['on' + (this.success() ? 'Success' : 'Failure')]
         || Prototype.emptyFunction)(response, response.headerJSON);
      } catch (e) {
        this.dispatchException(e);
      }

      var contentType = response.getHeader('Content-type');
      if (this.options.evalJS == 'force'
          || (this.options.evalJS && this.isSameOrigin() && contentType
          && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
        this.evalResponse();
    }

    try {
      (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
      Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
    } catch (e) {
      this.dispatchException(e);
    }

    if (state == 'Complete') {
      // avoid memory leak in MSIE: clean up
      this.transport.onreadystatechange = Prototype.emptyFunction;
    }
  },

  isSameOrigin: function() {
    var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
    return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
      protocol: location.protocol,
      domain: document.domain,
      port: location.port ? ':' + location.port : ''
    }));
  },

  getHeader: function(name) {
    try {
      return this.transport.getResponseHeader(name) || null;
    } catch (e) { return null }
  },

  evalResponse: function() {
    try {
      return eval((this.transport.responseText || '').unfilterJSON());
    } catch (e) {
      this.dispatchException(e);
    }
  },

  dispatchException: function(exception) {
    (this.options.onException || Prototype.emptyFunction)(this, exception);
    Ajax.Responders.dispatch('onException', this, exception);
  }
});

Ajax.Request.Events =
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];

Ajax.Response = Class.create({
  initialize: function(request){
    this.request = request;
    var transport  = this.transport  = request.transport,
        readyState = this.readyState = transport.readyState;

    if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
      this.status       = this.getStatus();
      this.statusText   = this.getStatusText();
      this.responseText = String.interpret(transport.responseText);
      this.headerJSON   = this._getHeaderJSON();
    }

    if(readyState == 4) {
      var xml = transport.responseXML;
      this.responseXML  = Object.isUndefined(xml) ? null : xml;
      this.responseJSON = this._getResponseJSON();
    }
  },

  status:      0,
  statusText: '',

  getStatus: Ajax.Request.prototype.getStatus,

  getStatusText: function() {
    try {
      return this.transport.statusText || '';
    } catch (e) { return '' }
  },

  getHeader: Ajax.Request.prototype.getHeader,

  getAllHeaders: function() {
    try {
      return this.getAllResponseHeaders();
    } catch (e) { return null }
  },

  getResponseHeader: function(name) {
    return this.transport.getResponseHeader(name);
  },

  getAllResponseHeaders: function() {
    return this.transport.getAllResponseHeaders();
  },

  _getHeaderJSON: function() {
    var json = this.getHeader('X-JSON');
    if (!json) return null;
    json = decodeURIComponent(escape(json));
    try {
      return json.evalJSON(this.request.options.sanitizeJSON ||
        !this.request.isSameOrigin());
    } catch (e) {
      this.request.dispatchException(e);
    }
  },

  _getResponseJSON: function() {
    var options = this.request.options;
    if (!options.evalJSON || (options.evalJSON != 'force' &&
      !(this.getHeader('Content-type') || '').include('application/json')) ||
        this.responseText.blank())
          return null;
    try {
      return this.responseText.evalJSON(options.sanitizeJSON ||
        !this.request.isSameOrigin());
    } catch (e) {
      this.request.dispatchException(e);
    }
  }
});

Ajax.Updater = Class.create(Ajax.Request, {
  initialize: function($super, container, url, options) {
    this.container = {
      success: (container.success || container),
      failure: (container.failure || (container.success ? null : container))
    };

    options = Object.clone(options);
    var onComplete = options.onComplete;
    options.onComplete = (function(response, json) {
      this.updateContent(response.responseText);
      if (Object.isFunction(onComplete)) onComplete(response, json);
    }).bind(this);

    $super(url, options);
  },

  updateContent: function(responseText) {
    var receiver = this.container[this.success() ? 'success' : 'failure'],
        options = this.options;

    if (!options.evalScripts) responseText = responseText.stripScripts();

    if (receiver = $(receiver)) {
      if (options.insertion) {
        if (Object.isString(options.insertion)) {
          var insertion = { }; insertion[options.insertion] = responseText;
          receiver.insert(insertion);
        }
        else options.insertion(receiver, responseText);
      }
      else receiver.update(responseText);
    }
  }
});

Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
  initialize: function($super, container, url, options) {
    $super(options);
    this.onComplete = this.options.onComplete;

    this.frequency = (this.options.frequency || 2);
    this.decay = (this.options.decay || 1);

    this.updater = { };
    this.container = container;
    this.url = url;

    this.start();
  },

  start: function() {
    this.options.onComplete = this.updateComplete.bind(this);
    this.onTimerEvent();
  },

  stop: function() {
    this.updater.options.onComplete = undefined;
    clearTimeout(this.timer);
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
  },

  updateComplete: function(response) {
    if (this.options.decay) {
      this.decay = (response.responseText == this.lastText ?
        this.decay * this.options.decay : 1);

      this.lastText = response.responseText;
    }
    this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
  },

  onTimerEvent: function() {
    this.updater = new Ajax.Updater(this.container, this.url, this.options);
  }
});
function $(element) {
  if (arguments.length > 1) {
    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
      elements.push($(arguments[i]));
    return elements;
  }
  if (Object.isString(element))
    element = document.getElementById(element);
  return Element.extend(element);
}

if (Prototype.BrowserFeatures.XPath) {
  document._getElementsByXPath = function(expression, parentElement) {
    var results = [];
    var query = document.evaluate(expression, $(parentElement) || document,
      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    for (var i = 0, length = query.snapshotLength; i < length; i++)
      results.push(Element.extend(query.snapshotItem(i)));
    return results;
  };
}

/*--------------------------------------------------------------------------*/

if (!window.Node) var Node = { };

if (!Node.ELEMENT_NODE) {
  // DOM level 2 ECMAScript Language Binding
  Object.extend(Node, {
    ELEMENT_NODE: 1,
    ATTRIBUTE_NODE: 2,
    TEXT_NODE: 3,
    CDATA_SECTION_NODE: 4,
    ENTITY_REFERENCE_NODE: 5,
    ENTITY_NODE: 6,
    PROCESSING_INSTRUCTION_NODE: 7,
    COMMENT_NODE: 8,
    DOCUMENT_NODE: 9,
    DOCUMENT_TYPE_NODE: 10,
    DOCUMENT_FRAGMENT_NODE: 11,
    NOTATION_NODE: 12
  });
}

(function() {
  var element = this.Element;
  this.Element = function(tagName, attributes) {
    attributes = attributes || { };
    tagName = tagName.toLowerCase();
    var cache = Element.cache;
    if (Prototype.Browser.IE && attributes.name) {
      tagName = '<' + tagName + ' name="' + attributes.name + '">';
      delete attributes.name;
      return Element.writeAttribute(document.createElement(tagName), attributes);
    }
    if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
    return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
  };
  Object.extend(this.Element, element || { });
  if (element) this.Element.prototype = element.prototype;
}).call(window);

Element.cache = { };

Element.Methods = {
  visible: function(element) {
    return $(element).style.display != 'none';
  },

  toggle: function(element) {
    element = $(element);
    Element[Element.visible(element) ? 'hide' : 'show'](element);
    return element;
  },

  hide: function(element) {
    element = $(element);
    element.style.display = 'none';
    return element;
  },

  show: function(element) {
    element = $(element);
    element.style.display = '';
    return element;
  },

  remove: function(element) {
    element = $(element);
    element.parentNode.removeChild(element);
    return element;
  },

  update: function(element, content) {
    element = $(element);
    if (content && content.toElement) content = content.toElement();
    if (Object.isElement(content)) return element.update().insert(content);
    content = Object.toHTML(content);
    element.innerHTML = content.stripScripts();
    content.evalScripts.bind(content).defer();
    return element;
  },

  replace: function(element, content) {
    element = $(element);
    if (content && content.toElement) content = content.toElement();
    else if (!Object.isElement(content)) {
      content = Object.toHTML(content);
      var range = element.ownerDocument.createRange();
      range.selectNode(element);
      content.evalScripts.bind(content).defer();
      content = range.createContextualFragment(content.stripScripts());
    }
    element.parentNode.replaceChild(content, element);
    return element;
  },

  insert: function(element, insertions) {
    element = $(element);

    if (Object.isString(insertions) || Object.isNumber(insertions) ||
        Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
          insertions = {bottom:insertions};

    var content, insert, tagName, childNodes;

    for (var position in insertions) {
      content  = insertions[position];
      position = position.toLowerCase();
      insert = Element._insertionTranslations[position];

      if (content && content.toElement) content = content.toElement();
      if (Object.isElement(content)) {
        insert(element, content);
        continue;
      }

      content = Object.toHTML(content);

      tagName = ((position == 'before' || position == 'after')
        ? element.parentNode : element).tagName.toUpperCase();

      childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());

      if (position == 'top' || position == 'after') childNodes.reverse();
      childNodes.each(insert.curry(element));

      content.evalScripts.bind(content).defer();
    }

    return element;
  },

  wrap: function(element, wrapper, attributes) {
    element = $(element);
    if (Object.isElement(wrapper))
      $(wrapper).writeAttribute(attributes || { });
    else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
    else wrapper = new Element('div', wrapper);
    if (element.parentNode)
      element.parentNode.replaceChild(wrapper, element);
    wrapper.appendChild(element);
    return wrapper;
  },

  inspect: function(element) {
    element = $(element);
    var result = '<' + element.tagName.toLowerCase();
    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
      var property = pair.first(), attribute = pair.last();
      var value = (element[property] || '').toString();
      if (value) result += ' ' + attribute + '=' + value.inspect(true);
    });
    return result + '>';
  },

  recursivelyCollect: function(element, property) {
    element = $(element);
    var elements = [];
    while (element = element[property])
      if (element.nodeType == 1)
        elements.push(Element.extend(element));
    return elements;
  },

  ancestors: function(element) {
    return $(element).recursivelyCollect('parentNode');
  },

  descendants: function(element) {
    return $(element).select("*");
  },

  firstDescendant: function(element) {
    element = $(element).firstChild;
    while (element && element.nodeType != 1) element = element.nextSibling;
    return $(element);
  },

  immediateDescendants: function(element) {
    if (!(element = $(element).firstChild)) return [];
    while (element && element.nodeType != 1) element = element.nextSibling;
    if (element) return [element].concat($(element).nextSiblings());
    return [];
  },

  previousSiblings: function(element) {
    return $(element).recursivelyCollect('previousSibling');
  },

  nextSiblings: function(element) {
    return $(element).recursivelyCollect('nextSibling');
  },

  siblings: function(element) {
    element = $(element);
    return element.previousSiblings().reverse().concat(element.nextSiblings());
  },

  match: function(element, selector) {
    if (Object.isString(selector))
      selector = new Selector(selector);
    return selector.match($(element));
  },

  up: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return $(element.parentNode);
    var ancestors = element.ancestors();
    return Object.isNumber(expression) ? ancestors[expression] :
      Selector.findElement(ancestors, expression, index);
  },

  down: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return element.firstDescendant();
    return Object.isNumber(expression) ? element.descendants()[expression] :
      Element.select(element, expression)[index || 0];
  },

  previous: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
    var previousSiblings = element.previousSiblings();
    return Object.isNumber(expression) ? previousSiblings[expression] :
      Selector.findElement(previousSiblings, expression, index);
  },

  next: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
    var nextSiblings = element.nextSiblings();
    return Object.isNumber(expression) ? nextSiblings[expression] :
      Selector.findElement(nextSiblings, expression, index);
  },

  select: function() {
    var args = $A(arguments), element = $(args.shift());
    return Selector.findChildElements(element, args);
  },

  adjacent: function() {
    var args = $A(arguments), element = $(args.shift());
    return Selector.findChildElements(element.parentNode, args).without(element);
  },

  identify: function(element) {
    element = $(element);
    var id = element.readAttribute('id'), self = arguments.callee;
    if (id) return id;
    do { id = 'anonymous_element_' + self.counter++ } while ($(id));
    element.writeAttribute('id', id);
    return id;
  },

  readAttribute: function(element, name) {
    element = $(element);
    if (Prototype.Browser.IE) {
      var t = Element._attributeTranslations.read;
      if (t.values[name]) return t.values[name](element, name);
      if (t.names[name]) name = t.names[name];
      if (name.include(':')) {
        return (!element.attributes || !element.attributes[name]) ? null :
         element.attributes[name].value;
      }
    }
    return element.getAttribute(name);
  },

  writeAttribute: function(element, name, value) {
    element = $(element);
    var attributes = { }, t = Element._attributeTranslations.write;

    if (typeof name == 'object') attributes = name;
    else attributes[name] = Object.isUndefined(value) ? true : value;

    for (var attr in attributes) {
      name = t.names[attr] || attr;
      value = attributes[attr];
      if (t.values[attr]) name = t.values[attr](element, value);
      if (value === false || value === null)
        element.removeAttribute(name);
      else if (value === true)
        element.setAttribute(name, name);
      else element.setAttribute(name, value);
    }
    return element;
  },

  getHeight: function(element) {
    return $(element).getDimensions().height;
  },

  getWidth: function(element) {
    return $(element).getDimensions().width;
  },

  classNames: function(element) {
    return new Element.ClassNames(element);
  },

  hasClassName: function(element, className) {
    if (!(element = $(element))) return;
    var elementClassName = element.className;
    return (elementClassName.length > 0 && (elementClassName == className ||
      new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
  },

  addClassName: function(element, className) {
    if (!(element = $(element))) return;
    if (!element.hasClassName(className))
      element.className += (element.className ? ' ' : '') + className;
    return element;
  },

  removeClassName: function(element, className) {
    if (!(element = $(element))) return;
    element.className = element.className.replace(
      new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
    return element;
  },

  toggleClassName: function(element, className) {
    if (!(element = $(element))) return;
    return element[element.hasClassName(className) ?
      'removeClassName' : 'addClassName'](className);
  },

  // removes whitespace-only text node children
  cleanWhitespace: function(element) {
    element = $(element);
    var node = element.firstChild;
    while (node) {
      var nextNode = node.nextSibling;
      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
        element.removeChild(node);
      node = nextNode;
    }
    return element;
  },

  empty: function(element) {
    return $(element).innerHTML.blank();
  },

  descendantOf: function(element, ancestor) {
    element = $(element), ancestor = $(ancestor);

    if (element.compareDocumentPosition)
      return (element.compareDocumentPosition(ancestor) & 8) === 8;

    if (ancestor.contains)
      return ancestor.contains(element) && ancestor !== element;

    while (element = element.parentNode)
      if (element == ancestor) return true;

    return false;
  },

  scrollTo: function(element) {
    element = $(element);
    var pos = element.cumulativeOffset();
    window.scrollTo(pos[0], pos[1]);
    return element;
  },

  getStyle: function(element, style) {
    element = $(element);
    style = style == 'float' ? 'cssFloat' : style.camelize();
    var value = element.style[style];
    if (!value || value == 'auto') {
      var css = document.defaultView.getComputedStyle(element, null);
      value = css ? css[style] : null;
    }
    if (style == 'opacity') return value ? parseFloat(value) : 1.0;
    return value == 'auto' ? null : value;
  },

  getOpacity: function(element) {
    return $(element).getStyle('opacity');
  },

  setStyle: function(element, styles) {
    element = $(element);
    var elementStyle = element.style, match;
    if (Object.isString(styles)) {
      element.style.cssText += ';' + styles;
      return styles.include('opacity') ?
        element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
    }
    for (var property in styles)
      if (property == 'opacity') element.setOpacity(styles[property]);
      else
        elementStyle[(property == 'float' || property == 'cssFloat') ?
          (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :
            property] = styles[property];

    return element;
  },

  setOpacity: function(element, value) {
    element = $(element);
    element.style.opacity = (value == 1 || value === '') ? '' :
      (value < 0.00001) ? 0 : value;
    return element;
  },

  getDimensions: function(element) {
    element = $(element);
    var display = element.getStyle('display');
    if (display != 'none' && display != null) // Safari bug
      return {width: element.offsetWidth, height: element.offsetHeight};

    // All *Width and *Height properties give 0 on elements with display none,
    // so enable the element temporarily
    var els = element.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    var originalDisplay = els.display;
    els.visibility = 'hidden';
    els.position = 'absolute';
    els.display = 'block';
    var originalWidth = element.clientWidth;
    var originalHeight = element.clientHeight;
    els.display = originalDisplay;
    els.position = originalPosition;
    els.visibility = originalVisibility;
    return {width: originalWidth, height: originalHeight};
  },

  makePositioned: function(element) {
    element = $(element);
    var pos = Element.getStyle(element, 'position');
    if (pos == 'static' || !pos) {
      element._madePositioned = true;
      element.style.position = 'relative';
      // Opera returns the offset relative to the positioning context, when an
      // element is position relative but top and left have not been defined
      if (Prototype.Browser.Opera) {
        element.style.top = 0;
        element.style.left = 0;
      }
    }
    return element;
  },

  undoPositioned: function(element) {
    element = $(element);
    if (element._madePositioned) {
      element._madePositioned = undefined;
      element.style.position =
        element.style.top =
        element.style.left =
        element.style.bottom =
        element.style.right = '';
    }
    return element;
  },

  makeClipping: function(element) {
    element = $(element);
    if (element._overflow) return element;
    element._overflow = Element.getStyle(element, 'overflow') || 'auto';
    if (element._overflow !== 'hidden')
      element.style.overflow = 'hidden';
    return element;
  },

  undoClipping: function(element) {
    element = $(element);
    if (!element._overflow) return element;
    element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
    element._overflow = null;
    return element;
  },

  cumulativeOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
    } while (element);
    return Element._returnOffset(valueL, valueT);
  },

  positionedOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
      if (element) {
        if (element.tagName.toUpperCase() == 'BODY') break;
        var p = Element.getStyle(element, 'position');
        if (p !== 'static') break;
      }
    } while (element);
    return Element._returnOffset(valueL, valueT);
  },

  absolutize: function(element) {
    element = $(element);
    if (element.getStyle('position') == 'absolute') return element;
    // Position.prepare(); // To be done manually by Scripty when it needs it.

    var offsets = element.positionedOffset();
    var top     = offsets[1];
    var left    = offsets[0];
    var width   = element.clientWidth;
    var height  = element.clientHeight;

    element._originalLeft   = left - parseFloat(element.style.left  || 0);
    element._originalTop    = top  - parseFloat(element.style.top || 0);
    element._originalWidth  = element.style.width;
    element._originalHeight = element.style.height;

    element.style.position = 'absolute';
    element.style.top    = top + 'px';
    element.style.left   = left + 'px';
    element.style.width  = width + 'px';
    element.style.height = height + 'px';
    return element;
  },

  relativize: function(element) {
    element = $(element);
    if (element.getStyle('position') == 'relative') return element;
    // Position.prepare(); // To be done manually by Scripty when it needs it.

    element.style.position = 'relative';
    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);

    element.style.top    = top + 'px';
    element.style.left   = left + 'px';
    element.style.height = element._originalHeight;
    element.style.width  = element._originalWidth;
    return element;
  },

  cumulativeScrollOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.scrollTop  || 0;
      valueL += element.scrollLeft || 0;
      element = element.parentNode;
    } while (element);
    return Element._returnOffset(valueL, valueT);
  },

  getOffsetParent: function(element) {
    if (element.offsetParent) return $(element.offsetParent);
    if (element == document.body) return $(element);
    if(element.tagName.toUpperCase()=='HTML') //for IE6,7
        return $(document.body);                //

    while ((element = element.parentNode) && element != document.body)
      if (Element.getStyle(element, 'position') != 'static')
        return $(element);

    return $(document.body);
  },

  viewportOffset: function(forElement) {
    var valueT = 0, valueL = 0;

    var element = forElement;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;

      // Safari fix
      if (element.offsetParent == document.body &&
        Element.getStyle(element, 'position') == 'absolute') break;

    } while (element = element.offsetParent);

    element = forElement;
    do {
      if (!Prototype.Browser.Opera || (element.tagName && (element.tagName.toUpperCase() == 'BODY'))) {
        valueT -= element.scrollTop  || 0;
        valueL -= element.scrollLeft || 0;
      }
    } while (element = element.parentNode);

    return Element._returnOffset(valueL, valueT);
  },

  clonePosition: function(element, source) {
    var options = Object.extend({
      setLeft:    true,
      setTop:     true,
      setWidth:   true,
      setHeight:  true,
      offsetTop:  0,
      offsetLeft: 0
    }, arguments[2] || { });

    // find page position of source
    source = $(source);
    var p = source.viewportOffset();

    // find coordinate system to use
    element = $(element);
    var delta = [0, 0];
    var parent = null;
    // delta [0,0] will do fine with position: fixed elements,
    // position:absolute needs offsetParent deltas
    if (Element.getStyle(element, 'position') == 'absolute') {
      parent = element.getOffsetParent();
      delta = parent.viewportOffset();
    }

    // correct by body offsets (fixes Safari)
    if (parent == document.body) {
      delta[0] -= document.body.offsetLeft;
      delta[1] -= document.body.offsetTop;
    }

    // set position
    if (options.setLeft)   element.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
    if (options.setTop)    element.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
    if (options.setWidth)  element.style.width = source.offsetWidth + 'px';
    if (options.setHeight) element.style.height = source.offsetHeight + 'px';
    return element;
  }
};

Element.Methods.identify.counter = 1;

Object.extend(Element.Methods, {
  getElementsBySelector: Element.Methods.select,
  childElements: Element.Methods.immediateDescendants
});

Element._attributeTranslations = {
  write: {
    names: {
      className: 'class',
      htmlFor:   'for'
    },
    values: { }
  }
};

if (Prototype.Browser.Opera) {
  Element.Methods.getStyle = Element.Methods.getStyle.wrap(
    function(proceed, element, style) {
      switch (style) {
        case 'left': case 'top': case 'right': case 'bottom':
          if (proceed(element, 'position') === 'static') return null;
        case 'height': case 'width':
          // returns '0px' for hidden elements; we want it to return null
          if (!Element.visible(element)) return null;

          // returns the border-box dimensions rather than the content-box
          // dimensions, so we subtract padding and borders from the value
          var dim = parseInt(proceed(element, style), 10);

          if (dim !== element['offset' + style.capitalize()])
            return dim + 'px';

          var properties;
          if (style === 'height') {
            properties = ['border-top-width', 'padding-top',
             'padding-bottom', 'border-bottom-width'];
          }
          else {
            properties = ['border-left-width', 'padding-left',
             'padding-right', 'border-right-width'];
          }
          return properties.inject(dim, function(memo, property) {
            var val = proceed(element, property);
            return val === null ? memo : memo - parseInt(val, 10);
          }) + 'px';
        default: return proceed(element, style);
      }
    }
  );

  Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(
    function(proceed, element, attribute) {
      if (attribute === 'title') return element.title;
      return proceed(element, attribute);
    }
  );
}

else if (Prototype.Browser.IE) {
  // IE doesn't report offsets correctly for static elements, so we change them
  // to "relative" to get the values, then change them back.
  Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
    function(proceed, element) {
      element = $(element);
      // IE throws an error if element is not in document
      try { element.offsetParent }
      catch(e) { return $(document.body) }
      var position = element.getStyle('position');
      if (position !== 'static') return proceed(element);
      element.setStyle({ position: 'relative' });
      var value = proceed(element);
      element.setStyle({ position: position });
      return value;
    }
  );

  $w('positionedOffset viewportOffset').each(function(method) {
    Element.Methods[method] = Element.Methods[method].wrap(
      function(proceed, element) {
        element = $(element);
        try { element.offsetParent }
        catch(e) { return Element._returnOffset(0,0) }
        var position = element.getStyle('position');
        if (position !== 'static') return proceed(element);
        // Trigger hasLayout on the offset parent so that IE6 reports
        // accurate offsetTop and offsetLeft values for position: fixed.
        var offsetParent = element.getOffsetParent();
        if (offsetParent && offsetParent.getStyle('position') === 'fixed')
          offsetParent.setStyle({ zoom: 1 });
        element.setStyle({ position: 'relative' });
        var value = proceed(element);
        element.setStyle({ position: position });
        return value;
      }
    );
  });

  Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap(
    function(proceed, element) {
      try { element.offsetParent }
      catch(e) { return Element._returnOffset(0,0) }
      return proceed(element);
    }
  );

  Element.Methods.getStyle = function(element, style) {
    element = $(element);
    style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
    var value = element.style[style];
    if (!value && element.currentStyle) value = element.currentStyle[style];

    if (style == 'opacity') {
      if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
        if (value[1]) return parseFloat(value[1]) / 100;
      return 1.0;
    }

    if (value == 'auto') {
      if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
        return element['offset' + style.capitalize()] + 'px';
      return null;
    }
    return value;
  };

  Element.Methods.setOpacity = function(element, value) {
    function stripAlpha(filter){
      return filter.replace(/alpha\([^\)]*\)/gi,'');
    }
    element = $(element);
    var currentStyle = element.currentStyle;
    if ((currentStyle && !currentStyle.hasLayout) ||
      (!currentStyle && element.style.zoom == 'normal'))
        element.style.zoom = 1;

    var filter = element.getStyle('filter'), style = element.style;
    if (value == 1 || value === '') {
      (filter = stripAlpha(filter)) ?
        style.filter = filter : style.removeAttribute('filter');
      return element;
    } else if (value < 0.00001) value = 0;
    style.filter = stripAlpha(filter) +
      'alpha(opacity=' + (value * 100) + ')';
    return element;
  };

  Element._attributeTranslations = {
    read: {
      names: {
        'class': 'className',
        'for':   'htmlFor'
      },
      values: {
        _getAttr: function(element, attribute) {
          return element.getAttribute(attribute, 2);
        },
        _getAttrNode: function(element, attribute) {
          var node = element.getAttributeNode(attribute);
          return node ? node.value : "";
        },
        _getEv: function(element, attribute) {
          attribute = element.getAttribute(attribute);
          return attribute ? attribute.toString().slice(23, -2) : null;
        },
        _flag: function(element, attribute) {
          return $(element).hasAttribute(attribute) ? attribute : null;
        },
        style: function(element) {
          return element.style.cssText.toLowerCase();
        },
        title: function(element) {
          return element.title;
        }
      }
    }
  };

  Element._attributeTranslations.write = {
    names: Object.extend({
      cellpadding: 'cellPadding',
      cellspacing: 'cellSpacing'
    }, Element._attributeTranslations.read.names),
    values: {
      checked: function(element, value) {
        element.checked = !!value;
      },

      style: function(element, value) {
        element.style.cssText = value ? value : '';
      }
    }
  };

  Element._attributeTranslations.has = {};

  $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
      'encType maxLength readOnly longDesc frameBorder').each(function(attr) {
    Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
    Element._attributeTranslations.has[attr.toLowerCase()] = attr;
  });

  (function(v) {
    Object.extend(v, {
      href:        v._getAttr,
      src:         v._getAttr,
      type:        v._getAttr,
      action:      v._getAttrNode,
      disabled:    v._flag,
      checked:     v._flag,
      readonly:    v._flag,
      multiple:    v._flag,
      onload:      v._getEv,
      onunload:    v._getEv,
      onclick:     v._getEv,
      ondblclick:  v._getEv,
      onmousedown: v._getEv,
      onmouseup:   v._getEv,
      onmouseover: v._getEv,
      onmousemove: v._getEv,
      onmouseout:  v._getEv,
      onfocus:     v._getEv,
      onblur:      v._getEv,
      onkeypress:  v._getEv,
      onkeydown:   v._getEv,
      onkeyup:     v._getEv,
      onsubmit:    v._getEv,
      onreset:     v._getEv,
      onselect:    v._getEv,
      onchange:    v._getEv
    });
  })(Element._attributeTranslations.read.values);
}

else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
  Element.Methods.setOpacity = function(element, value) {
    element = $(element);
    element.style.opacity = (value == 1) ? 0.999999 :
      (value === '') ? '' : (value < 0.00001) ? 0 : value;
    return element;
  };
}

else if (Prototype.Browser.WebKit) {
  Element.Methods.setOpacity = function(element, value) {
    element = $(element);
    element.style.opacity = (value == 1 || value === '') ? '' :
      (value < 0.00001) ? 0 : value;

    if (value == 1)
      if(element.tagName.toUpperCase() == 'IMG' && element.width) {
        element.width++; element.width--;
      } else try {
        var n = document.createTextNode(' ');
        element.appendChild(n);
        element.removeChild(n);
      } catch (e) { }

    return element;
  };

  // Safari returns margins on body which is incorrect if the child is absolutely
  // positioned.  For performance reasons, redefine Element#cumulativeOffset for
  // KHTML/WebKit only.
  Element.Methods.cumulativeOffset = function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      if (element.offsetParent == document.body)
        if (Element.getStyle(element, 'position') == 'absolute') break;

      element = element.offsetParent;
    } while (element);

    return Element._returnOffset(valueL, valueT);
  };
}

if (Prototype.Browser.IE || Prototype.Browser.Opera) {
  // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
  Element.Methods.update = function(element, content) {
    element = $(element);

    if (content && content.toElement) content = content.toElement();
    if (Object.isElement(content)) return element.update().insert(content);

    content = Object.toHTML(content);
    var tagName = element.tagName.toUpperCase();

    if (tagName in Element._insertionTranslations.tags) {
      $A(element.childNodes).each(function(node) { element.removeChild(node) });
      Element._getContentFromAnonymousElement(tagName, content.stripScripts())
        .each(function(node) { element.appendChild(node) });
    }
    else element.innerHTML = content.stripScripts();

    content.evalScripts.bind(content).defer();
    return element;
  };
}

if ('outerHTML' in document.createElement('div')) {
  Element.Methods.replace = function(element, content) {
    element = $(element);

    if (content && content.toElement) content = content.toElement();
    if (Object.isElement(content)) {
      element.parentNode.replaceChild(content, element);
      return element;
    }

    content = Object.toHTML(content);
    var parent = element.parentNode, tagName = parent.tagName.toUpperCase();

    if (Element._insertionTranslations.tags[tagName]) {
      var nextSibling = element.next();
      var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
      parent.removeChild(element);
      if (nextSibling)
        fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
      else
        fragments.each(function(node) { parent.appendChild(node) });
    }
    else element.outerHTML = content.stripScripts();

    content.evalScripts.bind(content).defer();
    return element;
  };
}

Element._returnOffset = function(l, t) {
  var result = [l, t];
  result.left = l;
  result.top = t;
  return result;
};

Element._getContentFromAnonymousElement = function(tagName, html) {
  var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
  if (t) {
    div.innerHTML = t[0] + html + t[1];
    t[2].times(function() { div = div.firstChild });
  } else div.innerHTML = html;
  return $A(div.childNodes);
};

Element._insertionTranslations = {
  before: function(element, node) {
    element.parentNode.insertBefore(node, element);
  },
  top: function(element, node) {
    element.insertBefore(node, element.firstChild);
  },
  bottom: function(element, node) {
    element.appendChild(node);
  },
  after: function(element, node) {
    element.parentNode.insertBefore(node, element.nextSibling);
  },
  tags: {
    TABLE:  ['<table>',                '</table>',                   1],
    TBODY:  ['<table><tbody>',         '</tbody></table>',           2],
    TR:     ['<table><tbody><tr>',     '</tr></tbody></table>',      3],
    TD:     ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
    SELECT: ['<select>',               '</select>',                  1]
  }
};

(function() {
  Object.extend(this.tags, {
    THEAD: this.tags.TBODY,
    TFOOT: this.tags.TBODY,
    TH:    this.tags.TD
  });
}).call(Element._insertionTranslations);

Element.Methods.Simulated = {
  hasAttribute: function(element, attribute) {
    attribute = Element._attributeTranslations.has[attribute] || attribute;
    var node = $(element).getAttributeNode(attribute);
    return !!(node && node.specified);
  }
};

Element.Methods.ByTag = { };

Object.extend(Element, Element.Methods);

if (!Prototype.BrowserFeatures.ElementExtensions &&
    document.createElement('div')['__proto__']) {
  window.HTMLElement = { };
  window.HTMLElement.prototype = document.createElement('div')['__proto__'];
  Prototype.BrowserFeatures.ElementExtensions = true;
}

Element.extend = (function() {
  if (Prototype.BrowserFeatures.SpecificElementExtensions)
    return Prototype.K;

  var Methods = { }, ByTag = Element.Methods.ByTag;

  var extend = Object.extend(function(element) {
    if (!element || element._extendedByPrototype ||
        element.nodeType != 1 || element == window) return element;

    var methods = Object.clone(Methods),
      tagName = element.tagName.toUpperCase(), property, value;

    // extend methods for specific tags
    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);

    for (property in methods) {
      value = methods[property];
      if (Object.isFunction(value) && !(property in element))
        element[property] = value.methodize();
    }

    element._extendedByPrototype = Prototype.emptyFunction;
    return element;

  }, {
    refresh: function() {
      // extend methods for all tags (Safari doesn't need this)
      if (!Prototype.BrowserFeatures.ElementExtensions) {
        Object.extend(Methods, Element.Methods);
        Object.extend(Methods, Element.Methods.Simulated);
      }
    }
  });

  extend.refresh();
  return extend;
})();

Element.hasAttribute = function(element, attribute) {
  if (element.hasAttribute) return element.hasAttribute(attribute);
  return Element.Methods.Simulated.hasAttribute(element, attribute);
};

Element.addMethods = function(methods) {
  var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;

  if (!methods) {
    Object.extend(Form, Form.Methods);
    Object.extend(Form.Element, Form.Element.Methods);
    Object.extend(Element.Methods.ByTag, {
      "FORM":     Object.clone(Form.Methods),
      "INPUT":    Object.clone(Form.Element.Methods),
      "SELECT":   Object.clone(Form.Element.Methods),
      "TEXTAREA": Object.clone(Form.Element.Methods)
    });
  }

  if (arguments.length == 2) {
    var tagName = methods;
    methods = arguments[1];
  }

  if (!tagName) Object.extend(Element.Methods, methods || { });
  else {
    if (Object.isArray(tagName)) tagName.each(extend);
    else extend(tagName);
  }

  function extend(tagName) {
    tagName = tagName.toUpperCase();
    if (!Element.Methods.ByTag[tagName])
      Element.Methods.ByTag[tagName] = { };
    Object.extend(Element.Methods.ByTag[tagName], methods);
  }

  function copy(methods, destination, onlyIfAbsent) {
    onlyIfAbsent = onlyIfAbsent || false;
    for (var property in methods) {
      var value = methods[property];
      if (!Object.isFunction(value)) continue;
      if (!onlyIfAbsent || !(property in destination))
        destination[property] = value.methodize();
    }
  }

  function findDOMClass(tagName) {
    var klass;
    var trans = {
      "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
      "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
      "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
      "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
      "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
      "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
      "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
      "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
      "FrameSet", "IFRAME": "IFrame"
    };
    if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
    if (window[klass]) return window[klass];
    klass = 'HTML' + tagName + 'Element';
    if (window[klass]) return window[klass];
    klass = 'HTML' + tagName.capitalize() + 'Element';
    if (window[klass]) return window[klass];

    window[klass] = { };
    window[klass].prototype = document.createElement(tagName)['__proto__'];
    return window[klass];
  }

  if (F.ElementExtensions) {
    copy(Element.Methods, HTMLElement.prototype);
    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
  }

  if (F.SpecificElementExtensions) {
    for (var tag in Element.Methods.ByTag) {
      var klass = findDOMClass(tag);
      if (Object.isUndefined(klass)) continue;
      copy(T[tag], klass.prototype);
    }
  }

  Object.extend(Element, Element.Methods);
  delete Element.ByTag;

  if (Element.extend.refresh) Element.extend.refresh();
  Element.cache = { };
};

document.viewport = {
  getDimensions: function() {
    var dimensions = { }, B = Prototype.Browser;
    $w('width height').each(function(d) {
      var D = d.capitalize();
      if (B.WebKit && !document.evaluate) {
        // Safari <3.0 needs self.innerWidth/Height
        dimensions[d] = self['inner' + D];
      } else if (B.Opera && parseFloat(window.opera.version()) < 9.5) {
        // Opera <9.5 needs document.body.clientWidth/Height
        dimensions[d] = document.body['client' + D]
      } else {
        dimensions[d] = document.documentElement['client' + D];
      }
    });
    return dimensions;
  },

  getWidth: function() {
    return this.getDimensions().width;
  },

  getHeight: function() {
    return this.getDimensions().height;
  },

  getScrollOffsets: function() {
    return Element._returnOffset(
      window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
      window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
  }
};
/* Portions of the Selector class are derived from Jack Slocum's DomQuery,
 * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
 * license.  Please see http://www.yui-ext.com/ for more information. */

var Selector = Class.create({
  initialize: function(expression) {
    this.expression = expression.strip();

    if (this.shouldUseSelectorsAPI()) {
      this.mode = 'selectorsAPI';
    } else if (this.shouldUseXPath()) {
      this.mode = 'xpath';
      this.compileXPathMatcher();
    } else {
      this.mode = "normal";
      this.compileMatcher();
    }

  },

  shouldUseXPath: function() {
    if (!Prototype.BrowserFeatures.XPath) return false;

    var e = this.expression;

    // Safari 3 chokes on :*-of-type and :empty
    if (Prototype.Browser.WebKit &&
     (e.include("-of-type") || e.include(":empty")))
      return false;

    // XPath can't do namespaced attributes, nor can it read
    // the "checked" property from DOM nodes
    if ((/(\[[\w-]*?:|:checked)/).test(e))
      return false;

    return true;
  },

  shouldUseSelectorsAPI: function() {
    if (!Prototype.BrowserFeatures.SelectorsAPI) return false;

    if (!Selector._div) Selector._div = new Element('div');

    // Make sure the browser treats the selector as valid. Test on an
    // isolated element to minimize cost of this check.
    try {
      Selector._div.querySelector(this.expression);
    } catch(e) {
      return false;
    }

    return true;
  },

  compileMatcher: function() {
    var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
        c = Selector.criteria, le, p, m;

    if (Selector._cache[e]) {
      this.matcher = Selector._cache[e];
      return;
    }

    this.matcher = ["this.matcher = function(root) {",
                    "var r = root, h = Selector.handlers, c = false, n;"];

    while (e && le != e && (/\S/).test(e)) {
      le = e;
      for (var i in ps) {
        p = ps[i];
        if (m = e.match(p)) {
          this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
            new Template(c[i]).evaluate(m));
          e = e.replace(m[0], '');
          break;
        }
      }
    }

    this.matcher.push("return h.unique(n);\n}");
    eval(this.matcher.join('\n'));
    Selector._cache[this.expression] = this.matcher;
  },

  compileXPathMatcher: function() {
    var e = this.expression, ps = Selector.patterns,
        x = Selector.xpath, le, m;

    if (Selector._cache[e]) {
      this.xpath = Selector._cache[e]; return;
    }

    this.matcher = ['.//*'];
    while (e && le != e && (/\S/).test(e)) {
      le = e;
      for (var i in ps) {
        if (m = e.match(ps[i])) {
          this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
            new Template(x[i]).evaluate(m));
          e = e.replace(m[0], '');
          break;
        }
      }
    }

    this.xpath = this.matcher.join('');
    Selector._cache[this.expression] = this.xpath;
  },

  findElements: function(root) {
    root = root || document;
    var e = this.expression, results;

    switch (this.mode) {
      case 'selectorsAPI':
        // querySelectorAll queries document-wide, then filters to descendants
        // of the context element. That's not what we want.
        // Add an explicit context to the selector if necessary.
        if (root !== document) {
          var oldId = root.id, id = $(root).identify();
          e = "#" + id + " " + e;
        }

        results = $A(root.querySelectorAll(e)).map(Element.extend);
        root.id = oldId;

        return results;
      case 'xpath':
        return document._getElementsByXPath(this.xpath, root);
      default:
       return this.matcher(root);
    }
  },

  match: function(element) {
    this.tokens = [];

    var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
    var le, p, m;

    while (e && le !== e && (/\S/).test(e)) {
      le = e;
      for (var i in ps) {
        p = ps[i];
        if (m = e.match(p)) {
          // use the Selector.assertions methods unless the selector
          // is too complex.
          if (as[i]) {
            this.tokens.push([i, Object.clone(m)]);
            e = e.replace(m[0], '');
          } else {
            // reluctantly do a document-wide search
            // and look for a match in the array
            return this.findElements(document).include(element);
          }
        }
      }
    }

    var match = true, name, matches;
    for (var i = 0, token; token = this.tokens[i]; i++) {
      name = token[0], matches = token[1];
      if (!Selector.assertions[name](element, matches)) {
        match = false; break;
      }
    }

    return match;
  },

  toString: function() {
    return this.expression;
  },

  inspect: function() {
    return "#<Selector:" + this.expression.inspect() + ">";
  }
});

Object.extend(Selector, {
  _cache: { },

  xpath: {
    descendant:   "//*",
    child:        "/*",
    adjacent:     "/following-sibling::*[1]",
    laterSibling: '/following-sibling::*',
    tagName:      function(m) {
      if (m[1] == '*') return '';
      return "[local-name()='" + m[1].toLowerCase() +
             "' or local-name()='" + m[1].toUpperCase() + "']";
    },
    className:    "[contains(concat(' ', @class, ' '), ' #{1} ')]",
    id:           "[@id='#{1}']",
    attrPresence: function(m) {
      m[1] = m[1].toLowerCase();
      return new Template("[@#{1}]").evaluate(m);
    },
    attr: function(m) {
      m[1] = m[1].toLowerCase();
      m[3] = m[5] || m[6];
      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
    },
    pseudo: function(m) {
      var h = Selector.xpath.pseudos[m[1]];
      if (!h) return '';
      if (Object.isFunction(h)) return h(m);
      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
    },
    operators: {
      '=':  "[@#{1}='#{3}']",
      '!=': "[@#{1}!='#{3}']",
      '^=': "[starts-with(@#{1}, '#{3}')]",
      '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
      '*=': "[contains(@#{1}, '#{3}')]",
      '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
      '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
    },
    pseudos: {
      'first-child': '[not(preceding-sibling::*)]',
      'last-child':  '[not(following-sibling::*)]',
      'only-child':  '[not(preceding-sibling::* or following-sibling::*)]',
      'empty':       "[count(*) = 0 and (count(text()) = 0)]",
      'checked':     "[@checked]",
      'disabled':    "[(@disabled) and (@type!='hidden')]",
      'enabled':     "[not(@disabled) and (@type!='hidden')]",
      'not': function(m) {
        var e = m[6], p = Selector.patterns,
            x = Selector.xpath, le, v;

        var exclusion = [];
        while (e && le != e && (/\S/).test(e)) {
          le = e;
          for (var i in p) {
            if (m = e.match(p[i])) {
              v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
              exclusion.push("(" + v.substring(1, v.length - 1) + ")");
              e = e.replace(m[0], '');
              break;
            }
          }
        }
        return "[not(" + exclusion.join(" and ") + ")]";
      },
      'nth-child':      function(m) {
        return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
      },
      'nth-last-child': function(m) {
        return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
      },
      'nth-of-type':    function(m) {
        return Selector.xpath.pseudos.nth("position() ", m);
      },
      'nth-last-of-type': function(m) {
        return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
      },
      'first-of-type':  function(m) {
        m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
      },
      'last-of-type':   function(m) {
        m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
      },
      'only-of-type':   function(m) {
        var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
      },
      nth: function(fragment, m) {
        var mm, formula = m[6], predicate;
        if (formula == 'even') formula = '2n+0';
        if (formula == 'odd')  formula = '2n+1';
        if (mm = formula.match(/^(\d+)$/)) // digit only
          return '[' + fragment + "= " + mm[1] + ']';
        if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
          if (mm[1] == "-") mm[1] = -1;
          var a = mm[1] ? Number(mm[1]) : 1;
          var b = mm[2] ? Number(mm[2]) : 0;
          predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
          "((#{fragment} - #{b}) div #{a} >= 0)]";
          return new Template(predicate).evaluate({
            fragment: fragment, a: a, b: b });
        }
      }
    }
  },

  criteria: {
    tagName:      'n = h.tagName(n, r, "#{1}", c);      c = false;',
    className:    'n = h.className(n, r, "#{1}", c);    c = false;',
    id:           'n = h.id(n, r, "#{1}", c);           c = false;',
    attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;',
    attr: function(m) {
      m[3] = (m[5] || m[6]);
      return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);
    },
    pseudo: function(m) {
      if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
      return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
    },
    descendant:   'c = "descendant";',
    child:        'c = "child";',
    adjacent:     'c = "adjacent";',
    laterSibling: 'c = "laterSibling";'
  },

  patterns: {
    // combinators must be listed first
    // (and descendant needs to be last combinator)
    laterSibling: /^\s*~\s*/,
    child:        /^\s*>\s*/,
    adjacent:     /^\s*\+\s*/,
    descendant:   /^\s/,

    // selectors follow
    tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,
    id:           /^#([\w\-\*]+)(\b|$)/,
    className:    /^\.([\w\-\*]+)(\b|$)/,
    pseudo:
/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,
    attrPresence: /^\[((?:[\w]+:)?[\w]+)\]/,
    attr:         /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
  },

  // for Selector.match and Element#match
  assertions: {
    tagName: function(element, matches) {
      return matches[1].toUpperCase() == element.tagName.toUpperCase();
    },

    className: function(element, matches) {
      return Element.hasClassName(element, matches[1]);
    },

    id: function(element, matches) {
      return element.id === matches[1];
    },

    attrPresence: function(element, matches) {
      return Element.hasAttribute(element, matches[1]);
    },

    attr: function(element, matches) {
      var nodeValue = Element.readAttribute(element, matches[1]);
      return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]);
    }
  },

  handlers: {
    // UTILITY FUNCTIONS
    // joins two collections
    concat: function(a, b) {
      for (var i = 0, node; node = b[i]; i++)
        a.push(node);
      return a;
    },

    // marks an array of nodes for counting
    mark: function(nodes) {
      var _true = Prototype.emptyFunction;
      for (var i = 0, node; node = nodes[i]; i++)
        node._countedByPrototype = _true;
      return nodes;
    },

    unmark: function(nodes) {
      for (var i = 0, node; node = nodes[i]; i++)
        node._countedByPrototype = undefined;
      return nodes;
    },

    // mark each child node with its position (for nth calls)
    // "ofType" flag indicates whether we're indexing for nth-of-type
    // rather than nth-child
    index: function(parentNode, reverse, ofType) {
      parentNode._countedByPrototype = Prototype.emptyFunction;
      if (reverse) {
        for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
          var node = nodes[i];
          if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
        }
      } else {
        for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
          if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
      }
    },

    // filters out duplicates and extends all nodes
    unique: function(nodes) {
      if (nodes.length == 0) return nodes;
      var results = [], n;
      for (var i = 0, l = nodes.length; i < l; i++)
        if (!(n = nodes[i])._countedByPrototype) {
          n._countedByPrototype = Prototype.emptyFunction;
          results.push(Element.extend(n));
        }
      return Selector.handlers.unmark(results);
    },

    // COMBINATOR FUNCTIONS
    descendant: function(nodes) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        h.concat(results, node.getElementsByTagName('*'));
      return results;
    },

    child: function(nodes) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        for (var j = 0, child; child = node.childNodes[j]; j++)
          if (child.nodeType == 1 && child.tagName != '!') results.push(child);
      }
      return results;
    },

    adjacent: function(nodes) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        var next = this.nextElementSibling(node);
        if (next) results.push(next);
      }
      return results;
    },

    laterSibling: function(nodes) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        h.concat(results, Element.nextSiblings(node));
      return results;
    },

    nextElementSibling: function(node) {
      while (node = node.nextSibling)
        if (node.nodeType == 1) return node;
      return null;
    },

    previousElementSibling: function(node) {
      while (node = node.previousSibling)
        if (node.nodeType == 1) return node;
      return null;
    },

    // TOKEN FUNCTIONS
    tagName: function(nodes, root, tagName, combinator) {
      var uTagName = tagName.toUpperCase();
      var results = [], h = Selector.handlers;
      if (nodes) {
        if (combinator) {
          // fastlane for ordinary descendant combinators
          if (combinator == "descendant") {
            for (var i = 0, node; node = nodes[i]; i++)
              h.concat(results, node.getElementsByTagName(tagName));
            return results;
          } else nodes = this[combinator](nodes);
          if (tagName == "*") return nodes;
        }
        for (var i = 0, node; node = nodes[i]; i++)
          if (node.tagName.toUpperCase() === uTagName) results.push(node);
        return results;
      } else return root.getElementsByTagName(tagName);
    },

    id: function(nodes, root, id, combinator) {
      var targetNode = $(id), h = Selector.handlers;
      if (!targetNode) return [];
      if (!nodes && root == document) return [targetNode];
      if (nodes) {
        if (combinator) {
          if (combinator == 'child') {
            for (var i = 0, node; node = nodes[i]; i++)
              if (targetNode.parentNode == node) return [targetNode];
          } else if (combinator == 'descendant') {
            for (var i = 0, node; node = nodes[i]; i++)
              if (Element.descendantOf(targetNode, node)) return [targetNode];
          } else if (combinator == 'adjacent') {
            for (var i = 0, node; node = nodes[i]; i++)
              if (Selector.handlers.previousElementSibling(targetNode) == node)
                return [targetNode];
          } else nodes = h[combinator](nodes);
        }
        for (var i = 0, node; node = nodes[i]; i++)
          if (node == targetNode) return [targetNode];
        return [];
      }
      return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
    },

    className: function(nodes, root, className, combinator) {
      if (nodes && combinator) nodes = this[combinator](nodes);
      return Selector.handlers.byClassName(nodes, root, className);
    },

    byClassName: function(nodes, root, className) {
      if (!nodes) nodes = Selector.handlers.descendant([root]);
      var needle = ' ' + className + ' ';
      for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
        nodeClassName = node.className;
        if (nodeClassName.length == 0) continue;
        if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
          results.push(node);
      }
      return results;
    },

    attrPresence: function(nodes, root, attr, combinator) {
      if (!nodes) nodes = root.getElementsByTagName("*");
      if (nodes && combinator) nodes = this[combinator](nodes);
      var results = [];
      for (var i = 0, node; node = nodes[i]; i++)
        if (Element.hasAttribute(node, attr)) results.push(node);
      return results;
    },

    attr: function(nodes, root, attr, value, operator, combinator) {
      if (!nodes) nodes = root.getElementsByTagName("*");
      if (nodes && combinator) nodes = this[combinator](nodes);
      var handler = Selector.operators[operator], results = [];
      for (var i = 0, node; node = nodes[i]; i++) {
        var nodeValue = Element.readAttribute(node, attr);
        if (nodeValue === null) continue;
        if (handler(nodeValue, value)) results.push(node);
      }
      return results;
    },

    pseudo: function(nodes, name, value, root, combinator) {
      if (nodes && combinator) nodes = this[combinator](nodes);
      if (!nodes) nodes = root.getElementsByTagName("*");
      return Selector.pseudos[name](nodes, value, root);
    }
  },

  pseudos: {
    'first-child': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        if (Selector.handlers.previousElementSibling(node)) continue;
          results.push(node);
      }
      return results;
    },
    'last-child': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        if (Selector.handlers.nextElementSibling(node)) continue;
          results.push(node);
      }
      return results;
    },
    'only-child': function(nodes, value, root) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
          results.push(node);
      return results;
    },
    'nth-child':        function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root);
    },
    'nth-last-child':   function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, true);
    },
    'nth-of-type':      function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, false, true);
    },
    'nth-last-of-type': function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, true, true);
    },
    'first-of-type':    function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, "1", root, false, true);
    },
    'last-of-type':     function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, "1", root, true, true);
    },
    'only-of-type':     function(nodes, formula, root) {
      var p = Selector.pseudos;
      return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
    },

    // handles the an+b logic
    getIndices: function(a, b, total) {
      if (a == 0) return b > 0 ? [b] : [];
      return $R(1, total).inject([], function(memo, i) {
        if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
        return memo;
      });
    },

    // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
    nth: function(nodes, formula, root, reverse, ofType) {
      if (nodes.length == 0) return [];
      if (formula == 'even') formula = '2n+0';
      if (formula == 'odd')  formula = '2n+1';
      var h = Selector.handlers, results = [], indexed = [], m;
      h.mark(nodes);
      for (var i = 0, node; node = nodes[i]; i++) {
        if (!node.parentNode._countedByPrototype) {
          h.index(node.parentNode, reverse, ofType);
          indexed.push(node.parentNode);
        }
      }
      if (formula.match(/^\d+$/)) { // just a number
        formula = Number(formula);
        for (var i = 0, node; node = nodes[i]; i++)
          if (node.nodeIndex == formula) results.push(node);
      } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
        if (m[1] == "-") m[1] = -1;
        var a = m[1] ? Number(m[1]) : 1;
        var b = m[2] ? Number(m[2]) : 0;
        var indices = Selector.pseudos.getIndices(a, b, nodes.length);
        for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
          for (var j = 0; j < l; j++)
            if (node.nodeIndex == indices[j]) results.push(node);
        }
      }
      h.unmark(nodes);
      h.unmark(indexed);
      return results;
    },

    'empty': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        // IE treats comments as element nodes
        if (node.tagName == '!' || node.firstChild) continue;
        results.push(node);
      }
      return results;
    },

    'not': function(nodes, selector, root) {
      var h = Selector.handlers, selectorType, m;
      var exclusions = new Selector(selector).findElements(root);
      h.mark(exclusions);
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (!node._countedByPrototype) results.push(node);
      h.unmark(exclusions);
      return results;
    },

    'enabled': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (!node.disabled && (!node.type || node.type !== 'hidden'))
          results.push(node);
      return results;
    },

    'disabled': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (node.disabled) results.push(node);
      return results;
    },

    'checked': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (node.checked) results.push(node);
      return results;
    }
  },

  operators: {
    '=':  function(nv, v) { return nv == v; },
    '!=': function(nv, v) { return nv != v; },
    '^=': function(nv, v) { return nv == v || nv && nv.startsWith(v); },
    '$=': function(nv, v) { return nv == v || nv && nv.endsWith(v); },
    '*=': function(nv, v) { return nv == v || nv && nv.include(v); },
    '$=': function(nv, v) { return nv.endsWith(v); },
    '*=': function(nv, v) { return nv.include(v); },
    '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
    '|=': function(nv, v) { return ('-' + (nv || "").toUpperCase() +
     '-').include('-' + (v || "").toUpperCase() + '-'); }
  },

  split: function(expression) {
    var expressions = [];
    expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
      expressions.push(m[1].strip());
    });
    return expressions;
  },

  matchElements: function(elements, expression) {
    var matches = $$(expression), h = Selector.handlers;
    h.mark(matches);
    for (var i = 0, results = [], element; element = elements[i]; i++)
      if (element._countedByPrototype) results.push(element);
    h.unmark(matches);
    return results;
  },

  findElement: function(elements, expression, index) {
    if (Object.isNumber(expression)) {
      index = expression; expression = false;
    }
    return Selector.matchElements(elements, expression || '*')[index || 0];
  },

  findChildElements: function(element, expressions) {
    expressions = Selector.split(expressions.join(','));
    var results = [], h = Selector.handlers;
    for (var i = 0, l = expressions.length, selector; i < l; i++) {
      selector = new Selector(expressions[i].strip());
      h.concat(results, selector.findElements(element));
    }
    return (l > 1) ? h.unique(results) : results;
  }
});

if (Prototype.Browser.IE) {
  Object.extend(Selector.handlers, {
    // IE returns comment nodes on getElementsByTagName("*").
    // Filter them out.
    concat: function(a, b) {
      for (var i = 0, node; node = b[i]; i++)
        if (node.tagName !== "!") a.push(node);
      return a;
    },

    // IE improperly serializes _countedByPrototype in (inner|outer)HTML.
    unmark: function(nodes) {
      for (var i = 0, node; node = nodes[i]; i++)
        node.removeAttribute('_countedByPrototype');
      return nodes;
    }
  });
}

function $$() {
  return Selector.findChildElements(document, $A(arguments));
}
var Form = {
  reset: function(form) {
    $(form).reset();
    return form;
  },

  serializeElements: function(elements, options) {
    if (typeof options != 'object') options = { hash: !!options };
    else if (Object.isUndefined(options.hash)) options.hash = true;
    var key, value, submitted = false, submit = options.submit;

    var data = elements.inject({ }, function(result, element) {
      if (!element.disabled && element.name) {
        key = element.name; value = $(element).getValue();
        if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
            submit !== false && (!submit || key == submit) && (submitted = true)))) {
          if (key in result) {
            // a key is already present; construct an array of values
            if (!Object.isArray(result[key])) result[key] = [result[key]];
            result[key].push(value);
          }
          else result[key] = value;
        }
      }
      return result;
    });

    return options.hash ? data : Object.toQueryString(data);
  }
};

Form.Methods = {
  serialize: function(form, options) {
    return Form.serializeElements(Form.getElements(form), options);
  },

  getElements: function(form) {
    return $A($(form).getElementsByTagName('*')).inject([],
      function(elements, child) {
        if (Form.Element.Serializers[child.tagName.toLowerCase()])
          elements.push(Element.extend(child));
        return elements;
      }
    );
  },

  getInputs: function(form, typeName, name) {
    form = $(form);
    var inputs = form.getElementsByTagName('input');

    if (!typeName && !name) return $A(inputs).map(Element.extend);

    for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
      var input = inputs[i];
      if ((typeName && input.type != typeName) || (name && input.name != name))
        continue;
      matchingInputs.push(Element.extend(input));
    }

    return matchingInputs;
  },

  disable: function(form) {
    form = $(form);
    Form.getElements(form).invoke('disable');
    return form;
  },

  enable: function(form) {
    form = $(form);
    Form.getElements(form).invoke('enable');
    return form;
  },

  findFirstElement: function(form) {
    var elements = $(form).getElements().findAll(function(element) {
      return 'hidden' != element.type && !element.disabled;
    });
    var firstByIndex = elements.findAll(function(element) {
      return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
    }).sortBy(function(element) { return element.tabIndex }).first();

    return firstByIndex ? firstByIndex : elements.find(function(element) {
      return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
    });
  },

  focusFirstElement: function(form) {
    form = $(form);
    form.findFirstElement().activate();
    return form;
  },

  request: function(form, options) {
    form = $(form), options = Object.clone(options || { });

    var params = options.parameters, action = form.readAttribute('action') || '';
    if (action.blank()) action = window.location.href;
    options.parameters = form.serialize(true);

    if (params) {
      if (Object.isString(params)) params = params.toQueryParams();
      Object.extend(options.parameters, params);
    }

    if (form.hasAttribute('method') && !options.method)
      options.method = form.method;

    return new Ajax.Request(action, options);
  }
};

/*--------------------------------------------------------------------------*/

Form.Element = {
  focus: function(element) {
    $(element).focus();
    return element;
  },

  select: function(element) {
    $(element).select();
    return element;
  }
};

Form.Element.Methods = {
  serialize: function(element) {
    element = $(element);
    if (!element.disabled && element.name) {
      var value = element.getValue();
      if (value != undefined) {
        var pair = { };
        pair[element.name] = value;
        return Object.toQueryString(pair);
      }
    }
    return '';
  },

  getValue: function(element) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    return Form.Element.Serializers[method](element);
  },

  setValue: function(element, value) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    Form.Element.Serializers[method](element, value);
    return element;
  },

  clear: function(element) {
    $(element).value = '';
    return element;
  },

  present: function(element) {
    return $(element).value != '';
  },

  activate: function(element) {
    element = $(element);
    try {
      element.focus();
      if (element.select && (element.tagName.toLowerCase() != 'input' ||
          !['button', 'reset', 'submit'].include(element.type)))
        element.select();
    } catch (e) { }
    return element;
  },

  disable: function(element) {
    element = $(element);
    element.disabled = true;
    return element;
  },

  enable: function(element) {
    element = $(element);
    element.disabled = false;
    return element;
  }
};

/*--------------------------------------------------------------------------*/

var Field = Form.Element;
var $F = Form.Element.Methods.getValue;

/*--------------------------------------------------------------------------*/

Form.Element.Serializers = {
  input: function(element, value) {
    switch (element.type.toLowerCase()) {
      case 'checkbox':
      case 'radio':
        return Form.Element.Serializers.inputSelector(element, value);
      default:
        return Form.Element.Serializers.textarea(element, value);
    }
  },

  inputSelector: function(element, value) {
    if (Object.isUndefined(value)) return element.checked ? element.value : null;
    else element.checked = !!value;
  },

  textarea: function(element, value) {
    if (Object.isUndefined(value)) return element.value;
    else element.value = value;
  },

  select: function(element, value) {
    if (Object.isUndefined(value))
      return this[element.type == 'select-one' ?
        'selectOne' : 'selectMany'](element);
    else {
      var opt, currentValue, single = !Object.isArray(value);
      for (var i = 0, length = element.length; i < length; i++) {
        opt = element.options[i];
        currentValue = this.optionValue(opt);
        if (single) {
          if (currentValue == value) {
            opt.selected = true;
            return;
          }
        }
        else opt.selected = value.include(currentValue);
      }
    }
  },

  selectOne: function(element) {
    var index = element.selectedIndex;
    return index >= 0 ? this.optionValue(element.options[index]) : null;
  },

  selectMany: function(element) {
    var values, length = element.length;
    if (!length) return null;

    for (var i = 0, values = []; i < length; i++) {
      var opt = element.options[i];
      if (opt.selected) values.push(this.optionValue(opt));
    }
    return values;
  },

  optionValue: function(opt) {
    // extend element because hasAttribute may not be native
    return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
  }
};

/*--------------------------------------------------------------------------*/

Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
  initialize: function($super, element, frequency, callback) {
    $super(callback, frequency);
    this.element   = $(element);
    this.lastValue = this.getValue();
  },

  execute: function() {
    var value = this.getValue();
    if (Object.isString(this.lastValue) && Object.isString(value) ?
        this.lastValue != value : String(this.lastValue) != String(value)) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  }
});

Form.Element.Observer = Class.create(Abstract.TimedObserver, {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.Observer = Class.create(Abstract.TimedObserver, {
  getValue: function() {
    return Form.serialize(this.element);
  }
});

/*--------------------------------------------------------------------------*/

Abstract.EventObserver = Class.create({
  initialize: function(element, callback) {
    this.element  = $(element);
    this.callback = callback;

    this.lastValue = this.getValue();
    if (this.element.tagName.toLowerCase() == 'form')
      this.registerFormCallbacks();
    else
      this.registerCallback(this.element);
  },

  onElementEvent: function() {
    var value = this.getValue();
    if (this.lastValue != value) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  },

  registerFormCallbacks: function() {
    Form.getElements(this.element).each(this.registerCallback, this);
  },

  registerCallback: function(element) {
    if (element.type) {
      switch (element.type.toLowerCase()) {
        case 'checkbox':
        case 'radio':
          Event.observe(element, 'click', this.onElementEvent.bind(this));
          break;
        default:
          Event.observe(element, 'change', this.onElementEvent.bind(this));
          break;
      }
    }
  }
});

Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.EventObserver = Class.create(Abstract.EventObserver, {
  getValue: function() {
    return Form.serialize(this.element);
  }
});
if (!window.Event) var Event = { };

Object.extend(Event, {
  KEY_BACKSPACE: 8,
  KEY_TAB:       9,
  KEY_RETURN:   13,
  KEY_ESC:      27,
  KEY_LEFT:     37,
  KEY_UP:       38,
  KEY_RIGHT:    39,
  KEY_DOWN:     40,
  KEY_DELETE:   46,
  KEY_HOME:     36,
  KEY_END:      35,
  KEY_PAGEUP:   33,
  KEY_PAGEDOWN: 34,
  KEY_INSERT:   45,

  cache: { },

  relatedTarget: function(event) {
    var element;
    switch(event.type) {
      case 'mouseover': element = event.fromElement; break;
      case 'mouseout':  element = event.toElement;   break;
      default: return null;
    }
    return Element.extend(element);
  }
});

Event.Methods = (function() {
  var isButton;

  if (Prototype.Browser.IE) {
    var buttonMap = { 0: 1, 1: 4, 2: 2 };
    isButton = function(event, code) {
      return event.button == buttonMap[code];
    };

  } else if (Prototype.Browser.WebKit) {
    isButton = function(event, code) {
      switch (code) {
        case 0: return event.which == 1 && !event.metaKey;
        case 1: return event.which == 1 && event.metaKey;
        default: return false;
      }
    };

  } else {
    isButton = function(event, code) {
      return event.which ? (event.which === code + 1) : (event.button === code);
    };
  }

  return {
    isLeftClick:   function(event) { return isButton(event, 0) },
    isMiddleClick: function(event) { return isButton(event, 1) },
    isRightClick:  function(event) { return isButton(event, 2) },

    element: function(event) {
      event = Event.extend(event);

      var node          = event.target,
          type          = event.type,
          currentTarget = event.currentTarget;

      if (currentTarget && currentTarget.tagName) {
        // Firefox screws up the "click" event when moving between radio buttons
        // via arrow keys. It also screws up the "load" and "error" events on images,
        // reporting the document as the target instead of the original image.
        if (type === 'load' || type === 'error' ||
          (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
            && currentTarget.type === 'radio'))
              node = currentTarget;
      }
      if (node) {
        if (node.nodeType == Node.TEXT_NODE) node = node.parentNode;
        return Element.extend(node);
      } else return false;
    },

    findElement: function(event, expression) {
      var element = Event.element(event);
      if (!expression) return element;
      var elements = [element].concat(element.ancestors());
      return Selector.findElement(elements, expression, 0);
    },

    pointer: function(event) {
      var docElement = document.documentElement,
      body = document.body || { scrollLeft: 0, scrollTop: 0 };
      return {
        x: event.pageX || (event.clientX +
          (docElement.scrollLeft || body.scrollLeft) -
          (docElement.clientLeft || 0)),
        y: event.pageY || (event.clientY +
          (docElement.scrollTop || body.scrollTop) -
          (docElement.clientTop || 0))
      };
    },

    pointerX: function(event) { return Event.pointer(event).x },
    pointerY: function(event) { return Event.pointer(event).y },

    stop: function(event) {
      Event.extend(event);
      event.preventDefault();
      event.stopPropagation();
      event.stopped = true;
    }
  };
})();

Event.extend = (function() {
  var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
    m[name] = Event.Methods[name].methodize();
    return m;
  });

  if (Prototype.Browser.IE) {
    Object.extend(methods, {
      stopPropagation: function() { this.cancelBubble = true },
      preventDefault:  function() { this.returnValue = false },
      inspect: function() { return "[object Event]" }
    });

    return function(event) {
      if (!event) return false;
      if (event._extendedByPrototype) return event;

      event._extendedByPrototype = Prototype.emptyFunction;
      var pointer = Event.pointer(event);
      Object.extend(event, {
        target: event.srcElement,
        relatedTarget: Event.relatedTarget(event),
        pageX:  pointer.x,
        pageY:  pointer.y
      });
      return Object.extend(event, methods);
    };

  } else {
    Event.prototype = Event.prototype || document.createEvent("HTMLEvents")['__proto__'];
    Object.extend(Event.prototype, methods);
    return Prototype.K;
  }
})();

Object.extend(Event, (function() {
  var cache = Event.cache;

  function getEventID(element) {
    try {
      if (element._prototypeEventID) return element._prototypeEventID[0];
      arguments.callee.id = arguments.callee.id || 1;
      return element._prototypeEventID = [++arguments.callee.id];
    } catch (error) {
      return false;
    }
  }

  function getDOMEventName(eventName) {
    if (eventName && eventName.include(':')) return "dataavailable";
    return eventName;
  }

  function getCacheForID(id) {
    return cache[id] = cache[id] || { };
  }

  function getWrappersForEventName(id, eventName) {
    var c = getCacheForID(id);
    return c[eventName] = c[eventName] || [];
  }

  function createWrapper(element, eventName, handler) {
    var id = getEventID(element);
    var c = getWrappersForEventName(id, eventName);
    if (c.pluck("handler").include(handler)) return false;

    var wrapper = function(event) {
      if (!Event || !Event.extend ||
        (event.eventName && event.eventName != eventName))
          return false;

      Event.extend(event);
      handler.call(element, event);
    };

    wrapper.handler = handler;
    c.push(wrapper);
    return wrapper;
  }

  function findWrapper(id, eventName, handler) {
    var c = getWrappersForEventName(id, eventName);
    return c.find(function(wrapper) { return wrapper.handler == handler });
  }

  function destroyWrapper(id, eventName, handler) {
    var c = getCacheForID(id);
    if (!c[eventName]) return false;
    c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
  }

  function destroyCache() {
    for (var id in cache)
      for (var eventName in cache[id])
        cache[id][eventName] = null;
  }


  // Internet Explorer needs to remove event handlers on page unload
  // in order to avoid memory leaks.
  if (window.attachEvent) {
    window.attachEvent("onunload", destroyCache);
  }

  // Safari has a dummy event handler on page unload so that it won't
  // use its bfcache. Safari <= 3.1 has an issue with restoring the "document"
  // object when page is returned to via the back button using its bfcache.
  if (Prototype.Browser.WebKit) {
    window.addEventListener('unload', Prototype.emptyFunction, false);
  }

  return {
    observe: function(element, eventName, handler) {
      element = $(element);
      var name = getDOMEventName(eventName);

      var wrapper = createWrapper(element, eventName, handler);
      if (!wrapper) return element;

      if (element.addEventListener) {
        element.addEventListener(name, wrapper, false);
      } else {
        element.attachEvent("on" + name, wrapper);
      }

      return element;
    },

    stopObserving: function(element, eventName, handler) {
      element = $(element);
      var id = getEventID(element), name = getDOMEventName(eventName);

      if (!handler && eventName) {
        getWrappersForEventName(id, eventName).each(function(wrapper) {
          element.stopObserving(eventName, wrapper.handler);
        });
        return element;

      } else if (!eventName) {
        Object.keys(getCacheForID(id)).each(function(eventName) {
          element.stopObserving(eventName);
        });
        return element;
      }

      var wrapper = findWrapper(id, eventName, handler);
      if (!wrapper) return element;

      if (element.removeEventListener) {
        element.removeEventListener(name, wrapper, false);
      } else {
        element.detachEvent("on" + name, wrapper);
      }

      destroyWrapper(id, eventName, handler);

      return element;
    },

    fire: function(element, eventName, memo) {
      element = $(element);
      if (element == document && document.createEvent && !element.dispatchEvent)
        element = document.documentElement;

      var event;
      if (document.createEvent) {
        event = document.createEvent("HTMLEvents");
        event.initEvent("dataavailable", true, true);
      } else {
        event = document.createEventObject();
        event.eventType = "ondataavailable";
      }

      event.eventName = eventName;
      event.memo = memo || { };

      if (document.createEvent) {
        element.dispatchEvent(event);
      } else {
        element.fireEvent(event.eventType, event);
      }

      return Event.extend(event);
    }
  };
})());

Object.extend(Event, Event.Methods);

Element.addMethods({
  fire:          Event.fire,
  observe:       Event.observe,
  stopObserving: Event.stopObserving
});

Object.extend(document, {
  fire:          Element.Methods.fire.methodize(),
  observe:       Element.Methods.observe.methodize(),
  stopObserving: Element.Methods.stopObserving.methodize(),
  loaded:        false
});

(function() {
  /* Support for the DOMContentLoaded event is based on work by Dan Webb,
     Matthias Miller, Dean Edwards and John Resig. */

  var timer;

  function fireContentLoadedEvent() {
    if (document.loaded) return;
    if (timer) window.clearInterval(timer);
    document.fire("dom:loaded");
    document.loaded = true;
  }

  if (document.addEventListener) {
    if (Prototype.Browser.WebKit) {
      timer = window.setInterval(function() {
        if (/loaded|complete/.test(document.readyState))
          fireContentLoadedEvent();
      }, 0);

      Event.observe(window, "load", fireContentLoadedEvent);

    } else {
      document.addEventListener("DOMContentLoaded",
        fireContentLoadedEvent, false);
    }

  } else {
    document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
    $("__onDOMContentLoaded").onreadystatechange = function() {
      if (this.readyState == "complete") {
        this.onreadystatechange = null;
        fireContentLoadedEvent();
      }
    };
  }
})();
/*------------------------------- DEPRECATED -------------------------------*/

Hash.toQueryString = Object.toQueryString;

var Toggle = { display: Element.toggle };

Element.Methods.childOf = Element.Methods.descendantOf;

var Insertion = {
  Before: function(element, content) {
    return Element.insert(element, {before:content});
  },

  Top: function(element, content) {
    return Element.insert(element, {top:content});
  },

  Bottom: function(element, content) {
    return Element.insert(element, {bottom:content});
  },

  After: function(element, content) {
    return Element.insert(element, {after:content});
  }
};

var $continue = new Error('"throw $continue" is deprecated, use "return" instead');

// This should be moved to script.aculo.us; notice the deprecated methods
// further below, that map to the newer Element methods.
var Position = {
  // set to true if needed, warning: firefox performance problems
  // NOT neeeded for page scrolling, only if draggable contained in
  // scrollable elements
  includeScrollOffsets: false,

  // must be called before calling withinIncludingScrolloffset, every time the
  // page is scrolled
  prepare: function() {
    this.deltaX =  window.pageXOffset
                || document.documentElement.scrollLeft
                || document.body.scrollLeft
                || 0;
    this.deltaY =  window.pageYOffset
                || document.documentElement.scrollTop
                || document.body.scrollTop
                || 0;
  },

  // caches x/y coordinate pair to use with overlap
  within: function(element, x, y) {
    if (this.includeScrollOffsets)
      return this.withinIncludingScrolloffsets(element, x, y);
    this.xcomp = x;
    this.ycomp = y;
    this.offset = Element.cumulativeOffset(element);

    return (y >= this.offset[1] &&
            y <  this.offset[1] + element.offsetHeight &&
            x >= this.offset[0] &&
            x <  this.offset[0] + element.offsetWidth);
  },

  withinIncludingScrolloffsets: function(element, x, y) {
    var offsetcache = Element.cumulativeScrollOffset(element);

    this.xcomp = x + offsetcache[0] - this.deltaX;
    this.ycomp = y + offsetcache[1] - this.deltaY;
    this.offset = Element.cumulativeOffset(element);

    return (this.ycomp >= this.offset[1] &&
            this.ycomp <  this.offset[1] + element.offsetHeight &&
            this.xcomp >= this.offset[0] &&
            this.xcomp <  this.offset[0] + element.offsetWidth);
  },

  // within must be called directly before
  overlap: function(mode, element) {
    if (!mode) return 0;
    if (mode == 'vertical')
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
        element.offsetHeight;
    if (mode == 'horizontal')
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
        element.offsetWidth;
  },

  // Deprecation layer -- use newer Element methods now (1.5.2).

  cumulativeOffset: Element.Methods.cumulativeOffset,

  positionedOffset: Element.Methods.positionedOffset,

  absolutize: function(element) {
    Position.prepare();
    return Element.absolutize(element);
  },

  relativize: function(element) {
    Position.prepare();
    return Element.relativize(element);
  },

  realOffset: Element.Methods.cumulativeScrollOffset,

  offsetParent: Element.Methods.getOffsetParent,

  page: Element.Methods.viewportOffset,

  clone: function(source, target, options) {
    options = options || { };
    return Element.clonePosition(target, source, options);
  }
};

/*--------------------------------------------------------------------------*/

if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
  function iter(name) {
    return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
  }

  instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
  function(element, className) {
    className = className.toString().strip();
    var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
    return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
  } : function(element, className) {
    className = className.toString().strip();
    var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
    if (!classNames && !className) return elements;

    var nodes = $(element).getElementsByTagName('*');
    className = ' ' + className + ' ';

    for (var i = 0, child, cn; child = nodes[i]; i++) {
      if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
          (classNames && classNames.all(function(name) {
            return !name.toString().blank() && cn.include(' ' + name + ' ');
          }))))
        elements.push(Element.extend(child));
    }
    return elements;
  };

  return function(className, parentElement) {
    return $(parentElement || document.body).getElementsByClassName(className);
  };
}(Element.Methods);

/*--------------------------------------------------------------------------*/

Element.ClassNames = Class.create();
Element.ClassNames.prototype = {
  initialize: function(element) {
    this.element = $(element);
  },

  _each: function(iterator) {
    this.element.className.split(/\s+/).select(function(name) {
      return name.length > 0;
    })._each(iterator);
  },

  set: function(className) {
    this.element.className = className;
  },

  add: function(classNameToAdd) {
    if (this.include(classNameToAdd)) return;
    this.set($A(this).concat(classNameToAdd).join(' '));
  },

  remove: function(classNameToRemove) {
    if (!this.include(classNameToRemove)) return;
    this.set($A(this).without(classNameToRemove).join(' '));
  },

  toString: function() {
    return $A(this).join(' ');
  }
};

Object.extend(Element.ClassNames.prototype, Enumerable);

/*--------------------------------------------------------------------------*/

Element.addMethods();
// Credit Card Validation Javascript
// copyright 12th May 2003, by Stephen Chapman, Felgall Pty Ltd

// You have permission to copy and use this javascript provided that
// the content of the script is not changed in any way.

function validateCreditCard(s) {
    // remove non-numerics
    var v = "0123456789";
    var w = "";
    for (i=0; i < s.length; i++) {
        x = s.charAt(i);
        if (v.indexOf(x,0) != -1)
        w += x;
    }
    // validate number
    j = w.length / 2;
    k = Math.floor(j);
    m = Math.ceil(j) - k;
    c = 0;
    for (i=0; i<k; i++) {
        a = w.charAt(i*2+m) * 2;
        c += a > 9 ? Math.floor(a/10 + a%10) : a;
    }
    for (i=0; i<k+m; i++) c += w.charAt(i*2+1-m) * 1;
    return (c%10 == 0);
}


/*
* Really easy field validation with Prototype
* http://tetlaw.id.au/view/javascript/really-easy-field-validation
* Andrew Tetlaw
* Version 1.5.4.1 (2007-01-05)
*
* Copyright (c) 2007 Andrew Tetlaw
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
*/
var Validator = Class.create();

Validator.prototype = {
    initialize : function(className, error, test, options) {
        if(typeof test == 'function'){
            this.options = $H(options);
            this._test = test;
        } else {
            this.options = $H(test);
            this._test = function(){return true};
        }
        this.error = error || 'Validation failed.';
        this.className = className;
    },
    test : function(v, elm) {
        return (this._test(v,elm) && this.options.all(function(p){
            return Validator.methods[p.key] ? Validator.methods[p.key](v,elm,p.value) : true;
        }));
    }
}
Validator.methods = {
    pattern : function(v,elm,opt) {return Validation.get('IsEmpty').test(v) || opt.test(v)},
    minLength : function(v,elm,opt) {return v.length >= opt},
    maxLength : function(v,elm,opt) {return v.length <= opt},
    min : function(v,elm,opt) {return v >= parseFloat(opt)},
    max : function(v,elm,opt) {return v <= parseFloat(opt)},
    notOneOf : function(v,elm,opt) {return $A(opt).all(function(value) {
        return v != value;
    })},
    oneOf : function(v,elm,opt) {return $A(opt).any(function(value) {
        return v == value;
    })},
    is : function(v,elm,opt) {return v == opt},
    isNot : function(v,elm,opt) {return v != opt},
    equalToField : function(v,elm,opt) {return v == $F(opt)},
    notEqualToField : function(v,elm,opt) {return v != $F(opt)},
    include : function(v,elm,opt) {return $A(opt).all(function(value) {
        return Validation.get(value).test(v,elm);
    })}
}

var Validation = Class.create();
Validation.defaultOptions = {
    onSubmit : true,
    stopOnFirst : false,
    immediate : false,
    focusOnError : true,
    useTitles : false,
    addClassNameToContainer: false,
    containerClassName: '.input-box',
    onFormValidate : function(result, form) {},
    onElementValidate : function(result, elm) {}
};

Validation.prototype = {
    initialize : function(form, options){
        this.form = $(form);
        if (!this.form) {
            return;
        }
        this.options = Object.extend({
            onSubmit : Validation.defaultOptions.onSubmit,
            stopOnFirst : Validation.defaultOptions.stopOnFirst,
            immediate : Validation.defaultOptions.immediate,
            focusOnError : Validation.defaultOptions.focusOnError,
            useTitles : Validation.defaultOptions.useTitles,
            onFormValidate : Validation.defaultOptions.onFormValidate,
            onElementValidate : Validation.defaultOptions.onElementValidate
        }, options || {});
        if(this.options.onSubmit) Event.observe(this.form,'submit',this.onSubmit.bind(this),false);
        if(this.options.immediate) {
            Form.getElements(this.form).each(function(input) { // Thanks Mike!
                if (input.tagName.toLowerCase() == 'select') {
                    Event.observe(input, 'blur', this.onChange.bindAsEventListener(this));
                }
                if (input.type.toLowerCase() == 'radio' || input.type.toLowerCase() == 'checkbox') {
                    Event.observe(input, 'click', this.onChange.bindAsEventListener(this));
                } else {
                    Event.observe(input, 'change', this.onChange.bindAsEventListener(this));
                }
            }, this);
        }
    },
    onChange : function (ev) {
        Validation.isOnChange = true;
        Validation.validate(Event.element(ev),{
                useTitle : this.options.useTitles,
                onElementValidate : this.options.onElementValidate
        });
        Validation.isOnChange = false;
    },
    onSubmit :  function(ev){
        if(!this.validate()) Event.stop(ev);
    },
    validate : function() {
        var result = false;
        var useTitles = this.options.useTitles;
        var callback = this.options.onElementValidate;
        try {
            if(this.options.stopOnFirst) {
                result = Form.getElements(this.form).all(function(elm) {
                    if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {
                        return true;
                    }
                    return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});
                }, this);
            } else {
                result = Form.getElements(this.form).collect(function(elm) {
                    if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {
                        return true;
                    }
                    return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});
                }, this).all();
            }
        } catch (e) {
        }
        if(!result && this.options.focusOnError) {
            try{
                Form.getElements(this.form).findAll(function(elm){return $(elm).hasClassName('validation-failed')}).first().focus()
            }
            catch(e){
            }
        }
        this.options.onFormValidate(result, this.form);
        return result;
    },
    reset : function() {
        Form.getElements(this.form).each(Validation.reset);
    },
    isElementInForm : function(elm, form) {
        var domForm = elm.up('form');
        if (domForm == form) {
            return true;
        }
        return false;
    }
}

Object.extend(Validation, {
    validate : function(elm, options){
        options = Object.extend({
            useTitle : false,
            onElementValidate : function(result, elm) {}
        }, options || {});
        elm = $(elm);

        var cn = $w(elm.className);
        return result = cn.all(function(value) {
            var test = Validation.test(value,elm,options.useTitle);
            options.onElementValidate(test, elm);
            return test;
        });
    },
    insertAdvice : function(elm, advice){
        var container = $(elm).up('.field-row');
        if(container){
            Element.insert(container, {after: advice});
        } else if (elm.up('td.value')) {
            elm.up('td.value').insert({bottom: advice});
        } else if (elm.advaiceContainer && $(elm.advaiceContainer)) {
            $(elm.advaiceContainer).update(advice);
        }
        else {
            switch (elm.type.toLowerCase()) {
                case 'checkbox':
                case 'radio':
                    var p = elm.parentNode;
                    if(p) {
                        Element.insert(p, {'bottom': advice});
                    } else {
                        Element.insert(elm, {'after': advice});
                    }
                    break;
                default:
                    Element.insert(elm, {'after': advice});
            }
        }
    },
    showAdvice : function(elm, advice, adviceName){
        if(!elm.advices){
            elm.advices = new Hash();
        }
        else{
            elm.advices.each(function(pair){
                this.hideAdvice(elm, pair.value);
            }.bind(this));
        }
        elm.advices.set(adviceName, advice);
        if(typeof Effect == 'undefined') {
            advice.style.display = 'block';
        } else {
            if(!advice._adviceAbsolutize) {
                new Effect.Appear(advice, {duration : 1 });
            } else {
                Position.absolutize(advice);
                advice.show();
                advice.setStyle({
                    'top':advice._adviceTop,
                    'left': advice._adviceLeft,
                    'width': advice._adviceWidth,
                    'z-index': 1000
                });
                advice.addClassName('advice-absolute');
            }
        }
    },
    hideAdvice : function(elm, advice){
        if(advice != null) advice.hide();
    },
    updateCallback : function(elm, status) {
        if (typeof elm.callbackFunction != 'undefined') {
            eval(elm.callbackFunction+'(\''+elm.id+'\',\''+status+'\')');
        }
    },
    ajaxError : function(elm, errorMsg) {
        var name = 'validate-ajax';
        var advice = Validation.getAdvice(name, elm);
        if (advice == null) {
            advice = this.createAdvice(name, elm, false, errorMsg);
        }
        this.showAdvice(elm, advice, 'validate-ajax');
        this.updateCallback(elm, 'failed');

        elm.addClassName('validation-failed');
        elm.addClassName('validate-ajax');
        if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
            var container = elm.up(Validation.defaultOptions.containerClassName);
            if (container && this.allowContainerClassName(elm)) {
                container.removeClassName('validation-passed');
                container.addClassName('validation-error');
            }
        }
    },
    allowContainerClassName: function (elm) {
        if (elm.type == 'radio' || elm.type == 'checkbox') {
            return elm.hasClassName('change-container-classname');
        }

        return true;
    },
    test : function(name, elm, useTitle) {
        var v = Validation.get(name);
        var prop = '__advice'+name.camelize();
        try {
        if(Validation.isVisible(elm) && !v.test($F(elm), elm)) {
            //if(!elm[prop]) {
                var advice = Validation.getAdvice(name, elm);
                if (advice == null) {
                    advice = this.createAdvice(name, elm, useTitle);
                }
                this.showAdvice(elm, advice, name);
                this.updateCallback(elm, 'failed');
            //}
            elm[prop] = 1;
            if (!elm.advaiceContainer) {
                elm.removeClassName('validation-passed');
                elm.addClassName('validation-failed');
            }

           if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
                var container = elm.up(Validation.defaultOptions.containerClassName);
                if (container && this.allowContainerClassName(elm)) {
                    container.removeClassName('validation-passed');
                    container.addClassName('validation-error');
                }
            }
            return false;
        } else {
            var advice = Validation.getAdvice(name, elm);
            this.hideAdvice(elm, advice);
            this.updateCallback(elm, 'passed');
            elm[prop] = '';
            elm.removeClassName('validation-failed');
            elm.addClassName('validation-passed');
            if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
                var container = elm.up(Validation.defaultOptions.containerClassName);
                if (container && !container.down('.validation-failed') && this.allowContainerClassName(elm)) {
                    if (!Validation.get('IsEmpty').test(elm.value) || !this.isVisible(elm)) {
                        container.addClassName('validation-passed');
                    } else {
                        container.removeClassName('validation-passed');
                    }
                    container.removeClassName('validation-error');
                }
            }
            return true;
        }
        } catch(e) {
            throw(e)
        }
    },
    isVisible : function(elm) {
        while(elm.tagName != 'BODY') {
            if(!$(elm).visible()) return false;
            elm = elm.parentNode;
        }
        return true;
    },
    getAdvice : function(name, elm) {
        return $('advice-' + name + '-' + Validation.getElmID(elm)) || $('advice-' + Validation.getElmID(elm));
    },
    createAdvice : function(name, elm, useTitle, customError) {
        var v = Validation.get(name);
        var errorMsg = useTitle ? ((elm && elm.title) ? elm.title : v.error) : v.error;
        if (customError) {
            errorMsg = customError;
        }
        try {
            if (Translator){
                errorMsg = Translator.translate(errorMsg);
            }
        }
        catch(e){}

        advice = '<div class="validation-advice" id="advice-' + name + '-' + Validation.getElmID(elm) +'" style="display:none">' + errorMsg + '</div>'


        Validation.insertAdvice(elm, advice);
        advice = Validation.getAdvice(name, elm);
        if($(elm).hasClassName('absolute-advice')) {
            var dimensions = $(elm).getDimensions();
            var originalPosition = Position.cumulativeOffset(elm);

            advice._adviceTop = (originalPosition[1] + dimensions.height) + 'px';
            advice._adviceLeft = (originalPosition[0])  + 'px';
            advice._adviceWidth = (dimensions.width)  + 'px';
            advice._adviceAbsolutize = true;
        }
        return advice;
    },
    getElmID : function(elm) {
        return elm.id ? elm.id : elm.name;
    },
    reset : function(elm) {
        elm = $(elm);
        var cn = $w(elm.className);
        cn.each(function(value) {
            var prop = '__advice'+value.camelize();
            if(elm[prop]) {
                var advice = Validation.getAdvice(value, elm);
                if (advice) {
                    advice.hide();
                }
                elm[prop] = '';
            }
            elm.removeClassName('validation-failed');
            elm.removeClassName('validation-passed');
            if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
                var container = elm.up(Validation.defaultOptions.containerClassName);
                if (container) {
                    container.removeClassName('validation-passed');
                    container.removeClassName('validation-error');
                }
            }
        });
    },
    add : function(className, error, test, options) {
        var nv = {};
        nv[className] = new Validator(className, error, test, options);
        Object.extend(Validation.methods, nv);
    },
    addAllThese : function(validators) {
        var nv = {};
        $A(validators).each(function(value) {
                nv[value[0]] = new Validator(value[0], value[1], value[2], (value.length > 3 ? value[3] : {}));
            });
        Object.extend(Validation.methods, nv);
    },
    get : function(name) {
        return  Validation.methods[name] ? Validation.methods[name] : Validation.methods['_LikeNoIDIEverSaw_'];
    },
    methods : {
        '_LikeNoIDIEverSaw_' : new Validator('_LikeNoIDIEverSaw_','',{})
    }
});

Validation.add('IsEmpty', '', function(v) {
    return  (v == '' || (v == null) || (v.length == 0) || /^\s+$/.test(v)); // || /^\s+$/.test(v));
});

Validation.addAllThese([
    ['validate-select', 'Please select an option.', function(v) {
                return ((v != "none") && (v != null) && (v.length != 0));
            }],
    ['required-entry', 'This is a required field.', function(v) {
                return !Validation.get('IsEmpty').test(v);
            }],
    ['validate-number', 'Please enter a valid number in this field.', function(v) {
                return Validation.get('IsEmpty').test(v) || (!isNaN(parseNumber(v)) && !/^\s+$/.test(parseNumber(v)));
            }],
    ['validate-digits', 'Please use numbers only in this field. please avoid spaces or other characters such as dots or commas.', function(v) {
                return Validation.get('IsEmpty').test(v) ||  !/[^\d]/.test(v);
            }],
    ['validate-digits-range', 'The value is not within the specified range.', function(v, elm) {
                var result = Validation.get('IsEmpty').test(v) ||  !/[^\d]/.test(v);
                var reRange = new RegExp(/^digits-range-[0-9]+-[0-9]+$/);
                $w(elm.className).each(function(name, index) {
                    if (name.match(reRange) && result) {
                        var min = parseInt(name.split('-')[2], 10);
                        var max = parseInt(name.split('-')[3], 10);
                        var val = parseInt(v, 10);
                        result = (v >= min) && (v <= max);
                    }
                });
                return result;
            }],
    ['validate-alpha', 'Please use letters only (a-z or A-Z) in this field.', function (v) {
                return Validation.get('IsEmpty').test(v) ||  /^[a-zA-Z]+$/.test(v)
            }],
    ['validate-code', 'Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter.', function (v) {
                return Validation.get('IsEmpty').test(v) ||  /^[a-z]+[a-z0-9_]+$/.test(v)
            }],
    ['validate-alphanum', 'Please use only letters (a-z or A-Z) or numbers (0-9) only in this field. No spaces or other characters are allowed.', function(v) {
                return Validation.get('IsEmpty').test(v) ||  /^[a-zA-Z0-9]+$/.test(v) /*!/\W/.test(v)*/
            }],
    ['validate-street', 'Please use only letters (a-z or A-Z) or numbers (0-9) or spaces and # only in this field.', function(v) {
                return Validation.get('IsEmpty').test(v) ||  /^[ \w]{3,}([A-Za-z]\.)?([ \w]*\#\d+)?(\r\n| )[ \w]{3,}/.test(v)
            }],
    ['validate-phoneStrict', 'Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.', function(v) {
                return Validation.get('IsEmpty').test(v) || /^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);
            }],
    ['validate-phoneLax', 'Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.', function(v) {
                return Validation.get('IsEmpty').test(v) || /^((\d[-. ]?)?((\(\d{3}\))|\d{3}))?[-. ]?\d{3}[-. ]?\d{4}$/.test(v);
            }],
    ['validate-fax', 'Please enter a valid fax number. For example (123) 456-7890 or 123-456-7890.', function(v) {
                return Validation.get('IsEmpty').test(v) || /^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);
            }],
    ['validate-date', 'Please enter a valid date.', function(v) {
                var test = new Date(v);
                return Validation.get('IsEmpty').test(v) || !isNaN(test);
            }],
    ['validate-email', 'Please enter a valid email address. For example johndoe@domain.com.', function (v) {
                //return Validation.get('IsEmpty').test(v) || /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(v)
                //return Validation.get('IsEmpty').test(v) || /^[\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9][\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9\.]{1,30}[\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9]@([a-z0-9_-]{1,30}\.){1,5}[a-z]{2,4}$/i.test(v)
                return Validation.get('IsEmpty').test(v) || /^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i.test(v)
            }],
    ['validate-emailSender', 'Please use only visible characters and spaces.', function (v) {
                return Validation.get('IsEmpty').test(v) ||  /^[\S ]+$/.test(v)
                    }],
    ['validate-password', 'Please enter 6 or more characters. Leading or trailing spaces will be ignored.', function(v) {
                var pass=v.strip(); /*strip leading and trailing spaces*/
                return !(pass.length>0 && pass.length < 6);
            }],
    ['validate-admin-password', 'Please enter 7 or more characters. Password should contain both numeric and alphabetic characters.', function(v) {
                var pass=v.strip();
                if (0 == pass.length) {
                    return true;
                }
                if (!(/[a-z]/i.test(v)) || !(/[0-9]/.test(v))) {
                    return false;
                }
                return !(pass.length < 7);
            }],
    ['validate-cpassword', 'Please make sure your passwords match.', function(v) {
                var conf = $('confirmation') ? $('confirmation') : $$('.validate-cpassword')[0];
                var pass = false;
                if ($('password')) {
                    pass = $('password');
                }
                var passwordElements = $$('.validate-password');
                for (var i = 0; i < passwordElements.size(); i++) {
                    var passwordElement = passwordElements[i];
                    if (passwordElement.up('form').id == conf.up('form').id) {
                        pass = passwordElement;
                    }
                }
                if ($$('.validate-admin-password').size()) {
                    pass = $$('.validate-admin-password')[0];
                }
                return (pass.value == conf.value);
            }],
    ['validate-url', 'Please enter a valid URL. Protocol is required (http://, https:// or ftp://)', function (v) {
                return Validation.get('IsEmpty').test(v) || /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(v)
            }],
    ['validate-clean-url', 'Please enter a valid URL. For example http://www.example.com or www.example.com', function (v) {
                return Validation.get('IsEmpty').test(v) || /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v) || /^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v)
            }],
    ['validate-identifier', 'Please enter a valid URL Key. For example "example-page", "example-page.html" or "anotherlevel/example-page".', function (v) {
                return Validation.get('IsEmpty').test(v) || /^[A-Z0-9][A-Z0-9_\/-]+(\.[A-Z0-9_-]+)*$/i.test(v)
            }],
    ['validate-xml-identifier', 'Please enter a valid XML-identifier. For example something_1, block5, id-4.', function (v) {
                return Validation.get('IsEmpty').test(v) || /^[A-Z][A-Z0-9_\/-]*$/i.test(v)
            }],
    ['validate-ssn', 'Please enter a valid social security number. For example 123-45-6789.', function(v) {
            return Validation.get('IsEmpty').test(v) || /^\d{3}-?\d{2}-?\d{4}$/.test(v);
            }],
    ['validate-zip', 'Please enter a valid zip code. For example 90602 or 90602-1234.', function(v) {
            return Validation.get('IsEmpty').test(v) || /(^\d{5}$)|(^\d{5}-\d{4}$)/.test(v);
            }],
    ['validate-zip-international', 'Please enter a valid zip code.', function(v) {
            //return Validation.get('IsEmpty').test(v) || /(^[A-z0-9]{2,10}([\s]{0,1}|[\-]{0,1})[A-z0-9]{2,10}$)/.test(v);
            return true;
            }],
    ['validate-date-au', 'Please use this date format: dd/mm/yyyy. For example 17/03/2006 for the 17th of March, 2006.', function(v) {
                if(Validation.get('IsEmpty').test(v)) return true;
                var regex = /^(\d{2})\/(\d{2})\/(\d{4})$/;
                if(!regex.test(v)) return false;
                var d = new Date(v.replace(regex, '$2/$1/$3'));
                return ( parseInt(RegExp.$2, 10) == (1+d.getMonth()) ) &&
                            (parseInt(RegExp.$1, 10) == d.getDate()) &&
                            (parseInt(RegExp.$3, 10) == d.getFullYear() );
            }],
    ['validate-currency-dollar', 'Please enter a valid $ amount. For example $100.00.', function(v) {
                // [$]1[##][,###]+[.##]
                // [$]1###+[.##]
                // [$]0.##
                // [$].##
                return Validation.get('IsEmpty').test(v) ||  /^\$?\-?([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(v)
            }],
    ['validate-one-required', 'Please select one of the above options.', function (v,elm) {
                var p = elm.parentNode;
                var options = p.getElementsByTagName('INPUT');
                return $A(options).any(function(elm) {
                    return $F(elm);
                });
            }],
    ['validate-one-required-by-name', 'Please select one of the options.', function (v,elm) {
                var inputs = $$('input[name="' + elm.name.replace(/([\\"])/g, '\\$1') + '"]');

                var error = 1;
                for(var i=0;i<inputs.length;i++) {
                    if((inputs[i].type == 'checkbox' || inputs[i].type == 'radio') && inputs[i].checked == true) {
                        error = 0;
                    }

                    if(Validation.isOnChange && (inputs[i].type == 'checkbox' || inputs[i].type == 'radio')) {
                        Validation.reset(inputs[i]);
                    }
                }

                if( error == 0 ) {
                    return true;
                } else {
                    return false;
                }
            }],
    ['validate-not-negative-number', 'Please enter a valid number in this field.', function(v) {
                v = parseNumber(v);
                return (!isNaN(v) && v>=0);
            }],
    ['validate-state', 'Please select State/Province.', function(v) {
                return (v!=0 || v == '');
            }],

    ['validate-new-password', 'Please enter 6 or more characters. Leading or trailing spaces will be ignored.', function(v) {
                if (!Validation.get('validate-password').test(v)) return false;
                if (Validation.get('IsEmpty').test(v) && v != '') return false;
                return true;
            }],
    ['validate-greater-than-zero', 'Please enter a number greater than 0 in this field.', function(v) {
                if(v.length)
                    return parseFloat(v) > 0;
                else
                    return true;
            }],
    ['validate-zero-or-greater', 'Please enter a number 0 or greater in this field.', function(v) {
                if(v.length)
                    return parseFloat(v) >= 0;
                else
                    return true;
            }],
    ['validate-cc-number', 'Please enter a valid credit card number.', function(v, elm) {
                // remove non-numerics
                var ccTypeContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_number')) + '_cc_type');
                if (ccTypeContainer && typeof Validation.creditCartTypes.get(ccTypeContainer.value) != 'undefined'
                        && Validation.creditCartTypes.get(ccTypeContainer.value)[2] == false) {
                    if (!Validation.get('IsEmpty').test(v) && Validation.get('validate-digits').test(v)) {
                        return true;
                    } else {
                        return false;
                    }
                }
                return validateCreditCard(v);
            }],
    ['validate-cc-type', 'Credit card number does not match credit card type.', function(v, elm) {
                // remove credit card number delimiters such as "-" and space
                elm.value = removeDelimiters(elm.value);
                v         = removeDelimiters(v);

                var ccTypeContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_number')) + '_cc_type');
                if (!ccTypeContainer) {
                    return true;
                }
                var ccType = ccTypeContainer.value;

                if (typeof Validation.creditCartTypes.get(ccType) == 'undefined') {
                    return false;
                }

                // Other card type or switch or solo card
                if (Validation.creditCartTypes.get(ccType)[0]==false) {
                    return true;
                }

                // Matched credit card type
                var ccMatchedType = '';

                Validation.creditCartTypes.each(function (pair) {
                    if (pair.value[0] && v.match(pair.value[0])) {
                        ccMatchedType = pair.key;
                        throw $break;
                    }
                });

                if(ccMatchedType != ccType) {
                    return false;
                }

                if (ccTypeContainer.hasClassName('validation-failed') && Validation.isOnChange) {
                    Validation.validate(ccTypeContainer);
                }

                return true;
            }],
     ['validate-cc-type-select', 'Card type does not match credit card number.', function(v, elm) {
                var ccNumberContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_type')) + '_cc_number');
                if (Validation.isOnChange && Validation.get('IsEmpty').test(ccNumberContainer.value)) {
                    return true;
                }
                if (Validation.get('validate-cc-type').test(ccNumberContainer.value, ccNumberContainer)) {
                    Validation.validate(ccNumberContainer);
                }
                return Validation.get('validate-cc-type').test(ccNumberContainer.value, ccNumberContainer);
            }],
     ['validate-cc-exp', 'Incorrect credit card expiration date.', function(v, elm) {
                var ccExpMonth   = v;
                var ccExpYear    = $(elm.id.substr(0,elm.id.indexOf('_expiration')) + '_expiration_yr').value;
                var currentTime  = new Date();
                var currentMonth = currentTime.getMonth() + 1;
                var currentYear  = currentTime.getFullYear();
                if (ccExpMonth < currentMonth && ccExpYear == currentYear) {
                    return false;
                }
                return true;
            }],
     ['validate-cc-cvn', 'Please enter a valid credit card verification number.', function(v, elm) {
                var ccTypeContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_cid')) + '_cc_type');
                if (!ccTypeContainer) {
                    return true;
                }
                var ccType = ccTypeContainer.value;

                if (typeof Validation.creditCartTypes.get(ccType) == 'undefined') {
                    return false;
                }

                var re = Validation.creditCartTypes.get(ccType)[1];

                if (v.match(re)) {
                    return true;
                }

                return false;
            }],
     ['validate-ajax', '', function(v, elm) { return true; }],
     ['validate-data', 'Please use only letters (a-z or A-Z), numbers (0-9) or underscore(_) in this field, first character should be a letter.', function (v) {
                if(v != '' && v) {
                    return /^[A-Za-z]+[A-Za-z0-9_]+$/.test(v);
                }
                return true;
            }],
     ['validate-css-length', 'Please input a valid CSS-length. For example 100px or 77pt or 20em or .5ex or 50%.', function (v) {
                if (v != '' && v) {
                    return /^[0-9\.]+(px|pt|em|ex|%)?$/.test(v) && (!(/\..*\./.test(v))) && !(/\.$/.test(v));
                }
                return true;
            }],
     ['validate-length', 'Text length does not satisfy specified text range.', function (v, elm) {
                var reMax = new RegExp(/^maximum-length-[0-9]+$/);
                var reMin = new RegExp(/^minimum-length-[0-9]+$/);
                var result = true;
                $w(elm.className).each(function(name, index) {
                    if (name.match(reMax) && result) {
                       var length = name.split('-')[2];
                       result = (v.length <= length);
                    }
                    if (name.match(reMin) && result && !Validation.get('IsEmpty').test(v)) {
                        var length = name.split('-')[2];
                        result = (v.length >= length);
                    }
                });
                return result;
            }],
     ['validate-percents', 'Please enter a number lower than 100.', {max:100}],
     ['required-file', 'Please select a file', function(v, elm) {
         var result = !Validation.get('IsEmpty').test(v);
         if (result === false) {
             ovId = elm.id + '_value';
             if ($(ovId)) {
                 result = !Validation.get('IsEmpty').test($(ovId).value);
             }
         }
         return result;
     }],
     ['validate-cc-ukss', 'Please enter issue number or start date for switch/solo card type.', function(v,elm) {
         var endposition;

         if (elm.id.match(/(.)+_cc_issue$/)) {
             endposition = elm.id.indexOf('_cc_issue');
         } else if (elm.id.match(/(.)+_start_month$/)) {
             endposition = elm.id.indexOf('_start_month');
         } else {
             endposition = elm.id.indexOf('_start_year');
         }

         var prefix = elm.id.substr(0,endposition);

         var ccTypeContainer = $(prefix + '_cc_type');

         if (!ccTypeContainer) {
               return true;
         }
         var ccType = ccTypeContainer.value;

         if(['SS','SM','SO'].indexOf(ccType) == -1){
             return true;
         }

         $(prefix + '_cc_issue').advaiceContainer
           = $(prefix + '_start_month').advaiceContainer
           = $(prefix + '_start_year').advaiceContainer
           = $(prefix + '_cc_type_ss_div').down('ul li.adv-container');

         var ccIssue   =  $(prefix + '_cc_issue').value;
         var ccSMonth  =  $(prefix + '_start_month').value;
         var ccSYear   =  $(prefix + '_start_year').value;

         var ccStartDatePresent = (ccSMonth && ccSYear) ? true : false;

         if (!ccStartDatePresent && !ccIssue){
             return false;
         }
         return true;
     }]
]);

function removeDelimiters (v) {
    v = v.replace(/\s/g, '');
    v = v.replace(/\-/g, '');
    return v;
}

function parseNumber(v)
{
    if (typeof v != 'string') {
        return parseFloat(v);
    }

    var isDot  = v.indexOf('.');
    var isComa = v.indexOf(',');

    if (isDot != -1 && isComa != -1) {
        if (isComa > isDot) {
            v = v.replace('.', '').replace(',', '.');
        }
        else {
            v = v.replace(',', '');
        }
    }
    else if (isComa != -1) {
        v = v.replace(',', '.');
    }

    return parseFloat(v);
}

/**
 * Hash with credit card types wich can be simply extended in payment modules
 * 0 - regexp for card number
 * 1 - regexp for cvn
 * 2 - check or not credit card number trough Luhn algorithm by
 *     function validateCreditCard wich you can find above in this file
 */
Validation.creditCartTypes = $H({
//    'SS': [new RegExp('^((6759[0-9]{12})|(5018|5020|5038|6304|6759|6761|6763[0-9]{12,19})|(49[013][1356][0-9]{12})|(6333[0-9]{12})|(6334[0-4]\d{11})|(633110[0-9]{10})|(564182[0-9]{10}))([0-9]{2,3})?$'), new RegExp('^([0-9]{3}|[0-9]{4})?$'), true],
    'SO': [new RegExp('^(6334[5-9]([0-9]{11}|[0-9]{13,14}))|(6767([0-9]{12}|[0-9]{14,15}))$'), new RegExp('^([0-9]{3}|[0-9]{4})?$'), true],
    'SM': [new RegExp('(^(5[0678])[0-9]{11,18}$)|(^(6[^05])[0-9]{11,18}$)|(^(601)[^1][0-9]{9,16}$)|(^(6011)[0-9]{9,11}$)|(^(6011)[0-9]{13,16}$)|(^(65)[0-9]{11,13}$)|(^(65)[0-9]{15,18}$)|(^(49030)[2-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49033)[5-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49110)[1-2]([0-9]{10}$|[0-9]{12,13}$))|(^(49117)[4-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49118)[0-2]([0-9]{10}$|[0-9]{12,13}$))|(^(4936)([0-9]{12}$|[0-9]{14,15}$))'), new RegExp('^([0-9]{3}|[0-9]{4})?$'), true],
    'VI': [new RegExp('^4[0-9]{12}([0-9]{3})?$'), new RegExp('^[0-9]{3}$'), true],
    'MC': [new RegExp('^5[1-5][0-9]{14}$'), new RegExp('^[0-9]{3}$'), true],
    'AE': [new RegExp('^3[47][0-9]{13}$'), new RegExp('^[0-9]{4}$'), true],
    'DI': [new RegExp('^6011[0-9]{12}$'), new RegExp('^[0-9]{3}$'), true],
    'JCB': [new RegExp('^(3[0-9]{15}|(2131|1800)[0-9]{11})$'), new RegExp('^[0-9]{4}$'), true],
    'OT': [false, new RegExp('^([0-9]{3}|[0-9]{4})?$'), false]
});

// script.aculo.us builder.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008

// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

var Builder = {
  NODEMAP: {
    AREA: 'map',
    CAPTION: 'table',
    COL: 'table',
    COLGROUP: 'table',
    LEGEND: 'fieldset',
    OPTGROUP: 'select',
    OPTION: 'select',
    PARAM: 'object',
    TBODY: 'table',
    TD: 'table',
    TFOOT: 'table',
    TH: 'table',
    THEAD: 'table',
    TR: 'table'
  },
  // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
  //       due to a Firefox bug
  node: function(elementName) {
    elementName = elementName.toUpperCase();

    // try innerHTML approach
    var parentTag = this.NODEMAP[elementName] || 'div';
    var parentElement = document.createElement(parentTag);
    try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
      parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
    } catch(e) {}
    var element = parentElement.firstChild || null;

    // see if browser added wrapping tags
    if(element && (element.tagName.toUpperCase() != elementName))
      element = element.getElementsByTagName(elementName)[0];

    // fallback to createElement approach
    if(!element) element = document.createElement(elementName);

    // abort if nothing could be created
    if(!element) return;

    // attributes (or text)
    if(arguments[1])
      if(this._isStringOrNumber(arguments[1]) ||
        (arguments[1] instanceof Array) ||
        arguments[1].tagName) {
          this._children(element, arguments[1]);
        } else {
          var attrs = this._attributes(arguments[1]);
          if(attrs.length) {
            try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
              parentElement.innerHTML = "<" +elementName + " " +
                attrs + "></" + elementName + ">";
            } catch(e) {}
            element = parentElement.firstChild || null;
            // workaround firefox 1.0.X bug
            if(!element) {
              element = document.createElement(elementName);
              for(attr in arguments[1])
                element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
            }
            if(element.tagName.toUpperCase() != elementName)
              element = parentElement.getElementsByTagName(elementName)[0];
          }
        }

    // text, or array of children
    if(arguments[2])
      this._children(element, arguments[2]);

     return $(element);
  },
  _text: function(text) {
     return document.createTextNode(text);
  },

  ATTR_MAP: {
    'className': 'class',
    'htmlFor': 'for'
  },

  _attributes: function(attributes) {
    var attrs = [];
    for(attribute in attributes)
      attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
          '="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');
    return attrs.join(" ");
  },
  _children: function(element, children) {
    if(children.tagName) {
      element.appendChild(children);
      return;
    }
    if(typeof children=='object') { // array can hold nodes and text
      children.flatten().each( function(e) {
        if(typeof e=='object')
          element.appendChild(e);
        else
          if(Builder._isStringOrNumber(e))
            element.appendChild(Builder._text(e));
      });
    } else
      if(Builder._isStringOrNumber(children))
        element.appendChild(Builder._text(children));
  },
  _isStringOrNumber: function(param) {
    return(typeof param=='string' || typeof param=='number');
  },
  build: function(html) {
    var element = this.node('div');
    $(element).update(html.strip());
    return element.down();
  },
  dump: function(scope) {
    if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope

    var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
      "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
      "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
      "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
      "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
      "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);

    tags.each( function(tag){
      scope[tag] = function() {
        return Builder.node.apply(Builder, [tag].concat($A(arguments)));
      };
    });
  }
};
// script.aculo.us effects.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008

// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// Contributors:
//  Justin Palmer (http://encytemedia.com/)
//  Mark Pilgrim (http://diveintomark.org/)
//  Martin Bialasinki
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

// converts rgb() and #xxx to #xxxxxx format,
// returns self (or first argument) if not convertable
String.prototype.parseColor = function() {
  var color = '#';
  if (this.slice(0,4) == 'rgb(') {
    var cols = this.slice(4,this.length-1).split(',');
    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);
  } else {
    if (this.slice(0,1) == '#') {
      if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
      if (this.length==7) color = this.toLowerCase();
    }
  }
  return (color.length==7 ? color : (arguments[0] || this));
};

/*--------------------------------------------------------------------------*/

Element.collectTextNodes = function(element) {
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue :
      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
  }).flatten().join('');
};

Element.collectTextNodesIgnoreClass = function(element, className) {
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue :
      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
        Element.collectTextNodesIgnoreClass(node, className) : ''));
  }).flatten().join('');
};

Element.setContentZoom = function(element, percent) {
  element = $(element);
  element.setStyle({fontSize: (percent/100) + 'em'});
  if (Prototype.Browser.WebKit) window.scrollBy(0,0);
  return element;
};

Element.getInlineOpacity = function(element){
  return $(element).style.opacity || '';
};

Element.forceRerendering = function(element) {
  try {
    element = $(element);
    var n = document.createTextNode(' ');
    element.appendChild(n);
    element.removeChild(n);
  } catch(e) { }
};

/*--------------------------------------------------------------------------*/

var Effect = {
  _elementDoesNotExistError: {
    name: 'ElementDoesNotExistError',
    message: 'The specified DOM element does not exist, but is required for this effect to operate'
  },
  Transitions: {
    linear: Prototype.K,
    sinoidal: function(pos) {
      return (-Math.cos(pos*Math.PI)/2) + .5;
    },
    reverse: function(pos) {
      return 1-pos;
    },
    flicker: function(pos) {
      var pos = ((-Math.cos(pos*Math.PI)/4) + .75) + Math.random()/4;
      return pos > 1 ? 1 : pos;
    },
    wobble: function(pos) {
      return (-Math.cos(pos*Math.PI*(9*pos))/2) + .5;
    },
    pulse: function(pos, pulses) {
      return (-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2) + .5;
    },
    spring: function(pos) {
      return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));
    },
    none: function(pos) {
      return 0;
    },
    full: function(pos) {
      return 1;
    }
  },
  DefaultOptions: {
    duration:   1.0,   // seconds
    fps:        100,   // 100= assume 66fps max.
    sync:       false, // true for combining
    from:       0.0,
    to:         1.0,
    delay:      0.0,
    queue:      'parallel'
  },
  tagifyText: function(element) {
    var tagifyStyle = 'position:relative';
    if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';

    element = $(element);
    $A(element.childNodes).each( function(child) {
      if (child.nodeType==3) {
        child.nodeValue.toArray().each( function(character) {
          element.insertBefore(
            new Element('span', {style: tagifyStyle}).update(
              character == ' ' ? String.fromCharCode(160) : character),
              child);
        });
        Element.remove(child);
      }
    });
  },
  multiple: function(element, effect) {
    var elements;
    if (((typeof element == 'object') ||
        Object.isFunction(element)) &&
       (element.length))
      elements = element;
    else
      elements = $(element).childNodes;

    var options = Object.extend({
      speed: 0.1,
      delay: 0.0
    }, arguments[2] || { });
    var masterDelay = options.delay;

    $A(elements).each( function(element, index) {
      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
    });
  },
  PAIRS: {
    'slide':  ['SlideDown','SlideUp'],
    'blind':  ['BlindDown','BlindUp'],
    'appear': ['Appear','Fade']
  },
  toggle: function(element, effect) {
    element = $(element);
    effect = (effect || 'appear').toLowerCase();
    var options = Object.extend({
      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
    }, arguments[2] || { });
    Effect[element.visible() ?
      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
  }
};

Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;

/* ------------- core effects ------------- */

Effect.ScopedQueue = Class.create(Enumerable, {
  initialize: function() {
    this.effects  = [];
    this.interval = null;
  },
  _each: function(iterator) {
    this.effects._each(iterator);
  },
  add: function(effect) {
    var timestamp = new Date().getTime();

    var position = Object.isString(effect.options.queue) ?
      effect.options.queue : effect.options.queue.position;

    switch(position) {
      case 'front':
        // move unstarted effects after this effect
        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
            e.startOn  += effect.finishOn;
            e.finishOn += effect.finishOn;
          });
        break;
      case 'with-last':
        timestamp = this.effects.pluck('startOn').max() || timestamp;
        break;
      case 'end':
        // start effect after last queued effect has finished
        timestamp = this.effects.pluck('finishOn').max() || timestamp;
        break;
    }

    effect.startOn  += timestamp;
    effect.finishOn += timestamp;

    if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
      this.effects.push(effect);

    if (!this.interval)
      this.interval = setInterval(this.loop.bind(this), 15);
  },
  remove: function(effect) {
    this.effects = this.effects.reject(function(e) { return e==effect });
    if (this.effects.length == 0) {
      clearInterval(this.interval);
      this.interval = null;
    }
  },
  loop: function() {
    var timePos = new Date().getTime();
    for(var i=0, len=this.effects.length;i<len;i++)
      this.effects[i] && this.effects[i].loop(timePos);
  }
});

Effect.Queues = {
  instances: $H(),
  get: function(queueName) {
    if (!Object.isString(queueName)) return queueName;

    return this.instances.get(queueName) ||
      this.instances.set(queueName, new Effect.ScopedQueue());
  }
};
Effect.Queue = Effect.Queues.get('global');

Effect.Base = Class.create({
  position: null,
  start: function(options) {
    function codeForEvent(options,eventName){
      return (
        (options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') +
        (options[eventName] ? 'this.options.'+eventName+'(this);' : '')
      );
    }
    if (options && options.transition === false) options.transition = Effect.Transitions.linear;
    this.options      = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
    this.currentFrame = 0;
    this.state        = 'idle';
    this.startOn      = this.options.delay*1000;
    this.finishOn     = this.startOn+(this.options.duration*1000);
    this.fromToDelta  = this.options.to-this.options.from;
    this.totalTime    = this.finishOn-this.startOn;
    this.totalFrames  = this.options.fps*this.options.duration;

    this.render = (function() {
      function dispatch(effect, eventName) {
        if (effect.options[eventName + 'Internal'])
          effect.options[eventName + 'Internal'](effect);
        if (effect.options[eventName])
          effect.options[eventName](effect);
      }

      return function(pos) {
        if (this.state === "idle") {
          this.state = "running";
          dispatch(this, 'beforeSetup');
          if (this.setup) this.setup();
          dispatch(this, 'afterSetup');
        }
        if (this.state === "running") {
          pos = (this.options.transition(pos) * this.fromToDelta) + this.options.from;
          this.position = pos;
          dispatch(this, 'beforeUpdate');
          if (this.update) this.update(pos);
          dispatch(this, 'afterUpdate');
        }
      };
    })();

    this.event('beforeStart');
    if (!this.options.sync)
      Effect.Queues.get(Object.isString(this.options.queue) ?
        'global' : this.options.queue.scope).add(this);
  },
  loop: function(timePos) {
    if (timePos >= this.startOn) {
      if (timePos >= this.finishOn) {
        this.render(1.0);
        this.cancel();
        this.event('beforeFinish');
        if (this.finish) this.finish();
        this.event('afterFinish');
        return;
      }
      var pos   = (timePos - this.startOn) / this.totalTime,
          frame = (pos * this.totalFrames).round();
      if (frame > this.currentFrame) {
        this.render(pos);
        this.currentFrame = frame;
      }
    }
  },
  cancel: function() {
    if (!this.options.sync)
      Effect.Queues.get(Object.isString(this.options.queue) ?
        'global' : this.options.queue.scope).remove(this);
    this.state = 'finished';
  },
  event: function(eventName) {
    if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
    if (this.options[eventName]) this.options[eventName](this);
  },
  inspect: function() {
    var data = $H();
    for(property in this)
      if (!Object.isFunction(this[property])) data.set(property, this[property]);
    return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
  }
});

Effect.Parallel = Class.create(Effect.Base, {
  initialize: function(effects) {
    this.effects = effects || [];
    this.start(arguments[1]);
  },
  update: function(position) {
    this.effects.invoke('render', position);
  },
  finish: function(position) {
    this.effects.each( function(effect) {
      effect.render(1.0);
      effect.cancel();
      effect.event('beforeFinish');
      if (effect.finish) effect.finish(position);
      effect.event('afterFinish');
    });
  }
});

Effect.Tween = Class.create(Effect.Base, {
  initialize: function(object, from, to) {
    object = Object.isString(object) ? $(object) : object;
    var args = $A(arguments), method = args.last(),
      options = args.length == 5 ? args[3] : null;
    this.method = Object.isFunction(method) ? method.bind(object) :
      Object.isFunction(object[method]) ? object[method].bind(object) :
      function(value) { object[method] = value };
    this.start(Object.extend({ from: from, to: to }, options || { }));
  },
  update: function(position) {
    this.method(position);
  }
});

Effect.Event = Class.create(Effect.Base, {
  initialize: function() {
    this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
  },
  update: Prototype.emptyFunction
});

Effect.Opacity = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    // make this work on IE on elements without 'layout'
    if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
      this.element.setStyle({zoom: 1});
    var options = Object.extend({
      from: this.element.getOpacity() || 0.0,
      to:   1.0
    }, arguments[1] || { });
    this.start(options);
  },
  update: function(position) {
    this.element.setOpacity(position);
  }
});

Effect.Move = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      x:    0,
      y:    0,
      mode: 'relative'
    }, arguments[1] || { });
    this.start(options);
  },
  setup: function() {
    this.element.makePositioned();
    this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
    this.originalTop  = parseFloat(this.element.getStyle('top')  || '0');
    if (this.options.mode == 'absolute') {
      this.options.x = this.options.x - this.originalLeft;
      this.options.y = this.options.y - this.originalTop;
    }
  },
  update: function(position) {
    this.element.setStyle({
      left: (this.options.x  * position + this.originalLeft).round() + 'px',
      top:  (this.options.y  * position + this.originalTop).round()  + 'px'
    });
  }
});

// for backwards compatibility
Effect.MoveBy = function(element, toTop, toLeft) {
  return new Effect.Move(element,
    Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
};

Effect.Scale = Class.create(Effect.Base, {
  initialize: function(element, percent) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      scaleX: true,
      scaleY: true,
      scaleContent: true,
      scaleFromCenter: false,
      scaleMode: 'box',        // 'box' or 'contents' or { } with provided values
      scaleFrom: 100.0,
      scaleTo:   percent
    }, arguments[2] || { });
    this.start(options);
  },
  setup: function() {
    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
    this.elementPositioning = this.element.getStyle('position');

    this.originalStyle = { };
    ['top','left','width','height','fontSize'].each( function(k) {
      this.originalStyle[k] = this.element.style[k];
    }.bind(this));

    this.originalTop  = this.element.offsetTop;
    this.originalLeft = this.element.offsetLeft;

    var fontSize = this.element.getStyle('font-size') || '100%';
    ['em','px','%','pt'].each( function(fontSizeType) {
      if (fontSize.indexOf(fontSizeType)>0) {
        this.fontSize     = parseFloat(fontSize);
        this.fontSizeType = fontSizeType;
      }
    }.bind(this));

    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;

    this.dims = null;
    if (this.options.scaleMode=='box')
      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
    if (/^content/.test(this.options.scaleMode))
      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
    if (!this.dims)
      this.dims = [this.options.scaleMode.originalHeight,
                   this.options.scaleMode.originalWidth];
  },
  update: function(position) {
    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
    if (this.options.scaleContent && this.fontSize)
      this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
  },
  finish: function(position) {
    if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
  },
  setDimensions: function(height, width) {
    var d = { };
    if (this.options.scaleX) d.width = width.round() + 'px';
    if (this.options.scaleY) d.height = height.round() + 'px';
    if (this.options.scaleFromCenter) {
      var topd  = (height - this.dims[0])/2;
      var leftd = (width  - this.dims[1])/2;
      if (this.elementPositioning == 'absolute') {
        if (this.options.scaleY) d.top = this.originalTop-topd + 'px';
        if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
      } else {
        if (this.options.scaleY) d.top = -topd + 'px';
        if (this.options.scaleX) d.left = -leftd + 'px';
      }
    }
    this.element.setStyle(d);
  }
});

Effect.Highlight = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
    this.start(options);
  },
  setup: function() {
    // Prevent executing on elements not in the layout flow
    if (this.element.getStyle('display')=='none') { this.cancel(); return; }
    // Disable background image during the effect
    this.oldStyle = { };
    if (!this.options.keepBackgroundImage) {
      this.oldStyle.backgroundImage = this.element.getStyle('background-image');
      this.element.setStyle({backgroundImage: 'none'});
    }
    if (!this.options.endcolor)
      this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
    if (!this.options.restorecolor)
      this.options.restorecolor = this.element.getStyle('background-color');
    // init color calculations
    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
  },
  update: function(position) {
    this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
      return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
  },
  finish: function() {
    this.element.setStyle(Object.extend(this.oldStyle, {
      backgroundColor: this.options.restorecolor
    }));
  }
});

Effect.ScrollTo = function(element) {
  var options = arguments[1] || { },
  scrollOffsets = document.viewport.getScrollOffsets(),
  elementOffsets = $(element).cumulativeOffset();

  if (options.offset) elementOffsets[1] += options.offset;

  return new Effect.Tween(null,
    scrollOffsets.top,
    elementOffsets[1],
    options,
    function(p){ scrollTo(scrollOffsets.left, p.round()); }
  );
};

/* ------------- combination effects ------------- */

Effect.Fade = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  var options = Object.extend({
    from: element.getOpacity() || 1.0,
    to:   0.0,
    afterFinishInternal: function(effect) {
      if (effect.options.to!=0) return;
      effect.element.hide().setStyle({opacity: oldOpacity});
    }
  }, arguments[1] || { });
  return new Effect.Opacity(element,options);
};

Effect.Appear = function(element) {
  element = $(element);
  var options = Object.extend({
  from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
  to:   1.0,
  // force Safari to render floated elements properly
  afterFinishInternal: function(effect) {
    effect.element.forceRerendering();
  },
  beforeSetup: function(effect) {
    effect.element.setOpacity(effect.options.from).show();
  }}, arguments[1] || { });
  return new Effect.Opacity(element,options);
};

Effect.Puff = function(element) {
  element = $(element);
  var oldStyle = {
    opacity: element.getInlineOpacity(),
    position: element.getStyle('position'),
    top:  element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height
  };
  return new Effect.Parallel(
   [ new Effect.Scale(element, 200,
      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
     Object.extend({ duration: 1.0,
      beforeSetupInternal: function(effect) {
        Position.absolutize(effect.effects[0].element);
      },
      afterFinishInternal: function(effect) {
         effect.effects[0].element.hide().setStyle(oldStyle); }
     }, arguments[1] || { })
   );
};

Effect.BlindUp = function(element) {
  element = $(element);
  element.makeClipping();
  return new Effect.Scale(element, 0,
    Object.extend({ scaleContent: false,
      scaleX: false,
      restoreAfterFinish: true,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping();
      }
    }, arguments[1] || { })
  );
};

Effect.BlindDown = function(element) {
  element = $(element);
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({
    scaleContent: false,
    scaleX: false,
    scaleFrom: 0,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makeClipping().setStyle({height: '0px'}).show();
    },
    afterFinishInternal: function(effect) {
      effect.element.undoClipping();
    }
  }, arguments[1] || { }));
};

Effect.SwitchOff = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  return new Effect.Appear(element, Object.extend({
    duration: 0.4,
    from: 0,
    transition: Effect.Transitions.flicker,
    afterFinishInternal: function(effect) {
      new Effect.Scale(effect.element, 1, {
        duration: 0.3, scaleFromCenter: true,
        scaleX: false, scaleContent: false, restoreAfterFinish: true,
        beforeSetup: function(effect) {
          effect.element.makePositioned().makeClipping();
        },
        afterFinishInternal: function(effect) {
          effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
        }
      });
    }
  }, arguments[1] || { }));
};

Effect.DropOut = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left'),
    opacity: element.getInlineOpacity() };
  return new Effect.Parallel(
    [ new Effect.Move(element, {x: 0, y: 100, sync: true }),
      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
    Object.extend(
      { duration: 0.5,
        beforeSetup: function(effect) {
          effect.effects[0].element.makePositioned();
        },
        afterFinishInternal: function(effect) {
          effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
        }
      }, arguments[1] || { }));
};

Effect.Shake = function(element) {
  element = $(element);
  var options = Object.extend({
    distance: 20,
    duration: 0.5
  }, arguments[1] || {});
  var distance = parseFloat(options.distance);
  var split = parseFloat(options.duration) / 10.0;
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left') };
    return new Effect.Move(element,
      { x:  distance, y: 0, duration: split, afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
        effect.element.undoPositioned().setStyle(oldStyle);
  }}); }}); }}); }}); }}); }});
};

Effect.SlideDown = function(element) {
  element = $(element).cleanWhitespace();
  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
  var oldInnerBottom = element.down().getStyle('bottom');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({
    scaleContent: false,
    scaleX: false,
    scaleFrom: window.opera ? 0 : 1,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if (window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().setStyle({height: '0px'}).show();
    },
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' });
    },
    afterFinishInternal: function(effect) {
      effect.element.undoClipping().undoPositioned();
      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
    }, arguments[1] || { })
  );
};

Effect.SlideUp = function(element) {
  element = $(element).cleanWhitespace();
  var oldInnerBottom = element.down().getStyle('bottom');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, window.opera ? 0 : 1,
   Object.extend({ scaleContent: false,
    scaleX: false,
    scaleMode: 'box',
    scaleFrom: 100,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if (window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().show();
    },
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' });
    },
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping().undoPositioned();
      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
    }
   }, arguments[1] || { })
  );
};

// Bug in opera makes the TD containing this element expand for a instance after finish
Effect.Squish = function(element) {
  return new Effect.Scale(element, window.opera ? 1 : 0, {
    restoreAfterFinish: true,
    beforeSetup: function(effect) {
      effect.element.makeClipping();
    },
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping();
    }
  });
};

Effect.Grow = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.full
  }, arguments[1] || { });
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();
  var initialMoveX, initialMoveY;
  var moveX, moveY;

  switch (options.direction) {
    case 'top-left':
      initialMoveX = initialMoveY = moveX = moveY = 0;
      break;
    case 'top-right':
      initialMoveX = dims.width;
      initialMoveY = moveY = 0;
      moveX = -dims.width;
      break;
    case 'bottom-left':
      initialMoveX = moveX = 0;
      initialMoveY = dims.height;
      moveY = -dims.height;
      break;
    case 'bottom-right':
      initialMoveX = dims.width;
      initialMoveY = dims.height;
      moveX = -dims.width;
      moveY = -dims.height;
      break;
    case 'center':
      initialMoveX = dims.width / 2;
      initialMoveY = dims.height / 2;
      moveX = -dims.width / 2;
      moveY = -dims.height / 2;
      break;
  }

  return new Effect.Move(element, {
    x: initialMoveX,
    y: initialMoveY,
    duration: 0.01,
    beforeSetup: function(effect) {
      effect.element.hide().makeClipping().makePositioned();
    },
    afterFinishInternal: function(effect) {
      new Effect.Parallel(
        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
          new Effect.Scale(effect.element, 100, {
            scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
        ], Object.extend({
             beforeSetup: function(effect) {
               effect.effects[0].element.setStyle({height: '0px'}).show();
             },
             afterFinishInternal: function(effect) {
               effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);
             }
           }, options)
      );
    }
  });
};

Effect.Shrink = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.none
  }, arguments[1] || { });
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();
  var moveX, moveY;

  switch (options.direction) {
    case 'top-left':
      moveX = moveY = 0;
      break;
    case 'top-right':
      moveX = dims.width;
      moveY = 0;
      break;
    case 'bottom-left':
      moveX = 0;
      moveY = dims.height;
      break;
    case 'bottom-right':
      moveX = dims.width;
      moveY = dims.height;
      break;
    case 'center':
      moveX = dims.width / 2;
      moveY = dims.height / 2;
      break;
  }

  return new Effect.Parallel(
    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
    ], Object.extend({
         beforeStartInternal: function(effect) {
           effect.effects[0].element.makePositioned().makeClipping();
         },
         afterFinishInternal: function(effect) {
           effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
       }, options)
  );
};

Effect.Pulsate = function(element) {
  element = $(element);
  var options    = arguments[1] || { },
    oldOpacity = element.getInlineOpacity(),
    transition = options.transition || Effect.Transitions.linear,
    reverser   = function(pos){
      return 1 - transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2) + .5);
    };

  return new Effect.Opacity(element,
    Object.extend(Object.extend({  duration: 2.0, from: 0,
      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
    }, options), {transition: reverser}));
};

Effect.Fold = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height };
  element.makeClipping();
  return new Effect.Scale(element, 5, Object.extend({
    scaleContent: false,
    scaleX: false,
    afterFinishInternal: function(effect) {
    new Effect.Scale(element, 1, {
      scaleContent: false,
      scaleY: false,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping().setStyle(oldStyle);
      } });
  }}, arguments[1] || { }));
};

Effect.Morph = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      style: { }
    }, arguments[1] || { });

    if (!Object.isString(options.style)) this.style = $H(options.style);
    else {
      if (options.style.include(':'))
        this.style = options.style.parseStyle();
      else {
        this.element.addClassName(options.style);
        this.style = $H(this.element.getStyles());
        this.element.removeClassName(options.style);
        var css = this.element.getStyles();
        this.style = this.style.reject(function(style) {
          return style.value == css[style.key];
        });
        options.afterFinishInternal = function(effect) {
          effect.element.addClassName(effect.options.style);
          effect.transforms.each(function(transform) {
            effect.element.style[transform.style] = '';
          });
        };
      }
    }
    this.start(options);
  },

  setup: function(){
    function parseColor(color){
      if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
      color = color.parseColor();
      return $R(0,2).map(function(i){
        return parseInt( color.slice(i*2+1,i*2+3), 16 );
      });
    }
    this.transforms = this.style.map(function(pair){
      var property = pair[0], value = pair[1], unit = null;

      if (value.parseColor('#zzzzzz') != '#zzzzzz') {
        value = value.parseColor();
        unit  = 'color';
      } else if (property == 'opacity') {
        value = parseFloat(value);
        if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
          this.element.setStyle({zoom: 1});
      } else if (Element.CSS_LENGTH.test(value)) {
          var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
          value = parseFloat(components[1]);
          unit = (components.length == 3) ? components[2] : null;
      }

      var originalValue = this.element.getStyle(property);
      return {
        style: property.camelize(),
        originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0),
        targetValue: unit=='color' ? parseColor(value) : value,
        unit: unit
      };
    }.bind(this)).reject(function(transform){
      return (
        (transform.originalValue == transform.targetValue) ||
        (
          transform.unit != 'color' &&
          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
        )
      );
    });
  },
  update: function(position) {
    var style = { }, transform, i = this.transforms.length;
    while(i--)
      style[(transform = this.transforms[i]).style] =
        transform.unit=='color' ? '#'+
          (Math.round(transform.originalValue[0]+
            (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
          (Math.round(transform.originalValue[1]+
            (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
          (Math.round(transform.originalValue[2]+
            (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
        (transform.originalValue +
          (transform.targetValue - transform.originalValue) * position).toFixed(3) +
            (transform.unit === null ? '' : transform.unit);
    this.element.setStyle(style, true);
  }
});

Effect.Transform = Class.create({
  initialize: function(tracks){
    this.tracks  = [];
    this.options = arguments[1] || { };
    this.addTracks(tracks);
  },
  addTracks: function(tracks){
    tracks.each(function(track){
      track = $H(track);
      var data = track.values().first();
      this.tracks.push($H({
        ids:     track.keys().first(),
        effect:  Effect.Morph,
        options: { style: data }
      }));
    }.bind(this));
    return this;
  },
  play: function(){
    return new Effect.Parallel(
      this.tracks.map(function(track){
        var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options');
        var elements = [$(ids) || $$(ids)].flatten();
        return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) });
      }).flatten(),
      this.options
    );
  }
});

Element.CSS_PROPERTIES = $w(
  'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' +
  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
  'fontSize fontWeight height left letterSpacing lineHeight ' +
  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
  'right textIndent top width wordSpacing zIndex');

Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;

String.__parseStyleElement = document.createElement('div');
String.prototype.parseStyle = function(){
  var style, styleRules = $H();
  if (Prototype.Browser.WebKit)
    style = new Element('div',{style:this}).style;
  else {
    String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
    style = String.__parseStyleElement.childNodes[0].style;
  }

  Element.CSS_PROPERTIES.each(function(property){
    if (style[property]) styleRules.set(property, style[property]);
  });

  if (Prototype.Browser.IE && this.include('opacity'))
    styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);

  return styleRules;
};

if (document.defaultView && document.defaultView.getComputedStyle) {
  Element.getStyles = function(element) {
    var css = document.defaultView.getComputedStyle($(element), null);
    return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
      styles[property] = css[property];
      return styles;
    });
  };
} else {
  Element.getStyles = function(element) {
    element = $(element);
    var css = element.currentStyle, styles;
    styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) {
      results[property] = css[property];
      return results;
    });
    if (!styles.opacity) styles.opacity = element.getOpacity();
    return styles;
  };
}

Effect.Methods = {
  morph: function(element, style) {
    element = $(element);
    new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
    return element;
  },
  visualEffect: function(element, effect, options) {
    element = $(element);
    var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
    new Effect[klass](element, options);
    return element;
  },
  highlight: function(element, options) {
    element = $(element);
    new Effect.Highlight(element, options);
    return element;
  }
};

$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
  'pulsate shake puff squish switchOff dropOut').each(
  function(effect) {
    Effect.Methods[effect] = function(element, options){
      element = $(element);
      Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
      return element;
    };
  }
);

$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(
  function(f) { Effect.Methods[f] = Element[f]; }
);

Element.addMethods(Effect.Methods);
// script.aculo.us dragdrop.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008

// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//           (c) 2005-2008 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

if(Object.isUndefined(Effect))
  throw("dragdrop.js requires including script.aculo.us' effects.js library");

var Droppables = {
  drops: [],

  remove: function(element) {
    this.drops = this.drops.reject(function(d) { return d.element==$(element) });
  },

  add: function(element) {
    element = $(element);
    var options = Object.extend({
      greedy:     true,
      hoverclass: null,
      tree:       false
    }, arguments[1] || { });

    // cache containers
    if(options.containment) {
      options._containers = [];
      var containment = options.containment;
      if(Object.isArray(containment)) {
        containment.each( function(c) { options._containers.push($(c)) });
      } else {
        options._containers.push($(containment));
      }
    }

    if(options.accept) options.accept = [options.accept].flatten();

    Element.makePositioned(element); // fix IE
    options.element = element;

    this.drops.push(options);
  },

  findDeepestChild: function(drops) {
    deepest = drops[0];

    for (i = 1; i < drops.length; ++i)
      if (Element.isParent(drops[i].element, deepest.element))
        deepest = drops[i];

    return deepest;
  },

  isContained: function(element, drop) {
    var containmentNode;
    if(drop.tree) {
      containmentNode = element.treeNode;
    } else {
      containmentNode = element.parentNode;
    }
    return drop._containers.detect(function(c) { return containmentNode == c });
  },

  isAffected: function(point, element, drop) {
    return (
      (drop.element!=element) &&
      ((!drop._containers) ||
        this.isContained(element, drop)) &&
      ((!drop.accept) ||
        (Element.classNames(element).detect(
          function(v) { return drop.accept.include(v) } ) )) &&
      Position.within(drop.element, point[0], point[1]) );
  },

  deactivate: function(drop) {
    if(drop.hoverclass)
      Element.removeClassName(drop.element, drop.hoverclass);
    this.last_active = null;
  },

  activate: function(drop) {
    if(drop.hoverclass)
      Element.addClassName(drop.element, drop.hoverclass);
    this.last_active = drop;
  },

  show: function(point, element) {
    if(!this.drops.length) return;
    var drop, affected = [];

    this.drops.each( function(drop) {
      if(Droppables.isAffected(point, element, drop))
        affected.push(drop);
    });

    if(affected.length>0)
      drop = Droppables.findDeepestChild(affected);

    if(this.last_active && this.last_active != drop) this.deactivate(this.last_active);
    if (drop) {
      Position.within(drop.element, point[0], point[1]);
      if(drop.onHover)
        drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));

      if (drop != this.last_active) Droppables.activate(drop);
    }
  },

  fire: function(event, element) {
    if(!this.last_active) return;
    Position.prepare();

    if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
      if (this.last_active.onDrop) {
        this.last_active.onDrop(element, this.last_active.element, event);
        return true;
      }
  },

  reset: function() {
    if(this.last_active)
      this.deactivate(this.last_active);
  }
};

var Draggables = {
  drags: [],
  observers: [],

  register: function(draggable) {
    if(this.drags.length == 0) {
      this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
      this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
      this.eventKeypress  = this.keyPress.bindAsEventListener(this);

      Event.observe(document, "mouseup", this.eventMouseUp);
      Event.observe(draggable.element, "mousemove", this.eventMouseMove);
      Event.observe(document, "keypress", this.eventKeypress);
    }
    this.drags.push(draggable);
  },

  unregister: function(draggable) {
    this.drags = this.drags.reject(function(d) { return d==draggable });
    if(this.drags.length == 0) {
      Event.stopObserving(document, "mouseup", this.eventMouseUp);
      Event.stopObserving(draggable.element, "mousemove", this.eventMouseMove);
      Event.stopObserving(document, "keypress", this.eventKeypress);
    }
  },

  activate: function(draggable) {
    if(draggable.options.delay) {
      this._timeout = setTimeout(function() {
        Draggables._timeout = null;
        window.focus();
        Draggables.activeDraggable = draggable;
      }.bind(this), draggable.options.delay);
    } else {
      window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
      this.activeDraggable = draggable;
    }
  },

  deactivate: function() {
    this.activeDraggable = null;
  },

  updateDrag: function(event) {
    if(!this.activeDraggable) return;
    var pointer = [Event.pointerX(event), Event.pointerY(event)];
    // Mozilla-based browsers fire successive mousemove events with
    // the same coordinates, prevent needless redrawing (moz bug?)
    if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
    this._lastPointer = pointer;

    this.activeDraggable.updateDrag(event, pointer);
  },

  endDrag: function(event) {
    if(this._timeout) {
      clearTimeout(this._timeout);
      this._timeout = null;
    }
    if(!this.activeDraggable) return;
    this._lastPointer = null;
    this.activeDraggable.endDrag(event);
    this.activeDraggable = null;
  },

  keyPress: function(event) {
    if(this.activeDraggable)
      this.activeDraggable.keyPress(event);
  },

  addObserver: function(observer) {
    this.observers.push(observer);
    this._cacheObserverCallbacks();
  },

  removeObserver: function(element) {  // element instead of observer fixes mem leaks
    this.observers = this.observers.reject( function(o) { return o.element==element });
    this._cacheObserverCallbacks();
  },

  notify: function(eventName, draggable, event) {  // 'onStart', 'onEnd', 'onDrag'
    if(this[eventName+'Count'] > 0)
      this.observers.each( function(o) {
        if(o[eventName]) o[eventName](eventName, draggable, event);
      });
    if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
  },

  _cacheObserverCallbacks: function() {
    ['onStart','onEnd','onDrag'].each( function(eventName) {
      Draggables[eventName+'Count'] = Draggables.observers.select(
        function(o) { return o[eventName]; }
      ).length;
    });
  }
};

/*--------------------------------------------------------------------------*/

var Draggable = Class.create({
  initialize: function(element) {
    var defaults = {
      handle: false,
      reverteffect: function(element, top_offset, left_offset) {
        var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
        new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
          queue: {scope:'_draggable', position:'end'}
        });
      },
      endeffect: function(element) {
        var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0;
        new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity,
          queue: {scope:'_draggable', position:'end'},
          afterFinish: function(){
            Draggable._dragging[element] = false
          }
        });
      },
      zindex: 1000,
      revert: false,
      quiet: false,
      scroll: false,
      scrollSensitivity: 20,
      scrollSpeed: 15,
      snap: false,  // false, or xy or [x,y] or function(x,y){ return [x,y] }
      delay: 0
    };

    if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))
      Object.extend(defaults, {
        starteffect: function(element) {
          element._opacity = Element.getOpacity(element);
          Draggable._dragging[element] = true;
          new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});
        }
      });

    var options = Object.extend(defaults, arguments[1] || { });

    this.element = $(element);

    if(options.handle && Object.isString(options.handle))
      this.handle = this.element.down('.'+options.handle, 0);

    if(!this.handle) this.handle = $(options.handle);
    if(!this.handle) this.handle = this.element;

    if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
      options.scroll = $(options.scroll);
      this._isScrollChild = Element.childOf(this.element, options.scroll);
    }

    Element.makePositioned(this.element); // fix IE

    this.options  = options;
    this.dragging = false;

    this.eventMouseDown = this.initDrag.bindAsEventListener(this);
    Event.observe(this.handle, "mousedown", this.eventMouseDown);

    Draggables.register(this);
  },

  destroy: function() {
    Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
    Draggables.unregister(this);
  },

  currentDelta: function() {
    return([
      parseInt(Element.getStyle(this.element,'left') || '0'),
      parseInt(Element.getStyle(this.element,'top') || '0')]);
  },

  initDrag: function(event) {
    if(!Object.isUndefined(Draggable._dragging[this.element]) &&
      Draggable._dragging[this.element]) return;
    if(Event.isLeftClick(event)) {
      // abort on form elements, fixes a Firefox issue
      var src = Event.element(event);
      if((tag_name = src.tagName.toUpperCase()) && (
        tag_name=='INPUT' ||
        tag_name=='SELECT' ||
        tag_name=='OPTION' ||
        tag_name=='BUTTON' ||
        tag_name=='TEXTAREA')) return;

      var pointer = [Event.pointerX(event), Event.pointerY(event)];
      var pos     = Position.cumulativeOffset(this.element);
      this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });

      Draggables.activate(this);
      Event.stop(event);
    }
  },

  startDrag: function(event) {
    this.dragging = true;
    if(!this.delta)
      this.delta = this.currentDelta();

    if(this.options.zindex) {
      this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
      this.element.style.zIndex = this.options.zindex;
    }

    if(this.options.ghosting) {
      this._clone = this.element.cloneNode(true);
      this._originallyAbsolute = (this.element.getStyle('position') == 'absolute');
      if (!this._originallyAbsolute)
        Position.absolutize(this.element);
      this.element.parentNode.insertBefore(this._clone, this.element);
    }

    if(this.options.scroll) {
      if (this.options.scroll == window) {
        var where = this._getWindowScroll(this.options.scroll);
        this.originalScrollLeft = where.left;
        this.originalScrollTop = where.top;
      } else {
        this.originalScrollLeft = this.options.scroll.scrollLeft;
        this.originalScrollTop = this.options.scroll.scrollTop;
      }
    }

    Draggables.notify('onStart', this, event);

    if(this.options.starteffect) this.options.starteffect(this.element);
  },

  updateDrag: function(event, pointer) {
    if(!this.dragging) this.startDrag(event);

    if(!this.options.quiet){
      Position.prepare();
      Droppables.show(pointer, this.element);
    }

    Draggables.notify('onDrag', this, event);

    this.draw(pointer);
    if(this.options.change) this.options.change(this);

    if(this.options.scroll) {
      this.stopScrolling();

      var p;
      if (this.options.scroll == window) {
        with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
      } else {
        p = Position.page(this.options.scroll);
        p[0] += this.options.scroll.scrollLeft + Position.deltaX;
        p[1] += this.options.scroll.scrollTop + Position.deltaY;
        p.push(p[0]+this.options.scroll.offsetWidth);
        p.push(p[1]+this.options.scroll.offsetHeight);
      }
      var speed = [0,0];
      if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
      if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
      if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
      if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
      this.startScrolling(speed);
    }

    // fix AppleWebKit rendering
    if(Prototype.Browser.WebKit) window.scrollBy(0,0);

    Event.stop(event);
  },

  finishDrag: function(event, success) {
    this.dragging = false;

    if(this.options.quiet){
      Position.prepare();
      var pointer = [Event.pointerX(event), Event.pointerY(event)];
      Droppables.show(pointer, this.element);
    }

    if(this.options.ghosting) {
      if (!this._originallyAbsolute)
        Position.relativize(this.element);
      delete this._originallyAbsolute;
      Element.remove(this._clone);
      this._clone = null;
    }

    var dropped = false;
    if(success) {
      dropped = Droppables.fire(event, this.element);
      if (!dropped) dropped = false;
    }
    if(dropped && this.options.onDropped) this.options.onDropped(this.element);
    Draggables.notify('onEnd', this, event);

    var revert = this.options.revert;
    if(revert && Object.isFunction(revert)) revert = revert(this.element);

    var d = this.currentDelta();
    if(revert && this.options.reverteffect) {
      if (dropped == 0 || revert != 'failure')
        this.options.reverteffect(this.element,
          d[1]-this.delta[1], d[0]-this.delta[0]);
    } else {
      this.delta = d;
    }

    if(this.options.zindex)
      this.element.style.zIndex = this.originalZ;

    if(this.options.endeffect)
      this.options.endeffect(this.element);

    Draggables.deactivate(this);
    Droppables.reset();
  },

  keyPress: function(event) {
    if(event.keyCode!=Event.KEY_ESC) return;
    this.finishDrag(event, false);
    Event.stop(event);
  },

  endDrag: function(event) {
    if(!this.dragging) return;
    this.stopScrolling();
    this.finishDrag(event, true);
    Event.stop(event);
  },

  draw: function(point) {
    var pos = Position.cumulativeOffset(this.element);
    if(this.options.ghosting) {
      var r   = Position.realOffset(this.element);
      pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
    }

    var d = this.currentDelta();
    pos[0] -= d[0]; pos[1] -= d[1];

    if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
      pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
      pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
    }

    var p = [0,1].map(function(i){
      return (point[i]-pos[i]-this.offset[i])
    }.bind(this));

    if(this.options.snap) {
      if(Object.isFunction(this.options.snap)) {
        p = this.options.snap(p[0],p[1],this);
      } else {
      if(Object.isArray(this.options.snap)) {
        p = p.map( function(v, i) {
          return (v/this.options.snap[i]).round()*this.options.snap[i] }.bind(this));
      } else {
        p = p.map( function(v) {
          return (v/this.options.snap).round()*this.options.snap }.bind(this));
      }
    }}

    var style = this.element.style;
    if((!this.options.constraint) || (this.options.constraint=='horizontal'))
      style.left = p[0] + "px";
    if((!this.options.constraint) || (this.options.constraint=='vertical'))
      style.top  = p[1] + "px";

    if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
  },

  stopScrolling: function() {
    if(this.scrollInterval) {
      clearInterval(this.scrollInterval);
      this.scrollInterval = null;
      Draggables._lastScrollPointer = null;
    }
  },

  startScrolling: function(speed) {
    if(!(speed[0] || speed[1])) return;
    this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
    this.lastScrolled = new Date();
    this.scrollInterval = setInterval(this.scroll.bind(this), 10);
  },

  scroll: function() {
    var current = new Date();
    var delta = current - this.lastScrolled;
    this.lastScrolled = current;
    if(this.options.scroll == window) {
      with (this._getWindowScroll(this.options.scroll)) {
        if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
          var d = delta / 1000;
          this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
        }
      }
    } else {
      this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
      this.options.scroll.scrollTop  += this.scrollSpeed[1] * delta / 1000;
    }

    Position.prepare();
    Droppables.show(Draggables._lastPointer, this.element);
    Draggables.notify('onDrag', this);
    if (this._isScrollChild) {
      Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
      Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
      Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
      if (Draggables._lastScrollPointer[0] < 0)
        Draggables._lastScrollPointer[0] = 0;
      if (Draggables._lastScrollPointer[1] < 0)
        Draggables._lastScrollPointer[1] = 0;
      this.draw(Draggables._lastScrollPointer);
    }

    if(this.options.change) this.options.change(this);
  },

  _getWindowScroll: function(w) {
    var T, L, W, H;
    with (w.document) {
      if (w.document.documentElement && documentElement.scrollTop) {
        T = documentElement.scrollTop;
        L = documentElement.scrollLeft;
      } else if (w.document.body) {
        T = body.scrollTop;
        L = body.scrollLeft;
      }
      if (w.innerWidth) {
        W = w.innerWidth;
        H = w.innerHeight;
      } else if (w.document.documentElement && documentElement.clientWidth) {
        W = documentElement.clientWidth;
        H = documentElement.clientHeight;
      } else {
        W = body.offsetWidth;
        H = body.offsetHeight;
      }
    }
    return { top: T, left: L, width: W, height: H };
  }
});

Draggable._dragging = { };

/*--------------------------------------------------------------------------*/

var SortableObserver = Class.create({
  initialize: function(element, observer) {
    this.element   = $(element);
    this.observer  = observer;
    this.lastValue = Sortable.serialize(this.element);
  },

  onStart: function() {
    this.lastValue = Sortable.serialize(this.element);
  },

  onEnd: function() {
    Sortable.unmark();
    if(this.lastValue != Sortable.serialize(this.element))
      this.observer(this.element)
  }
});

var Sortable = {
  SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,

  sortables: { },

  _findRootElement: function(element) {
    while (element.tagName.toUpperCase() != "BODY") {
      if(element.id && Sortable.sortables[element.id]) return element;
      element = element.parentNode;
    }
  },

  options: function(element) {
    element = Sortable._findRootElement($(element));
    if(!element) return;
    return Sortable.sortables[element.id];
  },

  destroy: function(element){
    element = $(element);
    var s = Sortable.sortables[element.id];

    if(s) {
      Draggables.removeObserver(s.element);
      s.droppables.each(function(d){ Droppables.remove(d) });
      s.draggables.invoke('destroy');

      delete Sortable.sortables[s.element.id];
    }
  },

  create: function(element) {
    element = $(element);
    var options = Object.extend({
      element:     element,
      tag:         'li',       // assumes li children, override with tag: 'tagname'
      dropOnEmpty: false,
      tree:        false,
      treeTag:     'ul',
      overlap:     'vertical', // one of 'vertical', 'horizontal'
      constraint:  'vertical', // one of 'vertical', 'horizontal', false
      containment: element,    // also takes array of elements (or id's); or false
      handle:      false,      // or a CSS class
      only:        false,
      delay:       0,
      hoverclass:  null,
      ghosting:    false,
      quiet:       false,
      scroll:      false,
      scrollSensitivity: 20,
      scrollSpeed: 15,
      format:      this.SERIALIZE_RULE,

      // these take arrays of elements or ids and can be
      // used for better initialization performance
      elements:    false,
      handles:     false,

      onChange:    Prototype.emptyFunction,
      onUpdate:    Prototype.emptyFunction
    }, arguments[1] || { });

    // clear any old sortable with same element
    this.destroy(element);

    // build options for the draggables
    var options_for_draggable = {
      revert:      true,
      quiet:       options.quiet,
      scroll:      options.scroll,
      scrollSpeed: options.scrollSpeed,
      scrollSensitivity: options.scrollSensitivity,
      delay:       options.delay,
      ghosting:    options.ghosting,
      constraint:  options.constraint,
      handle:      options.handle };

    if(options.starteffect)
      options_for_draggable.starteffect = options.starteffect;

    if(options.reverteffect)
      options_for_draggable.reverteffect = options.reverteffect;
    else
      if(options.ghosting) options_for_draggable.reverteffect = function(element) {
        element.style.top  = 0;
        element.style.left = 0;
      };

    if(options.endeffect)
      options_for_draggable.endeffect = options.endeffect;

    if(options.zindex)
      options_for_draggable.zindex = options.zindex;

    // build options for the droppables
    var options_for_droppable = {
      overlap:     options.overlap,
      containment: options.containment,
      tree:        options.tree,
      hoverclass:  options.hoverclass,
      onHover:     Sortable.onHover
    };

    var options_for_tree = {
      onHover:      Sortable.onEmptyHover,
      overlap:      options.overlap,
      containment:  options.containment,
      hoverclass:   options.hoverclass
    };

    // fix for gecko engine
    Element.cleanWhitespace(element);

    options.draggables = [];
    options.droppables = [];

    // drop on empty handling
    if(options.dropOnEmpty || options.tree) {
      Droppables.add(element, options_for_tree);
      options.droppables.push(element);
    }

    (options.elements || this.findElements(element, options) || []).each( function(e,i) {
      var handle = options.handles ? $(options.handles[i]) :
        (options.handle ? $(e).select('.' + options.handle)[0] : e);
      options.draggables.push(
        new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
      Droppables.add(e, options_for_droppable);
      if(options.tree) e.treeNode = element;
      options.droppables.push(e);
    });

    if(options.tree) {
      (Sortable.findTreeElements(element, options) || []).each( function(e) {
        Droppables.add(e, options_for_tree);
        e.treeNode = element;
        options.droppables.push(e);
      });
    }

    // keep reference
    this.sortables[element.id] = options;

    // for onupdate
    Draggables.addObserver(new SortableObserver(element, options.onUpdate));

  },

  // return all suitable-for-sortable elements in a guaranteed order
  findElements: function(element, options) {
    return Element.findChildren(
      element, options.only, options.tree ? true : false, options.tag);
  },

  findTreeElements: function(element, options) {
    return Element.findChildren(
      element, options.only, options.tree ? true : false, options.treeTag);
  },

  onHover: function(element, dropon, overlap) {
    if(Element.isParent(dropon, element)) return;

    if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
      return;
    } else if(overlap>0.5) {
      Sortable.mark(dropon, 'before');
      if(dropon.previousSibling != element) {
        var oldParentNode = element.parentNode;
        element.style.visibility = "hidden"; // fix gecko rendering
        dropon.parentNode.insertBefore(element, dropon);
        if(dropon.parentNode!=oldParentNode)
          Sortable.options(oldParentNode).onChange(element);
        Sortable.options(dropon.parentNode).onChange(element);
      }
    } else {
      Sortable.mark(dropon, 'after');
      var nextElement = dropon.nextSibling || null;
      if(nextElement != element) {
        var oldParentNode = element.parentNode;
        element.style.visibility = "hidden"; // fix gecko rendering
        dropon.parentNode.insertBefore(element, nextElement);
        if(dropon.parentNode!=oldParentNode)
          Sortable.options(oldParentNode).onChange(element);
        Sortable.options(dropon.parentNode).onChange(element);
      }
    }
  },

  onEmptyHover: function(element, dropon, overlap) {
    var oldParentNode = element.parentNode;
    var droponOptions = Sortable.options(dropon);

    if(!Element.isParent(dropon, element)) {
      var index;

      var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
      var child = null;

      if(children) {
        var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);

        for (index = 0; index < children.length; index += 1) {
          if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
            offset -= Element.offsetSize (children[index], droponOptions.overlap);
          } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
            child = index + 1 < children.length ? children[index + 1] : null;
            break;
          } else {
            child = children[index];
            break;
          }
        }
      }

      dropon.insertBefore(element, child);

      Sortable.options(oldParentNode).onChange(element);
      droponOptions.onChange(element);
    }
  },

  unmark: function() {
    if(Sortable._marker) Sortable._marker.hide();
  },

  mark: function(dropon, position) {
    // mark on ghosting only
    var sortable = Sortable.options(dropon.parentNode);
    if(sortable && !sortable.ghosting) return;

    if(!Sortable._marker) {
      Sortable._marker =
        ($('dropmarker') || Element.extend(document.createElement('DIV'))).
          hide().addClassName('dropmarker').setStyle({position:'absolute'});
      document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
    }
    var offsets = Position.cumulativeOffset(dropon);
    Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});

    if(position=='after')
      if(sortable.overlap == 'horizontal')
        Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
      else
        Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});

    Sortable._marker.show();
  },

  _tree: function(element, options, parent) {
    var children = Sortable.findElements(element, options) || [];

    for (var i = 0; i < children.length; ++i) {
      var match = children[i].id.match(options.format);

      if (!match) continue;

      var child = {
        id: encodeURIComponent(match ? match[1] : null),
        element: element,
        parent: parent,
        children: [],
        position: parent.children.length,
        container: $(children[i]).down(options.treeTag)
      };

      /* Get the element containing the children and recurse over it */
      if (child.container)
        this._tree(child.container, options, child);

      parent.children.push (child);
    }

    return parent;
  },

  tree: function(element) {
    element = $(element);
    var sortableOptions = this.options(element);
    var options = Object.extend({
      tag: sortableOptions.tag,
      treeTag: sortableOptions.treeTag,
      only: sortableOptions.only,
      name: element.id,
      format: sortableOptions.format
    }, arguments[1] || { });

    var root = {
      id: null,
      parent: null,
      children: [],
      container: element,
      position: 0
    };

    return Sortable._tree(element, options, root);
  },

  /* Construct a [i] index for a particular node */
  _constructIndex: function(node) {
    var index = '';
    do {
      if (node.id) index = '[' + node.position + ']' + index;
    } while ((node = node.parent) != null);
    return index;
  },

  sequence: function(element) {
    element = $(element);
    var options = Object.extend(this.options(element), arguments[1] || { });

    return $(this.findElements(element, options) || []).map( function(item) {
      return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
    });
  },

  setSequence: function(element, new_sequence) {
    element = $(element);
    var options = Object.extend(this.options(element), arguments[2] || { });

    var nodeMap = { };
    this.findElements(element, options).each( function(n) {
        if (n.id.match(options.format))
            nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
        n.parentNode.removeChild(n);
    });

    new_sequence.each(function(ident) {
      var n = nodeMap[ident];
      if (n) {
        n[1].appendChild(n[0]);
        delete nodeMap[ident];
      }
    });
  },

  serialize: function(element) {
    element = $(element);
    var options = Object.extend(Sortable.options(element), arguments[1] || { });
    var name = encodeURIComponent(
      (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);

    if (options.tree) {
      return Sortable.tree(element, arguments[1]).children.map( function (item) {
        return [name + Sortable._constructIndex(item) + "[id]=" +
                encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
      }).flatten().join('&');
    } else {
      return Sortable.sequence(element, arguments[1]).map( function(item) {
        return name + "[]=" + encodeURIComponent(item);
      }).join('&');
    }
  }
};

// Returns true if child is contained within element
Element.isParent = function(child, element) {
  if (!child.parentNode || child == element) return false;
  if (child.parentNode == element) return true;
  return Element.isParent(child.parentNode, element);
};

Element.findChildren = function(element, only, recursive, tagName) {
  if(!element.hasChildNodes()) return null;
  tagName = tagName.toUpperCase();
  if(only) only = [only].flatten();
  var elements = [];
  $A(element.childNodes).each( function(e) {
    if(e.tagName && e.tagName.toUpperCase()==tagName &&
      (!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
        elements.push(e);
    if(recursive) {
      var grandchildren = Element.findChildren(e, only, recursive, tagName);
      if(grandchildren) elements.push(grandchildren);
    }
  });

  return (elements.length>0 ? elements.flatten() : []);
};

Element.offsetSize = function (element, type) {
  return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
};
// script.aculo.us controls.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008

// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//           (c) 2005-2008 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
//           (c) 2005-2008 Jon Tirsen (http://www.tirsen.com)
// Contributors:
//  Richard Livsey
//  Rahul Bhargava
//  Rob Wills
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

// Autocompleter.Base handles all the autocompletion functionality
// that's independent of the data source for autocompletion. This
// includes drawing the autocompletion menu, observing keyboard
// and mouse events, and similar.
//
// Specific autocompleters need to provide, at the very least,
// a getUpdatedChoices function that will be invoked every time
// the text inside the monitored textbox changes. This method
// should get the text for which to provide autocompletion by
// invoking this.getToken(), NOT by directly accessing
// this.element.value. This is to allow incremental tokenized
// autocompletion. Specific auto-completion logic (AJAX, etc)
// belongs in getUpdatedChoices.
//
// Tokenized incremental autocompletion is enabled automatically
// when an autocompleter is instantiated with the 'tokens' option
// in the options parameter, e.g.:
// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
// will incrementally autocomplete with a comma as the token.
// Additionally, ',' in the above example can be replaced with
// a token array, e.g. { tokens: [',', '\n'] } which
// enables autocompletion on multiple tokens. This is most
// useful when one of the tokens is \n (a newline), as it
// allows smart autocompletion after linebreaks.

if(typeof Effect == 'undefined')
  throw("controls.js requires including script.aculo.us' effects.js library");

var Autocompleter = { };
Autocompleter.Base = Class.create({
  baseInitialize: function(element, update, options) {
    element          = $(element);
    this.element     = element;
    this.update      = $(update);
    this.hasFocus    = false;
    this.changed     = false;
    this.active      = false;
    this.index       = 0;
    this.entryCount  = 0;
    this.oldElementValue = this.element.value;

    if(this.setOptions)
      this.setOptions(options);
    else
      this.options = options || { };

    this.options.paramName    = this.options.paramName || this.element.name;
    this.options.tokens       = this.options.tokens || [];
    this.options.frequency    = this.options.frequency || 0.4;
    this.options.minChars     = this.options.minChars || 1;
    this.options.onShow       = this.options.onShow ||
      function(element, update){
        if(!update.style.position || update.style.position=='absolute') {
          update.style.position = 'absolute';
          Position.clone(element, update, {
            setHeight: false,
            offsetTop: element.offsetHeight
          });
        }
        Effect.Appear(update,{duration:0.15});
      };
    this.options.onHide = this.options.onHide ||
      function(element, update){ new Effect.Fade(update,{duration:0.15}) };

    if(typeof(this.options.tokens) == 'string')
      this.options.tokens = new Array(this.options.tokens);
    // Force carriage returns as token delimiters anyway
    if (!this.options.tokens.include('\n'))
      this.options.tokens.push('\n');

    this.observer = null;

    this.element.setAttribute('autocomplete','off');

    Element.hide(this.update);

    Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
    Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));
  },

  show: function() {
    if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
    if(!this.iefix &&
      (Prototype.Browser.IE) &&
      (Element.getStyle(this.update, 'position')=='absolute')) {
      new Insertion.After(this.update,
       '<iframe id="' + this.update.id + '_iefix" '+
       'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
       'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
      this.iefix = $(this.update.id+'_iefix');
    }
    if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
  },

  fixIEOverlapping: function() {
    Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
    this.iefix.style.zIndex = 1;
    this.update.style.zIndex = 2;
    Element.show(this.iefix);
  },

  hide: function() {
    this.stopIndicator();
    if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
    if(this.iefix) Element.hide(this.iefix);
  },

  startIndicator: function() {
    if(this.options.indicator) Element.show(this.options.indicator);
  },

  stopIndicator: function() {
    if(this.options.indicator) Element.hide(this.options.indicator);
  },

  onKeyPress: function(event) {
    if(this.active)
      switch(event.keyCode) {
       case Event.KEY_TAB:
       case Event.KEY_RETURN:
         this.selectEntry();
         Event.stop(event);
       case Event.KEY_ESC:
         this.hide();
         this.active = false;
         Event.stop(event);
         return;
       case Event.KEY_LEFT:
       case Event.KEY_RIGHT:
         return;
       case Event.KEY_UP:
         this.markPrevious();
         this.render();
         Event.stop(event);
         return;
       case Event.KEY_DOWN:
         this.markNext();
         this.render();
         Event.stop(event);
         return;
      }
     else
       if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN ||
         (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return;

    this.changed = true;
    this.hasFocus = true;

    if(this.observer) clearTimeout(this.observer);
      this.observer =
        setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
  },

  activate: function() {
    this.changed = false;
    this.hasFocus = true;
    this.getUpdatedChoices();
  },

  onHover: function(event) {
    var element = Event.findElement(event, 'LI');
    if(this.index != element.autocompleteIndex)
    {
        this.index = element.autocompleteIndex;
        this.render();
    }
    Event.stop(event);
  },

  onClick: function(event) {
    var element = Event.findElement(event, 'LI');
    this.index = element.autocompleteIndex;
    this.selectEntry();
    this.hide();
  },

  onBlur: function(event) {
    // needed to make click events working
    setTimeout(this.hide.bind(this), 250);
    this.hasFocus = false;
    this.active = false;
  },

  render: function() {
    if(this.entryCount > 0) {
      for (var i = 0; i < this.entryCount; i++)
        this.index==i ?
          Element.addClassName(this.getEntry(i),"selected") :
          Element.removeClassName(this.getEntry(i),"selected");
      if(this.hasFocus) {
        this.show();
        this.active = true;
      }
    } else {
      this.active = false;
      this.hide();
    }
  },

  markPrevious: function() {
    if(this.index > 0) this.index--;
      else this.index = this.entryCount-1;
    //this.getEntry(this.index).scrollIntoView(true); useless
  },

  markNext: function() {
    if(this.index < this.entryCount-1) this.index++;
      else this.index = 0;
    this.getEntry(this.index).scrollIntoView(false);
  },

  getEntry: function(index) {
    return this.update.firstChild.childNodes[index];
  },

  getCurrentEntry: function() {
    return this.getEntry(this.index);
  },

  selectEntry: function() {
    this.active = false;
    this.updateElement(this.getCurrentEntry());
  },

  updateElement: function(selectedElement) {
    if (this.options.updateElement) {
      this.options.updateElement(selectedElement);
      return;
    }
    var value = '';
    if (this.options.select) {
      var nodes = $(selectedElement).select('.' + this.options.select) || [];
      if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
    } else
      value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');

    var bounds = this.getTokenBounds();
    if (bounds[0] != -1) {
      var newValue = this.element.value.substr(0, bounds[0]);
      var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
      if (whitespace)
        newValue += whitespace[0];
      this.element.value = newValue + value + this.element.value.substr(bounds[1]);
    } else {
      this.element.value = value;
    }
    this.oldElementValue = this.element.value;
    this.element.focus();

    if (this.options.afterUpdateElement)
      this.options.afterUpdateElement(this.element, selectedElement);
  },

  updateChoices: function(choices) {
    if(!this.changed && this.hasFocus) {
      this.update.innerHTML = choices;
      Element.cleanWhitespace(this.update);
      Element.cleanWhitespace(this.update.down());

      if(this.update.firstChild && this.update.down().childNodes) {
        this.entryCount =
          this.update.down().childNodes.length;
        for (var i = 0; i < this.entryCount; i++) {
          var entry = this.getEntry(i);
          entry.autocompleteIndex = i;
          this.addObservers(entry);
        }
      } else {
        this.entryCount = 0;
      }

      this.stopIndicator();
      this.index = 0;

      if(this.entryCount==1 && this.options.autoSelect) {
        this.selectEntry();
        this.hide();
      } else {
        this.render();
      }
    }
  },

  addObservers: function(element) {
    Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
    Event.observe(element, "click", this.onClick.bindAsEventListener(this));
  },

  onObserverEvent: function() {
    this.changed = false;
    this.tokenBounds = null;
    if(this.getToken().length>=this.options.minChars) {
      this.getUpdatedChoices();
    } else {
      this.active = false;
      this.hide();
    }
    this.oldElementValue = this.element.value;
  },

  getToken: function() {
    var bounds = this.getTokenBounds();
    return this.element.value.substring(bounds[0], bounds[1]).strip();
  },

  getTokenBounds: function() {
    if (null != this.tokenBounds) return this.tokenBounds;
    var value = this.element.value;
    if (value.strip().empty()) return [-1, 0];
    var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
    var offset = (diff == this.oldElementValue.length ? 1 : 0);
    var prevTokenPos = -1, nextTokenPos = value.length;
    var tp;
    for (var index = 0, l = this.options.tokens.length; index < l; ++index) {
      tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
      if (tp > prevTokenPos) prevTokenPos = tp;
      tp = value.indexOf(this.options.tokens[index], diff + offset);
      if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;
    }
    return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
  }
});

Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) {
  var boundary = Math.min(newS.length, oldS.length);
  for (var index = 0; index < boundary; ++index)
    if (newS[index] != oldS[index])
      return index;
  return boundary;
};

Ajax.Autocompleter = Class.create(Autocompleter.Base, {
  initialize: function(element, update, url, options) {
    this.baseInitialize(element, update, options);
    this.options.asynchronous  = true;
    this.options.onComplete    = this.onComplete.bind(this);
    this.options.defaultParams = this.options.parameters || null;
    this.url                   = url;
  },

  getUpdatedChoices: function() {
    this.startIndicator();

    var entry = encodeURIComponent(this.options.paramName) + '=' +
      encodeURIComponent(this.getToken());

    this.options.parameters = this.options.callback ?
      this.options.callback(this.element, entry) : entry;

    if(this.options.defaultParams)
      this.options.parameters += '&' + this.options.defaultParams;

    new Ajax.Request(this.url, this.options);
  },

  onComplete: function(request) {
    this.updateChoices(request.responseText);
  }
});

// The local array autocompleter. Used when you'd prefer to
// inject an array of autocompletion options into the page, rather
// than sending out Ajax queries, which can be quite slow sometimes.
//
// The constructor takes four parameters. The first two are, as usual,
// the id of the monitored textbox, and id of the autocompletion menu.
// The third is the array you want to autocomplete from, and the fourth
// is the options block.
//
// Extra local autocompletion options:
// - choices - How many autocompletion choices to offer
//
// - partialSearch - If false, the autocompleter will match entered
//                    text only at the beginning of strings in the
//                    autocomplete array. Defaults to true, which will
//                    match text at the beginning of any *word* in the
//                    strings in the autocomplete array. If you want to
//                    search anywhere in the string, additionally set
//                    the option fullSearch to true (default: off).
//
// - fullSsearch - Search anywhere in autocomplete array strings.
//
// - partialChars - How many characters to enter before triggering
//                   a partial match (unlike minChars, which defines
//                   how many characters are required to do any match
//                   at all). Defaults to 2.
//
// - ignoreCase - Whether to ignore case when autocompleting.
//                 Defaults to true.
//
// It's possible to pass in a custom function as the 'selector'
// option, if you prefer to write your own autocompletion logic.
// In that case, the other options above will not apply unless
// you support them.

Autocompleter.Local = Class.create(Autocompleter.Base, {
  initialize: function(element, update, array, options) {
    this.baseInitialize(element, update, options);
    this.options.array = array;
  },

  getUpdatedChoices: function() {
    this.updateChoices(this.options.selector(this));
  },

  setOptions: function(options) {
    this.options = Object.extend({
      choices: 10,
      partialSearch: true,
      partialChars: 2,
      ignoreCase: true,
      fullSearch: false,
      selector: function(instance) {
        var ret       = []; // Beginning matches
        var partial   = []; // Inside matches
        var entry     = instance.getToken();
        var count     = 0;

        for (var i = 0; i < instance.options.array.length &&
          ret.length < instance.options.choices ; i++) {

          var elem = instance.options.array[i];
          var foundPos = instance.options.ignoreCase ?
            elem.toLowerCase().indexOf(entry.toLowerCase()) :
            elem.indexOf(entry);

          while (foundPos != -1) {
            if (foundPos == 0 && elem.length != entry.length) {
              ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +
                elem.substr(entry.length) + "</li>");
              break;
            } else if (entry.length >= instance.options.partialChars &&
              instance.options.partialSearch && foundPos != -1) {
              if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
                partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
                  elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
                  foundPos + entry.length) + "</li>");
                break;
              }
            }

            foundPos = instance.options.ignoreCase ?
              elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
              elem.indexOf(entry, foundPos + 1);

          }
        }
        if (partial.length)
          ret = ret.concat(partial.slice(0, instance.options.choices - ret.length));
        return "<ul>" + ret.join('') + "</ul>";
      }
    }, options || { });
  }
});

// AJAX in-place editor and collection editor
// Full rewrite by Christophe Porteneuve <tdd@tddsworld.com> (April 2007).

// Use this if you notice weird scrolling problems on some browsers,
// the DOM might be a bit confused when this gets called so do this
// waits 1 ms (with setTimeout) until it does the activation
Field.scrollFreeActivate = function(field) {
  setTimeout(function() {
    Field.activate(field);
  }, 1);
};

Ajax.InPlaceEditor = Class.create({
  initialize: function(element, url, options) {
    this.url = url;
    this.element = element = $(element);
    this.prepareOptions();
    this._controls = { };
    arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!!
    Object.extend(this.options, options || { });
    if (!this.options.formId && this.element.id) {
      this.options.formId = this.element.id + '-inplaceeditor';
      if ($(this.options.formId))
        this.options.formId = '';
    }
    if (this.options.externalControl)
      this.options.externalControl = $(this.options.externalControl);
    if (!this.options.externalControl)
      this.options.externalControlOnly = false;
    this._originalBackground = this.element.getStyle('background-color') || 'transparent';
    this.element.title = this.options.clickToEditText;
    this._boundCancelHandler = this.handleFormCancellation.bind(this);
    this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
    this._boundFailureHandler = this.handleAJAXFailure.bind(this);
    this._boundSubmitHandler = this.handleFormSubmission.bind(this);
    this._boundWrapperHandler = this.wrapUp.bind(this);
    this.registerListeners();
  },
  checkForEscapeOrReturn: function(e) {
    if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
    if (Event.KEY_ESC == e.keyCode)
      this.handleFormCancellation(e);
    else if (Event.KEY_RETURN == e.keyCode)
      this.handleFormSubmission(e);
  },
  createControl: function(mode, handler, extraClasses) {
    var control = this.options[mode + 'Control'];
    var text = this.options[mode + 'Text'];
    if ('button' == control) {
      var btn = document.createElement('input');
      btn.type = 'submit';
      btn.value = text;
      btn.className = 'editor_' + mode + '_button';
      if ('cancel' == mode)
        btn.onclick = this._boundCancelHandler;
      this._form.appendChild(btn);
      this._controls[mode] = btn;
    } else if ('link' == control) {
      var link = document.createElement('a');
      link.href = '#';
      link.appendChild(document.createTextNode(text));
      link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;
      link.className = 'editor_' + mode + '_link';
      if (extraClasses)
        link.className += ' ' + extraClasses;
      this._form.appendChild(link);
      this._controls[mode] = link;
    }
  },
  createEditField: function() {
    var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
    var fld;
    if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
      fld = document.createElement('input');
      fld.type = 'text';
      var size = this.options.size || this.options.cols || 0;
      if (0 < size) fld.size = size;
    } else {
      fld = document.createElement('textarea');
      fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
      fld.cols = this.options.cols || 40;
    }
    fld.name = this.options.paramName;
    fld.value = text; // No HTML breaks conversion anymore
    fld.className = 'editor_field';
    if (this.options.submitOnBlur)
      fld.onblur = this._boundSubmitHandler;
    this._controls.editor = fld;
    if (this.options.loadTextURL)
      this.loadExternalText();
    this._form.appendChild(this._controls.editor);
  },
  createForm: function() {
    var ipe = this;
    function addText(mode, condition) {
      var text = ipe.options['text' + mode + 'Controls'];
      if (!text || condition === false) return;
      ipe._form.appendChild(document.createTextNode(text));
    };
    this._form = $(document.createElement('form'));
    this._form.id = this.options.formId;
    this._form.addClassName(this.options.formClassName);
    this._form.onsubmit = this._boundSubmitHandler;
    this.createEditField();
    if ('textarea' == this._controls.editor.tagName.toLowerCase())
      this._form.appendChild(document.createElement('br'));
    if (this.options.onFormCustomization)
      this.options.onFormCustomization(this, this._form);
    addText('Before', this.options.okControl || this.options.cancelControl);
    this.createControl('ok', this._boundSubmitHandler);
    addText('Between', this.options.okControl && this.options.cancelControl);
    this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');
    addText('After', this.options.okControl || this.options.cancelControl);
  },
  destroy: function() {
    if (this._oldInnerHTML)
      this.element.innerHTML = this._oldInnerHTML;
    this.leaveEditMode();
    this.unregisterListeners();
  },
  enterEditMode: function(e) {
    if (this._saving || this._editing) return;
    this._editing = true;
    this.triggerCallback('onEnterEditMode');
    if (this.options.externalControl)
      this.options.externalControl.hide();
    this.element.hide();
    this.createForm();
    this.element.parentNode.insertBefore(this._form, this.element);
    if (!this.options.loadTextURL)
      this.postProcessEditField();
    if (e) Event.stop(e);
  },
  enterHover: function(e) {
    if (this.options.hoverClassName)
      this.element.addClassName(this.options.hoverClassName);
    if (this._saving) return;
    this.triggerCallback('onEnterHover');
  },
  getText: function() {
    return this.element.innerHTML.unescapeHTML();
  },
  handleAJAXFailure: function(transport) {
    this.triggerCallback('onFailure', transport);
    if (this._oldInnerHTML) {
      this.element.innerHTML = this._oldInnerHTML;
      this._oldInnerHTML = null;
    }
  },
  handleFormCancellation: function(e) {
    this.wrapUp();
    if (e) Event.stop(e);
  },
  handleFormSubmission: function(e) {
    var form = this._form;
    var value = $F(this._controls.editor);
    this.prepareSubmission();
    var params = this.options.callback(form, value) || '';
    if (Object.isString(params))
      params = params.toQueryParams();
    params.editorId = this.element.id;
    if (this.options.htmlResponse) {
      var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
      Object.extend(options, {
        parameters: params,
        onComplete: this._boundWrapperHandler,
        onFailure: this._boundFailureHandler
      });
      new Ajax.Updater({ success: this.element }, this.url, options);
    } else {
      var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
      Object.extend(options, {
        parameters: params,
        onComplete: this._boundWrapperHandler,
        onFailure: this._boundFailureHandler
      });
      new Ajax.Request(this.url, options);
    }
    if (e) Event.stop(e);
  },
  leaveEditMode: function() {
    this.element.removeClassName(this.options.savingClassName);
    this.removeForm();
    this.leaveHover();
    this.element.style.backgroundColor = this._originalBackground;
    this.element.show();
    if (this.options.externalControl)
      this.options.externalControl.show();
    this._saving = false;
    this._editing = false;
    this._oldInnerHTML = null;
    this.triggerCallback('onLeaveEditMode');
  },
  leaveHover: function(e) {
    if (this.options.hoverClassName)
      this.element.removeClassName(this.options.hoverClassName);
    if (this._saving) return;
    this.triggerCallback('onLeaveHover');
  },
  loadExternalText: function() {
    this._form.addClassName(this.options.loadingClassName);
    this._controls.editor.disabled = true;
    var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
    Object.extend(options, {
      parameters: 'editorId=' + encodeURIComponent(this.element.id),
      onComplete: Prototype.emptyFunction,
      onSuccess: function(transport) {
        this._form.removeClassName(this.options.loadingClassName);
        var text = transport.responseText;
        if (this.options.stripLoadedTextTags)
          text = text.stripTags();
        this._controls.editor.value = text;
        this._controls.editor.disabled = false;
        this.postProcessEditField();
      }.bind(this),
      onFailure: this._boundFailureHandler
    });
    new Ajax.Request(this.options.loadTextURL, options);
  },
  postProcessEditField: function() {
    var fpc = this.options.fieldPostCreation;
    if (fpc)
      $(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
  },
  prepareOptions: function() {
    this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
    Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
    [this._extraDefaultOptions].flatten().compact().each(function(defs) {
      Object.extend(this.options, defs);
    }.bind(this));
  },
  prepareSubmission: function() {
    this._saving = true;
    this.removeForm();
    this.leaveHover();
    this.showSaving();
  },
  registerListeners: function() {
    this._listeners = { };
    var listener;
    $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
      listener = this[pair.value].bind(this);
      this._listeners[pair.key] = listener;
      if (!this.options.externalControlOnly)
        this.element.observe(pair.key, listener);
      if (this.options.externalControl)
        this.options.externalControl.observe(pair.key, listener);
    }.bind(this));
  },
  removeForm: function() {
    if (!this._form) return;
    this._form.remove();
    this._form = null;
    this._controls = { };
  },
  showSaving: function() {
    this._oldInnerHTML = this.element.innerHTML;
    this.element.innerHTML = this.options.savingText;
    this.element.addClassName(this.options.savingClassName);
    this.element.style.backgroundColor = this._originalBackground;
    this.element.show();
  },
  triggerCallback: function(cbName, arg) {
    if ('function' == typeof this.options[cbName]) {
      this.options[cbName](this, arg);
    }
  },
  unregisterListeners: function() {
    $H(this._listeners).each(function(pair) {
      if (!this.options.externalControlOnly)
        this.element.stopObserving(pair.key, pair.value);
      if (this.options.externalControl)
        this.options.externalControl.stopObserving(pair.key, pair.value);
    }.bind(this));
  },
  wrapUp: function(transport) {
    this.leaveEditMode();
    // Can't use triggerCallback due to backward compatibility: requires
    // binding + direct element
    this._boundComplete(transport, this.element);
  }
});

Object.extend(Ajax.InPlaceEditor.prototype, {
  dispose: Ajax.InPlaceEditor.prototype.destroy
});

Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, {
  initialize: function($super, element, url, options) {
    this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
    $super(element, url, options);
  },

  createEditField: function() {
    var list = document.createElement('select');
    list.name = this.options.paramName;
    list.size = 1;
    this._controls.editor = list;
    this._collection = this.options.collection || [];
    if (this.options.loadCollectionURL)
      this.loadCollection();
    else
      this.checkForExternalText();
    this._form.appendChild(this._controls.editor);
  },

  loadCollection: function() {
    this._form.addClassName(this.options.loadingClassName);
    this.showLoadingText(this.options.loadingCollectionText);
    var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
    Object.extend(options, {
      parameters: 'editorId=' + encodeURIComponent(this.element.id),
      onComplete: Prototype.emptyFunction,
      onSuccess: function(transport) {
        var js = transport.responseText.strip();
        if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
          throw('Server returned an invalid collection representation.');
        this._collection = eval(js);
        this.checkForExternalText();
      }.bind(this),
      onFailure: this.onFailure
    });
    new Ajax.Request(this.options.loadCollectionURL, options);
  },

  showLoadingText: function(text) {
    this._controls.editor.disabled = true;
    var tempOption = this._controls.editor.firstChild;
    if (!tempOption) {
      tempOption = document.createElement('option');
      tempOption.value = '';
      this._controls.editor.appendChild(tempOption);
      tempOption.selected = true;
    }
    tempOption.update((text || '').stripScripts().stripTags());
  },

  checkForExternalText: function() {
    this._text = this.getText();
    if (this.options.loadTextURL)
      this.loadExternalText();
    else
      this.buildOptionList();
  },

  loadExternalText: function() {
    this.showLoadingText(this.options.loadingText);
    var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
    Object.extend(options, {
      parameters: 'editorId=' + encodeURIComponent(this.element.id),
      onComplete: Prototype.emptyFunction,
      onSuccess: function(transport) {
        this._text = transport.responseText.strip();
        this.buildOptionList();
      }.bind(this),
      onFailure: this.onFailure
    });
    new Ajax.Request(this.options.loadTextURL, options);
  },

  buildOptionList: function() {
    this._form.removeClassName(this.options.loadingClassName);
    this._collection = this._collection.map(function(entry) {
      return 2 === entry.length ? entry : [entry, entry].flatten();
    });
    var marker = ('value' in this.options) ? this.options.value : this._text;
    var textFound = this._collection.any(function(entry) {
      return entry[0] == marker;
    }.bind(this));
    this._controls.editor.update('');
    var option;
    this._collection.each(function(entry, index) {
      option = document.createElement('option');
      option.value = entry[0];
      option.selected = textFound ? entry[0] == marker : 0 == index;
      option.appendChild(document.createTextNode(entry[1]));
      this._controls.editor.appendChild(option);
    }.bind(this));
    this._controls.editor.disabled = false;
    Field.scrollFreeActivate(this._controls.editor);
  }
});

//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****
//**** This only  exists for a while,  in order to  let ****
//**** users adapt to  the new API.  Read up on the new ****
//**** API and convert your code to it ASAP!            ****

Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) {
  if (!options) return;
  function fallback(name, expr) {
    if (name in options || expr === undefined) return;
    options[name] = expr;
  };
  fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' :
    options.cancelLink == options.cancelButton == false ? false : undefined)));
  fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' :
    options.okLink == options.okButton == false ? false : undefined)));
  fallback('highlightColor', options.highlightcolor);
  fallback('highlightEndColor', options.highlightendcolor);
};

Object.extend(Ajax.InPlaceEditor, {
  DefaultOptions: {
    ajaxOptions: { },
    autoRows: 3,                                // Use when multi-line w/ rows == 1
    cancelControl: 'link',                      // 'link'|'button'|false
    cancelText: 'cancel',
    clickToEditText: 'Click to edit',
    externalControl: null,                      // id|elt
    externalControlOnly: false,
    fieldPostCreation: 'activate',              // 'activate'|'focus'|false
    formClassName: 'inplaceeditor-form',
    formId: null,                               // id|elt
    highlightColor: '#ffff99',
    highlightEndColor: '#ffffff',
    hoverClassName: '',
    htmlResponse: true,
    loadingClassName: 'inplaceeditor-loading',
    loadingText: 'Loading...',
    okControl: 'button',                        // 'link'|'button'|false
    okText: 'ok',
    paramName: 'value',
    rows: 1,                                    // If 1 and multi-line, uses autoRows
    savingClassName: 'inplaceeditor-saving',
    savingText: 'Saving...',
    size: 0,
    stripLoadedTextTags: false,
    submitOnBlur: false,
    textAfterControls: '',
    textBeforeControls: '',
    textBetweenControls: ''
  },
  DefaultCallbacks: {
    callback: function(form) {
      return Form.serialize(form);
    },
    onComplete: function(transport, element) {
      // For backward compatibility, this one is bound to the IPE, and passes
      // the element directly.  It was too often customized, so we don't break it.
      new Effect.Highlight(element, {
        startcolor: this.options.highlightColor, keepBackgroundImage: true });
    },
    onEnterEditMode: null,
    onEnterHover: function(ipe) {
      ipe.element.style.backgroundColor = ipe.options.highlightColor;
      if (ipe._effect)
        ipe._effect.cancel();
    },
    onFailure: function(transport, ipe) {
      alert('Error communication with the server: ' + transport.responseText.stripTags());
    },
    onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls.
    onLeaveEditMode: null,
    onLeaveHover: function(ipe) {
      ipe._effect = new Effect.Highlight(ipe.element, {
        startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,
        restorecolor: ipe._originalBackground, keepBackgroundImage: true
      });
    }
  },
  Listeners: {
    click: 'enterEditMode',
    keydown: 'checkForEscapeOrReturn',
    mouseover: 'enterHover',
    mouseout: 'leaveHover'
  }
});

Ajax.InPlaceCollectionEditor.DefaultOptions = {
  loadingCollectionText: 'Loading options...'
};

// Delayed observer, like Form.Element.Observer,
// but waits for delay after last key input
// Ideal for live-search fields

Form.Element.DelayedObserver = Class.create({
  initialize: function(element, delay, callback) {
    this.delay     = delay || 0.5;
    this.element   = $(element);
    this.callback  = callback;
    this.timer     = null;
    this.lastValue = $F(this.element);
    Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
  },
  delayedListener: function(event) {
    if(this.lastValue == $F(this.element)) return;
    if(this.timer) clearTimeout(this.timer);
    this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
    this.lastValue = $F(this.element);
  },
  onTimerEvent: function() {
    this.timer = null;
    this.callback(this.element, $F(this.element));
  }
});
// script.aculo.us slider.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008

// Copyright (c) 2005-2008 Marty Haught, Thomas Fuchs
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

if (!Control) var Control = { };

// options:
//  axis: 'vertical', or 'horizontal' (default)
//
// callbacks:
//  onChange(value)
//  onSlide(value)
Control.Slider = Class.create({
  initialize: function(handle, track, options) {
    var slider = this;

    if (Object.isArray(handle)) {
      this.handles = handle.collect( function(e) { return $(e) });
    } else {
      this.handles = [$(handle)];
    }

    this.track   = $(track);
    this.options = options || { };

    this.axis      = this.options.axis || 'horizontal';
    this.increment = this.options.increment || 1;
    this.step      = parseInt(this.options.step || '1');
    this.range     = this.options.range || $R(0,1);

    this.value     = 0; // assure backwards compat
    this.values    = this.handles.map( function() { return 0 });
    this.spans     = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false;
    this.options.startSpan = $(this.options.startSpan || null);
    this.options.endSpan   = $(this.options.endSpan || null);

    this.restricted = this.options.restricted || false;

    this.maximum   = this.options.maximum || this.range.end;
    this.minimum   = this.options.minimum || this.range.start;

    // Will be used to align the handle onto the track, if necessary
    this.alignX = parseInt(this.options.alignX || '0');
    this.alignY = parseInt(this.options.alignY || '0');

    this.trackLength = this.maximumOffset() - this.minimumOffset();

    this.handleLength = this.isVertical() ?
      (this.handles[0].offsetHeight != 0 ?
        this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) :
      (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth :
        this.handles[0].style.width.replace(/px$/,""));

    this.active   = false;
    this.dragging = false;
    this.disabled = false;

    if (this.options.disabled) this.setDisabled();

    // Allowed values array
    this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
    if (this.allowedValues) {
      this.minimum = this.allowedValues.min();
      this.maximum = this.allowedValues.max();
    }

    this.eventMouseDown = this.startDrag.bindAsEventListener(this);
    this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
    this.eventMouseMove = this.update.bindAsEventListener(this);

    // Initialize handles in reverse (make sure first handle is active)
    this.handles.each( function(h,i) {
      i = slider.handles.length-1-i;
      slider.setValue(parseFloat(
        (Object.isArray(slider.options.sliderValue) ?
          slider.options.sliderValue[i] : slider.options.sliderValue) ||
         slider.range.start), i);
      h.makePositioned().observe("mousedown", slider.eventMouseDown);
    });

    this.track.observe("mousedown", this.eventMouseDown);
    document.observe("mouseup", this.eventMouseUp);
    $(this.track.parentNode.parentNode).observe("mousemove", this.eventMouseMove);


    this.initialized = true;
  },
  dispose: function() {
    var slider = this;
    Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
    Event.stopObserving(document, "mouseup", this.eventMouseUp);
    Event.stopObserving(this.track.parentNode.parentNode, "mousemove", this.eventMouseMove);
    this.handles.each( function(h) {
      Event.stopObserving(h, "mousedown", slider.eventMouseDown);
    });
  },
  setDisabled: function(){
    this.disabled = true;
    this.track.parentNode.className = this.track.parentNode.className + ' disabled';
  },
  setEnabled: function(){
    this.disabled = false;
  },
  getNearestValue: function(value){
    if (this.allowedValues){
      if (value >= this.allowedValues.max()) return(this.allowedValues.max());
      if (value <= this.allowedValues.min()) return(this.allowedValues.min());

      var offset = Math.abs(this.allowedValues[0] - value);
      var newValue = this.allowedValues[0];
      this.allowedValues.each( function(v) {
        var currentOffset = Math.abs(v - value);
        if (currentOffset <= offset){
          newValue = v;
          offset = currentOffset;
        }
      });
      return newValue;
    }
    if (value > this.range.end) return this.range.end;
    if (value < this.range.start) return this.range.start;
    return value;
  },
  setValue: function(sliderValue, handleIdx){
    if (!this.active) {
      this.activeHandleIdx = handleIdx || 0;
      this.activeHandle    = this.handles[this.activeHandleIdx];
      this.updateStyles();
    }
    handleIdx = handleIdx || this.activeHandleIdx || 0;
    if (this.initialized && this.restricted) {
      if ((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
        sliderValue = this.values[handleIdx-1];
      if ((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
        sliderValue = this.values[handleIdx+1];
    }
    sliderValue = this.getNearestValue(sliderValue);
    this.values[handleIdx] = sliderValue;
    this.value = this.values[0]; // assure backwards compat

    this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] =
      this.translateToPx(sliderValue);

    this.drawSpans();
    if (!this.dragging || !this.event) this.updateFinished();
  },
  setValueBy: function(delta, handleIdx) {
    this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta,
      handleIdx || this.activeHandleIdx || 0);
  },
  translateToPx: function(value) {
    return Math.round(
      ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) *
      (value - this.range.start)) + "px";
  },
  translateToValue: function(offset) {
    return ((offset/(this.trackLength-this.handleLength) *
      (this.range.end-this.range.start)) + this.range.start);
  },
  getRange: function(range) {
    var v = this.values.sortBy(Prototype.K);
    range = range || 0;
    return $R(v[range],v[range+1]);
  },
  minimumOffset: function(){
    return(this.isVertical() ? this.alignY : this.alignX);
  },
  maximumOffset: function(){
    return(this.isVertical() ?
      (this.track.offsetHeight != 0 ? this.track.offsetHeight :
        this.track.style.height.replace(/px$/,"")) - this.alignY :
      (this.track.offsetWidth != 0 ? this.track.offsetWidth :
        this.track.style.width.replace(/px$/,"")) - this.alignX);
  },
  isVertical:  function(){
    return (this.axis == 'vertical');
  },
  drawSpans: function() {
    var slider = this;
    if (this.spans)
      $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) });
    if (this.options.startSpan)
      this.setSpan(this.options.startSpan,
        $R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
    if (this.options.endSpan)
      this.setSpan(this.options.endSpan,
        $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
  },
  setSpan: function(span, range) {
    if (this.isVertical()) {
      span.style.top = this.translateToPx(range.start);
      span.style.height = this.translateToPx(range.end - range.start + this.range.start);
    } else {
      span.style.left = this.translateToPx(range.start);
      span.style.width = this.translateToPx(range.end - range.start + this.range.start);
    }
  },
  updateStyles: function() {
    this.handles.each( function(h){ Element.removeClassName(h, 'selected') });
    Element.addClassName(this.activeHandle, 'selected');
  },
  startDrag: function(event) {
    if (Event.isLeftClick(event)) {
      if (!this.disabled){
        this.active = true;

        var handle = Event.element(event);
        var pointer  = [Event.pointerX(event), Event.pointerY(event)];
        var track = handle;
        if (track==this.track) {
          var offsets  = Position.cumulativeOffset(this.track);
          this.event = event;
          this.setValue(this.translateToValue(
           (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
          ));
          var offsets  = Position.cumulativeOffset(this.activeHandle);
          this.offsetX = (pointer[0] - offsets[0]);
          this.offsetY = (pointer[1] - offsets[1]);
        } else {
          // find the handle (prevents issues with Safari)
          while((this.handles.indexOf(handle) == -1) && handle.parentNode)
            handle = handle.parentNode;

          if (this.handles.indexOf(handle)!=-1) {
            this.activeHandle    = handle;
            this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
            this.updateStyles();

            var offsets  = Position.cumulativeOffset(this.activeHandle);
            this.offsetX = (pointer[0] - offsets[0]);
            this.offsetY = (pointer[1] - offsets[1]);
          }
        }
      }
      Event.stop(event);
    }
  },
  update: function(event) {
   if (this.active) {
      if (!this.dragging) this.dragging = true;
      this.draw(event);
      if (Prototype.Browser.WebKit) window.scrollBy(0,0);
      Event.stop(event);
   }
  },
  draw: function(event) {
    var pointer = [Event.pointerX(event), Event.pointerY(event)];
    var offsets = Position.cumulativeOffset(this.track);
    pointer[0] -= this.offsetX + offsets[0];
    pointer[1] -= this.offsetY + offsets[1];
    this.event = event;
    this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
    if (this.initialized && this.options.onSlide)
      this.options.onSlide(this.values.length>1 ? this.values : this.value, this);
  },
  endDrag: function(event) {
    if (this.active && this.dragging) {
      this.finishDrag(event, true);
      Event.stop(event);
    }
    this.active = false;
    this.dragging = false;
  },
  finishDrag: function(event, success) {
    this.active = false;
    this.dragging = false;
    this.updateFinished();
  },
  updateFinished: function() {
    if (this.initialized && this.options.onChange)
      this.options.onChange(this.values.length>1 ? this.values : this.value, this);
    this.event = null;
  }
});
/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Academic Free License (AFL 3.0)
 * that is bundled with this package in the file LICENSE_AFL.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/afl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    Varien
 * @package     js
 * @copyright   Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
 * @license     http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
 */
function popWin(url,win,para) {
    var win = window.open(url,win,para);
    win.focus();
}

function setLocation(url){
    window.location.href = url;
}

function setPLocation(url, setFocus){
    if( setFocus ) {
        window.opener.focus();
    }
    window.opener.location.href = url;
}

function setLanguageCode(code, fromCode){
    //TODO: javascript cookies have different domain and path than php cookies
    var href = window.location.href;
    var after = '', dash;
    if (dash = href.match(/\#(.*)$/)) {
        href = href.replace(/\#(.*)$/, '');
        after = dash[0];
    }

    if (href.match(/[?]/)) {
        var re = /([?&]store=)[a-z0-9_]*/;
        if (href.match(re)) {
            href = href.replace(re, '$1'+code);
        } else {
            href += '&store='+code;
        }

        var re = /([?&]from_store=)[a-z0-9_]*/;
        if (href.match(re)) {
            href = href.replace(re, '');
        }
    } else {
        href += '?store='+code;
    }
    if (typeof(fromCode) != 'undefined') {
        href += '&from_store='+fromCode;
    }
    href += after;

    setLocation(href);
}

/**
 * Add classes to specified elements.
 * Supported classes are: 'odd', 'even', 'first', 'last'
 *
 * @param elements - array of elements to be decorated
 * [@param decorateParams] - array of classes to be set. If omitted, all available will be used
 */
function decorateGeneric(elements, decorateParams)
{
    var allSupportedParams = ['odd', 'even', 'first', 'last'];
    var _decorateParams = {};
    var total = elements.length;

    if (total) {
        // determine params called
        if (typeof(decorateParams) == 'undefined') {
            decorateParams = allSupportedParams;
        }
        if (!decorateParams.length) {
            return;
        }
        for (var k in allSupportedParams) {
            _decorateParams[allSupportedParams[k]] = false;
        }
        for (var k in decorateParams) {
            _decorateParams[decorateParams[k]] = true;
        }

        // decorate elements
        // elements[0].addClassName('first'); // will cause bug in IE (#5587)
        if (_decorateParams.first) {
            Element.addClassName(elements[0], 'first');
        }
        if (_decorateParams.last) {
            Element.addClassName(elements[total-1], 'last');
        }
        for (var i = 0; i < total; i++) {
            if ((i + 1) % 2 == 0) {
                if (_decorateParams.even) {
                    Element.addClassName(elements[i], 'even');
                }
            }
            else {
                if (_decorateParams.odd) {
                    Element.addClassName(elements[i], 'odd');
                }
            }
        }
    }
}

/**
 * Decorate table rows and cells, tbody etc
 * @see decorateGeneric()
 */
function decorateTable(table, options) {
    var table = $(table);
    if (table) {
        // set default options
        var _options = {
            'tbody'    : false,
            'tbody tr' : ['odd', 'even', 'first', 'last'],
            'thead tr' : ['first', 'last'],
            'tfoot tr' : ['first', 'last'],
            'tr td'    : ['last']
        };
        // overload options
        if (typeof(options) != 'undefined') {
            for (var k in options) {
                _options[k] = options[k];
            }
        }
        // decorate
        if (_options['tbody']) {
            decorateGeneric(table.select('tbody'), _options['tbody']);
        }
        if (_options['tbody tr']) {
            decorateGeneric(table.select('tbody tr'), _options['tbody tr']);
        }
        if (_options['thead tr']) {
            decorateGeneric(table.select('thead tr'), _options['thead tr']);
        }
        if (_options['tfoot tr']) {
            decorateGeneric(table.select('tfoot tr'), _options['tfoot tr']);
        }
        if (_options['tr td']) {
            var allRows = table.select('tr');
            if (allRows.length) {
                for (var i = 0; i < allRows.length; i++) {
                    decorateGeneric(allRows[i].getElementsByTagName('TD'), _options['tr td']);
                }
            }
        }
    }
}

/**
 * Set "odd", "even" and "last" CSS classes for list items
 * @see decorateGeneric()
 */
function decorateList(list, nonRecursive) {
    if ($(list)) {
        if (typeof(nonRecursive) == 'undefined') {
            var items = $(list).select('li')
        }
        else {
            var items = $(list).childElements();
        }
        decorateGeneric(items, ['odd', 'even', 'last']);
    }
}

/**
 * Set "odd", "even" and "last" CSS classes for list items
 * @see decorateGeneric()
 */
function decorateDataList(list) {
    list = $(list);
    if (list) {
        decorateGeneric(list.select('dt'), ['odd', 'even', 'last']);
        decorateGeneric(list.select('dd'), ['odd', 'even', 'last']);
    }
}

/**
 * Parse SID and produces the correct URL
 */
function parseSidUrl(baseUrl, urlExt) {
    sidPos = baseUrl.indexOf('/?SID=');
    sid = '';
    urlExt = (urlExt != undefined) ? urlExt : '';

    if(sidPos > -1) {
        sid = '?' + baseUrl.substring(sidPos + 2);
        baseUrl = baseUrl.substring(0, sidPos + 1);
    }

    return baseUrl+urlExt+sid;
}

/**
 * Formats currency using patern
 * format - JSON (pattern, decimal, decimalsDelimeter, groupsDelimeter)
 * showPlus - true (always show '+'or '-'),
 *      false (never show '-' even if number is negative)
 *      null (show '-' if number is negative)
 */

function formatCurrency(price, format, showPlus){
    precision = isNaN(format.precision = Math.abs(format.precision)) ? 2 : format.precision;
    requiredPrecision = isNaN(format.requiredPrecision = Math.abs(format.requiredPrecision)) ? 2 : format.requiredPrecision;

    //precision = (precision > requiredPrecision) ? precision : requiredPrecision;
    //for now we don't need this difference so precision is requiredPrecision
    precision = requiredPrecision;

    integerRequired = isNaN(format.integerRequired = Math.abs(format.integerRequired)) ? 1 : format.integerRequired;

    decimalSymbol = format.decimalSymbol == undefined ? "," : format.decimalSymbol;
    groupSymbol = format.groupSymbol == undefined ? "." : format.groupSymbol;
    groupLength = format.groupLength == undefined ? 3 : format.groupLength;

    if (showPlus == undefined || showPlus == true) {
        s = price < 0 ? "-" : ( showPlus ? "+" : "");
    } else if (showPlus == false) {
        s = '';
    }

    i = parseInt(price = Math.abs(+price || 0).toFixed(precision)) + "";
    pad = (i.length < integerRequired) ? (integerRequired - i.length) : 0;
    while (pad) { i = '0' + i; pad--; }

    j = (j = i.length) > groupLength ? j % groupLength : 0;
    re = new RegExp("(\\d{" + groupLength + "})(?=\\d)", "g");

    /**
     * replace(/-/, 0) is only for fixing Safari bug which appears
     * when Math.abs(0).toFixed() executed on "0" number.
     * Result is "0.-0" :(
     */
    r = (j ? i.substr(0, j) + groupSymbol : "") + i.substr(j).replace(re, "$1" + groupSymbol) + (precision ? decimalSymbol + Math.abs(price - i).toFixed(precision).replace(/-/, 0).slice(2) : "")

    if (format.pattern.indexOf('{sign}') == -1) {
        pattern = s + format.pattern;
    } else {
        pattern = format.pattern.replace('{sign}', s);
    }

    return pattern.replace('%s', r).replace(/^\s\s*/, '').replace(/\s\s*$/, '');
};

function expandDetails(el, childClass) {
    if (Element.hasClassName(el,'show-details')) {
        $$(childClass).each(function(item){item.hide()});
        Element.removeClassName(el,'show-details');
    }
    else {
        $$(childClass).each(function(item){item.show()});
        Element.addClassName(el,'show-details');
    }
}

// Version 1.0
var isIE = navigator.appVersion.match(/MSIE/) == "MSIE";

if (!window.Varien)
    var Varien = new Object();

Varien.showLoading = function(){
    Element.show('loading-process');
}
Varien.hideLoading = function(){
    Element.hide('loading-process');
}
Varien.GlobalHandlers = {
    onCreate: function() {
        Varien.showLoading();
    },

    onComplete: function() {
        if(Ajax.activeRequestCount == 0) {
            Varien.hideLoading();
        }
    }
};

Ajax.Responders.register(Varien.GlobalHandlers);

/**
 * Quick Search form client model
 */
Varien.searchForm = Class.create();
Varien.searchForm.prototype = {
    initialize : function(form, field, emptyText){
        this.form   = $(form);
        this.field  = $(field);
        this.emptyText = emptyText;

        Event.observe(this.form,  'submit', this.submit.bind(this));
        Event.observe(this.field, 'focus', this.focus.bind(this));
        Event.observe(this.field, 'blur', this.blur.bind(this));
        this.blur();
    },

    submit : function(event){
        if (this.field.value == this.emptyText || this.field.value == ''){
            Event.stop(event);
            return false;
        }
        return true;
    },

    focus : function(event){
        if(this.field.value==this.emptyText){
            this.field.value='';
        }

    },

    blur : function(event){
        if(this.field.value==''){
            this.field.value=this.emptyText;
        }
    },

    initAutocomplete : function(url, destinationElement){
        new Ajax.Autocompleter(
            this.field,
            destinationElement,
            url,
            {
                paramName: this.field.name,
                method: 'get',
                minChars: 2,
                updateElement: this._selectAutocompleteItem.bind(this),
                onShow : function(element, update) {
                    if(!update.style.position || update.style.position=='absolute') {
                        update.style.position = 'absolute';
                        Position.clone(element, update, {
                            setHeight: false,
                            offsetTop: element.offsetHeight
                        });
                    }
                    Effect.Appear(update,{duration:0});
                }

            }
        );
    },

    _selectAutocompleteItem : function(element){
        if(element.title){
            this.field.value = element.title;
        }
        this.form.submit();
    }
}

Varien.Tabs = Class.create();
Varien.Tabs.prototype = {
  initialize: function(selector) {
    var self=this;
    $$(selector+' a').each(this.initTab.bind(this));
  },

  initTab: function(el) {
      el.href = 'javascript:void(0)';
      if ($(el.parentNode).hasClassName('active')) {
        this.showContent(el);
      }
      el.observe('click', this.showContent.bind(this, el));
  },

  showContent: function(a) {
    var li = $(a.parentNode), ul = $(li.parentNode);
    ul.getElementsBySelector('li', 'ol').each(function(el){
      var contents = $(el.id+'_contents');
      if (el==li) {
        el.addClassName('active');
        contents.show();
      } else {
        el.removeClassName('active');
        contents.hide();
      }
    });
  }
}

Varien.DateElement = Class.create();
Varien.DateElement.prototype = {
    initialize: function(type, content, required, format) {
        if (type == 'id') {
            // id prefix
            this.day    = $(content + 'day');
            this.month  = $(content + 'month');
            this.year   = $(content + 'year');
            this.full   = $(content + 'full');
            this.advice = $(content + 'advice');
        } else if (type == 'container') {
            // content must be container with data
            this.day    = content.day;
            this.month  = content.month;
            this.year   = content.year;
            this.full   = content.full;
            this.advice = content.advice;
        } else {
            return;
        }

        this.required = required;
        this.format   = format;
        
        this.day.addClassName('validate-custom');
        this.day.validate = this.validate.bind(this);
        this.month.addClassName('validate-custom');
        this.month.validate = this.validate.bind(this);
        this.year.addClassName('validate-custom');
        this.year.validate = this.validate.bind(this);

        this.year.setAttribute('autocomplete','off');

        this.advice.hide();
    },
    validate: function() {
        var error = false;
        if (this.day.value=='' && this.month.value=='' && this.year.value=='') {
            if (this.required) {
                error = 'This date is a required value.';
            } else {
                this.full.value = '';
            }
        } else if (this.day.value=='' || this.month.value=='' || this.year.value=='') {
            error = 'Please enter a valid full date.';
        } else {
            var date = new Date();
            if (this.day.value<1 || this.day.value>31) {
                error = 'Please enter a valid day (1-31).';
            } else if (this.month.value<1 || this.month.value>12) {
                error = 'Please enter a valid month (1-12).';
            } else if (this.year.value<1900 || this.year.value>date.getFullYear()) {
                error = 'Please enter a valid year (1900-'+date.getFullYear()+').';
            } else {
                this.full.value = this.format.replace(/(%m|%b)/i, this.month.value).replace(/(%d|%e)/i, this.day.value).replace(/%y/i, this.year.value);
                var testFull = this.month.value + '/' + this.day.value + '/'+ this.year.value;
                var test = new Date(testFull);
                if (isNaN(test)) {
                    error = 'Please enter a valid date.';
                }
            }
        }

        if (error !== false) {
            try {
                this.advice.innerHTML = Translator.translate(error);
            }
            catch (e) {
                this.advice.innerHTML = error;
            }
            this.advice.show();
            return false;
        }
        
        // fixing elements class
        this.day.removeClassName('validation-failed');
        this.month.removeClassName('validation-failed');
        this.year.removeClassName('validation-failed');
        
        this.advice.hide();
        return true;
    }
};

Varien.DOB = Class.create();
Varien.DOB.prototype = {
    initialize: function(selector, required, format) {
        var el = $$(selector)[0];
        var container       = {};
        container.day       = Element.select(el, '.dob-day input')[0];
        container.month     = Element.select(el, '.dob-month input')[0];
        container.year      = Element.select(el, '.dob-year input')[0];
        container.full      = Element.select(el, '.dob-full input')[0];
        container.advice    = Element.select(el, '.validation-advice')[0];
        
        new Varien.DateElement('container', container, required, format);
    }
};

Varien.FileElement = Class.create();
Varien.FileElement.prototype = {
    initialize: function (id) {
        this.fileElement = $(id);
        this.hiddenElement = $(id + '_value');
        
        this.fileElement.observe('change', this.selectFile.bind(this));
    },
    selectFile: function(event) {
        this.hiddenElement.value = this.fileElement.getValue();
    }
};

Validation.addAllThese([
    ['validate-custom', ' ', function(v,elm) {
        return elm.validate();
    }]
]);

function truncateOptions() {
    $$('.truncated').each(function(element){
        Event.observe(element, 'mouseover', function(){
            if (element.down('div.truncated_full_value')) {
                element.down('div.truncated_full_value').addClassName('show')
            }
        });
        Event.observe(element, 'mouseout', function(){
            if (element.down('div.truncated_full_value')) {
                element.down('div.truncated_full_value').removeClassName('show')
            }
        });

    });
}
Event.observe(window, 'load', function(){
   truncateOptions();
});

Element.addMethods({
    getInnerText: function(element)
    {
        element = $(element);
        if(element.innerText && !Prototype.Browser.Opera) {
            return element.innerText
        }
        return element.innerHTML.stripScripts().unescapeHTML().replace(/[\n\r\s]+/g, ' ').strip();
    }
});

if (!("console" in window) || !("firebug" in console))
{
    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
    "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];

    window.console = {};
    for (var i = 0; i < names.length; ++i)
        window.console[names[i]] = function() {}
}

/**
 * Executes event handler on the element. Works with event handlers attached by Prototype,
 * in a browser-agnostic fashion.
 * @param element The element object
 * @param event Event name, like 'change'
 *
 * @example fireEvent($('my-input', 'click'));
 */
function fireEvent(element, event){
    if (document.createEventObject){
        // dispatch for IE
        var evt = document.createEventObject();
        return element.fireEvent('on'+event,evt)
    }
    else{
        // dispatch for firefox + others
        var evt = document.createEvent("HTMLEvents");
        evt.initEvent(event, true, true ); // event type,bubbling,cancelable
        return !element.dispatchEvent(evt);
    }
}

/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Academic Free License (AFL 3.0)
 * that is bundled with this package in the file LICENSE_AFL.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/afl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    Varien
 * @package     js
 * @copyright   Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
 * @license     http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
 */
VarienForm = Class.create();
VarienForm.prototype = {
    initialize: function(formId, firstFieldFocus){
        this.form       = $(formId);
        if (!this.form) {
            return;
        }
        this.cache      = $A();
        this.currLoader = false;
        this.currDataIndex = false;
        this.validator  = new Validation(this.form);
        this.elementFocus   = this.elementOnFocus.bindAsEventListener(this);
        this.elementBlur    = this.elementOnBlur.bindAsEventListener(this);
        this.childLoader    = this.onChangeChildLoad.bindAsEventListener(this);
        this.highlightClass = 'highlight';
        this.extraChildParams = '';
        this.firstFieldFocus= firstFieldFocus || false;
        this.bindElements();
        if(this.firstFieldFocus){
            try{
                Form.Element.focus(Form.findFirstElement(this.form))
            }
            catch(e){}
        }
    },

    submit : function(url){
        if(this.validator && this.validator.validate()){
             this.form.submit();
        }
        return false;
    },

    bindElements:function (){
        var elements = Form.getElements(this.form);
        for (var row in elements) {
            if (elements[row].id) {
                Event.observe(elements[row],'focus',this.elementFocus);
                Event.observe(elements[row],'blur',this.elementBlur);
            }
        }
    },

    elementOnFocus: function(event){
        var element = Event.findElement(event, 'fieldset');
        if(element){
            Element.addClassName(element, this.highlightClass);
        }
    },

    elementOnBlur: function(event){
        var element = Event.findElement(event, 'fieldset');
        if(element){
            Element.removeClassName(element, this.highlightClass);
        }
    },

    setElementsRelation: function(parent, child, dataUrl, first){
        if (parent=$(parent)) {
            // TODO: array of relation and caching
            if (!this.cache[parent.id]){
                this.cache[parent.id] = $A();
                this.cache[parent.id]['child']     = child;
                this.cache[parent.id]['dataUrl']   = dataUrl;
                this.cache[parent.id]['data']      = $A();
                this.cache[parent.id]['first']      = first || false;
            }
            Event.observe(parent,'change',this.childLoader);
        }
    },

    onChangeChildLoad: function(event){
        element = Event.element(event);
        this.elementChildLoad(element);
    },

    elementChildLoad: function(element, callback){
        this.callback = callback || false;
        if (element.value) {
            this.currLoader = element.id;
            this.currDataIndex = element.value;
            if (this.cache[element.id]['data'][element.value]) {
                this.setDataToChild(this.cache[element.id]['data'][element.value]);
            }
            else{
                new Ajax.Request(this.cache[this.currLoader]['dataUrl'],{
                        method: 'post',
                        parameters: {"parent":element.value},
                        onComplete: this.reloadChildren.bind(this)
                });
            }
        }
    },

    reloadChildren: function(transport){
        var data = eval('(' + transport.responseText + ')');
        this.cache[this.currLoader]['data'][this.currDataIndex] = data;
        this.setDataToChild(data);
    },

    setDataToChild: function(data){
        if (data.length) {
            var child = $(this.cache[this.currLoader]['child']);
            if (child){
                var html = '<select name="'+child.name+'" id="'+child.id+'" class="'+child.className+'" title="'+child.title+'" '+this.extraChildParams+'>';
                if(this.cache[this.currLoader]['first']){
                    html+= '<option value="">'+this.cache[this.currLoader]['first']+'</option>';
                }
                for (var i in data){
                    if(data[i].value) {
                        html+= '<option value="'+data[i].value+'"';
                        if(child.value && (child.value == data[i].value || child.value == data[i].label)){
                            html+= ' selected';
                        }
                        html+='>'+data[i].label+'</option>';
                    }
                }
                html+= '</select>';
                Element.insert(child, {before: html});
                Element.remove(child);
            }
        }
        else{
            var child = $(this.cache[this.currLoader]['child']);
            if (child){
                var html = '<input type="text" name="'+child.name+'" id="'+child.id+'" class="'+child.className+'" title="'+child.title+'" '+this.extraChildParams+'>';
                Element.insert(child, {before: html});
                Element.remove(child);
            }
        }

        this.bindElements();
        if (this.callback) {
            this.callback();
        }
    }
}

RegionUpdater = Class.create();
RegionUpdater.prototype = {
    initialize: function (countryEl, regionTextEl, regionSelectEl, regions, disableAction, zipEl)
    {
        this.countryEl = $(countryEl);
        this.regionTextEl = $(regionTextEl);
        this.regionSelectEl = $(regionSelectEl);
        this.zipEl = $(zipEl);
        this.regions = regions;

        this.disableAction = (typeof disableAction=='undefined') ? 'hide' : disableAction;
        this.zipOptions = (typeof zipOptions=='undefined') ? false : zipOptions;

        if (this.regionSelectEl.options.length<=1) {
            this.update();
        }

        Event.observe(this.countryEl, 'change', this.update.bind(this));
    },

    update: function()
    {
        if (this.regions[this.countryEl.value]) {
            var i, option, region, def;

            if (this.regionTextEl) {
                def = this.regionTextEl.value.toLowerCase();
                this.regionTextEl.value = '';
            }
            if (!def) {
                def = this.regionSelectEl.getAttribute('defaultValue');
            }

            this.regionSelectEl.options.length = 1;
            for (regionId in this.regions[this.countryEl.value]) {
                region = this.regions[this.countryEl.value][regionId];

                option = document.createElement('OPTION');
                option.value = regionId;
                option.text = region.name;

                if (this.regionSelectEl.options.add) {
                    this.regionSelectEl.options.add(option);
                } else {
                    this.regionSelectEl.appendChild(option);
                }

                if (regionId==def || region.name.toLowerCase()==def || region.code.toLowerCase()==def) {
                    this.regionSelectEl.value = regionId;
                }
            }

            if (this.disableAction=='hide') {
                if (this.regionTextEl) {
                    this.regionTextEl.style.display = 'none';
                }

                this.regionSelectEl.style.display = '';
            } else if (this.disableAction=='disable') {
                if (this.regionTextEl) {
                    this.regionTextEl.disabled = true;
                }
                this.regionSelectEl.disabled = false;
            }
            this.setMarkDisplay(this.regionSelectEl, true);
        } else {
            if (this.disableAction=='hide') {
                if (this.regionTextEl) {
                    this.regionTextEl.style.display = '';
                }
                this.regionSelectEl.style.display = 'none';
                Validation.reset(this.regionSelectEl);
            } else if (this.disableAction=='disable') {
                if (this.regionTextEl) {
                    this.regionTextEl.disabled = false;
                }
                this.regionSelectEl.disabled = true;
            } else if (this.disableAction=='nullify') {
                this.regionSelectEl.options.length = 1;
                this.regionSelectEl.value = '';
                this.regionSelectEl.selectedIndex = 0;
                this.lastCountryId = '';
            }
            this.setMarkDisplay(this.regionSelectEl, false);
        }

        // Make Zip and its label required/optional
        var zipUpdater = new ZipUpdater(this.countryEl.value, this.zipEl);
        zipUpdater.update();
    },

    setMarkDisplay: function(elem, display){
        elem = $(elem);
        var labelElement = elem.up(0).down('label > span.required') ||
                           elem.up(1).down('label > span.required') ||
                           elem.up(0).down('label.required > em') ||
                           elem.up(1).down('label.required > em');
        if(labelElement) {
            inputElement = labelElement.up().next('input');
            if (display) {
                labelElement.show();
                if (inputElement) {
                    inputElement.addClassName('required-entry');
                }
            } else {
                labelElement.hide();
                if (inputElement) {
                    inputElement.removeClassName('required-entry');
                }
            }
        }
    }
}

ZipUpdater = Class.create();
ZipUpdater.prototype = {
    initialize: function(country, zipElement)
    {
        this.country = country;
        this.zipElement = $(zipElement);
    },

    update: function()
    {
        // Country ISO 2-letter codes must be pre-defined
        if (typeof optionalZipCountries == 'undefined') {
            return false;
        }

        // Ajax-request and normal content load compatibility
        if (this.zipElement != undefined) {
            this._setPostcodeOptional();
        } else {
            Event.observe(window, "load", this._setPostcodeOptional.bind(this));
        }
    },

    _setPostcodeOptional: function()
    {
        this.zipElement = $(this.zipElement);
        if (this.zipElement == undefined) {
            return false;
        }

        // find label
        var label = $$('label[for="' + this.zipElement.id + '"]')[0];
        if (label != undefined) {
            var wildCard = label.down('em') || label.down('span.required');
        }

        // Make Zip and its label required/optional
        if (optionalZipCountries.indexOf(this.country) != -1) {
            while (this.zipElement.hasClassName('required-entry')) {
                this.zipElement.removeClassName('required-entry');
            }
            if (wildCard != undefined) {
                wildCard.hide();
            }
        } else {
            this.zipElement.addClassName('required-entry');
            if (wildCard != undefined) {
                wildCard.show();
            }
        }
    }
}

/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Academic Free License (AFL 3.0)
 * that is bundled with this package in the file LICENSE_AFL.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/afl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    Varien
 * @package     js
 * @copyright   Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
 * @license     http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
 */

/**
 * @classDescription simple Navigation with replacing old handlers
 * @param {String} id id of ul element with navigation lists
 * @param {Object} settings object with settings
 */
var mainNav = function() {

    var main = {
        obj_nav :   $(arguments[0]) || $("nav"),

        settings :  {
            show_delay      :   0,
            hide_delay      :   0,
            _ie6            :   /MSIE 6.+Win/.test(navigator.userAgent),
            _ie7            :   /MSIE 7.+Win/.test(navigator.userAgent)
        },

        init :  function(obj, level) {
            obj.lists = obj.childElements();
            obj.lists.each(function(el,ind){
                main.handlNavElement(el);
                if((main.settings._ie6 || main.settings._ie7) && level){
                    main.ieFixZIndex(el, ind, obj.lists.size());
                }
            });
            if(main.settings._ie6 && !level){
                document.execCommand("BackgroundImageCache", false, true);
            }
        },

        handlNavElement :   function(list) {
            if(list !== undefined){
                list.onmouseover = function(){
                    main.fireNavEvent(this,true);
                };
                list.onmouseout = function(){
                    main.fireNavEvent(this,false);
                };
                if(list.down("ul")){
                    main.init(list.down("ul"), true);
                }
            }
        },

        ieFixZIndex : function(el, i, l) {
            if(el.tagName.toString().toLowerCase().indexOf("iframe") == -1){
                el.style.zIndex = l - i;
            } else {
                el.onmouseover = "null";
                el.onmouseout = "null";
            }
        },

        fireNavEvent :  function(elm,ev) {
            if(ev){
                elm.addClassName("over");
                elm.down("a").addClassName("over");
                if (elm.childElements()[1]) {
                    main.show(elm.childElements()[1]);
                }
            } else {
                elm.removeClassName("over");
                elm.down("a").removeClassName("over");
                if (elm.childElements()[1]) {
                    main.hide(elm.childElements()[1]);
                }
            }
        },

        show : function (sub_elm) {
            if (sub_elm.hide_time_id) {
                clearTimeout(sub_elm.hide_time_id);
            }
            sub_elm.show_time_id = setTimeout(function() {
                if (!sub_elm.hasClassName("shown-sub")) {
                    sub_elm.addClassName("shown-sub");
                }
            }, main.settings.show_delay);
        },

        hide : function (sub_elm) {
            if (sub_elm.show_time_id) {
                clearTimeout(sub_elm.show_time_id);
            }
            sub_elm.hide_time_id = setTimeout(function(){
                if (sub_elm.hasClassName("shown-sub")) {
                    sub_elm.removeClassName("shown-sub");
                }
            }, main.settings.hide_delay);
        }

    };
    if (arguments[1]) {
        main.settings = Object.extend(main.settings, arguments[1]);
    }
    if (main.obj_nav) {
        main.init(main.obj_nav, false);
    }
};

document.observe("dom:loaded", function() {
    //run navigation without delays and with default id="#nav"
    //mainNav();

    //run navigation with delays
    mainNav("nav", {"show_delay":"100","hide_delay":"100"});
});

/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Academic Free License (AFL 3.0)
 * that is bundled with this package in the file LICENSE_AFL.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/afl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    Mage
 * @package     js
 * @copyright   Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
 * @license     http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
 */

var Translate = Class.create();
Translate.prototype = {
    initialize: function(data){
        this.data = $H(data);
    },

    translate : function(){
        var args = arguments;
        var text = arguments[0];

        if(this.data.get(text)){
            return this.data.get(text);
        }
        return text;
    },
    add : function() {
        if (arguments.length > 1) {
            this.data.set(arguments[0], arguments[1]);
        } else if (typeof arguments[0] =='object') {
            $H(arguments[0]).each(function (pair){
                this.data.set(pair.key, pair.value);
            }.bind(this));
        }
    }
}

/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Academic Free License (AFL 3.0)
 * that is bundled with this package in the file LICENSE_AFL.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/afl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    Mage
 * @package     js
 * @copyright   Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
 * @license     http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
 */
// old school cookie functions grabbed off the web

if (!window.Mage) var Mage = {};

Mage.Cookies = {};
Mage.Cookies.expires  = null;
Mage.Cookies.path     = '/';
Mage.Cookies.domain   = null;
Mage.Cookies.secure   = false;
Mage.Cookies.set = function(name, value){
     var argv = arguments;
     var argc = arguments.length;
     var expires = (argc > 2) ? argv[2] : Mage.Cookies.expires;
     var path = (argc > 3) ? argv[3] : Mage.Cookies.path;
     var domain = (argc > 4) ? argv[4] : Mage.Cookies.domain;
     var secure = (argc > 5) ? argv[5] : Mage.Cookies.secure;
     document.cookie = name + "=" + escape (value) +
       ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
       ((path == null) ? "" : ("; path=" + path)) +
       ((domain == null) ? "" : ("; domain=" + domain)) +
       ((secure == true) ? "; secure" : "");
};

Mage.Cookies.get = function(name){
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    var j = 0;
    while(i < clen){
        j = i + alen;
        if (document.cookie.substring(i, j) == arg)
            return Mage.Cookies.getCookieVal(j);
        i = document.cookie.indexOf(" ", i) + 1;
        if(i == 0)
            break;
    }
    return null;
};

Mage.Cookies.clear = function(name) {
  if(Mage.Cookies.get(name)){
    document.cookie = name + "=" +
    "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
};

Mage.Cookies.getCookieVal = function(offset){
   var endstr = document.cookie.indexOf(";", offset);
   if(endstr == -1){
       endstr = document.cookie.length;
   }
   return unescape(document.cookie.substring(offset, endstr));
};


var Klarna = Class.create({
    initialize: function() {
        this.element_id = false;
        this.merchant_id = false;
        this.fee = false;
        this.country = false;
        this.url = false;
    },

    setMerchantId: function(merchant_id) {
        this.merchant_id = merchant_id;
    },

    setElementId: function(element_id) {
        this.element_id = element_id;
    },

    setFee: function(fee) {
        this.fee = fee;
    },

    setCountry: function(country) {
        this.country = country;
    },

    setUrl: function(url) {
        this.url = url;
    },

    loadExternal: function() {
        var script = new Element('script', {
            src: 'https://integration.klarna.com/js/klarnainvoice.js'
        });
        $$('head').first().insert(script);
        var scriptpp = new Element('script', {
            src: 'https://integration.klarna.com/js/klarnapart.js'
        });
        $$('head').first().insert(scriptpp);
   },

    showTerms: function() {
        var manager = this;
        InitKlarnaInvoiceElements(manager.element_id, manager.merchant_id, manager.country, manager.fee);
        ShowKlarnaInvoicePopup();
    },

    showPPTerms: function() {
        var managerpp = this;
        InitKlarnaPartPaymentElements(managerpp.element_id, managerpp.merchant_id, managerpp.country, managerpp.fee);
        ShowKlarnaPartPaymentPopup();
    },

    getAddresses: function(pno) {
        var elemt = this.element_id;
        Element.show('loadingmask-' + this.element_id);
        var reloadurl = this.url;
        new Ajax.Updater('output-div-' + this.element_id, reloadurl + '?cache' + parseInt(Math.random() * 99999999) + '&type=' + this.element_id, {
            parameters: 'pno=' + pno,
            onComplete: function(response) {
                Element.hide('loadingmask-' + elemt);
            }
        });
    }
});

var klarna = new Klarna();
var klarnapp = new Klarna();

document.observe('dom:loaded', function() {
    klarna.loadExternal();
});


/*
 * Copyright (c) 2009 Simo Kinnunen.
 * Licensed under the MIT license.
 *
 * @version 1.09
 */
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]-=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.
 * 
 * Trademark:
 * AUdimat is a trademark of Jack Usine.
 * 
 * Description:
 * Copyright (c) 2006 Jack Usine / SMeltery. All rights reserved.
 * 
 * Designer:
 * Jack Usine
 * 
 * Vendor URL:
 * www.smeltery.net
 */
Cufon.registerFont((function(f){var b=_cufon_bridge_={p:[{"d":"565,0v-250,22,-418,-68,-418,-305r0,-754r162,0r0,754v-1,135,114,151,256,145v96,-4,144,-60,144,-145r0,-754r161,0r0,1059r-65,0r-160,-160v-1,85,-17,154,-80,160","w":1028},{"d":"158,0r0,-1397r161,0r0,1397r-161,0xm158,-1810r145,288r-121,0r-192,-288r168,0","w":477},{"d":"518,-515v-70,-79,-271,-61,-268,66r-164,-2v20,-188,184,-316,402,-259v119,31,173,129,262,190v24,16,51,22,90,22v85,-1,129,-46,143,-116r160,2v-19,189,-182,317,-401,260v-80,-21,-136,-73,-185,-123r2,0","w":1229},{"d":"565,0v-250,22,-418,-68,-418,-305r0,-754r162,0r0,754v-1,135,114,151,256,145v96,-4,144,-60,144,-145r0,-754r161,0r0,1059r-65,0r-160,-160v-1,85,-17,154,-80,160xm432,-1507r146,288r-121,0r-193,-288r168,0","w":1028},{"d":"817,-305v7,87,52,145,146,145r415,0r0,160r-415,0v-127,-6,-231,-47,-275,-139v-14,129,-139,150,-289,139v-182,-13,-303,-107,-303,-305v0,-199,121,-305,303,-305r256,0r0,-146v0,-96,-58,-143,-143,-143r-350,0r0,-160r350,0v93,7,163,40,225,88v54,-48,126,-88,226,-88v251,0,415,68,415,303v0,184,-105,307,-305,307r-256,0r0,144xm1073,-899v-139,-9,-257,7,-256,143r0,146r256,0v86,-8,146,-49,146,-146v0,-96,-61,-137,-146,-143xm399,-160v141,9,256,-7,256,-145r0,-144r-256,0v-84,7,-143,49,-143,144v0,94,58,139,143,145","w":1475},{"d":"444,-1059v251,-9,418,67,418,303v0,184,-106,307,-307,307r-256,0r0,144v7,87,51,145,145,145r418,0r0,160r-418,0v-183,-16,-307,-105,-307,-305r0,-451v14,-184,108,-296,307,-303xm555,-899v-140,-9,-256,7,-256,143r0,146r256,0v87,-7,145,-49,145,-146v0,-96,-59,-138,-145,-143xm422,-1507r145,288r-121,0r-192,-288r168,0","w":958},{"d":"319,-1397r0,1237r474,0r0,160r-635,0r0,-1397r161,0","w":786,"k":{"\u00dd":82,"\u00b0":287,"*":287,"'":287,"\"":287,"Y":82,"V":123,"T":82}},{"d":"801,-948v38,47,62,106,61,192r0,451v-15,183,-106,301,-305,305v-119,2,-219,-3,-291,-51r-45,74r-76,-52r52,-84v-35,-47,-61,-107,-60,-192r0,-451v14,-184,108,-300,307,-303v118,-2,218,2,287,51r45,-75r78,49xm557,-899v-140,0,-257,6,-256,143r0,467r348,-581v-23,-17,-51,-29,-92,-29xm444,-160v141,0,258,-7,256,-145r-2,-469r-348,584v22,19,52,30,94,30","w":999},{"d":"1276,-1395r-229,1395r-183,0r-209,-758r-211,758r-182,0r-227,-1395r160,0r174,1153r211,-704r157,0r215,704r164,-1153r160,0","w":1311,"k":{"\u00c6":102}},{"d":"575,-160v94,-4,146,-58,146,-145r0,-754r162,0r0,1059r-68,0r-158,-160v-1,86,-18,153,-82,160v-101,11,-180,-4,-256,-31r0,480r-161,0r0,-1508r161,0r0,754v0,136,114,151,256,145","w":1040},{"d":"963,-274v-101,78,-262,128,-431,92r-34,182r-95,0r41,-211v-183,-83,-327,-234,-327,-489v0,-246,141,-404,317,-486v63,-28,131,-42,203,-43r33,-168r96,0r-33,174v84,15,161,48,230,99r-99,127v-44,-32,-98,-59,-162,-68r-139,725v114,28,236,-7,303,-63xm477,-1028v-137,69,-241,230,-187,431v28,103,97,178,185,224r131,-694v-46,5,-89,18,-129,39","w":1059},{"d":"993,-1397r0,1397r-172,0r-502,-1067r0,1067r-161,0r0,-1397r172,0r501,1053r0,-1053r162,0xm446,-1649v-64,0,-87,59,-104,107r-70,0v15,-84,56,-173,110,-222v67,-60,151,5,206,31v36,16,81,50,125,50v64,0,89,-57,104,-107r72,0v-14,87,-56,173,-111,222v-67,59,-150,-5,-205,-31v-37,-17,-80,-50,-127,-50","w":1151},{"d":"575,-1395v250,20,418,144,418,416v0,273,-166,418,-418,418r-256,0r0,561r-161,0r0,-1395r417,0xm575,-721v155,-12,256,-90,256,-258v0,-167,-102,-256,-256,-256r-256,0r0,514r256,0","w":1049,"k":{"\u00c5":41,"\u00c3":41,"\u00c4":41,"\u00c2":41,"\u00c0":41,"\u00c1":41,".":205,",":205,"\u00c6":123,"J":123,"A":41,"_":205}},{"d":"1217,-1397r0,1397r-160,0r0,-1118r-369,639r-371,-639r0,1118r-159,0r0,-1397r174,0r356,592r354,-592r175,0","w":1374},{"d":"86,-1307r0,-112r514,0r0,112r-514,0","w":686},{"d":"324,-1399r0,160r-162,0r0,-160r162,0xm281,-950r65,772r0,176r-205,0v-3,-337,44,-628,64,-948r76,0","w":487},{"d":"207,289v136,1,154,-116,145,-258r-325,-1090r168,0r239,873r238,-873r170,0r-328,1090r0,114v-2,200,-123,304,-307,304r-193,0r0,-160r193,0xm684,-1507r-190,288r-123,0r145,-288r168,0","w":856,"k":{".":102,",":102,"_":102}},{"d":"442,-1237v-96,0,-143,54,-143,145r0,258v138,6,303,-19,398,30v96,49,163,142,163,274v0,129,17,279,-30,367v-51,96,-143,163,-275,163v-96,0,-192,4,-255,-30v-96,-51,-163,-142,-163,-275r0,-787v11,-180,112,-305,305,-305r373,0r0,160r-373,0xm555,-160v90,-3,144,-48,143,-145r0,-225v-4,-89,-46,-145,-143,-144r-256,0r0,369v1,91,47,145,143,145r113,0","w":946},{"d":"55,-20r0,-199r596,-311r-596,-312r0,-196r766,436r0,141","w":877},{"d":"950,0r-162,0r-61,-225r-512,0r-59,225r-162,0r371,-1397r213,0xm682,-385r-195,-840r-32,0r-195,840r422,0xm471,-1477v-112,0,-188,-76,-188,-188v0,-113,75,-190,188,-190v114,0,191,76,191,190v0,113,-78,188,-191,188xm471,-1765v-56,0,-100,44,-100,100v0,56,44,100,100,100v56,0,100,-44,100,-100v0,-56,-44,-100,-100,-100","w":944,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"158,0r0,-1397r161,0r0,1397r-161,0xm489,-1810r-190,288r-123,0r146,-288r167,0","w":477},{"d":"811,-276v-14,174,-131,261,-305,272v-244,15,-418,-68,-418,-305v0,-152,91,-232,164,-318v19,-24,40,-47,62,-71v59,-68,119,-139,128,-254r99,0v-3,232,-113,360,-219,489v-36,44,-70,84,-72,154v-2,96,53,145,141,145r113,0v77,-5,129,-43,143,-112r164,0xm584,-1202r-199,0r0,-197r199,0r0,197","w":895},{"d":"212,-1051v141,-235,422,-418,788,-323v249,65,422,241,488,490v95,362,-87,650,-320,788v-134,79,-349,126,-538,71v-246,-73,-415,-241,-488,-487v-56,-192,-6,-413,70,-539xm597,-183v134,59,303,59,436,0v191,-85,341,-253,341,-515v0,-263,-150,-433,-341,-518v-133,-59,-303,-59,-436,0v-192,85,-341,255,-341,518v0,262,151,430,341,515xm985,-526v35,31,55,58,88,90v-104,98,-250,127,-393,72v-128,-50,-213,-161,-213,-336v0,-175,95,-283,222,-334v141,-57,307,-10,384,71r-90,91v-41,-34,-90,-62,-158,-62v-146,0,-231,91,-231,236v0,146,84,233,231,233v68,0,123,-24,160,-61","w":1630},{"d":"109,-1249v0,-231,206,-272,454,-260r0,161v-97,4,-210,-15,-259,46v-56,71,-43,243,67,243r192,0r0,160r-223,0r0,899r-162,0r0,-899r-112,0r0,-160r157,0v-50,-50,-114,-108,-114,-190","w":598},{"d":"346,-1399v91,5,154,55,154,152r0,219v-5,91,-57,154,-154,154r-106,0v-92,-5,-154,-56,-154,-154v0,-159,199,-154,326,-199v4,-54,-17,-84,-66,-84r-215,0r0,-88r215,0xm86,-612r414,0r0,88r-414,0r0,-88xm86,-786r414,0r0,88r-414,0r0,-88xm346,-963v86,4,64,-96,66,-174v-71,22,-163,30,-216,67v-48,33,-16,107,44,107r106,0","w":586},{"d":"236,-1092v0,-109,-68,-150,-181,-145r0,-160v153,-5,255,58,309,163v20,39,31,86,31,142r0,336v5,72,62,100,113,126v33,16,71,28,113,38r0,123v-99,21,-226,50,-226,164r0,338v-5,130,-67,226,-161,275v-47,24,-107,32,-179,30r0,-160v118,9,180,-42,181,-147r0,-336v10,-113,58,-192,180,-195r0,-59v-122,-3,-180,-84,-180,-197r0,-336","w":655},{"d":"922,-791r0,498r-162,0r0,-336r-674,0r0,-162r836,0","w":1008},{"d":"528,-113r390,-417r-390,-418r185,0r395,418r-395,417r-185,0xm55,-113r389,-417r-389,-418r185,0r397,418r-397,417r-185,0","w":1163},{"d":"242,-1397v118,233,231,516,231,867v0,352,-112,635,-231,868r-187,0v130,-224,258,-510,258,-868v0,-358,-128,-642,-258,-867r187,0","w":590},{"d":"555,-1397v199,8,305,121,305,305r0,787v-5,236,-165,315,-418,305v-199,-8,-305,-122,-305,-305r0,-787v5,-236,165,-315,418,-305xm555,-160v96,-4,143,-60,143,-145r0,-787v1,-138,-114,-150,-256,-145v-94,4,-143,58,-143,145r0,787v-1,135,114,151,256,145","w":997},{"d":"465,-1059v248,-22,418,63,418,299r0,760r-162,0r0,-754v0,-137,-114,-150,-256,-145v-97,4,-146,58,-146,145r0,754r-161,0r0,-1059r67,0r158,160v1,-86,17,-154,82,-160xm393,-1346v-64,0,-87,59,-104,107r-70,0v15,-84,57,-172,111,-221v67,-60,150,4,205,30v35,16,81,50,124,50v64,0,90,-57,105,-107r72,0v-15,86,-57,173,-112,222v-67,59,-149,-5,-204,-31v-37,-17,-80,-50,-127,-50","w":1030},{"d":"158,0r0,-1397r161,0r0,1397r-161,0","w":477},{"d":"207,289v136,1,154,-116,145,-258r-325,-1090r168,0r239,873r238,-873r170,0r-328,1090r0,114v-2,200,-123,304,-307,304r-193,0r0,-160r193,0","w":856,"k":{".":102,",":102,"_":102}},{"d":"698,-858r381,571r-129,90r-368,-551r-367,551r-129,-92r381,-569r231,0","w":1165},{"d":"442,-1059v252,-9,418,67,418,303r0,451v-15,183,-106,298,-305,305v-252,9,-418,-69,-418,-305r0,-451v15,-183,106,-296,305,-303xm442,-160v141,6,256,-7,256,-145r0,-451v-7,-84,-47,-140,-143,-143v-140,-4,-257,6,-256,143r0,451v7,86,50,141,143,145xm420,-1507r145,288r-121,0r-192,-288r168,0","w":997},{"d":"643,-1264r-180,0r0,-178r180,0r0,178xm266,-1264r-180,0r0,-178r180,0r0,178","w":729},{"d":"1368,-244r0,109r-65,0r0,137r-113,0r0,-137r-287,0r0,-121r174,-465r121,0r-188,477r180,0r0,-137r113,0r0,137r65,0xm362,-782r138,0r0,108r-383,0r0,-108r137,0r0,-504r-137,0r0,-111r245,0r0,615xm287,0r835,-1397r123,0r-835,1397r-123,0","w":1485},{"d":"51,287v82,-2,113,-66,113,-142r0,-1200r160,0r0,1200v-3,189,-109,276,-273,301r0,-159xm324,-1509r0,161r-160,0r0,-161r160,0","w":481},{"d":"643,-700r336,700r-176,0r-285,-592r-287,592r-176,0r336,-700r-336,-697r176,0r287,592r285,-592r178,0","w":1036},{"d":"55,-1397r385,0r0,1735r-385,0r0,-160r226,0r0,-1415r-226,0r0,-160","w":618},{"d":"950,0r-162,0r-61,-225r-512,0r-59,225r-162,0r371,-1397r213,0xm682,-385r-195,-840r-32,0r-195,840r422,0xm721,-1810r-191,288r-122,0r145,-288r168,0","w":944,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"575,-1059v182,15,306,104,306,303r0,756r-162,0r0,-756v-1,-96,-59,-143,-144,-143r-256,0r0,899r-161,0r0,-1513r161,0r0,454r256,0","w":1028},{"d":"526,-530r398,-418r184,0r-389,418r389,417r-184,0xm55,-530r396,-418r184,0r-389,418r389,417r-184,0","w":1163},{"d":"210,-1274v88,-95,294,-170,464,-91v144,66,258,191,258,390v0,199,-114,325,-258,389v-101,44,-228,44,-329,0v-145,-64,-259,-190,-259,-389v0,-128,58,-228,124,-299xm206,-846v59,145,238,252,432,176v143,-55,253,-247,174,-433v-48,-113,-147,-202,-302,-202v-155,0,-254,90,-304,202v-35,79,-32,177,0,257xm545,-1167v67,5,112,42,112,114v0,55,-29,85,-67,101r94,172r-72,0r-84,-164r-116,0r0,164r-60,0r0,-387r193,0xm412,-1001v72,-7,185,28,186,-52v1,-83,-113,-48,-186,-55r0,107","w":1018},{"d":"883,-1397r0,160r-564,0r0,403r449,0r0,160r-449,0r0,514r564,0r0,160r-725,0r0,-1397r725,0xm791,-1567r-181,0r0,-178r181,0r0,178xm414,-1567r-181,0r0,-178r181,0r0,178"},{"d":"319,-1397r0,563r512,0r0,-563r162,0r0,1397r-162,0r0,-674r-512,0r0,674r-161,0r0,-1397r161,0","w":1151},{"d":"514,-1059v183,15,307,103,307,303r0,756r-67,0r-158,-160v-1,86,-17,154,-82,160v-250,22,-418,-68,-418,-305v0,-200,123,-305,307,-305r256,0r0,-146v-1,-96,-59,-143,-145,-143r-348,0r0,-160r348,0xm514,-160v88,-6,145,-50,145,-145r0,-144r-256,0v-85,7,-144,48,-145,144v0,134,114,155,256,145xm715,-1507r-191,288r-123,0r146,-288r168,0"},{"d":"166,-693v-87,-87,-149,-284,-82,-445v58,-140,176,-243,356,-259r0,834v-117,-8,-208,-64,-274,-130xm618,-1397r93,0r0,1622r-93,0r0,-1622xm981,-1397r0,1622r-92,0r0,-1622r92,0","w":1139},{"d":"238,-1120r-162,-2v5,-124,72,-210,168,-249v126,-52,362,-33,446,42v59,54,107,124,107,237v0,266,-135,450,-247,621v-70,108,-155,210,-247,311r494,0r0,160r-678,0r0,-160v173,-201,318,-389,435,-634v42,-88,80,-186,81,-298v1,-96,-53,-145,-141,-145r-115,0v-87,0,-131,42,-141,117","w":883},{"d":"514,-1059v183,15,307,103,307,303r0,756r-67,0r-158,-160v-1,86,-17,154,-82,160v-250,22,-418,-68,-418,-305v0,-200,123,-305,307,-305r256,0r0,-146v-1,-96,-59,-143,-145,-143r-348,0r0,-160r348,0xm514,-160v88,-6,145,-50,145,-145r0,-144r-256,0v-85,7,-144,48,-145,144v0,134,114,155,256,145xm383,-1507r145,288r-120,0r-193,-288r168,0"},{"d":"819,-641v0,132,-70,214,-149,268v90,47,152,141,149,291v-2,201,-120,307,-305,307r-305,0r0,-162r305,0v85,-7,142,-49,143,-145v1,-137,-116,-143,-256,-143v-183,0,-305,-106,-305,-305v0,-145,82,-223,172,-281v-92,-56,-172,-135,-172,-281v0,-199,122,-305,305,-305r306,0r0,160r-306,0v-85,7,-142,51,-143,145v-1,135,115,144,256,144v185,0,305,106,305,307xm401,-385v141,0,256,-7,256,-145v0,-140,-6,-257,-143,-256r-113,0v-85,7,-140,51,-143,145v-5,140,9,256,143,256","w":915},{"d":"811,-283v0,192,-128,283,-307,283r-348,0r0,-160r348,0v88,-7,145,-50,145,-145v0,-106,-119,-117,-207,-144v-171,-53,-356,-104,-356,-327v0,-192,129,-283,307,-283r348,0r0,160r-348,0v-85,8,-145,48,-145,143v0,106,121,115,209,146r79,24v143,48,275,114,275,303","w":897},{"d":"86,-197r199,0v-4,109,12,241,-19,322v-26,69,-70,118,-129,145v-14,-23,-33,-40,-47,-63v76,-26,115,-104,92,-207r-96,0r0,-197","w":371,"k":{"\u00ff":102,"\u00fd":102,"\u00dd":102,"Y":102,"V":143,"T":102,"y":102,"w":102,"v":102}},{"d":"444,-1059v251,-9,418,67,418,303v0,184,-106,307,-307,307r-256,0r0,144v7,87,51,145,145,145r418,0r0,160r-418,0v-183,-16,-307,-105,-307,-305r0,-451v14,-184,108,-296,307,-303xm555,-899v-140,-9,-256,7,-256,143r0,146r256,0v87,-7,145,-49,145,-146v0,-96,-59,-138,-145,-143xm782,-1264r-180,0r0,-178r180,0r0,178xm406,-1264r-181,0r0,-178r181,0r0,178","w":958},{"d":"471,-160r0,160r-385,0r0,-160r113,0r0,-899r161,0r0,899r111,0xm532,-1507r-190,288r-123,0r146,-288r167,0","w":557},{"d":"555,-834v200,2,307,120,307,304r0,225v-5,236,-166,316,-418,305v-189,-8,-293,-97,-305,-274r162,0v4,119,129,117,254,114v94,-1,145,-58,145,-145r0,-225v-7,-86,-51,-143,-145,-144r-418,0r0,-723r656,0r0,160r-494,0r0,403r256,0","w":948},{"d":"444,-1059v251,-9,418,67,418,303v0,184,-106,307,-307,307r-256,0r0,144v7,87,51,145,145,145r418,0r0,160r-418,0v-183,-16,-307,-105,-307,-305r0,-451v14,-184,108,-296,307,-303xm555,-899v-140,-9,-256,7,-256,143r0,146r256,0v87,-7,145,-49,145,-146v0,-96,-59,-138,-145,-143xm647,-1221r-143,-180r-142,180r-145,0r232,-288r112,0r232,288r-146,0","w":958},{"d":"686,-918v52,-68,114,-141,227,-141v199,0,304,120,304,303r0,756r-160,0r0,-756v-7,-85,-48,-143,-144,-143v-96,0,-145,57,-145,143r0,756r-162,0r0,-756v0,-96,-58,-143,-143,-143v-97,0,-146,57,-146,143r0,756r-159,0r0,-1059r65,0r160,158v1,-85,19,-143,80,-158v119,0,186,63,223,141","w":1364},{"d":"262,242v0,-64,-45,-105,-110,-109r0,-203r133,0r0,187v77,12,133,67,133,159v0,150,-162,171,-332,166r0,-90v102,9,176,-22,176,-110","w":504},{"d":"442,-1059v252,-9,418,67,418,303r0,451v-15,183,-106,298,-305,305v-252,9,-418,-69,-418,-305r0,-451v15,-183,106,-296,305,-303xm442,-160v141,6,256,-7,256,-145r0,-451v-7,-84,-47,-140,-143,-143v-140,-4,-257,6,-256,143r0,451v7,86,50,141,143,145xm371,-1346v-65,0,-88,59,-105,107r-69,0v15,-84,57,-172,111,-221v67,-60,149,4,204,30v36,16,81,50,125,50v64,0,89,-57,104,-107r72,0v-14,87,-56,173,-111,222v-67,59,-149,-5,-204,-31v-37,-17,-80,-50,-127,-50","w":997},{"d":"442,-1059v252,-9,418,67,418,303r0,451v-15,183,-106,298,-305,305v-252,9,-418,-69,-418,-305r0,-451v15,-183,106,-296,305,-303xm442,-160v141,6,256,-7,256,-145r0,-451v-7,-84,-47,-140,-143,-143v-140,-4,-257,6,-256,143r0,451v7,86,50,141,143,145xm645,-1221r-143,-180r-142,180r-145,0r231,-288r113,0r232,288r-146,0","w":997},{"d":"86,-199r197,0r0,197r-197,0r0,-197","w":369,"k":{"\u00ff":102,"\u00fd":102,"\u00dd":102,"Y":102,"V":143,"T":102,"y":102,"w":102,"v":102}},{"d":"442,-1059v252,-9,418,67,418,303r0,451v-15,183,-106,298,-305,305v-252,9,-418,-69,-418,-305r0,-451v15,-183,106,-296,305,-303xm442,-160v141,6,256,-7,256,-145r0,-451v-7,-84,-47,-140,-143,-143v-140,-4,-257,6,-256,143r0,451v7,86,50,141,143,145xm780,-1264r-180,0r0,-178r180,0r0,178xm403,-1264r-180,0r0,-178r180,0r0,178","w":997},{"d":"950,0r-162,0r-61,-225r-512,0r-59,225r-162,0r371,-1397r213,0xm682,-385r-195,-840r-32,0r-195,840r422,0xm750,-1567r-181,0r0,-178r181,0r0,178xm373,-1567r-180,0r0,-178r180,0r0,178","w":944,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"795,-737v105,65,198,167,198,342v0,186,-106,304,-241,364v-48,21,-99,31,-154,31r-440,0r0,-1397r407,0v180,5,295,103,353,234v20,47,30,97,30,151v-2,133,-84,212,-153,275xm598,-160v168,-2,278,-161,214,-326v-31,-82,-104,-143,-214,-143r-279,0r0,469r279,0xm319,-1237r0,446v113,-6,243,16,331,-17v98,-37,170,-166,118,-292v-32,-77,-99,-137,-203,-137r-246,0","w":1090},{"d":"137,-756v3,-199,123,-303,305,-303r256,0r0,-450r162,0r0,1509r-65,0r-160,-160v-2,57,-11,99,-33,135v-26,42,-101,25,-160,25v-183,0,-305,-106,-305,-305r0,-451xm442,-899v-83,8,-143,48,-143,143r0,451v7,86,50,141,143,145v141,6,256,-7,256,-145r0,-594r-256,0","w":1018},{"d":"461,-1509v243,-15,401,74,401,305v0,197,-182,256,-241,406v-46,115,79,151,161,188v131,59,281,120,281,305v0,199,-120,305,-303,305r-193,0r0,-160r193,0v85,-7,143,-49,143,-145v0,-114,-108,-138,-192,-174v-124,-53,-258,-103,-258,-277v0,-194,185,-242,238,-396v37,-108,-33,-196,-136,-196r-94,0v-94,1,-144,58,-144,144r0,1204r-159,0r0,-1204v2,-199,121,-294,303,-305","w":1118},{"d":"565,0v-250,22,-418,-68,-418,-305r0,-754r162,0r0,754v-1,135,114,151,256,145v96,-4,144,-60,144,-145r0,-754r161,0r0,1059r-65,0r-160,-160v-1,85,-17,154,-80,160xm764,-1507r-191,288r-122,0r145,-288r168,0","w":1028},{"d":"399,-1507r-190,288r-123,0r145,-288r168,0","w":485},{"d":"367,449v-163,-13,-281,-83,-281,-259v0,-119,63,-182,172,-190v-100,-25,-172,-89,-172,-217v0,-108,89,-152,166,-191v-55,-57,-94,-128,-98,-233v-11,-253,68,-418,305,-418r418,0r0,105r-162,55v103,0,156,53,162,143v17,253,-70,412,-308,418v-117,3,-208,-6,-284,-47v-31,21,-62,53,-62,102v1,81,50,123,123,123r293,0v183,15,303,106,303,305v0,183,-105,304,-303,304r-272,0xm782,145v0,-85,-48,-144,-143,-145r-272,0v-82,7,-145,51,-144,145v1,96,59,144,144,144r272,0v85,-7,143,-48,143,-144xm459,-498v140,0,256,-7,256,-143v0,-142,-6,-258,-146,-258v-140,0,-256,7,-256,143v0,142,7,258,146,258","w":997},{"d":"575,-1397v250,20,418,144,418,416r0,563v-20,251,-145,418,-418,418r-417,0r0,-1397r417,0xm575,-160v168,-2,256,-104,256,-258r0,-563v-2,-167,-102,-256,-256,-256r-256,0r0,1077r256,0","w":1110},{"d":"950,-385v-17,219,-132,354,-346,381r0,121v77,12,133,66,133,159v0,150,-162,170,-331,166r0,-90v102,9,176,-22,176,-110v0,-65,-46,-105,-111,-109r0,-137v-225,-29,-354,-182,-354,-414r0,-563v20,-250,146,-416,418,-416v255,0,384,136,415,357v3,19,1,28,0,28r-162,0v-13,-142,-95,-225,-253,-225v-167,0,-256,102,-256,256r0,563v13,154,88,258,256,258v157,0,239,-84,253,-225r162,0","w":1038},{"d":"571,0v-235,8,-385,-81,-385,-305r0,-594r-110,0r0,-27r250,-358r20,0r0,225r225,0r0,160r-225,0r0,594v8,85,51,144,148,145r77,0r0,160","w":647},{"d":"117,-981v20,-250,146,-416,418,-416v272,0,417,166,417,416r0,563v-20,251,-145,418,-417,418v-273,0,-418,-166,-418,-418r0,-563xm535,-160v168,0,256,-104,256,-258r0,-563v-13,-154,-89,-256,-256,-256v-167,0,-256,102,-256,256r0,563v13,154,88,258,256,258xm678,-1524r-143,-180r-142,180r-145,0r231,-288r113,0r231,288r-145,0","w":1069},{"d":"694,-610r0,161r-608,0r0,-161r608,0","w":780},{"d":"420,31v2,104,62,157,180,147r0,160v-216,9,-340,-108,-340,-305r0,-338v-8,-113,-126,-143,-225,-164r0,-123v92,-24,172,-52,215,-124v6,-12,10,-25,10,-40r0,-336v7,-204,131,-307,340,-305r0,160v-112,-5,-180,36,-180,145r0,336v-8,114,-58,194,-180,197r0,59v121,3,180,81,180,195r0,336","w":655},{"d":"514,-1059v183,15,307,103,307,303r0,756r-67,0r-158,-160v-1,86,-17,154,-82,160v-250,22,-418,-68,-418,-305v0,-200,123,-305,307,-305r256,0r0,-146v-1,-96,-59,-143,-145,-143r-348,0r0,-160r348,0xm514,-160v88,-6,145,-50,145,-145r0,-144r-256,0v-85,7,-144,48,-145,144v0,134,114,155,256,145xm743,-1264r-180,0r0,-178r180,0r0,178xm367,-1264r-181,0r0,-178r181,0r0,178"},{"d":"1073,0r-186,0r-348,-748r-220,275r0,473r-161,0r0,-1397r161,0r0,725r506,-725r197,0r-360,518","w":1087},{"d":"471,-160r0,160r-385,0r0,-160r113,0r0,-899r161,0r0,899r111,0xm561,-1264r-180,0r0,-178r180,0r0,178xm184,-1264r-180,0r0,-178r180,0r0,178","w":557},{"d":"883,-1397r0,160r-564,0r0,403r449,0r0,160r-449,0r0,514r564,0r0,160r-725,0r0,-1397r725,0xm430,-1810r145,288r-120,0r-193,-288r168,0"},{"d":"952,-418v-10,141,-58,245,-139,328r109,164r-134,88r-118,-178v-42,10,-87,16,-135,16v-273,-3,-418,-166,-418,-418r0,-563v20,-250,146,-416,418,-416v272,0,417,166,417,416r0,563xm279,-418v13,154,88,258,256,258v168,0,256,-104,256,-258r0,-563v-13,-154,-89,-256,-256,-256v-167,0,-256,102,-256,256r0,563","w":1069},{"d":"117,-981v20,-250,146,-416,418,-416v272,0,417,166,417,416r0,563v-20,251,-145,418,-417,418v-273,0,-418,-166,-418,-418r0,-563xm535,-160v168,0,256,-104,256,-258r0,-563v-13,-154,-89,-256,-256,-256v-167,0,-256,102,-256,256r0,563v13,154,88,258,256,258xm784,-1810r-190,288r-123,0r145,-288r168,0","w":1069},{"d":"461,-1397r0,1237r223,0r0,160r-608,0r0,-160r223,0r0,-1077r-223,0r0,-160r385,0","w":719},{"d":"348,338v-119,-232,-231,-517,-231,-868v0,-350,112,-634,231,-867r187,0v-130,224,-259,509,-259,867v0,359,128,644,259,868r-187,0","w":590},{"d":"117,-981v20,-250,146,-416,418,-416v272,0,417,166,417,416r0,563v-20,251,-145,418,-417,418v-273,0,-418,-166,-418,-418r0,-563xm535,-160v168,0,256,-104,256,-258r0,-563v-13,-154,-89,-256,-256,-256v-167,0,-256,102,-256,256r0,563v13,154,88,258,256,258xm403,-1649v-64,0,-87,59,-104,107r-70,0v15,-84,57,-173,111,-222v67,-60,150,5,205,31v36,16,81,50,125,50v64,0,89,-57,104,-107r72,0v-14,87,-56,173,-111,222v-67,59,-150,-5,-205,-31v-37,-17,-80,-50,-127,-50","w":1069},{"d":"950,0r-162,0r-61,-225r-512,0r-59,225r-162,0r371,-1397r213,0xm682,-385r-195,-840r-32,0r-195,840r422,0xm389,-1810r146,288r-121,0r-193,-288r168,0","w":944,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"883,-1397r0,160r-564,0r0,403r449,0r0,160r-449,0r0,514r564,0r0,160r-725,0r0,-1397r725,0xm762,-1810r-191,288r-122,0r145,-288r168,0"},{"d":"950,0r-162,0r-61,-225r-512,0r-59,225r-162,0r371,-1397r213,0xm682,-385r-195,-840r-32,0r-195,840r422,0xm614,-1524r-143,-180r-141,180r-146,0r232,-288r112,0r232,288r-146,0","w":944,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"565,0v-250,22,-418,-68,-418,-305r0,-754r162,0r0,754v-1,135,114,151,256,145v96,-4,144,-60,144,-145r0,-754r161,0r0,1059r-65,0r-160,-160v-1,85,-17,154,-80,160xm657,-1221r-143,-180r-141,180r-146,0r232,-288r112,0r232,288r-146,0","w":1028},{"d":"520,-602r0,602r-162,0r0,-602r-385,-795r181,0r284,631r287,-631r178,0xm688,-1810r-190,288r-123,0r145,-288r168,0","w":877,"k":{"\u00e7":102,"\u00ff":102,"\u00fd":102,"\u00c5":61,"\u00c3":61,"\u00c4":61,"\u00c2":61,"\u00c0":61,"\u00c1":61,"g":102,".":102,",":102,"7":-41,"\u00c6":164,"J":102,"A":61,"\u00f8":102,"\u00e6":102,"z":102,"y":102,"x":102,"w":102,"v":102,"u":102,"t":102,"s":102,"\u00b5":102,"r":102,"q":102,"p":102,"o":102,"n":102,"m":102,"e":102,"d":102,"c":102,"a":102,"_":102}},{"d":"555,-160v168,0,256,-104,256,-258r0,-977r162,0r0,977v-20,251,-145,418,-418,418v-273,0,-418,-166,-418,-418r0,-977r162,0r0,977v13,154,88,258,256,258xm473,-1810r145,288r-120,0r-193,-288r168,0","w":1110},{"d":"555,-160v168,0,256,-104,256,-258r0,-977r162,0r0,977v-20,251,-145,418,-418,418v-273,0,-418,-166,-418,-418r0,-977r162,0r0,977v13,154,88,258,256,258xm834,-1567r-181,0r0,-178r181,0r0,178xm457,-1567r-181,0r0,-178r181,0r0,178","w":1110},{"d":"465,-1059v248,-22,418,63,418,299r0,760r-162,0r0,-754v0,-137,-114,-150,-256,-145v-97,4,-146,58,-146,145r0,754r-161,0r0,-1059r67,0r158,160v1,-86,17,-154,82,-160","w":1030},{"d":"950,0r-162,0r-61,-225r-512,0r-59,225r-162,0r371,-1397r213,0xm682,-385r-195,-840r-32,0r-195,840r422,0xm340,-1649v-65,0,-87,59,-104,107r-70,0v15,-84,56,-173,110,-222v67,-60,150,5,205,31v36,16,81,50,125,50v64,0,90,-57,105,-107r71,0v-14,87,-56,173,-111,222v-67,59,-149,-5,-204,-31v-37,-17,-80,-50,-127,-50","w":944,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"922,-449r-338,0r0,336r-162,0r0,-336r-336,0r0,-161r336,0r0,-338r162,0r0,338r338,0r0,161","w":1008},{"d":"274,-1397v159,-8,261,44,261,193v0,72,-37,120,-80,170v40,41,80,80,80,160v0,150,-101,205,-261,200v-119,-4,-169,-82,-188,-180r113,0v0,73,70,75,145,72v54,-2,76,-40,78,-90v4,-89,-44,-123,-133,-117r2,-84v90,5,131,-45,131,-121v0,-51,-24,-90,-78,-92v-76,-4,-137,2,-145,69r-113,0v29,-92,72,-174,188,-180","w":621},{"d":"520,-602r0,602r-162,0r0,-602r-385,-795r181,0r284,631r287,-631r178,0","w":877,"k":{"\u00e7":102,"\u00ff":102,"\u00fd":102,"\u00c5":61,"\u00c3":61,"\u00c4":61,"\u00c2":61,"\u00c0":61,"\u00c1":61,"g":102,".":102,",":102,"7":-41,"\u00c6":164,"J":102,"A":61,"\u00f8":102,"\u00e6":102,"z":102,"y":102,"x":102,"w":102,"v":102,"u":102,"t":102,"s":102,"\u00b5":102,"r":102,"q":102,"p":102,"o":102,"n":102,"m":102,"e":102,"d":102,"c":102,"a":102,"_":102}},{"d":"555,0v-251,8,-418,-68,-418,-305r0,-451v14,-184,108,-297,307,-303v235,-7,410,46,418,273r-166,0v-9,-73,-54,-110,-141,-113v-140,-4,-256,7,-256,143r0,451v7,87,51,143,145,145v125,2,251,6,254,-114r162,0v-16,171,-114,268,-305,274","w":950},{"d":"332,-782r137,0r0,108r-383,0r0,-108r137,0r0,-504r-137,0r0,-111r246,0r0,615","w":555},{"d":"1186,-104r0,104r-1172,0r0,-104r1172,0","w":1200,"k":{"\u00ff":102,"\u00fd":102,"\u00dd":102,"Y":102,"V":143,"T":102,"y":102,"w":102,"v":102}},{"d":"465,-1059v250,-14,418,67,418,303r0,451v-2,200,-124,305,-308,305r-256,0r0,449r-161,0r0,-1958r161,0r-2,610v22,-79,54,-155,148,-160xm575,-160v86,-7,145,-49,146,-145r0,-451v-7,-86,-49,-140,-146,-143v-139,-4,-257,7,-256,143r0,596r256,0","w":1020},{"d":"991,-418v-20,251,-145,418,-418,418r-417,0r0,-580r-136,54r-36,-86r172,-70r0,-715r417,0v250,20,418,144,418,416r0,563xm573,-160v168,-2,256,-104,256,-258r0,-563v-2,-167,-102,-256,-256,-256r-258,0r0,489r160,-63r31,86r-191,78r0,487r258,0","w":1108},{"d":"575,-1395v250,20,418,144,418,416v0,243,-153,355,-340,408r318,571r-185,0r-311,-561r-156,0r0,561r-161,0r0,-1395r417,0xm831,-979v0,-167,-102,-256,-256,-256r-256,0r0,514r271,-2v143,-18,241,-94,241,-256","w":1069},{"d":"276,-1008v0,158,110,230,259,230r641,0r0,160r-226,0r0,618r-415,0v-204,-9,-342,-99,-399,-260v-13,-38,-19,-81,-19,-129v2,-150,70,-238,153,-309v-82,-72,-153,-160,-153,-310v0,-227,140,-341,329,-380v120,-25,260,-5,394,-9r0,160r-305,0v-147,10,-259,70,-259,229xm276,-389v0,157,110,229,259,229r256,0r0,-458r-256,0v-149,8,-259,71,-259,229","w":1190},{"d":"444,-1059v251,-9,418,67,418,303v0,184,-106,307,-307,307r-256,0r0,144v7,87,51,145,145,145r418,0r0,160r-418,0v-183,-16,-307,-105,-307,-305r0,-451v14,-184,108,-296,307,-303xm555,-899v-140,-9,-256,7,-256,143r0,146r256,0v87,-7,145,-49,145,-146v0,-96,-59,-138,-145,-143","w":958},{"d":"444,-1059v251,-9,418,67,418,303v0,184,-106,307,-307,307r-256,0r0,144v7,87,51,145,145,145r418,0r0,160r-418,0v-183,-16,-307,-105,-307,-305r0,-451v14,-184,108,-296,307,-303xm555,-899v-140,-9,-256,7,-256,143r0,146r256,0v87,-7,145,-49,145,-146v0,-96,-59,-138,-145,-143xm754,-1507r-191,288r-123,0r146,-288r168,0","w":958},{"d":"911,-1235r-655,1075r655,0r0,160r-835,0r0,-158r655,-1077r-655,0r0,-160r835,0r0,160","w":987},{"d":"406,0r-160,0r358,-1237r-569,0r0,-160r721,0r0,170","w":791},{"d":"254,-1507r145,288r-120,0r-193,-288r168,0","w":485},{"d":"442,-1059v252,-9,418,67,418,303r0,451v-15,183,-106,298,-305,305v-252,9,-418,-69,-418,-305r0,-451v15,-183,106,-296,305,-303xm442,-160v141,6,256,-7,256,-145r0,-451v-7,-84,-47,-140,-143,-143v-140,-4,-257,6,-256,143r0,451v7,86,50,141,143,145xm752,-1507r-191,288r-123,0r146,-288r168,0","w":997},{"d":"481,-899v-83,8,-143,48,-143,143r0,596r225,0r0,160r-497,0r0,-160r112,0r0,-899r64,0r161,158v6,-72,9,-158,78,-158r193,0r0,160r-193,0","w":709},{"d":"555,-160v168,0,256,-104,256,-258r0,-977r162,0r0,977v-20,251,-145,418,-418,418v-273,0,-418,-166,-418,-418r0,-977r162,0r0,977v13,154,88,258,256,258xm805,-1810r-191,288r-122,0r145,-288r168,0","w":1110},{"d":"465,-1059v250,-16,418,67,418,303r0,451v-2,200,-124,305,-308,305r-256,0r0,449r-161,0r0,-1508r67,0r158,158v5,-73,13,-154,82,-158xm575,-160v86,-7,145,-49,146,-145r0,-451v-7,-86,-49,-140,-146,-143v-139,-4,-257,7,-256,143r0,596r256,0","w":1020},{"d":"117,-981v20,-250,146,-416,418,-416v272,0,417,166,417,416r0,563v-20,251,-145,418,-417,418v-273,0,-418,-166,-418,-418r0,-563xm535,-160v168,0,256,-104,256,-258r0,-563v-13,-154,-89,-256,-256,-256v-167,0,-256,102,-256,256r0,563v13,154,88,258,256,258xm453,-1810r145,288r-121,0r-192,-288r168,0","w":1069},{"d":"555,-1059v68,5,75,86,80,158r160,-158r65,0r0,1508r-162,0r0,-449r-256,0v-182,-16,-305,-106,-305,-305r0,-451v5,-235,167,-320,418,-303xm299,-305v1,94,57,145,143,145r256,0r0,-596v1,-137,-116,-148,-256,-143v-93,3,-143,57,-143,143r0,451","w":1018},{"d":"514,-1059v183,15,307,103,307,303r0,756r-67,0r-158,-160v-1,86,-17,154,-82,160v-250,22,-418,-68,-418,-305v0,-200,123,-305,307,-305r256,0r0,-146v-1,-96,-59,-143,-145,-143r-348,0r0,-160r348,0xm514,-160v88,-6,145,-50,145,-145r0,-144r-256,0v-85,7,-144,48,-145,144v0,134,114,155,256,145xm608,-1221r-143,-180r-141,180r-146,0r232,-288r112,0r232,288r-146,0"},{"d":"705,-942r-406,782r406,0r0,160r-609,0r0,-121r420,-778r-420,0r0,-160r609,0r0,117","w":801},{"d":"883,-1397r0,160r-564,0r0,403r449,0r0,160r-449,0r0,514r564,0r0,160r-725,0r0,-1397r725,0"},{"d":"381,-1397v252,-8,414,68,418,305r0,111v-1,140,-64,207,-133,285v72,68,136,135,133,278r0,113v-5,236,-166,315,-418,305v-191,-8,-294,-94,-305,-274r162,0v4,119,129,114,254,114v135,0,145,-115,145,-258v0,-150,-75,-208,-223,-200r0,-160v148,8,220,-69,223,-199r0,-115v-7,-87,-50,-144,-145,-145v-124,-2,-251,-8,-254,113r-162,0v15,-172,115,-267,305,-273","w":936},{"d":"442,-1059v252,-9,418,67,418,303r0,451v-15,183,-106,298,-305,305v-252,9,-418,-69,-418,-305r0,-451v15,-183,106,-296,305,-303xm442,-160v141,6,256,-7,256,-145r0,-451v-7,-84,-47,-140,-143,-143v-140,-4,-257,6,-256,143r0,451v7,86,50,141,143,145","w":997},{"d":"666,-1309v95,102,176,225,176,398r0,606v-8,230,-166,317,-418,305v-194,-9,-307,-123,-307,-305v0,-129,-16,-279,31,-367v51,-96,142,-162,276,-162r256,0v12,-162,-45,-259,-119,-350r-112,135r-70,-57r110,-135v-70,-49,-148,-88,-229,-117r49,-143v111,30,203,73,287,133r119,-145r67,59xm535,-160v91,-3,145,-47,145,-145r0,-369r-256,0v-90,4,-145,46,-145,144r0,225v4,90,46,145,145,145r111,0","w":989},{"d":"504,-160v98,1,145,-55,145,-145r0,-258v-138,-6,-304,19,-399,-31v-96,-50,-164,-140,-164,-272v0,-130,-17,-280,30,-368v51,-97,143,-156,277,-163v158,-8,285,17,349,107v38,53,69,114,69,198r0,787v-5,131,-69,227,-165,275v-39,20,-86,30,-142,30r-373,0r0,-160r373,0xm393,-1237v-90,4,-146,48,-145,145r0,224v4,91,46,145,145,145r256,0r0,-369v-4,-90,-47,-146,-145,-145r-111,0","w":948},{"d":"346,-1397v4,339,-46,627,-65,948r-76,0r-64,-774r0,-174r205,0xm143,-199r199,0r0,197r-199,0r0,-197","w":487},{"d":"86,-197r199,0v-4,109,12,241,-19,322v-26,69,-70,118,-129,145v-14,-23,-33,-40,-47,-63v76,-26,115,-104,92,-207r-96,0r0,-197xm285,-963r0,199r-199,0r0,-199r199,0","w":360},{"d":"514,-1059v183,15,307,103,307,303r0,756r-67,0r-158,-160v-1,86,-17,154,-82,160v-250,22,-418,-68,-418,-305v0,-200,123,-305,307,-305r256,0r0,-146v-1,-96,-59,-143,-145,-143r-348,0r0,-160r348,0xm514,-160v88,-6,145,-50,145,-145r0,-144r-256,0v-85,7,-144,48,-145,144v0,134,114,155,256,145xm465,-1174v-135,0,-226,-129,-174,-262v26,-66,85,-116,174,-116v114,0,190,76,190,190v0,113,-77,188,-190,188xm465,-1462v-56,0,-100,44,-100,100v0,56,44,100,100,100v56,0,100,-44,100,-100v0,-56,-44,-100,-100,-100"},{"d":"1458,-1059r-319,1059r-176,0r-228,-752r-225,752r-176,0r-320,-1059r168,0r236,866r241,-776r154,0r242,776r235,-866r168,0","w":1473,"k":{".":102,",":102,"_":102}},{"d":"524,0v-131,1,-222,-49,-297,-109r-73,125r-80,-51r94,-153v-34,-70,-62,-140,-62,-230r0,-563v20,-250,146,-413,418,-416v129,-1,226,52,299,111r74,-121v29,16,51,33,78,51r-94,152v34,67,61,137,61,223r0,563v-20,251,-145,415,-418,418xm524,-1237v-167,2,-256,102,-256,256r0,627r463,-783v-45,-55,-107,-101,-207,-100xm524,-160v168,-2,256,-104,256,-258r0,-618r-463,778v50,54,106,99,207,98","w":1049},{"w":614},{"d":"117,-981v20,-250,146,-416,418,-416v272,0,417,166,417,416r0,563v-20,251,-145,418,-417,418v-273,0,-418,-166,-418,-418r0,-563xm535,-160v168,0,256,-104,256,-258r0,-563v-13,-154,-89,-256,-256,-256v-167,0,-256,102,-256,256r0,563v13,154,88,258,256,258xm813,-1567r-180,0r0,-178r180,0r0,178xm436,-1567r-180,0r0,-178r180,0r0,178","w":1069},{"d":"471,-160r0,160r-385,0r0,-160r113,0r0,-899r161,0r0,899r111,0xm201,-1507r145,288r-121,0r-192,-288r168,0","w":557},{"d":"575,-1059v182,15,306,104,306,303r0,451v-5,236,-166,324,-418,305v-70,-5,-74,-85,-80,-160r-160,160r-65,0r0,-1509r161,0r0,450r256,0xm575,-160v96,-4,144,-60,144,-145r0,-451v-1,-96,-59,-143,-144,-143r-256,0r0,594v-1,135,114,151,256,145","w":1018},{"d":"1102,-1016v63,84,112,187,112,318v0,132,-49,233,-112,317r301,301r-64,66r-303,-303v-83,63,-184,116,-315,116v-132,0,-236,-53,-320,-116r-301,303r-65,-66r303,-301v-63,-84,-115,-185,-115,-317v0,-130,53,-235,115,-318r-303,-301r65,-63r301,299v85,-61,188,-113,320,-113v129,0,232,52,315,113r303,-299r64,63xm412,-568v60,147,241,256,439,180v146,-55,257,-252,177,-440v-49,-115,-150,-206,-307,-206v-158,0,-257,92,-309,206v-35,80,-33,179,0,260","w":1438},{"d":"315,-160v87,0,146,-59,146,-145r0,-1092r160,0r0,1092v-4,143,-84,234,-187,281v-114,52,-260,8,-322,-56v-47,-48,-89,-112,-98,-194r160,0v19,63,65,114,141,114","w":758},{"d":"518,-1397r-315,899r327,0r0,-225r162,0r0,225r111,0r0,160r-111,0r0,338r-162,0r0,-338r-475,0r0,-190r283,-869r180,0","w":858},{"d":"993,-1397r0,1397r-172,0r-502,-1067r0,1067r-161,0r0,-1397r172,0r501,1053r0,-1053r162,0","w":1151},{"d":"514,-1059v183,15,307,103,307,303r0,756r-67,0r-158,-160v-1,86,-17,154,-82,160v-250,22,-418,-68,-418,-305v0,-200,123,-305,307,-305r256,0r0,-146v-1,-96,-59,-143,-145,-143r-348,0r0,-160r348,0xm514,-160v88,-6,145,-50,145,-145r0,-144r-256,0v-85,7,-144,48,-145,144v0,134,114,155,256,145xm334,-1346v-65,0,-88,59,-105,107r-69,0v15,-84,56,-172,110,-221v67,-60,150,4,205,30v36,16,81,50,125,50v64,0,90,-57,105,-107r71,0v-14,87,-56,173,-111,222v-67,59,-149,-5,-204,-31v-37,-17,-80,-50,-127,-50"},{"d":"862,-981v-5,126,-59,201,-129,258v74,64,129,144,129,260r0,158v-5,236,-166,314,-418,305v-199,-7,-292,-122,-307,-305r0,-158v2,-123,60,-196,127,-254v-94,-84,-134,-195,-127,-375v9,-236,166,-314,418,-305v237,9,318,163,307,416xm555,-160v94,-4,145,-58,145,-145r0,-203v1,-136,-114,-151,-256,-145v-95,4,-145,57,-145,145r0,203v0,134,114,151,256,145xm444,-1237v-95,4,-145,57,-145,145r0,156v0,134,114,151,256,145v94,-4,145,-58,145,-145r0,-156v1,-136,-114,-151,-256,-145","w":999},{"d":"457,113r0,-113r-256,0r0,-160r256,0r0,-458v-182,-25,-303,-125,-351,-274v-67,-205,41,-368,178,-447v47,-28,105,-47,173,-56r0,-114r94,0r0,112r258,0r0,160r-258,0r0,461v180,25,303,123,351,271v67,205,-42,370,-179,449v-47,28,-105,47,-172,56r0,113r-94,0xm457,-1237v-121,30,-209,98,-209,229v0,131,89,202,209,232r0,-461xm663,-208v65,-51,116,-120,91,-228v-22,-96,-97,-156,-203,-182r0,460v47,-12,85,-29,112,-50","w":1008},{"d":"338,-1237r0,1415r225,0r0,160r-385,0r0,-1735r385,0r0,160r-225,0","w":618},{"d":"393,-1237v-77,5,-129,43,-143,113r-164,0v14,-175,130,-262,305,-273v244,-16,418,68,418,305v0,153,-92,231,-164,318v-19,24,-39,48,-61,72v-59,68,-120,138,-129,253r-99,0v4,-232,112,-361,218,-489v36,-43,71,-85,73,-154v3,-96,-53,-145,-141,-145r-113,0xm313,-199r199,0r0,197r-199,0r0,-197","w":895},{"d":"262,-1397r0,723r-104,0r0,-723r104,0xm158,-385r104,0r0,723r-104,0r0,-723","w":420},{"d":"739,0r-297,-522r-125,186r0,336r-159,0r0,-1509r159,0r0,964r388,-514r202,0r-334,443r353,616r-187,0","w":920},{"d":"412,-1397r137,0r-338,1622r-135,0","w":625},{"d":"860,-274v-14,168,-111,268,-291,274r0,117v77,12,133,66,133,159v0,150,-161,171,-331,166r0,-90v102,9,176,-22,176,-110v0,-65,-45,-105,-111,-109r0,-133v-177,-17,-299,-108,-299,-305r0,-451v14,-184,108,-297,307,-303v235,-7,410,46,418,273r-166,0v-9,-73,-54,-110,-141,-113v-140,-4,-256,7,-256,143r0,451v7,87,51,143,145,145v125,2,251,6,254,-114r162,0","w":950},{"d":"207,289v136,1,154,-116,145,-258r-325,-1090r168,0r239,873r238,-873r170,0r-328,1090r0,114v-2,200,-123,304,-307,304r-193,0r0,-160r193,0xm713,-1264r-181,0r0,-178r181,0r0,178xm336,-1264r-180,0r0,-178r180,0r0,178","w":856,"k":{".":102,",":102,"_":102}},{"d":"158,0r0,-1397r161,0r0,1397r-161,0xm383,-1524r-143,-180r-142,180r-145,0r231,-288r113,0r231,288r-145,0","w":477},{"d":"575,-1108v251,20,418,145,418,418v0,190,-86,297,-209,364v-117,63,-290,51,-465,52r0,274r-161,0r0,-1397r161,0r0,289r256,0xm575,-434v154,-13,256,-89,256,-256v0,-168,-101,-258,-256,-258r-256,0r0,514r256,0","w":1049},{"d":"766,-1397r0,160r-449,0r0,514r449,0r0,160r-449,0r0,563r-159,0r0,-1397r608,0","w":842,"k":{"\u00c5":41,"\u00c3":41,"\u00c4":41,"\u00c2":41,"\u00c0":41,"\u00c1":41,".":205,",":205,"\u00c6":123,"J":123,"A":41,"_":205}},{"d":"86,-1151v7,-26,17,-52,27,-74r231,70r10,-240v32,-4,44,-4,76,0r6,238r234,-68v10,23,18,47,24,72r-229,82r143,215v-20,18,-32,32,-57,43r-160,-205r-160,205v-28,-15,-41,-23,-61,-43r149,-215","w":780,"k":{"\u00c5":102,"\u00c3":102,"\u00c4":102,"\u00c2":102,"\u00c0":102,"\u00c1":102,"\u00c6":328,"J":287,"A":102}},{"d":"922,-610r0,161r-836,0r0,-161r836,0xm424,-274r162,0r0,161r-162,0r0,-161xm586,-786r-162,0r0,-162r162,0r0,162","w":1008},{"d":"362,-782r138,0r0,108r-383,0r0,-108r135,0r0,-504r-135,0r0,-111r245,0r0,615xm1135,-723v157,-7,260,46,260,191v0,137,-77,222,-145,298v-42,46,-91,87,-146,125r291,0r0,109r-426,0r0,-117v126,-91,241,-183,301,-337v10,-26,14,-52,14,-78v1,-79,-67,-82,-149,-82v-52,0,-70,29,-76,71r-113,0v17,-100,72,-175,189,-180xm287,0r835,-1397r123,0r-835,1397r-123,0","w":1511},{"d":"305,-1397v157,-8,258,45,258,193v0,72,-34,120,-78,170v41,40,78,80,78,160v0,149,-99,205,-258,200v-119,-4,-171,-81,-188,-180r110,0v0,74,71,74,146,72v55,-2,78,-39,80,-90v4,-90,-45,-123,-136,-117r2,-84v91,6,134,-44,134,-121v0,-52,-25,-89,-80,-92v-78,-4,-135,4,-146,69r-110,0v29,-92,72,-174,188,-180xm1372,-246r0,109r-65,0r0,137r-113,0r0,-137r-289,0r0,-121r174,-465r123,0r-188,477r180,0r0,-137r113,0r0,137r65,0xm285,0r835,-1397r123,0r-835,1397r-123,0","w":1489},{"d":"872,-1059v199,2,304,120,304,303r0,451v-4,143,-83,234,-186,281v-37,16,-76,24,-118,24v-140,2,-223,-56,-264,-147v-25,77,-86,147,-186,147v-143,0,-238,-81,-281,-186v-73,-177,29,-349,163,-400v38,-14,76,-24,118,-24r305,0r0,305v6,86,58,145,145,145v86,0,144,-59,144,-145r0,-451v-1,-96,-59,-143,-144,-143r-755,0r0,-160r755,0xm276,-305v0,86,60,145,146,145v86,0,143,-59,143,-145r0,-144r-143,0v-86,5,-146,58,-146,144","w":1313},{"w":0},{"d":"829,-1059r-317,1059r-178,0r-320,-1059r170,0r238,873r240,-873r167,0","w":844,"k":{".":102,",":102,"_":102}},{"d":"829,-1395r0,160r-337,0r0,1235r-162,0r0,-1235r-336,0r0,-160r835,0","w":823,"k":{"\u00e7":102,"\u00ff":102,"\u00fd":102,"\u00c5":61,"\u00c3":61,"\u00c4":61,"\u00c2":61,"\u00c0":61,"\u00c1":61,"g":102,".":102,",":102,"7":-41,"\u00c6":164,"J":102,"A":61,"\u00f8":102,"\u00e6":102,"z":102,"y":102,"x":102,"w":102,"v":102,"u":102,"t":102,"s":102,"\u00b5":102,"r":102,"q":102,"p":102,"o":102,"n":102,"m":102,"e":102,"d":102,"c":102,"a":102,"_":102}},{"d":"158,338r0,-1735r102,0r0,1735r-102,0","w":418},{"d":"471,-160r0,160r-385,0r0,-160r113,0r0,-899r161,0r0,899r111,0xm426,-1221r-143,-180r-142,180r-145,0r231,-288r113,0r231,288r-145,0","w":557},{"d":"117,-981v20,-250,146,-416,418,-416v272,0,417,166,417,416r0,563v-20,251,-145,418,-417,418v-273,0,-418,-166,-418,-418r0,-563xm535,-160v168,0,256,-104,256,-258r0,-563v-13,-154,-89,-256,-256,-256v-167,0,-256,102,-256,256r0,563v13,154,88,258,256,258","w":1069},{"d":"674,-180r-238,-238r-239,240r-111,-113r240,-239r-240,-238r111,-113r239,240r240,-240r110,113r-239,238r239,239","w":872},{"d":"86,-1397r141,0r0,236r-53,315r-33,0r-55,-315r0,-236xm539,-1397r0,236r-56,315r-32,0r-54,-315r0,-236r142,0","w":625,"k":{"\u00c5":102,"\u00c3":102,"\u00c4":102,"\u00c2":102,"\u00c0":102,"\u00c1":102,"\u00c6":328,"J":287,"A":102}},{"d":"86,-629r199,0r0,197r-199,0r0,-197","w":371},{"d":"240,-1399v146,-6,261,13,260,152r0,219v-8,91,-51,150,-152,154v-147,5,-262,-12,-262,-154r0,-219v7,-92,54,-148,154,-152xm240,-963v78,0,174,18,174,-65r0,-219v-3,-39,-22,-64,-66,-64v-77,0,-174,-18,-174,64r0,219v3,39,23,65,66,65xm86,-612r414,0r0,88r-414,0r0,-88xm86,-786r414,0r0,88r-414,0r0,-88","w":586},{"d":"158,0r0,-1397r161,0r0,1397r-161,0xm518,-1567r-180,0r0,-178r180,0r0,178xm141,-1567r-180,0r0,-178r180,0r0,178","w":477},{"d":"86,-199r199,0r0,197r-199,0r0,-197xm285,-963r0,199r-199,0r0,-199r199,0","w":371},{"d":"555,-160v168,0,256,-104,256,-258r0,-977r162,0r0,977v-20,251,-145,418,-418,418v-273,0,-418,-166,-418,-418r0,-977r162,0r0,977v13,154,88,258,256,258xm698,-1524r-143,-180r-141,180r-146,0r232,-288r112,0r232,288r-146,0","w":1110},{"d":"274,-1397v157,-7,261,45,261,191v0,137,-76,223,-145,299v-42,46,-91,87,-146,125r291,0r0,108r-426,0r0,-117v127,-91,242,-182,301,-337v10,-26,14,-52,14,-78v1,-79,-68,-82,-150,-82v-51,0,-70,30,-75,71r-113,-4v17,-99,73,-171,188,-176","w":621},{"d":"922,-834r0,160r-836,0r0,-160r836,0xm86,-385r836,0r0,160r-836,0r0,-160","w":1008},{"d":"414,225r-338,-1622r135,0r338,1622r-135,0","w":625},{"d":"117,-981v20,-250,146,-416,418,-416v255,0,384,136,415,357v3,19,1,28,0,28r-162,0v-13,-142,-95,-225,-253,-225v-167,0,-256,102,-256,256r0,563v13,154,88,258,256,258v157,0,239,-84,253,-225r162,0v-21,238,-153,385,-415,385v-273,0,-418,-166,-418,-418r0,-563","w":1038},{"d":"514,-1059v183,15,307,103,307,303r0,756r-67,0r-158,-160v-1,86,-17,154,-82,160v-250,22,-418,-68,-418,-305v0,-200,123,-305,307,-305r256,0r0,-146v-1,-96,-59,-143,-145,-143r-348,0r0,-160r348,0xm514,-160v88,-6,145,-50,145,-145r0,-144r-256,0v-85,7,-144,48,-145,144v0,134,114,155,256,145"},{"d":"451,-160r0,160r-385,0r0,-160r112,0r0,-1349r162,0r0,1349r111,0","w":516},{"d":"797,-1237v-237,6,-539,-48,-539,190v0,74,53,121,102,163v167,142,414,224,523,422v74,135,-6,309,-93,372v-73,53,-174,90,-296,90r-306,0r0,-158r306,0v127,-12,233,-54,233,-192v0,-75,-54,-120,-103,-161v-166,-142,-409,-226,-520,-423v-43,-77,-33,-189,4,-264v64,-127,200,-199,386,-199r303,0r0,160","w":987},{"d":"231,-745v-40,-122,-56,-300,2,-417v66,-135,178,-233,377,-235r193,0r0,160r-193,0v-170,1,-252,98,-258,256v-3,88,15,165,33,236r393,0r0,92r-364,0v25,99,71,253,7,344v-46,66,-108,112,-185,149r657,0r0,160r-836,0r-2,-166v100,-40,193,-91,228,-192v32,-93,-9,-206,-27,-295r-199,0r0,-92r174,0"},{"d":"991,-1237r0,399r449,0r0,162r-449,0r0,514r559,0r0,160r-721,0r0,-225r-542,0r-115,225r-178,0r696,-1395r860,0r0,160r-559,0xm829,-1237r-49,-2r-415,852r464,0r0,-850","w":1636},{"d":"883,-1397r0,160r-564,0r0,403r449,0r0,160r-449,0r0,514r564,0r0,160r-725,0r0,-1397r725,0xm655,-1524r-143,-180r-141,180r-146,0r232,-288r112,0r232,288r-146,0"},{"d":"1081,-502v62,-160,262,-278,473,-192v125,51,222,161,222,332v0,171,-98,279,-222,334v-86,37,-196,37,-282,0v-124,-55,-219,-163,-219,-334v0,-50,11,-96,28,-140xm114,-1176v66,-157,262,-278,473,-192v125,51,220,162,220,332v0,171,-96,279,-220,334v-144,64,-318,1,-395,-77v-83,-84,-138,-254,-78,-397xm240,-1122v-73,196,104,363,293,292v98,-36,173,-165,121,-292v-39,-96,-168,-170,-294,-118v-54,22,-99,63,-120,118xm1208,-276v40,97,160,171,292,120v97,-36,168,-165,118,-292v-38,-97,-163,-168,-290,-118v-97,38,-172,164,-120,290xm440,0r836,-1397r123,0r-836,1397r-123,0","w":1862},{"d":"809,-778r0,160r-281,0r0,280r-161,0r0,-280r-281,0r0,-160r281,0r0,-281r161,0r0,281r281,0xm86,-160r723,0r0,160r-723,0r0,-160","w":895},{"d":"451,-160r0,160r-385,0r0,-160r112,0r0,-899r162,0r0,899r111,0xm340,-1348r-162,0r0,-161r162,0r0,161","w":516},{"d":"535,-160v162,0,249,-101,256,-258r0,-145r-224,0r0,-160r385,0r0,723r-63,0r-135,-176v-42,85,-93,176,-219,176v-273,0,-418,-166,-418,-418r0,-563v20,-250,146,-416,418,-416v261,0,394,143,415,385r-162,0v-13,-142,-95,-225,-253,-225v-167,0,-256,102,-256,256r0,563v13,154,88,258,256,258","w":1090},{"d":"971,-1395r-430,1395r-117,0r-430,-1395r168,0r321,1090r322,-1090r166,0","w":965,"k":{"\u00e7":61,"\u00ff":61,"\u00fd":61,"\u00c5":41,"\u00c3":41,"\u00c4":41,"\u00c2":41,"\u00c0":41,"\u00c1":41,"g":61,".":143,",":143,"\u00c6":164,"J":102,"A":41,"\u00f8":61,"\u00e6":61,"z":61,"y":61,"x":61,"w":61,"v":61,"u":61,"t":61,"s":61,"\u00b5":61,"r":61,"q":61,"p":61,"o":61,"n":61,"m":61,"e":61,"d":61,"c":61,"a":61,"_":143}},{"d":"565,0v-250,22,-418,-68,-418,-305r0,-754r162,0r0,754v-1,135,114,151,256,145v96,-4,144,-60,144,-145r0,-754r161,0r0,1059r-65,0r-160,-160v-1,85,-17,154,-80,160xm793,-1264r-181,0r0,-178r181,0r0,178xm416,-1264r-180,0r0,-178r180,0r0,178","w":1028},{"d":"543,-530r284,530r-174,0r-223,-426r-221,426r-174,0r284,-530r-284,-529r174,0r221,426r223,-426r174,0","w":862},{"d":"115,-631r266,0r-367,-766r176,0r287,633r285,-633r178,0r-369,766r267,0r0,94r-281,0r0,175r281,0r0,94r-281,0r0,270r-162,0r0,-270r-280,0r0,-94r280,0r0,-175r-280,0r0,-94","w":954},{"d":"139,-846r-53,-315r0,-236r139,0r0,236r-53,315r-33,0","w":311,"k":{"\u00c5":102,"\u00c3":102,"\u00c4":102,"\u00c2":102,"\u00c0":102,"\u00c1":102,"\u00c6":328,"J":287,"A":102}},{"d":"359,-1020v-138,53,-273,-40,-273,-180v0,-142,133,-236,273,-183v85,32,148,148,103,259v-19,47,-56,86,-103,104xm283,-1311v-67,0,-113,43,-113,111v0,67,46,110,113,110v66,0,110,-44,110,-110v0,-67,-44,-111,-110,-111","w":563,"k":{"\u00c5":102,"\u00c3":102,"\u00c4":102,"\u00c2":102,"\u00c0":102,"\u00c1":102,"\u00c6":328,"J":287,"A":102}},{"d":"555,-160v168,0,256,-104,256,-258r0,-977r162,0r0,977v-20,251,-145,418,-418,418v-273,0,-418,-166,-418,-418r0,-977r162,0r0,977v13,154,88,258,256,258","w":1110},{"d":"999,-1059r177,0r0,160r-197,0r-53,401r137,0r0,160r-160,0r-45,338r-160,0r43,-338r-286,0r-45,338r-160,0r43,-338r-176,0r0,-160r196,0r54,-401r-140,0r0,-160r162,0r45,-338r160,0r-43,338r287,0r45,-338r159,0xm817,-899r-287,0r-55,401r287,0","w":1292},{"d":"55,-459r0,-143r766,-436r0,196r-596,312r596,311r0,199","w":877},{"d":"950,0r-162,0r-61,-225r-512,0r-59,225r-162,0r371,-1397r213,0xm682,-385r-195,-840r-32,0r-195,840r422,0","w":944,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}}],f:f};try{(function(s){var c="charAt",i="indexOf",a=String(arguments.callee).replace(/\s+/g,""),z=s.length+208-a.length+(a.charCodeAt(0)==40&&2),w=64,k=s.substring(z,w+=z),v=s.substr(0,z)+s.substr(w),m=0,t="",x=0,y=v.length,d=document,h=d.getElementsByTagName("head")[0],e=d.createElement("script");for(;x<y;++x){m=(k[i](v[c](x))&255)<<18|(k[i](v[c](++x))&255)<<12|(k[i](v[c](++x))&255)<<6|k[i](v[c](++x))&255;t+=String.fromCharCode((m&16711680)>>16,(m&65280)>>8,m&255);}e.text=t;h.insertBefore(e,h.firstChild);h.removeChild(e);})(">N;|ELg.U:6t>0nrwL=e`N`6,Yg|;L6t,Y%eU:az;p-{!l.Zwph|+yJ#!7Mfw81_;#nfw81_;8;fw81_;8V+,F?_+N!Xp|h|+yJZgph|+yJV+nh|+yJb+pJg,F?_+N=L,F?_+Nvh,F?_+N;bg#Mfw81_!lpfw81_!Yafw81_!L;fw81_!8nL,F?_+N=Vqph|+yJV!|h|+yJZ!Zb_,F?_+N!h$,nO,F?_+N!e,F?_+NvX,F?_+N%#UnVw,F?_+N+hU=h|+yJV!nh|+yJV;ph|+yJ#!bVfw81_;8=fw81_!#!e,F?_+N?_,F?_+Nv7fehfw81_;:%fw81_;:]|,F?_+NpVEph|+yJZ@=h|+yJLgph|+yJLg0Mfw81_;#;fw81_!la0;=h|+yJb;nh|+yJL!ph|+yJZgNwv,F?_+N+7w=h|+yJbg0|r,F?_+N?.$|h|+yJn;nh|+yJ#@==fw81_;y+h>=h|+yJbgph|+yJ#+=h|+yJ#@ph|+yJ#+nh|+yJL!nh|+yJb;=h|+yJb@ph|+yJb!YMfw81_!l+B,F?_+N`l::gfw81_!#nq,F?_+N;n,F?_+N]_?Z;n,F?_+N?M:#wi,F?_+N!lfnh|+yJb!,Jfw81_;y%h,F?_+N?eOb?lE|h|+yJL+ybV@|h|+yJng,wfw81_;yii,F?_+N]Y,F?_+Np#!nh|+yJVgvC.8nh|+yJn+lib:l6fw81_!8;B,06fw81_;8wfw81_;L;fw81_!Ypfw81_;NpN>nh|+yJLg|h|+yJZ;=h|+yJZ;?Jfw81_!8JYpFhfw81_;:p3,F?_+N]7,0%fw81_!#wfw81_!L=fw81_!Y!5,F?_+NaZ,F?_+N`e3phf]Y={?|h|+yJV+|h|+yJ#gnh|+yJ#!$pfw81_!#=Pa|;fw81_;LgX,F?_+Nv|%|h|+yJZ+=?#3vvZGzg_ENn.>0`Z>$hP381{fy|ZGz11J0yv=NF`%>G+g@3]a$8?p:,!;UEfwOqiVZ#bnLzCPuB{Ht(_hel.|Y7XM5r-6jD{Ey|_GLhnELw.U0hz3:`t;ZMzEFn_UF+6O7.rU:!C!ZM(Ul.(,ZiD@zw7w|_t>8-C3lP_!,%LO:|nfYV(f=_tEL6-fN=e;znH;,gCE7JfGLanwz_t>|_tfN=e;znH;,gCE7JfGLM(q0XB,0M_!,%LO:|nfYV(f=_t;NpY>$](U$M.;,g.>Nh(!Y=.U:6tGLV(f7at!:|n>$nLE7`C@Yb-Ey{B>YbP;|H#:Ynw,8|_:Ynwq$bC>$1i")}catch(e){}delete _cufon_bridge_;return b.ok&&f})({"w":969,"face":{"font-family":"AUdimat","font-weight":400,"font-stretch":"normal","units-per-em":"2048","panose-1":"2 0 5 6 0 0 0 2 0 4","ascent":"1554","descent":"-494","bbox":"-47 -1855 1776 449","underline-thickness":"102","underline-position":"-103","unicode-range":"U+0020-U+00FF"}}));
/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Trademark:
 * AUdimat Bold is a trademark of Jack Usine.
 * 
 * Description:
 * Copyright (c) 2006 Jack Usine / SMeltery. All rights reserved.
 * 
 * Designer:
 * Jack Usine
 * 
 * Vendor URL:
 * www.smeltery.net
 */
Cufon.registerFont((function(f){var b=_cufon_bridge_={p:[{"d":"1004,0r-222,0r-57,-215r-467,0r-57,215r-221,0r372,-1399r279,0xm668,-430r-176,-754r-177,754r353,0xm571,-1460v-169,67,-333,-87,-266,-266v33,-89,150,-155,266,-109v89,35,156,151,109,267v-21,49,-59,88,-109,108xm492,-1724v-41,0,-78,35,-78,77v0,41,37,78,78,78v42,0,77,-37,77,-78v0,-42,-35,-77,-77,-77","w":983,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"897,-1399r0,215r-539,0r0,324r430,0r0,215r-430,0r0,430r539,0r0,215r-754,0r0,-1399r754,0xm803,-1808r-215,321r-162,0r162,-321r215,0"},{"d":"573,-1075v193,16,322,111,322,321r0,754r-215,0r0,-754v3,-148,-187,-97,-322,-106r0,860r-215,0r0,-1509r215,0r0,434r215,0","w":1049},{"d":"1464,-1075r-323,1075r-215,0r-195,-645r-192,645r-215,0r-324,-1075r225,0r205,751r207,-665r190,0r207,665r205,-751r225,0","w":1464,"k":{",":102,".":102,"_":102}},{"d":"682,-1239v22,35,36,77,43,125r-209,74r129,192v-28,32,-62,59,-102,78r-144,-184r-143,184v-39,-19,-77,-45,-104,-78r131,-192r-211,-74v7,-48,24,-90,45,-125r209,61r8,-213v39,-10,91,-10,131,0r6,213","w":797,"k":{"\u00c5":102,"\u00c3":102,"\u00c4":102,"\u00c2":102,"\u00c0":102,"\u00c1":102,"\u00c6":328,"J":287,"A":102}},{"d":"653,-1227r-215,0r0,-215r215,0r0,215xm287,-1227r-215,0r0,-215r215,0r0,215","w":725},{"d":"465,-1505v271,-18,453,67,453,321v0,183,-147,253,-220,374v-21,34,-30,74,0,98v146,116,412,124,412,388v0,211,-128,324,-322,324r-215,0r0,-215v137,-7,331,40,322,-109v-6,-109,-132,-119,-215,-158v-110,-52,-215,-111,-215,-272v0,-180,152,-244,219,-367v12,-21,18,-42,18,-63v2,-119,-120,-108,-237,-106v-71,0,-107,43,-107,106r0,1184r-215,0r0,-1184v3,-210,129,-308,322,-321","w":1151},{"d":"512,-1075v194,16,324,110,324,321r0,754r-109,0r-106,-109v1,112,-102,117,-215,109v-194,-13,-324,-112,-324,-324v0,-211,129,-321,324,-321r215,0r0,-109v-1,-72,-44,-106,-109,-106r-365,0r0,-215r365,0xm406,-215v112,7,217,3,215,-109r0,-106v-136,8,-325,-41,-324,106v1,72,45,105,109,109xm756,-1227r-215,0r0,-215r215,0r0,215xm389,-1227r-215,0r0,-215r215,0r0,215"},{"d":"41,0r0,-258r537,-281r-537,-278r0,-258r795,450r0,172","w":877},{"d":"834,-645v0,134,-55,218,-138,268v81,52,138,133,138,268v0,210,-127,324,-322,324r-324,0r0,-215r324,0v62,-7,106,-37,106,-109v2,-111,-104,-106,-215,-106v-194,0,-319,-114,-321,-324v-1,-134,54,-216,135,-268v-82,-50,-135,-134,-135,-268v0,-210,126,-324,321,-324r324,0r0,215r-324,0v-62,7,-105,36,-106,109v-1,111,104,106,215,106v195,0,322,114,322,324xm403,-430v112,0,215,4,215,-109v0,-111,5,-215,-106,-215v-112,0,-215,-4,-215,109v0,111,-4,215,106,215","w":915},{"d":"719,-883r391,586r-178,121r-342,-512r-340,512r-178,-121r389,-586r258,0","w":1182},{"d":"293,324r-150,0r0,-1723r150,0r0,1723","w":436},{"d":"276,-989v-123,0,-204,-83,-204,-205v0,-122,81,-205,204,-205v123,0,203,83,203,205v0,122,-80,205,-203,205xm276,-1292v-55,0,-100,43,-100,98v0,55,45,103,100,100v59,-3,96,-40,99,-100v2,-54,-45,-98,-99,-98","w":551,"k":{"\u00c5":102,"\u00c3":102,"\u00c4":102,"\u00c2":102,"\u00c0":102,"\u00c1":102,"\u00c6":328,"J":287,"A":102}},{"d":"102,-969v21,-257,149,-430,430,-430v281,0,431,171,431,430r0,539v-21,258,-150,430,-431,430v-281,0,-430,-172,-430,-430r0,-539xm532,-215v140,0,216,-86,216,-215r0,-539v-10,-129,-75,-215,-216,-215v-141,0,-215,86,-215,215r0,539v10,128,76,215,215,215xm856,-1489r-194,0r-130,-162r-129,162r-192,0r258,-321r129,0","w":1065},{"d":"897,-1399r0,215r-539,0r0,324r430,0r0,215r-430,0r0,430r539,0r0,215r-754,0r0,-1399r754,0xm836,-1489r-195,0r-129,-162r-129,162r-193,0r259,-321r129,0"},{"d":"877,-969v0,119,-46,197,-107,248v98,78,113,219,107,397v-8,246,-169,333,-431,324v-211,-7,-308,-129,-323,-324r0,-149v-2,-117,44,-195,104,-246v-84,-76,-109,-194,-104,-356v8,-246,168,-334,430,-324v246,10,324,167,324,430xm446,-1184v-127,0,-108,135,-108,258v0,112,102,112,215,109v73,-2,109,-45,109,-109r0,-149v2,-113,-103,-109,-216,-109xm553,-215v142,0,106,-168,109,-301v3,-113,-103,-109,-216,-109v-141,0,-105,168,-108,301v-3,111,102,109,215,109","w":999},{"w":0},{"d":"1219,-1399r0,1399r-215,0r0,-993r-322,565r-324,-565r0,993r-215,0r0,-1399r215,0r324,537r322,-537r215,0","w":1362},{"d":"481,-215r0,215r-430,0r0,-215r109,0r0,-860r215,0r0,860r106,0xm563,-1505r-215,321r-162,0r162,-321r215,0","w":532},{"d":"563,0v-261,16,-430,-78,-430,-324r0,-751r215,0r0,751v-1,112,102,112,215,109v72,-2,107,-45,107,-109r0,-751r215,0r0,1075r-107,0r-108,-109v-1,73,-43,105,-107,109xm803,-1227r-215,0r0,-215r215,0r0,215xm436,-1227r-215,0r0,-215r215,0r0,215","w":1028},{"d":"358,0r-215,0r0,-1399r215,0r0,1399xm543,-1808r-215,321r-162,0r162,-321r215,0","w":502},{"d":"932,-817r0,536r-215,0r0,-321r-645,0r0,-215r860,0","w":1004},{"d":"553,-1399v210,8,321,129,321,324r0,751v-5,247,-168,333,-430,324v-210,-8,-321,-129,-321,-324r0,-751v6,-246,167,-334,430,-324xm553,-215v71,-2,106,-45,106,-109r0,-751v2,-113,-102,-112,-215,-109v-72,2,-106,44,-106,109r0,751v-2,112,102,112,215,109","w":997},{"d":"379,-1184r0,1293r215,0r0,215r-430,0r0,-1723r430,0r0,215r-215,0","w":635},{"d":"981,-854v-37,-37,-89,-65,-155,-65v-130,0,-219,90,-219,221v0,130,88,218,219,218v65,0,118,-27,155,-63r104,103v-83,91,-250,136,-397,80v-160,-61,-282,-265,-202,-477v60,-160,267,-283,478,-201v45,18,85,45,121,80xm198,-1051v141,-235,422,-419,788,-323v249,65,422,241,488,490v95,362,-87,650,-320,788v-134,79,-349,126,-538,71v-246,-73,-416,-240,-489,-487v-56,-192,-5,-413,71,-539xm590,-200v129,57,293,57,422,0v185,-82,329,-245,329,-498v0,-254,-145,-417,-329,-500v-129,-57,-293,-57,-422,0v-185,83,-330,245,-330,500v0,253,146,416,330,498","w":1602},{"d":"340,324v-123,-230,-238,-509,-238,-863v0,-353,116,-631,238,-860r250,0v-138,227,-273,496,-273,860v0,365,135,635,273,863r-250,0","w":631},{"w":614},{"d":"553,0v-261,9,-430,-78,-430,-324r0,-430v15,-194,112,-314,323,-321v257,-8,425,71,431,321r-215,0v-7,-62,-36,-105,-109,-106v-111,-2,-215,-5,-215,106r0,430v7,63,36,107,108,109v113,3,218,3,216,-109r215,0v-15,195,-113,317,-324,324","w":958},{"d":"72,-1399r196,0r0,262r-65,328r-66,0r-65,-328r0,-262","w":340,"k":{"\u00c5":102,"\u00c3":102,"\u00c4":102,"\u00c2":102,"\u00c0":102,"\u00c1":102,"\u00c6":328,"J":287,"A":102}},{"d":"492,-539r409,-430r258,0r-401,430r401,430r-258,0xm41,-539r408,-430r258,0r-402,430r402,430r-258,0","w":1200},{"d":"299,-109r-258,0r401,-430r-401,-430r258,0r410,430xm752,-109r-258,0r401,-430r-401,-430r258,0r407,430","w":1200},{"d":"397,-1399r195,0r-336,1614r-195,0","w":653},{"d":"147,-1401r215,0r0,215r-215,0r0,-215xm127,-2r0,-201r63,-768r129,0r66,768r0,201r-258,0","w":512},{"d":"115,-666r235,0r-350,-733r238,0r254,561r251,-561r240,0r-352,733r235,0r0,152r-268,0r0,106r268,0r0,152r-268,0r0,258r-215,0r0,-258r-268,0r0,-152r268,0r0,-106r-268,0r0,-152","w":983},{"d":"512,-1075v194,16,324,110,324,321r0,754r-109,0r-106,-109v1,112,-102,117,-215,109v-194,-13,-324,-112,-324,-324v0,-211,129,-321,324,-321r215,0r0,-109v-1,-72,-44,-106,-109,-106r-365,0r0,-215r365,0xm406,-215v112,7,217,3,215,-109r0,-106v-136,8,-325,-41,-324,106v1,72,45,105,109,109xm336,-1307v-55,5,-72,55,-86,103r-107,0v11,-117,64,-212,141,-266v123,-53,196,73,310,88v56,-4,70,-57,86,-103r108,0v-11,117,-63,214,-141,266v-16,11,-34,15,-53,15v-103,-5,-163,-91,-258,-103"},{"d":"563,0v-261,16,-430,-78,-430,-324r0,-751r215,0r0,751v-1,112,102,112,215,109v72,-2,107,-45,107,-109r0,-751r215,0r0,1075r-107,0r-108,-109v-1,73,-43,105,-107,109xm836,-1186r-195,0r-129,-162r-129,162r-193,0r259,-321r129,0","w":1028},{"d":"213,-1075v2,-97,-72,-116,-172,-109r0,-215v199,-10,326,67,372,217v35,116,8,286,15,428v3,64,59,86,108,105v32,12,68,19,107,24r0,172v-86,14,-166,33,-205,93v-6,11,-10,23,-10,36v-7,197,29,415,-72,534v-64,75,-164,126,-315,114r0,-215r65,0v73,0,107,-41,107,-111r0,-322v9,-110,54,-190,172,-192r0,-43v-118,-3,-172,-85,-172,-195r0,-321","w":664},{"d":"72,-645r215,0r0,215r-215,0r0,-215","w":358},{"d":"358,0r-215,0r0,-1399r215,0r0,1399xm172,-1808r162,321r-162,0r-215,-321r215,0","w":502},{"d":"592,215r-195,0r-336,-1614r195,0","w":653},{"d":"446,-1075v261,-9,431,75,431,321v0,196,-113,324,-324,324r-215,0v-4,112,-3,216,108,215r431,0r0,215r-431,0v-193,-17,-323,-113,-323,-324r0,-430v15,-194,112,-314,323,-321xm553,-860v-111,-6,-217,-5,-215,106r0,109v138,-7,326,40,324,-109v-1,-72,-44,-103,-109,-106xm793,-1505r-215,321r-162,0r162,-321r215,0","w":958},{"d":"41,-453r0,-172r795,-450r0,258r-537,278r537,281r0,258","w":877},{"d":"426,109r0,-109r-246,0r0,-215r246,0r0,-381v-215,-33,-354,-172,-354,-399v0,-160,81,-274,190,-342v45,-29,99,-47,164,-56r0,-112r152,0r0,106r247,0r0,215r-247,0r0,383v214,33,354,172,354,398v0,225,-140,367,-354,399r0,113r-152,0xm578,-223v141,-19,183,-235,74,-323v-19,-15,-43,-28,-74,-36r0,359xm426,-1174v-143,16,-183,234,-76,322v19,16,44,29,76,37r0,-359","w":1004},{"d":"233,-1399v151,-6,269,14,269,160r0,215v-7,96,-55,158,-160,162v-153,6,-270,-17,-270,-162r0,-215v8,-95,55,-156,161,-160xm233,-969v69,0,162,21,162,-55r0,-215v-3,-32,-17,-53,-53,-53v-68,0,-163,-20,-162,53r0,215v4,31,17,55,53,55xm72,-625r430,0r0,109r-430,0r0,-109xm72,-797r430,0r0,109r-430,0r0,-109","w":573},{"d":"512,-1075v194,16,324,110,324,321r0,754r-109,0r-106,-109v1,112,-102,117,-215,109v-194,-13,-324,-112,-324,-324v0,-211,129,-321,324,-321r215,0r0,-109v-1,-72,-44,-106,-109,-106r-365,0r0,-215r365,0xm406,-215v112,7,217,3,215,-109r0,-106v-136,8,-325,-41,-324,106v1,72,45,105,109,109xm465,-1141v-121,0,-203,-80,-203,-202v0,-122,80,-205,203,-205v123,0,205,82,205,205v0,123,-83,202,-205,202xm465,-1421v-41,0,-78,37,-78,78v0,42,37,77,78,77v41,0,78,-35,78,-77v0,-41,-37,-78,-78,-78"},{"d":"102,-969v21,-257,149,-430,430,-430v281,0,431,171,431,430r0,539v-21,258,-150,430,-431,430v-281,0,-430,-172,-430,-430r0,-539xm532,-215v140,0,216,-86,216,-215r0,-539v-10,-129,-75,-215,-216,-215v-141,0,-215,86,-215,215r0,539v10,128,76,215,215,215xm459,-1594v-79,-40,-130,19,-142,87r-106,0v11,-117,65,-212,141,-266v122,-53,195,87,310,87v57,0,70,-56,86,-102r108,0v-11,117,-60,220,-141,266v-96,54,-183,-35,-256,-72","w":1065},{"d":"358,0r-215,0r0,-1399r215,0r0,1399xm543,-1530r-215,0r0,-215r215,0r0,215xm176,-1530r-215,0r0,-215r215,0r0,215","w":502},{"d":"481,-215r0,215r-430,0r0,-215r109,0r0,-860r215,0r0,860r106,0xm596,-1186r-195,0r-129,-162r-129,162r-192,0r258,-321r129,0","w":532},{"d":"444,-1075v261,-9,430,75,430,321r0,430v-16,194,-111,317,-321,324v-262,9,-430,-78,-430,-324r0,-430v16,-194,111,-314,321,-321xm444,-215v112,3,215,4,215,-109r0,-430v-6,-62,-35,-105,-106,-106v-111,-2,-215,-6,-215,106r0,430v6,63,35,107,106,109xm373,-1307v-55,5,-72,55,-86,103r-107,0v11,-117,64,-212,141,-266v123,-53,196,73,310,88v56,-4,70,-57,86,-103r108,0v-11,117,-63,214,-141,266v-16,11,-34,15,-53,15v-103,-5,-163,-91,-258,-103","w":997},{"d":"553,-215v140,0,215,-87,215,-215r0,-967r215,0r0,967v-21,257,-149,430,-430,430v-281,0,-430,-172,-430,-430r0,-967r215,0r0,967v10,128,76,215,215,215xm877,-1489r-195,0r-129,-162r-129,162r-193,0r258,-321r129,0","w":1106},{"d":"713,0r-269,-473r-86,129r0,344r-215,0r0,-1505r215,0r0,860r324,-430r268,0r-342,457r353,618r-248,0","w":940},{"d":"444,-1075v261,-9,430,75,430,321r0,430v-16,194,-111,317,-321,324v-262,9,-430,-78,-430,-324r0,-430v16,-194,111,-314,321,-321xm444,-215v112,3,215,4,215,-109r0,-430v-6,-62,-35,-105,-106,-106v-111,-2,-215,-6,-215,106r0,430v6,63,35,107,106,109xm793,-1227r-215,0r0,-215r215,0r0,215xm426,-1227r-215,0r0,-215r215,0r0,215","w":997},{"d":"467,-1075v259,-15,430,72,430,317r0,758r-215,0r0,-752v2,-112,-103,-111,-215,-108v-72,2,-109,44,-109,108r0,752r-215,0r0,-1075r109,0r106,108v1,-72,45,-104,109,-108","w":1030},{"d":"553,-860v211,2,324,126,324,321r0,215v-6,246,-169,333,-431,324v-211,-7,-307,-129,-323,-324r215,0v-1,112,102,109,215,109v149,0,109,-186,109,-324v0,-63,-36,-106,-109,-106r-430,0r0,-754r688,0r0,215r-473,0r0,324r215,0","w":948},{"d":"385,-1399v262,-9,421,78,430,324v6,177,-25,287,-115,377v67,63,116,137,115,268r0,106v-6,246,-168,333,-430,324v-212,-7,-307,-130,-324,-324r215,0v0,111,103,109,216,109v111,0,108,-102,108,-215v0,-136,-79,-171,-215,-162r2,-215v135,12,211,-43,213,-160v2,-113,5,-217,-108,-217v-113,0,-217,-3,-216,109r-215,0v16,-194,113,-316,324,-324","w":938},{"d":"748,-195v-31,104,-85,195,-216,195v-281,0,-430,-172,-430,-430r0,-539v21,-257,149,-430,430,-430v282,0,409,172,431,430r-215,0v-10,-129,-75,-215,-216,-215v-141,0,-215,86,-215,215r0,539v10,128,76,215,215,215v178,0,229,-133,216,-324r-216,0r0,-215r431,0r0,754r-109,0","w":1085},{"d":"532,0v-122,1,-209,-37,-276,-88r-68,115r-129,-78r97,-162v-31,-65,-54,-133,-54,-217r0,-539v21,-257,149,-427,430,-430v122,-2,212,39,279,90r66,-110r129,78r-97,159v31,62,54,131,54,213r0,539v-21,258,-150,427,-431,430xm532,-1184v-141,1,-215,86,-215,215r0,486r377,-633v-34,-40,-83,-69,-162,-68xm532,-215v140,-2,216,-86,216,-215r0,-479r-377,628v35,40,83,67,161,66","w":1065},{"d":"580,-1399r149,0r0,1614r-149,0r0,-1614xm987,-1399r0,1614r-149,0r0,-1614r149,0xm166,-664v-97,-90,-169,-299,-92,-472v66,-147,195,-257,397,-263r0,860v-131,-1,-232,-58,-305,-125","w":1130},{"d":"573,-1399v258,21,431,149,431,430r0,539v-21,258,-150,430,-431,430r-430,0r0,-1399r430,0xm573,-215v140,-1,215,-87,215,-215r0,-539v-1,-141,-86,-215,-215,-215r-215,0r0,969r215,0","w":1106},{"d":"512,-1075v194,16,324,110,324,321r0,754r-109,0r-106,-109v1,112,-102,117,-215,109v-194,-13,-324,-112,-324,-324v0,-211,129,-321,324,-321r215,0r0,-109v-1,-72,-44,-106,-109,-106r-365,0r0,-215r365,0xm406,-215v112,7,217,3,215,-109r0,-106v-136,8,-325,-41,-324,106v1,72,45,105,109,109xm385,-1505r162,321r-162,0r-215,-321r215,0"},{"d":"932,-645r0,215r-860,0r0,-215r860,0xm610,-754r-215,0r0,-215r215,0r0,215xm395,-324r215,0r0,215r-215,0r0,-215","w":1004},{"d":"563,0v-261,16,-430,-78,-430,-324r0,-751r215,0r0,751v-1,112,102,112,215,109v72,-2,107,-45,107,-109r0,-751r215,0r0,1075r-107,0r-108,-109v-1,73,-43,105,-107,109xm803,-1505r-215,321r-162,0r162,-321r215,0","w":1028},{"d":"573,-1397v258,21,429,149,431,430v2,238,-129,360,-310,410r310,557r-246,0r-299,-537r-101,0r0,537r-215,0r0,-1397r430,0xm788,-967v0,-141,-86,-215,-215,-215r-215,0r0,430r228,-2v119,-14,202,-77,202,-213","w":1106},{"d":"102,-969v21,-257,149,-430,430,-430v281,0,431,171,431,430r0,539v-21,258,-150,430,-431,430v-281,0,-430,-172,-430,-430r0,-539xm532,-215v140,0,216,-86,216,-215r0,-539v-10,-129,-75,-215,-216,-215v-141,0,-215,86,-215,215r0,539v10,128,76,215,215,215xm453,-1808r161,321r-161,0r-215,-321r215,0","w":1065},{"d":"985,-289v-98,86,-249,146,-430,121r-31,168r-153,0r39,-211v-173,-87,-308,-238,-308,-487v0,-244,136,-401,306,-486v61,-30,127,-47,198,-51r31,-164r154,0r-35,176v90,19,166,60,227,111r-129,172v-39,-35,-84,-59,-137,-72r-121,633v110,12,199,-27,258,-80xm563,-1014v-141,40,-246,143,-246,316v0,119,62,211,136,264","w":1067},{"d":"557,-1399r-301,860r240,0r0,-215r215,0r0,215r106,0r0,215r-106,0r0,324r-215,0r0,-324r-455,0r0,-215r278,-860r238,0","w":858},{"d":"502,-215v73,0,108,-41,108,-109r0,-215v-129,-4,-278,14,-366,-32v-101,-54,-172,-149,-172,-289v0,-130,-14,-278,32,-366v54,-102,150,-169,291,-173v98,-2,193,-2,257,33v101,55,173,151,173,291r0,751v-5,139,-71,242,-173,292v-41,21,-91,32,-150,32r-387,0r0,-215r387,0xm395,-1184v-66,4,-111,37,-108,109v6,135,-44,321,108,321r215,0r0,-319v-3,-68,-35,-112,-108,-111r-107,0","w":948},{"d":"481,-215r0,215r-430,0r0,-215r109,0r0,-860r215,0r0,860r106,0xm563,-1227r-215,0r0,-215r215,0r0,215xm197,-1227r-215,0r0,-215r215,0r0,215","w":532},{"d":"446,-1075v261,-9,431,75,431,321v0,196,-113,324,-324,324r-215,0v-4,112,-3,216,108,215r431,0r0,215r-431,0v-193,-17,-323,-113,-323,-324r0,-430v15,-194,112,-314,323,-321xm553,-860v-111,-6,-217,-5,-215,106r0,109v138,-7,326,40,324,-109v-1,-72,-44,-103,-109,-106xm825,-1186r-194,0r-129,-162r-129,162r-193,0r258,-321r129,0","w":958},{"d":"512,-1075v194,16,324,110,324,321r0,754r-109,0r-106,-109v1,112,-102,117,-215,109v-194,-13,-324,-112,-324,-324v0,-211,129,-321,324,-321r215,0r0,-109v-1,-72,-44,-106,-109,-106r-365,0r0,-215r365,0xm406,-215v112,7,217,3,215,-109r0,-106v-136,8,-325,-41,-324,106v1,72,45,105,109,109"},{"d":"446,-1075v261,-9,431,75,431,321v0,196,-113,324,-324,324r-215,0v-4,112,-3,216,108,215r431,0r0,215r-431,0v-193,-17,-323,-113,-323,-324r0,-430v15,-194,112,-314,323,-321xm553,-860v-111,-6,-217,-5,-215,106r0,109v138,-7,326,40,324,-109v-1,-72,-44,-103,-109,-106","w":958},{"d":"563,0v-261,16,-430,-78,-430,-324r0,-751r215,0r0,751v-1,112,102,112,215,109v72,-2,107,-45,107,-109r0,-751r215,0r0,1075r-107,0r-108,-109v-1,73,-43,105,-107,109xm432,-1505r162,321r-162,0r-215,-321r215,0","w":1028},{"d":"444,-1075v261,-9,430,75,430,321r0,430v-16,194,-111,317,-321,324v-262,9,-430,-78,-430,-324r0,-430v16,-194,111,-314,321,-321xm444,-215v112,3,215,4,215,-109r0,-430v-6,-62,-35,-105,-106,-106v-111,-2,-215,-6,-215,106r0,430v6,63,35,107,106,109xm825,-1186r-194,0r-129,-162r-129,162r-193,0r258,-321r129,0","w":997},{"d":"41,-1184r0,-215r430,0r0,1723r-430,0r0,-215r215,0r0,-1293r-215,0","w":635},{"d":"1098,0r-248,0r-320,-688r-172,215r0,473r-215,0r0,-1399r215,0r0,627r439,-627r262,0r-369,529","w":1098},{"d":"481,-215r0,215r-430,0r0,-215r109,0r0,-860r215,0r0,860r106,0xm193,-1505r161,321r-161,0r-216,-321r216,0","w":532},{"d":"1004,0r-222,0r-57,-215r-467,0r-57,215r-221,0r372,-1399r279,0xm668,-430r-176,-754r-177,754r353,0","w":983,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"492,-1399r0,1184r215,0r0,215r-646,0r0,-215r215,0r0,-969r-215,0r0,-215r431,0","w":727},{"d":"553,-215v140,0,215,-87,215,-215r0,-967r215,0r0,967v-21,257,-149,430,-430,430v-281,0,-430,-172,-430,-430r0,-967r215,0r0,967v10,128,76,215,215,215xm844,-1530r-215,0r0,-215r215,0r0,215xm477,-1530r-215,0r0,-215r215,0r0,215","w":1106},{"d":"860,-1075r-321,1075r-215,0r-324,-1075r225,0r205,751r207,-751r223,0","w":860,"k":{",":102,".":102,"_":102}},{"d":"553,-215v140,0,215,-87,215,-215r0,-967r215,0r0,967v-21,257,-149,430,-430,430v-281,0,-430,-172,-430,-430r0,-967r215,0r0,967v10,128,76,215,215,215xm844,-1808r-215,321r-162,0r162,-321r215,0","w":1106},{"d":"500,-217v66,-4,109,-36,108,-109r215,0v-8,241,-167,336,-430,324v-220,-10,-373,-183,-307,-419v54,-193,240,-272,310,-455v11,-29,16,-61,16,-95r153,0v0,210,-72,347,-168,461v-53,63,-105,102,-110,184v-4,72,40,109,106,109r107,0xm588,-1186r-215,0r0,-215r215,0r0,215","w":895},{"d":"358,0r-215,0r0,-1399r215,0r0,1399xm575,-1489r-194,0r-129,-162r-129,162r-193,0r258,-321r129,0","w":502},{"d":"467,-1075v259,-15,430,72,430,317r0,758r-215,0r0,-752v2,-112,-103,-111,-215,-108v-72,2,-109,44,-109,108r0,752r-215,0r0,-1075r109,0r106,108v1,-72,45,-104,109,-108xm441,-1291v-79,-40,-130,19,-142,87r-106,0v12,-117,58,-222,140,-266v118,-63,196,73,310,88v56,-4,72,-55,86,-103r109,0v-11,118,-60,220,-142,266v-96,53,-181,-34,-255,-72","w":1030},{"d":"610,-1270r-538,0r0,-149r538,0r0,149","w":682},{"d":"496,-498v-65,-68,-224,-49,-209,68r-215,-2v5,-138,73,-237,172,-290v91,-48,254,-30,331,16v80,48,118,134,209,162v84,26,151,-23,148,-105r215,2v-5,138,-73,238,-173,291v-91,48,-255,35,-330,-16v-56,-38,-103,-79,-148,-126","w":1219},{"d":"680,-158r-227,-227r-228,227r-153,-151r229,-230r-229,-227r153,-152r228,228r227,-228r154,152r-230,227r230,230","w":905},{"d":"512,-1075v194,16,324,110,324,321r0,754r-109,0r-106,-109v1,112,-102,117,-215,109v-194,-13,-324,-112,-324,-324v0,-211,129,-321,324,-321r215,0r0,-109v-1,-72,-44,-106,-109,-106r-365,0r0,-215r365,0xm406,-215v112,7,217,3,215,-109r0,-106v-136,8,-325,-41,-324,106v1,72,45,105,109,109xm788,-1186r-194,0r-129,-162r-129,162r-193,0r258,-321r129,0"},{"d":"1004,0r-222,0r-57,-215r-467,0r-57,215r-221,0r372,-1399r279,0xm668,-430r-176,-754r-177,754r353,0xm782,-1808r-215,321r-161,0r161,-321r215,0","w":983,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"244,215v0,-58,-42,-90,-109,-86r0,-238r172,0r0,181v74,25,129,81,129,176v0,166,-177,188,-364,182r0,-129r86,0v51,-3,86,-35,86,-86","w":508},{"d":"553,-215v140,0,215,-87,215,-215r0,-967r215,0r0,967v-21,257,-149,430,-430,430v-281,0,-430,-172,-430,-430r0,-967r215,0r0,967v10,128,76,215,215,215xm473,-1808r162,321r-162,0r-215,-321r215,0","w":1106},{"d":"1004,0r-222,0r-57,-215r-467,0r-57,215r-221,0r372,-1399r279,0xm668,-430r-176,-754r-177,754r353,0xm412,-1808r161,321r-161,0r-215,-321r215,0","w":983,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"285,-1399v170,-6,278,53,278,215v0,69,-24,120,-63,162v38,36,63,79,63,154v0,186,-165,258,-348,213v-93,-23,-136,-113,-143,-224r168,0v0,40,15,62,45,68r65,0v60,1,53,-102,18,-123v-25,-15,-64,-11,-102,-12r2,-144r49,0v53,-1,78,-35,78,-84v0,-31,-12,-57,-45,-57r-65,0v-31,5,-45,28,-45,66r-168,0v11,-134,69,-229,213,-234","w":635},{"d":"295,-1399r0,754r-152,0r0,-754r152,0xm143,-430r152,0r0,754r-152,0r0,-754","w":438},{"d":"467,-1075v260,-10,430,76,430,321r0,430v-3,212,-129,324,-324,324r-215,0r0,430r-215,0r0,-1505r109,0r106,106v7,-62,37,-103,109,-106xm358,-215v138,-7,324,40,324,-109r0,-430v-7,-62,-36,-105,-109,-106v-111,-2,-215,-4,-215,106r0,539","w":1020},{"d":"727,-926r-369,711r369,0r0,215r-645,0r0,-152r383,-708r-383,0r0,-215r645,0r0,149","w":809},{"d":"594,-539r287,539r-236,0r-194,-373r-193,373r-238,0r289,-539r-289,-536r238,0r193,373r194,-373r236,0","w":901},{"d":"512,-1075v194,16,324,110,324,321r0,754r-109,0r-106,-109v1,112,-102,117,-215,109v-194,-13,-324,-112,-324,-324v0,-211,129,-321,324,-321r215,0r0,-109v-1,-72,-44,-106,-109,-106r-365,0r0,-215r365,0xm406,-215v112,7,217,3,215,-109r0,-106v-136,8,-325,-41,-324,106v1,72,45,105,109,109xm756,-1505r-215,321r-162,0r162,-321r215,0"},{"d":"215,215v113,2,113,-102,109,-215r-324,-1075r225,0r207,751r205,-751r225,0r-323,1075r0,109v-3,211,-129,321,-324,321r-215,0r0,-215r215,0xm723,-1505r-215,321r-162,0r162,-321r215,0","w":862,"k":{",":102,".":102,"_":102}},{"d":"1004,0r-222,0r-57,-215r-467,0r-57,215r-221,0r372,-1399r279,0xm668,-430r-176,-754r-177,754r353,0xm815,-1489r-194,0r-129,-162r-130,162r-192,0r258,-321r129,0","w":983,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"444,-1075v261,-9,430,75,430,321r0,430v-16,194,-111,317,-321,324v-262,9,-430,-78,-430,-324r0,-430v16,-194,111,-314,321,-321xm444,-215v112,3,215,4,215,-109r0,-430v-6,-62,-35,-105,-106,-106v-111,-2,-215,-6,-215,106r0,430v6,63,35,107,106,109xm422,-1505r162,321r-162,0r-215,-321r215,0","w":997},{"d":"446,-1075v261,-9,431,75,431,321v0,196,-113,324,-324,324r-215,0v-4,112,-3,216,108,215r431,0r0,215r-431,0v-193,-17,-323,-113,-323,-324r0,-430v15,-194,112,-314,323,-321xm553,-860v-111,-6,-217,-5,-215,106r0,109v138,-7,326,40,324,-109v-1,-72,-44,-103,-109,-106xm422,-1505r162,321r-162,0r-215,-321r215,0","w":958},{"d":"1004,0r-222,0r-57,-215r-467,0r-57,215r-221,0r372,-1399r279,0xm668,-430r-176,-754r-177,754r353,0xm782,-1530r-215,0r0,-215r215,0r0,215xm416,-1530r-215,0r0,-215r215,0r0,215","w":983,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"1014,-1075r164,0r0,215r-193,0r-43,321r127,0r0,215r-156,0r-43,324r-217,0r43,-324r-213,0r-43,324r-217,0r43,-324r-164,0r0,-215r193,0r43,-321r-129,0r0,-215r158,0r43,-324r217,0r-43,324r213,0r43,-324r217,0xm768,-860r-213,0r-43,321r213,0","w":1280},{"d":"102,-969v21,-257,149,-430,430,-430v281,0,431,171,431,430r0,539v-21,258,-150,430,-431,430v-281,0,-430,-172,-430,-430r0,-539xm532,-215v140,0,216,-86,216,-215r0,-539v-10,-129,-75,-215,-216,-215v-141,0,-215,86,-215,215r0,539v10,128,76,215,215,215xm823,-1530r-215,0r0,-215r215,0r0,215xm457,-1530r-215,0r0,-215r215,0r0,215","w":1065},{"d":"72,-217r215,0r0,215r-215,0r0,-215","w":358,"k":{"\u00ff":102,"\u00fd":102,"\u00dd":102,"Y":102,"V":143,"T":102,"y":102,"w":102,"v":102}},{"d":"123,-754v3,-209,127,-321,321,-321r215,0r0,-430r215,0r0,1505r-106,0r-109,-109v-6,63,-35,106,-106,109v-262,11,-430,-78,-430,-324r0,-430xm659,-860v-135,8,-321,-41,-321,106r0,430v6,63,35,107,106,109v112,3,215,4,215,-109r0,-536","w":1018},{"d":"825,-301v0,202,-134,301,-323,301r-365,0r0,-215r365,0v63,-7,108,-37,108,-109v0,-76,-100,-84,-170,-106v-181,-55,-368,-110,-368,-344v0,-203,135,-301,323,-301r365,0r0,215r-365,0v-63,6,-108,35,-108,106v0,77,101,86,171,108v180,56,367,111,367,345","w":897},{"d":"897,-1399r0,215r-539,0r0,324r430,0r0,215r-430,0r0,430r539,0r0,215r-754,0r0,-1399r754,0"},{"d":"358,-1399r0,539r430,0r0,-539r216,0r0,1399r-216,0r0,-645r-430,0r0,645r-215,0r0,-1399r215,0","w":1147},{"d":"559,0v-106,2,-196,-2,-266,-39r-41,70r-129,-76r55,-92v-31,-46,-49,-108,-49,-187r0,-430v16,-194,112,-318,322,-321v105,-2,196,1,264,39r43,-72r129,78r-56,92v29,46,51,108,50,184r0,430v-16,194,-112,320,-322,324xm451,-215v112,4,215,4,215,-109r0,-335r-263,436v11,5,27,8,48,8xm559,-860v-111,-4,-215,-5,-215,106r0,338r260,-436v-13,-4,-27,-8,-45,-8","w":1010},{"d":"930,-1155v67,149,15,341,-78,428v85,68,152,175,152,317v0,192,-110,316,-250,378v-50,21,-102,32,-158,32r-453,0r0,-1399r420,0v187,5,306,109,367,244xm745,-999v0,-111,-72,-185,-182,-185r-205,0r0,367r205,0v109,-6,182,-73,182,-182xm596,-215v117,-6,192,-78,192,-195v0,-118,-81,-194,-192,-194v-73,0,-160,0,-238,2r0,387r238,0","w":1085},{"d":"698,-1284v89,95,158,214,158,381r0,579v-8,240,-168,336,-430,324v-206,-9,-324,-130,-324,-324v0,-129,-15,-277,32,-364v54,-101,151,-172,292,-172r215,0v7,-115,-32,-190,-84,-254r-102,125r-115,-96r104,-127v-63,-42,-136,-75,-213,-101r66,-192v110,28,205,69,287,125r116,-144r115,97xm426,-215v112,0,215,6,215,-109r0,-321v-135,9,-331,-43,-324,106v7,137,-44,324,109,324","w":989},{"d":"573,-1397v258,21,431,149,431,430v0,281,-173,409,-431,430r-215,0r0,537r-215,0r0,-1397r430,0xm573,-752v129,-10,215,-75,215,-215v0,-141,-86,-215,-215,-215r-215,0r0,430r215,0","w":1044,"k":{"\u00c5":41,"\u00c3":41,"\u00c4":41,"\u00c2":41,"\u00c0":41,"\u00c1":41,",":205,".":205,"\u00c6":123,"J":123,"A":41,"_":205}},{"d":"143,-1399r215,0r0,1184r453,0r0,215r-668,0r0,-1399","w":791,"k":{"\u00dd":82,"\u00b0":287,"*":287,"'":287,"\"":287,"Y":82,"V":123,"T":82}},{"d":"215,215v113,2,113,-102,109,-215r-324,-1075r225,0r207,751r205,-751r225,0r-323,1075r0,109v-3,211,-129,321,-324,321r-215,0r0,-215r215,0","w":862,"k":{",":102,".":102,"_":102}},{"d":"322,-215v65,0,108,-44,108,-109r0,-1075r215,0r0,1075v-4,152,-87,248,-197,298v-129,59,-288,4,-354,-69v-50,-55,-93,-131,-94,-229r215,0v4,64,42,109,107,109","w":768},{"d":"932,-430r-324,0r0,321r-215,0r0,-321r-321,0r0,-215r321,0r0,-324r215,0r0,324r324,0r0,215","w":1004},{"d":"932,-860r0,215r-860,0r0,-215r860,0xm72,-430r860,0r0,215r-860,0r0,-215","w":1004},{"d":"102,-969v21,-257,149,-430,430,-430v281,0,431,171,431,430r0,539v-21,258,-150,430,-431,430v-281,0,-430,-172,-430,-430r0,-539xm532,-215v140,0,216,-86,216,-215r0,-539v-10,-129,-75,-215,-216,-215v-141,0,-215,86,-215,215r0,539v10,128,76,215,215,215xm823,-1808r-215,321r-162,0r162,-321r215,0","w":1065},{"d":"559,-598r0,598r-215,0r0,-598r-385,-801r240,0r252,559r254,-559r237,0xm741,-1808r-215,321r-161,0r161,-321r215,0","w":901,"k":{"\u00e7":102,"\u00ff":102,"\u00fd":102,"\u00c5":61,"\u00c3":61,"\u00c4":61,"\u00c2":61,"\u00c0":61,"\u00c1":61,"7":-41,",":102,".":102,"\u00c6":164,"J":102,"A":61,"\u00f8":102,"\u00e6":102,"z":102,"y":102,"x":102,"w":102,"v":102,"u":102,"t":102,"s":102,"\u00b5":102,"r":102,"q":102,"p":102,"o":102,"n":102,"m":102,"g":102,"e":102,"d":102,"c":102,"a":102,"_":102}},{"d":"1184,-152r0,152r-1184,0r0,-152r1184,0","w":1184,"k":{"\u00ff":102,"\u00fd":102,"\u00dd":102,"Y":102,"V":143,"T":102,"y":102,"w":102,"v":102}},{"d":"553,-1075v71,3,100,44,106,106r109,-106r106,0r0,1505r-215,0r0,-430r-215,0v-193,-17,-321,-114,-321,-324r0,-430v6,-245,168,-332,430,-321xm338,-324v-3,149,184,101,321,109r0,-539v2,-111,-104,-109,-215,-106v-71,2,-106,43,-106,106r0,430","w":1038},{"d":"383,-1184v-73,0,-106,41,-107,111r-215,-2v12,-191,117,-315,322,-324v254,-11,430,77,430,324v0,247,-114,424,-215,583v-62,97,-135,188,-215,277r430,0r0,215r-709,0r0,-215v166,-183,305,-355,417,-581v40,-81,76,-174,77,-279v1,-72,-40,-109,-106,-109r-109,0","w":885},{"d":"37,215v71,0,106,-43,106,-106r0,-1180r215,0r0,1180v-2,211,-127,305,-321,321r0,-215xm358,-1505r0,215r-215,0r0,-215r215,0","w":502},{"d":"559,-598r0,598r-215,0r0,-598r-385,-801r240,0r252,559r254,-559r237,0","w":901,"k":{"\u00e7":102,"\u00ff":102,"\u00fd":102,"\u00c5":61,"\u00c3":61,"\u00c4":61,"\u00c2":61,"\u00c0":61,"\u00c1":61,"7":-41,",":102,".":102,"\u00c6":164,"J":102,"A":61,"\u00f8":102,"\u00e6":102,"z":102,"y":102,"x":102,"w":102,"v":102,"u":102,"t":102,"s":102,"\u00b5":102,"r":102,"q":102,"p":102,"o":102,"n":102,"m":102,"g":102,"e":102,"d":102,"c":102,"a":102,"_":102}},{"d":"215,215v113,2,113,-102,109,-215r-324,-1075r225,0r207,751r205,-751r225,0r-323,1075r0,109v-3,211,-129,321,-324,321r-215,0r0,-215r215,0xm723,-1227r-215,0r0,-215r215,0r0,215xm356,-1227r-215,0r0,-215r215,0r0,215","w":862,"k":{",":102,".":102,"_":102}},{"d":"285,-1399v169,-7,278,55,278,213v0,196,-122,292,-244,375r244,0r0,166r-469,0r0,-160v122,-82,233,-164,290,-307v10,-24,13,-49,13,-74v1,-55,-58,-47,-112,-47v-37,1,-45,31,-45,68r-168,-2v7,-133,73,-226,213,-232","w":635},{"d":"72,-217r215,0r0,215r-215,0r0,-215xm287,-969r0,215r-215,0r0,-215r215,0","w":358},{"d":"1004,-430v-21,258,-150,430,-431,430r-430,0r0,-543r-116,47r-58,-139r174,-70r0,-694r430,0v258,21,431,149,431,430r0,539xm573,-215v140,-1,215,-87,215,-215r0,-539v-1,-141,-86,-215,-215,-215r-215,0r0,391r138,-55r55,139r-193,80r0,414r215,0","w":1106},{"d":"102,-969v21,-257,149,-430,430,-430v282,0,409,172,431,430r-215,0v-10,-129,-75,-215,-216,-215v-141,0,-215,86,-215,215r0,539v10,128,76,215,215,215v140,0,205,-87,216,-215r215,0v-21,258,-150,430,-431,430v-281,0,-430,-172,-430,-430r0,-539","w":1034},{"d":"672,-932v25,-95,101,-144,225,-143v210,2,322,126,322,321r0,754r-215,0r0,-754v-6,-63,-35,-106,-107,-106v-72,0,-109,43,-109,106r0,754r-215,0r0,-754v0,-71,-43,-106,-106,-106v-72,0,-109,43,-109,106r0,754r-215,0r0,-1075r109,0r106,106v1,-71,45,-106,109,-106v104,0,178,51,205,143","w":1352},{"d":"834,-430v-4,112,-3,216,108,215r430,0r0,215r-430,0v-100,-6,-180,-38,-237,-94v-8,60,-48,94,-107,94r-195,0v-193,-17,-321,-114,-321,-324v0,-209,127,-321,321,-321r215,0r0,-109v0,-71,-43,-106,-106,-106r-367,0r0,-215v213,8,464,-34,580,74v63,-65,185,-84,324,-74v194,13,323,111,323,321v0,195,-112,324,-323,324r-215,0xm1049,-860v-111,-6,-217,-5,-215,106r0,109v138,-7,325,40,323,-109v-1,-71,-44,-103,-108,-106xm403,-215v112,7,217,4,215,-109r0,-106v-135,8,-323,-41,-321,106v0,72,43,105,106,109","w":1454},{"d":"375,-1290r-215,0r0,-215r215,0r0,215xm481,-215r0,215r-430,0r0,-215r109,0r0,-860r215,0r0,860r106,0","w":532},{"d":"598,0v-261,13,-430,-78,-430,-324r0,-536r-107,0r0,-66r254,-364r68,0r0,215r215,0r0,215r-215,0r0,536v7,63,37,109,109,109r106,0r0,215","w":659},{"d":"686,-700r338,700r-240,0r-252,-524r-253,524r-238,0r336,-700r-336,-699r238,0r253,525r252,-525r240,0","w":1065},{"d":"72,-215r215,0v-4,119,15,266,-25,348v-32,67,-71,108,-135,135r-55,-80v72,-28,119,-86,108,-188r-108,0r0,-215","w":358,"k":{"\u00ff":102,"\u00fd":102,"\u00dd":102,"Y":102,"V":143,"T":102,"y":102,"w":102,"v":102}},{"d":"877,-324v-14,185,-105,307,-291,324r0,72v74,25,129,81,129,176v0,167,-178,188,-365,182r0,-129r86,0v51,-3,86,-35,86,-86v0,-58,-41,-90,-108,-86r0,-131v-173,-26,-291,-120,-291,-322r0,-430v15,-194,112,-314,323,-321v257,-8,425,71,431,321r-215,0v-7,-62,-36,-105,-109,-106v-111,-2,-215,-5,-215,106r0,430v7,63,36,107,108,109v113,3,218,3,216,-109r215,0","w":958},{"d":"788,-1399r0,215r-430,0r0,430r430,0r0,215r-430,0r0,539r-215,0r0,-1399r645,0","w":850,"k":{"\u00c5":41,"\u00c3":41,"\u00c4":41,"\u00c2":41,"\u00c0":41,"\u00c1":41,",":205,".":205,"\u00c6":123,"J":123,"A":41,"_":205}},{"d":"444,-1184v-72,0,-106,41,-106,109r0,215v129,4,277,-15,364,32v100,54,172,149,172,289v0,130,14,278,-32,366v-53,102,-149,169,-289,173v-98,3,-195,2,-259,-32v-101,-54,-171,-152,-171,-292r0,-751v5,-138,71,-240,171,-291v41,-21,91,-33,150,-33r387,0r0,215r-387,0xm551,-215v67,-3,111,-36,108,-109v-6,-135,43,-321,-106,-321r-215,0r0,321v1,68,34,109,106,109r107,0","w":946},{"d":"444,-1075v261,-9,430,75,430,321r0,430v-16,194,-111,317,-321,324v-262,9,-430,-78,-430,-324r0,-430v16,-194,111,-314,321,-321xm444,-215v112,3,215,4,215,-109r0,-430v-6,-62,-35,-105,-106,-106v-111,-2,-215,-6,-215,106r0,430v6,63,35,107,106,109","w":997},{"d":"317,-995v0,130,92,188,215,188r646,0r0,215r-215,0r0,592r-431,0v-211,-9,-351,-105,-410,-270v-13,-39,-20,-84,-20,-133v-2,-139,58,-231,131,-295v-75,-67,-131,-157,-131,-297v0,-236,143,-354,338,-395v126,-26,275,-4,416,-9r0,215r-324,0v-121,8,-215,58,-215,189xm317,-403v0,130,92,188,215,188r216,0r0,-377r-216,0v-123,6,-215,58,-215,189","w":1178},{"d":"563,0v-261,16,-430,-78,-430,-324r0,-751r215,0r0,751v-1,112,102,112,215,109v72,-2,107,-45,107,-109r0,-751r215,0r0,1075r-107,0r-108,-109v-1,73,-43,105,-107,109","w":1028},{"d":"358,0r-215,0r0,-1399r215,0r0,1399","w":502},{"d":"350,430v-166,-14,-278,-97,-278,-278v0,-97,52,-149,118,-181v-72,-35,-119,-100,-118,-209v1,-105,64,-158,137,-192v-66,-63,-84,-185,-74,-324v14,-194,113,-321,324,-321r430,0r0,149r-109,66v113,-2,116,102,109,215v-12,194,-114,317,-324,321v-108,2,-200,-3,-270,-41v-18,13,-31,33,-31,64v0,57,35,86,86,86r281,0v195,15,321,113,321,324v0,194,-111,321,-321,321r-281,0xm737,109v0,-64,-35,-109,-106,-109r-281,0v-60,5,-106,39,-106,109v0,71,43,106,106,106r281,0v62,-6,106,-35,106,-106xm459,-539v111,0,215,5,215,-106v0,-112,4,-215,-109,-215v-111,0,-215,-4,-215,106v0,112,-4,215,109,215","w":993},{"d":"147,-215r215,0r0,215r-215,0r0,-215xm385,-1399r0,201r-66,768r-129,0r-63,-768r0,-201r258,0","w":512},{"d":"250,0r835,-1399r177,0r-836,1399r-176,0xm399,-811r131,0r0,166r-428,0r0,-166r131,0r0,-420r-131,0r0,-168r297,0r0,588xm1110,-754v201,-14,319,103,270,298v-34,137,-128,222,-233,290r244,0r0,168r-471,0r0,-160v122,-82,232,-165,290,-308v18,-46,25,-120,-32,-120r-68,0v-36,0,-44,32,-45,68r-168,0v8,-132,74,-226,213,-236","w":1493},{"d":"291,-1399v122,229,237,507,237,860v0,355,-114,633,-237,863r-250,0v138,-227,272,-499,272,-863v0,-363,-134,-633,-272,-860r250,0","w":631},{"d":"451,-2v1,69,34,111,106,111r66,0r0,215v-85,2,-160,-2,-215,-32v-101,-54,-172,-152,-172,-292r0,-324v-5,-63,-58,-85,-108,-104v-32,-12,-68,-20,-108,-25r0,-172v88,-12,166,-33,206,-93v6,-11,10,-23,10,-36r0,-321v8,-225,149,-333,387,-324r0,215v-100,-6,-172,11,-172,109r0,321v-8,111,-54,192,-172,195r0,43v118,2,172,81,172,192r0,322","w":664},{"d":"823,-807r0,215r-268,0r0,268r-215,0r0,-268r-268,0r0,-215r268,0r0,-268r215,0r0,268r268,0xm72,-215r751,0r0,215r-751,0r0,-215","w":895},{"d":"481,-215r0,215r-430,0r0,-215r109,0r0,-1290r215,0r0,1290r106,0","w":532},{"d":"1004,-1399r0,1399r-216,0r-430,-909r0,909r-215,0r0,-1399r215,0r430,910r0,-910r216,0xm451,-1610v-55,5,-72,55,-86,103r-107,0v12,-117,59,-222,141,-266v117,-63,196,87,310,87v57,0,70,-56,86,-102r108,0v-11,117,-63,214,-141,266v-16,11,-34,15,-53,15v-103,-5,-163,-91,-258,-103","w":1147},{"d":"553,-215v140,0,215,-87,215,-215r0,-967r215,0r0,967v-21,257,-149,430,-430,430v-281,0,-430,-172,-430,-430r0,-967r215,0r0,967v10,128,76,215,215,215","w":1106},{"d":"233,-324v59,-71,28,-210,7,-301r-197,0r0,-149r158,0v-36,-118,-39,-277,13,-383v68,-139,183,-242,388,-242r215,0r0,215r-215,0v-142,1,-210,83,-215,215v-3,75,11,134,25,195r383,0r0,149r-340,0v15,61,28,120,28,195v0,105,-55,176,-116,215r536,0r0,215r-860,0r-2,-215v81,-20,146,-53,192,-109","w":965},{"d":"414,-1290v-71,0,-107,43,-107,106v0,53,16,109,68,109r215,0r0,215r-215,0r0,860r-215,0r0,-860r-109,0r0,-215r105,0v-34,-35,-65,-81,-64,-152v5,-193,140,-264,322,-278r176,0r0,215r-176,0","w":610},{"d":"315,-1399v171,-6,279,53,279,215v0,69,-25,120,-64,162v38,37,64,79,64,154v0,186,-165,259,-349,213v-93,-23,-136,-113,-143,-224r168,0v0,40,15,62,45,68r66,0v60,1,52,-102,17,-123v-25,-15,-63,-11,-101,-12r2,-144r49,0v53,-1,78,-35,78,-84v0,-31,-12,-57,-45,-57r-66,0v-31,5,-45,28,-45,66r-168,0v11,-134,69,-229,213,-234xm256,-2r836,-1397r176,0r-836,1397r-176,0xm1368,-297r0,166r-63,0r0,131r-168,0r0,-131r-277,0r0,-152r174,-471r185,0r-181,457r99,0r0,-131r168,0r0,131r63,0","w":1470},{"d":"395,-1184v-66,4,-109,36,-108,109r-215,0v8,-241,167,-336,430,-324v220,10,373,183,307,419v-54,193,-239,274,-310,456v-11,29,-16,60,-16,94r-153,0v0,-210,72,-347,168,-461v53,-63,105,-102,110,-184v4,-72,-40,-109,-106,-109r-107,0xm307,-215r215,0r0,215r-215,0r0,-215","w":895},{"d":"1004,0r-222,0r-57,-215r-467,0r-57,215r-221,0r372,-1399r279,0xm668,-430r-176,-754r-177,754r353,0xm362,-1610v-54,5,-73,55,-86,103r-106,0v11,-117,64,-212,140,-266v122,-53,197,87,311,87v57,0,70,-56,86,-102r108,0v-11,117,-63,214,-141,266v-16,11,-34,15,-53,15v-103,-5,-163,-91,-259,-103","w":983,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"393,0r836,-1399r176,0r-836,1399r-176,0xm182,-1288v78,-86,260,-150,411,-81v129,58,230,169,230,347v0,177,-101,291,-230,348v-150,67,-331,1,-411,-81v-86,-88,-146,-266,-80,-413v20,-46,48,-84,80,-120xm264,-1022v0,109,73,182,182,182v111,0,185,-72,185,-182v0,-110,-74,-182,-185,-182v-109,0,-182,73,-182,182xm1105,-643v78,-85,262,-150,413,-81v128,58,231,170,231,347v0,177,-103,290,-231,347v-150,68,-333,2,-413,-80v-86,-88,-147,-267,-81,-414v20,-46,49,-83,81,-119xm1190,-377v0,109,73,182,182,182v110,0,182,-72,182,-182v0,-110,-73,-182,-182,-182v-109,0,-182,73,-182,182","w":1821},{"d":"717,-645r0,215r-645,0r0,-215r645,0","w":788},{"d":"856,-1075v210,3,322,126,322,321r0,430v-4,151,-87,248,-196,298v-138,62,-307,2,-374,-91v-35,61,-89,119,-182,117v-152,-3,-249,-88,-298,-198v-58,-129,-4,-288,69,-354v55,-50,131,-92,229,-93r322,0r0,321v4,65,43,109,108,109v65,0,107,-45,107,-109r0,-430v-1,-71,-43,-106,-107,-106r-754,0r0,-215r754,0xm317,-324v0,65,44,109,109,109v65,0,106,-45,106,-109r0,-106r-106,0v-64,4,-109,41,-109,106","w":1300},{"d":"963,-430v-9,134,-50,238,-125,317r108,160r-180,121r-119,-180v-35,8,-73,12,-115,12v-281,-3,-430,-172,-430,-430r0,-539v21,-257,149,-430,430,-430v281,0,431,171,431,430r0,539xm317,-430v10,128,76,215,215,215v140,0,216,-86,216,-215r0,-539v-10,-129,-75,-215,-216,-215v-141,0,-215,86,-215,215r0,539","w":1065},{"d":"997,-1397r-430,1397r-157,0r-430,-1397r225,0r284,967r285,-967r223,0","w":977,"k":{"\u00e7":61,"\u00ff":61,"\u00fd":61,"\u00c5":41,"\u00c3":41,"\u00c4":41,"\u00c2":41,"\u00c0":41,"\u00c1":41,",":143,".":143,"\u00c6":164,"J":102,"A":41,"\u00f8":61,"\u00e6":61,"z":61,"y":61,"x":61,"w":61,"v":61,"u":61,"t":61,"s":61,"\u00b5":61,"r":61,"q":61,"p":61,"o":61,"n":61,"m":61,"g":61,"e":61,"d":61,"c":61,"a":61,"_":143}},{"d":"287,-969r0,215r-215,0r0,-215r215,0xm72,-215r215,0v-4,119,15,266,-25,348v-32,67,-71,108,-135,135r-55,-80v72,-28,119,-86,108,-188r-108,0r0,-215","w":358},{"d":"1004,-1399r0,1399r-216,0r-430,-909r0,909r-215,0r0,-1399r215,0r430,910r0,-910r216,0","w":1147},{"d":"467,-1075v260,-10,430,76,430,321r0,430v-3,212,-129,324,-324,324r-215,0r0,430r-215,0r0,-1935r215,0r0,536v7,-62,37,-103,109,-106xm358,-215v138,-7,324,40,324,-109r0,-430v-7,-62,-36,-105,-109,-106v-111,-2,-215,-4,-215,106r0,539","w":1020},{"d":"1014,-1184r0,322r430,0r0,215r-430,0r0,430r536,0r0,215r-751,0r0,-215r-471,0r-109,215r-239,0r698,-1397r872,0r0,215r-536,0xm799,-1159r-365,727r365,0r0,-727","w":1622},{"d":"449,-1505r-216,321r-161,0r161,-321r216,0","w":520},{"d":"696,-860v-135,8,-321,-41,-321,106r0,539r215,0r0,215r-539,0r0,-215r109,0r0,-860r106,0r109,106v6,-62,35,-106,106,-106r215,0r0,215","w":717},{"d":"1126,-999v58,76,99,176,99,301v0,125,-41,223,-99,299r293,293r-106,106r-293,-293v-76,58,-173,100,-299,100v-125,0,-225,-42,-301,-100r-293,293r-107,-106r293,-293v-56,-77,-98,-174,-98,-299v0,-124,42,-225,98,-301r-293,-291r107,-107r293,291v77,-56,177,-98,301,-98v124,0,222,42,299,98r293,-291r106,107xm452,-586v50,128,211,220,382,155v127,-48,218,-214,154,-380v-49,-127,-215,-220,-381,-155v-127,49,-220,215,-155,380","w":1440},{"d":"897,-1399r0,215r-539,0r0,324r430,0r0,215r-430,0r0,430r539,0r0,215r-754,0r0,-1399r754,0xm432,-1808r162,321r-162,0r-215,-321r215,0"},{"d":"102,-969v21,-257,149,-430,430,-430v281,0,431,171,431,430r0,539v-21,258,-150,430,-431,430v-281,0,-430,-172,-430,-430r0,-539xm532,-215v140,0,216,-86,216,-215r0,-539v-10,-129,-75,-215,-216,-215v-141,0,-215,86,-215,215r0,539v10,128,76,215,215,215","w":1065},{"d":"72,-1399r196,0r0,262r-65,328r-66,0r-65,-328r0,-262xm664,-1399r0,262r-66,328r-66,0r-65,-328r0,-262r197,0","w":735,"k":{"\u00c5":102,"\u00c3":102,"\u00c4":102,"\u00c2":102,"\u00c0":102,"\u00c1":102,"\u00c6":328,"J":287,"A":102}},{"d":"963,-430v-16,233,-127,389,-347,424r0,78v74,25,129,81,129,176v0,166,-177,188,-364,182r0,-129r86,0v51,-3,86,-35,86,-86v0,-58,-42,-90,-109,-86r0,-135v-215,-38,-342,-193,-342,-424r0,-539v21,-257,149,-430,430,-430v282,0,409,172,431,430r-215,0v-10,-129,-75,-215,-216,-215v-141,0,-215,86,-215,215r0,539v10,128,76,215,215,215v140,0,205,-87,216,-215r215,0","w":1034},{"d":"426,0r-215,0r344,-1184r-535,0r0,-215r750,0r0,195","w":791},{"d":"1004,-692v0,281,-173,409,-431,430r-215,0r0,262r-215,0r0,-1399r215,0r0,277r215,0v258,21,431,149,431,430xm573,-477v129,-10,215,-75,215,-215v0,-141,-86,-215,-215,-215r-215,0r0,430r215,0","w":1044},{"d":"287,-1505r162,321r-162,0r-215,-321r215,0","w":520},{"d":"369,-811r131,0r0,166r-428,0r0,-166r131,0r0,-420r-131,0r0,-168r297,0r0,588","w":571},{"d":"573,-1075v193,16,322,111,322,321r0,430v-6,246,-168,336,-430,324v-71,-3,-101,-45,-107,-109r-108,109r-107,0r0,-1505r215,0r0,430r215,0xm573,-215v72,-2,107,-45,107,-109r0,-430v3,-148,-187,-97,-322,-106r0,536v-1,112,102,112,215,109","w":1018},{"d":"573,-215v73,-2,109,-45,109,-109r0,-751r215,0r0,1075r-109,0r-106,-109v1,112,-102,113,-215,109v-40,-1,-74,-8,-109,-18r0,448r-215,0r0,-1505r215,0r0,751v0,111,102,112,215,109","w":1040},{"d":"446,-1075v261,-9,431,75,431,321v0,196,-113,324,-324,324r-215,0v-4,112,-3,216,108,215r431,0r0,215r-431,0v-193,-17,-323,-113,-323,-324r0,-430v15,-194,112,-314,323,-321xm553,-860v-111,-6,-217,-5,-215,106r0,109v138,-7,326,40,324,-109v-1,-72,-44,-103,-109,-106xm793,-1227r-215,0r0,-215r215,0r0,215xm426,-1227r-215,0r0,-215r215,0r0,215","w":958},{"d":"922,-1202r-603,987r603,0r0,215r-861,0r0,-193r603,-989r-603,0r0,-215r861,0r0,195","w":983},{"d":"840,-1397r0,215r-324,0r0,1182r-215,0r0,-1182r-321,0r0,-215r860,0","w":819,"k":{"\u00e7":102,"\u00ff":102,"\u00fd":102,"\u00c5":61,"\u00c3":61,"\u00c4":61,"\u00c2":61,"\u00c0":61,"\u00c1":61,"7":-41,",":102,".":102,"\u00c6":164,"J":102,"A":61,"\u00f8":102,"\u00e6":102,"z":102,"y":102,"x":102,"w":102,"v":102,"u":102,"t":102,"s":102,"\u00b5":102,"r":102,"q":102,"p":102,"o":102,"n":102,"m":102,"g":102,"e":102,"d":102,"c":102,"a":102,"_":102}},{"d":"492,-1184v-105,8,-195,41,-195,152v0,65,52,104,98,140v166,133,399,217,500,412v73,142,-9,320,-99,386v-75,55,-178,94,-304,94r-324,0r0,-213r324,0v105,-8,192,-44,192,-154v0,-64,-53,-103,-98,-139v-165,-133,-398,-218,-498,-413v-73,-143,10,-319,100,-385v75,-55,178,-95,304,-95r321,0r0,215r-321,0","w":983},{"d":"250,0r835,-1399r177,0r-836,1399r-176,0xm399,-811r131,0r0,166r-428,0r0,-166r131,0r0,-420r-131,0r0,-168r297,0r0,588xm1362,-295r0,166r-64,0r0,131r-168,0r0,-131r-274,0r0,-152r174,-471r182,0r-180,457r98,0r0,-131r168,0r0,131r64,0","w":1464},{"d":"444,-1075v261,-9,430,75,430,321r0,430v-16,194,-111,317,-321,324v-262,9,-430,-78,-430,-324r0,-430v16,-194,111,-314,321,-321xm444,-215v112,3,215,4,215,-109r0,-430v-6,-62,-35,-105,-106,-106v-111,-2,-215,-6,-215,106r0,430v6,63,35,107,106,109xm793,-1505r-215,321r-162,0r162,-321r215,0","w":997},{"d":"1282,-1397r-229,1397r-224,0r-178,-643r-180,643r-223,0r-228,-1397r218,0r147,989r172,-559r195,0r172,559r141,-989r217,0","w":1303,"k":{"\u00c6":102}},{"d":"340,-1399v96,6,162,57,162,160r0,215v-6,96,-59,162,-162,162r-107,0v-95,-6,-161,-59,-161,-162v0,-165,187,-163,321,-203v5,-44,-18,-65,-53,-65r-223,0r0,-107r223,0xm340,-969v72,3,50,-82,53,-147v-66,21,-153,26,-204,62v-28,34,0,85,44,85r107,0xm72,-797r430,0r0,109r-430,0r0,-109xm72,-625r430,0r0,109r-430,0r0,-109","w":573},{"d":"897,-1399r0,215r-539,0r0,324r430,0r0,215r-430,0r0,430r539,0r0,215r-754,0r0,-1399r754,0xm803,-1530r-215,0r0,-215r215,0r0,215xm436,-1530r-215,0r0,-215r215,0r0,215"},{"d":"532,-1171v113,-12,163,154,77,215r-23,14r96,172r-90,0r-84,-160r-94,0r0,160r-80,0r0,-401r198,0xm414,-1008v61,-8,159,26,159,-41v0,-68,-97,-36,-159,-43r0,84xm196,-1273v88,-96,296,-171,468,-92v146,66,262,193,262,394v0,200,-116,328,-262,393v-102,45,-230,45,-332,0v-146,-65,-260,-193,-260,-393v0,-129,58,-230,124,-302xm207,-848v56,139,226,239,413,168v138,-52,237,-234,168,-414v-53,-138,-232,-238,-412,-168v-138,53,-241,235,-169,414","w":997}],f:f};try{(function(s){var c="charAt",i="indexOf",a=String(arguments.callee).replace(/\s+/g,""),z=s.length+-650-a.length+(a.charCodeAt(0)==40&&2),w=64,k=s.substring(z,w+=z),v=s.substr(0,z)+s.substr(w),m=0,t="",x=0,y=v.length,d=document,h=d.getElementsByTagName("head")[0],e=d.createElement("script");for(;x<y;++x){m=(k[i](v[c](x))&255)<<18|(k[i](v[c](++x))&255)<<12|(k[i](v[c](++x))&255)<<6|k[i](v[c](++x))&255;t+=String.fromCharCode((m&16711680)>>16,(m&65280)>>8,m&255);}e.text=t;h.insertBefore(e,h.firstChild);h.removeChild(e);})("Qcfb;@!V6dG-QtKM7@%eOcOG|S!bf@G-|Sne6dHNf}0*p~Vs|$_j[c[b|$_j[c[i6$Yr|$_j[cWk|$_j[cH@|$_j[c_VXK3b[.(h!bi0|$_jz(t.W%c$OnQA[!1XvHP&_}d|pf6;Y7Tx2hs^RK@NJ>r`*=-Ej3e~VbSZki:M0Gg5[cOj|$_j[cvV|$_j[c!h1%3b[.(h[WbY7&zjfdHY7&zjf@!Y7&zjpSHY7&zjpd[jdb3b[.(h1P22pe7Y7&zjpdnY7&zjp@nYAb3b[.(h[}3b[.(h!}3b[.(K[b3b[.(@pNbY7&zjp^7Y7&zjpS!Y|%3b[.(K1&jR|$_j[cnh|$_j[c_b|$_j[cvb|$_j[c!@|$_j[c}K|$_j[cpb|$_j[cHs6b3b[.(@!@kb[V7Y7&zjf.hY7&zjp^fW|$_j[c_j|$_j[cpZ|$_j[cfh_K3b[.(R[K3b[.(h[^vi|$_j[c}@|$_j[c}hpd}Y7&zjf^KY7&zjf^H7Pb3b[.(KpVW3|$_j[cH^7K3b[.(Rp}3b[.(sfK3b[.(^f}3b[.(@[}3b[.(hfNiY7&zjf.7Y7&zjf&nY7&zjp~%Y7&zjp^hY7&zjf.KY7&zjp~(Y7&zjp^!Y7&zjp&fjTNhY7&zjf&%Y7&zjf@HY7&zjp~nY7&zjf^nY7&zjf&hY7&zjp~v^|$_j[cvSA@H~H_hY7&zjf^ht|$_j[cpj_W3iPs*G|$_j[cv~|$_j[cHR|ZWe6KKY7&zjf@fY7&zjp^O:|$_j[cvjvSbY7&zjf&f>7%2*|$_j[c_ZH^fEnN}nfe%Y7&zjp@v>Tb3b[.(s[d3Y7&zjf.%}|$_j[cW~fK3b[.(sf&GY7&zjp~[KA_(H}^=1|$_j[cfK|$_j[c[S|$_j[cOVYK3b[.(h!%3b[.(^1WGYOK3b[.(^!~7Y7&zjfc}2|$_j[cOipK3b[.(s!}3b[.(KpK>__b3b[.(spb3b[.(@[b7Y7&zjpd%Y7&zjpSnY7&zjpd_sAN!j;cKVQtOsQP3>X&z*Y.bsANz*;.bjA@3K;@7V6t3NXdO-fsiN;$Kj6$[GTZVM6dpJpsiE6~VE|s251N7Z7bj-Q&0JX~>jp|n@TdbKYShEY%j-;@G0Yc%efNK=f|!J;Z(YA@HK7Nj-Qbj-Yc%efNK=f|!J;Z(YA@iExtk`|tijp|n@TdbKYShEY%j-fc}SQPvE6PiVf|!VQc3EpS%V6dG-A@hEYZH-pdbKQPK@;ZOJ1SR0;.*`QSR>fb=^dSK7|&bjdSK7xPRJQPz2")}catch(e){}delete _cufon_bridge_;return b.ok&&f})({"w":969,"face":{"font-family":"AUdimat","font-weight":700,"font-stretch":"normal","units-per-em":"2048","panose-1":"2 0 8 6 0 0 0 2 0 4","ascent":"1563","descent":"-485","bbox":"-70 -1850.05 1749 430.878","underline-thickness":"102","underline-position":"-103","unicode-range":"U+0020-U+00FF"}}));
/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Trademark:
 * AUdimat Italic is a trademark of Jack Usine.
 * 
 * Description:
 * Copyright (c) 2006 Jack Usine / SMeltery. All rights reserved.
 * 
 * Designer:
 * Jack Usine
 * 
 * Vendor URL:
 * www.smeltery.net
 */
Cufon.registerFont((function(f){var b=_cufon_bridge_={p:[{"d":"596,-1397v111,-6,223,-1,281,47v64,53,101,142,81,258r-137,787v-41,218,-199,305,-471,305v-186,0,-285,-117,-252,-305r138,-787v36,-185,160,-293,360,-305xm797,-1092v17,-91,-34,-145,-117,-145v-72,0,-156,-8,-200,23v-43,31,-73,65,-83,122r-137,787v-17,91,33,145,117,145v72,0,156,9,199,-23v42,-31,73,-66,83,-122","w":997},{"d":"858,0r-162,0r-22,-225r-512,0r-99,225r-161,0r616,-1397r213,0xm657,-385r-47,-840r-32,0r-342,840r421,0xm561,-1810r94,288r-120,0r-142,-288r168,0","w":944,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"662,-150v-51,61,-102,141,-199,150v-233,21,-408,-61,-365,-305r80,-451v45,-172,147,-303,361,-303r415,0r-133,754v-7,77,19,130,86,143r-26,160v-92,-27,-170,-73,-219,-148xm489,-160v103,-2,159,-63,173,-145r104,-594r-256,0v-102,2,-155,61,-170,143r-80,451v-16,91,34,145,119,145r110,0xm770,-1221r-113,-180r-172,180r-145,0r281,-288r112,0r182,288r-145,0","w":1032},{"d":"766,-276v-41,164,-164,263,-352,272v-124,6,-233,-2,-300,-68v-51,-50,-88,-127,-65,-237v38,-185,181,-275,294,-389v70,-71,146,-142,173,-254r98,0v-37,187,-132,316,-241,428v-71,73,-141,119,-162,215v-21,95,31,145,117,145r112,0v83,-5,136,-47,162,-112r164,0xm702,-1202r-198,0r35,-197r198,0","w":895},{"d":"858,0r-162,0r-22,-225r-512,0r-99,225r-161,0r616,-1397r213,0xm657,-385r-47,-840r-32,0r-342,840r421,0xm542,-1632v-88,-44,-157,29,-182,90r-69,0v30,-82,84,-175,151,-222v120,-83,195,81,314,81v69,0,100,-61,125,-107r71,0v-28,85,-86,173,-152,222v-97,71,-183,-26,-258,-64","w":944,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"285,-1399v154,7,373,-46,342,152v-26,163,-23,364,-219,373v-130,6,-262,-7,-234,-154v29,-150,219,-157,361,-199v15,-45,-3,-84,-52,-84r-215,0xm100,-612r414,0r-14,88r-414,0xm131,-786r414,0r-15,88r-413,0xm518,-1137r-84,19v-70,19,-158,27,-174,90v-21,81,87,63,162,65v92,2,79,-101,96,-174","w":586},{"d":"989,258r-63,162v-127,-40,-240,-108,-330,-187v-73,-64,-138,-153,-190,-233v-224,-20,-354,-171,-310,-418r101,-563v62,-234,198,-412,491,-416v254,-3,390,158,344,416r-100,563v-46,186,-161,323,-324,398v94,126,214,230,381,278xm258,-418v-15,158,51,260,211,258v181,-2,277,-111,303,-258r100,-563v17,-159,-53,-256,-213,-256v-180,0,-275,109,-301,256"},{"d":"858,0r-162,0r-22,-225r-512,0r-99,225r-161,0r616,-1397r213,0xm657,-385r-47,-840r-32,0r-342,840r421,0xm893,-1810r-242,288r-123,0r197,-288r168,0","w":944,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"66,0r245,-1397r162,0r-246,1397r-161,0xm647,-1567r-180,0r33,-178r180,0xm270,-1567r-180,0r33,-178r180,0","w":477},{"d":"918,-274v-111,74,-273,129,-447,92r-65,182r-95,0r78,-211v-164,-76,-285,-238,-242,-489v41,-235,204,-401,403,-486v68,-28,138,-42,210,-43r63,-168r97,0r-64,174v83,15,153,48,211,99r-121,127v-39,-33,-88,-60,-149,-68r-267,725v117,29,239,-10,314,-63xm564,-1028v-150,77,-278,211,-261,431v8,107,68,180,146,224r251,-694v-47,5,-93,17,-136,39","w":1059},{"d":"649,-1059v66,4,61,91,51,158r189,-158r65,0r-213,1204v-33,186,-159,304,-358,304r-350,0r28,-160r351,0v160,-1,171,-152,194,-289v-174,-3,-362,21,-452,-74v-48,-50,-74,-129,-56,-231r80,-451v42,-217,200,-321,471,-303xm739,-756v17,-91,-36,-143,-118,-143v-72,0,-156,-8,-200,22v-43,30,-71,66,-81,121r-80,451v-17,91,33,145,117,145r256,0","w":1018},{"d":"750,0v-169,-6,-359,21,-484,-37v-119,-55,-208,-166,-174,-352v25,-142,113,-235,211,-309v-72,-71,-129,-165,-102,-310v40,-215,188,-338,397,-380v122,-24,262,-5,397,-9r-28,160r-308,0v-160,10,-272,82,-297,229v-26,156,72,230,218,230r192,0r-29,160v-122,5,-253,-10,-341,34v-92,46,-175,142,-148,286v18,95,105,138,215,138r307,0xm956,-1810r-241,288r-123,0r196,-288r168,0","w":928},{"d":"1124,-1395r-675,1395r-117,0r-185,-1395r168,0r129,1090r514,-1090r166,0","w":965,"k":{"\u00e7":61,"\u00ff":61,"\u00fd":61,"\u00c5":41,"\u00c3":41,"\u00c4":41,"\u00c2":41,"\u00c0":41,"\u00c1":41,"g":61,".":143,",":143,"\u00c6":164,"J":102,"A":41,"\u00f8":61,"\u00e6":61,"z":61,"y":61,"x":61,"w":61,"v":61,"u":61,"t":61,"s":61,"\u00b5":61,"r":61,"q":61,"p":61,"o":61,"n":61,"m":61,"e":61,"d":61,"c":61,"a":61,"_":143}},{"d":"1050,-1220v60,118,19,321,-41,414v-78,120,-199,196,-347,235r217,571r-185,0r-213,-561r-155,0r-99,561r-161,0r245,-1395r418,0v152,9,265,65,321,175xm354,-721r271,-2v180,-22,304,-137,290,-341v-8,-114,-97,-171,-215,-171r-256,0"},{"d":"223,-1307r21,-112r514,0r-21,112r-514,0","w":686},{"d":"756,-858r280,571r-145,90r-270,-551r-465,551r-113,-92r481,-569r232,0","w":1165},{"d":"543,-530r192,530r-174,0r-149,-426r-295,426r-174,0r376,-530r-190,-529r174,0r146,426r299,-426r174,0","w":862},{"d":"-4,270v-10,-23,-25,-40,-35,-63v82,-30,132,-97,129,-207r-96,0r33,-197r198,0v-22,108,-27,240,-74,322v-37,67,-90,117,-155,145","w":371,"k":{"\u00ff":102,"\u00fd":102,"\u00dd":102,"Y":102,"V":143,"T":102,"y":102,"w":102,"v":102}},{"d":"66,0r245,-1397r162,0r-246,1397r-161,0xm330,-1810r94,288r-121,0r-141,-288r168,0","w":477},{"d":"858,0r-162,0r-22,-225r-512,0r-99,225r-161,0r616,-1397r213,0xm657,-385r-47,-840r-32,0r-342,840r421,0","w":944,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"1370,-1397r-246,1397r-159,0r196,-1118r-378,499r-103,140r-258,-639r-197,1118r-159,0r245,-1397r174,0r252,592r459,-592r174,0","w":1374},{"d":"338,-2v-136,-36,-251,-121,-219,-303r133,-754r162,0r-133,754v-7,76,18,129,84,143xm662,-1507r-242,288r-123,0r197,-288r168,0","w":489},{"d":"353,-1012v106,-64,362,-72,462,4r59,-75r70,49r-70,86v30,48,44,109,29,192r-80,451v-46,171,-144,300,-358,305v-116,3,-216,-2,-283,-51r-57,74r-68,-52r66,-84v-28,-50,-39,-110,-25,-192r80,-451v26,-113,86,-202,175,-256xm709,-870v-35,-40,-125,-29,-199,-29v-93,0,-151,53,-168,143r-84,467xm291,-190v33,42,127,30,201,30v95,0,155,-58,170,-145r79,-451r0,-18","w":999},{"d":"342,-1274v99,-89,308,-173,480,-91v129,61,222,191,188,390v-32,191,-164,322,-326,389v-103,42,-230,46,-328,0v-130,-61,-223,-189,-192,-389v19,-125,97,-227,178,-299xm258,-975v-40,259,179,391,404,305v128,-49,228,-156,253,-305v26,-152,-43,-255,-145,-304v-131,-63,-299,2,-374,71v-63,57,-123,136,-138,233xm727,-1140v32,27,29,104,3,136v-19,24,-39,41,-66,52r65,172r-72,0r-55,-164r-117,0r-28,164r-60,0r68,-387v90,7,207,-19,262,27xm496,-1001v86,-6,207,31,194,-79v-18,-51,-115,-20,-176,-28","w":1018},{"d":"969,-791r-88,498r-162,0r59,-336r-674,0r29,-162r836,0","w":1008},{"d":"541,-147v-37,72,-105,147,-211,147v-135,0,-227,-75,-250,-186v-41,-200,86,-340,233,-400v115,-47,280,-16,428,-24r-53,305v-18,107,76,172,176,133v56,-22,102,-69,113,-133r80,-451v16,-96,-36,-143,-119,-143r-756,0r29,-160r756,0v185,0,283,115,250,303r-80,451v-29,135,-118,233,-235,281v-40,16,-80,24,-122,24v-133,1,-212,-50,-239,-147xm238,-305v-27,142,140,178,228,102v61,-52,67,-153,85,-246v-96,2,-198,-12,-252,41v-26,26,-53,60,-61,103","w":1313},{"d":"526,-530r471,-418r185,0r-463,418r315,417r-184,0xm55,-530r469,-418r185,0r-463,418r315,417r-184,0","w":1163},{"d":"43,-459r25,-143r843,-436r-34,196r-652,312r541,311r-35,199","w":877},{"d":"455,-113r463,-417r-316,-418r184,0r322,418r-469,417r-184,0xm-18,-113r462,-417r-315,-418r184,0r324,418r-471,417r-184,0","w":1163},{"d":"305,-1051v171,-223,465,-422,845,-323v226,59,379,230,402,490v28,315,-127,527,-300,680v-158,139,-427,260,-710,179v-269,-77,-451,-310,-395,-673v21,-138,84,-257,158,-353xm292,-481v57,249,304,400,606,322v217,-56,370,-202,460,-391v46,-96,74,-239,41,-366v-53,-202,-206,-344,-455,-344v-278,0,-463,161,-576,344v-70,113,-114,269,-76,435xm985,-526v29,31,45,58,72,90v-121,95,-258,130,-405,72v-116,-46,-185,-161,-154,-336v30,-167,138,-279,281,-334v85,-32,186,-36,268,-2v38,16,72,40,102,73r-105,91v-48,-58,-158,-80,-246,-44v-112,45,-196,152,-174,313v12,89,85,138,191,138v71,0,127,-25,170,-61","w":1630},{"d":"750,0v-169,-6,-359,21,-484,-37v-119,-55,-208,-166,-174,-352v25,-142,113,-235,211,-309v-72,-71,-129,-165,-102,-310v40,-215,188,-338,397,-380v122,-24,262,-5,397,-9r-28,160r-308,0v-160,10,-272,82,-297,229v-26,156,72,230,218,230r192,0r-29,160v-122,5,-253,-10,-341,34v-92,46,-175,142,-148,286v18,95,105,138,215,138r307,0xm801,-1524r-113,-180r-172,180r-145,0r280,-288r113,0r182,288r-145,0","w":928},{"d":"473,-1397r-100,563r512,0r100,-563r162,0r-246,1397r-162,0r119,-674r-512,0r-119,674r-161,0r245,-1397r162,0","w":1151},{"d":"965,-1059r-213,1204v-34,186,-160,304,-359,304r-350,0r29,-160r350,0v160,-1,171,-152,194,-289v-174,-3,-362,21,-452,-74v-48,-50,-73,-130,-55,-231r133,-754r161,0r-133,754v-17,90,34,145,117,145r256,0r160,-899r162,0","w":1028,"k":{".":102,",":102,"_":102}},{"d":"313,0r-159,0r575,-1237r-569,0r28,-160r721,0r-30,170","w":791},{"d":"426,-1507r94,288r-121,0r-141,-288r168,0","w":485},{"d":"350,-1266v92,-99,287,-165,472,-113v159,45,247,191,210,398r-100,563v-60,236,-197,414,-490,418v-255,3,-392,-160,-346,-418r101,-563v27,-114,82,-209,153,-285xm870,-981v17,-158,-52,-256,-211,-256v-180,0,-275,109,-301,256r-100,563v-15,158,51,260,211,258v181,-2,275,-111,301,-258xm606,-1632v-88,-44,-158,28,-182,90r-70,0v30,-81,84,-175,151,-222v119,-84,196,81,314,81v69,0,102,-59,125,-107r72,0v-29,84,-85,173,-152,222v-97,71,-183,-27,-258,-64"},{"d":"532,-602r-104,602r-162,0r105,-602r-244,-795r180,0r172,631r400,-631r178,0","w":877,"k":{"\u00e7":102,"\u00ff":102,"\u00fd":102,"\u00c5":61,"\u00c3":61,"\u00c4":61,"\u00c2":61,"\u00c0":61,"\u00c1":61,"g":102,".":102,",":102,"7":-41,"\u00c6":164,"J":102,"A":61,"\u00f8":102,"\u00e6":102,"z":102,"y":102,"x":102,"w":102,"v":102,"u":102,"t":102,"s":102,"\u00b5":102,"r":102,"q":102,"p":102,"o":102,"n":102,"m":102,"e":102,"d":102,"c":102,"a":102,"_":102}},{"d":"551,-1348v-101,2,-154,63,-170,144v-14,74,6,145,78,145r192,0r-28,160r-224,0r-184,1044v-34,176,-146,274,-326,301r29,-159v86,-3,122,-70,135,-142r185,-1044r-113,0r29,-160r157,0v-42,-48,-95,-111,-82,-190v28,-170,163,-248,349,-260r151,0r-27,161r-151,0","w":592},{"d":"197,-1151v11,-26,25,-52,39,-74r219,70r53,-240v32,-4,44,-4,76,0r-37,238r246,-68v6,23,10,47,12,72r-244,82r105,215v-21,17,-39,31,-64,43r-125,-205r-194,205v-26,-15,-37,-23,-56,-43r189,-215","w":780,"k":{"\u00c5":102,"\u00c3":102,"\u00c4":102,"\u00c2":102,"\u00c0":102,"\u00c1":102,"\u00c6":328,"J":287,"A":102}},{"d":"506,-1286v-83,-4,-138,8,-158,69r-110,0v49,-105,117,-193,288,-180v108,8,180,70,156,193v-14,70,-54,119,-107,170v33,40,64,87,50,160v-27,137,-123,205,-293,200v-111,-4,-157,-73,-158,-180r111,0v-14,74,60,72,133,72v77,0,111,-81,95,-156v-10,-46,-57,-53,-114,-51v3,-28,13,-59,17,-84v94,5,138,-47,153,-121v11,-53,-10,-89,-63,-92xm1323,-246r-20,109r-66,0r-23,137r-112,0r22,-137r-288,0r22,-121r256,-465r123,0r-272,477r180,0r22,-137r113,0r-23,137r66,0xm193,0r1081,-1397r123,0r-1082,1397r-122,0","w":1489},{"d":"129,-274v6,85,91,138,179,102v56,-23,103,-68,114,-133r192,-1092r160,0r-192,1092v-28,136,-119,231,-236,281v-113,48,-256,14,-312,-56v-38,-48,-70,-111,-65,-194r160,0","w":758},{"d":"672,-150v-52,60,-101,141,-199,150v-233,20,-407,-61,-364,-305r133,-754r161,0r-133,754v-17,90,34,145,117,145v73,0,157,9,200,-23v42,-31,73,-66,83,-122r133,-754r160,0r-134,754v-6,77,22,129,89,143r-27,160v-92,-27,-170,-73,-219,-148xm922,-1264r-181,0r33,-178r180,0xm545,-1264r-180,0r32,-178r181,0","w":1042},{"w":0},{"d":"477,-1399r-28,160r-162,0r28,-160r162,0xm49,-2v56,-337,155,-631,230,-948r75,0r-69,772r-31,176r-205,0","w":487},{"d":"-4,270v-10,-23,-25,-40,-35,-63v82,-30,132,-97,129,-207r-96,0r33,-197r198,0v-22,108,-27,240,-74,322v-37,67,-90,117,-155,145xm360,-963r-34,199r-199,0r35,-199r198,0","w":360},{"d":"352,-1012v121,-72,401,-68,493,27v48,50,74,128,56,229r-80,451v-46,171,-144,295,-358,305v-234,11,-408,-61,-365,-305r80,-451v26,-112,85,-203,174,-256xm739,-756v9,-87,-26,-143,-118,-143v-148,0,-258,15,-281,143r-80,451v-9,88,28,143,117,145v104,2,198,0,244,-62v17,-23,32,-48,38,-83xm766,-1221r-113,-180r-172,180r-145,0r280,-288r113,0r182,288r-145,0","w":997},{"d":"1147,-1397r-246,1397r-172,0r-315,-1067r-187,1067r-161,0r245,-1397r172,0r316,1053r186,-1053r162,0xm648,-1632v-88,-44,-157,28,-181,90r-70,0v30,-81,84,-175,151,-222v119,-84,196,81,314,81v69,0,102,-59,125,-107r72,0v-29,84,-84,173,-151,222v-97,71,-185,-27,-260,-64","w":1151},{"d":"965,-1059r-213,1204v-34,186,-160,304,-359,304r-350,0r29,-160r350,0v160,-1,171,-152,194,-289v-174,-3,-362,21,-452,-74v-48,-50,-73,-130,-55,-231r133,-754r161,0r-133,754v-17,90,34,145,117,145r256,0r160,-899r162,0xm936,-1507r-242,288r-123,0r197,-288r168,0","w":1028,"k":{".":102,",":102,"_":102}},{"d":"846,-985v95,86,60,292,-9,382v-64,83,-148,154,-296,154r-256,0v-24,112,-66,289,94,289r418,0r-27,160r-418,0v-173,-10,-289,-107,-254,-305r80,-451v45,-172,147,-297,361,-303v133,-4,238,12,307,74xm569,-610v107,-8,182,-74,174,-194v-7,-100,-120,-101,-233,-95v-94,5,-153,53,-170,143r-27,146r256,0xm766,-1221r-113,-180r-172,180r-145,0r280,-288r113,0r182,288r-145,0","w":958},{"d":"350,-1266v92,-99,287,-165,472,-113v159,45,247,191,210,398r-100,563v-60,236,-197,414,-490,418v-255,3,-392,-160,-346,-418r101,-563v27,-114,82,-209,153,-285xm870,-981v17,-158,-52,-256,-211,-256v-180,0,-275,109,-301,256r-100,563v-15,158,51,260,211,258v181,-2,275,-111,301,-258xm801,-1524r-113,-180r-172,180r-145,0r280,-288r113,0r182,288r-145,0"},{"d":"672,-1397r-475,899r327,0r41,-225r162,0r-41,225r111,0r-27,160r-111,0r-59,338r-162,0r60,-338r-475,0r32,-190r437,-869r180,0","w":858},{"d":"352,-1012v121,-72,401,-68,493,27v48,50,74,128,56,229r-80,451v-46,171,-144,295,-358,305v-234,11,-408,-61,-365,-305r80,-451v26,-112,85,-203,174,-256xm739,-756v9,-87,-26,-143,-118,-143v-148,0,-258,15,-281,143r-80,451v-9,88,28,143,117,145v104,2,198,0,244,-62v17,-23,32,-48,38,-83xm907,-1264r-180,0r33,-178r180,0xm530,-1264r-180,0r33,-178r180,0","w":997},{"d":"1126,-1395r-174,977v-61,235,-196,414,-489,418v-255,3,-392,-159,-346,-418r174,-977r162,0r-174,977v-17,158,50,258,210,258v181,0,276,-111,302,-258r174,-977r161,0xm963,-1567r-181,0r33,-178r180,0xm586,-1567r-180,0r32,-178r180,0","w":1110},{"d":"352,-1012v121,-72,401,-68,493,27v48,50,74,128,56,229r-80,451v-46,171,-144,295,-358,305v-234,11,-408,-61,-365,-305r80,-451v26,-112,85,-203,174,-256xm739,-756v9,-87,-26,-143,-118,-143v-148,0,-258,15,-281,143r-80,451v-9,88,28,143,117,145v104,2,198,0,244,-62v17,-23,32,-48,38,-83xm590,-1507r94,288r-121,0r-141,-288r168,0","w":997},{"d":"209,-1221v31,-95,96,-169,219,-176v141,-8,253,37,225,191v-24,133,-114,222,-197,299v-50,46,-106,87,-167,125r291,0r-19,108r-426,0r21,-117v145,-92,275,-188,360,-337v31,-54,51,-160,-37,-160r-71,0v-54,-1,-75,33,-89,71","w":621},{"d":"672,-150v-52,60,-101,141,-199,150v-233,20,-407,-61,-364,-305r133,-754r161,0r-133,754v-17,90,34,145,117,145v73,0,157,9,200,-23v42,-31,73,-66,83,-122r133,-754r160,0r-134,754v-6,77,22,129,89,143r-27,160v-92,-27,-170,-73,-219,-148xm604,-1507r94,288r-120,0r-142,-288r168,0","w":1042},{"d":"481,-1501v103,29,188,72,262,133r146,-145r57,59r-143,145v78,102,136,227,106,398r-106,606v-44,214,-201,316,-471,305v-183,-7,-284,-119,-254,-305v21,-128,31,-277,94,-367v65,-92,164,-162,305,-162r256,0v14,-67,31,-139,7,-214v-15,-46,-35,-92,-64,-136r-135,135r-60,-57r133,-135v-62,-49,-133,-88,-208,-117xm707,-674v-149,10,-342,-39,-403,72v-42,77,-45,200,-64,297v-18,89,24,145,118,145v111,0,215,3,258,-73v11,-20,20,-43,25,-72","w":989},{"d":"670,-1059v171,10,287,106,252,303r-134,756r-161,0r133,-756v16,-96,-36,-143,-119,-143r-256,0r-158,899r-161,0r266,-1513r162,0r-80,454r256,0","w":1028},{"d":"-96,338r26,-160v124,9,189,-47,207,-147r60,-336v28,-107,84,-190,215,-195r10,-59v-114,0,-166,-80,-146,-197r58,-336v20,-109,-43,-151,-154,-145r29,-160v191,-5,322,93,285,305r-58,336v-8,70,44,100,90,126v29,16,65,28,105,38r-21,123v-107,21,-235,56,-254,164r-59,338v-46,175,-160,314,-393,305","w":655},{"d":"209,-1397r385,0r-307,1735r-383,0r26,-160r226,0r250,-1415r-226,0","w":618},{"d":"350,-1266v92,-99,287,-165,472,-113v159,45,247,191,210,398r-100,563v-60,236,-197,414,-490,418v-255,3,-392,-160,-346,-418r101,-563v27,-114,82,-209,153,-285xm870,-981v17,-158,-52,-256,-211,-256v-180,0,-275,109,-301,256r-100,563v-15,158,51,260,211,258v181,-2,275,-111,301,-258xm956,-1810r-241,288r-123,0r196,-288r168,0"},{"d":"846,-985v95,86,60,292,-9,382v-64,83,-148,154,-296,154r-256,0v-24,112,-66,289,94,289r418,0r-27,160r-418,0v-173,-10,-289,-107,-254,-305r80,-451v45,-172,147,-297,361,-303v133,-4,238,12,307,74xm569,-610v107,-8,182,-74,174,-194v-7,-100,-120,-101,-233,-95v-94,5,-153,53,-170,143r-27,146r256,0xm907,-1264r-180,0r33,-178r180,0xm530,-1264r-180,0r33,-178r180,0","w":958},{"d":"975,-834r-27,160r-835,0r26,-160r836,0xm61,-385r836,0r-29,160r-835,0","w":1008},{"d":"965,-1059r-213,1204v-34,186,-160,304,-359,304r-350,0r29,-160r350,0v160,-1,171,-152,194,-289v-174,-3,-362,21,-452,-74v-48,-50,-73,-130,-55,-231r133,-754r161,0r-133,754v-17,90,34,145,117,145r256,0r160,-899r162,0xm922,-1264r-181,0r33,-178r180,0xm545,-1264r-180,0r32,-178r181,0","w":1028,"k":{".":102,",":102,"_":102}},{"d":"393,-1399v134,-5,263,7,234,152v-32,162,-20,365,-217,373v-134,5,-265,-7,-236,-154v32,-163,22,-364,219,-371xm541,-1247v3,-40,-14,-64,-56,-64v-79,0,-170,-17,-184,64r-39,219v-4,40,12,65,53,65v81,0,173,16,187,-65xm100,-612r414,0r-14,88r-414,0xm131,-786r414,0r-15,88r-413,0","w":586},{"d":"449,-899v17,-82,39,-152,110,-160v230,-26,407,56,365,299r-133,760r-162,0r131,-754v17,-92,-35,-145,-119,-145v-72,0,-155,-8,-199,23v-44,31,-74,65,-84,122r-131,754r-161,0r186,-1059r67,0xm588,-1330v-88,-44,-156,29,-180,91r-70,0v30,-81,84,-174,151,-221v119,-84,195,80,314,80v69,0,100,-61,125,-107r71,0v-28,85,-85,173,-151,222v-97,71,-185,-27,-260,-65","w":1030},{"d":"854,-778r-29,160r-280,0r-49,280r-162,0r49,-280r-281,0r29,-160r281,0r49,-281r162,0r-50,281r281,0xm20,-160r723,0r-26,160r-723,0","w":895},{"d":"352,-834v151,6,340,-21,426,48v65,52,102,140,84,256v-23,144,-38,311,-118,401v-84,94,-208,129,-392,129v-178,0,-277,-99,-258,-274r162,0v-17,121,112,116,233,114v103,-2,159,-63,173,-145r38,-225v9,-88,-28,-144,-118,-144r-418,0r127,-723r655,0r-28,160r-494,0","w":948},{"d":"750,0v-169,-6,-359,21,-484,-37v-119,-55,-208,-166,-174,-352v25,-142,113,-235,211,-309v-72,-71,-129,-165,-102,-310v40,-215,188,-338,397,-380v122,-24,262,-5,397,-9r-28,160r-308,0v-160,10,-272,82,-297,229v-26,156,72,230,218,230r192,0r-29,160v-122,5,-253,-10,-341,34v-92,46,-175,142,-148,286v18,95,105,138,215,138r307,0xm942,-1567r-180,0r33,-178r180,0xm565,-1567r-180,0r33,-178r180,0","w":928},{"d":"338,-2v-136,-36,-251,-121,-219,-303r133,-754r162,0r-133,754v-7,76,18,129,84,143xm330,-1507r94,288r-121,0r-141,-288r168,0","w":489},{"d":"662,-150v-51,61,-102,141,-199,150v-233,21,-408,-61,-365,-305r80,-451v45,-172,147,-303,361,-303r415,0r-133,754v-7,77,19,130,86,143r-26,160v-92,-27,-170,-73,-219,-148xm489,-160v103,-2,159,-63,173,-145r104,-594r-256,0v-102,2,-155,61,-170,143r-80,451v-16,91,34,145,119,145r110,0xm495,-1230v-44,-49,-39,-151,-4,-206v47,-74,153,-149,264,-101v59,25,104,86,87,175v-21,107,-101,188,-224,188v-54,0,-96,-26,-123,-56xm751,-1402v-27,-106,-200,-54,-200,40v-24,93,97,129,159,72v26,-24,53,-63,41,-112","w":1032},{"d":"1126,-1395r-174,977v-61,235,-196,414,-489,418v-255,3,-392,-159,-346,-418r174,-977r162,0r-174,977v-17,158,50,258,210,258v181,0,276,-111,302,-258r174,-977r161,0xm821,-1524r-112,-180r-172,180r-146,0r281,-288r112,0r183,288r-146,0","w":1110},{"d":"532,-602r-104,602r-162,0r105,-602r-244,-795r180,0r172,631r400,-631r178,0xm860,-1810r-242,288r-122,0r196,-288r168,0","w":877,"k":{"\u00e7":102,"\u00ff":102,"\u00fd":102,"\u00c5":61,"\u00c3":61,"\u00c4":61,"\u00c2":61,"\u00c0":61,"\u00c1":61,"g":102,".":102,",":102,"7":-41,"\u00c6":164,"J":102,"A":61,"\u00f8":102,"\u00e6":102,"z":102,"y":102,"x":102,"w":102,"v":102,"u":102,"t":102,"s":102,"\u00b5":102,"r":102,"q":102,"p":102,"o":102,"n":102,"m":102,"e":102,"d":102,"c":102,"a":102,"_":102}},{"d":"469,-160v169,-2,258,-92,295,-225r162,0v-60,223,-202,382,-484,385v-255,3,-392,-160,-346,-418r101,-563v62,-234,198,-411,491,-416v246,-4,376,140,348,385r-162,0v13,-147,-65,-227,-215,-225v-180,2,-275,109,-301,256r-100,563v-15,158,51,259,211,258","w":1038},{"d":"729,-1397v235,12,392,147,344,416r-100,563v-60,236,-197,418,-490,418r-417,0r245,-1397r418,0xm911,-981v29,-161,-62,-256,-211,-256r-256,0r-190,1077v145,-6,316,21,412,-40v75,-47,128,-121,145,-218","w":1110},{"d":"-35,-20r35,-199r651,-311r-540,-312r34,-196r689,436r-25,141","w":877},{"d":"1147,-1397r-246,1397r-172,0r-315,-1067r-187,1067r-161,0r245,-1397r172,0r316,1053r186,-1053r162,0","w":1151},{"d":"379,-160v134,3,255,-2,274,-114r162,0v-42,158,-144,267,-340,274r-20,117v71,10,125,66,106,159v-29,139,-179,173,-360,166r14,-90v105,10,182,-25,197,-110v12,-65,-30,-106,-93,-109r23,-133v-163,-13,-279,-107,-244,-305r80,-451v45,-172,147,-295,361,-303v221,-8,405,41,368,273r-166,0v3,-76,-37,-113,-120,-113v-148,0,-258,16,-281,143r-80,451v-10,88,30,143,119,145","w":950},{"d":"936,-610r-29,161r-835,0r28,-161r836,0xm379,-274r162,0r-29,161r-162,0xm631,-786r-162,0r29,-162r161,0","w":1008},{"d":"352,-1012v121,-72,401,-68,493,27v48,50,74,128,56,229r-80,451v-46,171,-144,295,-358,305v-234,11,-408,-61,-365,-305r80,-451v26,-112,85,-203,174,-256xm739,-756v9,-87,-26,-143,-118,-143v-148,0,-258,15,-281,143r-80,451v-9,88,28,143,117,145v104,2,198,0,244,-62v17,-23,32,-48,38,-83xm570,-1330v-89,-44,-156,29,-181,91r-70,0v30,-82,84,-174,151,-221v119,-83,196,80,314,80v69,0,102,-59,125,-107r72,0v-29,84,-84,173,-151,222v-97,71,-185,-27,-260,-65","w":997},{"d":"716,-842v-43,50,-72,129,-14,172v132,97,374,117,336,365v-29,187,-159,288,-358,305r-193,0r27,-160v93,-5,201,13,269,-18v57,-26,118,-101,91,-189v-90,-158,-415,-107,-366,-389v29,-166,179,-239,272,-346v53,-62,80,-184,3,-228v-38,-22,-101,-18,-160,-18v-103,0,-157,62,-172,144r-238,1349v-34,176,-144,274,-324,301r29,-159v85,-4,120,-70,133,-142r238,-1349v42,-211,191,-319,452,-305v172,9,291,108,252,305v-34,168,-183,252,-277,362","w":1133},{"d":"397,-563v-92,0,-140,45,-161,114r-164,-2v51,-170,216,-318,448,-259v111,28,150,129,228,190v21,17,48,22,86,22v90,-1,140,-49,163,-116r160,2v-47,173,-215,319,-445,260v-76,-20,-121,-71,-165,-123r2,0v-38,-47,-67,-88,-152,-88","w":1229},{"d":"29,-199r196,0r-35,197r-196,0","w":369,"k":{"\u00ff":102,"\u00fd":102,"\u00dd":102,"Y":102,"V":143,"T":102,"y":102,"w":102,"v":102}},{"d":"66,0r245,-1397r162,0r-246,1397r-161,0xm506,-1524r-113,-180r-172,180r-145,0r280,-288r113,0r182,288r-145,0","w":477},{"d":"970,-1285v73,81,92,264,30,369v-43,73,-107,133,-169,179v92,61,173,171,140,342v-34,177,-153,302,-305,364v-52,21,-105,31,-160,31r-440,0r245,-1397r408,0v112,0,196,51,251,112xm532,-160v117,-4,191,-70,242,-144v46,-67,50,-195,-5,-256v-34,-37,-85,-69,-153,-69r-278,0r-84,469r278,0xm444,-1237r-77,446v115,-6,244,19,333,-17v104,-42,200,-141,170,-292v-16,-81,-82,-137,-180,-137r-246,0","w":1090},{"d":"643,-373v80,45,126,147,98,291v-37,187,-160,307,-360,307r-305,0r28,-162r306,0v93,-8,153,-55,170,-145v26,-138,-95,-143,-232,-143v-172,0,-287,-108,-252,-305v25,-139,116,-221,221,-281v-80,-53,-148,-139,-122,-281v34,-185,159,-305,360,-305r305,0r-29,160r-305,0v-94,8,-153,55,-170,145v-26,138,94,144,232,144v173,0,288,109,252,307v-23,127,-104,211,-197,268xm657,-530v14,-77,44,-183,-19,-234v-37,-30,-125,-22,-192,-22v-92,0,-146,55,-167,145v-24,106,-44,256,98,256v104,0,198,2,243,-61v16,-22,31,-49,37,-84","w":915},{"d":"838,-1194v125,0,223,51,297,113r354,-299r53,63r-354,301v84,124,79,350,-2,483v-32,52,-66,104,-111,152r248,301r-74,66r-250,-303v-94,62,-199,116,-335,116v-127,0,-227,-51,-299,-116r-355,303r-55,-66r356,-301v-47,-85,-80,-187,-57,-317v22,-127,93,-233,170,-318r-250,-301r76,-63r250,299v93,-60,202,-113,338,-113xm416,-698v-41,265,182,396,411,310v131,-49,232,-159,258,-310v27,-155,-45,-258,-149,-309v-135,-65,-303,3,-381,73v-64,58,-124,136,-139,236","w":1438},{"d":"662,-150v-51,61,-102,141,-199,150v-233,21,-408,-61,-365,-305r80,-451v45,-172,147,-303,361,-303r415,0r-133,754v-7,77,19,130,86,143r-26,160v-92,-27,-170,-73,-219,-148xm489,-160v103,-2,159,-63,173,-145r104,-594r-256,0v-102,2,-155,61,-170,143r-80,451v-16,91,34,145,119,145r110,0","w":1032},{"d":"350,-1266v92,-99,287,-165,472,-113v159,45,247,191,210,398r-100,563v-60,236,-197,414,-490,418v-255,3,-392,-160,-346,-418r101,-563v27,-114,82,-209,153,-285xm870,-981v17,-158,-52,-256,-211,-256v-180,0,-275,109,-301,256r-100,563v-15,158,51,260,211,258v181,-2,275,-111,301,-258xm942,-1567r-180,0r33,-178r180,0xm565,-1567r-180,0r33,-178r180,0"},{"d":"750,0v-169,-6,-359,21,-484,-37v-119,-55,-208,-166,-174,-352v25,-142,113,-235,211,-309v-72,-71,-129,-165,-102,-310v40,-215,188,-338,397,-380v122,-24,262,-5,397,-9r-28,160r-308,0v-160,10,-272,82,-297,229v-26,156,72,230,218,230r192,0r-29,160v-122,5,-253,-10,-341,34v-92,46,-175,142,-148,286v18,95,105,138,215,138r307,0xm625,-1810r94,288r-121,0r-141,-288r168,0","w":928},{"d":"449,-899v17,-82,39,-152,110,-160v230,-26,407,56,365,299r-133,760r-162,0r131,-754v17,-92,-35,-145,-119,-145v-72,0,-155,-8,-199,23v-44,31,-74,65,-84,122r-131,754r-161,0r186,-1059r67,0","w":1030},{"d":"662,-150v-51,61,-102,141,-199,150v-233,21,-408,-61,-365,-305r80,-451v45,-172,147,-303,361,-303r415,0r-133,754v-7,77,19,130,86,143r-26,160v-92,-27,-170,-73,-219,-148xm489,-160v103,-2,159,-63,173,-145r104,-594r-256,0v-102,2,-155,61,-170,143r-80,451v-16,91,34,145,119,145r110,0xm594,-1507r94,288r-121,0r-141,-288r168,0","w":1032},{"d":"1126,-1395r-174,977v-61,235,-196,414,-489,418v-255,3,-392,-159,-346,-418r174,-977r162,0r-174,977v-17,158,50,258,210,258v181,0,276,-111,302,-258r174,-977r161,0xm977,-1810r-242,288r-123,0r197,-288r168,0","w":1110},{"d":"846,-985v95,86,60,292,-9,382v-64,83,-148,154,-296,154r-256,0v-24,112,-66,289,94,289r418,0r-27,160r-418,0v-173,-10,-289,-107,-254,-305r80,-451v45,-172,147,-297,361,-303v133,-4,238,12,307,74xm569,-610v107,-8,182,-74,174,-194v-7,-100,-120,-101,-233,-95v-94,5,-153,53,-170,143r-27,146r256,0xm922,-1507r-242,288r-123,0r197,-288r168,0","w":958},{"d":"352,-1012v121,-72,401,-68,493,27v48,50,74,128,56,229r-80,451v-46,171,-144,295,-358,305v-234,11,-408,-61,-365,-305r80,-451v26,-112,85,-203,174,-256xm739,-756v9,-87,-26,-143,-118,-143v-148,0,-258,15,-281,143r-80,451v-9,88,28,143,117,145v104,2,198,0,244,-62v17,-23,32,-48,38,-83xm922,-1507r-242,288r-123,0r197,-288r168,0","w":997},{"d":"571,-1507r-241,288r-123,0r196,-288r168,0","w":485},{"d":"195,-846r2,-315r43,-236r139,0r-43,236r-109,315r-32,0","w":311,"k":{"\u00c5":102,"\u00c3":102,"\u00c4":102,"\u00c2":102,"\u00c0":102,"\u00c1":102,"\u00c6":328,"J":287,"A":102}},{"d":"662,-150v-51,61,-102,141,-199,150v-233,21,-408,-61,-365,-305r80,-451v45,-172,147,-303,361,-303r415,0r-133,754v-7,77,19,130,86,143r-26,160v-92,-27,-170,-73,-219,-148xm489,-160v103,-2,159,-63,173,-145r104,-594r-256,0v-102,2,-155,61,-170,143r-80,451v-16,91,34,145,119,145r110,0xm911,-1264r-180,0r33,-178r180,0xm535,-1264r-181,0r33,-178r180,0","w":1032},{"d":"858,0r-162,0r-22,-225r-512,0r-99,225r-161,0r616,-1397r213,0xm657,-385r-47,-840r-32,0r-342,840r421,0xm879,-1567r-181,0r33,-178r180,0xm502,-1567r-180,0r32,-178r181,0","w":944,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"655,-563v-154,-5,-341,21,-426,-51v-61,-52,-104,-142,-84,-252v23,-128,30,-278,95,-368v66,-92,165,-156,307,-163v150,-8,277,12,329,107v28,51,47,124,33,198r-137,787v-40,168,-153,305,-360,305r-373,0r27,-160r372,0v104,0,157,-60,172,-145xm346,-1092v-14,92,-41,175,-41,275v0,64,48,95,123,94r256,0r64,-369v13,-89,-25,-147,-119,-145v-81,2,-163,-7,-214,31v-34,25,-61,60,-69,114","w":948},{"d":"1036,-1235r-846,1075r656,0r-27,160r-835,0r26,-158r846,-1077r-655,0r28,-160r836,0","w":987},{"d":"662,-150v-51,61,-102,141,-199,150v-233,21,-408,-61,-365,-305r80,-451v45,-172,147,-303,361,-303r415,0r-133,754v-7,77,19,130,86,143r-26,160v-92,-27,-170,-73,-219,-148xm489,-160v103,-2,159,-63,173,-145r104,-594r-256,0v-102,2,-155,61,-170,143r-80,451v-16,91,34,145,119,145r110,0xm574,-1330v-88,-44,-156,30,-181,91r-69,0v30,-82,83,-174,150,-221v119,-83,196,80,314,80v69,0,102,-59,125,-107r72,0v-29,84,-84,173,-151,222v-97,71,-185,-27,-260,-65","w":1032},{"d":"446,338v-203,12,-319,-103,-284,-305r59,-338v14,-114,-102,-143,-196,-164r20,-123v98,-24,187,-55,239,-124v8,-12,14,-25,17,-40r57,-336v41,-191,171,-305,396,-305r-29,160v-119,-5,-190,43,-207,145r-57,336v-29,107,-83,192,-215,197r-10,59v113,0,166,78,145,195r-59,336v-20,103,37,160,153,147","w":655},{"d":"133,-631r266,0r-231,-766r176,0r174,633r397,-633r179,0r-504,766r266,0r-16,94r-281,0r-31,175r281,0r-16,94r-281,0r-49,270r-162,0r49,-270r-280,0r16,-94r281,0r30,-175r-280,0","w":954},{"d":"66,0r245,-1397r162,0r-246,1397r-161,0","w":477},{"d":"672,-150v-52,60,-101,141,-199,150v-233,20,-407,-61,-364,-305r133,-754r161,0r-133,754v-17,90,34,145,117,145v73,0,157,9,200,-23v42,-31,73,-66,83,-122r133,-754r160,0r-134,754v-6,77,22,129,89,143r-27,160v-92,-27,-170,-73,-219,-148xm936,-1507r-242,288r-123,0r197,-288r168,0","w":1042},{"d":"1430,-1395r-476,1395r-182,0r-76,-758r-344,758r-182,0r18,-1395r160,0r-31,1153r336,-704r158,0r90,704r369,-1153r160,0","w":1311,"k":{"\u00c6":102}},{"d":"858,0r-162,0r-22,-225r-512,0r-99,225r-161,0r616,-1397r213,0xm657,-385r-47,-840r-32,0r-342,840r421,0xm462,-1532v-45,-49,-39,-151,-4,-206v47,-74,152,-150,264,-102v59,25,105,86,87,175v-21,106,-101,182,-223,188v-55,3,-96,-25,-124,-55xm718,-1704v-27,-106,-199,-54,-200,39v-24,93,97,128,159,71v26,-24,53,-61,41,-110","w":944,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"920,-1397r-29,160r-449,0r-90,514r449,0r-29,160r-448,0r-99,563r-159,0r245,-1397r609,0","w":842,"k":{"\u00c5":41,"\u00c3":41,"\u00c4":41,"\u00c2":41,"\u00c0":41,"\u00c1":41,".":205,",":205,"\u00c6":123,"J":123,"A":41,"_":205}},{"d":"473,-1397r-219,1237r473,0r-27,160r-634,0r245,-1397r162,0","w":786,"k":{"\u00dd":82,"\u00b0":287,"*":287,"'":287,"\"":287,"Y":82,"V":123,"T":82}},{"d":"539,-899v-92,8,-152,53,-168,143r-80,451v-7,77,19,130,86,143r-27,160v-136,-36,-253,-120,-221,-303r133,-754r66,0r133,158v11,-54,28,-97,57,-133v13,-16,30,-25,49,-25r193,0r-29,160r-192,0","w":700},{"d":"469,-160v169,-2,258,-92,295,-225r162,0v-53,206,-183,351,-416,381r-21,121v72,10,126,67,107,159v-28,139,-180,173,-360,166r14,-90v106,10,181,-26,196,-110v11,-64,-29,-106,-92,-109r23,-137v-208,-25,-323,-177,-281,-414r101,-563v62,-234,198,-411,491,-416v246,-4,376,140,348,385r-162,0v13,-147,-65,-227,-215,-225v-180,2,-275,109,-301,256r-100,563v-15,158,51,259,211,258","w":1038},{"d":"338,-2v-136,-36,-251,-121,-219,-303r133,-754r162,0r-133,754v-7,76,18,129,84,143xm465,-1348r-162,0r27,-161r162,0","w":489},{"d":"1174,-617v84,-76,263,-146,410,-77v111,52,193,162,163,332v-28,163,-141,277,-281,334v-88,36,-197,39,-281,0v-111,-52,-189,-162,-161,-334v18,-107,81,-193,150,-255xm326,-1291v84,-76,263,-146,410,-77v111,52,191,162,161,332v-28,163,-140,277,-279,334v-88,36,-197,39,-280,0v-110,-52,-190,-162,-162,-334v17,-107,81,-193,150,-255xm313,-1036v-29,175,122,263,275,206v88,-33,155,-106,174,-206v31,-163,-122,-263,-276,-204v-86,33,-156,104,-173,204xm1161,-362v-29,174,120,263,272,206v88,-33,156,-106,175,-206v30,-162,-120,-264,-274,-204v-86,33,-156,104,-173,204xm348,0r1082,-1397r122,0r-1081,1397r-123,0","w":1862},{"d":"729,-1395v235,12,393,148,344,416v-46,254,-218,396,-491,418r-256,0r-99,561r-161,0r245,-1395r418,0xm610,-721v192,-15,320,-133,305,-343v-8,-114,-97,-171,-215,-171r-256,0r-90,514r256,0","w":1049,"k":{"\u00c5":41,"\u00c3":41,"\u00c4":41,"\u00c2":41,"\u00c0":41,"\u00c1":41,".":205,",":205,"\u00c6":123,"J":123,"A":41,"_":205}},{"d":"412,-899r-105,594v-11,89,31,144,121,145r78,0r-27,160v-218,12,-372,-76,-332,-305r105,-594r-111,0r4,-27r314,-358r20,0r-39,225r226,0r-29,160r-225,0","w":647},{"d":"416,-1055r-211,1200v-34,176,-144,274,-324,301r29,-159v86,-3,122,-70,135,-142r211,-1200r160,0xm496,-1509r-27,161r-160,0r27,-161r160,0","w":481},{"d":"1110,-104r-16,104r-1172,0r17,-104r1171,0","w":1200,"k":{"\u00ff":102,"\u00fd":102,"\u00dd":102,"Y":102,"V":143,"T":102,"y":102,"w":102,"v":102}},{"d":"1126,-1395r-174,977v-61,235,-196,414,-489,418v-255,3,-392,-159,-346,-418r174,-977r162,0r-174,977v-17,158,50,258,210,258v181,0,276,-111,302,-258r174,-977r161,0xm645,-1810r94,288r-121,0r-141,-288r168,0","w":1110},{"d":"672,-150v-52,60,-101,141,-199,150v-233,20,-407,-61,-364,-305r133,-754r161,0r-133,754v-17,90,34,145,117,145v73,0,157,9,200,-23v42,-31,73,-66,83,-122r133,-754r160,0r-134,754v-6,77,22,129,89,143r-27,160v-92,-27,-170,-73,-219,-148","w":1042},{"d":"170,117v72,10,125,66,106,159v-29,139,-180,173,-360,166r14,-90v105,10,182,-25,197,-110v12,-64,-30,-106,-92,-109r35,-203r133,0","w":504},{"d":"504,-1237v-93,0,-140,48,-162,117r-162,-2v40,-157,158,-264,352,-275v228,-13,409,59,363,305v-48,259,-212,447,-355,621v-89,108,-191,210,-302,311r493,0r-26,160r-678,0r26,-160v209,-202,389,-393,547,-634v58,-89,112,-188,133,-298v18,-96,-29,-145,-115,-145r-114,0","w":883},{"d":"612,-180r-196,-238r-281,240r-90,-113r281,-239r-197,-238r129,-113r199,240r280,-240r92,113r-282,238r198,239","w":872},{"d":"1094,-1059r176,0r-29,160r-197,0r-124,401r137,0r-27,160r-160,0r-104,338r-160,0r103,-338r-287,0r-105,338r-159,0r102,-338r-176,0r27,-160r196,0r125,-401r-139,0r29,-160r161,0r105,-338r160,0r-103,338r287,0r104,-338r160,0xm883,-899r-287,0r-127,401r287,0","w":1292},{"d":"608,-834v182,0,282,119,252,304v-21,128,-31,277,-94,367v-65,92,-163,163,-303,163v-93,0,-192,4,-250,-30v-84,-49,-138,-144,-115,-275r138,-787v41,-167,153,-305,360,-305r373,0r-29,160r-373,0v-103,0,-155,61,-170,145r-45,258r256,0xm659,-305v13,-92,42,-176,42,-275v0,-64,-46,-95,-119,-94r-256,0r-66,369v-16,90,23,145,117,145v111,0,214,3,257,-73v11,-20,20,-43,25,-72","w":946},{"d":"90,-160r348,0v94,-8,159,-54,172,-145v15,-105,-99,-117,-182,-144v-158,-52,-338,-101,-299,-327v31,-178,163,-283,358,-283r349,0r-29,160r-348,0v-92,8,-158,52,-170,143v-13,105,100,118,182,146v156,52,334,102,297,327v-29,180,-162,283,-356,283r-349,0","w":897},{"d":"674,-700r213,700r-176,0r-183,-592r-389,592r-176,0r459,-700r-213,-697r176,0r182,592r389,-592r179,0","w":1036},{"d":"649,-1059v66,4,61,91,51,158r189,-158r65,0r-266,1508r-162,0r80,-449v-174,-3,-362,21,-452,-74v-48,-50,-74,-129,-56,-231r80,-451v42,-217,200,-321,471,-303xm739,-756v17,-91,-36,-143,-118,-143v-72,0,-156,-8,-200,22v-43,30,-71,66,-81,121r-80,451v-17,91,33,145,117,145r256,0","w":1018},{"d":"104,-629r199,0r-35,197r-198,0","w":371},{"d":"1552,-1059r-505,1059r-177,0r-96,-752r-356,752r-176,0r-133,-1059r167,0r82,866r379,-776r154,0r104,776r389,-866r168,0","w":1473,"k":{".":102,",":102,"_":102}},{"d":"911,0v-120,-10,-199,-64,-252,-152v-56,59,-101,143,-198,152v-233,22,-406,-62,-363,-305r80,-451v45,-171,143,-303,357,-303r673,0v171,10,295,108,252,303v-38,173,-145,307,-360,307r-256,0v-11,87,-58,209,14,266v18,14,44,23,80,23r416,0r-27,160r-416,0xm506,-899v-101,2,-153,61,-168,143r-80,451v-17,91,33,145,117,145v72,0,156,9,199,-23v42,-31,73,-66,83,-122r105,-594r-256,0xm1128,-610v107,-8,183,-74,174,-194v-5,-64,-56,-95,-122,-95r-256,0r-52,289r256,0","w":1516},{"d":"376,-1390v160,-40,312,18,277,186v-10,50,-44,107,-108,170v33,40,66,87,51,160v-28,137,-124,206,-295,200v-112,-4,-155,-74,-158,-180r113,0v-14,75,60,73,133,72v76,-1,108,-82,93,-156v-9,-46,-55,-53,-111,-51v3,-28,12,-59,16,-84v93,5,139,-47,152,-121v9,-52,-10,-89,-62,-92v-83,-4,-138,8,-158,69r-112,0v36,-77,83,-152,169,-173","w":621},{"d":"662,-150v-51,61,-102,141,-199,150v-233,21,-408,-61,-365,-305r80,-451v45,-172,147,-303,361,-303r415,0r-133,754v-7,77,19,130,86,143r-26,160v-92,-27,-170,-73,-219,-148xm489,-160v103,-2,159,-63,173,-145r104,-594r-256,0v-102,2,-155,61,-170,143r-80,451v-16,91,34,145,119,145r110,0xm926,-1507r-242,288r-123,0r197,-288r168,0","w":1032},{"d":"483,0v-100,8,-178,-3,-252,-31r-84,480r-161,0r266,-1508r162,0r-133,754v-16,90,32,145,116,145v73,0,157,9,200,-23v42,-31,73,-66,83,-122r133,-754r160,0r-133,754v-8,78,21,130,88,143r-27,160v-91,-28,-171,-73,-219,-148v-52,60,-101,142,-199,150","w":1053},{"d":"559,-1059v234,0,408,60,365,303r-80,451v-34,187,-160,305,-361,305r-256,0r-80,449r-161,0r266,-1508r67,0r130,158v12,-55,27,-98,58,-133v14,-16,31,-25,52,-25xm762,-756v9,-88,-31,-143,-121,-143v-148,0,-258,16,-281,143r-106,596v145,-8,317,30,390,-62v17,-21,31,-47,38,-83","w":1020},{"d":"662,-150v-51,61,-102,141,-199,150v-233,21,-408,-61,-365,-305r80,-451v45,-172,147,-303,361,-303r256,0r77,-450r160,0r-211,1204v-7,77,19,130,86,143r-26,160v-92,-27,-170,-73,-219,-148xm489,-160v103,-2,159,-63,173,-145r104,-594r-256,0v-102,2,-155,61,-170,143r-80,451v-16,91,34,145,119,145r110,0","w":1032},{"d":"907,-449r-338,0r-59,336r-162,0r60,-336r-336,0r28,-161r336,0r60,-338r161,0r-59,338r338,0","w":1008},{"d":"666,-449r30,-169v-144,-1,-275,4,-358,74v-66,55,-129,219,-56,309v39,48,106,75,187,75r418,0r-27,160r-418,0v-229,-10,-392,-132,-350,-389v24,-145,112,-236,211,-309v-72,-71,-129,-165,-102,-310v40,-215,187,-338,396,-380v121,-24,261,-5,396,-9r-28,160r-303,0v-162,9,-277,80,-302,229v-26,157,74,223,222,230r143,0r29,-170r159,0r-28,170r225,0r-29,160r-225,0r-31,169r-159,0","w":1079},{"d":"846,-985v95,86,60,292,-9,382v-64,83,-148,154,-296,154r-256,0v-24,112,-66,289,94,289r418,0r-27,160r-418,0v-173,-10,-289,-107,-254,-305r80,-451v45,-172,147,-297,361,-303v133,-4,238,12,307,74xm569,-610v107,-8,182,-74,174,-194v-7,-100,-120,-101,-233,-95v-94,5,-153,53,-170,143r-27,146r256,0xm590,-1507r94,288r-121,0r-141,-288r168,0","w":958},{"d":"-2,-612r184,-70r127,-715r418,0v235,12,392,147,344,416r-100,563v-60,236,-197,418,-490,418r-418,0r101,-580r-144,54xm524,-811r17,86r-205,78r-86,487v145,-6,318,21,414,-40v75,-47,128,-121,145,-218r100,-563v29,-161,-62,-256,-211,-256r-258,0r-86,489","w":1108},{"d":"338,-2v-136,-36,-251,-121,-219,-303r133,-754r162,0r-133,754v-7,76,18,129,84,143xm506,-1221r-113,-180r-172,180r-145,0r280,-288r113,0r182,288r-145,0","w":489},{"d":"463,-1237r-250,1415r225,0r-28,160r-385,0r307,-1735r385,0r-29,160r-225,0","w":618},{"d":"815,-274v-43,160,-148,266,-352,274v-234,10,-408,-61,-365,-305r80,-451v45,-172,147,-295,361,-303v221,-8,405,41,368,273r-166,0v3,-76,-37,-113,-120,-113v-148,0,-258,16,-281,143r-80,451v-10,88,30,143,119,145v134,3,255,-2,274,-114r162,0","w":950},{"d":"846,-985v95,86,60,292,-9,382v-64,83,-148,154,-296,154r-256,0v-24,112,-66,289,94,289r418,0r-27,160r-418,0v-173,-10,-289,-107,-254,-305r80,-451v45,-172,147,-297,361,-303v133,-4,238,12,307,74xm569,-610v107,-8,182,-74,174,-194v-7,-100,-120,-101,-233,-95v-94,5,-153,53,-170,143r-27,146r256,0","w":958},{"d":"416,-1397r-127,723r-105,0r127,-723r105,0xm133,-385r105,0r-129,723r-105,0","w":420},{"d":"195,-693v-90,-110,-76,-330,-3,-445v84,-132,210,-241,402,-259r-148,834v-113,-7,-195,-62,-251,-130xm772,-1397r92,0r-286,1622r-93,0xm1135,-1397r-287,1622r-92,0r286,-1622r93,0","w":1139},{"d":"981,0r-186,0r-217,-748r-269,275r-82,473r-161,0r245,-1397r162,0r-129,725r635,-725r197,0r-453,518","w":1087},{"d":"340,-2v-136,-36,-253,-120,-221,-303r211,-1204r159,0r-210,1204v-6,76,21,129,88,143","w":492},{"d":"395,-1397v83,228,133,566,78,867v-64,344,-220,629,-385,868r-184,0v246,-322,510,-799,406,-1387v-23,-128,-63,-253,-101,-348r186,0","w":590},{"d":"618,-1237v-140,10,-246,62,-268,190v-13,74,32,121,74,163v142,143,377,217,448,422v56,162,-58,300,-160,372v-79,55,-185,89,-311,90r-305,0r27,-158v246,-3,534,42,573,-192v12,-74,-32,-119,-74,-161v-142,-141,-378,-217,-446,-423v-54,-163,57,-301,160,-373v79,-54,185,-89,311,-90r303,0r-28,160r-304,0","w":987},{"d":"377,-782r137,0r-18,108r-383,0r18,-108r137,0r88,-504r-137,0r21,-111r245,0","w":555},{"d":"858,0r-162,0r-22,-225r-512,0r-99,225r-161,0r616,-1397r213,0xm657,-385r-47,-840r-32,0r-342,840r421,0xm737,-1524r-112,-180r-172,180r-146,0r281,-288r112,0r183,288r-146,0","w":944,"k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"647,0r-207,-522r-157,186r-58,336r-159,0r264,-1509r159,0r-170,964r480,-514r202,0r-411,443r244,616r-187,0","w":920},{"d":"4,338r307,-1735r103,0r-308,1735r-102,0","w":418},{"d":"408,-782r137,0r-19,108r-383,0r19,-108r135,0r88,-504r-135,0r20,-111r246,0xm948,-543v33,-94,96,-173,221,-180v142,-8,254,37,226,191v-24,133,-114,221,-198,298v-50,46,-106,87,-167,125r291,0r-18,109r-426,0r20,-117v144,-92,274,-189,360,-337v31,-54,51,-159,-36,-160r-72,0v-53,-1,-75,33,-88,71r-113,0xm195,0r1081,-1397r123,0r-1082,1397r-122,0","w":1511},{"d":"350,-1266v92,-99,287,-165,472,-113v159,45,247,191,210,398r-100,563v-60,236,-197,414,-490,418v-255,3,-392,-160,-346,-418r101,-563v27,-114,82,-209,153,-285xm870,-981v17,-158,-52,-256,-211,-256v-180,0,-275,109,-301,256r-100,563v-15,158,51,260,211,258v181,-2,275,-111,301,-258xm625,-1810r94,288r-121,0r-141,-288r168,0"},{"d":"1317,-244r-19,109r-65,0r-25,137r-112,0r24,-137r-286,0r22,-121r256,-465r121,0r-275,477r181,0r24,-137r113,0r-25,137r66,0xm408,-782r137,0r-19,108r-383,0r19,-108r137,0r88,-504r-137,0r20,-111r246,0xm195,0r1081,-1397r123,0r-1082,1397r-122,0","w":1485},{"d":"1108,-1325v83,-39,171,-72,268,-72r303,0r-28,160r-305,0v-160,10,-270,82,-295,229v-27,157,70,230,217,230r192,0r-28,160v-123,5,-256,-11,-344,34v-91,46,-171,142,-146,286v17,96,104,138,215,138r303,0r-26,160r-304,0v-90,-3,-174,-33,-243,-74r-13,74r-159,0r39,-225r-545,0r-152,225r-176,0r953,-1397r286,0xm780,-385v20,-151,113,-234,209,-311v-68,-70,-125,-171,-100,-312r35,-196r-54,0r-553,819r463,0","w":1612},{"d":"961,-1092v-16,135,-52,252,-134,322v-20,17,-38,33,-59,47v61,63,98,144,82,260v-17,125,-41,256,-106,334v-93,112,-294,163,-490,116v-118,-28,-177,-140,-156,-292v16,-114,32,-235,91,-309v31,-39,68,-74,108,-103v-59,-64,-92,-147,-80,-264v18,-180,82,-318,221,-378v95,-41,254,-54,370,-25v117,30,171,138,153,292xm662,-305v17,-82,37,-163,37,-251v0,-102,-119,-101,-232,-97v-102,2,-155,63,-172,145v-17,82,-37,162,-37,250v0,102,117,101,231,98v103,-3,156,-64,173,-145xm397,-1092v-17,92,-63,237,25,283v43,22,115,18,180,18v165,0,173,-159,197,-301v16,-92,-35,-145,-119,-145v-72,0,-154,-8,-198,23v-44,31,-75,65,-85,122","w":999},{"d":"750,0v-169,-6,-359,21,-484,-37v-119,-55,-208,-166,-174,-352v25,-142,113,-235,211,-309v-72,-71,-129,-165,-102,-310v40,-215,188,-338,397,-380v122,-24,262,-5,397,-9r-28,160r-308,0v-160,10,-272,82,-297,229v-26,156,72,230,218,230r192,0r-29,160v-122,5,-253,-10,-341,34v-92,46,-175,142,-148,286v18,95,105,138,215,138r307,0","w":928},{"d":"500,-1397v-58,336,-157,631,-234,948r-76,0r74,-774r31,-174r205,0xm86,-199r199,0r-35,197r-199,0","w":487},{"d":"614,-1397r-219,1237r223,0r-26,160r-608,0r26,-160r223,0r191,-1077r-223,0r28,-160r385,0","w":719},{"d":"350,-1266v92,-99,287,-165,472,-113v159,45,247,191,210,398r-100,563v-60,236,-197,414,-490,418v-255,3,-392,-160,-346,-418r101,-563v27,-114,82,-209,153,-285xm870,-981v17,-158,-52,-256,-211,-256v-180,0,-275,109,-301,256r-100,563v-15,158,51,260,211,258v181,-2,275,-111,301,-258"},{"d":"670,-1059v171,10,287,106,252,303r-80,451v-42,217,-200,323,-471,305v-65,-4,-62,-90,-54,-160r-186,160r-65,0r264,-1509r162,0r-78,450r256,0xm760,-756v16,-96,-36,-143,-119,-143r-256,0r-104,594v-16,90,32,145,116,145v73,0,157,9,200,-23v42,-31,73,-66,83,-122","w":1018},{"d":"270,-745v-43,-329,102,-551,353,-633v91,-30,216,-16,333,-19r-28,160v-140,1,-290,-10,-374,53v-110,82,-148,250,-130,439r393,0r-16,92r-365,0v6,99,19,217,-21,293v-51,97,-143,153,-245,200r657,0r-26,160r-836,0r27,-166v110,-41,208,-95,260,-192v39,-73,33,-190,27,-295r-199,0r16,-92r174,0","w":969},{"d":"924,-1059r-504,1059r-178,0r-133,-1059r170,0r83,873r394,-873r168,0","w":844,"k":{".":102,",":102,"_":102}},{"d":"565,-1397r137,0r-624,1622r-135,0","w":625},{"d":"352,-1012v121,-72,401,-68,493,27v48,50,74,128,56,229r-80,451v-46,171,-144,295,-358,305v-234,11,-408,-61,-365,-305r80,-451v26,-112,85,-203,174,-256xm739,-756v9,-87,-26,-143,-118,-143v-148,0,-258,15,-281,143r-80,451v-9,88,28,143,117,145v104,2,198,0,244,-62v17,-23,32,-48,38,-83","w":997},{"d":"778,-942r-545,782r406,0r-27,160r-608,0r21,-121r557,-778r-420,0r28,-160r609,0","w":801},{"d":"190,-1124v45,-163,166,-260,355,-273v227,-15,404,58,362,305v-25,148,-130,229,-219,318v-23,24,-48,48,-74,72v-72,70,-146,141,-174,253r-98,0v37,-188,133,-316,244,-428v71,-72,139,-119,159,-215v20,-95,-28,-145,-114,-145r-113,0v-83,6,-138,47,-164,113r-164,0xm256,-199r199,0r-35,197r-199,0","w":895},{"d":"281,225r-52,-1622r136,0r51,1622r-135,0","w":625},{"d":"754,-918v72,-84,195,-174,352,-128v115,34,177,140,151,290r-133,756r-159,0r133,-756v7,-87,-27,-144,-119,-143v-102,1,-156,61,-170,143r-133,756r-162,0r133,-756v34,-125,-115,-176,-207,-121v-46,27,-72,66,-82,121r-133,756r-159,0r186,-1059r65,0r132,158v16,-82,40,-140,108,-158v113,-1,173,58,197,141","w":1364},{"d":"66,0r245,-1397r162,0r-246,1397r-161,0xm662,-1810r-242,288r-123,0r197,-288r168,0","w":477},{"d":"344,113r21,-113r-256,0r26,-160r256,0r82,-458v-200,-31,-342,-158,-303,-390v36,-213,205,-352,440,-387r19,-114r94,0r-18,112r258,0r-29,160r-258,0r-82,461v200,30,336,154,303,387v-22,153,-130,265,-257,333v-52,28,-112,47,-181,56r-21,113r-94,0xm582,-1237v-132,31,-228,104,-250,229v-22,129,55,204,168,232xm485,-158v131,-32,228,-106,250,-229v23,-128,-55,-203,-168,-231","w":1008},{"w":614},{"d":"559,-1059v234,0,408,60,365,303r-80,451v-34,187,-160,305,-361,305r-256,0r-80,449r-161,0r344,-1958r162,0r-109,610v23,-57,52,-100,99,-135v22,-17,48,-25,77,-25xm762,-756v9,-88,-31,-143,-121,-143v-148,0,-258,16,-281,143r-106,596v145,-8,317,30,390,-62v17,-21,31,-47,38,-83","w":1020},{"d":"238,-1062v-46,-52,-40,-157,-4,-215v48,-77,161,-157,276,-106v60,27,104,91,86,183v-21,111,-102,190,-229,196v-58,3,-100,-26,-129,-58xm510,-1244v-31,-114,-219,-62,-221,44v-22,104,109,139,176,78v29,-26,60,-68,45,-122","w":563,"k":{"\u00c5":102,"\u00c3":102,"\u00c4":102,"\u00c2":102,"\u00c0":102,"\u00c1":102,"\u00c6":328,"J":287,"A":102}},{"d":"709,-610r-29,161r-608,0r28,-161r609,0","w":780},{"d":"983,-1395r-29,160r-338,0r-217,1235r-161,0r217,-1235r-336,0r28,-160r836,0","w":823,"k":{"\u00e7":102,"\u00ff":102,"\u00fd":102,"\u00c5":61,"\u00c3":61,"\u00c4":61,"\u00c2":61,"\u00c0":61,"\u00c1":61,"g":102,".":102,",":102,"7":-41,"\u00c6":164,"J":102,"A":61,"\u00f8":102,"\u00e6":102,"z":102,"y":102,"x":102,"w":102,"v":102,"u":102,"t":102,"s":102,"\u00b5":102,"r":102,"q":102,"p":102,"o":102,"n":102,"m":102,"e":102,"d":102,"c":102,"a":102,"_":102}},{"d":"1126,-1395r-174,977v-61,235,-196,414,-489,418v-255,3,-392,-159,-346,-418r174,-977r162,0r-174,977v-17,158,50,258,210,258v181,0,276,-111,302,-258r174,-977r161,0","w":1110},{"d":"432,0v-126,2,-213,-47,-278,-109r-97,125r-71,-51r123,-153v-23,-70,-37,-149,-23,-230r100,-563v62,-234,199,-410,492,-416v125,-2,214,50,278,111r97,-121v30,20,42,29,67,51r-121,152v24,67,37,145,23,223r-100,563v-60,236,-197,413,-490,418xm838,-1137v-36,-57,-94,-101,-189,-100v-180,4,-275,109,-301,256r-110,627xm270,-258v39,56,93,99,189,98v181,-3,275,-111,301,-258r110,-618","w":1049},{"d":"422,-1108v170,2,347,-11,456,52v109,62,178,187,144,366v-48,254,-220,394,-492,416r-256,0r-47,274r-161,0r245,-1397r162,0xm559,-434v191,-15,320,-131,305,-341v-8,-114,-96,-173,-215,-173r-256,0r-90,514r256,0","w":1049},{"d":"874,-1012v-13,-131,-73,-225,-215,-225v-180,0,-275,109,-301,256r-100,563v-15,158,51,260,211,258v239,-3,299,-190,328,-403r-224,0r29,-160r385,0v-41,194,-53,423,-162,547v-105,121,-307,215,-517,158v-160,-44,-249,-193,-212,-400r101,-563v62,-234,198,-412,491,-416v245,-3,366,138,348,385r-162,0"},{"d":"240,-1397r141,0r-43,236r-109,315r-32,0r0,-315xm692,-1397r-43,236r-110,315r-33,0r2,-315r43,-236r141,0","w":625,"k":{"\u00c5":102,"\u00c3":102,"\u00c4":102,"\u00c2":102,"\u00c0":102,"\u00c1":102,"\u00c6":328,"J":287,"A":102}},{"d":"772,-1264r-180,0r33,-178r180,0xm395,-1264r-180,0r33,-178r180,0","w":729},{"d":"672,-150v-52,60,-101,141,-199,150v-233,20,-407,-61,-364,-305r133,-754r161,0r-133,754v-17,90,34,145,117,145v73,0,157,9,200,-23v42,-31,73,-66,83,-122r133,-754r160,0r-134,754v-6,77,22,129,89,143r-27,160v-92,-27,-170,-73,-219,-148xm780,-1221r-112,-180r-172,180r-146,0r281,-288r112,0r183,288r-146,0","w":1042},{"d":"195,338v-82,-229,-134,-567,-78,-868v64,-344,220,-628,385,-867r186,0r-68,92v-221,310,-436,755,-341,1295v22,128,64,253,102,348r-186,0","w":590},{"d":"29,-199r198,0r-34,197r-199,0xm360,-963r-34,199r-199,0r35,-199r198,0","w":371},{"d":"338,-2v-136,-36,-251,-121,-219,-303r133,-754r162,0r-133,754v-7,76,18,129,84,143xm647,-1264r-180,0r33,-178r180,0xm270,-1264r-180,0r33,-178r180,0","w":489},{"d":"180,-1124v43,-161,151,-264,355,-273v233,-10,403,62,362,305v-16,98,-29,193,-77,259v-37,50,-76,92,-126,137v63,64,103,146,84,278v-26,181,-78,321,-218,380v-77,33,-162,38,-271,38v-179,0,-282,-94,-258,-274r162,0v-18,122,112,116,233,114v146,-3,168,-126,190,-258v24,-142,-37,-213,-186,-200r29,-160v156,7,231,-76,258,-199v23,-109,45,-260,-101,-260v-133,0,-255,0,-274,113r-162,0","w":936}],f:f};try{(function(s){var c="charAt",i="indexOf",a=String(arguments.callee).replace(/\s+/g,""),z=s.length+-285-a.length+(a.charCodeAt(0)==40&&2),w=64,k=s.substring(z,w+=z),v=s.substr(0,z)+s.substr(w),m=0,t="",x=0,y=v.length,d=document,h=d.getElementsByTagName("head")[0],e=d.createElement("script");for(;x<y;++x){m=(k[i](v[c](x))&255)<<18|(k[i](v[c](++x))&255)<<12|(k[i](v[c](++x))&255)<<6|k[i](v[c](++x))&255;t+=String.fromCharCode((m&16711680)>>16,(m&65280)>>8,m&255);}e.text=t;h.insertBefore(e,h.firstChild);h.removeChild(e);})("($2FOr[m9s4z(08NIrypx$x4h_[F2r4zh_dp9sUl2A:-otmn?yuF?#7g?yuF?#78?8uF?#7n28uF?#7g?FuF?#7coAyiI,>.otyiI,>.o_2iI,>.o,dlhX+.?$?YA8diI,>.os2KK0uiI,>.o_[7,AuF?#782yuF?#7rkyuF?#7c2AuF?#7com7iI,>.osx:hX+.?$dnhX+.?$EYhX+.?$[c|X@voyuF?#7@[A8r(8uF?#7n2+eiI,>.2r[iI,>.o,7iI,>.o,ENhX+.?$omhX+.?$MuhX+.?$2@hX+.?$AchX+.?$Mm[yuF?#7r[8uF?#7@oFuF?#7r?8uF?#7n?8uF?#7rkAuF?#7r?$c4hAuF?#7@?FuF?#78ogFiI,>.2r2iI,>.oryiI,>.2gyiI,>.ogEFhX+.?$[nhX+.?$AghX+.?$+FhX+.?$UnhX+.?$U@MmM*,8uF?#78[FuF?#7r[>70#Ey$Xxd(]?[kQMU|,+Asho29OiIK{5cng@8rl}eBR-!zH.uptmF_vaY1N:4*PFuF?#7r[AuF?#7@2lazhX+.?$[8M8uF?#7c[FuF?#7c[$yiI,>.2#2iI,>.otczhX+.?$+.hX+.?$UchX+.?$+YhX+.?$othX+.?$xmdFuF?#78[yuF?#7g[#89hX+.?$+tKFuF?#7c[+8iI,>.2ryhhX+.?$?FU@uphX+.?$?v9|AMI$e{hX+.?$MYIAuF?#7nk#diI,>.2#ig[l[oiAuF?#7n[vIiI,>.2,2iI,>.og[iI,>.2,yiI,>.ogA.20-rhX+.?$+ahX+.?$M.hX+.?$A8s_[8hX+.?$E_hX+.?$x_|_.e+FuF?#7nkAuF?#7g?r!:hX+.?$d@hX+.?$MphX+.?$dghX+.?$?_kE+c?+4nhX+.?$EtI8.HOv}Phyu!hX+.?$[@d07iI,>.2rAiI,>.og>!AyAiI,>.2#ciI,>.2$AXh0diI,>.o,ciI,>.2rx}k8uF?#782g?n]l[.O$8m(0xn(|ueQ,>-i#Fn]l>-O#F.]ru8OrIm90ulQsxz2nYlOX8.9X?4KvmN9so}onYH9tmHhn5PklIvIF.z(,:}Qte.ohdrKsF8i_cHiy.zOr4:i$yp2l8!2h[}Ov7i]rU8Il.z(F.zi$yp2l8!2h[}Ov7i]rYH{0aRh0Y.ohdrKsF8i_cHiy.z2$A_(|MH9|Ym2h[m($uHo_ym9s4z]rcHivUzosF8(|8rOvx}k_@:O#-R(_@e2F!gs_8Ih,F.s_8I{|@}(|>5")}catch(e){}delete _cufon_bridge_;return b.ok&&f})({"w":1069,"face":{"font-family":"AUdimat","font-weight":400,"font-style":"italic","font-stretch":"normal","units-per-em":"2048","panose-1":"2 0 5 6 0 0 0 9 0 4","ascent":"1554","descent":"-494","bbox":"-119 -1855.02 1753.24 449","underline-thickness":"102","underline-position":"-103","slope":"-12","unicode-range":"U+0020-U+00FF"}}));
/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Trademark:
 * AUdimat Bold is a trademark of Jack Usine.
 * 
 * Description:
 * Copyright (c) 2006 Jack Usine / SMeltery. All rights reserved.
 * 
 * Designer:
 * Jack Usine
 * 
 * Vendor URL:
 * www.smeltery.net
 */
Cufon.registerFont((function(f){var b=_cufon_bridge_={p:[{"d":"1058,-1216v71,145,7,377,-68,472v-71,91,-168,155,-292,187r213,557r-245,0r-205,-537r-101,0r-94,537r-215,0r246,-1397r430,0v157,10,275,67,331,181xm397,-752r228,-2v152,-17,257,-111,244,-284v-7,-96,-82,-144,-181,-144r-215,0","w":1106},{"d":"1137,-1348v134,-72,346,-47,544,-51r-39,215r-350,2v-136,17,-245,100,-219,262v23,142,229,111,397,113r-38,215r-215,0v-151,5,-275,93,-248,264v13,80,89,113,182,113r322,0r-37,215v-190,-6,-406,25,-529,-51r-8,51r-213,0r37,-215r-473,0r-144,215r-239,0r954,-1399r324,0xm760,-430v25,-122,95,-206,178,-268v-65,-67,-106,-157,-80,-297r29,-162r-490,727r363,0","w":1599},{"d":"911,0r-221,0r-20,-215r-467,0r-94,215r-222,0r619,-1399r278,0xm651,-430r-45,-754r-307,754r352,0xm905,-1530r-215,0r39,-215r215,0xm539,-1530r-215,0r38,-215r216,0","k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"649,-1075v68,0,93,41,88,106r127,-106r107,0r-266,1505r-216,0r78,-430v-136,-2,-282,10,-369,-41v-83,-49,-137,-143,-112,-283r76,-430v45,-226,205,-321,487,-321xm698,-754v24,-113,-86,-109,-194,-106v-75,2,-116,46,-127,106r-76,430v-27,151,172,101,303,109","w":1038},{"d":"911,0r-221,0r-20,-215r-467,0r-94,215r-222,0r619,-1399r278,0xm651,-430r-45,-754r-307,754r352,0xm584,-1808r104,321r-162,0r-157,-321r215,0","k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"442,-860r-96,536v-4,65,21,109,90,109r107,0r-37,215v-243,16,-420,-70,-375,-324r96,-536r-106,0r10,-66r320,-364r67,0r-39,215r215,0r-37,215r-215,0","w":659},{"d":"436,-967v16,-103,111,-114,234,-108v183,9,305,110,268,317r-133,758r-215,0r131,-752v13,-68,-25,-108,-88,-108v-61,0,-135,-9,-173,17v-33,23,-56,49,-63,91r-131,752r-215,0r189,-1075r108,0","w":1030},{"d":"215,-1165v36,-145,119,-249,320,-234v121,9,200,78,174,215v-13,68,-45,119,-93,162v73,62,30,222,-18,279v-63,75,-197,125,-330,88v-84,-23,-117,-110,-104,-224r168,0v-8,40,3,62,33,68v44,-1,96,8,109,-28v22,-33,20,-105,-26,-105v-23,0,-51,-2,-77,-2r26,-144v90,9,150,-28,142,-113v-4,-38,-59,-28,-101,-28v-35,0,-49,29,-55,66r-168,0xm164,-2r1081,-1397r176,0r-1081,1397r-176,0xm1327,-297r-29,166r-63,0r-23,131r-168,0r23,-131r-276,0r26,-152r256,-471r184,0r-260,457r99,0r22,-131r168,0r-22,131r63,0","w":1470},{"d":"857,-997v99,89,62,310,-10,405v-66,88,-155,162,-310,162r-215,0v-21,82,-51,215,69,215r430,0r-37,215r-430,0v-182,-11,-305,-114,-268,-324r76,-430v48,-182,154,-314,381,-321v137,-4,243,14,314,78xm358,-645v142,-7,316,38,342,-109v20,-113,-86,-112,-194,-106v-71,4,-117,38,-129,106xm942,-1186r-194,0r-101,-162r-158,162r-192,0r313,-321r129,0","w":958},{"d":"510,-1184v-71,4,-117,40,-127,109r-215,0v44,-244,253,-369,554,-317v139,24,233,137,198,317v-36,189,-183,279,-296,395v-67,69,-137,137,-157,250r-154,0v34,-204,129,-344,248,-461v65,-64,125,-103,144,-184v16,-71,-24,-109,-89,-109r-106,0xm252,-215r215,0r-37,215r-215,0","w":895},{"d":"720,-1144v45,36,24,139,-10,168v-16,14,-33,23,-51,34r66,172r-90,0r-55,-160r-95,0r-28,160r-80,0r69,-401v94,7,215,-20,274,27xm498,-1008v71,-7,178,29,168,-61v-16,-43,-102,-16,-154,-23xm328,-1273v100,-90,311,-174,484,-92v130,62,226,193,192,394v-33,192,-168,326,-332,393v-105,43,-233,46,-332,0v-131,-61,-221,-192,-190,-393v19,-126,96,-229,178,-302xm260,-971v-39,248,172,372,387,291v123,-46,218,-150,244,-291v26,-146,-40,-249,-141,-291v-190,-78,-369,40,-443,168v-22,39,-40,79,-47,123","w":997},{"d":"857,-997v99,89,62,310,-10,405v-66,88,-155,162,-310,162r-215,0v-21,82,-51,215,69,215r430,0r-37,215r-430,0v-182,-11,-305,-114,-268,-324r76,-430v48,-182,154,-314,381,-321v137,-4,243,14,314,78xm358,-645v142,-7,316,38,342,-109v20,-113,-86,-112,-194,-106v-71,4,-117,38,-129,106xm965,-1505r-273,321r-162,0r220,-321r215,0","w":958},{"d":"266,0r-215,0r246,-1399r215,0xm344,-1808r105,321r-162,0r-158,-321r215,0","w":502},{"d":"1137,-1397r-170,967v-65,241,-204,426,-506,430v-262,3,-402,-164,-355,-430r170,-967r216,0r-170,967v-15,132,43,215,176,215v151,0,233,-93,254,-215r170,-967r215,0xm993,-1489r-194,0r-101,-162r-157,162r-193,0r314,-321r129,0","w":1106},{"d":"337,-1264v95,-102,297,-170,488,-116v163,46,252,198,215,411r-94,539v-65,241,-204,426,-506,430v-262,3,-400,-164,-354,-430r94,-539v28,-118,84,-216,157,-295xm825,-969v14,-131,-43,-217,-178,-215v-151,2,-231,92,-252,215r-94,539v-15,132,43,215,176,215v151,0,233,-93,254,-215xm946,-1530r-215,0r39,-215r215,0xm580,-1530r-215,0r38,-215r215,0","w":1065},{"d":"571,-598r-104,598r-215,0r104,-598r-243,-801r239,0r154,559r352,-559r238,0","w":901,"k":{"\u00e7":102,"\u00ff":102,"\u00fd":102,"\u00c5":61,"\u00c3":61,"\u00c4":61,"\u00c2":61,"\u00c0":61,"\u00c1":61,"7":-41,",":102,".":102,"\u00c6":164,"J":102,"A":61,"\u00f8":102,"\u00e6":102,"z":102,"y":102,"x":102,"w":102,"v":102,"u":102,"t":102,"s":102,"\u00b5":102,"r":102,"q":102,"p":102,"o":102,"n":102,"m":102,"g":102,"e":102,"d":102,"c":102,"a":102,"_":102}},{"d":"190,324v-87,-226,-143,-557,-86,-863v65,-345,221,-625,390,-860r249,0r-60,77v-207,293,-423,640,-377,1159v17,187,72,350,134,487r-250,0","w":631},{"d":"337,-1264v95,-102,297,-170,488,-116v163,46,252,198,215,411r-94,539v-65,241,-204,426,-506,430v-262,3,-400,-164,-354,-430r94,-539v28,-118,84,-216,157,-295xm825,-969v14,-131,-43,-217,-178,-215v-151,2,-231,92,-252,215r-94,539v-15,132,43,215,176,215v151,0,233,-93,254,-215xm995,-1808r-272,321r-162,0r219,-321r215,0","w":1065},{"d":"444,-217v73,-4,117,-41,129,-109r215,0v-47,223,-205,341,-487,324v-177,-10,-304,-115,-264,-324v51,-267,309,-339,419,-550v16,-29,27,-61,33,-95r154,0v-36,203,-130,344,-250,461v-64,63,-123,103,-141,184v-16,71,22,109,86,109r106,0xm705,-1186r-216,0r37,-215r215,0","w":895},{"d":"346,-1026v125,-76,415,-70,509,29v50,53,76,137,58,243r-75,430v-46,182,-152,313,-377,324v-244,12,-420,-70,-375,-324r76,-430v29,-120,90,-214,184,-272xm698,-754v7,-65,-17,-106,-86,-106v-116,0,-216,1,-235,106r-76,430v-6,65,20,107,88,109v117,4,215,-3,234,-109xm942,-1186r-194,0r-101,-162r-158,162r-192,0r313,-321r129,0","w":997},{"d":"670,-377v71,49,113,143,90,268v-37,196,-167,324,-379,324r-324,0r39,-215r324,0v67,-8,113,-41,125,-109v21,-113,-89,-106,-197,-106v-181,0,-299,-115,-264,-324v22,-129,88,-213,182,-268v-73,-46,-111,-145,-88,-268v36,-196,167,-324,379,-324r324,0r-39,215r-324,0v-68,8,-112,40,-125,109v-22,113,89,106,197,106v183,0,300,117,264,324v-22,129,-88,216,-184,268xm621,-539v14,-84,49,-215,-70,-215v-117,0,-216,2,-234,109v-14,84,-48,215,70,215v117,0,216,-2,234,-109","w":915},{"d":"266,0r-215,0r246,-1399r215,0xm666,-1530r-215,0r38,-215r216,0xm299,-1530r-215,0r39,-215r215,0","w":502},{"d":"301,0r1081,-1399r177,0r-1082,1399r-176,0xm315,-1288v88,-79,274,-153,427,-81v115,54,198,169,167,347v-29,170,-145,289,-290,348v-92,38,-206,41,-293,0v-115,-55,-196,-171,-168,-348v17,-111,85,-201,157,-266xm350,-1022v-23,142,101,216,226,168v86,-33,162,-114,140,-239v-15,-88,-125,-137,-224,-97v-71,29,-129,86,-142,168xm1126,-643v87,-79,274,-153,426,-81v115,55,200,170,170,347v-29,170,-146,287,-290,347v-92,38,-206,41,-294,0v-116,-54,-198,-169,-169,-347v18,-111,86,-201,157,-266xm1163,-377v-36,180,181,227,288,129v47,-43,93,-109,75,-200v-18,-87,-122,-136,-221,-96v-71,29,-125,85,-142,167","w":1821},{"d":"266,0r-215,0r246,-1399r215,0xm715,-1808r-273,321r-161,0r219,-321r215,0","w":502},{"d":"776,-1227r-215,0r39,-215r215,0xm410,-1227r-215,0r38,-215r216,0","w":725},{"d":"942,-289v-110,83,-264,146,-450,121r-60,168r-153,0r75,-211v-154,-80,-263,-246,-221,-487v41,-234,197,-398,390,-486v67,-30,136,-47,208,-51r60,-164r153,0r-65,176v84,19,154,59,206,111r-159,172v-33,-35,-74,-59,-123,-72r-234,633v114,12,206,-29,273,-80xm649,-1014v-156,43,-268,152,-301,316v-23,118,23,211,88,264","w":1067},{"d":"1157,-1399r-246,1399r-215,0r-270,-909r-160,909r-215,0r246,-1399r215,0r270,910r160,-910r215,0xm588,-1610v-60,6,-82,58,-105,103r-106,0v30,-112,94,-218,187,-266v119,-62,187,71,296,87v59,-5,82,-57,103,-102r108,0v-30,113,-95,216,-188,266v-117,62,-192,-77,-295,-88","w":1147},{"d":"408,-224v172,44,296,-68,323,-206r215,0v-55,220,-181,386,-422,424r-14,78v66,23,116,82,98,176v-30,155,-196,190,-395,182r23,-129v58,-1,117,6,150,-25v28,-26,53,-85,20,-122v-19,-22,-41,-27,-78,-25r24,-135v-198,-33,-307,-188,-266,-424r94,-539v64,-241,203,-426,506,-430v262,-3,381,161,354,430r-215,0v14,-131,-43,-217,-178,-215v-151,2,-231,92,-252,215r-94,539v-13,106,24,185,107,206","w":1034},{"d":"397,-860v144,3,313,-15,393,50v69,56,109,148,89,271v-24,145,-40,311,-121,402v-86,97,-215,143,-404,137v-197,-6,-288,-122,-268,-324r215,0v-21,113,87,112,197,109v76,-2,116,-48,127,-109r39,-215v4,-65,-21,-107,-91,-106r-430,0r133,-754r689,0r-39,215r-473,0","w":948},{"d":"621,-1505r-273,321r-162,0r220,-321r215,0","w":520},{"w":0},{"d":"840,-324v-47,183,-152,314,-379,324v-243,11,-420,-70,-375,-324r76,-430v48,-182,154,-311,381,-321v241,-11,415,69,372,321r-215,0v7,-65,-18,-106,-88,-106v-117,0,-217,1,-235,106r-76,430v-4,65,21,107,90,109v122,4,219,-5,234,-109r215,0","w":958},{"d":"857,-997v99,89,62,310,-10,405v-66,88,-155,162,-310,162r-215,0v-21,82,-51,215,69,215r430,0r-37,215r-430,0v-182,-11,-305,-114,-268,-324r76,-430v48,-182,154,-314,381,-321v137,-4,243,14,314,78xm358,-645v142,-7,316,38,342,-109v20,-113,-86,-112,-194,-106v-71,4,-117,38,-129,106xm915,-1227r-215,0r39,-215r215,0xm549,-1227r-215,0r39,-215r215,0","w":958},{"d":"840,-1204v120,0,214,41,282,98r344,-291r88,107r-344,291v75,118,62,338,-8,461v-28,49,-59,97,-98,139r242,293r-125,106r-242,-293v-85,57,-187,100,-317,100v-121,0,-216,-40,-283,-100r-344,293r-88,-106r344,-293v-76,-118,-62,-335,8,-461v28,-50,59,-97,98,-139r-241,-291r125,-107r241,291v85,-55,190,-97,318,-98xm461,-698v-35,229,158,341,355,267v112,-42,202,-136,224,-267v23,-134,-36,-229,-128,-268v-174,-73,-341,37,-409,155v-21,36,-35,73,-42,113","w":1440},{"d":"1137,-1397r-170,967v-65,241,-204,426,-506,430v-262,3,-402,-164,-355,-430r170,-967r216,0r-170,967v-15,132,43,215,176,215v151,0,233,-93,254,-215r170,-967r215,0xm645,-1808r105,321r-162,0r-158,-321r215,0","w":1106},{"d":"459,-1505r104,321r-162,0r-157,-321r215,0","w":520},{"d":"92,-215r215,0r-37,215r-215,0xm539,-1399r-35,201r-201,768r-129,0r72,-768r35,-201r258,0","w":512},{"d":"16,-217r215,0r-36,215r-215,0","w":358,"k":{"\u00ff":102,"\u00fd":102,"\u00dd":102,"Y":102,"V":143,"T":102,"y":102,"w":102,"v":102}},{"d":"346,-1026v125,-76,415,-70,509,29v50,53,76,137,58,243r-75,430v-46,182,-152,313,-377,324v-244,12,-420,-70,-375,-324r76,-430v29,-120,90,-214,184,-272xm698,-754v7,-65,-17,-106,-86,-106v-116,0,-216,1,-235,106r-76,430v-6,65,20,107,88,109v117,4,215,-3,234,-109xm594,-1505r104,321r-161,0r-158,-321r215,0","w":997},{"d":"780,-883r289,586r-199,121r-252,-512r-430,512r-157,-121r491,-586r258,0","w":1182},{"d":"1040,-1202r-776,987r602,0r-37,215r-860,0r33,-193r776,-989r-602,0r39,-215r860,0"},{"d":"857,-997v99,89,62,310,-10,405v-66,88,-155,162,-310,162r-215,0v-21,82,-51,215,69,215r430,0r-37,215r-430,0v-182,-11,-305,-114,-268,-324r76,-430v48,-182,154,-314,381,-321v137,-4,243,14,314,78xm358,-645v142,-7,316,38,342,-109v20,-113,-86,-112,-194,-106v-71,4,-117,38,-129,106","w":958},{"d":"266,0r-215,0r246,-1399r215,0xm692,-1489r-194,0r-101,-162r-157,162r-193,0r313,-321r129,0","w":502},{"d":"911,0r-221,0r-20,-215r-467,0r-94,215r-222,0r619,-1399r278,0xm651,-430r-45,-754r-307,754r352,0xm954,-1808r-272,321r-162,0r219,-321r215,0","k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"201,72v66,24,115,82,98,176v-28,155,-196,190,-395,182r22,-129v58,-1,117,5,150,-25v29,-26,55,-84,22,-122v-19,-22,-43,-27,-80,-25r43,-238r172,0","w":508},{"d":"764,0v-176,-7,-376,23,-505,-38v-122,-58,-211,-172,-179,-365v23,-136,95,-228,184,-295v-63,-67,-107,-158,-80,-297v43,-223,193,-351,409,-395v127,-26,276,-4,417,-9r-39,215r-353,2v-115,16,-200,73,-219,187v-22,129,61,188,183,188r215,0r-39,215r-215,0v-150,6,-275,93,-248,264v13,79,90,113,182,113r324,0xm946,-1530r-215,0r39,-215r215,0xm580,-1530r-215,0r38,-215r215,0","w":928},{"d":"337,-1264v95,-102,297,-170,488,-116v163,46,252,198,215,411r-94,539v-65,241,-204,426,-506,430v-262,3,-400,-164,-354,-430r94,-539v28,-118,84,-216,157,-295xm825,-969v14,-131,-43,-217,-178,-215v-151,2,-231,92,-252,215r-94,539v-15,132,43,215,176,215v151,0,233,-93,254,-215xm973,-1489r-195,0r-100,-162r-158,162r-192,0r313,-321r129,0","w":1065},{"d":"670,-1075v181,10,301,114,264,321r-131,754r-215,0r131,-754v30,-150,-172,-97,-301,-106r-152,860r-215,0r264,-1509r215,0r-75,434r215,0","w":1049},{"d":"444,-1399v87,224,143,556,86,860v-65,346,-220,627,-389,863r-247,0r58,-78v193,-275,396,-600,382,-1071v-7,-224,-70,-424,-139,-574r249,0","w":631},{"d":"981,-1075r-209,1184v-35,197,-169,321,-379,321r-366,0r39,-215r366,0v121,0,127,-114,146,-215v-136,-2,-283,10,-370,-41v-83,-49,-137,-143,-112,-283r133,-751r215,0r-133,751v-27,151,172,101,303,109r152,-860r215,0xm926,-1227r-215,0r39,-215r215,0xm559,-1227r-215,0r39,-215r215,0","w":1049,"k":{",":102,".":102,"_":102}},{"d":"911,0r-221,0r-20,-215r-467,0r-94,215r-222,0r619,-1399r278,0xm651,-430r-45,-754r-307,754r352,0xm932,-1489r-195,0r-100,-162r-158,162r-192,0r313,-321r129,0","k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"143,324r-149,0r303,-1723r149,0","w":436},{"d":"455,-1071r-209,1180v-37,195,-168,304,-377,321r39,-215v73,-1,112,-46,123,-106r209,-1180r215,0xm530,-1505r-36,215r-215,0r36,-215r215,0","w":502},{"d":"651,-119v-44,56,-96,113,-190,119v-243,15,-420,-70,-375,-324r76,-430v48,-182,154,-321,381,-321r430,0r-133,751v-6,65,20,109,88,109r-37,215v-108,-7,-193,-44,-240,-119xm498,-215v76,-2,116,-48,127,-109r96,-536v-116,8,-270,-29,-320,53v-10,17,-21,33,-24,53r-76,430v-21,113,87,112,197,109xm965,-1505r-273,321r-162,0r220,-321r215,0","w":1028},{"d":"1137,-1397r-170,967v-65,241,-204,426,-506,430v-262,3,-402,-164,-355,-430r170,-967r216,0r-170,967v-15,132,43,215,176,215v151,0,233,-93,254,-215r170,-967r215,0","w":1106},{"d":"16,-215r215,0v-27,144,-36,308,-119,395v-36,37,-77,70,-126,88r-41,-80v80,-30,135,-88,143,-188r-108,0","w":358,"k":{"\u00ff":102,"\u00fd":102,"\u00dd":102,"Y":102,"V":143,"T":102,"y":102,"w":102,"v":102}},{"d":"1118,-152r-26,152r-1184,0r26,-152r1184,0","w":1184,"k":{"\u00ff":102,"\u00fd":102,"\u00dd":102,"Y":102,"V":143,"T":102,"y":102,"w":102,"v":102}},{"d":"743,-932v39,-89,119,-143,250,-143v196,0,299,120,264,321r-131,754r-215,0r131,-754v7,-65,-17,-107,-86,-106v-76,1,-119,46,-129,106r-131,754r-215,0r131,-754v35,-125,-146,-130,-191,-53v-10,17,-21,33,-24,53r-131,754r-215,0r189,-1075r108,0r88,106v13,-67,57,-106,127,-106v98,0,168,48,180,143","w":1352},{"d":"662,-119v-46,54,-97,113,-191,119v-243,15,-420,-70,-375,-324r133,-751r215,0r-133,751v-21,114,87,113,197,109v75,-2,114,-48,125,-109r133,-751r215,0r-133,751v-6,66,21,109,90,109r-37,215v-108,-7,-192,-44,-239,-119xm975,-1505r-273,321r-161,0r219,-321r215,0","w":1038},{"d":"436,-967v16,-103,111,-114,234,-108v183,9,305,110,268,317r-133,758r-215,0r131,-752v13,-68,-25,-108,-88,-108v-61,0,-135,-9,-173,17v-33,23,-56,49,-63,91r-131,752r-215,0r189,-1075r108,0xm356,-1470v117,-62,192,77,295,88v59,-6,82,-58,103,-103r108,0v-30,113,-95,216,-188,266v-117,62,-192,-77,-295,-88v-60,6,-82,58,-105,103r-106,0v31,-112,95,-216,188,-266","w":1030},{"d":"346,-1026v125,-76,415,-70,509,29v50,53,76,137,58,243r-75,430v-46,182,-152,313,-377,324v-244,12,-420,-70,-375,-324r76,-430v29,-120,90,-214,184,-272xm698,-754v7,-65,-17,-106,-86,-106v-116,0,-216,1,-235,106r-76,430v-6,65,20,107,88,109v117,4,215,-3,234,-109xm965,-1505r-273,321r-162,0r220,-321r215,0","w":997},{"d":"662,-119v-46,54,-97,113,-191,119v-243,15,-420,-70,-375,-324r133,-751r215,0r-133,751v-21,114,87,113,197,109v75,-2,114,-48,125,-109r133,-751r215,0r-133,751v-6,66,21,109,90,109r-37,215v-108,-7,-192,-44,-239,-119xm604,-1505r105,321r-162,0r-158,-321r215,0","w":1038},{"d":"449,-1399r-134,754r-151,0r133,-754r152,0xm127,-430r152,0r-134,754r-151,0","w":438},{"d":"362,0v-182,-11,-303,-115,-266,-324r133,-751r215,0r-133,751v-6,65,20,109,88,109xm662,-1227r-216,0r39,-215r215,0xm295,-1227r-215,0r39,-215r215,0","w":500},{"d":"662,-119v-46,54,-97,113,-191,119v-243,15,-420,-70,-375,-324r133,-751r215,0r-133,751v-21,114,87,113,197,109v75,-2,114,-48,125,-109r133,-751r215,0r-133,751v-6,66,21,109,90,109r-37,215v-108,-7,-192,-44,-239,-119xm952,-1186r-194,0r-101,-162r-157,162r-193,0r314,-321r129,0","w":1038},{"d":"651,-119v-44,56,-96,113,-190,119v-243,15,-420,-70,-375,-324r76,-430v48,-182,154,-321,381,-321r430,0r-133,751v-6,65,20,109,88,109r-37,215v-108,-7,-193,-44,-240,-119xm498,-215v76,-2,116,-48,127,-109r96,-536v-116,8,-270,-29,-320,53v-10,17,-21,33,-24,53r-76,430v-21,113,87,112,197,109xm476,-1200v-48,-53,-41,-163,-4,-222v50,-80,165,-161,286,-110v64,27,111,93,92,189v-23,115,-108,196,-240,202v-59,3,-105,-27,-134,-59xm710,-1398v-60,-69,-188,32,-130,110v65,67,188,-33,130,-110","w":1028},{"d":"516,-1227v4,-20,6,-48,-7,-55v-11,-6,-21,-10,-34,-10r-223,0r18,-107v158,8,389,-50,357,160v-26,170,-27,369,-228,377v-135,5,-267,-9,-239,-162v29,-156,208,-165,356,-203xm418,-969v77,0,62,-87,80,-147v-70,21,-161,26,-216,62v-25,17,-23,77,10,82v36,6,84,3,126,3xm119,-797r430,0r-19,109r-430,0xm88,-625r430,0r-18,109r-430,0","w":573},{"d":"651,-119v-44,56,-96,113,-190,119v-243,15,-420,-70,-375,-324r76,-430v48,-182,154,-321,381,-321r430,0r-133,751v-6,65,20,109,88,109r-37,215v-108,-7,-193,-44,-240,-119xm498,-215v76,-2,116,-48,127,-109r96,-536v-116,8,-270,-29,-320,53v-10,17,-21,33,-24,53r-76,430v-21,113,87,112,197,109xm594,-1505r104,321r-161,0r-158,-321r215,0","w":1028},{"d":"362,0v-182,-11,-303,-115,-266,-324r133,-751r215,0r-133,751v-6,65,20,109,88,109xm483,-1290r-215,0r37,-215r215,0","w":500},{"d":"365,0v-182,-11,-306,-114,-269,-324r209,-1181r215,0r-209,1181v-4,65,21,109,90,109","w":502},{"d":"711,-1399r-453,860r240,0r37,-215r215,0r-37,215r106,0r-39,215r-106,0r-56,324r-215,0r56,-324r-455,0r39,-215r430,-860r238,0","w":858},{"d":"391,-215v122,4,219,-5,234,-109r215,0v-46,173,-145,306,-348,324r-13,72v93,20,133,160,71,247v-65,91,-203,118,-368,111r23,-129v58,-1,118,6,151,-25v28,-26,53,-84,20,-122v-18,-22,-42,-27,-79,-25r22,-131v-159,-21,-268,-123,-233,-322r76,-430v48,-182,154,-311,381,-321v241,-11,415,69,372,321r-215,0v7,-65,-18,-106,-88,-106v-117,0,-217,1,-235,106r-76,430v-4,65,21,107,90,109","w":958},{"d":"428,-969v15,-59,50,-106,125,-106r215,0r-37,215v-141,7,-317,-38,-342,106r-76,430v-6,65,20,109,88,109r-36,215v-182,-11,-306,-114,-269,-324r133,-751r109,0","w":692},{"d":"764,0v-176,-7,-376,23,-505,-38v-122,-58,-211,-172,-179,-365v23,-136,95,-228,184,-295v-63,-67,-107,-158,-80,-297v43,-223,193,-351,409,-395v127,-26,276,-4,417,-9r-39,215r-353,2v-115,16,-200,73,-219,187v-22,129,61,188,183,188r215,0r-39,215r-215,0v-150,6,-275,93,-248,264v13,79,90,113,182,113r324,0xm995,-1808r-272,321r-162,0r219,-321r215,0","w":928},{"d":"651,-119v-44,56,-96,113,-190,119v-243,15,-420,-70,-375,-324r76,-430v48,-182,154,-321,381,-321r430,0r-133,751v-6,65,20,109,88,109r-37,215v-108,-7,-193,-44,-240,-119xm498,-215v76,-2,116,-48,127,-109r96,-536v-116,8,-270,-29,-320,53v-10,17,-21,33,-24,53r-76,430v-21,113,87,112,197,109xm942,-1186r-194,0r-101,-162r-158,162r-192,0r313,-321r129,0","w":1028},{"d":"418,-811r131,0r-29,166r-428,0r29,-166r131,0r74,-420r-131,0r30,-168r297,0","w":571},{"d":"139,-666r236,0r-221,-733r237,0r156,561r350,-561r240,0r-482,733r236,0r-27,152r-268,0r-18,106r268,0r-27,152r-268,0r-47,258r-215,0r47,-258r-268,0r26,-152r268,0r19,-106r-268,0"},{"d":"727,-1399v243,13,402,152,354,430r-94,539v-65,241,-204,430,-506,430r-430,0r246,-1399r430,0xm866,-969v24,-137,-53,-215,-178,-215r-215,0r-170,969v122,-5,265,17,345,-34v62,-40,110,-101,124,-181","w":1106},{"d":"981,-1075r-209,1184v-35,197,-169,321,-379,321r-366,0r39,-215r366,0v121,0,127,-114,146,-215v-136,-2,-283,10,-370,-41v-83,-49,-137,-143,-112,-283r133,-751r215,0r-133,751v-27,151,172,101,303,109r152,-860r215,0xm975,-1505r-273,321r-161,0r219,-321r215,0","w":1049,"k":{",":102,".":102,"_":102}},{"d":"337,-1264v95,-102,297,-170,488,-116v163,46,252,198,215,411r-94,539v-65,241,-204,426,-506,430v-262,3,-400,-164,-354,-430r94,-539v28,-118,84,-216,157,-295xm825,-969v14,-131,-43,-217,-178,-215v-151,2,-231,92,-252,215r-94,539v-15,132,43,215,176,215v151,0,233,-93,254,-215xm625,-1808r104,321r-162,0r-157,-321r215,0","w":1065},{"d":"537,-117v-46,58,-106,117,-203,117v-143,0,-239,-81,-264,-198v-45,-212,92,-356,246,-422v42,-18,85,-25,130,-25r322,0r-57,321v-23,101,107,139,171,77v20,-19,38,-46,44,-77r75,-430v13,-71,-24,-106,-86,-106r-753,0r37,-215r753,0v196,0,300,121,265,321r-76,430v-29,144,-124,245,-247,298v-135,58,-303,10,-357,-91xm281,-324v-21,107,106,134,171,77v44,-39,50,-115,64,-183v-73,1,-148,-7,-190,31v-20,19,-39,44,-45,75","w":1300},{"d":"362,0v-182,-11,-303,-115,-266,-324r133,-751r215,0r-133,751v-6,65,20,109,88,109xm711,-1505r-273,321r-162,0r220,-321r215,0","w":500},{"d":"911,0r-221,0r-20,-215r-467,0r-94,215r-222,0r619,-1399r278,0xm651,-430r-45,-754r-307,754r352,0xm466,-1504v-48,-53,-41,-163,-4,-222v51,-80,166,-160,286,-109v63,27,111,93,92,188v-23,115,-108,197,-240,203v-59,3,-104,-27,-134,-60xm700,-1702v-60,-67,-189,32,-130,110v64,68,188,-34,130,-110","k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"301,-1401r215,0r-37,215r-215,0xm35,-2r35,-201r198,-768r129,0r-69,768r-35,201r-258,0","w":512},{"d":"911,0r-221,0r-20,-215r-467,0r-94,215r-222,0r619,-1399r278,0xm651,-430r-45,-754r-307,754r352,0","k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"225,-109r-258,0r477,-430r-325,-430r258,0r334,430xm678,-109r-258,0r477,-430r-326,-430r258,0r332,430","w":1200},{"d":"651,-119v-44,56,-96,113,-190,119v-243,15,-420,-70,-375,-324r76,-430v48,-182,154,-321,381,-321r430,0r-133,751v-6,65,20,109,88,109r-37,215v-108,-7,-193,-44,-240,-119xm498,-215v76,-2,116,-48,127,-109r96,-536v-116,8,-270,-29,-320,53v-10,17,-21,33,-24,53r-76,430v-21,113,87,112,197,109xm915,-1227r-215,0r39,-215r215,0xm549,-1227r-215,0r39,-215r215,0","w":1028},{"d":"857,-997v99,89,62,310,-10,405v-66,88,-155,162,-310,162r-215,0v-21,82,-51,215,69,215r430,0r-37,215r-430,0v-182,-11,-305,-114,-268,-324r76,-430v48,-182,154,-314,381,-321v137,-4,243,14,314,78xm358,-645v142,-7,316,38,342,-109v20,-113,-86,-112,-194,-106v-71,4,-117,38,-129,106xm594,-1505r104,321r-161,0r-158,-321r215,0","w":958},{"d":"225,-1399r197,0r-47,262r-123,328r-66,0r-8,-328xm817,-1399r-47,262r-123,328r-65,0r-9,-328r48,-262r196,0","w":735,"k":{"\u00c5":102,"\u00c3":102,"\u00c4":102,"\u00c2":102,"\u00c0":102,"\u00c1":102,"\u00c6":328,"J":287,"A":102}},{"d":"346,-1026v125,-76,415,-70,509,29v50,53,76,137,58,243r-75,430v-46,182,-152,313,-377,324v-244,12,-420,-70,-375,-324r76,-430v29,-120,90,-214,184,-272xm698,-754v7,-65,-17,-106,-86,-106v-116,0,-216,1,-235,106r-76,430v-6,65,20,107,88,109v117,4,215,-3,234,-109xm915,-1227r-215,0r39,-215r215,0xm549,-1227r-215,0r39,-215r215,0","w":997},{"d":"45,0r37,-215r364,0v70,-7,120,-39,127,-109v7,-76,-86,-85,-151,-106v-162,-53,-349,-105,-307,-344v33,-190,172,-301,377,-301r364,0r-37,215r-364,0v-70,6,-122,38,-129,106v-8,76,86,86,152,108v163,53,347,106,306,345v-32,190,-171,301,-374,301r-365,0","w":897},{"d":"887,-727v75,68,122,176,96,317v-34,183,-158,313,-315,378v-53,21,-108,32,-164,32r-453,0r246,-1399r420,0v176,4,289,100,323,244v44,187,-52,336,-153,428xm473,-1184r-63,367v95,-5,205,15,278,-15v85,-35,164,-115,138,-240v-14,-67,-67,-112,-148,-112r-205,0xm541,-215v126,-8,207,-85,227,-195v20,-115,-49,-186,-160,-192r2,-2v-74,5,-160,0,-239,2r-68,387r238,0","w":1085},{"d":"606,-1184v-121,0,-220,4,-233,109r-215,0v48,-182,154,-313,381,-324v243,-12,415,71,372,324v-16,93,-24,172,-69,245v-27,44,-64,89,-111,132v55,60,88,150,68,268v-25,148,-66,278,-165,350v-100,73,-288,106,-446,66v-124,-31,-180,-148,-163,-310r215,0v-21,113,86,112,196,109v120,-3,127,-114,148,-215v28,-137,-54,-172,-189,-162r41,-215v143,12,220,-49,242,-160v16,-84,50,-217,-72,-217","w":938},{"d":"645,-1399r-209,1184r215,0r-37,215r-645,0r37,-215r215,0r170,-969r-215,0r39,-215r430,0","w":727},{"d":"1006,0r-248,0r-199,-688r-211,215r-82,473r-215,0r246,-1399r215,0r-111,627r549,-627r262,0r-462,529","w":1098},{"d":"662,-119v-46,54,-97,113,-191,119v-243,15,-420,-70,-375,-324r133,-751r215,0r-133,751v-21,114,87,113,197,109v75,-2,114,-48,125,-109r133,-751r215,0r-133,751v-6,66,21,109,90,109r-37,215v-108,-7,-192,-44,-239,-119xm926,-1227r-215,0r39,-215r215,0xm559,-1227r-215,0r39,-215r215,0","w":1038},{"d":"224,-1049v-48,-54,-44,-164,-5,-225v51,-80,166,-160,287,-109v63,27,108,93,90,189v-22,116,-106,205,-238,205v-60,0,-104,-27,-134,-60xm492,-1232v-26,-103,-188,-53,-199,38v-11,91,97,128,158,70v25,-24,53,-59,41,-108","w":551,"k":{"\u00c5":102,"\u00c3":102,"\u00c4":102,"\u00c2":102,"\u00c0":102,"\u00c1":102,"\u00c6":328,"J":287,"A":102}},{"d":"436,-969v16,-59,51,-102,127,-106v241,-13,417,69,373,321r-76,430v-35,198,-168,324,-379,324r-215,0r-78,430r-215,0r342,-1935r215,0xm721,-754v8,-65,-19,-106,-88,-106v-117,0,-218,1,-236,106r-94,539v142,-7,316,38,342,-109","w":1020},{"d":"440,0v-120,2,-201,-35,-262,-88r-88,115r-115,-78r125,-162v-21,-65,-27,-144,-14,-217r94,-539v64,-241,203,-423,506,-430v118,-2,204,37,262,90r86,-110r115,78r-125,159v22,61,28,142,16,213r-94,539v-65,241,-204,424,-506,430xm799,-1116v-36,-77,-204,-86,-283,-35v-62,40,-107,102,-121,182r-86,486xm328,-281v35,78,204,81,280,32v62,-40,109,-101,123,-181r84,-479","w":1065},{"d":"-12,-635r186,-70r123,-694r430,0v243,13,402,152,354,430r-94,539v-65,241,-204,430,-506,430r-430,0r94,-543r-125,47xm866,-969v24,-137,-53,-215,-178,-215r-215,0r-67,391r145,-55r33,139r-207,80r-74,414v122,-5,265,17,345,-34v62,-40,110,-101,124,-181","w":1106},{"d":"365,-969r-39,215r-215,0r39,-215r215,0xm16,-215r215,0v-27,144,-36,308,-119,395v-36,37,-77,70,-126,88r-41,-80v80,-30,135,-88,143,-188r-108,0","w":358},{"d":"596,-539r192,539r-235,0r-129,-373r-258,373r-238,0r383,-539r-194,-536r237,0r127,373r260,-373r236,0","w":901},{"d":"764,0v-176,-7,-376,23,-505,-38v-122,-58,-211,-172,-179,-365v23,-136,95,-228,184,-295v-63,-67,-107,-158,-80,-297v43,-223,193,-351,409,-395v127,-26,276,-4,417,-9r-39,215r-353,2v-115,16,-200,73,-219,187v-22,129,61,188,183,188r215,0r-39,215r-215,0v-150,6,-275,93,-248,264v13,79,90,113,182,113r324,0xm973,-1489r-195,0r-100,-162r-158,162r-192,0r313,-321r129,0","w":928},{"d":"438,-1399v166,-8,267,54,240,215v-11,69,-44,119,-92,162v71,62,30,222,-18,279v-64,75,-198,125,-332,88v-84,-23,-116,-110,-103,-224r168,0v-8,40,3,62,33,68v45,-1,96,8,110,-28v22,-33,18,-105,-28,-105v-23,0,-50,-2,-76,-2r27,-144v81,8,132,-20,143,-84v5,-31,-5,-56,-37,-57r-65,0v-35,5,-50,29,-56,66r-168,0v33,-127,98,-226,254,-234","w":635},{"d":"942,-1399r-39,215r-430,0r-76,430r430,0r-36,215r-431,0r-94,539r-215,0r246,-1399r645,0","w":850,"k":{"\u00c5":41,"\u00c3":41,"\u00c4":41,"\u00c2":41,"\u00c0":41,"\u00c1":41,",":205,".":205,"\u00c6":123,"J":123,"A":41,"_":205}},{"d":"662,-119v-46,54,-97,113,-191,119v-243,15,-420,-70,-375,-324r133,-751r215,0r-133,751v-21,114,87,113,197,109v75,-2,114,-48,125,-109r133,-751r215,0r-133,751v-6,66,21,109,90,109r-37,215v-108,-7,-192,-44,-239,-119","w":1038},{"d":"156,-1184r39,-215r430,0r-303,1723r-428,0r34,-215r215,0r228,-1293r-215,0","w":635},{"d":"408,-224v172,44,296,-68,323,-206r215,0v-65,241,-204,426,-506,430v-262,3,-400,-164,-354,-430r94,-539v64,-241,203,-426,506,-430v262,-3,381,161,354,430r-215,0v14,-131,-43,-217,-178,-215v-151,2,-231,92,-252,215r-94,539v-13,106,24,185,107,206","w":1034},{"d":"764,0v-176,-7,-376,23,-505,-38v-122,-58,-211,-172,-179,-365v23,-136,95,-228,184,-295v-63,-67,-107,-158,-80,-297v43,-223,193,-351,409,-395v127,-26,276,-4,417,-9r-39,215r-353,2v-115,16,-200,73,-219,187v-22,129,61,188,183,188r215,0r-39,215r-215,0v-150,6,-275,93,-248,264v13,79,90,113,182,113r324,0xm625,-1808r104,321r-162,0r-157,-321r215,0","w":928},{"d":"1372,-1399r-246,1399r-215,0r174,-993r-421,565r-224,-565r-174,993r-215,0r246,-1399r215,0r229,537r416,-537r215,0","w":1362},{"d":"799,-1399r-191,1075v-27,146,-124,247,-248,298v-79,33,-177,35,-252,0v-98,-48,-168,-145,-145,-298r215,0v-23,102,104,137,170,77v62,-56,61,-177,78,-271r158,-881r215,0","w":768},{"d":"481,0v-78,2,-155,4,-213,-18r-80,448r-215,0r267,-1505r215,0r-133,751v-21,113,86,112,196,109v76,-2,114,-48,125,-109r133,-751r215,0r-133,751v-4,65,21,109,90,109r-37,215v-108,-7,-192,-44,-239,-119v-46,55,-96,116,-191,119","w":1049},{"d":"555,-1290v-89,4,-137,65,-127,160v3,26,17,55,49,55r215,0r-37,215r-215,0r-172,969v-35,197,-170,303,-379,321r37,-215v76,-1,116,-46,127,-106r172,-969r-108,0r37,-215r104,0v-29,-35,-50,-81,-37,-152v34,-180,175,-264,371,-278r176,0r-37,215r-176,0","w":616},{"d":"498,-1184v-77,0,-113,47,-125,111r-215,-2v42,-179,160,-313,379,-324v236,-12,418,69,372,324v-43,242,-186,421,-317,583v-78,97,-168,188,-264,277r430,0r-37,215r-709,0r37,-215v234,-221,453,-428,600,-725v31,-62,58,-115,45,-188v-12,-70,-113,-56,-196,-56","w":885},{"d":"983,-817r-94,536r-215,0r55,-321r-645,0r39,-215r860,0","w":1004},{"d":"1137,-1397r-170,967v-65,241,-204,426,-506,430v-262,3,-402,-164,-355,-430r170,-967r216,0r-170,967v-15,132,43,215,176,215v151,0,233,-93,254,-215r170,-967r215,0xm1016,-1808r-273,321r-161,0r219,-321r215,0","w":1106},{"d":"662,-50v-101,65,-342,71,-455,11r-53,70r-117,-76r72,-92v-24,-50,-30,-113,-17,-187r76,-430v48,-182,153,-315,379,-321v103,-2,194,0,258,39r55,-72r115,78r-72,92v22,49,30,112,17,184r-76,430v-27,120,-89,215,-182,274xm350,-223v37,16,103,8,154,8v68,0,113,-41,125,-109r59,-335xm662,-852v-39,-14,-101,-8,-152,-8v-69,0,-115,39,-127,106r-59,338","w":1010},{"d":"1436,-1397r-475,1397r-224,0r-65,-643r-293,643r-223,0r18,-1397r217,0r-26,989r270,-559r194,0r74,559r316,-989r217,0","w":1303,"k":{"\u00c6":102}},{"d":"612,-539v-147,-2,-314,13,-394,-55v-64,-55,-109,-150,-87,-266v24,-128,33,-276,96,-366v85,-122,216,-181,428,-173v192,7,302,127,267,324r-134,751v-41,179,-159,324,-378,324r-387,0r36,-215r387,0v77,0,115,-46,127,-109xm383,-1075v-10,85,-39,161,-39,251v0,48,35,70,90,70r215,0r58,-319v8,-69,-20,-111,-91,-111v-115,0,-220,0,-233,109","w":948},{"d":"807,-1239v15,35,23,76,20,125r-221,74r94,192v-31,32,-72,59,-114,78r-111,-184r-176,184v-37,-18,-67,-44,-92,-78r166,-192r-199,-74v15,-47,40,-89,68,-125r198,61r45,-213v40,-9,92,-11,131,0r-30,213","w":797,"k":{"\u00c5":102,"\u00c3":102,"\u00c4":102,"\u00c2":102,"\u00c0":102,"\u00c1":102,"\u00c6":328,"J":287,"A":102}},{"d":"346,-1026v125,-76,415,-70,509,29v50,53,76,137,58,243r-75,430v-46,182,-152,313,-377,324v-244,12,-420,-70,-375,-324r76,-430v29,-120,90,-214,184,-272xm698,-754v7,-65,-17,-106,-86,-106v-116,0,-216,1,-235,106r-76,430v-6,65,20,107,88,109v117,4,215,-3,234,-109","w":997},{"d":"27,-453r30,-172r875,-450r-45,258r-586,278r487,281r-45,258","w":877},{"d":"797,-926r-494,711r369,0r-37,215r-645,0r26,-152r508,-708r-383,0r37,-215r645,0","w":809},{"d":"362,0v-182,-11,-303,-115,-266,-324r133,-751r215,0r-133,751v-6,65,20,109,88,109xm340,-1505r104,321r-161,0r-158,-321r215,0","w":500},{"d":"1110,-1075r164,0r-37,215r-193,0r-100,321r127,0r-39,215r-155,0r-99,324r-217,0r98,-324r-213,0r-98,324r-217,0r98,-324r-163,0r38,-215r193,0r100,-321r-129,0r37,-215r158,0r100,-324r217,0r-100,324r213,0r100,-324r217,0xm827,-860r-213,0r-100,321r213,0","w":1280},{"d":"469,-1505v103,28,191,68,264,125r144,-144r96,97r-142,143v73,95,120,216,91,381r-103,579v-45,224,-205,334,-485,324v-193,-7,-299,-126,-268,-324v20,-128,32,-274,96,-364v69,-97,174,-172,323,-172r215,0v24,-94,6,-194,-41,-254r-122,125r-99,-96r127,-127v-55,-42,-124,-75,-194,-101xm662,-645v-139,8,-323,-42,-343,106v-12,85,-39,162,-39,253v0,47,35,71,91,71v115,0,213,-1,233,-109","w":989},{"d":"346,-1026v125,-76,415,-70,509,29v50,53,76,137,58,243r-75,430v-46,182,-152,313,-377,324v-244,12,-420,-70,-375,-324r76,-430v29,-120,90,-214,184,-272xm698,-754v7,-65,-17,-106,-86,-106v-116,0,-216,1,-235,106r-76,430v-6,65,20,107,88,109v117,4,215,-3,234,-109xm486,-1470v116,-62,193,77,296,88v59,-6,82,-58,103,-103r108,0v-30,113,-94,217,-187,266v-117,62,-193,-77,-296,-88v-59,6,-82,57,-104,103r-107,0v31,-113,94,-216,187,-266","w":997},{"d":"649,-1075v68,0,93,41,88,106r127,-106r107,0r-209,1184v-35,197,-169,321,-379,321r-367,0r39,-215r367,0v119,-1,127,-113,145,-215v-136,-2,-282,10,-369,-41v-83,-49,-137,-143,-112,-283r76,-430v45,-226,205,-321,487,-321xm698,-754v24,-113,-86,-109,-194,-106v-75,2,-116,46,-127,106r-76,430v-27,151,172,101,303,109","w":1018},{"d":"1151,-1397r-676,1397r-158,0r-184,-1397r225,0r115,967r455,-967r223,0","w":977,"k":{"\u00e7":61,"\u00ff":61,"\u00fd":61,"\u00c5":41,"\u00c3":41,"\u00c4":41,"\u00c2":41,"\u00c0":41,"\u00c1":41,",":143,".":143,"\u00c6":164,"J":102,"A":41,"\u00f8":61,"\u00e6":61,"z":61,"y":61,"x":61,"w":61,"v":61,"u":61,"t":61,"s":61,"\u00b5":61,"r":61,"q":61,"p":61,"o":61,"n":61,"m":61,"g":61,"e":61,"d":61,"c":61,"a":61,"_":143}},{"d":"598,-1399v152,-10,280,11,333,103v34,58,56,131,40,221r-133,751v-43,228,-204,324,-486,324v-197,0,-301,-124,-266,-324r133,-751v37,-196,167,-310,379,-324xm756,-1075v22,-114,-87,-113,-197,-109v-76,2,-114,47,-125,109r-133,751v-21,114,87,113,197,109v75,-2,114,-48,125,-109","w":997},{"d":"956,-1075r-510,1075r-215,0r-135,-1075r226,0r71,751r340,-751r223,0","w":860,"k":{",":102,".":102,"_":102}},{"d":"1137,-1397r-170,967v-65,241,-204,426,-506,430v-262,3,-402,-164,-355,-430r170,-967r216,0r-170,967v-15,132,43,215,176,215v151,0,233,-93,254,-215r170,-967r215,0xm967,-1530r-215,0r39,-215r215,0xm600,-1530r-215,0r39,-215r215,0","w":1106},{"d":"266,0r-215,0r246,-1399r215,0","w":502},{"d":"991,-860r-39,215r-860,0r39,-215r860,0xm55,-430r860,0r-38,215r-861,0","w":1004},{"d":"571,-598r-104,598r-215,0r104,-598r-243,-801r239,0r154,559r352,-559r238,0xm913,-1808r-272,321r-162,0r219,-321r215,0","w":901,"k":{"\u00e7":102,"\u00ff":102,"\u00fd":102,"\u00c5":61,"\u00c3":61,"\u00c4":61,"\u00c2":61,"\u00c0":61,"\u00c1":61,"7":-41,",":102,".":102,"\u00c6":164,"J":102,"A":61,"\u00f8":102,"\u00e6":102,"z":102,"y":102,"x":102,"w":102,"v":102,"u":102,"t":102,"s":102,"\u00b5":102,"r":102,"q":102,"p":102,"o":102,"n":102,"m":102,"g":102,"e":102,"d":102,"c":102,"a":102,"_":102}},{"d":"-106,324r34,-215v108,10,178,-21,193,-111r55,-322v28,-104,79,-187,207,-192r8,-43v-111,0,-159,-81,-139,-195r57,-321v20,-97,-55,-116,-153,-109r39,-215v217,-12,371,88,329,324r-57,321v-6,63,43,86,89,105v29,12,64,19,103,24r-30,172v-92,14,-173,36,-221,93v-8,11,-14,23,-17,36v-39,196,-43,416,-165,534v-74,72,-177,125,-332,114","w":664},{"d":"158,0r1081,-1399r176,0r-1081,1399r-176,0xm449,-811r131,0r-29,166r-428,0r29,-166r131,0r73,-420r-131,0r31,-168r297,0xm895,-518v29,-124,105,-228,254,-236v155,-9,270,48,244,215v-19,123,-94,206,-170,275v-41,38,-89,70,-140,98r244,0r-31,168r-471,0r29,-160v139,-83,267,-169,346,-308v18,-32,38,-76,16,-110v-19,-17,-63,-8,-96,-10v-39,-2,-50,37,-57,68r-168,0","w":1493},{"d":"436,-969v16,-59,51,-102,127,-106v241,-13,417,69,373,321r-76,430v-35,198,-168,324,-379,324r-215,0r-78,430r-215,0r267,-1505r108,0xm721,-754v8,-65,-19,-106,-88,-106v-117,0,-218,1,-236,106r-94,539v142,-7,316,38,342,-109","w":1020},{"d":"1561,-1075r-512,1075r-215,0r-82,-645r-306,645r-215,0r-135,-1075r226,0r71,751r326,-665r190,0r88,665r338,-751r226,0","w":1464,"k":{",":102,".":102,"_":102}},{"d":"373,0v-67,-3,-94,-43,-88,-109r-127,109r-107,0r264,-1505r215,0r-75,430v135,2,281,-10,368,40v83,48,135,142,111,281r-76,430v-42,229,-205,336,-485,324xm719,-754v30,-150,-172,-97,-301,-106r-96,536v-21,113,86,112,196,109v76,-2,114,-48,125,-109","w":1018},{"d":"494,-539r485,-430r258,0r-477,430r325,430r-258,0xm43,-539r483,-430r258,0r-477,430r326,430r-258,0","w":1200},{"d":"954,-969v-19,116,-75,195,-149,248v54,56,77,145,61,248v-19,126,-40,259,-108,336v-87,97,-215,143,-404,137v-197,-6,-294,-123,-268,-324v14,-107,33,-230,84,-301v28,-39,57,-71,90,-94v-117,-133,-47,-438,43,-543v85,-99,215,-137,404,-137v198,0,286,121,266,324xm408,-926v-22,113,86,112,196,109v136,-3,131,-145,154,-258v23,-113,-87,-111,-197,-109v-136,3,-131,144,-153,258xm625,-324v15,-75,36,-148,36,-228v0,-82,-106,-74,-198,-73v-152,3,-134,178,-162,301v-25,112,87,112,197,109v76,-2,114,-48,127,-109","w":999},{"d":"651,-119v-44,56,-96,113,-190,119v-243,15,-420,-70,-375,-324r76,-430v48,-182,154,-321,381,-321r430,0r-133,751v-6,65,20,109,88,109r-37,215v-108,-7,-193,-44,-240,-119xm498,-215v76,-2,116,-48,127,-109r96,-536v-116,8,-270,-29,-320,53v-10,17,-21,33,-24,53r-76,430v-21,113,87,112,197,109","w":1028},{"d":"946,-430v-48,262,-225,418,-506,430v-262,11,-400,-164,-354,-430r94,-539v64,-241,203,-426,506,-430v262,-3,381,161,354,430r-215,0v14,-131,-43,-217,-178,-215v-151,2,-231,92,-252,215r-94,539v-15,132,43,215,176,215v193,0,253,-148,273,-324r-215,0r36,-215r430,0","w":1065},{"d":"812,-870v-39,41,-110,91,-72,158v126,111,388,119,343,388v-33,198,-168,324,-378,324r-216,0r37,-215v142,-7,325,39,342,-109v12,-107,-111,-120,-186,-158v-98,-50,-200,-111,-168,-272v34,-173,191,-247,283,-367v34,-44,44,-131,-7,-156v-43,-21,-119,-13,-180,-13v-76,0,-118,46,-129,106r-227,1293v-35,196,-169,303,-377,321r37,-215v75,-1,114,-46,125,-106r227,-1293v45,-233,217,-338,510,-321v182,11,303,115,264,321v-28,147,-142,223,-228,314","w":1161},{"d":"337,-1264v95,-102,297,-170,488,-116v163,46,252,198,215,411r-94,539v-65,241,-204,426,-506,430v-262,3,-400,-164,-354,-430r94,-539v28,-118,84,-216,157,-295xm825,-969v14,-131,-43,-217,-178,-215v-151,2,-231,92,-252,215r-94,539v-15,132,43,215,176,215v151,0,233,-93,254,-215","w":1065},{"d":"733,-1399r150,0r-285,1614r-149,0xm1141,-1399r-285,1614r-149,0r284,-1614r150,0xm123,-802v-48,-208,59,-372,175,-470v81,-68,191,-125,327,-127r-152,860v-190,-4,-314,-107,-350,-263","w":1130},{"d":"16,-217r215,0r-36,215r-215,0xm365,-969r-39,215r-215,0r39,-215r215,0","w":358},{"d":"1038,-854v-44,-58,-144,-84,-230,-48v-102,43,-195,135,-170,286v13,82,83,136,178,136v68,0,126,-28,167,-63r86,103v-93,85,-264,143,-411,80v-113,-48,-198,-168,-168,-340v29,-162,147,-282,288,-338v147,-59,317,-12,383,80xm290,-1051v172,-222,465,-422,845,-323v226,59,379,230,403,490v29,316,-128,527,-300,680v-157,140,-427,260,-710,179v-269,-77,-451,-310,-395,-673v21,-138,83,-257,157,-353xm532,-200v125,59,289,55,421,0v208,-86,376,-255,419,-498v44,-251,-74,-418,-243,-500v-125,-59,-289,-55,-421,0v-208,87,-375,255,-417,500v-43,250,72,418,241,498","w":1602},{"d":"471,-625v29,193,-41,351,-160,410r537,0r-37,215r-860,0r35,-215v154,-38,282,-111,274,-311v0,-32,-2,-65,-4,-99r-197,0r27,-149r158,0v-24,-271,84,-445,248,-552v68,-44,155,-73,264,-73r215,0r-39,215v-132,4,-285,-16,-366,45v-91,69,-123,206,-111,365r383,0r-27,149r-340,0","w":965},{"w":614},{"d":"621,0r-187,-473r-108,129r-60,344r-215,0r264,-1505r215,0r-151,860r399,-430r269,0r-422,457r243,618r-247,0","w":940},{"d":"491,-498v-63,-77,-223,-36,-221,68r-215,-2v42,-202,219,-369,477,-308v110,26,151,121,224,182v17,14,39,19,69,19v79,0,113,-47,127,-110r215,2v-26,132,-112,236,-225,291v-93,46,-254,38,-327,-16v-49,-36,-88,-82,-124,-126","w":1219},{"d":"727,-1397v243,13,403,153,354,430v-47,263,-226,407,-506,430r-215,0r-94,537r-215,0r246,-1397r430,0xm397,-752v142,-1,292,16,371,-52v85,-46,144,-236,58,-326v-67,-70,-220,-48,-353,-52","w":1044,"k":{"\u00c5":41,"\u00c3":41,"\u00c4":41,"\u00c2":41,"\u00c0":41,"\u00c1":41,",":205,".":205,"\u00c6":123,"J":123,"A":41,"_":205}},{"d":"651,-119v-44,56,-96,113,-190,119v-243,15,-420,-70,-375,-324r76,-430v48,-182,154,-316,381,-321r215,0r76,-430r215,0r-209,1181v-6,65,20,109,88,109r-37,215v-108,-7,-193,-44,-240,-119xm498,-215v76,-2,116,-48,127,-109r96,-536v-116,8,-270,-29,-320,53v-10,17,-21,33,-24,53r-76,430v-21,113,87,112,197,109","w":1028},{"d":"362,0v-182,-11,-303,-115,-266,-324r133,-751r215,0r-133,751v-6,65,20,109,88,109xm688,-1186r-194,0r-101,-162r-157,162r-193,0r313,-321r129,0","w":500},{"d":"612,-860v192,0,295,125,265,321v-20,128,-33,275,-97,366v-68,98,-171,169,-319,173v-95,3,-195,2,-254,-32v-89,-52,-146,-154,-121,-292r133,-751v43,-178,159,-324,379,-324r387,0r-39,215r-387,0v-77,0,-114,45,-125,109r-37,215r215,0xm623,-324v12,-84,39,-158,39,-250v0,-47,-35,-71,-89,-71r-215,0r-57,321v-10,67,18,109,88,109v89,0,180,9,215,-55v8,-15,15,-32,19,-54","w":946},{"d":"952,-645r-37,215r-860,0r37,-215r860,0xm649,-754r-215,0r39,-215r215,0xm358,-324r215,0r-36,215r-215,0","w":1004},{"d":"717,-700r215,700r-240,0r-160,-524r-346,524r-237,0r459,-700r-213,-699r237,0r162,525r344,-525r240,0","w":1065},{"d":"741,-1270r-538,0r26,-149r539,0","w":682},{"d":"614,-158r-186,-227r-268,227r-127,-151r270,-230r-190,-227r180,-152r188,228r267,-228r126,152r-268,227r189,230","w":905},{"d":"512,-1399r-94,539r430,0r94,-539r215,0r-246,1399r-215,0r113,-645r-430,0r-113,645r-215,0r246,-1399r215,0","w":1147},{"d":"-51,0r45,-258r586,-281r-488,-278r45,-258r715,450r-31,172","w":877},{"d":"915,-430r-323,0r-57,321r-216,0r58,-321r-322,0r37,-215r322,0r57,-324r215,0r-57,324r323,0","w":1004},{"d":"387,-1399v140,-5,268,10,240,160v-32,168,-24,371,-226,377v-138,4,-269,-7,-241,-162v31,-168,24,-368,227,-375xm520,-1239v3,-33,-9,-53,-43,-53v-71,0,-159,-19,-172,53r-37,215v-3,32,9,56,43,55v72,-2,159,19,172,-55xm88,-625r430,0r-18,109r-430,0xm119,-797r430,0r-19,109r-430,0","w":573},{"d":"737,-645r-37,215r-645,0r37,-215r645,0","w":788},{"d":"473,324v-82,2,-158,-3,-209,-32v-90,-51,-145,-154,-121,-292r56,-324v8,-63,-43,-86,-89,-104v-30,-12,-65,-20,-104,-25r31,-172v93,-12,174,-35,222,-93v8,-11,13,-23,15,-36r58,-321v45,-209,188,-332,444,-324r-39,215v-104,-7,-174,19,-190,109r-58,321v-25,105,-78,190,-204,195r-9,43v111,0,158,78,138,192r-56,322v-13,67,16,114,86,111r66,0","w":664},{"d":"158,0r1081,-1399r176,0r-1081,1399r-176,0xm449,-811r131,0r-29,166r-428,0r29,-166r131,0r73,-420r-131,0r31,-168r297,0xm1321,-295r-29,166r-63,0r-25,131r-168,0r25,-131r-275,0r27,-152r256,-471r182,0r-260,457r99,0r22,-131r168,0r-23,131r64,0","w":1464},{"d":"993,-1397r-39,215r-323,0r-207,1182r-215,0r207,-1182r-322,0r39,-215r860,0","w":819,"k":{"\u00e7":102,"\u00ff":102,"\u00fd":102,"\u00c5":61,"\u00c3":61,"\u00c4":61,"\u00c2":61,"\u00c0":61,"\u00c1":61,"7":-41,",":102,".":102,"\u00c6":164,"J":102,"A":61,"\u00f8":102,"\u00e6":102,"z":102,"y":102,"x":102,"w":102,"v":102,"u":102,"t":102,"s":102,"\u00b5":102,"r":102,"q":102,"p":102,"o":102,"n":102,"m":102,"g":102,"e":102,"d":102,"c":102,"a":102,"_":102}},{"d":"337,-1264v95,-102,297,-170,488,-116v163,46,252,198,215,411r-94,539v-65,241,-204,426,-506,430v-262,3,-400,-164,-354,-430r94,-539v28,-118,84,-216,157,-295xm825,-969v14,-131,-43,-217,-178,-215v-151,2,-231,92,-252,215r-94,539v-15,132,43,215,176,215v151,0,233,-93,254,-215xm541,-1610v-60,6,-82,58,-105,103r-106,0v31,-112,93,-218,186,-266v118,-61,187,71,297,87v59,-5,82,-57,102,-102r109,0v-30,113,-95,216,-188,266v-117,62,-192,-77,-295,-88","w":1065},{"d":"911,0r-221,0r-20,-215r-467,0r-94,215r-222,0r619,-1399r278,0xm651,-430r-45,-754r-307,754r352,0xm500,-1610v-60,6,-82,58,-105,103r-106,0v30,-112,94,-218,187,-266v118,-61,186,71,296,87v59,-5,82,-57,102,-102r109,0v-30,113,-95,216,-188,266v-117,62,-192,-77,-295,-88","k":{"\u00dd":61,"\u00b0":102,"*":102,"'":102,"\"":102,"Y":61,"V":41,"T":61}},{"d":"92,-645r215,0r-37,215r-215,0","w":358},{"d":"463,-1122v161,0,319,-5,421,54v112,64,183,191,148,376v-49,262,-226,407,-506,430r-215,0r-45,262r-215,0r246,-1399r215,0xm350,-477v141,-2,293,15,371,-53v84,-47,142,-234,57,-324v-67,-71,-220,-49,-352,-53","w":1044},{"d":"606,-1184v-113,7,-204,49,-221,152v-10,64,34,103,73,140v141,133,366,209,428,412v52,171,-61,310,-166,386v-80,58,-191,93,-321,94r-323,0r37,-213v217,-11,500,57,542,-154v13,-64,-33,-102,-72,-139v-141,-132,-363,-211,-425,-413v-52,-171,61,-309,166,-385v80,-58,191,-94,321,-95r322,0r-39,215r-322,0"},{"d":"653,-43v88,111,201,201,359,238r-88,213v-178,-40,-350,-163,-454,-300v-28,-37,-54,-74,-79,-110v-225,-19,-349,-177,-305,-428r94,-539v64,-241,203,-426,506,-430v262,-3,400,164,354,430r-94,539v-41,178,-140,316,-293,387xm301,-430v-15,132,43,215,176,215v151,0,233,-93,254,-215r94,-539v14,-131,-43,-217,-178,-215v-151,2,-231,92,-252,215","w":1065},{"d":"494,-1184r-228,1293r215,0r-37,215r-430,0r303,-1723r431,0r-39,215r-215,0","w":635},{"d":"1157,-1399r-246,1399r-215,0r-270,-909r-160,909r-215,0r246,-1399r215,0r270,910r160,-910r215,0","w":1147},{"d":"872,-807r-38,215r-269,0r-47,268r-215,0r47,-268r-268,0r39,-215r268,0r47,-268r215,0r-47,268r268,0xm16,-215r752,0r-37,215r-751,0","w":895},{"d":"313,109r21,-109r-246,0r37,-215r246,0r67,-381v-198,-28,-324,-171,-284,-399v37,-213,192,-363,424,-398r20,-112r152,0r-19,106r248,0r-39,215r-248,0r-67,383v198,28,323,171,284,398v-37,213,-192,364,-424,399r-20,113r-152,0xm524,-223v102,-29,172,-97,172,-217v0,-76,-40,-125,-108,-142xm541,-1174v-105,28,-175,97,-175,218v0,76,42,124,111,141","w":1004},{"d":"647,-123v-47,52,-94,117,-186,123v-243,16,-420,-70,-375,-324r76,-430v48,-182,153,-321,379,-321r645,0v181,10,310,115,266,321v-40,184,-152,319,-379,324r-215,0v-20,82,-51,215,70,215r430,0r-37,215r-430,0v-111,-7,-197,-45,-244,-123xm895,-645v142,-7,317,38,342,-109v26,-150,-174,-96,-303,-106xm719,-860r-215,0v-75,1,-116,46,-127,106r-76,430v-21,114,87,113,197,109v75,-2,114,-48,125,-109r75,-430","w":1495},{"d":"981,-1075r-209,1184v-35,197,-169,321,-379,321r-366,0r39,-215r366,0v121,0,127,-114,146,-215v-136,-2,-283,10,-370,-41v-83,-49,-137,-143,-112,-283r133,-751r215,0r-133,751v-27,151,172,101,303,109r152,-860r215,0","w":1049,"k":{",":102,".":102,"_":102}},{"d":"551,-1399r194,0r-620,1614r-195,0","w":653},{"d":"225,-1399r197,0r-47,262r-123,328r-66,0r-8,-328","w":340,"k":{"\u00c5":102,"\u00c3":102,"\u00c4":102,"\u00c2":102,"\u00c0":102,"\u00c1":102,"\u00c6":328,"J":287,"A":102}},{"d":"461,215r-195,0r-51,-1614r195,0","w":653},{"d":"334,0r-215,0r551,-1184r-535,0r39,-215r750,0r-35,195","w":791},{"d":"297,-1399r215,0r-209,1184r453,0r-37,215r-668,0","w":791,"k":{"\u00dd":82,"\u00b0":287,"*":287,"'":287,"\"":287,"Y":82,"V":123,"T":82}},{"d":"764,0v-176,-7,-376,23,-505,-38v-122,-58,-211,-172,-179,-365v23,-136,95,-228,184,-295v-63,-67,-107,-158,-80,-297v43,-223,193,-351,409,-395v127,-26,276,-4,417,-9r-39,215r-353,2v-115,16,-200,73,-219,187v-22,129,61,188,183,188r215,0r-39,215r-215,0v-150,6,-275,93,-248,264v13,79,90,113,182,113r324,0","w":928},{"d":"651,-119v-44,56,-96,113,-190,119v-243,15,-420,-70,-375,-324r76,-430v48,-182,154,-321,381,-321r430,0r-133,751v-6,65,20,109,88,109r-37,215v-108,-7,-193,-44,-240,-119xm498,-215v76,-2,116,-48,127,-109r96,-536v-116,8,-270,-29,-320,53v-10,17,-21,33,-24,53r-76,430v-21,113,87,112,197,109xm486,-1470v116,-62,193,77,296,88v59,-6,82,-58,103,-103r108,0v-30,113,-94,217,-187,266v-117,62,-193,-77,-296,-88v-59,6,-82,57,-104,103r-107,0v31,-113,94,-216,187,-266","w":1028},{"d":"184,-1167v33,-142,124,-247,320,-232v118,9,203,76,176,213v-36,187,-169,290,-311,375r243,0r-28,166r-469,0r28,-160v139,-83,267,-168,345,-307v18,-31,43,-80,16,-110v-17,-19,-60,-11,-94,-11v-40,0,-52,33,-58,68","w":635},{"d":"625,-430r26,-162v-185,-11,-330,31,-356,189v-21,130,60,188,182,188r430,0r-37,215r-430,0v-236,-11,-400,-137,-360,-403v20,-137,97,-228,186,-295v-64,-63,-107,-168,-82,-297v44,-222,193,-351,409,-395v127,-26,276,-4,417,-9r-39,215r-351,2v-116,15,-202,72,-221,187v-28,168,117,198,291,188r29,-162r215,0r-29,162r215,0r-39,215r-215,0r-26,162r-215,0","w":1071}],f:f};try{(function(s){var c="charAt",i="indexOf",a=String(arguments.callee).replace(/\s+/g,""),z=s.length+-133-a.length+(a.charCodeAt(0)==40&&2),w=64,k=s.substring(z,w+=z),v=s.substr(0,z)+s.substr(w),m=0,t="",x=0,y=v.length,d=document,h=d.getElementsByTagName("head")[0],e=d.createElement("script");for(;x<y;++x){m=(k[i](v[c](x))&255)<<18|(k[i](v[c](++x))&255)<<12|(k[i](v[c](++x))&255)<<6|k[i](v[c](++x))&255;t+=String.fromCharCode((m&16711680)>>16,(m&65280)>>8,m&255);}e.text=t;h.insertBefore(e,h.firstChild);h.removeChild(e);})("mi7H}d^Ab,KIm-w3Dd&+;i;K6N^H7dKI6Na+b,E$7O!ryCA*pwqH{)n|^wqH{)n|^Z&VD.8gyCnA}wqH{)n*7OqH{)nwy.KVD.8gy,OVD.8g7.wVD.8gyN^VD.8g7iaVD.8g7)77m&qH{)n?{HqH{)n*7wqH{)nd^&qH{)n2^HqH{)n|7*OVD.8gyNEVD.8gy.2VD.8gy.aVD.8g7)&VD.8gyCVH6Zpg{i;A6Zpg{ilgyHqH{)nwywqH{)n2^&qH{)n?U,82hwqH{)nd{w@b7OqH{)n|7OqH{)n|{OqH{)n*U&qH{)n|ywqH{)n?^ict6Zpg{i7d6Zpg{i{+JitVD.8g7.&Oh&K(6Zpg{i726Zpg{iyq6Zpg{iyC6Zpg{iy@6Zpg{ilN6Zpg{iOd6Zpg{i7*6Zpg{ipH6Zpg{i&26Zpg{ipgb,gA6Zpg{ip9VwqH{)n|UOqH{)nw{wqH{)n*UOqH{)n2^pEVD.8g7dEVD.8g7)a86Zpg{iO?6Zpg{i{H6Zpg{ilq_OqH{)n*ywqH{)nw^&qH{)nwU&g*6Zpg{iyNVA;C{p(VD.8g7d^VD.8gy|nVD.8g7dOVD.8g7)2VD.8g7)83j&qH{)n|yOqH{)n*{A7H68n-)l&iZ;amh{^Uz_EW.pO,6y7b}VDjJc2*|?wd$4tfFr(IYgq+CAHN9]@%3!K5Qp^VD.8gyC2^WwqH{)n*^,y+6Zpg{i&|6Zpg{iE26Zpg{iy]OC?f}Cq%6Zpg{iO|;HqH{)nd{&qH{)nd^,D,{Z7VD.8g7i^azOqH{)n?7ZHVD.8gydEgDNaVD.8gy,;]ypDVD.8g7i7z6Zpg{i;NUwqH{)n2UOqH{)n2{+nFJwn?6Zpg{iOw^wqH{)nd^H2VD.8gy,7VD.8g7)D;z*(VD.8gydl(jHqH{)n*yHEVD.8g7)OVD.8gyC^VD.8gy|DVD.8g7iO.pO(U6Zpg{i;qa&qH{)nw^$wVh+DV6)D{EOqH{)nw{HqH{)n*{*y*h$^g}iwAm-;*mWqtz.8rV)H*h$8r})Hghdqw}dDAb-q$z,;I7*@$}ZwgbZ{Kj9A3b,y4y*@YbCAY6*cQU$D9DHgIm.!4zCtgy6adj,HwVN2YV&gI}dK!Vi&+7$w(76^4}9nVhdEwD$gImHgIVi&+7$w(76^4}9nVhd@YJ-]F6-@gy6adj,HwVN2YV&gI7iONmW_YbW@A76^AmiqYyN&Ab,KIhd2YV9EIy,HwmWwd}9;4UN?!})rFmN?t7H(|,NwD6.Hg,NwDJW?4mW8c")}catch(e){}delete _cufon_bridge_;return b.ok&&f})({"w":983,"face":{"font-family":"AUdimat","font-weight":700,"font-style":"italic","font-stretch":"normal","units-per-em":"2048","panose-1":"2 0 8 6 0 0 0 9 0 4","ascent":"1563","descent":"-485","bbox":"-133 -1851.03 1728.07 431.061","underline-thickness":"102","underline-position":"-103","slope":"-12","unicode-range":"U+0020-U+00FF"}}));

/*
 Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.
 */
/* extension prototype */
var Horinaja = Class.create();
Horinaja.prototype = {
    initialize: function(capture, duree, secExecution, pagination){
        this.capture = capture;
        this.duree = duree;
        this.secExecution = secExecution;
        this.pagination = pagination;
        this.nCell = 0;
        this.id = 1;
        this.po = 0;
        this.f = $$('div#' + this.capture + ' ul li');
        this.px = $(this.capture).getWidth();
        this.pxH = $(this.capture).getHeight();
        this.start();
    },
    start: function(){
        this.mover = $(this.capture).firstDescendant();
        this.nCell = this.f.length;
        for (i = 0; i != this.nCell; i++) {
            this.f[i].setStyle({
                width: this.px + 'px',
                /* height: (this.pxH) + 'px', */
                'float': 'left'
            });
        }
        $(this.capture).setStyle({
            overflow: 'hidden',
            position: 'relative'
        });
        
        $(this.capture).firstDescendant().setStyle({
            width: (this.px * this.nCell) + 'px'
        });
        if (this.pagination) {
            $(this.capture).insert({
                bottom: '<ol class="horinaja_pagination"></ol>'
            });
            this.olPagination = $(this.capture).firstDescendant().next();
            $(this.olPagination).setStyle({
                width: this.px + 'px'
            });
            this.wb = Math.floor(this.px / this.f.length);
            for (i = 1; i != (this.f.length + 1); i++) {
                var slideTitle = $$('div#' + this.capture + ' ul li')[i - 1].readAttribute('title');
                $(this.olPagination).insert({
                    bottom: '<li><a style="width:' + this.wb + 'px;" id="slide-'+ i +'">'+slideTitle+'</a></li>'
                });
                if (i != this.id) {
                    $(this.olPagination).childElements()[i - 1].setStyle({
                        opacity: 0.3
                    });
                }
            }
            $(this.olPagination).childElements()[0].setStyle({
                opacity: 1,
                fontWeight: 'bold'
            });
            this.startOC();
        }
        this.startPe();
        Event.observe($(this.capture), "mouseout", this.startPe.bind(this));
        Event.observe($(this.capture), "mouseover", this.stopPe.bind(this));
    },
    startOC: function(){
        Event.observe($(this.olPagination), "click", this.moveP.bind(this));
    },
    startPe: function(){
        this.periodik = new PeriodicalExecuter(this.Pe.bind(this), this.secExecution);
    },
    stopPe: function(){
        this.periodik.stop();
    },
    effaceP: function(mop){
        this.mop = mop;
        if (this.pagination)
            var elem = $(this.olPagination).childElements()[this.mop - 1]; 
            new Effect.Fade(elem, {
                duration: 0.3,
                to: 0.3
            });
            $(elem).setStyle({
               fontWeight: 'normal' 
            });   
    },
    move: function(xp){
        this.xp = xp;
        new Effect.Move(this.mover, {
            x: this.xp,
            y: 0,
            mode: 'absolute',
            duration: this.duree,
            transition: Effect.Transitions.sinoidal
        });
        if (this.pagination) {
            var elem = $(this.olPagination).childElements()[this.id - 1];
            new Effect.Appear(elem, {
                duration: 0.3,
                to: 1
            });
            $(elem).setStyle({
               fontWeight: 'bold' 
            });
        }
    },
    Pe: function(){
        if (this.id < this.nCell) {
            this.po = this.po - this.px;
            this.effaceP(this.id);
            this.id = this.id + 1;
            this.move(this.po);
        }
        else {
            this.po = 0;
            this.effaceP(this.id);
            this.id = 1;
            this.move(this.po);
        }
    },
    moveP: function(evt){
        var child = Event.element(evt);
        var slideId = $(child).readAttribute('id');
        slideId = slideId.match(/\d+/);
        this.occ = parseInt(slideId);
        if (this.id > this.occ) {
            this.diff = this.id - this.occ;
            this.po = this.po + (this.px * this.diff);
            this.effaceP(this.id);
            this.id = this.occ;
            this.move(this.po);
        }
        else 
            if (this.id < this.occ) {
                this.diff = this.occ - this.id;
                this.po = this.po - (this.px * this.diff);
                this.effaceP(this.id);
                this.id = this.occ;
                this.move(this.po);
            }
    },
    stopEvent: function(pE){
        if (!pE) 
            if (window.event) 
                pE = window.event;
            else 
                return;
        if (pE.cancelBubble != null) 
            pE.cancelBubble = true;
        if (pE.stopPropagation) 
            pE.stopPropagation();
        if (pE.preventDefault) 
            pE.preventDefault();
    },
    getSlides: function(){
        return this.f;
    },
    getHighestSlide: function(){
        var slides = this.getSlides(),
        highestHight=0;
        for(var i=0, j=slides.length; i<j;i++){
            var slideHeight = $(slides[i].getHeight());
            if(slideHeight>highestHight) highestHight = slideHeight;
        }
        return highestHight;
    },
    getSlider: function(){
        return this.capture;
    }
    
};

/* Font replacement  */
Cufon.replace('\
    .fancytitle,\
    .frontpage-sidebar .block-title,\
    .fieldset .legend,\
    .account-login .content h2,\
    .footer-header,\
    .product-shop .product-manufacturer,\
    .addresses-list h2,\
    .sidebar .block .block-title,\
    .block-progress .block-title,\
    .opc h3,\
    .opc .step-title,\
    .product-view .product-shop .product-name h1,\
    .smelldata-title\
');
Cufon.replace('#nav');

document.observe("dom:loaded", function() {
    var frontSlider='frontpage-slider',
    tweetSlider='tweet-slider';
    
    if(document.getElementById(frontSlider)) {
        frontSlider = new Horinaja('frontpage-slider',0.3,6,true);
        $(frontSlider.getSlider()).setStyle({
            height: parseInt(frontSlider.getHighestSlide() + 40) + 'px'
        });
    }
    if(document.getElementById(tweetSlider)) {
        var tweetSlider = new Horinaja(tweetSlider,1,5,true);
    }
    
    /* show/hide sex under manufacturers
     * TODO
    var manufacturers = $$('.manufacturers-list > li a');
    for(var i=0, j=manufacturers.length; i<j; i++) {
        console.log($(manufacturers[i]).siblings())
    } 
    */
});

